/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.fp.frontend.controller.armas.solicitud;

import com.fp.dto.AbstractDataTransport;
import com.fp.frontend.controller.AbstractController;
import com.fp.frontend.controller.ReportController;
import com.fp.frontend.controller.pcustomer.PersonDetailController;
import com.fp.frontend.helper.MessageHelper;
import com.fp.frontend.utility.MsgControlArmas;
import com.fp.frontend.utility.Utilidades;
import com.fp.persistence.pgeneral.safe.TsafeUserDetail;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author developer2
 */
@ManagedBean
@ViewScoped
public class ReporteAuditoriaAplicacionController extends AbstractController<AbstractDataTransport>{
    public ReporteAuditoriaAplicacionController() throws Exception {
        super(AbstractDataTransport.class);
        // TODO Auto-generated constructor stub
    }
     /**
     * Clase controladora de reportes
     */
    @ManagedProperty(value = "#{reportController}")
    private ReportController reportController;
    /**
     * Fecha a partir de la cual se sacan datos para el reporte
	 *
     */
    private Date fechaInicio;
    /**
     * Fecha a partir de la cual se sacan datos para el reporte
	 *
     */
    private Date fechaFin;
    /**
     * Formato de reporte que se va a generar
	 *
     */
    private String format = "pdf";
    /**
     * Usuario actual logueado en el sistema
	 *
     */
    
    private TsafeUserDetail userDetail;
    /**
     * Nombre del reporte generado en el Alfresco
	 *
     */
    private String nombreReporte;
    /**
     * Getters y Setters
     * @return 
     */
    public Date getFechaInicio() {
        return fechaInicio;
    }

    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    public Date getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    public String getFormat() {
        return format;
    }

    public void setFormat(String format) {
        this.format = format;
    }

    public TsafeUserDetail getUserDetail() {
        return userDetail;
    }

    public void setUserDetail(TsafeUserDetail userDetail) {
        this.userDetail = userDetail;
    }

    public String getNombreReporte() {
        return nombreReporte;
    }

    public void setNombreReporte(String nombreReporte) {
        this.nombreReporte = nombreReporte;
    }

    /**=======================================*/
    @SuppressWarnings("unchecked")
    @Override
    protected void querydatabase() {

    }
     @PostConstruct
    private void postconstruct() {
        this.init();
        // Inicializa autoconsulta
        super.startQuery();
    }
    
    /**
     * Incializa el controlador, cuando se esta utilizando una pagina que utliza
     * el controlador.
     */
    private void init() {
        try {
            userDetail = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
            recperpage = 10000; // Cambiar al # reg a mirar.
            lrecord = new ArrayList<>();
            beanalias = "RPRTEAUDITORIA";
            //centroControlList = CentroControlArmasController.findAll();
            //obtenerCentroControl();
        } catch (Exception e) {
            MessageHelper.setMessageError(e);
        }
    }

    
    /**
     * Metodo para reconsultar en base a una nueva fecha de corte seleccionada
     */
    public void cambioFechaDeCorte(SelectEvent event) {
        querydatabase();
    }
    public ReportController getReportController() {
        return reportController;
    }

    public void setReportController(ReportController reportController) {
        this.reportController = reportController;
    }
    /**
     * Genera un reporte de armas a destruir
     *
     */
    public void generateReport() {
        Calendar fechaActualCldr = Calendar.getInstance();
        Calendar fechaInicioCldr = Calendar.getInstance();
        Calendar fechaFinCldr = Calendar.getInstance();
        fechaInicioCldr.setTime(fechaInicio);
        fechaFinCldr.setTime(fechaFin);
        if (fechaActualCldr.compareTo(fechaInicioCldr) >= 0) {
            if (fechaActualCldr.compareTo(fechaFinCldr) >= 0) {
                if (fechaFinCldr.compareTo(fechaInicioCldr) >= 0) {
                    String filename = "reporte_app_"
                            .concat(Utilidades.armarFormatoFechaSinHora(fechaInicioCldr))
                            .concat("_to_")
                            .concat(Utilidades.armarFormatoFechaSinHora(fechaFinCldr));
                    // Fija parametros del report.
                    HashMap<String, Object> parameters = new HashMap<>();
                    parameters.put("pathLogoIzquierda", "repo:/maia/1/image/comandoconjunto");
                    parameters.put("pathLogoDerecha", "repo:/maia/1/image/selloarmas");

                    try {
                        //Usuario logueado en la aplicacion
                        String nombreUsuario;
                        if (userDetail.getPk().getPersoncode() != null) {
                            nombreUsuario = PersonDetailController.find(userDetail.getPk().getPersoncode().toString()).getName();
                        } else {
                            nombreUsuario = "";
                        }
                        parameters.put("usuario", nombreUsuario);
                        parameters.put("fechaInicio", Utilidades.armarFormatoFechaSinHora(fechaInicioCldr));
                        parameters.put("fechaFin", Utilidades.armarFormatoFechaSinHora(fechaFinCldr));
                        parameters.put("fechaReporte", Utilidades.armarFormatoFechaConHora(fechaActualCldr));

                        String path;
                        path = "armas/reports/reporteAuditoriaAplicacion";
                        //parameters.put("idCentroControl", "TODOS".equalsIgnoreCase(idCentroControl) ? null : idCentroControl);
                        //parameters.put("nombreCentroControl", institucionCentroControl);
                        // Datos del jefe del centro
                        /**
                        if (centroControl.getPersoncode() != null) {
                            TcustPersonDetail supervisorMilitarObj = PersonDetailController.find(centroControl.getPersoncode().toString());
                            String gradoSupMilitar = (supervisorMilitarObj == null || supervisorMilitarObj.getMilitarygrade() == null) ? "" : supervisorMilitarObj.getMilitarygrade() + " - ";
                            parameters.put("nombreJefCentro", (supervisorMilitarObj == null || supervisorMilitarObj.getName() == null) ? "" : gradoSupMilitar + supervisorMilitarObj.getName());
                            parameters.put("personCodeJefCentro", (supervisorMilitarObj == null || supervisorMilitarObj.getPk().getPersoncode() == null) ? "" : supervisorMilitarObj.getPk().getPersoncode());

                        }*/

                        this.reportController.executeXls(path, parameters, format, filename, this.getLoginController());

                    } catch (Exception ex) {
                        MessageHelper.setMessageError(ex);
                    }
                } else {
                    MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_liqeco_fechaInicioMayorAFechaFin"));
                }
            } else {
                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_liqeco_fechaFinMayorAFechaActual"));
            }
        } else {
            MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_liqeco_fechaInicioMayorAFechaActual"));
        }

    }

    
    /**
     * M&eacute;todo para el inicio de flujo. Guardar el reporte creado para su
     * posterior aprobacion en otras instancias del flujo
     */
    @Override
    public void save() {

    }

   
}
