From e36c5f1b271627f825f907e7d1cca7f42a721bd3 Mon Sep 17 00:00:00 2001 From: "Brayan.Gonzalez" Date: Fri, 9 May 2025 15:27:25 -0600 Subject: [PATCH] - POLIZA - EDICION EN MODO DE CONTRATO (MENSUAL, TRIMESTRAL, SEMESTRAL O ANUAL) --- .../prase/PagosPolizaController.java | 114 ++++++++++++++++++ .../java/com/crov/prase/prase/PolizaBean.java | 54 ++++++++- .../main/webapp/app/prase/poliza/index.xhtml | 101 ++++++++++++++-- 3 files changed, 260 insertions(+), 9 deletions(-) diff --git a/crov-prase-controller/src/main/java/com/crov/prase/controller/prase/PagosPolizaController.java b/crov-prase-controller/src/main/java/com/crov/prase/controller/prase/PagosPolizaController.java index 8409306..1606cb1 100644 --- a/crov-prase-controller/src/main/java/com/crov/prase/controller/prase/PagosPolizaController.java +++ b/crov-prase-controller/src/main/java/com/crov/prase/controller/prase/PagosPolizaController.java @@ -184,6 +184,41 @@ public class PagosPolizaController extends ConnectionManager implements Serializ return result; } + public List fillDetellePagoPolizaPagadosByPoliza(Poliza poliza) { + logger.info("fillDetellePagoPolizaByPoliza"); + List resultList = null; + Transaction transaction = null; + try { + logger.info("Searching pagos for poliza.."); + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + transaction = session.beginTransaction(); + CriteriaBuilder builder = session.getCriteriaBuilder(); + + CriteriaQuery criteria = builder.createQuery(DetellePagoPoliza.class); + Root root = criteria.from(DetellePagoPoliza.class); + + Predicate criterio1 = builder.equal(root.get("pagoPoliza").get("poliza"), poliza); + Predicate criterio1_2 = builder.equal(root.get("estatusActivo"), GenericEnumType.ENABLED); + Predicate criterio2 = builder.equal(root.get("pagoPoliza").get("estatusActivo"), GenericEnumType.ENABLED); + Predicate criterio3 = builder.equal(root.get("pagoPoliza").get("pagoEstatus"), GenericEnumType.ENABLED); + Predicate criterio4 = builder.equal(root.get("pagoPoliza").get("pagoEstatus"), GenericEnumType.INCOMPLETE); + + criteria.where(builder.and(criterio1, criterio1_2, criterio2), builder.or(criterio3, criterio4)); + + resultList = session.createQuery(criteria).getResultList(); + + logger.info("Total of pagos found: " + (null == resultList ? -1 : resultList.size())); + transaction.commit(); + } catch (HibernateException e) { + logger.error("Pagos cannot be loaded "); + rollback(transaction); + } catch (Exception e) { + logger.error("Method fillPagosPolizaByPoliza ", e); + rollback(transaction); + } + return resultList; + } + public boolean updatePago(PagosPoliza pago, User user) { logger.info("addPagos"); boolean success = false; @@ -785,6 +820,85 @@ public class PagosPolizaController extends ConnectionManager implements Serializ } } + public boolean editarPolizaModoPago(Poliza selectedPoliza, int numeroPagos, List fechasPago, List detallesPagosRealizados, List pagos, User user) { + logger.info("editarPolizaModoPago()"); + Date fechaActual = correcciónDeHr(new Date(), -7); + Session session = null; + Transaction transaction = null; + try { + session = HibernateUtil.getSessionFactory().getCurrentSession(); + transaction = session.beginTransaction(); + // 1. Actualizar póliza + selectedPoliza.setLastUpdatedBy(user); + selectedPoliza.setLastUpdatedOn(fechaActual); + session.update(selectedPoliza); + // 2. Obtener y desactivar pagos existentes + + for (PagosPoliza pago : pagos) { + pago.setEstatusActivo(GenericEnumType.DISABLED); + pago.setLastUpdatedBy(user); + pago.setLastUpdatedOn(fechaActual); + session.update(pago); + } + // 3. Crear nuevos pagos + double contador = selectedPoliza.getCantidadPagada() == 0 ? 2 : 1; + for (Calendar fecha : fechasPago) { + PagosPoliza nuevoPago = new PagosPoliza(); + nuevoPago.setId(UUID.randomUUID().toString()); + nuevoPago.setPoliza(selectedPoliza); + nuevoPago.setEstatusActivo(GenericEnumType.ENABLED); + nuevoPago.setTipoPago(TipoAbono.ABONO); + nuevoPago.setFechaAPagar(fecha.getTime()); + nuevoPago.setCreatedBy(user); + nuevoPago.setCreatedOn(fechaActual); + if (contador == 1) { + // Primer pago + if (numeroPagos == 1) { + nuevoPago.setPago(selectedPoliza.getAmount()); + nuevoPago.setCantidadPagada(selectedPoliza.getCantidadPagada()); + nuevoPago.setDiferenciaPago(selectedPoliza.getAmount() - selectedPoliza.getCantidadPagada()); + nuevoPago.setPagoEstatus(Math.abs(nuevoPago.getDiferenciaPago()) < 0.01 ? GenericEnumType.ENABLED : GenericEnumType.INCOMPLETE); + } else { + nuevoPago.setPago(selectedPoliza.getCantidadPagada()); + nuevoPago.setCantidadPagada(selectedPoliza.getCantidadPagada()); + nuevoPago.setDiferenciaPago(0D); + nuevoPago.setPagoEstatus(GenericEnumType.ENABLED); + } + // Asociar pagos existentes + for (DetellePagoPoliza pagosRalizado : detallesPagosRealizados) { + pagosRalizado.setPagoPoliza(nuevoPago); + pagosRalizado.setLastUpdatedBy(user); + pagosRalizado.setLastUpdatedOn(fechaActual); + session.update(pagosRalizado); + } + contador = 2; + } else { + // Pagos subsiguientes + if (selectedPoliza.getCantidadPagada() == 0.0) { + nuevoPago.setPago(((selectedPoliza.getAmount() - selectedPoliza.getCantidadPagada())) / (numeroPagos)); + } else { + nuevoPago.setPago(((selectedPoliza.getAmount() - selectedPoliza.getCantidadPagada())) / (numeroPagos - 1)); + } + nuevoPago.setCantidadPagada(0D); + nuevoPago.setPagoEstatus(GenericEnumType.DISABLED); + } + session.save(nuevoPago); + } + transaction.commit(); + return true; + } catch (Exception e) { + if (transaction != null) { + transaction.rollback(); + } + logger.error("Error en editarPolizaModoPago: ", e); + return false; + } finally { + if (session != null && session.isOpen()) { + session.close(); + } + } + } + private Date correcciónDeHr(Date fecha, int horas) { Calendar calendar = Calendar.getInstance(); calendar.setTime(fecha); diff --git a/crov-prase-web/src/main/java/com/crov/prase/prase/PolizaBean.java b/crov-prase-web/src/main/java/com/crov/prase/prase/PolizaBean.java index 1639ba6..e4abedf 100644 --- a/crov-prase-web/src/main/java/com/crov/prase/prase/PolizaBean.java +++ b/crov-prase-web/src/main/java/com/crov/prase/prase/PolizaBean.java @@ -306,11 +306,63 @@ public class PolizaBean extends TaxiGenericBean implements Serializable, Datatab showMessage(FacesMessage.SEVERITY_INFO, "Actualización realizada", "Póliza actualizada correctamente."); logger.info("Póliza actualizada correctamente"); } catch (Exception e) { - showMessage(FacesMessage.SEVERITY_INFO, "Error", "Ocurrió un error al tratar de actualizar la póliza."); + showMessage(FacesMessage.SEVERITY_ERROR, "Error", "Ocurrió un error al tratar de actualizar la póliza."); logger.error("editarPoliza(): " + e); } } + public void editarPolizaModoPago() { + logger.info("editarPolizaModoPago()"); + try { + if (getIdPeriocidad().equals("0")) { + showMessage(FacesMessage.SEVERITY_WARN, "Error", "La periodicidad es obligatoria"); + return; + } + if (getSelectedPoliza().getAmount() < getSelectedPoliza().getCantidadPagada()) { + showMessage(FacesMessage.SEVERITY_WARN, "Error", "El nuevo monto no puede ser menor que la cantidad que ya se ha pagado"); + return; + } + // se define la fecha de inicio + getSelectedPoliza().setInitDate(correcciónDeDias(getInitDate(), 1)); + Calendar fechaInicial = Calendar.getInstance(); + fechaInicial.setTime(getSelectedPoliza().getInitDate()); + // se determina le numero de pagos que se realizaran + int numeroPagos = 0; + switch (getIdPeriocidad()) { + case "ANUAL": + numeroPagos = 1; + break; + case "SEMESTRAL": + numeroPagos = 2; + break; + case "TRIMESTRAL": + numeroPagos = 4; + break; + case "MENSUAL": + numeroPagos = 12; + break; + default: + break; + } + List detallesPagosRealizados = getPagosPolizaController().fillDetellePagoPolizaPagadosByPoliza(getSelectedPoliza()); + List pagos = getPagosPolizaController().fillPagosPolizaByPoliza(getSelectedPoliza()); + // se generan las fechas de pago + List fechasPago = generarFechasDePago(fechaInicial, numeroPagos, 0); + if (getPagosPolizaController().editarPolizaModoPago(getSelectedPoliza(), numeroPagos, fechasPago, detallesPagosRealizados, pagos, getLoggedUser())) { + clearPolizaForm(); + getPolizaList(); + showMessage(FacesMessage.SEVERITY_INFO, "Actualización realizada", "Póliza actualizada correctamente."); + logger.info("Póliza actualizada correctamente"); + } else { + showMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "Ocurrió un error al tratar de actualizar la póliza."); + logger.info("Ocurrió un error al tratar de actualizar la póliza"); + } + } catch (Exception e) { + showMessage(FacesMessage.SEVERITY_FATAL, "ERROR", "Ocurrió un error al tratar de actualizar la póliza."); + logger.error("editarPolizaModoPago(): " + e); + } + } + public List generarFechasDePago(Calendar fechaInicial, int numeroPagos, int periodoGracia) { logger.info("Generación fechas"); //lista de fechas diff --git a/crov-prase-web/src/main/webapp/app/prase/poliza/index.xhtml b/crov-prase-web/src/main/webapp/app/prase/poliza/index.xhtml index 94e6454..6a6d90c 100644 --- a/crov-prase-web/src/main/webapp/app/prase/poliza/index.xhtml +++ b/crov-prase-web/src/main/webapp/app/prase/poliza/index.xhtml @@ -237,11 +237,25 @@ + + + + + @@ -252,7 +266,7 @@ icon="ui-icon-close" title="Cancelar póliza" class="rounded-button" - style="background: red" + style="background: red; padding-top: 1em" oncomplete="PF('eliminarPoliza').show()" update="eliminarPolizaForm:eliminarPoliza" action="#{polizaBean.cargarDevolucion()}" @@ -350,6 +364,19 @@ + + + + + @@ -476,6 +504,19 @@ + + + + + @@ -617,7 +659,7 @@ icon="ui-icon-close" title="Cancelar póliza" class="rounded-button" - style="background: red" + style="background: red; padding-top: 1em" oncomplete="PF('eliminarPoliza').show()" update="eliminarPolizaForm:eliminarPoliza" action="#{polizaBean.cargarDevolucion()}" @@ -730,15 +772,17 @@ - - - - - - + + + + + + + + @@ -888,6 +932,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+