package com.fp.frontend.controller.armas.solicitud;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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;

import com.fp.dto.Request;
import com.fp.dto.Response;
import com.fp.dto.query.DtoQuery;
import com.fp.dto.query.Filter;
import com.fp.dto.query.SubQuery;
import com.fp.frontend.controller.AbstractController;
import com.fp.frontend.controller.ReportController;
import com.fp.frontend.controller.armas.funcionalidad.RegistroArmController;
import com.fp.frontend.controller.pcustomer.PersonDetailController;
import com.fp.frontend.controller.pcustomer.lov.PersonLovController;
import com.fp.frontend.controller.pgeneral.gene.CantonController;
import com.fp.frontend.controller.pgeneral.gene.CatalogDetailController;
import com.fp.frontend.controller.pgeneral.gene.CityController;
import com.fp.frontend.controller.pgeneral.gene.CountryController;
import com.fp.frontend.controller.pgeneral.gene.ParroquiaController;
import com.fp.frontend.controller.pgeneral.gene.ProvinceController;
import com.fp.frontend.helper.MessageHelper;
import com.fp.persistence.parmas.fun.TarmRegistroArmas;
import com.fp.persistence.parmas.param.TarmTramite;
import com.fp.persistence.parmas.soli.TarmArmas;
import com.fp.persistence.parmas.soli.TarmDocumentoHabilitante;
import com.fp.persistence.pcustomer.gene.TcustPersonDetail;
import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail;
import com.fp.persistence.pgeneral.safe.TsafeUserDetail;
import org.openide.util.Exceptions;

/**
 * Controlador principal de la funcionalidad de consulta de armas
 *
 * @author Christian Pazmino
 *
 */
@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class ConsultaArmasController extends AbstractController<TarmArmas> {

//    @ManagedProperty(value = "#{registroArmController}")
//    private RegistroArmController registroArmas;    
    /**
     * Tipo documento
     */
    private String tipoDoc;

    /**
     * N&uacute;mero documento
     */
    private String numDoc;

    /**
     * Nombre/raz&oacute;n social
     */
    private String nombreRazon;

    /**
     * Longitud arma
     */
    private String longitud;
    /**
     * Calibre arma
     */
    private String calibre;
    /**
     * Clase arma
     */
    private String clase;
    /**
     * Tipo de arma
     */
    private String tipoarma;
    /**
     * unidad medida peso
     */
    private String unidadmedidapeso;

    /**
     * Bandera que indica que en realidad existe luego del ingreso de datos un
     * tipo de arma explosivo v&aacute;lido
     */
    private boolean existeTipoArmaExplosivo;

    /**
     * Bandera que escifica que se deba verificar que exista un arma explosivo
     * v&aacute;lida
     */
    private boolean verificaArmaExplosivo = Boolean.TRUE;

    /**
     * Bloquea la unidad de cantidad
     */
    private boolean bloquearUnidadCantidad = Boolean.TRUE;

    /**
     * Bloquea la unidad de peso
     */
    private boolean bloquearUnidadPeso = Boolean.TRUE;

    private Date fechaActual;

    private String razonSocial;

    private String numeroDocumento;

    private String filtroPersona;

    private String descategoria;
    private String usoActividad;
    private Date fec_actual;
    @ManagedProperty(value = "#{reportController}")
    private ReportController reportController;
    
    /**
     * Controlador que maneja armas
     */
    @ManagedProperty(value = "#{armasController}")
    private ArmasController armasController;
    
    private TcustPersonDetail customerperson;
    private TsafeUserDetail tsafeUserDetailUsuario = null;

    public ConsultaArmasController() throws Exception {
        super(TarmArmas.class);
    }

    /**
     * M&eacute;todo que se ejecuta despu&eacute;s del constructor
     */
    @PostConstruct
    private void postconstruct() {
        this.init();
    }

    /**
     * Inicializa valores del controlador
     */
    private void init() {
        try {
            fechaActual = new Date();
            recperpage = 15; // Cambiar al # reg a mirar.
            lrecord = new ArrayList<>();
            beanalias = "ARMAS";
            filtroPersona = "";
            this.armasController.clearAll();
            this.tsafeUserDetailUsuario = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
        } catch (Exception e) {
            MessageHelper.setMessageError(e);
        }
    }

    @SuppressWarnings("unchecked")
    protected void querydatabase() {
        try {
            DtoQuery dto = this.getDtoQuery();
            dto.setOrderby("pk");
            Filter filtro = new Filter();
            String sql = "t.fecharegistro=(select max(ta.fecharegistro) from TarmArmas ta where t.codigoarma=ta.codigoarma) and t.estado !='DEST' and t.estado!='VEND' and t.estado!='MING' and t.estado!='DUPL' and t.estado!='CUSTEM' and t.estado !='CDP'"
                    + " and (t.peso>0 or t.cantidad>0) " + filtroPersona;//
            filtro.setSql(sql);
            dto.addFiltro(filtro);
            
            

            HashMap<String, DtoQuery> mtables = new HashMap<String, DtoQuery>();
            mtables.put(this.beanalias, dto); // permite adicionar mas de una tabla.

            Request request = this.callerhelper.getRequest();
            request.setQueryTables(mtables);
            Response resp = this.callerhelper.executeQuery(request);
            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) != 0) {
                this.lrecord = new ArrayList<TarmArmas>();
                MessageHelper.setMessageError(resp);
            } else {
                this.lrecord = (List<TarmArmas>) resp.get(this.beanalias);
                for (TarmArmas armasObj : lrecord) {
                    TarmRegistroArmas registroArmasObj = RegistroArmController
                            .findByCodigo(armasObj.getCregistro().toString());
                    if (registroArmasObj != null && registroArmasObj.getPersoncode() != null) {
                        TcustPersonDetail propietarioObj = PersonDetailController
                                .find(registroArmasObj.getPersoncode().toString());
                        if (propietarioObj.getIdentificationcatalog() != null
                                && propietarioObj.getIdentificationcatalogcode() != null) {
                            armasObj.getModifiedData()
                                    .put("tipoDocumento",
                                            CatalogDetailController
                                            .findxCodigoCodcatalogo(propietarioObj.getIdentificationcatalog(),
                                                    propietarioObj.getIdentificationcatalogcode())
                                            .getDescription());
                        }
                        armasObj.getModifiedData().put("noDocumento", propietarioObj.getIdentification());
                        armasObj.getModifiedData().put("nombrerazonsocial", propietarioObj.getName());
                        armasObj.getModifiedData().put("paisorigencode", registroArmasObj.getPaisorigen());
                        if (armasObj.getModifiedData().get("cclase") != null) {
                            armasObj.getModifiedData().put("clase",
                                    CatalogDetailController
                                    .findxCodigoCodcatalogo(armasObj.getModifiedData().get("cclase").toString(),
                                            armasObj.getModifiedData().get("cclasecodigo").toString())
                                    .getDescription());
                        }
                        if (armasObj.getModifiedData().get("ctipoarmaexplosivo") != null) {
                            armasObj.getModifiedData().put("tipoarmaexplosivo",
                                    CatalogDetailController.findxCodigoCodcatalogo(
                                            armasObj.getModifiedData().get("ctipoarmaexplosivo").toString(),
                                            armasObj.getModifiedData().get("ctipoarmaexplosivocodigo").toString())
                                    .getDescription());
                        }
                        if (armasObj.getModifiedData().get("ccalibre") != null) {
                            armasObj.getModifiedData().put("calibre", CatalogDetailController
                                    .findxCodigoCodcatalogo(armasObj.getModifiedData().get("ccalibre").toString(),
                                            armasObj.getModifiedData().get("ccalibrecodigo").toString())
                                    .getDescription());
                        }

                    }
                }
                super.postQuery(this.lrecord);
            int i =1;
        
       
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    @Override
    public void next() throws Exception {
        // TODO Auto-generated method stub
        super.next();
    }

    /**
     * Retorna un {@link DtoQuery} con los atributos a presentarse
     *
     * @return
     * @throws Exception
     */
    private DtoQuery getDtoQuery() throws Exception {
        DtoQuery dto = super.getDtoQuery(true);
        SubQuery subqueryMarca = new SubQuery("TgeneCatalogDetail", "description", "marca",
                "i.pk.catalog=t.marca and i.pk.catalogcode=t.marcacodigo");
        dto.addSubQuery(subqueryMarca);
        SubQuery subqueryColor = new SubQuery("TgeneCatalogDetail", "description", "color",
                "i.pk.catalog=t.color and i.pk.catalogcode=t.colorcodigo");
        dto.addSubQuery(subqueryColor);
        SubQuery subqueryEstado = new SubQuery("TgeneCatalogDetail", "description", "estado",
                "i.pk.catalog=t.estado and i.pk.catalogcode=t.estadocodigo");
        dto.addSubQuery(subqueryEstado);
        SubQuery subqueryClase = new SubQuery("TarmTipoArmaExplosivo", "clase", "cclase", "i.pk=t.ctipoarmaexplosivo");
        dto.addSubQuery(subqueryClase);
        SubQuery subqueryClaseCodigo = new SubQuery("TarmTipoArmaExplosivo", "clasecodigo", "cclasecodigo",
                "i.pk=t.ctipoarmaexplosivo");
        dto.addSubQuery(subqueryClaseCodigo);
        SubQuery subqueryLongitud = new SubQuery("TarmTipoArmaExplosivo", "longitud", "clongitud",
                "i.pk=t.ctipoarmaexplosivo");
        dto.addSubQuery(subqueryLongitud);
        SubQuery subqueryLongitudCodigo = new SubQuery("TarmTipoArmaExplosivo", "longitudcodigo", "clongitudcodigo",
                "i.pk=t.ctipoarmaexplosivo");
        dto.addSubQuery(subqueryLongitudCodigo);
        SubQuery subqueryCalibre = new SubQuery("TarmTipoArmaExplosivo", "calibre", "ccalibre",
                "i.pk=t.ctipoarmaexplosivo");
        dto.addSubQuery(subqueryCalibre);
        SubQuery subqueryCalibreCodigo = new SubQuery("TarmTipoArmaExplosivo", "calibrecodigo", "ccalibrecodigo",
                "i.pk=t.ctipoarmaexplosivo");
        dto.addSubQuery(subqueryCalibreCodigo);
        SubQuery subqueryTipoArma = new SubQuery("TarmTipoArmaExplosivo", "tipoarmaexplosivo", "ctipoarmaexplosivo",
                "i.pk=t.ctipoarmaexplosivo");
        dto.addSubQuery(subqueryTipoArma);
        SubQuery subqueryTipoArmaCodigo = new SubQuery("TarmTipoArmaExplosivo", "tipoarmaexplosivocodigo",
                "ctipoarmaexplosivocodigo", "i.pk=t.ctipoarmaexplosivo");
        dto.addSubQuery(subqueryTipoArmaCodigo);
        SubQuery subqueryUnidad = new SubQuery("TarmTipoArmaExplosivo", "unidadmedidapeso", "cunidadmedidapeso",
                "i.pk=t.ctipoarmaexplosivo");
        dto.addSubQuery(subqueryUnidad);
        SubQuery subqueryUnidadCodigo = new SubQuery("TarmTipoArmaExplosivo", "unidadmedidapesocodigo",
                "cunidadmedidapesocodigo", "i.pk=t.ctipoarmaexplosivo");
        dto.addSubQuery(subqueryUnidadCodigo);
        SubQuery subqueryUnidadMedida = new SubQuery("TgeneCatalogDetail", "description", "unidadmedida",
                "i.pk.catalog=t.unidadmedidacantidad and i.pk.catalogcode=t.unidadmedidacantidadcodigo");
        dto.addSubQuery(subqueryUnidadMedida);
        SubQuery subquerycpersoncode = new SubQuery("TarmRegistroArmas", "personcode", "personcode",
                "i.pk=t.cregistro");
        dto.addSubQuery(subquerycpersoncode);

        SubQuery subqueryFechaemiperm = new SubQuery("TarmDocumentoHabilitante", "fechaemision", "fechaemision",
                // " i.personcode=(select r.personcode from TarmRegistroArmas r where r.pk =
                // t.cregistro) and i.carma = t.pk and "+
                " i.pk=(select max(doc.pk) "
                + " from TarmDocumentoHabilitante doc "
                + " where doc.fechaexpiracion >= current_date and "
                + " doc.personcode=(select r.personcode from TarmRegistroArmas r where r.pk = t.cregistro)"
                + " and doc.carma in (select arm1.pk from TarmArmas arm1 where arm1.codigoarma in (select arm.codigoarma from TarmArmas arm where arm.pk=t.pk)))");
        dto.addSubQuery(subqueryFechaemiperm);
        SubQuery subqueryFechaexpperm = new SubQuery("TarmDocumentoHabilitante", "fechaexpiracion", "fechaexpiracion",
                // " i.personcode=(select r.personcode from TarmRegistroArmas r where r.pk =
                // t.cregistro) and i.carma = t.pk and "+
                " i.pk=(select max(doc.pk) "
                + " from TarmDocumentoHabilitante doc "
                + " where doc.fechaexpiracion >= now() and "
                + " doc.personcode=(select r.personcode from TarmRegistroArmas r where r.pk = t.cregistro) "
                + " and doc.carma in (select arm1.pk from TarmArmas arm1 where arm1.codigoarma in (select arm.codigoarma from TarmArmas arm where arm.pk=t.pk)))");
        dto.addSubQuery(subqueryFechaexpperm);

        //uso actividad
        SubQuery subqueryUsoactividad = new SubQuery("TgeneCatalogDetail", "description", "usoactividad",
                // " i.personcode=(select r.personcode from TarmRegistroArmas r where r.pk =
                // t.cregistro) and i.carma = t.pk and "+
                " i.pk.catalog=(select tra.usoactividad "
                + " from TarmTramite tra "
                + " where tra.pk=(select doc1.ctramite "
                + " from TarmDocumentoHabilitante doc1 "
                + " where doc1.pk=(select max(doc.pk) "
                + " from TarmDocumentoHabilitante doc "
                + " where doc.fechaexpiracion >= now() "
                + "   and doc.personcode=(select r.personcode from TarmRegistroArmas r where r.pk = t.cregistro) "
                + "and doc.carma in (select arm1.pk "
                + " from TarmArmas arm1 "
                + " where arm1.codigoarma in (select arm.codigoarma from TarmArmas arm where arm.pk=t.pk)))"
                + ")) and "
                + " i.pk.catalogcode=(select tra.usoactividadcodigo "
                + " from TarmTramite tra "
                + " where tra.pk=(select doc1.ctramite "
                + " from TarmDocumentoHabilitante doc1 "
                + " where doc1.pk=(select max(doc.pk) "
                + " from TarmDocumentoHabilitante doc "
                + " where doc.fechaexpiracion >= now() "
                + " and doc.personcode=(select r.personcode from TarmRegistroArmas r where r.pk = t.cregistro) "
                + "and doc.carma in (select arm1.pk from TarmArmas arm1 "
                + " where arm1.codigoarma = (select arm.codigoarma from TarmArmas arm where arm.pk=t.pk)))"
                + "))  ");
        dto.addSubQuery(subqueryUsoactividad);

        SubQuery subqueryCategoria = new SubQuery("TgeneCatalogDetail", "description", "categoria",
                // " i.personcode=(select r.personcode from TarmRegistroArmas r where r.pk =
                // t.cregistro) and i.carma = t.pk and "+
                " i.pk.catalog=(select tra.categoria "
                + " from TarmTramite tra "
                + " where tra.pk=(select doc1.ctramite "
                + " from TarmDocumentoHabilitante doc1 "
                + " where doc1.fechaexpiracion >= now() and "
                + " doc1.pk=(select max(doc.pk) "
                + " from TarmDocumentoHabilitante doc "
                + " where doc.personcode=(select r.personcode "
                + " from TarmRegistroArmas r where r.pk = t.cregistro) "
                + "and doc.carma in (select arm1.pk "
                + " from TarmArmas arm1 "
                + " where arm1.codigoarma in (select arm.codigoarma from TarmArmas arm where arm.pk=t.pk)))"
                + ")) and "
                + " i.pk.catalogcode=(select tra.categoriacodigo "
                + " from TarmTramite tra "
                + " where tra.pk=(select doc1.ctramite "
                + " from TarmDocumentoHabilitante doc1 "
                + " where doc1.fechaexpiracion >= now() and "
                + " doc1.pk=(select max(doc.pk) "
                + " from TarmDocumentoHabilitante doc "
                + " where doc.personcode=(select r.personcode "
                + " from TarmRegistroArmas r "
                + " where r.pk = t.cregistro) "
                + "and doc.carma in (select arm1.pk from TarmArmas arm1 where arm1.codigoarma in (select arm.codigoarma from TarmArmas arm where arm.pk=t.pk)))"
                + "))  ");
        dto.addSubQuery(subqueryCategoria);
        
        return dto;
    }
    
    
    
    /**
     * Declarar arma perdida
     */
    public void loseWeapon() {
        try {
           
            armasController.actualizar((TarmArmas) record.cloneMe());
            
        } catch(Exception ex) {
            MessageHelper.setMessageError(String.format("ERROR AL DECLARAR EL ARMA %s COMO PERDIDA: %s", this.record.getPk(), ex.getMessage()));

        }
       
    }
    
    
    /**
     * M&eacute;todo que se ejecuta al abrir el LOV de visualizar item
     * seleccionado
     *
     * @throws Exception
     */
    
    public void loadEdit() throws Exception {
        verificaArmaExplosivo = Boolean.TRUE;
        record.getModifiedData().put("provincia",
                ProvinceController.getDescProvByCodigo(record.getCountrycode(), record.getProvincecode()));
        record.getModifiedData().put("canton", CantonController.getDescCantonByCodigo(record.getCountrycode(),
                record.getProvincecode(), record.getCantoncode()));
        record.getModifiedData().put("ciudad", CityController.getDescCiudadByCodigo(record.getCountrycode(),
                record.getProvincecode(), record.getCantoncode(), record.getCitycode()));
        record.getModifiedData().put("parroquia", ParroquiaController.getDescParroquiaByCodigo(record.getCountrycode(),
                record.getProvincecode(), record.getCantoncode(), record.getParroquiacode()));
        if (record.getModifiedData().get("paisorigencode") != null) {
            record.getModifiedData().put("paisorigen", CountryController
                    .findcountry(record.getModifiedData().get("paisorigencode").toString()).getDescription());
        }
        if (record.getColor() != null) {
            record.getModifiedData().put("colorD", CatalogDetailController
                    .findxCodigoCodcatalogo(record.getColor(), record.getColorcodigo()).getDescription());
        }
        /* Aumentado */
        TarmDocumentoHabilitante documento = DocumentoHabilitanteController
                .findxarma(record.getCodigoarma().toString());

        if (documento != null) {
            TarmTramite tramite = TarmTramiteController.find(documento.getCtramite().toString());
            if (tramite != null) {
                TgeneCatalogDetail catalogo = CatalogDetailController.findxCodigoCodcatalogo(tramite.getCategoria(),
                        tramite.getCategoriacodigo());
                descategoria = catalogo.getDescription();
                TgeneCatalogDetail uso = CatalogDetailController.findxCodigoCodcatalogo(tramite.getUsoactividad(),
                        tramite.getUsoactividadcodigo());
                usoActividad = uso.getDescription();
            }
        }

    }

    @Override
    public void save() {

    }

//	public RegistroArmController getRegistroArmas() {
//		return registroArmas;
//	}
//
//
//	public void setRegistroArmas(RegistroArmController registroArmas) {
//		this.registroArmas = registroArmas;
//	}
    public String getTipoDoc() {
        return tipoDoc;
    }

    public void setTipoDoc(String tipoDoc) {
        this.tipoDoc = tipoDoc;
    }

    public String getNumDoc() {
        return numDoc;
    }

    public void setNumDoc(String numDoc) {
        this.numDoc = numDoc;
    }

    public String getNombreRazon() {
        return nombreRazon;
    }

    public void setNombreRazon(String nombreRazon) {
        this.nombreRazon = nombreRazon;
    }

    public String getLongitud() {
        return longitud;
    }

    public void setLongitud(String longitud) {
        this.longitud = longitud;
    }

    public String getCalibre() {
        return calibre;
    }

    public void setCalibre(String calibre) {
        this.calibre = calibre;
    }

    public String getClase() {
        return clase;
    }

    public void setClase(String clase) {
        this.clase = clase;
    }

    public String getTipoarma() {
        return tipoarma;
    }

    public void setTipoarma(String tipoarma) {
        this.tipoarma = tipoarma;
    }

    public String getUnidadmedidapeso() {
        return unidadmedidapeso;
    }

    public void setUnidadmedidapeso(String unidadmedidapeso) {
        this.unidadmedidapeso = unidadmedidapeso;
    }

    public boolean isExisteTipoArmaExplosivo() {
        return existeTipoArmaExplosivo;
    }

    public void setExisteTipoArmaExplosivo(boolean existeTipoArmaExplosivo) {
        this.existeTipoArmaExplosivo = existeTipoArmaExplosivo;
    }

    public boolean isVerificaArmaExplosivo() {
        return verificaArmaExplosivo;
    }

    public void setVerificaArmaExplosivo(boolean verificaArmaExplosivo) {
        this.verificaArmaExplosivo = verificaArmaExplosivo;
    }

    public boolean isBloquearUnidadCantidad() {
        return bloquearUnidadCantidad;
    }

    public void setBloquearUnidadCantidad(boolean bloquearUnidadCantidad) {
        this.bloquearUnidadCantidad = bloquearUnidadCantidad;
    }

    public boolean isBloquearUnidadPeso() {
        return bloquearUnidadPeso;
    }

    public void setBloquearUnidadPeso(boolean bloquearUnidadPeso) {
        this.bloquearUnidadPeso = bloquearUnidadPeso;
    }

    public Date getFechaActual() {
        return fechaActual;
    }

    public void setFechaActual(Date fechaActual) {
        this.fechaActual = fechaActual;
    }

    public String getRazonSocial() {
        return razonSocial;
    }

    public void setRazonSocial(String razonSocial) {
        this.razonSocial = razonSocial;
    }

    public String getNumeroDocumento() {
        return numeroDocumento;
    }

    public void setNumeroDocumento(String numeroDocumento) {
        this.numeroDocumento = numeroDocumento;
    }

    public String getDescategoria() {
        return descategoria;
    }

    public void setDescategoria(String descategoria) {
        this.descategoria = descategoria;
    }

    public String getUsoActividad() {
        return usoActividad;
    }

    public void setUsoActividad(String usoActividad) {
        this.usoActividad = usoActividad;
    }

    public ReportController getReportController() {
        return reportController;
    }

    public ArmasController getArmasController() {
        return armasController;
    }

    public void setArmasController(ArmasController armasController) {
        this.armasController = armasController;
    }
    

    public void setReportController(ReportController reportController) {
        this.reportController = reportController;
    }

    /**
     * Abre el lov de persona
     */
    public void openPersonLov() {
        Map<String, List<String>> params = new HashMap<>();
        PersonLovController.openLov(params);
    }

    /**
     * Maneja la respuesta del Lov de Personas
     *
     * @param event
     * @throws Exception
     */
    public void onReturnPersonLov(SelectEvent event) throws Exception {

        TcustPersonDetail personaDetailSelecionada = (TcustPersonDetail) event.getObject();
        razonSocial = personaDetailSelecionada.getName();
        numeroDocumento = personaDetailSelecionada.getIdentification();
        filtroPersona = " and t.cregistro in (select i.pk from TarmRegistroArmas i where i.personcode ="
                + personaDetailSelecionada.getPk().getPersoncode() + ")";
//		List<TarmRegistroArmas> registroArmasList = RegistroArmController.findxPersoncode(personaDetailSelecionada.getPk().getPersoncode().toString());
//		if(registroArmasList!=null && registroArmasList.size()>0){
//			filtroPersona = " and t.cregistro in (";
//			for(TarmRegistroArmas regArmaObj : registroArmasList){
//				filtroPersona+=regArmaObj.getPk().toString() + ",";
//			}
//			filtroPersona=filtroPersona.substring(0, filtroPersona.length()-1);
//			filtroPersona+=")";
//		}else{
//			filtroPersona = " and t.cregistro = -10023";
//		}
        querydatabase();
    }

    /**
     * Metodo que genera el reporte para el registro seleccionado
     *
     * @param event
     * @throws Exception
     */
    public void imprimir(String codigoArma) {
        System.out.println("Imprimir un reporte en PDF.. Pendiente implementar");
        try {
            String gradoUsuario = "";
            //  String path = "armas/reports/reporteArticuloControl";
            String path = "armas/reports/reporteArticuloControl";
            // String path = "armas/subreports/historicoArmasArticuloControl";
            //String filename=MsgControlArmas.getProperty("lbl_tramitesXcentro");
            String filename = "reporteArticuloControl";

            //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");

            //Centro de control
            //Fecha actual
            this.fec_actual = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
            parameters.put("fecActual", sdf.format(this.fec_actual));

            //usuario
            customerperson = PersonDetailController.find(this.tsafeUserDetailUsuario.getPk().getPersoncode().toString());
            parameters.put("usuario", customerperson.getName());
            parameters.put("carma", codigoArma);
            //Fecha actual       
            Calendar fechaActualCldr = Calendar.getInstance();
            StringBuilder fechaActualSB = new StringBuilder();
            fechaActualSB = fechaActualSB.append((fechaActualCldr.get(Calendar.DAY_OF_MONTH)) <= 9 ? "0" + (fechaActualCldr.get(Calendar.DAY_OF_MONTH)) : (fechaActualCldr.get(Calendar.DAY_OF_MONTH)));
            fechaActualSB = fechaActualSB.append("-").append((fechaActualCldr.get(Calendar.MONTH) + 1) <= 9 ? "0" + (fechaActualCldr.get(Calendar.MONTH) + 1) : (fechaActualCldr.get(Calendar.MONTH) + 1));
            fechaActualSB = fechaActualSB.append("-").append(fechaActualCldr.get(Calendar.YEAR));
            fechaActualSB = fechaActualSB.append(" ").append(fechaActualCldr.get(Calendar.HOUR_OF_DAY));
            fechaActualSB = fechaActualSB.append(":").append((fechaActualCldr.get(Calendar.MINUTE)) <= 9 ? "0" + (fechaActualCldr.get(Calendar.MINUTE)) : (fechaActualCldr.get(Calendar.MINUTE)));
            parameters.put("lugarFecha", fechaActualSB.toString());

//				}
            String format = "pdf";

            try {

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

        } catch (Exception ex) {
            MessageHelper.setMessageError(ex);
        }
    }

}
