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

import java.io.InputStream;
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.context.RequestContext;

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.dto.save.DtoSave;
import com.fp.frontend.controller.AbstractController;
import com.fp.frontend.controller.ReportController;
import com.fp.frontend.controller.alfresco.AlfrescoController;
import com.fp.frontend.controller.armas.funcionalidad.CargaController;
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.controller.pgeneral.gene.ParametersController;
import com.fp.frontend.helper.MessageHelper;
import com.fp.frontend.utility.MsgControlArmas;
import com.fp.frontend.utility.MsgGeneral;
import com.fp.persistence.parmas.fun.TarmCarga;
import com.fp.persistence.parmas.inte.TarmColadeImpresion;
import com.fp.persistence.parmas.param.TarmCentroControl;
import com.fp.persistence.parmas.param.TarmCentroControlJur;
import com.fp.persistence.parmas.param.TarmTipoArmaExplosivo;
import com.fp.persistence.parmas.param.TarmTramite;
import com.fp.persistence.parmas.soli.TarmAgenciaArma;
import com.fp.persistence.parmas.soli.TarmArmaPruebas;
import com.fp.persistence.parmas.soli.TarmArmas;
import com.fp.persistence.parmas.soli.TarmDocumentoHabilitante;
import com.fp.persistence.parmas.soli.TarmGuardias;
import com.fp.persistence.parmas.soli.TarmSolicitud;
import com.fp.persistence.parmas.soli.TarmSolicitudAgenciaSucursal;
import com.fp.persistence.parmas.soli.TarmSolicitudArmas;
import com.fp.persistence.parmas.soli.TarmSolicitudDocumento;
import com.fp.persistence.parmas.soli.TarmSolicitudGuardias;
import com.fp.persistence.parmas.soli.TarmSolicitudTramite;
import com.fp.persistence.pcustomer.gene.TcustPersonAddress;
import com.fp.persistence.pcustomer.gene.TcustPersonDetail;
import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail;
import com.fp.persistence.pgeneral.gene.TgeneParameters;
import com.fp.persistence.pgeneral.safe.TsafeUserDetail;

/**
 * Controlador principal que maneja la entidad TarmSolicitudArmas
 *
 * @author Carlos Guzman
 *
 */
@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class RecepcionArmasController extends AbstractController<TarmSolicitudArmas> {

    private TcustPersonDetail personaDetalle;
    private String provincia;
    private String canton;
    private String ciudad;
    private String direccion;
    private List<TarmArmas> lArmas = new ArrayList<TarmArmas>();
    private List<TarmSolicitudGuardias> lSolicitudGuardias = new ArrayList<TarmSolicitudGuardias>();
    private List<TarmGuardias> lGuardias = new ArrayList<TarmGuardias>();
    private TgeneCatalogDetail detallecatalogo = new TgeneCatalogDetail();
    private TgeneCatalogDetail detallecatalogoTipoTramite = new TgeneCatalogDetail();
    private TgeneCatalogDetail usoActividad = new TgeneCatalogDetail();
    private TgeneCatalogDetail tipoAutorizacion = new TgeneCatalogDetail();
    private TgeneCatalogDetail categoria = new TgeneCatalogDetail();
    private TgeneCatalogDetail identificacion = new TgeneCatalogDetail();
    private TgeneCatalogDetail estadotramite = new TgeneCatalogDetail();
    private TgeneCatalogDetail tipoArchivo = new TgeneCatalogDetail();
    private TgeneCatalogDetail tipoCosto = new TgeneCatalogDetail();
    private TgeneCatalogDetail vigencia = new TgeneCatalogDetail();
    private TarmSolicitudTramite solicitudTramite = new TarmSolicitudTramite();
    private TsafeUserDetail tsafeUserDetailUsuario = null;
    private TarmTramite tramite = new TarmTramite();
    private TarmSolicitud solicitud = new TarmSolicitud();
    private TarmTipoArmaExplosivo tipoArmaExplosivo = new TarmTipoArmaExplosivo();
    private boolean controlPantallaEntregado;
    private boolean controlPantallaVisualizarTramiteFirmar;
    private boolean controlPantallaVerificarInformacionDevolucion;
    private String codigoSolicitud = "";
    private String observacion;
    private String estado;
    private Date fec_actual;
    private String xpathflujo;
    private TcustPersonDetail responsableCentroControl = null;
    private TsafeUserDetail usuario;
    private Boolean btnFlujo;
    private Boolean btnGrabar;
    /**
     * lista del catalogo de las acciones (Aceptar o rechazar)
     */
    private List<TgeneCatalogDetail> laccion;

    private TarmCentroControl centroControl = new TarmCentroControl();

    @ManagedProperty(value = "#{personAddressController}")
    private PersonAddressController personAddressController;

    @ManagedProperty(value = "#{solicitudGuardiasController}")
    private SolicitudGuardiasController solicitudGuardiasController;

    @ManagedProperty(value = "#{armasController}")
    private ArmasController armasController;

    @ManagedProperty(value = "#{documentoHabilitanteController}")
    private DocumentoHabilitanteController documentoHabilitanteController;

    @ManagedProperty(value = "#{colaImpresionController}")
    private ColaImpresionController colaImpresionController;

    @ManagedProperty(value = "#{documentoHabilitanteDetalleController}")
    private DocumentoHabilitanteDetalleController documentoHabilitanteDetalleController;

    @ManagedProperty(value = "#{solicitudTramiteController}")
    private SolicitudTramiteController solicitudTramiteController;

    @ManagedProperty(value = "#{solicitudController}")
    private SolicitudController solicitudController;

    @ManagedProperty(value = "#{reportController}")
    private ReportController reportController;

    @ManagedProperty(value = "#{alfrescoController}")
    private AlfrescoController alfrescoController;

    /**
     * Controlador que maneja cargas para previa importacion
     */
    @ManagedProperty(value = "#{cargaController}")
    private CargaController cargaController;

    /**
     * controlador de la solicitud
     */
    @ManagedProperty(value = "#{solicitudArmasController}")
    private SolicitudArmasController solicitudMP;

    /**
     * Controlador que maneja las armas asociadas a las agencias
     */
    @ManagedProperty(value = "#{agenciaArmaController}")
    private AgenciaArmaController agenciaArma;

    private String numeroTransaccion = "";

    private List<TarmSolicitudAgenciaSucursal> solAgenciaSucursals;

    private List<TarmSolicitudDocumento> documentosList;

    private Boolean requiereNoSolAucpBln;

    /**
     * Nombre de la Institucion
     */
    private String nombreInstitucion;

    public RecepcionArmasController() throws Exception {
        super(TarmSolicitudArmas.class);
    }

    @PostConstruct
    private void postconstruct() throws Exception {
        startQuery();
        this.init();
        querydatabase();

        solicitudController = new SolicitudController();

        Boolean aprobarFichaBLN = Boolean.FALSE;

        laccion = new ArrayList<TgeneCatalogDetail>();

        // Validamos en el caso de permisos
        TarmTramite tramite = TarmTramiteController.find(numeroTransaccion);
        TgeneCatalogDetail tipoAutorizacion = CatalogDetailController.findxCodigoCodcatalogo(tramite.getTipoautorizacion(), tramite.getTipoautorizacioncodigo());

        if (tipoAutorizacion != null && tipoAutorizacion.getDescription().equalsIgnoreCase("PERMISO")) {
            List<TarmArmaPruebas> armaPruebaList = IngresoFichaTecnicaArmasController.buscarFichasPorSolicitud(codigoSolicitud);
            for (TarmArmaPruebas armaPruebaObj : armaPruebaList) {
                if (armaPruebaObj.getApruebaevaluacion().equalsIgnoreCase("Y")) {
                    aprobarFichaBLN = Boolean.TRUE;
                    break;
                }
            }
            if (aprobarFichaBLN) {
                laccion = CatalogDetailController.find("ACCION");
            } else {
                TgeneCatalogDetail catalogRechazar = CatalogDetailController.findCatalogo("ACCION", "RECH");
                laccion.add(catalogRechazar);
            }
        } else {
            laccion = CatalogDetailController.find("ACCION");
        }

        try {
            //consulta de agencias
            cargarAgencias();
            //consulta de documentos
            cargarDocumentos();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * M&eacute;todo en el cual se cargan las agencias que corresponden a la
     * solicitud
     *
     * @throws Exception
     */
    private void cargarAgencias() throws Exception {
        if (codigoSolicitud != null) {
            solAgenciaSucursals = SolicitudAgenciaSucursalController.findPorSolicitud(codigoSolicitud);
        }
    }

    /**
     * M&eacute;todo en el cual se cargan las agencias que corresponden a la
     * solicitud
     *
     * @throws Exception
     */
    private void cargarDocumentos() throws Exception {
        if (codigoSolicitud != null) {
            documentosList = TarmSolicitudDocumentoController.findPorSolicitud(codigoSolicitud);//documentoHabilitanteController.lrecord
        }
    }

    public void startQuery() {
        try {
            this.pasteBpmScreenParameters();
            //xpathflujo=super.getMfilters().get("xpath");//"cm:Decomiso/cm:A-2014/cm:M-10/cm:ENV-000000319/cm:ENV-000000319.pdf";//
            numeroTransaccion = super.getMfilters().get("numerotransaccion");
            codigoSolicitud = super.getMfilters().get("csolicitud");
            System.out.println("numeroTransaccion .." + numeroTransaccion);
            super.getMfilters().clear();
        } catch (Exception e) {
            MessageHelper.setMessageError(e);
        }
    }

    private void init() {
        try {
            validarpantallaActual();
            recperpage = 500; // Cambiar al # reg a mirar.
            lrecord = new ArrayList<>();
            beanalias = "RECEPCIONARMAS";
            this.responsableCentroControl = new TcustPersonDetail();
            this.tsafeUserDetailUsuario = new TsafeUserDetail();
            usuario = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
            this.fec_actual = new Date();
            btnFlujo = Boolean.FALSE;
            btnGrabar = Boolean.TRUE;
        } catch (Exception e) {
            MessageHelper.setMessageError(e);
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void querydatabase() {
        try {
            this.lArmas.clear();
            this.lGuardias.clear();
            if (codigoSolicitud == null) {
                return;
            }
            DtoQuery dto = super.getDtoQuery(true);
            dto.setOrderby("t.pk.csolicitud");

            SubQuery subquerymodelo = new SubQuery("TarmArmas", "modelo", "modelo", "i.pk=t.pk.carma");
            dto.addSubQuery(subquerymodelo);
            SubQuery subqueryacrma = new SubQuery("TarmArmas", "pk", "carma", "i.pk=t.pk.carma");
            dto.addSubQuery(subqueryacrma);

            SubQuery subqueryserie = new SubQuery("TarmArmas", "lote", "lote", "i.pk=t.pk.carma");
            dto.addSubQuery(subqueryserie);

            SubQuery subqueryCantidad = new SubQuery("TarmArmas", "cantidad", "cantidad", "i.pk=t.pk.carma");
            dto.addSubQuery(subqueryCantidad);

            SubQuery subqueryPeso = new SubQuery("TarmArmas", "peso", "peso", "i.pk=t.pk.carma");
            dto.addSubQuery(subqueryPeso);

            SubQuery subqueryUnidadMedida = new SubQuery("TgeneCatalogDetail", "description", "unidadmedida", "i.pk.catalog=(select p.unidadmedidacantidad from TarmArmas p where p.pk=t.pk.carma) and"
                    + " i.pk.catalogcode=(select p.unidadmedidacantidadcodigo from TarmArmas p where p.pk=t.pk.carma)");
            dto.addSubQuery(subqueryUnidadMedida);

            SubQuery subqueryMarca = new SubQuery("TgeneCatalogDetail", "description", "marca", "i.pk.catalog=    (select o.marca from TarmArmas o where o.pk=t.pk.carma) "
                    + " and i.pk.catalogcode=(select o.marcacodigo from TarmArmas o where o.pk=t.pk.carma)");
            dto.addSubQuery(subqueryMarca);
            SubQuery subqueryColor = new SubQuery("TgeneCatalogDetail", "description", "color", "i.pk.catalog=(select o.color  from TarmArmas o where o.pk=t.pk.carma)"
                    + " and i.pk.catalogcode=(select o.colorcodigo  from TarmArmas o where o.pk=t.pk.carma)");
            dto.addSubQuery(subqueryColor);
            SubQuery subqueryEstado = new SubQuery("TgeneCatalogDetail", "description", "estado", "i.pk.catalog=(select o.estado   from TarmArmas o where o.pk=t.pk.carma)"
                    + " and i.pk.catalogcode=(select o.estadocodigo   from TarmArmas o where o.pk=t.pk.carma)");
            dto.addSubQuery(subqueryEstado);

            SubQuery subqueryClase = new SubQuery("TgeneCatalogDetail", "description", "clase", "i.pk.catalog=(select o.clase   from TarmTipoArmaExplosivo o"
                    + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))"
                    + " and i.pk.catalogcode=(select o.clasecodigo   from TarmTipoArmaExplosivo o"
                    + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))");
            dto.addSubQuery(subqueryClase);

            SubQuery subqueryLongitud = new SubQuery("TgeneCatalogDetail", "description", "longitud", "i.pk.catalog=(select o.longitud   from TarmTipoArmaExplosivo o"
                    + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))"
                    + " and i.pk.catalogcode=(select o.longitudcodigo   from TarmTipoArmaExplosivo o"
                    + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))");
            dto.addSubQuery(subqueryLongitud);

            SubQuery subqueryCalibre = new SubQuery("TgeneCatalogDetail", "description", "calibre", "i.pk.catalog=(select o.calibre   from TarmTipoArmaExplosivo o"
                    + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))"
                    + " and i.pk.catalogcode=(select o.calibrecodigo   from TarmTipoArmaExplosivo o"
                    + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))");
            dto.addSubQuery(subqueryCalibre);

            SubQuery subqueryTipoArma = new SubQuery("TgeneCatalogDetail", "description", "tipo", "i.pk.catalog=(select o.tipoarmaexplosivo   from TarmTipoArmaExplosivo o"
                    + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))"
                    + " and i.pk.catalogcode=(select o.tipoarmaexplosivocodigo   from TarmTipoArmaExplosivo o"
                    + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))");

            dto.addSubQuery(subqueryTipoArma);

            Filter filtro = new Filter();
            filtro.setField("pk.csolicitud");
            filtro.setValue(codigoSolicitud);
            dto.addFiltro(filtro);
            HashMap<String, DtoQuery> mtables = new HashMap<String, DtoQuery>();
            mtables.put(beanalias, dto); // permite adicionar mas de una tabla.
            Request request = this.callerhelper.getRequest();
            request.setQueryTables(mtables);

            solicitudGuardiasController.addFilter("pk.csolicitud", codigoSolicitud);
            solicitudGuardiasController.findPorSolicitud(codigoSolicitud);
            solicitudGuardiasController.query();

            Response resp = this.callerhelper.executeQuery(request);

            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) != 0) {
                this.lrecord = new ArrayList<TarmSolicitudArmas>();
                MessageHelper.setMessageError(resp);
            } else {
                this.lrecord = (List<TarmSolicitudArmas>) resp.get(beanalias);
                if ((this.lrecord != null) && !this.lrecord.isEmpty()) {
                }

                super.postQuery(this.lrecord);
            }

            solicitud = SolicitudArmasController.find(codigoSolicitud);

            if (solicitud != null) {
                personaDetalle = PersonDetailController.find(String.valueOf(solicitud.getPersoncode()));
                identificacion = (personaDetalle.getIdentificationcatalog() == null || personaDetalle.getIdentificationcatalogcode() == null) ? null : CatalogDetailController.findxCodigoCodcatalogo(personaDetalle.getIdentificationcatalog(), personaDetalle.getIdentificationcatalogcode());

                if (identificacion != null) {
                    //personAddressController.findPersonaPorDireccionTipoCatalogo(String.valueOf(solicitud.getPersoncode()), tipoDireccion);
                    TcustPersonAddress direccionCliente = personAddressController.findPrincipal(String.valueOf(solicitud.getPersoncode()));
                    provincia = direccionCliente.modifiedData().get("provincia") == null ? null : direccionCliente.modifiedData().get("provincia").toString(); //personAddressController.getLprovinces()==null || .getLprovinces().isEmpty()?null:personAddressController.getLprovinces().get(0);
                    canton = direccionCliente.modifiedData().get("canton") == null ? null : direccionCliente.modifiedData().get("canton").toString();//personAddressController.getLcantones()==null || personAddressController.getLcantones().isEmpty()?null:personAddressController.getLcantones().get(0);
                    ciudad = direccionCliente.modifiedData().get("ciudad") == null ? null : direccionCliente.modifiedData().get("ciudad").toString();//personAddressController.getLcities()==null || personAddressController.getLcities().isEmpty()?null:personAddressController.getLcities().get(0);
                    direccion = direccionCliente.getAddress();
                }

            }

            //Proceso de tramite
            solicitudTramite = TarmSolicitudTramiteController.findPorCSolicitud(codigoSolicitud);
            if (solicitudTramite != null && solicitudTramite.getPk().getCtramite() != null) {
                tramite = TarmTramiteController.find(solicitudTramite.getPk().getCtramite().toString());
                estadotramite = (solicitudTramite.getEstadotramite() == null || solicitudTramite.getEstadotramitecodigo() == null) ? null : CatalogDetailController.findxCodigoCodcatalogo(solicitudTramite.getEstadotramite(), solicitudTramite.getEstadotramitecodigo());
            }

            if (tramite != null && tramite.getPk() != null) {
                detallecatalogo = (tramite.getCategoria() == null || tramite.getCategoriacodigo() == null) ? null : CatalogDetailController.findxCodigoCodcatalogo(tramite.getCategoria(), tramite.getCategoriacodigo());
                detallecatalogoTipoTramite = (tramite.getTipoautorizacion() == null || tramite.getTipoautorizacioncodigo() == null) ? null : CatalogDetailController.findxCodigoCodcatalogo(tramite.getTipoautorizacion(), tramite.getTipoautorizacioncodigo());
                vigencia = CatalogDetailController.findxCodigoCodcatalogo(tramite.getVigencia(), tramite.getVigenciacodigo());
                tipoArchivo = CatalogDetailController.findxCodigoCodcatalogo(tramite.getTipoarchivo(), tramite.getTipoarchivocodigo());
                tipoCosto = CatalogDetailController.findxCodigoCodcatalogo(tramite.getTipocosto(), tramite.getTipocostocodigo());
                usoActividad = (tramite.getUsoactividad() == null || tramite.getUsoactividadcodigo() == null) ? null : CatalogDetailController.findxCodigoCodcatalogo(tramite.getUsoactividad(), tramite.getUsoactividadcodigo());
                tipoAutorizacion = (tramite.getTipoautorizacion() == null || tramite.getTipoautorizacioncodigo() == null) ? null : CatalogDetailController.findxCodigoCodcatalogo(tramite.getTipoautorizacion(), tramite.getTipoautorizacioncodigo());
                categoria = (tramite.getCategoria() == null || tramite.getCategoriacodigo() == null) ? null : CatalogDetailController.findxCodigoCodcatalogo(tramite.getCategoria(), tramite.getCategoriacodigo());
                // CATEGORIA 14	PREVIA IMPORTACION
                if (tramite != null && tramite.getCategoria().equals("14")) {
                    requiereNoSolAucpBln = Boolean.TRUE;
                    nombreInstitucion = obtenerCentroControl();
                } else {
                    requiereNoSolAucpBln = Boolean.FALSE;
                }
            }

            armasController.setRecperpage(500);

            //lArmas = armasController.findArmaRecep(lrecord.get(0).getPk().getCsolicitud());
            for (TarmSolicitudArmas solicitudArmas : lrecord) {
                TarmArmas armas = new TarmArmas();
                armas = armasController.find(solicitudArmas.getPk().getCarma(), null);
                lArmas.add(armas);
            }
            armasController.setLrecord(lArmas);
            actualizarArmas();
            List<TarmCentroControl> listaCentroControl = null;
            if (solicitud != null && solicitud.getCcentrocontrol() != null) {
                listaCentroControl = CentroControlArmasController.find(solicitud.getCcentrocontrol());
            }

            if (listaCentroControl != null && !listaCentroControl.isEmpty()) {//&& listaCentroControl.get(0).getTramitespordia()!=null){
                centroControl = listaCentroControl.get(0);
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    /**
     * Metodo que usa para pasar el flujo al seleccionar el boton guardar
     */
    public void guardar() {

    }

    private void guardarcolaImpresionController(HashMap<String, DtoSave> msave) throws Throwable {
        System.out.println("ACTUALIZA COLA DE IMPRESION");
        TarmDocumentoHabilitante docHabilitante = DocumentoHabilitanteController.findPorSolicitud(codigoSolicitud);
        if (docHabilitante != null && docHabilitante.getPk() != null) {
            System.out.println("ACTUALIZA COLA DE IMPRESION 1");
            List<TarmColadeImpresion> listaColaImprecion = ColaImpresionController.findByDocumentoCDoc(docHabilitante.getPk().toString());
            if (listaColaImprecion != null && listaColaImprecion.size() > 0) {
                System.out.println("ACTUALIZA COLA DE IMPRESION 2");
                for (TarmColadeImpresion item : listaColaImprecion) {
                    item.setEstadoimpresion("PIMPR");
                    item.setEstadoimpresioncode("ESTADOIMPRESION");
                    colaImpresionController.update(item);
                }
                System.out.println("ACTUALIZA COLA DE IMPRESION 3");
                registrarGuardadoColaImpresion(msave);
                System.out.println("ACTUALIZA COLA DE IMPRESION 4");
            }
        }

    }

    private void registrarGuardadoColaImpresion(HashMap<String, DtoSave> msave) throws Throwable {
        //= new HashMap<String, DtoSave>();
        Request request = callerhelper.getRequest();
        DtoSave dtosaveColaImpresion = this.colaImpresionController.getDtoSave(true);
        dtosaveColaImpresion.setReturnpk(true);
        dtosaveColaImpresion.setPosition(1);
        msave.put(colaImpresionController.getBeanalias(), dtosaveColaImpresion);
        request.setSaveTables(msave);
//        Response resp = callerhelper.executeSave(request);	
//        if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
//        	this.colaImpresionController.postCommit(resp);
//        	 this.postCommit(resp);
//            MessageHelper.setMessageInfo(resp);
//        } else {
//            MessageHelper.setMessageError(resp); 
//            throw new Exception(""+resp);
//        }
    }

    /**
     * Metodo para guardar los documentos habilitantes
     *
     * @throws Throwable
     */
    public void guardarDocumentoHabilitante() throws Throwable {
        HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();
        Calendar cal = Calendar.getInstance();
        String estado = "APR";
        System.out.println("vigencia.getDescription() " + vigencia.getDescription());
        System.out.println("vigencia.getDescription().trim().equals(1200) " + vigencia.getDescription().trim().equals("1200"));
        if (vigencia.getDescription() != null && vigencia.getDescription().trim().equals("1200")) {
            cal.set(Calendar.YEAR, 2999);
            cal.set(Calendar.MONTH, 12);
            cal.set(Calendar.DAY_OF_MONTH, 31);
        } else {
            cal.add(Calendar.MONTH, Integer.valueOf(vigencia.getDescription()));
        }
        System.out.println(cal);
        System.out.println(cal.getTime());
        TarmSolicitudTramite solicitudtramite = TarmSolicitudTramiteController.findPorCSolicitud(codigoSolicitud);
        if ("CARNET".equalsIgnoreCase(tipoArchivo.getDescription())) {
            if ("TOTAL".equalsIgnoreCase(tipoCosto.getDescription())) {
                documentoHabilitanteController.create();
                documentoHabilitanteController.getRecord().setIsnew(true);
                documentoHabilitanteController.getRecord().setCsolicitud(codigoSolicitud);
                documentoHabilitanteController.getRecord().setCentrocontrol(centroControl.getPk());
                documentoHabilitanteController.getRecord().setCarma(null);
                documentoHabilitanteController.getRecord().setCuentareimpresion(0);
                documentoHabilitanteController.getRecord().setCtramite(solicitudtramite.getPk().getCtramite());
                documentoHabilitanteController.getRecord().setFechaemision(new java.sql.Date((new Date()).getTime()));
                documentoHabilitanteController.getRecord().setFechaexpiracion(new java.sql.Date((cal.getTime()).getTime()));
                documentoHabilitanteController.getRecord().setPersoncode(solicitud.getPersoncode());
                documentoHabilitanteController.getRecord().setEstado(estado);
                documentoHabilitanteController.getRecord().setEstadocode("ESTADODOCUMENTO");
                documentoHabilitanteController.update();

                //Grabacion en la cola de impresion
                colaImpresionController.create();
                colaImpresionController.getRecord().setIsnew(true);
                //colaImpresionController.getRecord().setEstadoimpresion("PIMPR");
                //colaImpresionController.getRecord().setEstadoimpresioncode("ESTADOIMPRESION");
                java.util.Date date = new java.util.Date();
                colaImpresionController.getRecord().setFecharegistro(new java.sql.Date(date.getTime()));
                colaImpresionController.update();

            }
            if ("TOTAL".equalsIgnoreCase(tipoCosto.getDescription()) && (this.lrecord == null || this.lrecord.isEmpty())) {
                registrarGuardadoDocumentoHabilitante(msave);
            }

            for (TarmSolicitudArmas armaSolicitud : this.lrecord) {

                if ("PARCIAL".equalsIgnoreCase(tipoCosto.getDescription())) {
                    documentoHabilitanteController.create();
                    documentoHabilitanteController.getRecord().setIsnew(true);
                    documentoHabilitanteController.getRecord().setCsolicitud(codigoSolicitud);
                    documentoHabilitanteController.getRecord().setCentrocontrol(centroControl.getPk());
                    documentoHabilitanteController.getRecord().setCarma(armaSolicitud.getPk().getCarma());
                    documentoHabilitanteController.getRecord().setCodigoarma(ArmasController.findPorCodigo(armaSolicitud.getPk().getCarma()).getCodigoarma());
                    documentoHabilitanteController.getRecord().setCuentareimpresion(0);
                    documentoHabilitanteController.getRecord().setCtramite(solicitudtramite.getPk().getCtramite());
                    documentoHabilitanteController.getRecord().setFechaemision(new java.sql.Date((new Date()).getTime()));
                    documentoHabilitanteController.getRecord().setFechaexpiracion(new java.sql.Date((cal.getTime()).getTime()));
                    documentoHabilitanteController.getRecord().setPersoncode(solicitud.getPersoncode());
                    documentoHabilitanteController.getRecord().setEstado(estado);
                    documentoHabilitanteController.getRecord().setEstadocode("ESTADODOCUMENTO");
                    documentoHabilitanteController.update();

                    //Grabacion en la cola de impresion
                    colaImpresionController.create();
                    colaImpresionController.getRecord().setIsnew(true);
                    //colaImpresionController.getRecord().setEstadoimpresion("PIMPR");
                    //colaImpresionController.getRecord().setEstadoimpresioncode("ESTADOIMPRESION");
                    java.util.Date date = new java.util.Date();
                    colaImpresionController.getRecord().setFecharegistro(new java.sql.Date(date.getTime()));
                    colaImpresionController.update();
                }
                documentoHabilitanteDetalleController.create();
                documentoHabilitanteDetalleController.getRecord().setIsnew(true);
                documentoHabilitanteDetalleController.getRecord().setCarma(armaSolicitud.getPk().getCarma());
                documentoHabilitanteDetalleController.getRecord().setCodigoarma(ArmasController.findPorCodigo(armaSolicitud.getPk().getCarma()).getCodigoarma());
                documentoHabilitanteDetalleController.update();
                if ("PARCIAL".equalsIgnoreCase(tipoCosto.getDescription())) {
                    registrarGuardadoDocumentoHabilitante(msave);
                }
            }

            if ("TOTAL".equalsIgnoreCase(tipoCosto.getDescription()) && (this.lrecord != null && !this.lrecord.isEmpty())) {
                registrarGuardadoDocumentoHabilitante(msave);
                return;
            }

        } else if ("REPORTE".equalsIgnoreCase(tipoArchivo.getDescription())) {
            documentoHabilitanteController.create();
            //TarmSolicitudTramite solicitudtramite =TarmSolicitudTramiteController.findPorCSolicitud(codigoSolicitud);
            documentoHabilitanteController.getRecord().setIsnew(true);
            documentoHabilitanteController.getRecord().setCsolicitud(codigoSolicitud);
            documentoHabilitanteController.getRecord().setCentrocontrol(centroControl.getPk());
            documentoHabilitanteController.getRecord().setCuentareimpresion(0);
            documentoHabilitanteController.getRecord().setCtramite(solicitudtramite.getPk().getCtramite());
            documentoHabilitanteController.getRecord().setCarma((this.lrecord != null && !this.lrecord.isEmpty() && this.lrecord.size() > 0) ? this.lrecord.get(0).getPk().getCarma() : null);
            documentoHabilitanteController.getRecord().setFechaemision(new java.sql.Date((new Date()).getTime()));
            documentoHabilitanteController.getRecord().setFechaexpiracion(new java.sql.Date((cal.getTime()).getTime()));
            documentoHabilitanteController.getRecord().setPersoncode(solicitud.getPersoncode());
            documentoHabilitanteController.getRecord().setEstado(estado);
            documentoHabilitanteController.getRecord().setEstadocode("ESTADODOCUMENTO");
            documentoHabilitanteController.update();

            for (TarmSolicitudArmas armaSolicitud : this.lrecord) {
                documentoHabilitanteDetalleController.create();
                documentoHabilitanteDetalleController.getRecord().setIsnew(true);
                documentoHabilitanteDetalleController.getRecord().setCarma(armaSolicitud.getPk().getCarma());
                documentoHabilitanteDetalleController.getRecord().setCodigoarma(ArmasController.findPorCodigo(armaSolicitud.getPk().getCarma()).getCodigoarma());
                documentoHabilitanteDetalleController.update();
            }

            registrarGuardadoDocumentoHabilitante(msave);
        } else {
            throw new Exception("TIPO DOCUMENTO DE INVALIDO: " + tipoArchivo.getDescription());
        }
    }

    /**
     * Metodo para realizar el guardado del documento habilitante
     *
     * @param msave variable save
     * @throws Throwable
     */
    private void registrarGuardadoDocumentoHabilitante(HashMap<String, DtoSave> msave) throws Throwable {
        Request request = callerhelper.getRequest();

        DtoSave dtosaveDocumento = this.documentoHabilitanteController.getDtoSave(true);
        dtosaveDocumento.setReturnpk(true);
        dtosaveDocumento.setPosition(1);
        DtoSave dtosaveDocumentoDetalle = this.documentoHabilitanteDetalleController.getDtoSave(true);
        dtosaveDocumentoDetalle.setReturnpk(true);
        dtosaveDocumentoDetalle.setPosition(2);
        DtoSave dtosaveColaImpresion = this.colaImpresionController.getDtoSave(true);
        dtosaveColaImpresion.setReturnpk(true);
        dtosaveColaImpresion.setPosition(3);

        msave.put(documentoHabilitanteController.getBeanalias(), dtosaveDocumento);
        msave.put(documentoHabilitanteDetalleController.getBeanalias(), dtosaveDocumentoDetalle);
        msave.put(colaImpresionController.getBeanalias(), dtosaveColaImpresion);

        request.setSaveTables(msave);
        Response resp = callerhelper.executeSave(request);

        if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
            this.documentoHabilitanteController.postCommit(resp);
            this.documentoHabilitanteDetalleController.postCommit(resp);
            this.colaImpresionController.postCommit(resp);
            this.postCommit(resp);
            MessageHelper.setMessageInfo(resp);
        } else {
            MessageHelper.setMessageError(resp);
            throw new Exception("" + resp);
        }
    }

    /**
     * Metodo que valida cual es la pantalla que se encuentra activa este
     * controlador
     */
    private void validarpantallaActual() {
        if (this.getLoginController() != null && 24 == this.getLoginController().getRequest().getTransactionCode() && "30".equals(getLoginController().getRequest().getTransactionModule())) {
            controlPantallaEntregado = true;
        } else {
            controlPantallaEntregado = false;
        }

        if (this.getLoginController() != null && 34 == this.getLoginController().getRequest().getTransactionCode() && "30".equals(getLoginController().getRequest().getTransactionModule())) {
            controlPantallaVisualizarTramiteFirmar = true;
        } else {
            controlPantallaVisualizarTramiteFirmar = false;
        }

        if (this.getLoginController() != null && 33 == this.getLoginController().getRequest().getTransactionCode() && "30".equals(getLoginController().getRequest().getTransactionModule())) {
            controlPantallaVerificarInformacionDevolucion = true;
        } else {
            controlPantallaVerificarInformacionDevolucion = false;
        }
    }

    @Override
    public void query() throws Exception {
        MessageHelper.setMessageError("msg_notQuery");
        super.query();
    }

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

    /**
     * Metodo para enviar el documento habilitante por el flujo
     */
    public void enviarDocumentoHabilitante() {

    }

    @Override
    public void save() {
        try {
            if (!validarSeleccion()) {
                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_validar_seleccion_armas"));
                return;
            }

            actualizarArmas();
            actualizarSolicitudArmas();

            TarmSolicitud sol = this.solicitudController.findSolicitudxcodsolicitud(this.codigoSolicitud);
            String ruta = this.getRutaDocumento() + "/cm:actaEntregaRecepcionArmas.pdf";
            System.out.println("ruta : " + ruta);
            sol.setXpathacta(ruta);
            this.solicitudController.updateSolicitud(sol);

            DtoSave dtosave = super.getDtoSave();
            dtosave.setReturnpk(true); // Para que el core devuelva el pk de los registros nuevos.
            HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();

            Request request = callerhelper.getRequest();
            msave.put(beanalias, dtosave); // adicionar metadata de mantenimiento para cada tabla.

            request.setSaveTables(msave);
            Response resp = callerhelper.executeSave(request);
            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                this.postCommit(resp);
                btnFlujo = Boolean.TRUE;
                btnGrabar = Boolean.FALSE;
                MessageHelper.setMessageInfo(resp);
            } else {
                MessageHelper.setMessageError(resp);
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    /**
     * Metodo que guarda el documento
     */
    public void saveDocumentoHabilitante() {

        try {
            // validamos si cargamos los datos cuando apruebe
            Map<String, Object> datosmail = new HashMap<String, Object>();
            Request request = callerhelper.getRequest();

            TsafeUserDetail tsafeUserDetail = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
            TcustPersonDetail persona = PersonDetailController.find(tsafeUserDetail.getPk().getPersoncode().toString());

            if (codigoAceptado().equals(estado)) {
                request.modifiedData().put("BPMStatus",
                        bpmDataStatus == null ? "A" : bpmDataStatus); // A,D,R  	    
            } else {
                request.modifiedData().put("BPMStatus",
                        bpmDataStatus == null ? "D" : bpmDataStatus); // A,D,R
                datosmail.put("funcionario", persona == null ? "" : ((persona.getMilitarygrade() == null && persona.getMilitarygradecode() == null) ? "" : CatalogDetailController.findxCodigoCodcatalogo(persona.getMilitarygrade(), persona.getMilitarygradecode()).getDescription()) + " " + persona.getName());
                datosmail.put("razons", (solicitud == null || solicitud.getModifiedData().get("nombre") == null) ? "" : solicitud.getModifiedData().get("nombre"));
                datosmail.put("sol", solicitud == null ? "" : solicitud.getPk());
                datosmail.put("centrocontrol", (centroControl == null || centroControl.getNombreinstitucion() == null || centroControl.getNombreinstitucioncodigo() == null) ? "" : CatalogDetailController.findxCodigoCodcatalogo(centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription());

            }

            this.update();

            HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();

            request.modifiedData().put("datosmail", datosmail);
            request.modifiedData().put("csolicitud", codigoSolicitud);
            //request.modifiedData().put("numerotramite", "32");
            request.modifiedData().put("TID", tid);
            request.modifiedData().put("BPMObs", "Analizar documento habilitante");
            request.modifiedData().put("observacion", observacion);

            request.setSaveTables(msave);

            DtoSave dtosave = super.getDtoSave();
            dtosave.setReturnpk(true);
            dtosave.setPosition(1);
            msave.put(beanalias, dtosave);

            request.setSaveTables(msave);
            Response resp = callerhelper.executeSave(request);

            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                this.postCommit(resp);
                MessageHelper.setMessageInfo(resp);
                RequestContext.getCurrentInstance().execute(
                        "Maia.refreshusertasks()");
            } else {
                MessageHelper.setMessageError(resp);
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }

    }

    /**
     * M\u00e9todo que valida si todas las armas se encuentran seleccionadas
     *
     * @return
     */
    public boolean validarSeleccion() {
        for (TarmSolicitudArmas armaSeleccionada : lrecord) {
            if (!armaSeleccionada.modifiedData().containsValue(Boolean.TRUE)) {
                return false;
            }
        }
        return true;
    }

    /**
     * Obtiene el centro de control segun usurio logeado.
     *
     * @throws Exception
     *
     */
    private String obtenerCentroControl() throws Exception {

        this.tsafeUserDetailUsuario = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
        PersonAddressController personAddressController = new PersonAddressController();
        TcustPersonAddress tcustPersonAddres = personAddressController.findPrincipal(tsafeUserDetailUsuario.getPk().getPersoncode().toString());
        if (tcustPersonAddres == null) {
            return null;
        }
        TarmCentroControlJur centroControlJur = TarmCentroControlJurController.findxProvincia(tcustPersonAddres.getProvincecode());
        centroControl = CentroControlArmasController.findPorCodigo(centroControlJur.getCcentrocontrol());
        return CatalogDetailController.findxCodigoCodcatalogo(centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription();
    }

    /**
     * Obtiene el responsable del Centro de Control
     */
    public void obtenerResponsableCentroControl() {
        Integer responsable = this.centroControl.getPersoncode();
        this.responsableCentroControl = PersonDetailController.find(responsable.toString());

    }

    /**
     * Metodo para armar la ruta del documento
     *
     * @return
     */
    public String getRutaDocumento() {
        Calendar calendar = Calendar.getInstance();
        StringBuilder ruta = new StringBuilder("cm:Solicitudes");
        ruta = ruta.append("/cm:A-").append(calendar.get(Calendar.YEAR));
        ruta = ruta.append("/cm:M-").append(
                (calendar.get(Calendar.MONTH) + 1) <= 9 ? "0" + (calendar.get(Calendar.MONTH) + 1) : (calendar.get(Calendar.MONTH) + 1));
        ruta = ruta.append("/cm:D-").append(
                (calendar.get(Calendar.DAY_OF_MONTH)) <= 9 ? "0" + (calendar.get(Calendar.DAY_OF_MONTH)) : (calendar.get(Calendar.DAY_OF_MONTH)));
        TarmSolicitud solicitud = SolicitudArmasController.find(codigoSolicitud);
        ruta = ruta.append("/cm:").append(solicitud.getNumerosolicitud());
        ruta = ruta.append("/cm:").append("armas");
        return ruta.toString();
    }

    /**
     * M\u00e9todo para imprimir
     */
    public void imprimir() {
        try {
            if (!validarSeleccion()) {
                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_imprimir_recepcion_armas"));
                return;
            }
            this.reporteActaEntregaRecepArmas();
        } catch (Exception ex) {
            MessageHelper.setMessageError(ex);
        }
    }

    /**
     * Obtiene el reporte de Acta de Entrega Recepci&oacute;n de Armas
     */
    private void reporteActaEntregaRecepArmas() throws Exception {
        try {
            //this.querydatabase();
            //buttonAction();
            Calendar fechaActualCldr = Calendar.getInstance();
            Calendar fechaCorteCldr = Calendar.getInstance();
            String gradoUsuario = "";
            TarmSolicitud sol = this.solicitudController.findSolicitudxcodsolicitud(this.codigoSolicitud);
            TarmSolicitudTramite soltra = SolicitudTramiteController.findByCSolicitud(this.codigoSolicitud);

            String path = "armas/reports/repo";
            String filename = "actaEntregaRecepcionArmas";//MsgControlArmas.getProperty("lbl_fichaTecnicaArmas");
            String nombreUsuario;
            if (usuario.getPk().getPersoncode() != null) {
                nombreUsuario = PersonDetailController.find(usuario.getPk().getPersoncode().toString()).getName();
            } else {
                nombreUsuario = "";
            }

            //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");
            parameters.put("usuario", nombreUsuario);
            //Centro de control
            parameters.put("centroControl", this.obtenerCentroControl());

            //Fecha actual
            //Fecha de solicitud
            if (sol != null && sol.getNumerosolicitud() != null) {
                if (soltra != null && soltra.getNumerotramite() != null) {
                    parameters.put("numsolicitud", sol.getNumerosolicitud());
                    parameters.put("numtramite", soltra.getNumerotramite());
                    TcustPersonDetail persona = PersonDetailController.find(sol.getPersoncode().toString());
                    parameters.put("cliente", persona.getName());
                }
            } else {
                parameters.put("numsolicitud", " ");
            }

            //No tramite
            if (sol != null && sol.getFregistro() != null) {
                SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");
                parameters.put("fechaSolicitud", sdf2.format(sol.getFregistro()));
            } else {
                parameters.put("fechaSolicitud", " ");
            }

            //codigo solicitud
            parameters.put("csolicitud", this.codigoSolicitud);
            parameters.put("personcode", usuario.getPk().getPersoncode());
            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("fecActual", fechaActualSB.toString());
            //Grado del funcionario
            TgeneCatalogDetail grado = CatalogDetailController.findxCodigoCodcatalogo(this.responsableCentroControl.getMilitarygrade(), this.responsableCentroControl.getMilitarygradecode());
            if (grado != null) {
                gradoUsuario = grado.getDescription() + " - " + this.responsableCentroControl.getName();
            } else {
                gradoUsuario = "Sin Grado - " + this.responsableCentroControl.getName();
            }
            parameters.put("gradoUsuario", gradoUsuario);
            //parameters.put("usuario", this.tsafeUserDetailUsuario.getNickname());
            //parameters.put("codResponsable", this.responsableCentroControl.getPk().getPersoncode().toString());

            String format = "pdf";

            parameters.put("tipotram", this.tipoAutorizacion.getDescription() + " - " + this.categoria.getDescription() + " - " + this.usoActividad.getDescription());
            parameters.put("codResponsable", usuario.getPk().getPersoncode());

            parameters.put("codigoQR", (sol != null ? sol.getNumerosolicitud() : "") + " " + fechaActualSB.toString() + " " + gradoUsuario);

            try {                
                this.xpathflujo = this.getRutaDocumento();
                InputStream report = this.reportController.jaspertoInputstream(path, parameters, format, filename, this.getLoginController());
                this.alfrescoController.uploadFile(report, filename + ".pdf", this.xpathflujo);
                //this.record.setXpathfichatecarmas(this.xpathflujo + "/cm:" + filename+".pdf");
                //this.record.getModifiedData().put("impresion",Boolean.TRUE);
                //this.reportController.execute(path, parameters, format, filename, this.getLoginController());

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

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

    }

    /**
     * @return @throws Exception
     */
    public String codigoAceptado() throws Exception {
        TgeneParameters f = ParametersController.find("ACEPTADO", "1");
        return f.getTextvalue();
    }

    /**
     * M\u00e9todo para fimar documentos
     */
    public void firmar() {
        System.out.println("Firmar");
    }

    /**
     * M\u00e9todo para actualizar las armas en la base de datos seg\u00fan la
     * pantalla en que se encuentre
     *
     * @throws Exception
     */
    private void actualizarSolicitudArmas() throws Exception {
        for (TarmSolicitudArmas armaSeleccionada : lrecord) {
            record = armaSeleccionada;
            if (armaSeleccionada.modifiedData().get("seleccion").equals(Boolean.TRUE)) {
                if (controlPantallaEntregado) {
                    record.setEntregada("Y");
                } else {
                    record.setAprobada("Y");
                }
            }
            if (!armaSeleccionada.modifiedData().get("seleccion").equals(Boolean.TRUE)) {
                if (controlPantallaEntregado) {
                    record.setEntregada("N");
                } else {
                    record.setAprobada("N");
                }
            }
            update();
        }

    }

    /**
     * M\u00e9todo para leer las selecciones guardadas en la base y setearlas
     * seg\u00fan la pantalla en la que se encuentre
     *
     * @throws Exception
     */
    private void actualizarArmas() throws Exception {
        for (TarmSolicitudArmas solicitudArmas : lrecord) {
            if ("Y".equals(solicitudArmas.getEntregada()) && controlPantallaEntregado) {
                solicitudArmas.modifiedData().put("seleccion", Boolean.TRUE);
            }
            if ("Y".equals(solicitudArmas.getAprobada()) && !controlPantallaEntregado) {
                solicitudArmas.modifiedData().put("seleccion", Boolean.TRUE);
            }
        }
    }

    @SuppressWarnings("unchecked")
    protected void querydatabaseValidacionTransito() {
        try {
            DtoQuery dto = super.getDtoQuery(true);

            HashMap<String, DtoQuery> mtables = new HashMap<String, DtoQuery>();
            mtables.put(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<TarmSolicitudArmas>();
                MessageHelper.setMessageError(resp);
            } else {
                this.lrecord = (List<TarmSolicitudArmas>) resp.get(beanalias);
                super.postQuery(this.lrecord);
            }

        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    /**
     * M&eacute;todo para completar la tarea
     */
    public void completarTareaAutorizarTramite() {
        try {
            Request request = callerhelper.getRequest();
            HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();
            super.cleanRequest(request);
            request.modifiedData().put("csolicitud", codigoSolicitud);
            request.modifiedData().put("numerotransaccion", numeroTransaccion);
            request.modifiedData().put("TID", tid);
            if (bpmDataStatus.equalsIgnoreCase("APR") || bpmDataStatus == null) {
                bpmDataStatus = "A";
                if (this.getLoginController() != null && 30 == this.getLoginController().getRequest().getTransactionCode()
                        && "30".equals(getLoginController().getRequest().getTransactionModule())) {
                    guardarcolaImpresionController(msave);
                }
            } else {
                bpmDataStatus = "D";
            }
            request.modifiedData().put("BPMStatus", bpmDataStatus == null ? "A" : bpmDataStatus); // A,D,R
            request.modifiedData().put("BPMObs", bpmDataComment == null ? "OK" : bpmDataComment);

            Map<String, Object> datosmail = new HashMap<String, Object>();
            TsafeUserDetail tsafeUserDetail = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
            TcustPersonDetail persona = PersonDetailController.find(tsafeUserDetail.getPk().getPersoncode().toString());
            if (bpmDataStatus.equals("D")) {
                datosmail.put("funcionario", persona == null ? "" : ((persona.getMilitarygrade() == null && persona.getMilitarygradecode() == null) ? "" : CatalogDetailController.findxCodigoCodcatalogo(persona.getMilitarygrade(), persona.getMilitarygradecode()).getDescription()) + " " + persona.getName());
                datosmail.put("razons", (solicitud == null || solicitud.getModifiedData().get("nombre") == null) ? "" : solicitud.getModifiedData().get("nombre"));
                datosmail.put("sol", solicitud == null ? "" : solicitud.getPk());
                datosmail.put("observaciones", bpmDataComment);
                datosmail.put("centrocontrol", (centroControl == null || centroControl.getNombreinstitucion() == null || centroControl.getNombreinstitucioncodigo() == null) ? "" : CatalogDetailController.findxCodigoCodcatalogo(centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription());
                request.modifiedData().put("datosmail", datosmail);
            } else {
                SimpleDateFormat sdf1 = new SimpleDateFormat(MsgGeneral.getProperty("dateformat"));
                datosmail.put("funcionario", persona == null ? "" : ((persona.getMilitarygrade() == null) ? "" : CatalogDetailController.findxCodigoCodcatalogo(persona.getMilitarygrade(), "MILITARYGRADE").getDescription()) + " " + persona.getName());
                datosmail.put("razons", (solicitud == null || solicitud.getModifiedData().get("nombre") == null) ? "" : solicitud.getModifiedData().get("nombre"));
                datosmail.put("tramite", solicitudTramite.getNumerotramite());
                datosmail.put("centrocontrol", (centroControl == null || centroControl.getNombreinstitucion() == null || centroControl.getNombreinstitucioncodigo() == null) ? "" : CatalogDetailController.findxCodigoCodcatalogo(centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription());
                datosmail.put("fechanotificacion", sdf1.format(new Date()));

                TarmTramite tramite = TarmTramiteController.find(String.valueOf(solicitud.getCtramite()));
                datosmail.put("tipoTramite", (tramite == null || tramite.getModifiedData().get("tipotramite") == null) ? "" : tramite.getModifiedData().get("tipotramite"));
                datosmail.put("tipoAutorizacion", (tramite == null || tramite.getModifiedData().get("tipoautorizacion") == null) ? "" : tramite.getModifiedData().get("tipoautorizacion"));
                datosmail.put("usoactividad", (tramite == null || tramite.getModifiedData().get("usoactividad") == null) ? "" : tramite.getModifiedData().get("usoactividad"));
                datosmail.put("categoria", (tramite == null || tramite.getModifiedData().get("categoria") == null) ? "" : tramite.getModifiedData().get("categoria"));
                request.modifiedData().put("datosmail", datosmail);
            }

            request.setSaveTables(msave);

            Response resp = callerhelper.executeSave(request);
            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                MessageHelper.setMessageInfo(resp);
                if (bpmDataStatus.equals("D")) {
                    saveAnularSolicitud();
                }
                RequestContext.getCurrentInstance().execute("Maia.refreshusertasks()");
            } else {
                MessageHelper.setMessageError(resp);
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    public void saveAnularSolicitud() {
        try {
            TarmTramite tarmTramite = null;
            // CATEGORIA 14	PREVIA IMPORTACION
            if (this.getLoginController().getRequest().getTransactionCode() == 33) {
                tarmTramite = TarmTramiteController.find(this.solicitud.getCtramite().toString());
            } else if (this.getLoginController().getRequest().getTransactionCode() == 30) {
                tarmTramite = TarmTramiteController.find(this.solicitudMP.getRecord().getCtramite().toString());
            }
            if (tarmTramite != null && tarmTramite.getCategoria().equals("14")) {
                desasociarCargaSolicitud();
            }
            //Poner la solicitud en estado anulado
            solicitud.setEstado("ANU");
            solicitud.setAucp(null);
            solicitudMP.setRecord(solicitud);
            solicitudMP.update();
            DtoSave dtoSolicitud = solicitudMP.getDtoSave();

            TarmSolicitudTramite solicitudTramiteObj = SolicitudTramiteController.findByCSolicitud(solicitud.getPk());
            if (solicitudTramiteObj != null) {
                solicitudTramiteObj.setIsnew(false);
                solicitudTramiteObj.setEstadotramite("ANU");
                solicitudTramiteController.updateSolicitud(solicitudTramiteObj);
            }
            // DocumentoHabilitanteController documentoHabilitanteController
            TarmDocumentoHabilitante documentoHabilitanteTmp = DocumentoHabilitanteController.findPorSolicitud(codigoSolicitud);
            if (documentoHabilitanteTmp != null) {
                documentoHabilitanteTmp.setFechaexpiracion(new java.sql.Date(new java.util.Date().getTime()));
                this.documentoHabilitanteController.setRecord(documentoHabilitanteTmp);
                this.documentoHabilitanteController.save();
            }
//        	if(documentoHabilitanteTmp!=null){
//        		TarmDocumentoHabilitanteDetall documentoHabilitanteDetTmp = DocumentoHabilitanteDetalleController.findPorCDocumento(documentoHabilitanteTmp.getPk().toString());
//        		if(documentoHabilitanteDetTmp!=null){
//        			this.documentoHabilitanteDetalleController.setRecord(documentoHabilitanteDetTmp);
//        			this.documentoHabilitanteDetalleController.remove();
//        			this.documentoHabilitanteDetalleController.save();
//        		}
//        		      		
//        		this.documentoHabilitanteController.setRecord(documentoHabilitanteTmp);
//        		this.documentoHabilitanteController.remove();
//        		this.documentoHabilitanteController.save();
//        	}

            //Desasociar las armas en apertura de agencias y apertura de sucursales
            if (solicitud.getCtramite() == 44 || solicitud.getCtramite() == 48) {
                List<TarmSolicitudArmas> armasSolicitudList = RecepcionArmasController.findPorSolicitud(solicitud.getPk());
                for (TarmSolicitudArmas armaObj : armasSolicitudList) {

                    // Codigo agencia de la solicitud
                    List<TarmSolicitudAgenciaSucursal> solicitudAgenciaLst = SolicitudAgenciaSucursalController.findPorSolicitud(solicitud.getPk());
                    for (TarmSolicitudAgenciaSucursal solicitudAgenciaSucursalObj : solicitudAgenciaLst) {
                        String cAgencia = solicitudAgenciaSucursalObj.getPk().getCagencia().toString();
                        TarmAgenciaArma agenciaArmaObj = AgenciaArmaController.findByCArma(armaObj.getPk().getCarma(), cAgencia);
                        agenciaArma.setRecord(agenciaArmaObj);
                        agenciaArma.remove();
                    }
                }
            }

            DtoSave dtoSolicitudTramite = solicitudTramiteController.getDtoSave();
            DtoSave dtoAgenciaArma = agenciaArma.getDtoSave();

            HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();

            Request request = callerhelper.getRequest();
            super.cleanRequest(request);
            msave.put(solicitudMP.getBeanalias(), dtoSolicitud); // adicionar metadata de mantenimiento para cada tabla.
            msave.put(solicitudTramiteController.getBeanalias(), dtoSolicitudTramite);
            msave.put(agenciaArma.getBeanalias(), dtoAgenciaArma);

            request.setSaveTables(msave);
            Response resp = callerhelper.executeSave(request);
            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                solicitudMP.postCommit(resp);
                solicitudTramiteController.postCommit(resp);
                agenciaArma.postCommit(resp);
                MessageHelper.setMessageInfo(resp);
            } else {
                MessageHelper.setMessageError(resp);
            }

        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    public void desasociarCargaSolicitud() {
        try {
            TarmCarga carga = null;
            if (this.getLoginController().getRequest().getTransactionCode() == 33) {
                carga = CargaController.findByAUCP(this.solicitud.getAucp());
            } else if (this.getLoginController().getRequest().getTransactionCode() == 30) {
                carga = CargaController.findByAUCP(solicitudMP.getRecord().getAucp());
            }
            if (carga != null) {
                carga.setCsolicitud(null);
                cargaController.update(carga);
                cargaController.save();
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    /**
     * M&eacute;todo para completar la tarea
     */
    public void completarTarea() {

        try {

            Map<String, Object> datosmail = new HashMap<String, Object>();
            Request request = callerhelper.getRequest();

            TsafeUserDetail tsafeUserDetail = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
            TcustPersonDetail persona = PersonDetailController.find(tsafeUserDetail.getPk().getPersoncode().toString());

            if (bpmDataStatus.equals("A")) {
                guardarDocumentoHabilitante();
                request.modifiedData().put("BPMStatus", bpmDataStatus == null ? "A" : bpmDataStatus); // A,D,R  	    
            } else {
                request.modifiedData().put("BPMStatus", bpmDataStatus == null ? "D" : bpmDataStatus); // A,D,R

                anularTramite();
                datosmail.put("funcionario", persona == null ? "" : ((persona.getMilitarygrade() == null && persona.getMilitarygradecode() == null) ? "" : CatalogDetailController.findxCodigoCodcatalogo(persona.getMilitarygrade(), persona.getMilitarygradecode()).getDescription()) + " " + persona.getName());
                datosmail.put("razons", (solicitud == null || solicitud.getModifiedData().get("nombre") == null) ? "" : solicitud.getModifiedData().get("nombre"));
                datosmail.put("sol", solicitud == null ? "" : solicitud.getPk());
                datosmail.put("centrocontrol", (centroControl == null || centroControl.getNombreinstitucion() == null || centroControl.getNombreinstitucioncodigo() == null) ? "" : CatalogDetailController.findxCodigoCodcatalogo(centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription());

            }

            this.update();

            HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();

            request.modifiedData().put("datosmail", datosmail);
            request.modifiedData().put("csolicitud", codigoSolicitud);
            request.modifiedData().put("numerotransaccion", numeroTransaccion);
            //request.modifiedData().put("xpath", "c");
            request.modifiedData().put("TID", tid);
            request.modifiedData().put("BPMObs", "Analizar documento habilitante");
            request.modifiedData().put("observacion", observacion);

            request.setSaveTables(msave);

            DtoSave dtosave = super.getDtoSave();
            dtosave.setReturnpk(true);
            dtosave.setPosition(1);
            msave.put(beanalias, dtosave);

            request.setSaveTables(msave);

            Response resp = callerhelper.executeSave(request);
            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                this.postCommit(resp);
                if (bpmDataStatus.equals("D")) {
                    saveAnularSolicitud();
                }
                MessageHelper.setMessageInfo(resp);
                RequestContext.getCurrentInstance().execute(
                        "Maia.refreshusertasks()");
            } else {
                MessageHelper.setMessageError(resp);
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }

    }

    /**
     * Metodo para anular el tramite
     *
     * @throws Exception
     */
    private void anularTramite() throws Exception {
        solicitudTramite = solicitudTramiteController.findByCSolicitud(codigoSolicitud);
        solicitudTramiteController.setRecord(solicitudTramite);
        solicitudTramiteController.getRecord().setEstadotramite("ANU");
        solicitudTramiteController.getRecord().setEstadotramitecodigo("ESTADOSOLICITUD");
        solicitudTramiteController.update();
        solicitudTramiteController.save();
    }

    /**
     * M\u00e9todo para encontrar por solicitud
     *
     * @param solicitudCode
     * @return
     */
    public static List<TarmSolicitudArmas> findPorSolicitud(String solicitudCode) {
        try {
            RecepcionArmasController cc = new RecepcionArmasController();
            cc.init();
            cc.recperpage = 500;
            cc.addFilter("pk.csolicitud", solicitudCode);
            cc.querydatabaseValidacionTransito();
            if ((cc.lrecord != null) && !cc.lrecord.isEmpty()) {
                return cc.lrecord;
            }
            return null;
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
            return null;
        }
    }

    /**
     * M&eacute;todo para encontrar un objeto de tipo TarmSolicitudArmas por
     * c&oacute;digo de solicitud
     *
     * @param solicitudCode
     * @param cc
     * @return lrecord de tipo TarmSolicitudArmas
     */
    public static List<TarmSolicitudArmas> findPorSolicitudTodas(String solicitudCode) {
        try {
//    		this.codigoSolicitud = solicitudCode;
            RecepcionArmasController cc = new RecepcionArmasController();
            cc.init();
            cc.recperpage = 10000;
            cc.addFilter("pk.csolicitud", solicitudCode);
            cc.querydatabaseSolicitudArmas();
            if ((cc.lrecord != null) && !cc.lrecord.isEmpty()) {
                return cc.lrecord;
            }
            return null;
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
            return null;
        }
    }

    protected void querydatabaseSolicitudArmas() {
        try {
            this.lArmas.clear();
            this.lGuardias.clear();
            if (codigoSolicitud == null) {
                return;
            }
            DtoQuery dto = this.getDtoQuery();

            HashMap<String, DtoQuery> mtables = new HashMap<String, DtoQuery>();
            mtables.put(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<TarmSolicitudArmas>();
                MessageHelper.setMessageError(resp);
            } else {
                this.lrecord = (List<TarmSolicitudArmas>) resp.get(beanalias);
                super.postQuery(this.lrecord);
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    public DtoQuery getDtoQuery() throws Exception {
        DtoQuery dto = super.getDtoQuery(true);
        dto.setOrderby("t.pk.csolicitud");
        dto.setOrderby("t.pk.csolicitud");
        SubQuery subquerymodelo = new SubQuery("TarmArmas", "modelo", "modelo", "i.pk=t.pk.carma");
        dto.addSubQuery(subquerymodelo);
        SubQuery subqueryacrma = new SubQuery("TarmArmas", "pk", "carma", "i.pk=t.pk.carma");
        dto.addSubQuery(subqueryacrma);
        SubQuery subqueryserie = new SubQuery("TarmArmas", "lote", "lote", "i.pk=t.pk.carma");
        dto.addSubQuery(subqueryserie);
        SubQuery subqueryCantidad = new SubQuery("TarmArmas", "cantidad", "cantidad", "i.pk=t.pk.carma");
        dto.addSubQuery(subqueryCantidad);
        SubQuery subqueryPeso = new SubQuery("TarmArmas", "peso", "peso", "i.pk=t.pk.carma");
        dto.addSubQuery(subqueryPeso);
        SubQuery subqueryUnidadMedida = new SubQuery("TgeneCatalogDetail", "description", "unidadmedida", "i.pk.catalog=(select p.unidadmedidacantidad from TarmArmas p where p.pk=t.pk.carma) and"
                + " i.pk.catalogcode=(select p.unidadmedidacantidadcodigo from TarmArmas p where p.pk=t.pk.carma)");
        dto.addSubQuery(subqueryUnidadMedida);
        SubQuery subqueryMarca = new SubQuery("TgeneCatalogDetail", "description", "marca", "i.pk.catalog=    (select o.marca from TarmArmas o where o.pk=t.pk.carma) "
                + " and i.pk.catalogcode=(select o.marcacodigo from TarmArmas o where o.pk=t.pk.carma)");
        dto.addSubQuery(subqueryMarca);
        SubQuery subqueryColor = new SubQuery("TgeneCatalogDetail", "description", "color", "i.pk.catalog=(select o.color  from TarmArmas o where o.pk=t.pk.carma)"
                + " and i.pk.catalogcode=(select o.colorcodigo  from TarmArmas o where o.pk=t.pk.carma)");
        dto.addSubQuery(subqueryColor);
        SubQuery subqueryEstado = new SubQuery("TgeneCatalogDetail", "description", "estado", "i.pk.catalog=(select o.estado   from TarmArmas o where o.pk=t.pk.carma)"
                + " and i.pk.catalogcode=(select o.estadocodigo   from TarmArmas o where o.pk=t.pk.carma)");
        dto.addSubQuery(subqueryEstado);
        SubQuery subqueryClase = new SubQuery("TgeneCatalogDetail", "description", "clase", "i.pk.catalog=(select o.clase   from TarmTipoArmaExplosivo o"
                + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))"
                + " and i.pk.catalogcode=(select o.clasecodigo   from TarmTipoArmaExplosivo o"
                + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))");
        dto.addSubQuery(subqueryClase);
        SubQuery subqueryLongitud = new SubQuery("TgeneCatalogDetail", "description", "longitud", "i.pk.catalog=(select o.longitud   from TarmTipoArmaExplosivo o"
                + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))"
                + " and i.pk.catalogcode=(select o.longitudcodigo   from TarmTipoArmaExplosivo o"
                + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))");
        dto.addSubQuery(subqueryLongitud);
        SubQuery subqueryCalibre = new SubQuery("TgeneCatalogDetail", "description", "calibre", "i.pk.catalog=(select o.calibre   from TarmTipoArmaExplosivo o"
                + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))"
                + " and i.pk.catalogcode=(select o.calibrecodigo   from TarmTipoArmaExplosivo o"
                + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))");
        dto.addSubQuery(subqueryCalibre);
        SubQuery subqueryTipoArma = new SubQuery("TgeneCatalogDetail", "description", "tipo", "i.pk.catalog=(select o.tipoarmaexplosivo   from TarmTipoArmaExplosivo o"
                + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))"
                + " and i.pk.catalogcode=(select o.tipoarmaexplosivocodigo   from TarmTipoArmaExplosivo o"
                + " where o.pk=(select p.ctipoarmaexplosivo   from TarmArmas p where p.pk=t.pk.carma))");
        dto.addSubQuery(subqueryTipoArma);
        return dto;
    }

    /**
     * Metodo para finalizar la tarea del flujo
     */
    public void completarTareaReceptaArma() {

        try {
            if (!validarSeleccion()) {
                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_validar_seleccion_armas"));
                return;
            }
            Request request = callerhelper.getRequest();
            // limpiar request para finalizar la tarea.
            super.cleanRequest(request);
            request.modifiedData().put("csolicitud", codigoSolicitud);
            request.modifiedData().put("TID", tid);
            request.modifiedData().put("BPMStatus", bpmDataStatus == null ? "A" : bpmDataStatus); // A,D,R
            request.modifiedData().put("BPMObs", bpmDataComment == null ? "OK" : bpmDataComment);

            Response resp = callerhelper.executeSave(request);

            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                MessageHelper.setMessageInfo(resp);
                btnFlujo = Boolean.FALSE;
                RequestContext.getCurrentInstance().execute("Maia.refreshusertasks()");
            } else {
                MessageHelper.setMessageError(resp);
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    public TcustPersonDetail getPersonaDetalle() {
        return personaDetalle;
    }

    public void setPersonaDetalle(TcustPersonDetail personaDetalle) {
        this.personaDetalle = personaDetalle;
    }

    public PersonAddressController getPersonAddressController() {
        return personAddressController;
    }

    public void setPersonAddressController(
            PersonAddressController personAddressController) {
        this.personAddressController = personAddressController;
    }

    public SolicitudTramiteController getSolicitudTramiteController() {
        return solicitudTramiteController;
    }

    public void setSolicitudTramiteController(
            SolicitudTramiteController solicitudTramiteController) {
        this.solicitudTramiteController = solicitudTramiteController;
    }

    public String getProvincia() {
        return provincia;
    }

    public void setProvincia(String provincia) {
        this.provincia = provincia;
    }

    public String getCanton() {
        return canton;
    }

    public void setCanton(String canton) {
        this.canton = canton;
    }

    public String getCiudad() {
        return ciudad;
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }

    public List<TarmArmas> getlArmas() {
        return lArmas;
    }

    public void setlArmas(List<TarmArmas> lArmas) {
        this.lArmas = lArmas;
    }

    public TarmSolicitudTramite getSolicitudTramite() {
        return solicitudTramite;
    }

    public void setSolicitudTramite(TarmSolicitudTramite solicitudTramite) {
        this.solicitudTramite = solicitudTramite;
    }

    public TarmTramite getTramite() {
        return tramite;
    }

    public void setTramite(TarmTramite tramite) {
        this.tramite = tramite;
    }

    public TgeneCatalogDetail getEstadotramite() {
        return estadotramite;
    }

    public void setEstadotramite(TgeneCatalogDetail estadotramite) {
        this.estadotramite = estadotramite;
    }

    public TgeneCatalogDetail getDetallecatalogo() {
        return detallecatalogo;
    }

    public boolean isControlPantallaEntregado() {
        return controlPantallaEntregado;
    }

    public void setControlPantallaEntregado(boolean controlPantallaEntregado) {
        this.controlPantallaEntregado = controlPantallaEntregado;
    }

    public boolean isControlPantallaVisualizarTramiteFirmar() {
        return controlPantallaVisualizarTramiteFirmar;
    }

    public void setControlPantallaVisualizarTramiteFirmar(
            boolean controlPantallaVisualizarTramiteFirmar) {
        this.controlPantallaVisualizarTramiteFirmar = controlPantallaVisualizarTramiteFirmar;
    }

    public boolean isControlPantallaVerificarInformacionDevolucion() {
        return controlPantallaVerificarInformacionDevolucion;
    }

    public void setControlPantallaVerificarInformacionDevolucion(
            boolean controlPantallaVerificarInformacionDevolucion) {
        this.controlPantallaVerificarInformacionDevolucion = controlPantallaVerificarInformacionDevolucion;
    }

    public TgeneCatalogDetail getDetallecatalogoTipoTramite() {
        return detallecatalogoTipoTramite;
    }

    public void setDetallecatalogoTipoTramite(
            TgeneCatalogDetail detallecatalogoTipoTramite) {
        this.detallecatalogoTipoTramite = detallecatalogoTipoTramite;
    }

    public void setDetallecatalogo(TgeneCatalogDetail detallecatalogo) {
        this.detallecatalogo = detallecatalogo;
    }

    public TgeneCatalogDetail getUsoActividad() {
        return usoActividad;
    }

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

    public TgeneCatalogDetail getIdentificacion() {
        return identificacion;
    }

    public void setIdentificacion(TgeneCatalogDetail identificacion) {
        this.identificacion = identificacion;
    }

    public TarmSolicitud getSolicitud() {
        return solicitud;
    }

    public void setSolicitud(TarmSolicitud solicitud) {
        this.solicitud = solicitud;
    }

    public TarmTipoArmaExplosivo getTipoArmaExplosivo() {
        return tipoArmaExplosivo;
    }

    public void setTipoArmaExplosivo(TarmTipoArmaExplosivo tipoArmaExplosivo) {
        this.tipoArmaExplosivo = tipoArmaExplosivo;
    }

    public String getCodigoSolicitud() {
        return codigoSolicitud;
    }

    public void setCodigoSolicitud(String codigoSolicitud) {
        this.codigoSolicitud = codigoSolicitud;
    }

    public SolicitudGuardiasController getSolicitudGuardiasController() {
        return solicitudGuardiasController;
    }

    public void setSolicitudGuardiasController(
            SolicitudGuardiasController solicitudGuardiasController) {
        this.solicitudGuardiasController = solicitudGuardiasController;
    }

    public DocumentoHabilitanteController getDocumentoHabilitanteController() {
        return documentoHabilitanteController;
    }

    public void setDocumentoHabilitanteController(
            DocumentoHabilitanteController documentoHabilitanteController) {
        this.documentoHabilitanteController = documentoHabilitanteController;
    }

    public ArmasController getArmasController() {
        return armasController;
    }

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

    public List<TarmSolicitudGuardias> getlSolicitudGuardias() {
        return lSolicitudGuardias;
    }

    public List<TgeneCatalogDetail> getLaccion() {
        return laccion;
    }

    public void setLaccion(List<TgeneCatalogDetail> laccion) {
        this.laccion = laccion;
    }

    public void setlSolicitudGuardias(List<TarmSolicitudGuardias> lSolicitudGuardias) {
        this.lSolicitudGuardias = lSolicitudGuardias;
    }

    public List<TarmGuardias> getlGuardias() {
        return lGuardias;
    }

    public void setlGuardias(List<TarmGuardias> lGuardias) {
        this.lGuardias = lGuardias;
    }

    public String getObservacion() {
        return observacion;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public TarmCentroControl getCentroControl() {
        return centroControl;
    }

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

    public DocumentoHabilitanteDetalleController getDocumentoHabilitanteDetalleController() {
        return documentoHabilitanteDetalleController;
    }

    public void setDocumentoHabilitanteDetalleController(
            DocumentoHabilitanteDetalleController documentoHabilitanteDetalleController) {
        this.documentoHabilitanteDetalleController = documentoHabilitanteDetalleController;
    }

    public Boolean getBtnFlujo() {
        return btnFlujo;
    }

    public void setBtnFlujo(Boolean btnFlujo) {
        this.btnFlujo = btnFlujo;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public SolicitudController getSolicitudController() {
        return solicitudController;
    }

    public void setSolicitudController(SolicitudController solicitudController) {
        this.solicitudController = solicitudController;
    }

    public ReportController getReportController() {
        return reportController;
    }

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

    public AlfrescoController getAlfrescoController() {
        return alfrescoController;
    }

    public void setAlfrescoController(AlfrescoController alfrescoController) {
        this.alfrescoController = alfrescoController;
    }

    public ColaImpresionController getColaImpresionController() {
        return colaImpresionController;
    }

    public void setColaImpresionController(
            ColaImpresionController colaImpresionController) {
        this.colaImpresionController = colaImpresionController;
    }

    public Boolean getBtnGrabar() {
        return btnGrabar;
    }

    public void setBtnGrabar(Boolean btnGrabar) {
        this.btnGrabar = btnGrabar;
    }

    public List<TarmSolicitudAgenciaSucursal> getSolAgenciaSucursals() {
        return solAgenciaSucursals;
    }

    public void setSolAgenciaSucursals(
            List<TarmSolicitudAgenciaSucursal> solAgenciaSucursals) {
        this.solAgenciaSucursals = solAgenciaSucursals;
    }

    public List<TarmSolicitudDocumento> getDocumentosList() {
        return documentosList;
    }

    public void setDocumentosList(List<TarmSolicitudDocumento> documentosList) {
        this.documentosList = documentosList;
    }

    public AgenciaArmaController getAgenciaArma() {
        return agenciaArma;
    }

    public void setAgenciaArma(AgenciaArmaController agenciaArma) {
        this.agenciaArma = agenciaArma;
    }

    public SolicitudArmasController getSolicitudMP() {
        return solicitudMP;
    }

    public void setSolicitudMP(SolicitudArmasController solicitudMP) {
        this.solicitudMP = solicitudMP;
    }

    public CargaController getCargaController() {
        return cargaController;
    }

    public void setCargaController(CargaController cargaController) {
        this.cargaController = cargaController;
    }

    public Boolean getRequiereNoSolAucpBln() {
        return requiereNoSolAucpBln;
    }

    public void setRequiereNoSolAucpBln(Boolean requiereNoSolAucpBln) {
        this.requiereNoSolAucpBln = requiereNoSolAucpBln;
    }

    public String getNombreInstitucion() {
        return nombreInstitucion;
    }

    public String setNombreInstitucion(String nombreInstitucion) {
        if (nombreInstitucion != null && !nombreInstitucion.isEmpty()) {
            this.nombreInstitucion = nombreInstitucion;
        } else {
            this.nombreInstitucion = "";
        }

        return nombreInstitucion;
    }

}
