package com.fp.frontend.controller.armas.solicitud; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; 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 org.primefaces.context.RequestContext; import com.fp.dto.Request; import com.fp.dto.Response; import com.fp.dto.query.DtoQuery; import com.fp.dto.save.DtoSave; import com.fp.frontend.controller.AbstractController; import com.fp.frontend.controller.armas.parametros.CentroControlArmasController; 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.helper.MessageHelper; import com.fp.persistence.parmas.ins.TarmPlanificacionInspeccion; import com.fp.persistence.parmas.ins.TarmPlanificacionTramite; import com.fp.persistence.parmas.param.TarmCentroControl; import com.fp.persistence.parmas.param.TarmCentroControlJur; import com.fp.persistence.parmas.soli.TarmDocumentoHabilitante; import com.fp.persistence.pcustomer.gene.TcustPersonDetail; @SuppressWarnings("serial") @ManagedBean @ViewScoped public class ModificarPlanificacionInspeccionController extends AbstractController { private TarmCentroControl centroControl; private String nombreCentroControl; private TarmCentroControlJur jurisdiccionCentroControl; private Boolean planificacionSalvada = false; // Codigo de planificacion (Variable de flujo) private Long cplanificacion; private List listaMeses = new ArrayList(); private List listaAnnos = new ArrayList(); List planificaciones; @ManagedProperty(value = "#{planificacionTramiteController}") private PlanificacionTramiteController planificacionTramiteController; @ManagedProperty(value = "#{documentoHabilitanteController}") private DocumentoHabilitanteController documentoHabilitanteController; @ManagedProperty(value = "#{personAddressController}") private PersonAddressController personAddressController; /** * Atibuto para la habilitacion del boton de completar la tarea del flujo */ private Boolean btnFlujo; public ModificarPlanificacionInspeccionController() throws Exception { super(TarmPlanificacionInspeccion.class); // TODO Auto-generated constructor stub } @PostConstruct private void postconstruct() { try { this.startQuery(); this.init(); super.query(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void startQuery(){ try { this.pasteBpmScreenParameters(); if(super.getMfilters().get("cplanificacion")!=null){ cplanificacion=Long.parseLong(super.getMfilters().get("cplanificacion").toString()); } super.getMfilters().clear(); } catch (Exception e) { MessageHelper.setMessageError(e); } } private void init() { try { recperpage = 15; // Cambiar al # reg a mirar. lrecord = new ArrayList<>(); record = new TarmPlanificacionInspeccion(); beanalias = "MODIFICARPLANIFICACIONCONTROLLER"; btnFlujo=Boolean.FALSE; this.planificacionTramiteController = new PlanificacionTramiteController(); this.planificacionTramiteController.setLrecord(new ArrayList()); //Quemando el codigo de planificacion //this.cplanificacion=99L; //Obteniendo la planificacion if(this.cplanificacion!=null){ this.record=PlanificacionInspeccionController.findPorCodigo(this.cplanificacion); if(this.record!=null){ // Obteniendo el centro de control this.centroControl = CentroControlArmasController.findPorCodigo(this.record.getCcentrocontrol()); this.nombreCentroControl = CatalogDetailController.findxCodigoCodcatalogo(centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription(); //Obteniendo los tramites this.planificacionTramiteController.setCplanificacion(this.record.getPk()); this.planificacionTramiteController.setRecperpage(4000); this.planificacionTramiteController.querydatabaseAprobacion(); Collections.sort(planificacionTramiteController.getLrecord(), new Comparator() { public int compare(TarmPlanificacionTramite p1, TarmPlanificacionTramite p2) { return new Long(p1.getMesnumero()).compareTo(p2.getMesnumero()); } }); } } } catch (Exception e) { MessageHelper.setMessageError(e); } } @Override public void query() throws Exception { // TODO Auto-generated method stub MessageHelper.setMessageError("msg_notQuery"); super.query(); } @Override public void create() throws Exception { super.create(); } @SuppressWarnings("unchecked") @Override protected void querydatabase() { try { DtoQuery dto = super.getDtoQuery(true); dto.setOrderby("anno desc"); HashMap mtables = new HashMap(); mtables.put(beanalias, dto); // permite adicionar mas de una tabla. Request request = callerhelper.getRequest(); request.setQueryTables(mtables); Response resp = callerhelper.executeQuery(request); if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) != 0) { lrecord = new ArrayList(); MessageHelper.setMessageError(resp); } else { lrecord = (List) resp.get(beanalias); if (!lrecord.isEmpty()) { // record=lrecord.get(0); } super.postQuery(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 = callerhelper.getRequest(); msave.put(beanalias, dtosave); // adicionar metadata de mantenimiento para cada tabla. request.setSaveTables(msave); request.getModifiedData().put("INSPECCIONES", this.planificacionTramiteController.getLrecord()); Response resp = callerhelper.executeSave(request); if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) { this.postCommit(resp); this.planificacionTramiteController.postCommit(resp); MessageHelper.setMessageInfo(resp); this.planificacionSalvada = true; btnFlujo=Boolean.TRUE; } else { MessageHelper.setMessageError(resp); } } catch (Throwable e) { MessageHelper.setMessageError(e); } } @Override public void postCommit(Response response) throws Exception { super.postCommitGeneric(response, beanalias); } /** * Metodo que carga los meses disponibles atendiendo a la fecha de expiracion del documento * * @param tramite */ public void cargarMeses(TarmPlanificacionTramite inspeccion) { this.listaMeses.clear(); Calendar calendario = Calendar.getInstance(); Integer intmesnumero = calendario.get(Calendar.MONTH); this.planificacionTramiteController.getRecord().setMesnumero(Long.parseLong(intmesnumero.toString())); switch (calendario.get(Calendar.MONTH)) { case 0: listaMeses.add("Enero"); listaMeses.add("Febrero"); listaMeses.add("Marzo"); listaMeses.add("Abril"); listaMeses.add("Mayo"); listaMeses.add("Junio"); listaMeses.add("Julio"); listaMeses.add("Agosto"); listaMeses.add("Septiembre"); listaMeses.add("Octubre"); listaMeses.add("Noviembre"); listaMeses.add("Diciembre"); break; case 1: listaMeses.add("Febrero"); listaMeses.add("Marzo"); listaMeses.add("Abril"); listaMeses.add("Mayo"); listaMeses.add("Junio"); listaMeses.add("Julio"); listaMeses.add("Agosto"); listaMeses.add("Septiembre"); listaMeses.add("Octubre"); listaMeses.add("Noviembre"); listaMeses.add("Diciembre"); break; case 2: listaMeses.add("Marzo"); listaMeses.add("Abril"); listaMeses.add("Mayo"); listaMeses.add("Junio"); listaMeses.add("Julio"); listaMeses.add("Agosto"); listaMeses.add("Septiembre"); listaMeses.add("Octubre"); listaMeses.add("Noviembre"); listaMeses.add("Diciembre"); break; case 3: listaMeses.add("Abril"); listaMeses.add("Mayo"); listaMeses.add("Junio"); listaMeses.add("Julio"); listaMeses.add("Agosto"); listaMeses.add("Septiembre"); listaMeses.add("Octubre"); listaMeses.add("Noviembre"); listaMeses.add("Diciembre"); break; case 4: listaMeses.add("Mayo"); listaMeses.add("Junio"); listaMeses.add("Julio"); listaMeses.add("Agosto"); listaMeses.add("Septiembre"); listaMeses.add("Octubre"); listaMeses.add("Noviembre"); listaMeses.add("Diciembre"); break; case 5: listaMeses.add("Junio"); listaMeses.add("Julio"); listaMeses.add("Agosto"); listaMeses.add("Septiembre"); listaMeses.add("Octubre"); listaMeses.add("Noviembre"); listaMeses.add("Diciembre"); break; case 6: listaMeses.add("Julio"); listaMeses.add("Agosto"); listaMeses.add("Septiembre"); listaMeses.add("Octubre"); listaMeses.add("Noviembre"); listaMeses.add("Diciembre"); break; case 7: listaMeses.add("Agosto"); listaMeses.add("Septiembre"); listaMeses.add("Octubre"); listaMeses.add("Noviembre"); listaMeses.add("Diciembre"); break; case 8: listaMeses.add("Septiembre"); listaMeses.add("Octubre"); listaMeses.add("Noviembre"); listaMeses.add("Diciembre"); break; case 9: listaMeses.add("Octubre"); listaMeses.add("Noviembre"); listaMeses.add("Diciembre"); break; case 10: listaMeses.add("Noviembre"); listaMeses.add("Diciembre"); break; case 11: inspeccion.setMes("Diciembre"); break; } } /** * Metodo que ordena las inspecciones por mes y por nombre Ordenamiento simple de burbujas */ public void ordenarPorMesNombre() { try { // Ordenando por mes for (int i = 0; i < this.planificacionTramiteController.getLrecord().size() - 1; i++) { for (int j = i + 1; j < this.planificacionTramiteController.getLrecord().size(); j++) { // Verificando que la ispeccion en j tenga un mes anterior // a la inspeccion en i if (this.planificacionTramiteController.getLrecord().get(j).getMesnumero() < this.planificacionTramiteController.getLrecord() .get(i).getMesnumero()) { TarmPlanificacionTramite temp = this.planificacionTramiteController.getLrecord().get(j); this.planificacionTramiteController.getLrecord().set(j, this.planificacionTramiteController.getLrecord().get(i)); this.planificacionTramiteController.getLrecord().set(i, temp); } } } // Ordenando por Nombre for (int i = 0; i < this.planificacionTramiteController.getLrecord().size() - 1; i++) { for (int j = i + 1; j < this.planificacionTramiteController.getLrecord().size(); j++) { // Obteniendo el documento en i TarmDocumentoHabilitante documentoi = DocumentoHabilitanteController.findPorCodigo(this.planificacionTramiteController .getLrecord().get(i).getCdocumento().toString()); // Obteniendo el documento en j TarmDocumentoHabilitante documentoj = DocumentoHabilitanteController.findPorCodigo(this.planificacionTramiteController .getLrecord().get(j).getCdocumento().toString()); // Obteniendo la persona en i TcustPersonDetail personai = PersonDetailController.find(documentoi.getPersoncode().toString()); // Obteniendo la persona en j TcustPersonDetail personaj = PersonDetailController.find(documentoj.getPersoncode().toString()); // Verificando que la ispeccion en j tenga un nombre menor // a la inspeccion en i si la inspeccion es del mismo mes if (this.planificacionTramiteController.getLrecord().get(i).getMesnumero() == this.planificacionTramiteController.getLrecord() .get(j).getMesnumero() && personaj.getName().toLowerCase().compareToIgnoreCase(personai.getName().toLowerCase()) < 0) { TarmPlanificacionTramite temp = this.planificacionTramiteController.getLrecord().get(j); this.planificacionTramiteController.getLrecord().set(j, this.planificacionTramiteController.getLrecord().get(i)); this.planificacionTramiteController.getLrecord().set(i, temp); } } } } catch (Exception e) { MessageHelper.setMessageError(e); } } /** * Metodo para finalizar la tarea del flujo */ public void completarTarea() { try { if(!btnFlujo){ MessageHelper.setMessageInfo("GUARDE LOS CAMBIOS"); } Request request = callerhelper.getRequest(); // limpiar request para finalizar la tarea. super.cleanRequest(request); request.modifiedData().put("cplanificacion", this.cplanificacion); request.modifiedData().put("TID", tid); request.modifiedData().put("BPMStatus", bpmDataStatus == null ? "A" : bpmDataStatus); // A,D,R request.modifiedData().put("BPMObs", bpmDataComment == null ? "OK" : bpmDataComment); Response resp = callerhelper.executeSave(request); if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) { MessageHelper.setMessageInfo(resp); btnFlujo=false; RequestContext.getCurrentInstance().execute("Maia.refreshusertasks()"); } else { MessageHelper.setMessageError(resp); } } catch (Throwable e) { MessageHelper.setMessageError(e); } } public PlanificacionTramiteController getPlanificacionTramiteController() { return planificacionTramiteController; } public void setPlanificacionTramiteController(PlanificacionTramiteController planificacionTramiteController) { this.planificacionTramiteController = planificacionTramiteController; } public TarmCentroControl getCentroControl() { return centroControl; } public void setCentroControl(TarmCentroControl centroControl) { this.centroControl = centroControl; } public String getNombreCentroControl() { return nombreCentroControl; } public void setNombreCentroControl(String nombreCentroControl) { this.nombreCentroControl = nombreCentroControl; } public DocumentoHabilitanteController getDocumentoHabilitanteController() { return documentoHabilitanteController; } public void setDocumentoHabilitanteController(DocumentoHabilitanteController documentoHabilitanteController) { this.documentoHabilitanteController = documentoHabilitanteController; } public Boolean getPlanificacionSalvada() { return planificacionSalvada; } public void setPlanificacionSalvada(Boolean planificacionSalvada) { this.planificacionSalvada = planificacionSalvada; } public List getListaMeses() { return listaMeses; } public void setListaMeses(List listaMeses) { this.listaMeses = listaMeses; } public List getListaAnnos() { return listaAnnos; } public void setListaAnnos(List listaAnnos) { this.listaAnnos = listaAnnos; } public TarmCentroControlJur getJurisdiccionCentroControl() { return jurisdiccionCentroControl; } public void setJurisdiccionCentroControl(TarmCentroControlJur jurisdiccionCentroControl) { this.jurisdiccionCentroControl = jurisdiccionCentroControl; } public List getPlanificaciones() { return planificaciones; } public void setPlanificaciones(List planificaciones) { this.planificaciones = planificaciones; } public PersonAddressController getPersonAddressController() { return personAddressController; } public void setPersonAddressController(PersonAddressController personAddressController) { this.personAddressController = personAddressController; } public Long getCplanificacion() { return cplanificacion; } public void setCplanificacion(Long cplanificacion) { this.cplanificacion = cplanificacion; } public Boolean getBtnFlujo() { return btnFlujo; } public void setBtnFlujo(Boolean btnFlujo) { this.btnFlujo = btnFlujo; } }