package com.fp.frontend.controller.armas.solicitud; 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 org.primefaces.context.RequestContext; import org.primefaces.event.FileUploadEvent; import org.primefaces.model.UploadedFile; 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.alfresco.AlfrescoController; import com.fp.frontend.controller.armas.parametros.CentroControlArmasController; import com.fp.frontend.controller.armas.parametros.IngresoDatosTipoTramite; import com.fp.frontend.controller.pcustomer.PersonAddressController; 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.MsgControlArmas; import com.fp.frontend.utility.MsgGeneral; import com.fp.persistence.parmas.param.TarmCentroControl; import com.fp.persistence.parmas.param.TarmTramite; import com.fp.persistence.parmas.soli.TarmSolicitud; import com.fp.persistence.parmas.soli.TarmSolicitudTramite; import com.fp.persistence.pcustomer.gene.TcustPersonAddress; import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail; import com.fp.persistence.pgeneral.safe.TsafeUserDetail; /** * Clase controladora para el ingreso de comprobante de deposito * * @author CHRISTIAN PAZMINO * @version 2.1 */ @SuppressWarnings("serial") @ManagedBean @ViewScoped public class CargarDepositoController extends AbstractController { /** * Variable que contiene el numero de tramite con el que inicia el flujo */ private String numTramite; /** * Variable que contiene el codigo de solicitud pasado en el flujo */ 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; /** * Bandera de tipo booleano para indicar si se habilita el boton de completar tarea */ private Boolean isEnableCompletarTarea= Boolean.FALSE; /** * Propiedad que premite controlar operaciones de cargar archivos al Alfresco */ @ManagedProperty(value = "#{alfrescoController}") private AlfrescoController alfrescoController; /** * Variable que contiene los datos de la solicitud actual */ private TarmSolicitud solicitud; /** * Variable que nos permite cargar el comprobante de deposito al Alfresco */ private UploadedFile uploadedFile; /** * Variable que indica si el usuario esta negado para continuear el tramite, su tramite pasa a estado anulado */ private Boolean isDenied; /** * Variable auxiliar usada para diferenciar cuando se presenta o no el mensaje de validacion de fecha expiracion solicitud */ private Boolean isOnlyMsj; /** * Variable que indica si el numero de comprobante ingresado es correcto */ private Boolean isTrueNComprobante; /** * Dias laborables permitidos para completar el tramite */ private Integer diasLaborablesPermitidos; /** * Bandera de tipo booleano para indicar si se ha grabado el reporte generado * */ private Boolean isEnableGrabar; /** * codigo de la provincia del usuario logeado */ private String cprovincia; private Boolean requiereNoSolAucpBln; /** *Referencia al Centro de control; */ private TarmCentroControl centroControl = new TarmCentroControl(); /** *Nombre de la Institucion */ private String nombreInstitucion; public CargarDepositoController() throws Exception { super(TarmSolicitudTramite.class); } @PostConstruct private void postconstruct() { // super.startQuery(); // csolicitud = this.getMfilters().get("csolicitud"); // this.getMfilters().clear(); init(); requiereNoSolAucpBln=Boolean.FALSE; } public void consultarSolicitud() throws Exception{ if(numTramite!=null){ this.record = SolicitudTramiteController.findByNumeroTramiteCarga(numTramite); if(record != null && record.getPk().getCsolicitud()!=null){ csolicitud = record.getPk().getCsolicitud(); // csolicitud=csolicitud.replace("TRA","SOL"); try { if(record!=null){ solicitud = SolicitudArmasController.findByCSolicitud(csolicitud); if(solicitud!=null && solicitud.getCtramite()!=null){ TarmTramite 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; obtenerCentroControl(solicitud); }else{ requiereNoSolAucpBln=Boolean.FALSE; } } else{ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_tramiteSinDatosAsociados")); } Date fechaLimiteDate = TgeneNotAccountingDayController.diasLaborablesPreviosAUnaFecha(new Date(), diasLaborablesPermitidos); Calendar fechaLimite = Calendar.getInstance(); fechaLimite.setTime(fechaLimiteDate); fechaLimite.set(Calendar.HOUR_OF_DAY, 0); fechaLimite.set(Calendar.MINUTE, 0); fechaLimite.set(Calendar.SECOND, 0); Calendar fechaSolicitud = Calendar.getInstance(); fechaSolicitud.setTime(solicitud.getFverificarequisitos()); fechaSolicitud.set(Calendar.SECOND, 1); if(fechaSolicitud.compareTo(fechaLimite)<0){ isOnlyMsj = true; record.setEstadotramite("ANU"); record.setEstadotramitecodigo("ESTADOSOLICITUD"); super.update(); this.save(); RequestContext.getCurrentInstance().update("messages"); } else{ isDenied = false; } } else{ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_tramiteSinDatosAsociados")); } } else{ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_tramiteSinDatosAsociados")); } } catch (Exception e) { MessageHelper.setMessageError(e); } } } } /** * Obtiene el centro de control segun usurio logeado. * @param solicitud * @throws Exception * */ private void obtenerCentroControl(TarmSolicitud solicitud) throws Exception { this.centroControl= CentroControlArmasController.findPorCodigo(solicitud.getCcentrocontrol()); this.setNombreInstitucion(CatalogDetailController.findxCodigoCodcatalogo( centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription()); } /** * Incializa el controlador, cuando se esta utilizando una pagina que utliza el controlador. */ private void init() { try { this.recperpage = 500; this.beanalias = "CARGARDEPOSITO"; isDenied = true; diasLaborablesPermitidos = Integer.parseInt(ParametersController.find("DIASDEPOSITO", "1").getNumbervalue().toString()); isTrueNComprobante = Boolean.TRUE; isOnlyMsj = false; isEnableGrabar = Boolean.TRUE; isEnableCompletarTarea = Boolean.FALSE; obtenerCentroControlSolicitante(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * Metodo que devuelve el centro de control al que pertenece el cliente dueno de la solicitud * @throws Exception */ private void obtenerCentroControlSolicitante() throws Exception { TsafeUserDetail tsafeUserDetailUsuario = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL"); PersonAddressController personAddressController = new PersonAddressController(); TcustPersonAddress tcustPersonAddres=personAddressController.findPrincipal(tsafeUserDetailUsuario.getPk().getPersoncode().toString()); if(tcustPersonAddres!=null && tcustPersonAddres.getProvincecode()!=null){ }else{ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_notienedireccionprincipal")); return; } } /** * Accion que reinicia todas las variables de la pagina */ public void cancelar(){ init(); } /** * Metodo que permite grabar el formulario junto al comprobante de deposito en el Alfresco * */ @Override public void save() { try { String xPathLocation= getRutaDocumentoSolBase() + "/cm:" + solicitud.getNumerosolicitud() + "/cm:" + "Deposito"; if(record.getValorverificacion().doubleValue()>0){ if(isTrueNComprobante){ if(!record.getFechacomprobante().after(new Date())){ if(uploadedFile!=null && uploadedFile.getFileName()!=null){ String extencionArchivo=getExtension(uploadedFile.getFileName()); String nombreArchivo = "CMPRBNT-"+solicitud.getNumerosolicitud()+"."+extencionArchivo; if(alfrescoController.uploadFile(uploadedFile.getInputstream(),nombreArchivo, xPathLocation)){ record.setXpathcomprobante(xPathLocation + "/cm:" + nombreArchivo); super.update(); DtoSave dtosave = super.getDtoSave(); HashMap msave = new HashMap(); Request request = this.callerhelper.getRequest(); msave.put(this.beanalias, dtosave); // adicionar metadata de mantenimiento para cada tabla. request.setSaveTables(msave); 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; isEnableGrabar = Boolean.FALSE; FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(null, new FacesMessage("RECUERDE", MsgControlArmas.getProperty("msg_recuerdeClickContinuarTramite"))); } else { MessageHelper.setMessageError(resp); } } else{ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_tramiteSinDatosAsociados")); } } else{ // MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_archivo")); MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_ingreseComprobanteDeposito")); } } else{ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_fechaDepositoMayorFechaActual")); } } else{ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_comprobanteDepositoUsado")); } } else{ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_valorDepositoNegativoCero")); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Throwable e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * Metodo que retorna la extencion del comprobante de deposito que se desea subir al alfresco */ public String getExtension(String filename) { int index = filename.lastIndexOf('.'); if (index == -1) { return ""; } else { return filename.substring(index + 1); } } /** * Metodo de consulta no utilizado pero sobrescrito por requisito de herencia */ @Override protected void querydatabase() { try { } catch (Exception e) { MessageHelper.setMessageError(e); } } @SuppressWarnings("unchecked") public void consultaTramites(){ try { Request request = this.callerhelper.getRequest(); DtoQuery dto = super.getDtoQuery(true); SubQuery subqueryTipo= new SubQuery("TgeneCatalogDetail","description","estado","i.pk.catalog= (select o.estado from TarmSolicitud o where o.pk=t.pk.csolicitud) and " + " i.pk.catalogcode=(select o.estadocodigo from TarmSolicitud o where o.pk=t.pk.csolicitud)"); SubQuery subqueryEstadoTramite= new SubQuery("TgeneCatalogDetail","description","estadotramite","i.pk.catalog= t.estadotramite and" + " i.pk.catalogcode=t.estadotramitecodigo"); dto.addSubQuery(subqueryEstadoTramite); SubQuery subquerysolicitud= new SubQuery("TarmSolicitud","numerosolicitud","solicitud","i.pk=t.pk.csolicitud"); dto.addSubQuery(subquerysolicitud); dto.setOrderby("t.pk"); TsafeUserDetail tsafeUserDetailUsuario = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL"); Filter filtro= new Filter(); filtro.setSql("numerocomprobante is null and estadotramite='REG' and valorapagar>0 and " + " csolicitud in(select o.pk from TarmSolicitud o where o.personcode ='"+tsafeUserDetailUsuario.getPk().getPersoncode()+"' and o.estado ='APB')"); dto.addFiltro(filtro); HashMap mtables = new HashMap(); mtables.put(this.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) { this.lrecord = new ArrayList(); MessageHelper.setMessageError(resp); } else { this.lrecord = (List) resp.get(this.beanalias); super.postQuery(this.lrecord); } } catch (Throwable e) { MessageHelper.setMessageError(e); } } public void solicitudSeleccionada(TarmSolicitudTramite tarmSolicitudTramite){ try { numTramite=tarmSolicitudTramite.getNumerotramite(); consultarSolicitud(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * Retorna la ruta base donde se almacenara dicho archivo * * @return */ public String getRutaDocumentoSolBase() { Calendar calendar = Calendar.getInstance(); calendar.setTime(solicitud.getFregistro()); 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)); return ruta.toString(); } /** * Metodo para validar el comprobante de deposito/ */ public void validarComprobanteDeposito(){ List usandoComprobanteList = SolicitudTramiteController.findByNumeroComprobante(this.record.getNumerocomprobante()); if(usandoComprobanteList!=null && usandoComprobanteList.size()>0){ isTrueNComprobante = Boolean.FALSE; MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_comprobanteDepositoUsado")); } else{ isTrueNComprobante = Boolean.TRUE; } } /** * Carga el archivo a grabar en la memoria para su posterior persistencia en el Alfresco */ public void handleUpload(FileUploadEvent event){ uploadedFile = event.getFile(); } /** * Recorta el nombre del archivo a cargarse * @param nombre * @return nombre recortado */ public String recorteNombre(String nombre){ String fielname=nombre; if(fielname.length()>30){ fielname=fielname.substring(0,30)+extencionArchivo(nombre); } return fielname; } /** * Obtiene la extencion del archivo a cargar * @param nombre * @return */ private String extencionArchivo(String nombre){ int pos=nombre.lastIndexOf('.'); nombre=nombre.substring(pos); return nombre; } /** * Metodo para finalizar la tarea del flujo */ public void iniciarFlujo() { try { TarmSolicitud tarmSolicitud=SolicitudController.findSolicitudxcodsolicitud(record.getPk().getCsolicitud()); if(tarmSolicitud==null || tarmSolicitud.getModifiedData()==null || tarmSolicitud.getModifiedData().get("provincecode")==null){ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_sinprovincia")); return; } cprovincia=tarmSolicitud.getModifiedData().get("provincecode").toString(); Request request = callerhelper.getRequest(); // limpiar request para finalizar la tarea. super.cleanRequest(request); request.modifiedData().put("isnew", "Y"); request.modifiedData().put("csolicitud", record.getPk().getCsolicitud()); request.modifiedData().put("numerotransaccion", record.getPk().getCtramite()); request.modifiedData().put("numerosolicitud", solicitud.getNumerosolicitud()); request.modifiedData().put("cprovincia", cprovincia); request.setLogsolicitude(solicitud.getNumerosolicitud()); Response resp = callerhelper.executeSave(request); if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) { MessageHelper.setMessageInfo(resp, MsgGeneral.getProperty("msg_initFlow") + " No SOLICITUD: " +solicitud.getNumerosolicitud()); isEnableCompletarTarea = Boolean.FALSE; } else { MessageHelper.setMessageError(resp); } } catch (Throwable e) { MessageHelper.setMessageError(e); } } /** * Metodo para validar que el valor del comprobante de deposito sea mayor a cero */ public void valorMayorACero(){ if(record.getValorverificacion().doubleValue()<=0){ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_valorDepositoNegativoCero")); } } 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 UploadedFile getUploadedFile() { return uploadedFile; } public void setUploadedFile(UploadedFile uploadedFile) { this.uploadedFile = uploadedFile; } 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 Boolean getIsTrueNComprobante() { return isTrueNComprobante; } public void setIsTrueNComprobante(Boolean isTrueNComprobante) { this.isTrueNComprobante = isTrueNComprobante; } public Boolean getIsEnableCompletarTarea() { return isEnableCompletarTarea; } public void setIsEnableCompletarTarea(Boolean isEnableCompletarTarea) { this.isEnableCompletarTarea = isEnableCompletarTarea; } public String getNumTramite() { return numTramite; } public void setNumTramite(String numTramite) { this.numTramite = numTramite; } public Boolean getIsEnableGrabar() { return isEnableGrabar; } public void setIsEnableGrabar(Boolean isEnableGrabar) { this.isEnableGrabar = isEnableGrabar; } 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; } }