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

import java.text.SimpleDateFormat;
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.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.IngresoDatosTipoTramite;
import com.fp.frontend.controller.pcustomer.PersonDetailController;
import com.fp.frontend.controller.pgeneral.date.TgeneNotAccountingDayController;
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.ConvertNumberToText;
import com.fp.frontend.utility.MsgControlArmas;
import com.fp.frontend.utility.MsgGeneral;
import com.fp.persistence.parmas.fun.TarmCarga;
import com.fp.persistence.parmas.param.TarmCentroControl;
import com.fp.persistence.parmas.param.TarmTramite;
import com.fp.persistence.parmas.soli.TarmAgenciaArma;
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.TarmSolicitudTramite;
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;

/**
 * Clase controladora para la validacion del deposito
 *
 * @author CHRISTIAN PAZMINO
 * @version 2.1
 */
@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class ValidarDepositoController extends AbstractController<TarmSolicitudTramite> {

    /**
     * Codigo de solicitud
     */
    private String csolicitud;
    /**
     * Variable del tipo TgeneCatalogDetail(catalogo del tramite)
     */
    private TgeneCatalogDetail nombreTramite;
    /**
     * Variable del tipo TgeneCatalogDetail(catalogo de la categoria)
     */
    private TgeneCatalogDetail nombreCategoria;
    /**
     * Variable del tipo TgeneCatalogDetail(catalogo del uso actividad del
     * tramite)
     */
    private TgeneCatalogDetail nombreUsoActividad;
    /**
     * Opciones de aceptar o rechazar
     */
    private List<TgeneCatalogDetail> accionList;
    /**
     * Propiedad usada para el manejo del Alfresco
     */
    @ManagedProperty(value = "#{alfrescoController}")
    private AlfrescoController alfrescoController;
    /**
     * Propiedad usada para el manejo del numero de armas de la solicitud
     */
    @ManagedProperty(value = "#{recepcionArmasController}")
    private RecepcionArmasController recepcionArmasController;
    /**
     * Propiedad usada para el manejo del centro de control de armas
     */
    @ManagedProperty(value = "#{centroControlArmasController}")
    private CentroControlArmasController centroControlArmasController;
    /**
     * controlador de la solicitud
     */
    @ManagedProperty(value = "#{solicitudArmasController}")
    private SolicitudArmasController solicitudMP;

    /**
     * Propiedad usada para el manejo de reportes
     */
    @ManagedProperty(value = "#{reportController}")
    private ReportController reportController;

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

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

    /**
     * Propiedad usada para el manejo de la solicitud actual
     */
    private TarmSolicitud solicitud;
    /**
     * Accion tomada por el usuario, aprobar o rechazar
     */
    private String accionTomada;
    /**
     * Constante usada para referirse a la opcion general aprobar
     */
    private final String APROBAR = "APR";
    /**
     * Constante usada para referirse a la opcion general rechazar
     */
    private final String REPROBAR = "RECH";
    /**
     * Constante usada para referirse a la opcion aprobar deposito
     */
    private final String APROBAR_DEPOSITO = "APBDEP";
    /**
     * Constante usada para referirse a la opcion rechazar deposito
     */
    private final String ANULAR_DEPOSITO = "ANUDEP";
    /**
     * Propiedad usada para el manejo del tramite actual
     */
    private TarmTramite tramite;
    /**
     * Fecha de atencion del proximo tramite
     */
    private Date fechaAtencionTramite;
    /**
     * Variable que indica si el usuario esta negado para continuar en la
     * pantalla
     */
    private Boolean isDenied;
    /**
     * Variable auxiliar usada para diferenciar cuando se presenta o no el
     * mensaje de validacion de fecha expiracion solicitud
     */
    private Boolean isOnlyMsj;
    /**
     * Obtiene el centro d control de armas de la solicitud actual
     */
    private TarmCentroControl centroControlObj;
    /**
     * Bandera de tipo booleano para indicar si se habilita el boton de
     * completar tarea
     */
    private Boolean isEnableCompletarTarea = Boolean.FALSE;

    /**
     * Nombre del centro de control
     */
    private String nombreCentroControl;

    private Boolean requiereNoSolAucpBln;

    private Boolean btnImprimir;

    public ValidarDepositoController() throws Exception {
        super(TarmSolicitudTramite.class);
    }

    @PostConstruct
    private void postconstruct() {
        super.startQuery();
        csolicitud = this.getMfilters().get("csolicitud");
        this.getMfilters().clear();
        init();

    }

    /**
     * Incializa el controlador, cuando se esta utilizando una pagina que utliza
     * el controlador.
     */
    private void init() {
        this.beanalias = "VALIDARDEPOSITO";
        // Recuperamos el centro de control de armas correspondiente al solicitante    	
        accionList = CatalogDetailController.find("ACCION");
        this.record = SolicitudTramiteController.findByCSolicitud(csolicitud);
        isOnlyMsj = false;
        btnImprimir = Boolean.FALSE;
        requiereNoSolAucpBln = Boolean.FALSE;
        try {
            isDenied = true;
            if (record != null) {
                solicitud = SolicitudArmasController.find(csolicitud);
                if (solicitud != null && solicitud.getCtramite() != null) {

                    tramite = IngresoDatosTipoTramite.find(solicitud.getCtramite().toString());
                    if (tramite != null) {
                        //Tramite			
                        nombreTramite = CatalogDetailController.findxCodigoCodcatalogo(tramite.getTipoautorizacion(), tramite.getTipoautorizacioncodigo());
                        nombreCategoria = CatalogDetailController.findxCodigoCodcatalogo(tramite.getCategoria(), tramite.getCategoriacodigo());
                        nombreUsoActividad = CatalogDetailController.findxCodigoCodcatalogo(tramite.getUsoactividad(), tramite.getUsoactividadcodigo());
                        if (tramite.getCategoria().equals("14")) {
                            requiereNoSolAucpBln = Boolean.TRUE;
                        } else {
                            requiereNoSolAucpBln = Boolean.FALSE;
                        }
                    } else {
                        MessageHelper.setMessageError("NO EXISTE UN TIPO DE TR\u00c1MITE ASOCIADO A LA SOLICITUD");
                        return;
                    }
                } else {
                    MessageHelper.setMessageError("NO EXISTE UNA SOLICITUD ASOCIADA AL TR\u00c1MITE");
                    return;
                }
                //Obteniendo el centro de control
//            	TsafeUserDetail tsafeUserDetail = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
//                PersonAddressController direccion = new PersonAddressController();
//                TcustPersonAddress tcustPersonAddres= direccion.findPrincipal(tsafeUserDetail.getPk().getPersoncode().toString());
//                TarmCentroControlJur jurisdiccionCentroControl;
//                jurisdiccionCentroControl= TarmCentroControlJurController.findxProvincia(tcustPersonAddres.getProvincecode());                
                centroControlObj = CentroControlArmasController.findPorCodigo(solicitud.getCcentrocontrol());
                this.setNombreCentroControl(CatalogDetailController.findxCodigoCodcatalogo(centroControlObj.getNombreinstitucion(),
                        centroControlObj.getNombreinstitucioncodigo()).getDescription());
            } else {
                MessageHelper.setMessageError("NO EXISTE EL TR\u00c1MITE EN LA BASE DE DATOS");
            }
        } catch (Exception e) {
            MessageHelper.setMessageError(e);
        }
    }

    /**
     * Metodo que devuelve el centro de control al que pertenece el cliente
     * dueno de la solicitud
     *
     * @throws Exception
     */
//    private String obtenerCentroControlSolicitante() throws Exception {     	
//    	PersonAddressController personAddressController = new PersonAddressController();
//        TcustPersonAddress tcustPersonAddres=personAddressController.findPrincipal(solicitud.getPersoncode().toString());
//        TarmCentroControlJur centroControlJur= TarmCentroControlJurController.findxProvincia(tcustPersonAddres.getProvincecode());
//        TarmCentroControl centroControl= CentroControlArmasController.findPorCodigo(centroControlJur.getCcentrocontrol());
//  		String institucionCentroControl = CatalogDetailController.findxCodigoCodcatalogo( centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription();	
//       	return institucionCentroControl;
//    }
    /**
     * ?
     */
    public void cancelar() {
        init();
    }

    /**
     * Genera la fecha disponible para el proximo tramite en el centro de
     * control de armas respectivo
     */
    public void generarFechaProximoTramite() {
        try {
            // Validamos si ya existe una fecha para realizar el proximo tramite
            centroControlObj.isnew = false;
            Date fechaActual = new Date(Calendar.getInstance().getTimeInMillis());
            if (centroControlObj.getFechaproximotramite() == null || centroControlObj.getFechaproximotramite().before(fechaActual)) {
                fechaAtencionTramite = TgeneNotAccountingDayController.diasLaborablesPosterioresAUnaFecha(new Date(), 1);
            } else {
                fechaAtencionTramite = centroControlObj.getFechaproximotramite();
            }
            // Numero de armas de la solicitud
            List<TarmSolicitudArmas> armasList = RecepcionArmasController.findPorSolicitud(csolicitud);
            int numArmasSolicitud = armasList.size();
            int salvedad = 10;
            int capacidadCentroUltDia = 0;
            if (centroControlObj.getCuposlibresultimodia() != null) {
                capacidadCentroUltDia = centroControlObj.getCuposlibresultimodia();
            } else {
                capacidadCentroUltDia = centroControlObj.getTramitespordia();
            }
            // Si la capacidad del centro en el ultimo dia es mayor al numero de armas a revisarse
            if (numArmasSolicitud < capacidadCentroUltDia) {
                centroControlObj.setCuposlibresultimodia(capacidadCentroUltDia - numArmasSolicitud);
                centroControlArmasController.update(centroControlObj);
                centroControlArmasController.save();

            } else if ((numArmasSolicitud == capacidadCentroUltDia) || (numArmasSolicitud <= (capacidadCentroUltDia + salvedad))) {
                // Si la capacidad del centro es igual al numero de armas a revisarse o ajusta cupo con la salvedad
                centroControlObj.setCuposlibresultimodia(centroControlObj.getTramitespordia());
                Date newFechaAtencionTramite = TgeneNotAccountingDayController.diasLaborablesPosterioresAUnaFecha(fechaAtencionTramite, 1);
                centroControlObj.setFechaproximotramite(new java.sql.Date(newFechaAtencionTramite.getTime()));
                centroControlArmasController.update(centroControlObj);
                centroControlArmasController.save();

            } else {
                // Cociente y residuo para los casos donde se tiene 50 armas o mas a tramitarse
                int diasRequeridos = numArmasSolicitud / centroControlObj.getTramitespordia();
                // Requerido para el calculo de los cupos disponibles para el ultimo dia
                int residuoDiasRequeridos = numArmasSolicitud % centroControlObj.getTramitespordia();
                fechaAtencionTramite = TgeneNotAccountingDayController.diasLaborablesPosterioresAUnaFecha(fechaAtencionTramite, 1);
                Date newFechaAtencionTramite;

                centroControlObj.setCuposlibresultimodia(centroControlObj.getTramitespordia() - residuoDiasRequeridos);
                newFechaAtencionTramite = TgeneNotAccountingDayController.diasLaborablesPosterioresAUnaFecha(fechaAtencionTramite, diasRequeridos);

                centroControlObj.setFechaproximotramite(new java.sql.Date(newFechaAtencionTramite.getTime()));
                centroControlArmasController.update(centroControlObj);
                centroControlArmasController.save();

            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }
    }

    /**
     * M&eacute;todo 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("csolicitud", csolicitud);
            request.modifiedData().put("TID", tid);
            request.modifiedData().put("BPMObs", bpmDataComment == null ? "OK" : bpmDataComment);

            // Completar tarea en el flujo
            Map<String, Object> datosmail = new HashMap<String, Object>();
            if (accionTomada.equalsIgnoreCase(APROBAR)) {
                request.modifiedData().put("BPMStatus", "A");
                if (tramite != null && tramite.getTipotramite() != null) {
                    // En el caso de permisos enviamos una notificacion al cliente con algunos parametros adicionales		
                    if (tramite.getTipoautorizacion().equalsIgnoreCase("6")) {
                        datosmail.put("razonsocial", solicitud.getModifiedData().get("nombre"));
//						datosmail.put("csolicitud",csolicitud);
//						datosmail.put("numcomprobante",record.getNumerocomprobante());
                        TsafeUserDetail userDetailObj = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
                        TcustPersonDetail personDetailObj = PersonDetailController.find(userDetailObj.getPk().getPersoncode().toString());
                        // Datos del funcionario que valida
                        datosmail.put("funcionario", personDetailObj.getName());
                        datosmail.put("grado", personDetailObj.getMilitarygrade() == null ? "" : personDetailObj.getMilitarygrade());
                        String nombreCCA = CatalogDetailController.findxCodigoCodcatalogo(centroControlObj.getNombreinstitucion(), centroControlObj.getNombreinstitucioncodigo()).getDescription();
                        datosmail.put("nombreCCA", nombreCCA);
                        datosmail.put("nombreCCACliente", nombreCCA);
                        datosmail.put("numeroTramite", solicitud.getNumerosolicitud().replace("SOL", "TRA"));
                        generarFechaProximoTramite();
                        SimpleDateFormat sdf = new SimpleDateFormat(MsgGeneral.getProperty("dateformat"));
                        datosmail.put("fechaGenerada", sdf.format(fechaAtencionTramite));
                    }
                }
            } else {
                request.modifiedData().put("BPMStatus", "D");
                datosmail.put("razonsocial", solicitud.getModifiedData().get("nombre"));
                datosmail.put("numeroSolicitud", solicitud.getNumerosolicitud());
                datosmail.put("numcomprobante", record.getNumerocomprobante());
                TsafeUserDetail userDetailObj = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
                TcustPersonDetail personDetailObj = PersonDetailController.find(userDetailObj.getPk().getPersoncode().toString());
                // Datos del funcionario que valida
                datosmail.put("funcionario", personDetailObj.getName());
                datosmail.put("grado", personDetailObj.getMilitarygrade() == null ? "" : personDetailObj.getMilitarygrade());
                String nombreCCA = CatalogDetailController.findxCodigoCodcatalogo(centroControlObj.getNombreinstitucion(), centroControlObj.getNombreinstitucioncodigo()).getDescription();
                datosmail.put("nombreCCA", nombreCCA);

            }
            request.modifiedData().put("datosmail", datosmail);
            Response resp = this.callerhelper.executeSave(request);
            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                this.postCommit(resp);
                MessageHelper.setMessageInfo(resp);
                btnImprimir = Boolean.FALSE;
                if (!accionTomada.equalsIgnoreCase(APROBAR)) {
                    saveAnularSolicitud();
                }
                RequestContext.getCurrentInstance().execute("Maia.refreshusertasks()");
                isDenied = true;
            } else {
                MessageHelper.setMessageError(resp);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Throwable e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void saveAnularSolicitud() {
        try {
            // CATEGORIA 14	PREVIA IMPORTACION
            if (tramite.getCategoria().equals("14")) {
                desasociarCargaSolicitud();
            }
            //Poner la solicitud en estado anulado deposito
            solicitud.setEstado("ANUDEP");
            solicitud.setAucp(null);
            solicitudMP.setRecord(solicitud);
            solicitudMP.update();
            DtoSave dtoSolicitud = solicitudMP.getDtoSave();

            if (record != null) {
                record.setIsnew(false);
                record.setEstadotramite("ANUDEP");
                super.update();
            }

            //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 = this.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(this.getBeanalias(), dtoSolicitudTramite);
            msave.put(agenciaArma.getBeanalias(), dtoAgenciaArma);

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

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

    public void desasociarCargaSolicitud() {
        try {
            TarmCarga carga = CargaController.findByAUCP(solicitud.getAucp());
            if (carga != null) {
                carga.setCsolicitud(null);
                cargaController.update(carga);
                cargaController.save();
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    @Override
    public void save() {
        try {
            super.update();
            DtoSave dtosave = super.getDtoSave();
            HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();
            Request request = this.callerhelper.getRequest();
            msave.put(this.beanalias, dtosave); // adicionar metadata de mantenimiento para cada tabla.
            request.setSaveTables(msave);
            if (accionTomada.equalsIgnoreCase(APROBAR)) {
                record.setEstadotramite(APROBAR_DEPOSITO);
                btnImprimir = Boolean.TRUE;
            } else {
                record.setEstadotramite(ANULAR_DEPOSITO);
            }
            Response resp = this.callerhelper.executeSave(request);
            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                this.postCommit(resp);
                MessageHelper.setMessageInfo(resp);
                isDenied = true;
                isEnableCompletarTarea = Boolean.TRUE;
            } else {
                MessageHelper.setMessageError(resp);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Throwable e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    protected void querydatabase() {
        try {

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

    /**
     * Consulta y retorna el codigo de un aprobado
     */
    public String codigoAceptado() throws Exception {
        TgeneParameters f = ParametersController.find("ACEPTADO", "1");
        return f.getTextvalue();
    }

    /**
     * Retorna la ruta de documento base en donde se almacenar&aacute; dicho
     * archivo
     *
     * @return
     */
    public String getRutaDocumentoSolBase() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(solicitud.getFregistro());
        StringBuilder ruta = new StringBuilder("cm:Solicitudes");
        ruta = ruta.append("/cm:").append(calendar.get(Calendar.YEAR));
        ruta = ruta.append("/cm:").append((calendar.get(Calendar.MONTH) + 1) <= 9 ? "0" + (calendar.get(Calendar.MONTH) + 1) : (calendar.get(Calendar.MONTH) + 1));
        return ruta.toString();
    }

    /**
     * Metodo para validar el valor a pagar
     */
    public void validarValorDelDeposito() {
        if (record.getValorapagar().compareTo(record.getValorverificado()) != 0) {
            MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_vVerificDiferenteDeVAPagar"));
        }
    }

    /**
     * Genera el reporte del comprobante de caja
     *
     * @param name Nombre del reporte a generar.
     */
    public void generateReport() {
        String path = "armas/reports/comprobanteCaja";
        String filename = MsgControlArmas.getProperty("lbl_comprobanteCaja");

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

        //RUC de COMACO
        String rucComaco = "-";
        TgeneParameters parametroRUC = ParametersController.find("RUCCOMACO", "1");
        if (parametroRUC != null) {
            rucComaco = parametroRUC.getTextvalue();
        }
        parameters.put("rucComaco", rucComaco);

        //Nombre centro
        parameters.put("nombreCentro", this.getNombreCentroControl());

        //No comprobante
        String noComprobante = "-";
        TarmSolicitudTramite solicitudTramite = SolicitudTramiteController.findByCSolicitud(this.solicitud.getPk());
        if (solicitudTramite != null) {
            noComprobante = solicitudTramite.getNumerotramite();
        }
        parameters.put("noComprobante", noComprobante);

        //Fecha de emision
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        parameters.put("fechaSistema", sdf.format(Calendar.getInstance().getTime()));

        //Ruc del usuario
        if (this.solicitud.getModifiedData().get("identification") != null) {
            parameters.put("ruc", this.solicitud.getModifiedData().get("identification"));
        } else {
            parameters.put("ruc", " ");
        }

        //Nombre-razon social
        if (this.solicitud.getModifiedData().get("nombre") != null) {
            parameters.put("nombreRazon", this.solicitud.getModifiedData().get("nombre"));
        } else {
            parameters.put("nombreRazon", " ");
        }

        //Cantidad en letras
        String cantidadLetras = ConvertNumberToText.convertNumberToLetter(this.record.getValorapagar().toString());
        parameters.put("cantidadLetras", cantidadLetras);

        //Tramite-categoria-uso
        if (this.nombreTramite != null && this.nombreCategoria != null && this.nombreUsoActividad != null) {
            parameters.put("tramiteCategoriaUso", this.nombreTramite.getDescription() + "-" + this.nombreCategoria.getDescription() + "-" + this.nombreUsoActividad.getDescription());
        } else {
            parameters.put("tramiteCategoriaUso", " ");
        }

        //No comprobante del deposito
        String noComprobanteDeposito = this.record.getNumerocomprobante().replace("-", "").toLowerCase();
        Boolean caracterEliminado = false;
        for (int i = 0; i < noComprobanteDeposito.length(); i++) {
            if (caracterEliminado) {
                i = 0;
                caracterEliminado = false;
            }
            if (noComprobanteDeposito.toCharArray()[i] != '0' && noComprobanteDeposito.toCharArray()[i] != '1' && noComprobanteDeposito.toCharArray()[i] != '2'
                    && noComprobanteDeposito.toCharArray()[i] != '3' && noComprobanteDeposito.toCharArray()[i] != '4' && noComprobanteDeposito.toCharArray()[i] != '5'
                    && noComprobanteDeposito.toCharArray()[i] != '6' && noComprobanteDeposito.toCharArray()[i] != '7' && noComprobanteDeposito.toCharArray()[i] != '8'
                    && noComprobanteDeposito.toCharArray()[i] != '9') {

                String caracterExtranno = "";
                caracterExtranno += noComprobanteDeposito.toCharArray()[i];
                noComprobanteDeposito = noComprobanteDeposito.replace(caracterExtranno, "");
                caracterEliminado = true;
            }
        }
        parameters.put("noComprobanteDeposito", noComprobanteDeposito);

        //Banco-cuenta
        String banco = "-";
        TgeneParameters parametroBanco = ParametersController.find("BANCODEPOSITO", "1");
        if (parametroBanco != null) {
            banco = parametroBanco.getTextvalue();
        }

        String cuenta = "-";
        TgeneParameters parametroCuenta = ParametersController.find("CUENTADEPOSITO", "1");
        if (parametroCuenta != null) {
            cuenta = parametroCuenta.getTextvalue();
        }

        //Banco-Cuenta
        parameters.put("banco", "Banco " + banco + " " + "No. " + cuenta);

        //Valor deposito
        parameters.put("valorDeposito", this.record.getValorapagar().toString());

        //Fecha deposito
        parameters.put("fechaDeposito", sdf.format(this.record.getFechacomprobante()));

        String format = "pdf";

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

    
    
    
    public AlfrescoController getAlfrescoController() {
        return alfrescoController;
    }

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

    public String getCsolicitud() {
        return csolicitud;
    }

    public void setCsolicitud(String csolicitud) {
        this.csolicitud = csolicitud;
    }

    public TgeneCatalogDetail getNombreTramite() {
        return nombreTramite;
    }

    public void setNombreTramite(TgeneCatalogDetail nombreTramite) {
        this.nombreTramite = nombreTramite;
    }

    public TgeneCatalogDetail getNombreCategoria() {
        return nombreCategoria;
    }

    public void setNombreCategoria(TgeneCatalogDetail nombreCategoria) {
        this.nombreCategoria = nombreCategoria;
    }

    public TgeneCatalogDetail getNombreUsoActividad() {
        return nombreUsoActividad;
    }

    public void setNombreUsoActividad(TgeneCatalogDetail nombreUsoActividad) {
        this.nombreUsoActividad = nombreUsoActividad;
    }

    public TarmSolicitud getSolicitud() {
        return solicitud;
    }

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

    public Boolean getIsDenied() {
        return isDenied;
    }

    public void setIsDenied(Boolean isDenied) {
        this.isDenied = isDenied;
    }

    public Boolean getIsOnlyMsj() {
        return isOnlyMsj;
    }

    public void setIsOnlyMsj(Boolean isOnlyMsj) {
        this.isOnlyMsj = isOnlyMsj;
    }

    public List<TgeneCatalogDetail> getAccionList() {
        return accionList;
    }

    public void setAccionList(List<TgeneCatalogDetail> accionList) {
        this.accionList = accionList;
    }

    public String getAccionTomada() {
        return accionTomada;
    }

    public void setAccionTomada(String accionTomada) {
        this.accionTomada = accionTomada;
    }

    public RecepcionArmasController getRecepcionArmasController() {
        return recepcionArmasController;
    }

    public void setRecepcionArmasController(
            RecepcionArmasController recepcionArmasController) {
        this.recepcionArmasController = recepcionArmasController;
    }

    public CentroControlArmasController getCentroControlArmasController() {
        return centroControlArmasController;
    }

    public void setCentroControlArmasController(
            CentroControlArmasController centroControlArmasController) {
        this.centroControlArmasController = centroControlArmasController;
    }

    public Boolean getIsEnableCompletarTarea() {
        return isEnableCompletarTarea;
    }

    public void setIsEnableCompletarTarea(Boolean isEnableCompletarTarea) {
        this.isEnableCompletarTarea = isEnableCompletarTarea;
    }

    /**
     * Metodo utilizado para determinar la accion a tomar, de forma automatica
     * la accion es reprobar en caso de encontrarse un valor de deposito
     * incorrecto
     */
    public void aceptar() {
        if (record.getValorapagar().compareTo(record.getValorverificado()) != 0) {
            accionTomada = REPROBAR;
            isDenied = true;
        } else {
            accionTomada = "";
            isDenied = false;
        }
    }

    public ReportController getReportController() {
        return reportController;
    }

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

    public TarmTramite getTramite() {
        return tramite;
    }

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

    public Date getFechaAtencionTramite() {
        return fechaAtencionTramite;
    }

    public void setFechaAtencionTramite(Date fechaAtencionTramite) {
        this.fechaAtencionTramite = fechaAtencionTramite;
    }

    public TarmCentroControl getCentroControlObj() {
        return centroControlObj;
    }

    public void setCentroControlObj(TarmCentroControl centroControlObj) {
        this.centroControlObj = centroControlObj;
    }

    public String getAPROBAR() {
        return APROBAR;
    }

    public String getREPROBAR() {
        return REPROBAR;
    }

    public String getAPROBAR_DEPOSITO() {
        return APROBAR_DEPOSITO;
    }

    public String getANULAR_DEPOSITO() {
        return ANULAR_DEPOSITO;
    }

    public Boolean getBtnImprimir() {
        return btnImprimir;
    }

    public void setBtnImprimir(Boolean btnImprimir) {
        this.btnImprimir = btnImprimir;
    }

    public SolicitudArmasController getSolicitudMP() {
        return solicitudMP;
    }

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

    public AgenciaArmaController getAgenciaArma() {
        return agenciaArma;
    }

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

    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 getNombreCentroControl() {
        return nombreCentroControl;
    }

    public void setNombreCentroControl(String nombreCentroControl) {
        this.nombreCentroControl = nombreCentroControl;
    }

}
