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 javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.AjaxBehaviorEvent;

import org.apache.commons.lang.StringUtils;
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.parametros.CentroControlArmasController;
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.param.TarmCentroControl;
import com.fp.persistence.parmas.soli.TarmDecomisoArma;
import com.fp.persistence.parmas.soli.TarmDecomisoArmaTransaccion;
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;

@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class ReporteDestruccionArmasController extends AbstractController<TarmDecomisoArma> {

    private List<TgeneCatalogDetail> lTipoReporte = new ArrayList<TgeneCatalogDetail>();
    private TcustPersonDetail usuario;
    // Filtros de busqueda
    private Date fechaCorte = new Date();
    private String numeroSerie;
    /**
     * atributo para habilitar o desabilitar al boton genera acta
     */
    private Boolean btnGenerarActa;
    /**
     * atributo para habilitar o desabilitar al boton de seleccion por registro
     */
    private Boolean btnTabGrid;
    /**
     * numero de custodia del arma
     */
    private String numeroDecomiso;
    private String institucionCentroControl = "";
    private String institucionUnidadControl = "";
    //Control destino
    private String centroControlDestino;

    private String unidadDestino;

    private Boolean isCentroDpto = Boolean.FALSE;

    /**
     * Codigo del centro de control
     */
    private String codigoOrganismoControlDestino;
    /**
     * codigo de la unidad de control
     */
    private String codigoUnidadControlDestino;

    private String centroControlActual;
    private String unidadActual;

    private List<TgeneCatalogDetail> centroControlsDestinos;
    /**
     * Atributo para la lista de objetos TgeneCatalogDetail
     */
    private List<TarmCentroControl> unidadesDestinos;

    private String format;
    private String tipoReporte;
    private TsafeUserDetail userDetail;
    private Integer diasParaDestruirArma;
    private TarmCentroControl centroControl = new TarmCentroControl();

    private String numeroTransaccionEnvio = "";
    private String numeroTransaccionRecepcion = "";
    private String numeroTransaccion;
    private String numeroTransaccionEnvioConvertido = "";
    private String filtroData = "";
    private boolean transaccionVerificarArmas;
    private boolean transaccionAprobarActaEntrega;
    private String xpathflujo;
    private TcustPersonDetail responsableCentroControl = null;
    List<TarmDecomisoArmaTransaccion> listTarmDecomisoArma = new ArrayList<>();
    private String envioFlujo;//recibe del flujo el numero de transaccion  = "ENV-000000310"
    private String pathflujo;//recibe del flujo la ruta del archivo
    private String cprovincia;
    private Boolean btnFlujo;
    private Boolean btnGrabar;
    /**
     * codigo del decomiso del catalogo ESTADOARMA
     */
    private String codigoDecomiso;
    /**
     * codigo de la incautacion del catalogo ESTADOARMA
     */
    private String codigoIncautacion;
    /**
     * codigo de la entrega voluntaria del catalogo ESTADOARMA
     */
    private String codigoEntVol;
    /**
     * codigo del abandono del catalogo ESTADOARMA
     */
    private String codigoAbandono;
    /**
     * codigo del reclamo del catalogo ESTADOARMA
     */
    private String codigoReclamo;

    /**
     * estado operacion del decomiso del catalogo ESTADOARMA
     */
    private String estadoOperacion;

    /**
     * Deshabilita la pantalla despu&eacute;s de grabar la solicitud
     */
    private boolean btnSelTodos;
    /**
     * Deshabilita la pantalla para filtros despu&eacute;s de grabar la
     * solicitud
     */
    private boolean btnFiltros;

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

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

    @ManagedProperty(value = "#{transaccionArmaBodegaController}")
    private TransaccionArmaBodegaController transaccionArmaBodegaController;

    @ManagedProperty(value = "#{bodegaController}")
    private BodegaController bodegaController;

    @ManagedProperty(value = "#{decomisoArmaTransaccionController}")
    private DecomisoArmaTransaccionController decomisoArmaTransaccionController;

    public ReporteDestruccionArmasController() throws Exception {
        super(TarmDecomisoArma.class);
        // TODO Auto-generated constructor stub
    }

    @PostConstruct
    private void postconstruct() {
        startQuery();
        this.init();
        // Inicializa autoconsulta
        super.startQuery();
    }

    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";//
            String numerotransaccion = super.getMfilters().get("numerotransaccion");
            TarmDecomisoArmaTransaccion decomisoArmaTransaccion = decomisoArmaTransaccionController.find(numerotransaccion);
            envioFlujo = decomisoArmaTransaccion.getNumerotransaccion();
            super.getMfilters().clear();
        } catch (Exception e) {
            MessageHelper.setMessageError(e);
        }
    }

    /**
     * Incializa el controlador, cuando se esta utilizando una pagina que utliza
     * el controlador.
     */
    private void init() {
        try {
            format = "pdf";
            userDetail = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
            diasParaDestruirArma = ParametersController.find("DIASENBODEGA.DESTRUIRARMAS", "1").getNumbervalue().intValue();
            lTipoReporte = CatalogDetailController.find("TIPOREPORTE");
            this.unidadesDestinos = new ArrayList<>();
            this.unidadDestino = "";
            this.centroControlsDestinos = CatalogDetailController.find("INSTITUCION");
            //Tenia antes 10000
            recperpage = 30000;
            lrecord = new ArrayList<>();
            beanalias = "RPRTEDESTRUCCIONDEARMAS";
            obtenerCentroControl();

            TsafeUserDetail tsafeUserDetail = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
            centroControlActual = tsafeUserDetail.getModifiedData().get("centrocontrol").toString();
            unidadActual = tsafeUserDetail.getModifiedData().get("unidad").toString();

            //codigoOrganismoControl = tsafeUserDetail.getCcentrocontrol();
            //codigoUnidadControl = tsafeUserDetail.getCcentrocontrol();       	
            //querydatabase();
            this.responsableCentroControl = new TcustPersonDetail();
            this.obtenerResponsableCentroControl();
            this.numeroTransaccion = null;
            this.btnFlujo = Boolean.FALSE;
            //boton desabilitado
            this.btnGrabar = Boolean.TRUE;
            this.btnGenerarActa = Boolean.TRUE;
            this.btnTabGrid = Boolean.TRUE;
            this.btnSelTodos = Boolean.TRUE;
            this.btnFiltros = Boolean.FALSE;
            this.estadoOperacion = "RECEPCION";
            this.codigoDecomiso = codigos("CODIGO.DECOMISADA");//DECOMISO
            this.codigoIncautacion = codigos("CODIGO.INCAUTADA");//INCAUTACION
            this.codigoEntVol = codigos("CODIGO.ENTV");//ENTREGA VOLUNTARIA
            this.codigoAbandono = codigos("CODIGO.ABAN");//ABANDONO
            this.codigoReclamo = codigos("CODIGO.RECL");//RECLAMO

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

    /**
     * Metodo para obtener los codigos
     */
    private String codigos(String parametro) {
        TgeneParameters tgeneParameters = ParametersController.find(parametro, "1");
        return tgeneParameters.getTextvalue();
    }

    /**
     * Metodo que se debe ejecutar cuando es una transaccion de tipo verificar
     * armas
     *
     * @throws Exception
     */
    private void obtenerCentroControl() throws Exception {

        if (this.getLoginController() != null && 53 == this.getLoginController().getRequest().getTransactionCode() && "30".equals(getLoginController().getRequest().getTransactionModule())) {
            transaccionVerificarArmas = true;
            TsafeUserDetail tsafeUserDetail = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
            centroControl = CentroControlArmasController.findPorCodigo(tsafeUserDetail.getCcentrocontrol());
            institucionCentroControl = CatalogDetailController.findxCodigoCodcatalogo(centroControl.getInstitucion(), centroControl.getInstituciontipo()).getDescription();
            institucionUnidadControl = CatalogDetailController.findxCodigoCodcatalogo(centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription();
            cprovincia = centroControl.getProvincecode();
        }
        /**
         * Obtiene el responsable del Centro de Control
         */

        if (this.getLoginController() != null && 58 == this.getLoginController().getRequest().getTransactionCode() && "30".equals(getLoginController().getRequest().getTransactionModule())) {

            transaccionAprobarActaEntrega = true;
            numeroTransaccionEnvio = envioFlujo;
            listTarmDecomisoArma = DecomisoArmaTransaccionController.findPorEnvio(numeroTransaccionEnvio, false);
            centroControl = CentroControlArmasController.findPorCodigo(listTarmDecomisoArma.get(0).getCcentrocontrol());
            institucionCentroControl = CatalogDetailController.findxCodigoCodcatalogo(centroControl.getInstitucion(), centroControl.getInstituciontipo()).getDescription();
            institucionUnidadControl = CatalogDetailController.findxCodigoCodcatalogo(centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription();
            fechaCorte = listTarmDecomisoArma.get(0).getFcorte();
            querydatabase();

        }

    }

    public void obtenerResponsableCentroControl() {
        Integer responsable = this.centroControl.getPersoncode();
        this.responsableCentroControl = PersonDetailController.find(responsable.toString());

    }

    /**
     * Carga las unidades de control por el centro de control
     */
    public void seleccionaCentroControlDestino() {
        if (centroControlDestino != null) {
            unidadesDestinos = CentroControlArmasController.findxInstitucion(centroControlDestino);
        } else {
            unidadesDestinos = new ArrayList<>();
        }
    }

    /**
     * Seleccionado todos los registros de la tabla
     */
    public void seleccionarTodos(AjaxBehaviorEvent event) {
        try {
            Boolean valorColocar = Boolean.FALSE;
            if (Boolean.valueOf(event.getComponent().getAttributes().get("value") != null ? event.getComponent().getAttributes().get("value").toString() : "false")) {
                valorColocar = Boolean.TRUE;
            }

            btnGrabar = Boolean.TRUE;
            for (TarmDecomisoArma decomisoArma : lrecord) {
                decomisoArma.getModifiedData().put("seleccion", valorColocar);
                if (decomisoArma.getModifiedData().get("seleccion").equals(Boolean.TRUE)) {
                    btnGrabar = Boolean.FALSE;
                    //itemsUnidadBolean=Boolean.TRUE;
                }
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    /**
     * Generar Acta
     */
    public void generarActa() {
        String gradoUsuario = "";

        if (fechaCorte != null) {
            Calendar fechaActualCldr = Calendar.getInstance();
            List<TarmDecomisoArmaTransaccion> listTarmDecomisoArma = DecomisoArmaTransaccionController.findPorEnvio(numeroTransaccionEnvioConvertido, false);
            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();
            }

            String codigoreporte = listTarmDecomisoArma.get(0).getPk().toString();
            String path = "armas/reports/entregaArmasacta";
            String filename = numeroTransaccionEnvioConvertido;

            //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("fechaCorte", (new SimpleDateFormat("dd-MM-yyyy")).format(fechaCorte).toString());
            parameters.put("codResponsable", this.responsableCentroControl.getPk().getPersoncode());
            parameters.put("gradoUsuario", gradoUsuario.trim());
            try {
                //Usuario logueado en la aplicacion
                String nombreUsuario;
                if (userDetail.getPk().getPersoncode() != null) {
                    nombreUsuario = PersonDetailController.find(userDetail.getPk().getPersoncode().toString()).getName();
                    parameters.put("personcode", userDetail.getPk().getPersoncode());
                } else {
                    nombreUsuario = "";
                }
                parameters.put("usuario", nombreUsuario.trim());
                parameters.put("centrocontrolorigen", institucionCentroControl.trim());
                parameters.put("unidadcontrolorigen", institucionUnidadControl.trim());
                TarmCentroControl centroControlDestino = CentroControlArmasController.findPorCodigo(unidadDestino);
                String centroControlDestinoStr = CatalogDetailController.findxCodigoCodcatalogo(centroControlDestino.getInstitucion(), centroControlDestino.getInstituciontipo()).getDescription();
                String unidadControlDestinoStr = CatalogDetailController.findxCodigoCodcatalogo(centroControlDestino.getNombreinstitucion(), centroControlDestino.getNombreinstitucioncodigo()).getDescription();

                parameters.put("centrocontroldestino", centroControlDestinoStr.trim());
                parameters.put("unidadcontroldestino", unidadControlDestinoStr.trim());
                parameters.put("tecnicoAlmacenamiento", MsgControlArmas.getProperty("tecnicoAlmacenamiento") + " " + institucionCentroControl);
                parameters.put("jefe", MsgControlArmas.getProperty("jefe") + " " + institucionCentroControl);
                parameters.put("codigodecomisoarma", codigoreporte);
                parameters.put("tramite", numeroTransaccionEnvioConvertido);
                //Fecha actual        		
                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());
                //parameters.put("transaccion",numeroTransaccionEnvioConvertido);

                //format = CatalogDetailController.findxCodigoCodcatalogo(tipoReporte, "TIPOREPORTE").getLegalcode();
                format = "pdf";
                InputStream file = this.reportController.jaspertoInputstream(path, parameters, format, filename, this.getLoginController());
                xpathflujo = generarXpath();

                alfrescoController.uploadFile(file, numeroTransaccionEnvioConvertido + ".pdf", xpathflujo);
                //="cm:Decomiso/cm:A-2016/cm:M-01/cm:CENTRO CONTROL/cm:ABANDONO/cm:ENV/cm:ENV-000000319.pdf"

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

        }
    }

    /**
     * M&eacute;todo para habilitar o desabilitar el btn Arma a decomisar
     *
     * @throws Exception
     */
    public void onChange(TarmDecomisoArma decomisoArma) throws Exception {
        btnGrabar = Boolean.TRUE;
        //itemsUnidadBolean=Boolean.FALSE;
        for (TarmDecomisoArma t : lrecord) {
            if (t.getModifiedData().get("seleccion").equals(Boolean.TRUE)) {
                btnGrabar = Boolean.FALSE;
                //itemsUnidadBolean=Boolean.TRUE;
            }
        }
    }

    /**
     * Metodo para generar la ruta del alfresco
     *
     * @return
     */
    public String generarXpath() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        StringBuilder ruta = new StringBuilder("cm:Decomiso");

        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));
        String centrocontrol = institucionUnidadControl.replaceAll("\\s+", "_");
        ruta = ruta.append("/cm:").append(centrocontrol);
        ruta = ruta.append("/cm:" + "ENV");

        return ruta.toString();
    }

    /**
     * M&eacute;todo para devolver la descripcion
     *
     * @param list
     * @param codigo
     * @return
     */
    public String catalogoDescripcion(List<TgeneCatalogDetail> list, String codigo) {
        for (TgeneCatalogDetail item : list) {
            if (codigo.equals(item.getPk().getCatalog())) {
                return item.getDescription();
            }
        }
        return null;
    }

    /**
     * Ejecuta un reporte de armas a destruir M&eacute;todo para el inicio de
     * flujo
     */
    public void iniciarFlujo() {
        try {
            if (xpathflujo == null || numeroTransaccion == null) {
                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_generereporte"));
                return;
            }
            if (cprovincia == null) {
                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_sinprovincia"));
                return;
            }
            String xpath = xpathflujo + "/cm:" + numeroTransaccionEnvioConvertido + ".pdf";
            Request request = callerhelper.getRequest();
            super.cleanRequest(request);
            //codigo de la tabla TarmDecomisoArmaTransaccion
            request.modifiedData().put("numerotransaccion", numeroTransaccion);
            //codigo de la provincia
            request.modifiedData().put("cprovincia", cprovincia);
            //ruta del archivo para la firma
            //TODO Falta crear la variable en maia 2-8
            request.modifiedData().put("xpath", xpath);
            request.modifiedData().put("numerosolicitud", numeroTransaccionEnvioConvertido);
            request.modifiedData().put("isnew", "Y");
            request.setLogsolicitude(numeroTransaccionEnvioConvertido);
            Response resp = callerhelper.executeSave(request);
            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                this.setShowRow(true);
                MessageHelper.setMessageInfo(resp, MsgGeneral.getProperty("msg_initFlow") + " NUMERO TRANSACCION:  " + numeroTransaccion);
                xpathflujo = null;
                numeroTransaccion = null;
                this.btnGrabar = Boolean.TRUE;
                this.btnFlujo = Boolean.FALSE;
                this.btnSelTodos = Boolean.TRUE;
                this.btnGenerarActa = Boolean.TRUE;
                numeroTransaccionEnvioConvertido = null;

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

    /**
     * Crea una instancia de TgeneTransactionProcess y marca el registro como
     * nuevo.
     *
     * @throws Exception
     */
    @Override
    public void create() throws Exception {
        super.create();
    }

    /**
     * Metodo para filtrar por el numero de transaccion despues de la
     * realizacion del guardado
     *
     * @throws Exception
     */
    protected void querydata() throws Exception {
        filtroData = numeroTransaccionEnvio;
        query();
        setFiltroData("");
    }

    /**
     * Se ejecuta cuando seleccionamos forzar consulta cuando hay data en el
     * grid
     */
    @Override
    public void forcedQuery() throws Exception {
        centroControlDestino = null;
        this.init();
        super.forcedQuery();
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void querydatabase() {
        //clearAll(); 

        /*this.btnGrabar=Boolean.TRUE;
    	this.btnGenerarActa=Boolean.TRUE;
    	this.btnSelTodos = Boolean.TRUE;*/
        //Verificar si tiene o no contenido seleccionado
        if (lrecord != null && !lrecord.isEmpty() && btnTabGrid) {
            for (TarmDecomisoArma decomisoArma : lrecord) {
                if (decomisoArma.getModifiedData().get("seleccion")
                        .equals(Boolean.TRUE)) {
                    RequestContext.getCurrentInstance().execute(
                            "PF('queryConfirmDialog').show()");
                    return;
                }

            }

        }
        try {
            numeroTransaccionEnvio = filtroData;
            if (fechaCorte != null && !fechaCorte.after(new Date())) {

                DtoQuery dto = this.getDtoQuery();
                dto.setOrderby("t.fdecomiso");
                Request request = this.callerhelper.getRequest();
                if ((transaccionVerificarArmas || transaccionAprobarActaEntrega) && centroControl == null) {
                    MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_sin_centrocontrol"));
                    return;
                }
                if (numeroTransaccionRecepcion != null && !numeroTransaccionRecepcion.isEmpty() && !numeroTransaccionRecepcion.substring(0, 3).equalsIgnoreCase("REC")) {
                    MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_numero_recepcion"));
                    return;
                }

                if (transaccionVerificarArmas) {
                    try {

                        //Valores para el filtro
                        request.put("centroControl", centroControl.getPk());
                        request.put("numeroDecomiso", numeroDecomiso);
                        request.put("numeroserie", numeroSerie);
                        request.put("fechacorte", fechaCorte.toString());
                        //QueryRule VerificarArmasQuery 
                        request.put("queryalias", "TRANSVERIFICARARMAS");

                    } catch (Exception e) {
                        MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_sin_decomisos"));
                        return;
                    }
                } else if (transaccionAprobarActaEntrega) {
                    try {
                        dto = filtroAprobarActaEntrega(dto);
                    } catch (Exception e) {
                        MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_sin_decomisos"));
                        return;
                    }
                } else {
                    Filter fechaFiltro = new Filter();
                    fechaFiltro.setSql("t.fdecomiso < " + "TO_DATE('" + fechaCorte.toString() + "','yyyy-mm-dd')");
                    dto.addFiltro(fechaFiltro);
                }
                HashMap<String, DtoQuery> mtables = new HashMap<String, DtoQuery>();
                mtables.put(beanalias, dto); // permite adicionar mas de una tabla.    			
                request.setQueryTables(mtables);

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

                if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) != 0) {
                    lrecord = new ArrayList<TarmDecomisoArma>();
                    btnSelTodos = Boolean.TRUE;

                    MessageHelper.setMessageError(resp);
                } else {

                    lrecord = (List<TarmDecomisoArma>) resp.get(beanalias);

                    if (lrecord != null && !lrecord.isEmpty()) {
                        btnSelTodos = Boolean.FALSE;

                        List<TarmDecomisoArma> listaNoenviada = new ArrayList<TarmDecomisoArma>();
                        for (TarmDecomisoArma decomisoArma : lrecord) {
                            if (!filtroData.isEmpty()) {

                                decomisoArma.getModifiedData().put("seleccion", Boolean.TRUE);
                            } else {
                                decomisoArma.getModifiedData().put("seleccion", Boolean.FALSE);
                            }
                            if (decomisoArma.getModifiedData().get("estadoflujo") != null && decomisoArma.getModifiedData().get("estadoflujo").equals("NOENV")) {
                                listaNoenviada.add(decomisoArma);
                            }
                        }
                        for (TarmDecomisoArma decomisoArma : listaNoenviada) {
                            lrecord.remove(decomisoArma);
                        }
                        super.postQuery(lrecord);
                    } else {
                        MessageHelper.setMessageInfo(MsgControlArmas.getProperty("msg_info_consultarArmasDecomidas"));
                    }

                }
            } else {
                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_fechaCorteMayorAFechaActual"));
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    private DtoQuery getDtoQuery() throws Exception {
        DtoQuery dto = super.getDtoQuery(true);
        SubQuery subqueryCarma = new SubQuery("TarmArmas", "pk", "ncodigoarma", "i.pk=t.carma");
        dto.addSubQuery(subqueryCarma);
        SubQuery subqueryTipoArmaExplosivo = new SubQuery("TgeneCatalogDetail", "description", "ntipo", "i.pk.catalog=    (select o.tipoarmaexplosivo       from TarmTipoArmaExplosivo o "
                + " where o.pk= (select p.ctipoarmaexplosivo from TarmArmas p where p.pk=t.carma))"
                + " and i.pk.catalogcode=(select o.tipoarmaexplosivocodigo from TarmTipoArmaExplosivo o"
                + " where o.pk=(select p.ctipoarmaexplosivo from TarmArmas p where p.pk=t.carma))");
        dto.addSubQuery(subqueryTipoArmaExplosivo);
        SubQuery subqueryClasecatalogo = new SubQuery("TgeneCatalogDetail", "description", "nclase", "i.pk.catalog=    (select o.clase       from TarmTipoArmaExplosivo o"
                + " where o.pk=(select p.ctipoarmaexplosivo from TarmArmas p where p.pk=t.carma)) and "
                + " i.pk.catalogcode=(select o.clasecodigo from TarmTipoArmaExplosivo o "
                + " where o.pk=(select p.ctipoarmaexplosivo from TarmArmas p where p.pk=t.carma))");
        dto.addSubQuery(subqueryClasecatalogo);
        SubQuery subqueryRazonSocial = new SubQuery("TcustPersonDetail", "name", "razonsPropietario", "i.pk.personcode=(select p.personcode from TarmRegistroArmas p where p.pk=(select o.cregistro  from TarmArmas o where o.pk=t.carma)) "
                + " and i.pk.dateto=to_date('2999-12-31', 'YYYY-MM-DD')");
        dto.addSubQuery(subqueryRazonSocial);
        SubQuery subqueryIndentificacion = new SubQuery("TcustPersonDetail", "identification", "documentoPropietario", "i.pk.personcode=(select p from TarmRegistroArmas p where p.pk=(select o.cregistro  from TarmArmas o where o.pk=t.carma)) "
                + " and i.pk.dateto=to_date('2999-12-31', 'YYYY-MM-DD')");

        dto.addSubQuery(subqueryIndentificacion);

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

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

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

        SubQuery subqueryNRecivo = new SubQuery("TarmDecomiso", "numerorecibo", "nrecibo", "i.pk=t.cdecomiso");
        dto.addSubQuery(subqueryNRecivo);
        SubQuery subqueryNTransaccion = new SubQuery("TarmDecomiso", "numerotransaccion", "numerotransaccion", "i.pk=t.cdecomiso");
        dto.addSubQuery(subqueryNTransaccion);
        SubQuery subqueryUnidadTipo = new SubQuery("TgeneCatalogDetail", "description", "nunidad", "i.pk.catalog=    (select o.unidadmedidapeso       from TarmTipoArmaExplosivo o"
                + " where o.pk=(select p.ctipoarmaexplosivo from TarmArmas p where p.pk=t.carma)) and "
                + " i.pk.catalogcode=(select o.unidadmedidapesocodigo from TarmTipoArmaExplosivo o"
                + " where o.pk=(select p.ctipoarmaexplosivo from TarmArmas p where p.pk=t.carma))");
        dto.addSubQuery(subqueryUnidadTipo);

        SubQuery subqueryColor = new SubQuery("TgeneCatalogDetail", "description", "color", "i.pk.catalog=    (select o.color       from TarmArmas o where o.pk=t.carma)"
                + " and i.pk.catalogcode=(select o.colorcodigo from TarmArmas o where o.pk=t.carma)");
        dto.addSubQuery(subqueryColor);
        SubQuery subqueryEstado = new SubQuery("TgeneCatalogDetail", "description", "estado", "i.pk.catalog=    (select o.estado       from TarmArmas o where o.pk=t.carma) "
                + " and i.pk.catalogcode=(select o.estadocodigo from TarmArmas o where o.pk=t.carma)");
        dto.addSubQuery(subqueryEstado);
        //tarmdecomiso
        SubQuery subquerynrecibo = new SubQuery("TarmDecomiso", "numerorecibo", "nrecibo", "i.pk=t.cdecomiso");
        dto.addSubQuery(subquerynrecibo);
        SubQuery subquerynrazon = new SubQuery("TarmDecomiso", "nombrerazonsocial", "nrazons", "i.pk=t.cdecomiso");
        dto.addSubQuery(subquerynrazon);
        SubQuery subquerydocumento = new SubQuery("TarmDecomiso", "numerodocumento", "documento", "i.pk=t.cdecomiso");
        dto.addSubQuery(subquerydocumento);

        SubQuery subqueryestadoflujo = new SubQuery("TarmDecomisoArmaTransaccion", "estadoflujo", "estadoflujo", "i.pk=t.cdecomisoarmatransaccion");
        dto.addSubQuery(subqueryestadoflujo);
        return dto;
    }

    /* (non-Javadoc)
	 * @see com.fp.frontend.controller.AbstractController#save()
     */
    @Override
    public void save() {
        try {
            if (unidadDestino == null || unidadDestino.isEmpty() || centroControlDestino == null || centroControlDestino.isEmpty()) {
                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_verificarcentcontdestino"));
                return;
            }
            if (this.getLoginController() != null && 53 == this.getLoginController().getRequest().getTransactionCode() && "30".equals(getLoginController().getRequest().getTransactionModule())) {
                List<TarmDecomisoArma> listaSeleccionada = new ArrayList<TarmDecomisoArma>();
                Boolean seleccion = Boolean.FALSE;

                for (TarmDecomisoArma decomisoArma : this.lrecord) {
                    record = decomisoArma;

                    if (record.getModifiedData().get("seleccion").equals(Boolean.TRUE)) {
                        seleccion = true;
                        record.setCdecomisoarmatransaccion(0l);//valor cualquiera seteado para que el transaction rule lo tome como actualizacion
                        record.setCoperaciontransaccion("ENVIO");
                        transaccionArmaBodegaController.create();
                        transaccionArmaBodegaController.getRecord().setCarma(record.getCarma());
                        transaccionArmaBodegaController.getRecord().setCcentrocontrolorigen(centroControl.getPk());
                        //Nuevo le doy destino de envio
                        transaccionArmaBodegaController.getRecord().setCcentrocontroldestino(unidadDestino);
                        transaccionArmaBodegaController.update();

                        bodegaController.create();
                        bodegaController.getRecord().setCarma(record.getCarma());
                        bodegaController.getRecord().setCcentrocontrol(centroControl.getPk());
                        bodegaController.update();
                        listaSeleccionada.add(record);
                    }
                    this.update();
                }

                if (!seleccion) {
                    MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_verificararmas"));
                    return;
                }

                Request request = callerhelper.getRequest();
                HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();

                Calendar cal = Calendar.getInstance();
                cal.setTime(fechaCorte);
                java.sql.Date fechaCorteRegistro = new java.sql.Date(cal.getTimeInMillis());

                this.decomisoArmaTransaccionController.create();
                this.decomisoArmaTransaccionController.getRecord().setFtransaccion(null);
                this.decomisoArmaTransaccionController.getRecord().setFcorte(fechaCorteRegistro);
                this.decomisoArmaTransaccionController.getRecord().setCcentrocontrol(centroControl.getPk());

                if (!"1".equals(CatalogDetailController.findxCodigoCodcatalogo(centroControl.getInstitucion(), centroControl.getInstituciontipo()).getPk().getCatalog())) {
                    this.decomisoArmaTransaccionController.getRecord().setEstadofirma("Y");
                    this.decomisoArmaTransaccionController.getRecord().setEstadoflujo("ENV");
                    isCentroDpto = Boolean.FALSE;
                } else {
                    this.decomisoArmaTransaccionController.getRecord().setEstadofirma("N");
                    this.decomisoArmaTransaccionController.getRecord().setEstadoflujo("NOENV");
                    isCentroDpto = Boolean.TRUE;
                }

                this.decomisoArmaTransaccionController.update();

                DtoSave dtosaveDecomisoTran = this.decomisoArmaTransaccionController.getDtoSave(true);
                dtosaveDecomisoTran.setReturnpk(true);
                dtosaveDecomisoTran.setPosition(1);
                msave.put(decomisoArmaTransaccionController.getBeanalias(), dtosaveDecomisoTran);

                DtoSave dtosaveDecomiso = this.getDtoSave(true);
                dtosaveDecomiso.setReturnpk(true);
                dtosaveDecomiso.setPosition(2);
                msave.put(getBeanalias(), dtosaveDecomiso);

                DtoSave dtosaveBodegaTransaccion = this.transaccionArmaBodegaController.getDtoSave();
                dtosaveBodegaTransaccion.setReturnpk(true);
                dtosaveBodegaTransaccion.setPosition(3);
                msave.put(this.transaccionArmaBodegaController.getBeanalias(), dtosaveBodegaTransaccion);

                DtoSave dtosaveBodega = this.bodegaController.getDtoSave();
                dtosaveBodega.setReturnpk(true);
                dtosaveBodega.setPosition(4);
                msave.put(this.bodegaController.getBeanalias(), dtosaveBodega);

                request.setSaveTables(msave);
                Response resp = callerhelper.executeSave(request);
                if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {

                    this.decomisoArmaTransaccionController.postCommit(resp);
                    this.transaccionArmaBodegaController.postCommit(resp);
                    this.bodegaController.postCommit(resp);
                    numeroTransaccionEnvio = String.valueOf(((TarmDecomisoArmaTransaccion) (dtosaveDecomisoTran.getLinsert().get(0))).getPk());
                    numeroTransaccion = numeroTransaccionEnvio;
                    setNumeroTransaccionEnvioConvertido("ENV" + "-" + StringUtils.leftPad(numeroTransaccionEnvio, 9, '0'));
                    this.btnGrabar = Boolean.TRUE;
                    this.btnFlujo = Boolean.TRUE;
                    this.btnSelTodos = Boolean.TRUE;
                    this.btnFiltros = Boolean.TRUE;
                    this.btnTabGrid = Boolean.FALSE;
                    this.postCommit(resp);
                    lrecord = listaSeleccionada;
                    MessageHelper.setMessageInfo(resp);

                    FacesContext context = FacesContext.getCurrentInstance();
                    context.addMessage(null, new FacesMessage("RECUERDE", MsgControlArmas.getProperty("msg_recuerdeClickGenerarActa")));
                    context.addMessage(null, new FacesMessage("RECUERDE", MsgControlArmas.getProperty("msg_recuerdeClickContinuarTramite")));
                } else {
                    MessageHelper.setMessageError(resp);
                }
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }

    }

    /**
     * Para realizar el filtro por acta de aprobaci&oacute;n
     *
     * @param dto Dto de los datos consultados
     * @return
     * @throws Exception
     */
    private DtoQuery filtroAprobarActaEntrega(DtoQuery dto) throws Exception {

        fechaCorte = new Date();
        numeroTransaccionEnvio = envioFlujo;

        Filter decomisoFiltro = new Filter();

        decomisoFiltro.setSql("  t.cdecomisoarmatransaccion= '" + listTarmDecomisoArma.get(0).getPk() + "'");
        dto.addFiltro(decomisoFiltro);

        return dto;
    }

    @Override
    public void postCommit(Response response) throws Exception {
        super.postCommitGeneric(response, beanalias);
    }

    /**
     * Genera un reporte de armas a destruir
     *
     */
    public void generateReport() {
        if (fechaCorte != null) {
            Calendar fechaActualCldr = Calendar.getInstance();
            Calendar fechaCorteCldr = Calendar.getInstance();
            fechaCorteCldr.setTime(fechaCorte);
            if (fechaActualCldr.compareTo(fechaCorteCldr) >= 0) {
                String path = "armas/reports/destruccionArmas";
                String filename = "armas";

                //Fija parametros del report.
                HashMap<String, Object> parameters = new HashMap<>();
                parameters.put("pathLogoIzquierda", "repo:/maia/1/image/comandoconjunto");
                parameters.put("pathLogoDerecha", "repo:/maia/1/image/selloarmas");

                try {

                    //Usuario logueado en la aplicacion
                    String nombreUsuario;
                    if (userDetail.getPk().getPersoncode() != null) {
                        nombreUsuario = PersonDetailController.find(userDetail.getPk().getPersoncode().toString()).getName();
                    } else {
                        nombreUsuario = "";
                    }
                    parameters.put("usuario", nombreUsuario);

                    //Fecha de corte
                    StringBuilder fechaCorteSB = new StringBuilder();
                    fechaCorteSB = fechaCorteSB.append((fechaCorteCldr.get(Calendar.DAY_OF_MONTH)) <= 9 ? "0" + (fechaCorteCldr.get(Calendar.DAY_OF_MONTH)) : (fechaCorteCldr.get(Calendar.DAY_OF_MONTH)));
                    fechaCorteSB = fechaCorteSB.append("-").append((fechaCorteCldr.get(Calendar.MONTH) + 1) <= 9 ? "0" + (fechaCorteCldr.get(Calendar.MONTH) + 1) : (fechaCorteCldr.get(Calendar.MONTH) + 1));
                    fechaCorteSB = fechaCorteSB.append("-").append(fechaCorteCldr.get(Calendar.YEAR));
                    parameters.put("fechaCorte", fechaCorteSB.toString());

                    //Fecha actual        		
                    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());

                    //Fecha de referencia
                    Calendar fechaReferenciaReporteCldr = Calendar.getInstance();
                    fechaReferenciaReporteCldr.setTime(fechaCorte);
                    fechaReferenciaReporteCldr.add(Calendar.DAY_OF_MONTH, -diasParaDestruirArma);
                    StringBuilder fechaReferenciaSB = new StringBuilder();
                    fechaReferenciaSB = fechaReferenciaSB.append((fechaReferenciaReporteCldr.get(Calendar.DAY_OF_MONTH)) <= 9 ? "0" + (fechaReferenciaReporteCldr.get(Calendar.DAY_OF_MONTH)) : (fechaReferenciaReporteCldr.get(Calendar.DAY_OF_MONTH)));
                    fechaReferenciaSB = fechaReferenciaSB.append("-").append((fechaReferenciaReporteCldr.get(Calendar.MONTH) + 1) <= 9 ? "0" + (fechaReferenciaReporteCldr.get(Calendar.MONTH) + 1) : (fechaReferenciaReporteCldr.get(Calendar.MONTH) + 1));
                    fechaReferenciaSB = fechaReferenciaSB.append("-").append(fechaReferenciaReporteCldr.get(Calendar.YEAR));
                    parameters.put("fechaReferenciaReporte", fechaReferenciaSB.toString());

                    //format = CatalogDetailController.findxCodigoCodcatalogo(tipoReporte, "TIPOREPORTE").getLegalcode();
                    format = "pdf";
                    this.reportController.execute(path, parameters, format, filename, this.getLoginController());
                } catch (Exception ex) {
                    MessageHelper.setMessageError(ex);
                }
            } else {
                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_fechaCorteMayorAFechaActual"));
            }
        }
    }

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

        try {
            Request request = callerhelper.getRequest();
            // limpiar request para finalizar la tarea.
            super.cleanRequest(request);
            request.modifiedData().put("numerotransaccion", envioFlujo);
            request.modifiedData().put("xpath", pathflujo);
            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);
                RequestContext.getCurrentInstance().execute("Maia.refreshusertasks()");

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

    public List<TgeneCatalogDetail> getlTipoReporte() {
        return lTipoReporte;
    }

    public void setlTipoReporte(List<TgeneCatalogDetail> lTipoReporte) {
        this.lTipoReporte = lTipoReporte;
    }

    public TcustPersonDetail getUsuario() {
        return usuario;
    }

    public void setUsuario(TcustPersonDetail usuario) {
        this.usuario = usuario;
    }

    public Date getFechaCorte() {
        return fechaCorte;
    }

    public void setFechaCorte(Date fechaCorte) {
        this.fechaCorte = fechaCorte;
    }

    public String getFormat() {
        return format;
    }

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

    public ReportController getReportController() {
        return reportController;
    }

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

    public String getTipoReporte() {
        return tipoReporte;
    }

    public void setTipoReporte(String tipoReporte) {
        this.tipoReporte = tipoReporte;
    }

    public TsafeUserDetail getUserDetail() {
        return userDetail;
    }

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

    public Integer getDiasParaDestruirArma() {
        return diasParaDestruirArma;
    }

    public void setDiasParaDestruirArma(Integer diasParaDestruirArma) {
        this.diasParaDestruirArma = diasParaDestruirArma;
    }

    public TarmCentroControl getCentroControl() {
        return centroControl;
    }

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

    public String getInstitucionCentroControl() {
        return institucionCentroControl;
    }

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

    public boolean isTransaccionVerificarArmas() {
        return transaccionVerificarArmas;
    }

    public void setTransaccionVerificarArmas(boolean transaccionVerificarArmas) {
        this.transaccionVerificarArmas = transaccionVerificarArmas;
    }

    public DecomisoArmaTransaccionController getDecomisoArmaTransaccionController() {
        return decomisoArmaTransaccionController;
    }

    public void setDecomisoArmaTransaccionController(
            DecomisoArmaTransaccionController decomisoArmaTransaccionController) {
        this.decomisoArmaTransaccionController = decomisoArmaTransaccionController;
    }

    public TransaccionArmaBodegaController getTransaccionArmaBodegaController() {
        return transaccionArmaBodegaController;
    }

    public void setTransaccionArmaBodegaController(
            TransaccionArmaBodegaController transaccionArmaBodegaController) {
        this.transaccionArmaBodegaController = transaccionArmaBodegaController;
    }

    public String getNumeroTransaccionEnvio() {
        return numeroTransaccionEnvio;
    }

    public void setNumeroTransaccionEnvio(String numeroTransaccionEnvio) {
        this.numeroTransaccionEnvio = numeroTransaccionEnvio;
    }

    public String getNumeroTransaccionEnvioConvertido() {
        return numeroTransaccionEnvioConvertido;
    }

    public void setNumeroTransaccionEnvioConvertido(
            String numeroTransaccionEnvioConvertido) {
        this.numeroTransaccionEnvioConvertido = numeroTransaccionEnvioConvertido;
    }

    public String getFiltroData() {
        return filtroData;
    }

    public void setFiltroData(String filtroData) {
        this.filtroData = filtroData;
    }

    public AlfrescoController getAlfrescoController() {
        return alfrescoController;
    }

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

    public String getXpathflujo() {
        return xpathflujo;
    }

    public void setXpathflujo(String xpathflujo) {
        this.xpathflujo = xpathflujo;
    }

    public String getNumeroTransaccion() {
        return numeroTransaccion;
    }

    public void setNumeroTransaccion(String numeroTransaccion) {
        this.numeroTransaccion = numeroTransaccion;
    }

    public Boolean getBtnFlujo() {
        return btnFlujo;
    }

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

    public Boolean getBtnGrabar() {
        return btnGrabar;
    }

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

    public BodegaController getBodegaController() {
        return bodegaController;
    }

    public void setBodegaController(BodegaController bodegaController) {
        this.bodegaController = bodegaController;
    }

    public String getInstitucionUnidadControl() {
        return institucionUnidadControl;
    }

    public void setInstitucionUnidadControl(String institucionUnidadControl) {
        this.institucionUnidadControl = institucionUnidadControl;
    }

    public String getNumeroSerie() {
        return numeroSerie;
    }

    public void setNumeroSerie(String numeroSerie) {
        this.numeroSerie = numeroSerie;
    }

    public String getNumeroDecomiso() {
        return numeroDecomiso;
    }

    public void setNumeroDecomiso(String numeroDecomiso) {
        this.numeroDecomiso = numeroDecomiso;
    }

    public String getCentroControlDestino() {
        return centroControlDestino;
    }

    public void setCentroControlDestino(String centroControlDestino) {
        this.centroControlDestino = centroControlDestino;
    }

    public String getUnidadDestino() {
        return unidadDestino;
    }

    public void setUnidadDestino(String unidadDestino) {
        this.unidadDestino = unidadDestino;
    }

    public List<TgeneCatalogDetail> getCentroControlsDestinos() {
        return centroControlsDestinos;
    }

    public void setCentroControlsDestinos(List<TgeneCatalogDetail> centroControlsDestinos) {
        this.centroControlsDestinos = centroControlsDestinos;
    }

    public List<TarmCentroControl> getUnidadesDestinos() {
        return unidadesDestinos;
    }

    public void setUnidadesDestinos(List<TarmCentroControl> unidadesDestinos) {
        this.unidadesDestinos = unidadesDestinos;
    }

    public Boolean getBtnGenerarActa() {
        return btnGenerarActa;
    }

    public void setBtnGenerarActa(Boolean btnGenerarActa) {
        this.btnGenerarActa = btnGenerarActa;
    }

    public String getCodigoOrganismoControlDestino() {
        return codigoOrganismoControlDestino;
    }

    public void setCodigoOrganismoControlDestino(
            String codigoOrganismoControlDestino) {
        this.codigoOrganismoControlDestino = codigoOrganismoControlDestino;
    }

    public String getCodigoUnidadControlDestino() {
        return codigoUnidadControlDestino;
    }

    public void setCodigoUnidadControlDestino(String codigoUnidadControlDestino) {
        this.codigoUnidadControlDestino = codigoUnidadControlDestino;
    }

    /**
     * @return the centroControlActual
     */
    public String getCentroControlActual() {
        return centroControlActual;
    }

    /**
     * @param centroControlActual the centroControlActual to set
     */
    public void setCentroControlActual(String centroControlActual) {
        this.centroControlActual = centroControlActual;
    }

    /**
     * @return the unidadActual
     */
    public String getUnidadActual() {
        return unidadActual;
    }

    /**
     * @param unidadActual the unidadActual to set
     */
    public void setUnidadActual(String unidadActual) {
        this.unidadActual = unidadActual;
    }

    public boolean isBtnSelTodos() {
        return btnSelTodos;
    }

    public void setBtnSelTodos(boolean btnSelTodos) {
        this.btnSelTodos = btnSelTodos;
    }

    /**
     * @return the numeroTransaccionRecepcion
     */
    public String getNumeroTransaccionRecepcion() {
        return numeroTransaccionRecepcion;
    }

    /**
     * @param numeroTransaccionRecepcion the numeroTransaccionRecepcion to set
     */
    public void setNumeroTransaccionRecepcion(String numeroTransaccionRecepcion) {
        this.numeroTransaccionRecepcion = numeroTransaccionRecepcion;
    }

    /**
     * @return the btnTabGrid
     */
    public Boolean getBtnTabGrid() {
        return btnTabGrid;
    }

    /**
     * @param btnTabGrid the btnTabGrid to set
     */
    public void setBtnTabGrid(Boolean btnTabGrid) {
        this.btnTabGrid = btnTabGrid;
    }

    /**
     * @return the btnFiltros
     */
    public boolean isBtnFiltros() {
        return btnFiltros;
    }

    /**
     * @param btnFiltros the btnFiltros to set
     */
    public void setBtnFiltros(boolean btnFiltros) {
        this.btnFiltros = btnFiltros;
    }

    public Boolean getIsCentroDpto() {
        return isCentroDpto;
    }

    public void setIsCentroDpto(Boolean isCentroDpto) {
        this.isCentroDpto = isCentroDpto;
    }

}
