From 97d661304034326968efb6ebecc088b11c1ac0ee Mon Sep 17 00:00:00 2001 From: "Brayan.Gonzalez" Date: Tue, 15 Apr 2025 19:15:56 -0600 Subject: [PATCH] - AGREGAR DETALLES DE ABONOS PARA PODER GENERAR SUB ABONOS --- .../prase/PagosPolizaController.java | 345 +++++++---- .../prase/model/prase/DetellePagoPoliza.java | 16 + .../crov/prase/prase/PagosPolizasBean.java | 569 ++++++++++-------- .../main/webapp/app/prase/poliza/pagos.xhtml | 100 ++- 4 files changed, 636 insertions(+), 394 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 b87f77a..c933ca6 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 @@ -9,6 +9,7 @@ import com.arrebol.taxiservicios.controller.util.HibernateUtil; import com.arrebol.taxiservicios.model.catalog.Location; import com.arrebol.taxiservicios.model.core.User; import com.arrebol.taxiservicios.model.enums.GenericEnumType; +import com.crov.prase.model.prase.DetellePagoPoliza; import com.crov.prase.model.prase.PagosPoliza; import com.crov.prase.model.prase.Poliza; import java.io.Serializable; @@ -18,6 +19,8 @@ import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.UUID; +import javax.persistence.NoResultException; +import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; @@ -34,137 +37,253 @@ import org.hibernate.Transaction; */ public class PagosPolizaController extends ConnectionManager implements Serializable { - private static final long serialVersionUID = -8772793021819350069L; - final Logger logger = LogManager.getLogger(getClass()); + private static final long serialVersionUID = -8772793021819350069L; + final Logger logger = LogManager.getLogger(getClass()); - public List fillPagosPolizaByPoliza(Poliza poliza) { - logger.info("fillPagosPolizaByPoliza"); - 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(); + public List fillPagosPolizaByPoliza(Poliza poliza) { + logger.info("fillPagosPolizaByPoliza"); + 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(PagosPoliza.class); - Root root = criteria.from(PagosPoliza.class); + CriteriaQuery criteria = builder.createQuery(PagosPoliza.class); + Root root = criteria.from(PagosPoliza.class); - Predicate criterio1 = builder.equal(root.get("poliza"), poliza); - Predicate criterio2 = builder.equal(root.get("estatusActivo"), GenericEnumType.ENABLED); - criteria.where(builder.and(criterio1, criterio2)); - criteria.orderBy(builder.asc(root.get("fechaAPagar"))); + Predicate criterio1 = builder.equal(root.get("poliza"), poliza); + Predicate criterio2 = builder.equal(root.get("estatusActivo"), GenericEnumType.ENABLED); + criteria.where(builder.and(criterio1, criterio2)); + criteria.orderBy(builder.asc(root.get("fechaAPagar"))); - resultList = session.createQuery(criteria).getResultList(); + 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; - } + 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 List fillPagosPolizaFechaAPagarByLocationFechaInicioAndFechaFin(Location location, Date startDate, Date endDate) { - logger.info("fillPagosPolizaByPoliza"); - 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(); + public List fillPagosPolizaFechaAPagarByLocationFechaInicioAndFechaFin(Location location, Date startDate, Date endDate) { + logger.info("fillPagosPolizaByPoliza"); + 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(PagosPoliza.class); - Root root = criteria.from(PagosPoliza.class); + CriteriaQuery criteria = builder.createQuery(PagosPoliza.class); + Root root = criteria.from(PagosPoliza.class); - LocalDate localStartDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); - LocalDate localEndDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate localStartDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate localEndDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); - Predicate criterio1 = builder.equal(root.get("poliza").get("location"), location); - Predicate criterio2 = builder.equal(root.get("estatusActivo"), GenericEnumType.ENABLED); - Predicate criterio3 = builder.equal(root.get("pagoEstatus"), GenericEnumType.DISABLED); - Predicate startDatePredicate = builder.greaterThanOrEqualTo(root.get("fechaAPagar").as(LocalDate.class), localStartDate); - Predicate endDatePredicate = builder.lessThanOrEqualTo(root.get("fechaAPagar").as(LocalDate.class), localEndDate); - criteria.where(builder.and(criterio1, criterio2,criterio3,startDatePredicate, endDatePredicate)); - criteria.orderBy(builder.asc(root.get("fechaAPagar"))); + Predicate criterio1 = builder.equal(root.get("poliza").get("location"), location); + Predicate criterio2 = builder.equal(root.get("estatusActivo"), GenericEnumType.ENABLED); + Predicate criterio3 = builder.equal(root.get("pagoEstatus"), GenericEnumType.DISABLED); + Predicate startDatePredicate = builder.greaterThanOrEqualTo(root.get("fechaAPagar").as(LocalDate.class), localStartDate); + Predicate endDatePredicate = builder.lessThanOrEqualTo(root.get("fechaAPagar").as(LocalDate.class), localEndDate); + criteria.where(builder.and(criterio1, criterio2, criterio3, startDatePredicate, endDatePredicate)); + criteria.orderBy(builder.asc(root.get("fechaAPagar"))); - resultList = session.createQuery(criteria).getResultList(); + 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; - } + 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 PagosPoliza fillFoliosByPagos(String abreviacionFolio) { - PagosPoliza result = null; - Transaction transaction = null; - try { - logger.info("Search last generated folio.."); + public PagosPoliza fillFoliosByPagos(String abreviacionFolio) { + PagosPoliza result = null; + Transaction transaction = null; + try { + logger.info("Search last generated folio.."); - Session session = HibernateUtil.getSessionFactory().getCurrentSession(); - transaction = session.beginTransaction(); + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + transaction = session.beginTransaction(); - String query = "SELECT tap FROM PagosPoliza tap " - + "WHERE tap.folio LIKE '" + abreviacionFolio + "%' " - + "ORDER BY " - + "SUBSTRING_INDEX(tap.folio, '-', 1) DESC, " - + "SUBSTRING_INDEX(SUBSTRING_INDEX(tap.folio, '-', -2), '-', -6) DESC "; + String query = "SELECT tap FROM PagosPoliza tap " + + "WHERE tap.folio LIKE '" + abreviacionFolio + "%' " + + "ORDER BY " + + "SUBSTRING_INDEX(tap.folio, '-', 1) DESC, " + + "SUBSTRING_INDEX(SUBSTRING_INDEX(tap.folio, '-', -2), '-', -6) DESC "; - result = (PagosPoliza) session.createQuery(query).setMaxResults(1).uniqueResult(); - transaction.commit(); - } catch (HibernateException e) { - logger.error("Search for the last generated folio " + e); - rollback(transaction); - } catch (Exception e) { - logger.error("Method fillFoliosByPagos() " + e); - rollback(transaction); - } - return result; - } - - public boolean updatePago(PagosPoliza pago, User user) { - logger.info("addPagos"); - boolean success = false; - Transaction transaction = null; + result = (PagosPoliza) session.createQuery(query).setMaxResults(1).uniqueResult(); + transaction.commit(); + } catch (HibernateException e) { + logger.error("Search for the last generated folio " + e); + rollback(transaction); + } catch (Exception e) { + logger.error("Method fillFoliosByPagos() " + e); + rollback(transaction); + } + return result; + } - try { - Session session = HibernateUtil.getSessionFactory().getCurrentSession(); - transaction = session.beginTransaction(); + public boolean updatePago(PagosPoliza pago, User user) { + logger.info("addPagos"); + boolean success = false; + Transaction transaction = null; - pago.setLastUpdatedOn(correcciónDeHr(new Date(), -7)); - pago.setLastUpdatedBy(user); - session.update(pago); - transaction.commit(); + try { + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + transaction = session.beginTransaction(); - success = true; - } catch (HibernateException e) { - logger.error("Venta can not be added ", e); - rollback(transaction); - } catch (Exception e) { - logger.error("Method addVenta() ", e); - rollback(transaction); - } - return success; - } + pago.setLastUpdatedOn(correcciónDeHr(new Date(), -7)); + pago.setLastUpdatedBy(user); + session.update(pago); + transaction.commit(); - private Date correcciónDeHr(Date fecha, int horas) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(fecha); - calendar.add(Calendar.HOUR_OF_DAY, horas); - Date nuevaFecha = calendar.getTime(); - return nuevaFecha; - } + success = true; + } catch (HibernateException e) { + logger.error("Venta can not be added ", e); + rollback(transaction); + } catch (Exception e) { + logger.error("Method addVenta() ", e); + rollback(transaction); + } + return success; + } + + public boolean createDetellePago(DetellePagoPoliza dpago, User user) { + logger.info("createDetellePago"); + boolean success = false; + Transaction transaction = null; + + try { + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + transaction = session.beginTransaction(); + dpago.setId(UUID.randomUUID().toString()); + dpago.setCreatedOn(correcciónDeHr(new Date(), -7)); + dpago.setCreatedBy(user); + session.save(dpago); + transaction.commit(); + + success = true; + } catch (HibernateException e) { + logger.error("Detalle pago can not be added ", e); + rollback(transaction); + } catch (Exception e) { + logger.error("Method createDetellePago() ", e); + rollback(transaction); + } + return success; + } + + public boolean updateDetellePago(DetellePagoPoliza dpago, User user) { + logger.info("createDetellePago"); + boolean success = false; + Transaction transaction = null; + + try { + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + transaction = session.beginTransaction(); + dpago.setLastUpdatedOn(correcciónDeHr(new Date(), -7)); + dpago.setLastUpdatedBy(user); + session.update(dpago); + transaction.commit(); + + success = true; + } catch (HibernateException e) { + logger.error("Detalle pago can not be added ", e); + rollback(transaction); + } catch (Exception e) { + logger.error("Method createDetellePago() ", e); + rollback(transaction); + } + return success; + } + + public DetellePagoPoliza getUltimoDetalleByPago(String idPago) { + logger.info("getUltimoDetalleByPago"); + + DetellePagoPoliza result = null; + Transaction transaction = null; + try { + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + transaction = session.beginTransaction(); + CriteriaBuilder builder = session.getCriteriaBuilder(); + + CriteriaQuery criteria = builder.createQuery(DetellePagoPoliza.class); + Root root = criteria.from(DetellePagoPoliza.class); + + criteria.where(builder.equal(root.get("pagoPoliza").get("id"), idPago)); + criteria.orderBy(builder.desc(root.get("createdOn"))); + + TypedQuery query = session.createQuery(criteria); + query.setMaxResults(1); + result = query.getSingleResult(); + + transaction.commit(); + } catch (NoResultException e) { + logger.info("No se encontró detalle para el pago: " + idPago); + rollback(transaction); + } catch (HibernateException e) { + logger.error("Error al obtener el detalle del pago " + idPago, e); + rollback(transaction); + } catch (Exception e) { + logger.error("Error en getUltimoDetalleByPago(" + idPago + ")", e); + rollback(transaction); + } + return result; + } + + public List fillDetellePagoPolizaByPago(String idPago) { + logger.info("fillDetellePagoPolizaByPago"); + List resultList = null; + Transaction transaction = null; + try { + logger.info("Searching detalles 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("id"), idPago); + Predicate criterio2 = builder.equal(root.get("estatusActivo"), GenericEnumType.ENABLED); + + criteria.where(builder.and(criterio1, criterio2)); + criteria.orderBy(builder.asc(root.get("createdOn"))); + + resultList = session.createQuery(criteria).getResultList(); + + logger.info("Total of detalles pagos found: " + (null == resultList ? -1 : resultList.size())); + transaction.commit(); + } catch (HibernateException e) { + logger.error("Detalles pagos cannot be loaded "); + rollback(transaction); + } catch (Exception e) { + logger.error("Method fillDetellePagoPolizaByPago ", e); + rollback(transaction); + } + return resultList; + } + + private Date correcciónDeHr(Date fecha, int horas) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(fecha); + calendar.add(Calendar.HOUR_OF_DAY, horas); + Date nuevaFecha = calendar.getTime(); + return nuevaFecha; + } } diff --git a/crov-prase-model/src/main/java/com/crov/prase/model/prase/DetellePagoPoliza.java b/crov-prase-model/src/main/java/com/crov/prase/model/prase/DetellePagoPoliza.java index 2b679b9..27d6f60 100644 --- a/crov-prase-model/src/main/java/com/crov/prase/model/prase/DetellePagoPoliza.java +++ b/crov-prase-model/src/main/java/com/crov/prase/model/prase/DetellePagoPoliza.java @@ -61,6 +61,14 @@ public class DetellePagoPoliza implements Serializable { @Column(name = "folio") private String folio; + @ManyToOne(fetch = FetchType.LAZY, optional = true) + @JoinColumn( + name = "cobro", + referencedColumnName = "id", + nullable = true + ) + private User cobro; + @Enumerated(EnumType.STRING) @Column(name = "metodo_pago", nullable = true) private MetodoPago metodoPago; @@ -184,4 +192,12 @@ public class DetellePagoPoliza implements Serializable { this.lastUpdatedBy = lastUpdatedBy; } + public User getCobro() { + return cobro; + } + + public void setCobro(User cobro) { + this.cobro = cobro; + } + } diff --git a/crov-prase-web/src/main/java/com/crov/prase/prase/PagosPolizasBean.java b/crov-prase-web/src/main/java/com/crov/prase/prase/PagosPolizasBean.java index cf68488..f0c95ce 100644 --- a/crov-prase-web/src/main/java/com/crov/prase/prase/PagosPolizasBean.java +++ b/crov-prase-web/src/main/java/com/crov/prase/prase/PagosPolizasBean.java @@ -11,6 +11,7 @@ import com.arrebol.taxiservicios.model.enums.MetodoPago; import com.arrebol.taxiservicios.model.enums.PolizaEstatus; import com.crov.prase.controller.prase.PagosPolizaController; import com.crov.prase.controller.prase.PolizaController; +import com.crov.prase.model.prase.DetellePagoPoliza; import com.crov.prase.model.prase.PagosPoliza; import com.crov.prase.model.prase.Poliza; import java.io.Serializable; @@ -32,305 +33,349 @@ import org.apache.logging.log4j.Logger; @ViewScoped public class PagosPolizasBean extends TaxiGenericBean implements Serializable { - private static final long serialVersionUID = -136031528440947006L; - final Logger logger = LogManager.getLogger(PolizaBean.class); + private static final long serialVersionUID = -136031528440947006L; + final Logger logger = LogManager.getLogger(PolizaBean.class); - private PolizaController polizaController; - private PagosPolizaController pagosPolizaController; - private GenericValidationController genericController; + private PolizaController polizaController; + private PagosPolizaController pagosPolizaController; + private GenericValidationController genericController; - private List poliza; - private Poliza selectedPoliza; - private List listPagosPolizas; - private PagosPoliza selectedPago; - private String pagoSiguiente; - private Double cantidadAPagar; - private Boolean pagoExitoso; - private String imagen; - private String metodoPago; + private List poliza; + private Poliza selectedPoliza; + private List listPagosPolizas; + private PagosPoliza selectedPago; + private List listDetallePagosPolizas; + private DetellePagoPoliza selectedDetellePago; + private String pagoSiguiente; + private Double cantidadAPagar; + private Boolean pagoExitoso; + private String imagen; + private String metodoPago; - @PostConstruct - public void init() { - logger.info("init"); - try { - loadBundlePropertyFile(); - setPolizaController(new PolizaController()); - setPagosPolizaController(new PagosPolizaController()); - setGenericController(new GenericValidationController()); + @PostConstruct + public void init() { + logger.info("init"); + try { + loadBundlePropertyFile(); + setPolizaController(new PolizaController()); + setPagosPolizaController(new PagosPolizaController()); + setGenericController(new GenericValidationController()); + cargarPolizas(); + } catch (Exception e) { + logger.error(e); + } + } + + public void cargarPolizas() { + logger.info("cargarPolizas()"); + setPoliza(getPolizaController().findActive(getLoggedUser().getLocation())); + } + + public void cargarPagosPoliza() { + logger.info("cargarPagosPoliza()"); + try { + // se caga la lista de pagos + setListPagosPolizas(getPagosPolizaController().fillPagosPolizaByPoliza(getSelectedPoliza())); + // se encuentra el siguiente pago a realizar + String idSiguinetePago = ""; + for (PagosPoliza pa : getListPagosPolizas()) { + if (pa.getPagoEstatus().equals(GenericEnumType.DISABLED) || pa.getPagoEstatus().equals(GenericEnumType.INCOMPLETE)) { + idSiguinetePago = pa.getId(); + break; + } + } + setPagoSiguiente(idSiguinetePago); + } catch (Exception e) { + logger.error("cargarPagosPoliza(): " + e); + } + } + + public void cargarPago() { + setCantidadAPagar(getSelectedPago().getDiferenciaPago()); + } + + public void pagar() { + logger.info("pagar()"); + setPagoExitoso(false); + + if (getGenericController().existClosingDayByCreatedOn(new Date(), getLoggedUser())) { + showMessage(FacesMessage.SEVERITY_WARN, "Error", "No se puede hacer ninguna acción si existe un corte del día"); + return; + } + + if (getGenericController().existStableGeneralBoxByCurdate(getLoggedUser())) { + showMessage(FacesMessage.SEVERITY_WARN, "Dia cerrado", "No se puede hacer ninguna acción porque ya existe un cuadre de caja chica del día"); + return; + } + + if (getCantidadAPagar() > (getSelectedPago().getPago() - getSelectedPago().getCantidadPagada())) { + showMessage(FacesMessage.SEVERITY_WARN, "ERROR", "La cantidad a pagar no puede ser mayor al pago restante del abono"); + return; + } + + // se valida el pago realizado sea el siguiente según el consecutivo + if (getSelectedPago().getId().equals(getPagoSiguiente())) { + // se actuliza el pago + if (actualizarAbono(getSelectedPago(), getCantidadAPagar(), getMetodoPago())) { + // se actualiza la lista de pagos y polizas + setPagoExitoso(true); + // se carga el ultimo detalle para el tiked + setSelectedDetellePago(getPagosPolizaController().getUltimoDetalleByPago(getSelectedPago().getId())); + cargarPagosPoliza(); + cargarDetalles(); cargarPolizas(); - } catch (Exception e) { - logger.error(e); - } - } + showMessage(FacesMessage.SEVERITY_INFO, "Pago realizado", "El pago se realizó correctamente"); + } else { + showMessage(FacesMessage.SEVERITY_ERROR, "Error", "Ocurrió un error al realizar el pago"); + } + } else { + showMessage(FacesMessage.SEVERITY_WARN, "Error", "Solo puede pagar el pago consecutivo"); + } - public void cargarPolizas() { - logger.info("cargarPolizas()"); - setPoliza(getPolizaController().findActive(getLoggedUser().getLocation())); - } + } - public void cargarPagosPoliza() { - logger.info("cargarPagosPoliza()"); - try { - // se caga la lista de pagos - setListPagosPolizas(getPagosPolizaController().fillPagosPolizaByPoliza(getSelectedPoliza())); - // se encuentra el siguiente pago a realizar - String idSiguinetePago = ""; - for (PagosPoliza pa : getListPagosPolizas()) { - if (pa.getPagoEstatus().equals(GenericEnumType.DISABLED)) { - idSiguinetePago = pa.getId(); - break; - } - } - setPagoSiguiente(idSiguinetePago); - } catch (Exception e) { - logger.error("cargarPagosPoliza(): " + e); - } - } - - public void cargarPago() { - setCantidadAPagar(getSelectedPago().getPago()); - } - - public void pagar() { - logger.info("pagar()"); - try { - - setPagoExitoso(false); - - if (getGenericController().existClosingDayByCreatedOn(new Date(), getLoggedUser())) { - showMessage(FacesMessage.SEVERITY_WARN, "Error", "No se puede hacer ninguna acción si existe un corte del día"); - return; - } - - if (getGenericController().existStableGeneralBoxByCurdate(getLoggedUser())) { - showMessage(FacesMessage.SEVERITY_WARN, "Dia cerrado", "No se puede hacer ninguna acción porque ya existe un cuadre de caja chica del día"); - return; - } - - // se valida el pago realizado sea el siguiente según el consecutivo - if (getSelectedPago().getId().equals(getPagoSiguiente())) { - setImagen("images/prase_logo.jpeg"); - - // se optiene el folio consecutivo - String folio = obtenerFolio("A-PRASE"); - if (folio != null) { - // se actualiza el pago - getSelectedPago().setPagoEstatus(GenericEnumType.ENABLED); - getSelectedPago().setFolio(folio); - getSelectedPago().setFechaPago(correcciónDeHr(new Date(), -7)); - getSelectedPago().setCobro(getLoggedUser()); - getSelectedPago().setCantidadPagada(getSelectedPago().getPago()); - getSelectedPago().setDiferenciaPago(0.0); - switch (getMetodoPago()) { - case "EFECTIVO": - getSelectedPago().setMetodoPago(MetodoPago.EFECTIVO); - break; - case "TARJETA": - getSelectedPago().setMetodoPago(MetodoPago.TARJETA); - break; - case "DEPOSITO": - getSelectedPago().setMetodoPago(MetodoPago.DEPOSITO); - break; - case "TRASFERENCIA": - getSelectedPago().setMetodoPago(MetodoPago.TRASFERENCIA); - break; - default: - getSelectedPago().setMetodoPago(MetodoPago.EFECTIVO); - } - getPagosPolizaController().updatePago(getSelectedPago(), getLoggedUser()); - - // se actuliza la venta - getSelectedPoliza().setCantidadPagada(getSelectedPoliza().getCantidadPagada() + getSelectedPago().getPago()); - getSelectedPoliza().setLastUpdatedBy(getLoggedUser()); - getSelectedPoliza().setLastUpdatedOn(new Date()); - //se valida si la venta ya fue liquidada - double cantidadPa = getSelectedPoliza().getCantidadPagada(); - double costoTotal = getSelectedPoliza().getAmount(); - double tolerancia = 0.001; - if (Math.abs(cantidadPa - costoTotal) < tolerancia) { - getSelectedPoliza().setEstatus(PolizaEstatus.LIQUIDADO); - } - getPolizaController().update(getSelectedPoliza()); - - // se actualiza la lista de pagos y polizas - cargarPagosPoliza(); - cargarPolizas(); - setPagoExitoso(true); - logger.info("El pago se realizó correctamente"); - showMessage(FacesMessage.SEVERITY_INFO, "Pago realizado", "El pago se realizó correctamente"); - } else { - logger.error("Ocurrió un error al generar el folio"); - showMessage(FacesMessage.SEVERITY_INFO, "Error", "Ocurrió un error al generar el folio"); - } + private boolean actualizarAbono(PagosPoliza pagoA, Double montoPagado, String metodoDePago) { + try { + setImagen("images/prase_logo.jpeg"); + // se optiene el folio consecutivo + String folio = obtenerFolio("A-PRASE"); + if (folio != null) { + // se genera el detalle pago + DetellePagoPoliza detalle = new DetellePagoPoliza(); + detalle.setPagoPoliza(pagoA); + detalle.setEstatusActivo(GenericEnumType.ENABLED); + detalle.setFechaPago(correcciónDeHr(new Date(), -7)); + detalle.setCantidadPagada(montoPagado); + detalle.setCobro(getLoggedUser()); + detalle.setFolio(folio); + detalle.setMetodoPago(MetodoPago.valueOf(metodoDePago)); + getPagosPolizaController().createDetellePago(detalle, getLoggedUser()); + // se actualisa el pago pricipal + pagoA.setCantidadPagada(pagoA.getCantidadPagada() + detalle.getCantidadPagada()); + pagoA.setDiferenciaPago(pagoA.getPago() - pagoA.getCantidadPagada()); + if (Math.abs(pagoA.getDiferenciaPago()) < 0.01) { + pagoA.setPagoEstatus(GenericEnumType.ENABLED); + pagoA.setCantidadPagada(pagoA.getPago()); + pagoA.setDiferenciaPago(0.0); } else { - showMessage(FacesMessage.SEVERITY_WARN, "Error", "Solo puede pagar el pago consecutivo"); + pagoA.setPagoEstatus(GenericEnumType.INCOMPLETE); } + getPagosPolizaController().updatePago(pagoA, getLoggedUser()); - } catch (Exception e) { - showMessage(FacesMessage.SEVERITY_INFO, "Error", "Ocurrió un error al realizar el pago"); - logger.error("pagar(): " + e); - } - } - - private String obtenerFolio(String ab) { - logger.info("Obteniendo último folio "); - try { - // Se cargan los abonos para validar el folio - String abreviacion = ab; - PagosPoliza ultimoFolio = getPagosPolizaController().fillFoliosByPagos(abreviacion); - // Se valida si ya existen folios registrados para el proyecto y se le asigna el último encontrado - int consecutivo = 0; - if (ultimoFolio != null) { - String folior = ultimoFolio.getFolio(); - // Dividir el folio en partes utilizando el guion como separador - String[] partes = folior.split("-"); - // Obtener la parte del consecutivo - String consecutivoParte = partes[2]; - // Convertir el consecutivo a un entero - consecutivo = Integer.parseInt(consecutivoParte); + // se actuliza la venta + pagoA.getPoliza().setCantidadPagada(pagoA.getPoliza().getCantidadPagada() + detalle.getCantidadPagada()); + pagoA.getPoliza().setLastUpdatedBy(getLoggedUser()); + pagoA.getPoliza().setLastUpdatedOn(new Date()); + //se valida si la venta ya fue liquidada + double cantidadPa = pagoA.getPoliza().getCantidadPagada(); + double costoTotal = pagoA.getPoliza().getAmount(); + if (Math.abs(cantidadPa - costoTotal) < 0.10) { + pagoA.getPoliza().setEstatus(PolizaEstatus.LIQUIDADO); + pagoA.getPoliza().setCantidadPagada(pagoA.getPoliza().getAmount()); } - // se formatea el consecutivo - String numeroFormateado = String.format("%06d", consecutivo + 1); - String folio; - // Se obtiene el año actual - Calendar calendario = Calendar.getInstance(); - int ano = calendario.get(Calendar.YEAR); - String anoActual = String.valueOf(ano); - // Se valida si se creara el primer folio - if (consecutivo == 0) { - folio = abreviacion + "-" + "000001" + "-" + anoActual; - } else { - folio = abreviacion + "-" + numeroFormateado + "-" + anoActual; - } - return folio; - } catch (NumberFormatException e) { - logger.error("Ocurrió un erro al obtener el último folio "); - showMessage(FacesMessage.SEVERITY_ERROR, "Error", "Ocurrió un error al generar el folio"); - return null; - } - } + getPolizaController().update(pagoA.getPoliza()); - public void reimprimirTicket() { - setPagoExitoso(true); - try { - setImagen("images/prase_logo.jpeg"); - } catch (Exception e) { - logger.error("Error al definir el logo para el tiked  " + e); - } - } + logger.info("El pago se realizó correctamente"); + return true; + } else { + logger.error("Ocurrió un error al generar el folio"); + return false; + } + } catch (Exception e) { + logger.error("actualizarAbono(): " + e); + return false; + } + } - private Date correcciónDeHr(Date fecha, int horas) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(fecha); - calendar.add(Calendar.HOUR_OF_DAY, horas); - Date nuevaFecha = calendar.getTime(); - return nuevaFecha; - } + public void limpiarDetallePago() { + setSelectedDetellePago(null); + setPagoExitoso(false); + } - public String validarColores(String estatus) { - // Validadar color  - if (estatus.equals("LIQUIDADO")) { - return "bgVerde"; - } else { - return ""; - } - } + private String obtenerFolio(String ab) { + logger.info("Obteniendo último folio "); + try { + // Se cargan los abonos para validar el folio + String abreviacion = ab; + PagosPoliza ultimoFolio = getPagosPolizaController().fillFoliosByPagos(abreviacion); + // Se valida si ya existen folios registrados para el proyecto y se le asigna el último encontrado + int consecutivo = 0; + if (ultimoFolio != null) { + String folior = ultimoFolio.getFolio(); + // Dividir el folio en partes utilizando el guion como separador + String[] partes = folior.split("-"); + // Obtener la parte del consecutivo + String consecutivoParte = partes[2]; + // Convertir el consecutivo a un entero + consecutivo = Integer.parseInt(consecutivoParte); + } + // se formatea el consecutivo + String numeroFormateado = String.format("%06d", consecutivo + 1); + String folio; + // Se obtiene el año actual + Calendar calendario = Calendar.getInstance(); + int ano = calendario.get(Calendar.YEAR); + String anoActual = String.valueOf(ano); + // Se valida si se creara el primer folio + if (consecutivo == 0) { + folio = abreviacion + "-" + "000001" + "-" + anoActual; + } else { + folio = abreviacion + "-" + numeroFormateado + "-" + anoActual; + } + return folio; + } catch (NumberFormatException e) { + logger.error("Ocurrió un erro al obtener el último folio "); + showMessage(FacesMessage.SEVERITY_ERROR, "Error", "Ocurrió un error al generar el folio"); + return null; + } + } - public PolizaController getPolizaController() { - return polizaController; - } + public void cargarDetalles() { + try { + setListDetallePagosPolizas(getPagosPolizaController().fillDetellePagoPolizaByPago(getSelectedPago().getId())); + } catch (Exception e) { + logger.error("cargarDetalles(): " + e); + showMessage(FacesMessage.SEVERITY_ERROR, "Error", "Ocurrió un error al tratar de cargar los detalles de pago"); + } + } - public void setPolizaController(PolizaController polizaController) { - this.polizaController = polizaController; - } + public void reimprimirTicket() { + setPagoExitoso(true); + try { + setImagen("images/prase_logo.jpeg"); + } catch (Exception e) { + logger.error("Error al definir el logo para el tiked  " + e); + } + } - public List getPoliza() { - return poliza; - } + private Date correcciónDeHr(Date fecha, int horas) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(fecha); + calendar.add(Calendar.HOUR_OF_DAY, horas); + Date nuevaFecha = calendar.getTime(); + return nuevaFecha; + } - public void setPoliza(List poliza) { - this.poliza = poliza; - } + public String validarColores(String estatus) { + // Validadar color  + if (estatus.equals("LIQUIDADO")) { + return "bgVerde"; + } else { + return ""; + } + } - public Poliza getSelectedPoliza() { - return selectedPoliza; - } + public PolizaController getPolizaController() { + return polizaController; + } - public void setSelectedPoliza(Poliza selectedPoliza) { - this.selectedPoliza = selectedPoliza; - } + public void setPolizaController(PolizaController polizaController) { + this.polizaController = polizaController; + } - public List getListPagosPolizas() { - return listPagosPolizas; - } + public List getPoliza() { + return poliza; + } - public void setListPagosPolizas(List listPagosPolizas) { - this.listPagosPolizas = listPagosPolizas; - } + public void setPoliza(List poliza) { + this.poliza = poliza; + } - public PagosPoliza getSelectedPago() { - return selectedPago; - } + public Poliza getSelectedPoliza() { + return selectedPoliza; + } - public void setSelectedPago(PagosPoliza selectedPago) { - this.selectedPago = selectedPago; - } + public void setSelectedPoliza(Poliza selectedPoliza) { + this.selectedPoliza = selectedPoliza; + } - public PagosPolizaController getPagosPolizaController() { - return pagosPolizaController; - } + public List getListPagosPolizas() { + return listPagosPolizas; + } - public void setPagosPolizaController(PagosPolizaController pagosPolizaController) { - this.pagosPolizaController = pagosPolizaController; - } + public void setListPagosPolizas(List listPagosPolizas) { + this.listPagosPolizas = listPagosPolizas; + } - public String getPagoSiguiente() { - return pagoSiguiente; - } + public PagosPoliza getSelectedPago() { + return selectedPago; + } - public void setPagoSiguiente(String pagoSiguiente) { - this.pagoSiguiente = pagoSiguiente; - } + public void setSelectedPago(PagosPoliza selectedPago) { + this.selectedPago = selectedPago; + } - public Double getCantidadAPagar() { - return cantidadAPagar; - } + public PagosPolizaController getPagosPolizaController() { + return pagosPolizaController; + } - public void setCantidadAPagar(Double cantidadAPagar) { - this.cantidadAPagar = cantidadAPagar; - } + public void setPagosPolizaController(PagosPolizaController pagosPolizaController) { + this.pagosPolizaController = pagosPolizaController; + } - public GenericValidationController getGenericController() { - return genericController; - } + public String getPagoSiguiente() { + return pagoSiguiente; + } - public void setGenericController(GenericValidationController genericController) { - this.genericController = genericController; - } + public void setPagoSiguiente(String pagoSiguiente) { + this.pagoSiguiente = pagoSiguiente; + } - public Boolean getPagoExitoso() { - return pagoExitoso; - } + public Double getCantidadAPagar() { + return cantidadAPagar; + } - public void setPagoExitoso(Boolean pagoExitoso) { - this.pagoExitoso = pagoExitoso; - } + public void setCantidadAPagar(Double cantidadAPagar) { + this.cantidadAPagar = cantidadAPagar; + } - public String getImagen() { - return imagen; - } + public GenericValidationController getGenericController() { + return genericController; + } - public void setImagen(String imagen) { - this.imagen = imagen; - } + public void setGenericController(GenericValidationController genericController) { + this.genericController = genericController; + } - public String getMetodoPago() { - return metodoPago; - } + public Boolean getPagoExitoso() { + return pagoExitoso; + } - public void setMetodoPago(String metodoPago) { - this.metodoPago = metodoPago; - } + public void setPagoExitoso(Boolean pagoExitoso) { + this.pagoExitoso = pagoExitoso; + } + + public String getImagen() { + return imagen; + } + + public void setImagen(String imagen) { + this.imagen = imagen; + } + + public String getMetodoPago() { + return metodoPago; + } + + public void setMetodoPago(String metodoPago) { + this.metodoPago = metodoPago; + } + + public DetellePagoPoliza getSelectedDetellePago() { + return selectedDetellePago; + } + + public void setSelectedDetellePago(DetellePagoPoliza selectedDetellePago) { + this.selectedDetellePago = selectedDetellePago; + } + + public List getListDetallePagosPolizas() { + return listDetallePagosPolizas; + } + + public void setListDetallePagosPolizas(List listDetallePagosPolizas) { + this.listDetallePagosPolizas = listDetallePagosPolizas; + } } diff --git a/crov-prase-web/src/main/webapp/app/prase/poliza/pagos.xhtml b/crov-prase-web/src/main/webapp/app/prase/poliza/pagos.xhtml index f8ec0f6..eb37250 100644 --- a/crov-prase-web/src/main/webapp/app/prase/poliza/pagos.xhtml +++ b/crov-prase-web/src/main/webapp/app/prase/poliza/pagos.xhtml @@ -187,9 +187,71 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + action="#{pagosPolizasBean.reimprimirTicket()}"> + @@ -216,14 +277,14 @@ - -
+ + - + -
+
@@ -242,33 +303,34 @@ - +
- - + + +

Folio: - +

Poliza:

Fecha: - +

-

-

-

-

-

+

+

+

+

+


AGRADECE SU PREFERENCIA