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.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import javax.faces.model.SelectItem; 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.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.armas.parametros.TarmCentroControlJurController; import com.fp.frontend.controller.pcustomer.PersonAddressController; import com.fp.frontend.controller.pcustomer.PersonDetailController; import com.fp.frontend.controller.pgeneral.gene.CatalogDetailController; import com.fp.frontend.controller.pgeneral.gene.ParametersController; import com.fp.frontend.helper.MessageHelper; import com.fp.frontend.utility.MsgControlArmas; import com.fp.frontend.utility.MsgGeneral; import com.fp.persistence.parmas.param.TarmCentroControl; import com.fp.persistence.parmas.param.TarmCentroControlJur; import com.fp.persistence.parmas.soli.TarmDecomisoArma; import com.fp.persistence.parmas.soli.TarmDecomisoArmaTransaccion; import com.fp.persistence.parmas.soli.TarmTransaccionArmaBodega; import com.fp.persistence.pcustomer.gene.TcustPersonAddress; import com.fp.persistence.pcustomer.gene.TcustPersonDetail; import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail; import com.fp.persistence.pgeneral.gene.TgeneParameters; import com.fp.persistence.pgeneral.safe.TsafeUserDetail; /** * Clase controladora del bean TarmDecomisoArmaTransaccion. * * @author Jorge Vaca. * @version 2.1 */ @SuppressWarnings("serial") @ManagedBean @ViewScoped public class EnvioArmasNoIniciadasFlujoController extends AbstractController { public EnvioArmasNoIniciadasFlujoController() throws Exception { super(TarmDecomisoArmaTransaccion.class); } /** * Controlador para generar el reporte */ @ManagedProperty(value = "#{reportController}") private ReportController reportController; /** * Controlador para caragar el archivo al alfresco */ @ManagedProperty(value="#{alfrescoController}") private AlfrescoController alfrescoController; /** * atributo con los datos del usuario logeado */ private TsafeUserDetail userDetail; private String xpathflujo; @PostConstruct private void postconstruct() { this.init(); // Inicializa autoconsulta super.startQuery(); //consulta la lista this.querydatabase(); } private List decomisoArmas; /** * Incializa el controlador, cuando se esta utilizando una pagina que utliza el controlador. */ private void init() { try { this.recperpage = 300; // Cambiar al # reg a mirar. this.lrecord = new ArrayList<>(); this.beanalias = "RECEPCIONARMASNOENV"; userDetail= (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL"); obtenerCentroControl(); } catch (Exception e) { MessageHelper.setMessageError(e); } } /** * nombre del centro de control */ private String institucionCentroControl; private ListitemUnidadDestino; /** * nombre del centro de control */ private String instiCentroControlCode; /** * Método para obtener el centro de control * @throws Exception */ private void obtenerCentroControl() throws Exception { PersonAddressController personAddressController = new PersonAddressController(); TcustPersonAddress tcustPersonAddres=personAddressController.findPrincipal(userDetail.getPk().getPersoncode().toString()); if(tcustPersonAddres!=null && tcustPersonAddres.getProvincecode()!=null){ TarmCentroControlJur centroControlJur= TarmCentroControlJurController.findxProvincia(tcustPersonAddres.getProvincecode()); if(centroControlJur!=null && centroControlJur.getCcentrocontrol()!=null){ TarmCentroControl centroControl= CentroControlArmasController.findPorCodigo(centroControlJur.getCcentrocontrol()); itemUnidadDestino= new ArrayList(); institucionCentroControl = CatalogDetailController.findxCodigoCodcatalogo( centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription(); //codigo del centro de control de pichincha TgeneParameters paramCentroControlDestino=ParametersController.find("CODIGO.CENT.CONTROL.PICHINCHA", "1");//000030//CAPI //validamos si la persona que ingreso pertenece al centro de control pichincha para darle al opcion de seleccionar el deparatmento de control para la recepcion if(paramCentroControlDestino.getTextvalue().equals(centroControl.getNombreinstitucion())){ itemUnidadDestino.add(new SelectItem(centroControl.getPk(), institucionCentroControl)); //codigo del departamento de control TgeneParameters paramDepartamentoControl=ParametersController.find("CODIGO.DEPT.CONTROL", "1");//DPCA TarmCentroControl institCentroControlDestino= CentroControlArmasController.findPorCentroControl(paramDepartamentoControl.getTextvalue());//000077 itemUnidadDestino.add(new SelectItem(institCentroControlDestino.getPk(), ""+institCentroControlDestino.getModifiedData().get("desnombreinstitucion"))); }else{ instiCentroControlCode=centroControl.getPk(); } }else{ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_laprovinciasinccontrol")); return; } }else{ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_notienedireccionprincipal")); return; } } public void executeUnidad() { for(SelectItem item: itemUnidadDestino){ if(item.getValue().equals(instiCentroControlCode)){ institucionCentroControl=item.getLabel(); } } } /** * Crea una instancia de TgeneTransactionProcess y marca el registro como nuevo. * * @throws Exception */ @Override public void create() throws Exception { super.create(); } @SuppressWarnings("unchecked") @Override public void querydatabase() { try { DtoQuery dto = super.getDtoQuery(true); dto.setOrderby("t.pk"); Filter filtro = new Filter(); filtro.setSql("estadoflujo='NOENV' and numerotransaccion like '%ENV-%' and ccentrocontrol='"+instiCentroControlCode+"'"); dto.addFiltro(filtro); HashMap mtables = new HashMap(); mtables.put(this.beanalias, dto); // permite adicionar mas de una tabla. Request request = this.callerhelper.getRequest(); request.setQueryTables(mtables); Response resp = this.callerhelper.executeQuery(request); if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) != 0) { this.lrecord = new ArrayList(); MessageHelper.setMessageError(resp); } else { this.lrecord = (List) resp.get(this.beanalias); super.postQuery(this.lrecord); } } catch (Throwable e) { MessageHelper.setMessageError(e); } } @Override public void save() { try { DtoSave dtosave = super.getDtoSave(); dtosave.setReturnpk(true); // Para que el core devuelva el pk de los registros nuevos. 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); } else { MessageHelper.setMessageError(resp); } } catch (Throwable e) { MessageHelper.setMessageError(e); } } /** * * @param codigo * @return */ public static TarmDecomisoArmaTransaccion find(String codigo) { try { EnvioArmasNoIniciadasFlujoController cc = new EnvioArmasNoIniciadasFlujoController(); cc.init(); cc.recperpage = 300; cc.addFilter("pk", codigo); cc.querydatabase(); if ((cc.lrecord != null) && !cc.lrecord.isEmpty()) { return cc.lrecord.get(0); } return null; } catch (Throwable e) { MessageHelper.setMessageError(e); return null; } } /** * lista las armas decomisadas asociadas al numero de transaccion * @param decomisoArmaTransaccion */ public void listarArmas(TarmDecomisoArmaTransaccion decomisoArmaTransaccion){ record=decomisoArmaTransaccion; decomisoArmas=DecomisoArmaController.findEnvio(decomisoArmaTransaccion.getPk()); } public void generarActa(){ String gradoUsuario =""; Calendar fechaActualCldr = Calendar.getInstance(); TcustPersonDetail usuario = PersonDetailController.find(this.userDetail.getPk().getPersoncode().toString()); TgeneCatalogDetail grado = CatalogDetailController.findxCodigoCodcatalogo(usuario.getMilitarygrade(), usuario.getMilitarygradecode()); if(grado != null){ gradoUsuario = grado.getDescription()+" - "+usuario.getName(); }else{ gradoUsuario = usuario.getName(); } // String codigoreporte=record.getModifiedData().get("cdecomiso").toString();//listTarmDecomisoArma.get(0).getPk().toString(); String path = "armas/reports/entregaArmasacta"; String filename=record.getNumerotransaccion(); //Fija parametros del report. HashMap 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(record.getFcorte()))); parameters.put("codResponsable",usuario.getPk().getPersoncode()); parameters.put("gradoUsuario",gradoUsuario); 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); parameters.put("unidadmilitar", institucionCentroControl); parameters.put("tecnicoAlmacenamiento",MsgControlArmas.getProperty("tecnicoAlmacenamiento")+" "+institucionCentroControl); parameters.put("jefe",MsgControlArmas.getProperty("jefe")+" "+institucionCentroControl); parameters.put("codigodecomisoarma",record.getPk().toString()); parameters.put("tramite", record.getNumerotransaccion()); //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()); InputStream file =this.reportController.jaspertoInputstream(path, parameters, "pdf", filename, this.getLoginController()); xpathflujo = generarXpath(record.getNumerotransaccion()); if(!alfrescoController.uploadFile(file, record.getNumerotransaccion()+ ".pdf", xpathflujo)){ xpathflujo=null; } } catch (Exception ex) { MessageHelper.setMessageError(ex); } } /** * Metodo para generar la ruta donde se carga el archivo * @param numeroTransaccionRecepcion * @return */ public String generarXpath(String numeroTransaccionRecepcion){ 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)); ruta = ruta.append("/cm:"+numeroTransaccionRecepcion); return ruta.toString(); } public List getDecomisoArmas() { return decomisoArmas; } public void setDecomisoArmas(List decomisoArmas) { this.decomisoArmas = decomisoArmas; } public void iniciarFlujo() { try { if(xpathflujo==null){ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_generereporte")); return; } TarmTransaccionArmaBodega armaBodegas= TransaccionArmaBodegaController.find(record.getPk().toString()); if(armaBodegas.getModifiedData().get("provincecodeorig")==null || armaBodegas.getModifiedData().get("provincecodeorig").toString().length()==0){ MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_sinprovincia")); return; } String cprovincia=armaBodegas.getModifiedData().get("provincecodeorig").toString(); //Se comenta por validacion de provincia en el flujo de EnvioArmas clase com.fp.armas.task.ValidacionGrupo // cualquier error analizar esta validacion de provincia /*TgeneParameters paramDepartamentoControl=ParametersController.find("CODIGO.DEPT.CONTROL", "1");//DPCA if(armaBodegas.getModifiedData().get("nombreinstitucion").equals(paramDepartamentoControl.getTextvalue())){ cprovincia=paramDepartamentoControl.getTextvalue(); }*/ String xpath=xpathflujo+"/cm:"+record.getNumerotransaccion()+ ".pdf"; Request request = callerhelper.getRequest(); super.cleanRequest(request); //codigo de la tabla TarmDecomisoArmaTransaccion request.modifiedData().put("numerotransaccion", record.getPk()); request.modifiedData().put("cprovincia", cprovincia); request.modifiedData().put("numerosolicitud", record.getNumerotransaccion()); //ruta del archivo para la firma request.modifiedData().put("xpath", xpath); request.modifiedData().put("isnew", "Y"); request.setLogsolicitude(record.getNumerotransaccion()); Response resp = callerhelper.executeSave(request); if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) { this.setShowRow(true); MessageHelper.setMessageInfo(resp, MsgGeneral.getProperty("msg_initFlow") + " TRANSACCION: "+ record.getNumerotransaccion()); xpathflujo=null; //quita el registro de la lista en vista lrecord.remove(record); } else { MessageHelper.setMessageError(resp); } } catch (Throwable e) { MessageHelper.setMessageError(e); } } public ReportController getReportController() { return reportController; } public void setReportController(ReportController reportController) { this.reportController = reportController; } public AlfrescoController getAlfrescoController() { return alfrescoController; } public void setAlfrescoController(AlfrescoController alfrescoController) { this.alfrescoController = alfrescoController; } public TsafeUserDetail getUserDetail() { return userDetail; } public void setUserDetail(TsafeUserDetail userDetail) { this.userDetail = userDetail; } public String getXpathflujo() { return xpathflujo; } public void setXpathflujo(String xpathflujo) { this.xpathflujo = xpathflujo; } public String getInstitucionCentroControl() { return institucionCentroControl; } public void setInstitucionCentroControl(String institucionCentroControl) { this.institucionCentroControl = institucionCentroControl; } public List getItemUnidadDestino() { return itemUnidadDestino; } public void setItemUnidadDestino(List itemUnidadDestino) { this.itemUnidadDestino = itemUnidadDestino; } public String getInstiCentroControlCode() { return instiCentroControlCode; } public void setInstiCentroControlCode(String instiCentroControlCode) { this.instiCentroControlCode = instiCentroControlCode; } }