/*
 * 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.dto.Response;
import com.fp.frontend.controller.AbstractController;
import com.fp.frontend.controller.ReportController;
import com.fp.frontend.controller.armas.parametros.CentroControlArmasController;
import com.fp.frontend.controller.armas.parametros.TarmCentroControlJurController;
import com.fp.frontend.controller.pcustomer.PersonAddressController;
import com.fp.frontend.controller.pcustomer.PersonDetailController;
import com.fp.frontend.controller.pgeneral.gene.CatalogDetailController;
import com.fp.frontend.helper.MessageHelper;
import com.fp.frontend.utility.Utilidades;
import com.fp.persistence.parmas.param.TarmCentroControl;
import com.fp.persistence.parmas.param.TarmCentroControlJur;
import com.fp.persistence.pcustomer.gene.TcustPersonAddress;
import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail;
import com.fp.persistence.pgeneral.safe.TsafeUserDetail;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author developer
 */
@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class ReporteTramitesAnuController extends AbstractController<AbstractDataTransport> {
    /**
     * Id del centro de control seleccionado por el usuario
	 *
     */
    private String idCentroControl;
    /**
     * Lista de centros de control de armas
     */
    private List<TarmCentroControl> centroControlList;
       /**
     * Id del tipo de tramite
     */
    private String idEstado;
    private Date fechaInicio;
    private Date fechaFin;
    private String format = "pdf";
        /**
     * Usuario actual logueado en el sistema
	 *
     */
    private TsafeUserDetail userDetail;
    private List<TgeneCatalogDetail> lEstados;
        /**
     * Clase controladora de reportes
     */
    @ManagedProperty(value = "#{reportController}")
    private ReportController reportController;
    private TarmCentroControl centroControl = new TarmCentroControl();
    private String institucionCentroControl = "";
    
    public ReporteTramitesAnuController() throws Exception {
        super(AbstractDataTransport.class);
        // TODO Auto-generated constructor stub
    }
    
    @PostConstruct
    private void postconstruct() {
        this.init();
        // Inicializa autoconsulta
        super.startQuery();
    }
    @Override
    public void postCommit(Response response) throws Exception {
        super.postCommitGeneric(response, beanalias);
    }
    @SuppressWarnings("unchecked")
    @Override
    protected void querydatabase() {

    }
    private void init() {
        try {
            userDetail = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
            recperpage = 10000; // Cambiar al # reg a mirar.
            beanalias = "RPTRAMITESANU";
            centroControlList = CentroControlArmasController.findAll();
            obtenerCentroControl();
        } catch (Exception e) {
            MessageHelper.setMessageError(e);
        }
    }
    private void obtenerCentroControl() throws Exception {
        TsafeUserDetail tsafeUserDetail = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
        PersonAddressController personAddressController = new PersonAddressController();
        TcustPersonAddress tcustPersonAddres = personAddressController.findPrincipal(tsafeUserDetail.getPk().getPersoncode().toString());
        TarmCentroControlJur centroControlJur = TarmCentroControlJurController.findxProvincia(tcustPersonAddres.getProvincecode());
        centroControl = CentroControlArmasController.findPorCodigo(centroControlJur.getCcentrocontrol());
        institucionCentroControl = CatalogDetailController.findxCodigoCodcatalogo(centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription();
    }
       /**
     * Genera un reporte de armas a destruir
     *
     */
    public void generateReport() {
        Calendar fechaActualCldr = Calendar.getInstance();
        String path = "armas/reports/ReporteTramites";
        String filename = "ReporteTramitesAnuladoFinalizado";
        String nombreUsuario = "";

        // Fija parametros del report.
        HashMap<String, Object> parameters = new HashMap<>();

        if (userDetail.getPk().getPersoncode() != null) {
            nombreUsuario = PersonDetailController.find(userDetail.getPk().getPersoncode().toString()).getName();
        } else {
            nombreUsuario = "";
        }

        parameters.put("pathLogoIzquierda", "repo:/maia/1/image/comandoconjunto");
        parameters.put("pathLogoDerecha", "repo:/maia/1/image/selloarmas");
        parameters.put("unidadmilitar", institucionCentroControl);
        parameters.put("lugarFecha", Utilidades.armarFormatoFechaConHora(fechaActualCldr));
        parameters.put("usuario", nombreUsuario);
        if(!idCentroControl.equals("TODOS")){
            parameters.put("idCentroControl",  idCentroControl);
        }
        if(!idEstado.equals("TODOS")){
            parameters.put("estadotramite",  String.format(("'%s'"), idEstado) );
        }
        else{
            parameters.put("estadotramite", "'ANU','FIN'");
        } 
        parameters.put("fechaInicio", this.fechaInicio == null ? null : Utilidades.armarFormatoFechaSinHora(this.fechaInicio));
        parameters.put("fechaFin", this.fechaFin == null ? null : Utilidades.armarFormatoFechaSinHora(this.fechaFin));

        try {
            this.reportController.executeXls(path, parameters, format, filename, this.getLoginController());
        } catch (Exception ex) {
            MessageHelper.setMessageError(ex);
        }

    }
     /**
     * 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() {

    }
    
     public String getIdCentroControl() {
        return idCentroControl;
    }

    public void setIdCentroControl(String idCentroControl) {
        this.idCentroControl = idCentroControl;
    }

    public List<TarmCentroControl> getCentroControlList() {
        return centroControlList;
    }

    public void setCentroControlList(List<TarmCentroControl> centroControlList) {
        this.centroControlList = centroControlList;
    }

    public TarmCentroControl getCentroControl() {
        return centroControl;
    }

    public void setCentroControl(TarmCentroControl centroControl) {
        this.centroControl = centroControl;
    }

    public String getInstitucionCentroControl() {
        return institucionCentroControl;
    }

    public void setInstitucionCentroControl(String institucionCentroControl) {
        this.institucionCentroControl = institucionCentroControl;
    }

    public TsafeUserDetail getUserDetail() {
        return userDetail;
    }

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

    public String getIdEstado() {
        return idEstado;
    }

    public void setIdEstado(String idEstado) {
        this.idEstado = idEstado;
    }

    public ReportController getReportController() {
        return reportController;
    }

    public void setReportController(ReportController reportController) {
        this.reportController = reportController;
    }
    
    public String getFormat() {
        return format;
    }

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

    public Date getFechaFin() {
        return fechaFin;
    }

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

    public Date getFechaInicio() {
        return fechaInicio;
    }

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