diff --git a/crov-prase-controller/src/main/java/com/arrebol/taxiservicios/controller/admin/ClosingDayController.java b/crov-prase-controller/src/main/java/com/arrebol/taxiservicios/controller/admin/ClosingDayController.java index 9ce33f8..d08fc31 100644 --- a/crov-prase-controller/src/main/java/com/arrebol/taxiservicios/controller/admin/ClosingDayController.java +++ b/crov-prase-controller/src/main/java/com/arrebol/taxiservicios/controller/admin/ClosingDayController.java @@ -702,6 +702,7 @@ public class ClosingDayController extends ConnectionManager implements Serializa details.addAll(buildDetailsList(2, executeNativeSQLQuery(query_details_expenses_by_type_earning, userID))); details.addAll(buildDetailsList(3, executeNativeSQLQuery(query_poliza_prase, userID))); details.addAll(buildDetailsList(4, executeNativeSQLQuery(query_poliza_prase_devolcion, userID))); + details.addAll(buildDetailsList(5, executeNativeSQLQuery(query_solicitudes_cancelacion_poliza, userID))); } catch (Exception e) { logger.error(e); @@ -1061,6 +1062,18 @@ public class ClosingDayController extends ConnectionManager implements Serializa + " AND e.tipo_pago = 'DEVOLUCION' " + "AND e.cobro = :userID "; + private final String query_solicitudes_cancelacion_poliza = "SELECT e.monto_devolucion, " + + " 'Primas no devengadas' AS tipo_pago, " + + "p.id as person, " + + "CONCAT('Poliza: ', pol.folio), " + complete_name + ", e.id " + + "FROM solicitud_cancelacion_poliza e " + + "INNER JOIN poliza_prase pol ON e.id_poliza = pol.id " + + "INNER JOIN person p ON pol.id_customer = p.id " + + "WHERE DATE(e.fecha_pago) > " + sub_query_to_find_previously_closing_day + + "AND e.estatus_activo = 'ENABLED' " + + " AND e.estatus_solicitud = 'APROBADO' " + + "AND e.id_solicitante = :userID "; + final Logger logger = LogManager.getLogger(ClosingDayController.class); private static final long serialVersionUID = -6732331411572526429L; } 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 73ab018..04d33c2 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 @@ -103,9 +103,10 @@ public class PagosPolizaController extends ConnectionManager implements Serializ Predicate criterio3 = builder.equal(root.get("pagoEstatus"), GenericEnumType.DISABLED); Predicate criterio4 = builder.equal(root.get("poliza").get("active"), true); Predicate criterio5 = builder.greaterThanOrEqualTo(root.get("poliza").get("endDate").as(LocalDate.class), localHoy); + Predicate criterio6 = builder.notEqual(root.get("poliza").get("estatus"), PolizaEstatus.CANCELADO); 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, criterio4, criterio5, startDatePredicate, endDatePredicate)); + criteria.where(builder.and(criterio1, criterio2, criterio3, criterio4, criterio5, criterio6, startDatePredicate, endDatePredicate)); criteria.orderBy(builder.asc(root.get("fechaAPagar"))); resultList = session.createQuery(criteria).getResultList(); diff --git a/crov-prase-controller/src/main/java/com/crov/prase/controller/prase/PolizaController.java b/crov-prase-controller/src/main/java/com/crov/prase/controller/prase/PolizaController.java index d8543cf..14408c5 100644 --- a/crov-prase-controller/src/main/java/com/crov/prase/controller/prase/PolizaController.java +++ b/crov-prase-controller/src/main/java/com/crov/prase/controller/prase/PolizaController.java @@ -12,15 +12,21 @@ import com.arrebol.taxiservicios.controller.util.HibernateUtil; import com.arrebol.taxiservicios.model.catalog.Location; import com.arrebol.taxiservicios.model.core.Address; import com.arrebol.taxiservicios.model.core.User; +import com.arrebol.taxiservicios.model.enums.EstatusSolicitud; +import com.arrebol.taxiservicios.model.enums.GenericEnumType; +import com.arrebol.taxiservicios.model.enums.PolizaEstatus; import com.crov.prase.model.prase.DetellePagoPoliza; import com.crov.prase.model.prase.PagosPoliza; import com.crov.prase.model.prase.Poliza; +import com.crov.prase.model.prase.SolicitudCancelacionPoliza; import java.io.Serializable; import java.time.LocalDate; import java.time.ZoneId; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.List; +import java.util.UUID; import javax.persistence.NoResultException; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; @@ -299,6 +305,148 @@ public class PolizaController extends ConnectionManager implements Serializable return success; } + public boolean saveSolicitudCancelacionPoliza(SolicitudCancelacionPoliza poliza, User user) { + logger.info("saveSolicitudCancelacionPoliza"); + boolean success = false; + Transaction transaction = null; + try { + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + transaction = session.beginTransaction(); + poliza.setId(UUID.randomUUID().toString()); + poliza.setCreatedBy(user); + poliza.setCreatedOn(correcciónDeHr(new Date(), -7)); + session.save(poliza); + transaction.commit(); + success = true; + } catch (HibernateException e) { + logger.error("Can not save solicitud entry", e); + rollback(transaction); + } catch (Exception e) { + logger.error("Method saveSolicitudCancelacionPoliza()", e); + rollback(transaction); + } + return success; + } + + public boolean updateSolicitudCancelacionPoliza(SolicitudCancelacionPoliza poliza, User user) { + logger.info("saveSolicitudCancelacionPoliza"); + boolean success = false; + Transaction transaction = null; + try { + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + transaction = session.beginTransaction(); + poliza.setLastUpdatedBy(user); + poliza.setLastUpdatedOn(correcciónDeHr(new Date(), -7)); + session.update(poliza); + transaction.commit(); + success = true; + } catch (HibernateException e) { + logger.error("Can not save solicitud entry", e); + rollback(transaction); + } catch (Exception e) { + logger.error("Method saveSolicitudCancelacionPoliza()", e); + rollback(transaction); + } + return success; + } + + public List findSolicitudCancelacionPolizaByLocation(Location location) { + logger.info("findSolicitudCancelacionPolizaByLocation"); + List results = new ArrayList<>(); + Transaction transaction = null; + try { + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + transaction = session.beginTransaction(); + CriteriaBuilder builder = session.getCriteriaBuilder(); + CriteriaQuery query = builder.createQuery(SolicitudCancelacionPoliza.class); + Root root = query.from(SolicitudCancelacionPoliza.class); + + Predicate predicate1 = builder.equal(root.get("estatusActivo"), GenericEnumType.ENABLED); + Predicate predicate2 = builder.equal(root.get("location"), location); + query.where(builder.and(predicate1, predicate2)); + query.orderBy(builder.asc(root.get("createdOn"))); + + results = session.createQuery(query).getResultList(); + transaction.commit(); + logger.info("Solicitudes size: " + results.size()); + } catch (HibernateException e) { + logger.error("Can not load solicitudes list ", e); + rollback(transaction); + } catch (Exception e) { + logger.error("Method findSolicitudCancelacionPolizaByLocation() ", e); + rollback(transaction); + } + return results; + } + + public List findSolicitudCancelacionPolizaByPolizaAndEstatus(Poliza poliza, EstatusSolicitud estatus) { + logger.info("findSolicitudCancelacionPolizaByLocation"); + List results = new ArrayList<>(); + Transaction transaction = null; + try { + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + transaction = session.beginTransaction(); + CriteriaBuilder builder = session.getCriteriaBuilder(); + CriteriaQuery query = builder.createQuery(SolicitudCancelacionPoliza.class); + Root root = query.from(SolicitudCancelacionPoliza.class); + + Predicate predicate1 = builder.equal(root.get("estatusActivo"), GenericEnumType.ENABLED); + Predicate predicate2 = builder.equal(root.get("poliza"), poliza); + Predicate predicate3 = builder.equal(root.get("estatusSolicitud"), estatus); + query.where(builder.and(predicate1, predicate2, predicate3)); + query.orderBy(builder.asc(root.get("createdOn"))); + + results = session.createQuery(query).getResultList(); + transaction.commit(); + logger.info("Solicitudes size: " + results.size()); + } catch (HibernateException e) { + logger.error("Can not load solicitudes list ", e); + rollback(transaction); + } catch (Exception e) { + logger.error("Method findSolicitudCancelacionPolizaByLocation() ", e); + rollback(transaction); + } + return results; + } + + public boolean aprovarCanselacion(SolicitudCancelacionPoliza solisitud, User user) { + logger.info("aprovarCanselacion()"); + Session session = null; + Transaction transaction = null; + Date fechaActual = correcciónDeHr(new Date(), -7); + try { + session = HibernateUtil.getSessionFactory().getCurrentSession(); + transaction = session.beginTransaction(); + + // Se actuliza la poliza + Poliza selectPolisa = solisitud.getPoliza(); + selectPolisa.setEstatus(PolizaEstatus.CANCELADO); + selectPolisa.setLastUpdatedBy(user); + selectPolisa.setLastUpdatedOn(fechaActual); + session.update(selectPolisa); + // Se actualiza la solicitud + solisitud.setEstatusSolicitud(EstatusSolicitud.APROBADO); + solisitud.setFechaPago(fechaActual); + solisitud.setLastUpdatedBy(user); + solisitud.setLastUpdatedOn(fechaActual); + session.update(solisitud); + + transaction.commit(); + return true; + + } catch (Exception e) { + if (transaction != null) { + transaction.rollback(); + } + logger.error("aprovarCanselacion(): ", e); + return false; + } finally { + if (session != null) { + session.close(); + } + } + } + public Poliza fillFoliosByPolizas(String abreviacionFolio) { Poliza result = null; Transaction transaction = null; @@ -376,10 +524,11 @@ public class PolizaController extends ConnectionManager implements Serializable Predicate criterio = builder.equal(root.get("active"), Boolean.TRUE); Predicate criterio2 = builder.equal(root.get("active"), true); Predicate criterio3 = builder.equal(root.get("location"), location); + Predicate criterio4 = builder.notEqual(root.get("estatus"), PolizaEstatus.CANCELADO); Predicate startDatePredicate = builder.greaterThanOrEqualTo(root.get("endDate").as(LocalDate.class), localStartDate); Predicate endDatePredicate = builder.lessThanOrEqualTo(root.get("endDate").as(LocalDate.class), localEndDate); - query.where(builder.and(criterio, criterio2, criterio3, startDatePredicate, endDatePredicate)); + query.where(builder.and(criterio, criterio2, criterio3, criterio4, startDatePredicate, endDatePredicate)); query.orderBy(builder.asc(root.get("createdOn"))); results = session.createQuery(query).getResultList(); @@ -421,6 +570,14 @@ public class PolizaController extends ConnectionManager implements Serializable return success; } + 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; + } + private static final long serialVersionUID = -8772793021819350069L; final Logger logger = LogManager.getLogger(PolizaController.class); } diff --git a/crov-prase-model/src/main/java/com/arrebol/taxiservicios/model/admin/ClosingDayDetail.java b/crov-prase-model/src/main/java/com/arrebol/taxiservicios/model/admin/ClosingDayDetail.java index 90474d7..88e2230 100644 --- a/crov-prase-model/src/main/java/com/arrebol/taxiservicios/model/admin/ClosingDayDetail.java +++ b/crov-prase-model/src/main/java/com/arrebol/taxiservicios/model/admin/ClosingDayDetail.java @@ -91,6 +91,12 @@ public class ClosingDayDetail implements Serializable { this.amount = new BigDecimal((Double) array[0] * -1); this.comments = "Devolución : " + array[3]; break; + case 5: + this.type = array[1].toString(); + this.person = new Person((String) array[2], (String) array[4]); + this.amount = new BigDecimal((Double) array[0] * -1); + this.comments = "Primas no devengadas : " + array[3]; + break; } } diff --git a/crov-prase-model/src/main/java/com/crov/prase/model/prase/SolicitudCancelacionPoliza.java b/crov-prase-model/src/main/java/com/crov/prase/model/prase/SolicitudCancelacionPoliza.java new file mode 100644 index 0000000..aaaf6a7 --- /dev/null +++ b/crov-prase-model/src/main/java/com/crov/prase/model/prase/SolicitudCancelacionPoliza.java @@ -0,0 +1,220 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package com.crov.prase.model.prase; + +import com.arrebol.taxiservicios.model.catalog.Location; +import com.arrebol.taxiservicios.model.core.User; +import com.arrebol.taxiservicios.model.enums.EstatusSolicitud; +import com.arrebol.taxiservicios.model.enums.GenericEnumType; +import java.io.Serializable; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import org.hibernate.annotations.GenericGenerator; + +/** + * + * @author Oscar + */ +@Entity +@Table(name = "solicitud_cancelacion_poliza") +public class SolicitudCancelacionPoliza implements Serializable { + + private static final long serialVersionUID = -6653037938225719593L; + + @Id + @GeneratedValue(generator = "uuid") + @GenericGenerator(name = "uuid", strategy = "uuid2") + @Column(name = "id", length = 36) + private String id; + + @Enumerated(EnumType.STRING) + @Column(name = "estatus_activo", nullable = false) + private GenericEnumType estatusActivo; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn( + name = "id_location", + referencedColumnName = "id", + nullable = false + ) + private Location location; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn( + name = "id_poliza", + referencedColumnName = "id", + nullable = false + ) + private Poliza poliza; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn( + name = "id_solicitante", + referencedColumnName = "id", + nullable = false + ) + private User solicitante; + + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "fecha_pago") + private Date fechaPago; + + @Enumerated(EnumType.STRING) + @Column(name = "estatus_solicitud", nullable = false) + private EstatusSolicitud estatusSolicitud; + + @Column(name = "monto_devolucion") + private Double montoDevolucion; + + @Column(name = "comentario") + private String comentario; + + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "created_on") + private Date createdOn; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn( + name = "created_by", + referencedColumnName = "id", + nullable = false + ) + private User createdBy; + + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "last_updated_on") + private Date lastUpdatedOn; + + @ManyToOne(fetch = FetchType.LAZY, optional = true) + @JoinColumn( + name = "last_updated_by", + referencedColumnName = "id", + nullable = true + ) + private User lastUpdatedBy; + + public SolicitudCancelacionPoliza() { + } + + public SolicitudCancelacionPoliza(String id) { + this.id = id; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public GenericEnumType getEstatusActivo() { + return estatusActivo; + } + + public void setEstatusActivo(GenericEnumType estatusActivo) { + this.estatusActivo = estatusActivo; + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public Poliza getPoliza() { + return poliza; + } + + public void setPoliza(Poliza poliza) { + this.poliza = poliza; + } + + public EstatusSolicitud getEstatusSolicitud() { + return estatusSolicitud; + } + + public void setEstatusSolicitud(EstatusSolicitud estatusSolicitud) { + this.estatusSolicitud = estatusSolicitud; + } + + public Double getMontoDevolucion() { + return montoDevolucion; + } + + public void setMontoDevolucion(Double montoDevolucion) { + this.montoDevolucion = montoDevolucion; + } + + public String getComentario() { + return comentario; + } + + public void setComentario(String comentario) { + this.comentario = comentario; + } + + public Date getCreatedOn() { + return createdOn; + } + + public void setCreatedOn(Date createdOn) { + this.createdOn = createdOn; + } + + public User getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(User createdBy) { + this.createdBy = createdBy; + } + + public Date getLastUpdatedOn() { + return lastUpdatedOn; + } + + public void setLastUpdatedOn(Date lastUpdatedOn) { + this.lastUpdatedOn = lastUpdatedOn; + } + + public User getLastUpdatedBy() { + return lastUpdatedBy; + } + + public void setLastUpdatedBy(User lastUpdatedBy) { + this.lastUpdatedBy = lastUpdatedBy; + } + + public User getSolicitante() { + return solicitante; + } + + public void setSolicitante(User solicitante) { + this.solicitante = solicitante; + } + + public Date getFechaPago() { + return fechaPago; + } + + public void setFechaPago(Date fechaPago) { + this.fechaPago = fechaPago; + } + +} diff --git a/crov-prase-model/src/main/resources/taxi.cfg.xml b/crov-prase-model/src/main/resources/taxi.cfg.xml index e20295a..5871c1c 100644 --- a/crov-prase-model/src/main/resources/taxi.cfg.xml +++ b/crov-prase-model/src/main/resources/taxi.cfg.xml @@ -94,6 +94,7 @@ + diff --git a/crov-prase-web/src/main/java/com/arrebol/taxiservicios/beans/admin/AddClosingDayBean.java b/crov-prase-web/src/main/java/com/arrebol/taxiservicios/beans/admin/AddClosingDayBean.java index 87cb895..68b8ac0 100644 --- a/crov-prase-web/src/main/java/com/arrebol/taxiservicios/beans/admin/AddClosingDayBean.java +++ b/crov-prase-web/src/main/java/com/arrebol/taxiservicios/beans/admin/AddClosingDayBean.java @@ -148,6 +148,7 @@ public class AddClosingDayBean extends TaxiGenericBean implements Serializable { setTotalTransfer(null); setTotalPagosPoliza(null); setTotalDevolucionPagosPoliza(null); + setTotalRembolsosCancelacionPoliza(null); validateMutual = null; setUsers(getController().getAllActiveUsers(getLoggedUser().getLocation())); getDetails().clear(); @@ -352,6 +353,7 @@ public class AddClosingDayBean extends TaxiGenericBean implements Serializable { setTotalExpenses(getController().findTotals(query_total_expenses, getSelectedUserId()) + getController().findTotals(query_total_transfer_send, getSelectedUserId())); setTotalPagosPoliza(getController().findTotals(query_total_poliza_prase, getSelectedUserId())); setTotalDevolucionPagosPoliza(getController().findTotals(query_total_poliza_prase_devolucion, getSelectedUserId())); + setTotalRembolsosCancelacionPoliza(getController().findTotals(query_total_rembolso_cancelacion_poliza, getSelectedUserId())); setSaveCashDailyCut(true); setDetails(getController().findClosingDayDetails(getSelectedUserId())); sumTotals(); @@ -365,8 +367,8 @@ public class AddClosingDayBean extends TaxiGenericBean implements Serializable { private void sumTotals() { try { totalToPay = getTotalSanctionsIn() + (getTotalPagosPoliza() - getTotalDevolucionPagosPoliza()); - totalToPay += -(getTotalSanctionsOut() + getTotalExpenses()); - totalExpenses = getTotalExpenses(); + totalToPay += -(getTotalSanctionsOut() + getTotalExpenses() + getTotalRembolsosCancelacionPoliza()); + totalExpenses = getTotalExpenses() + getTotalRembolsosCancelacionPoliza(); } catch (Exception e) { logger.error(e); setSaveCashDailyCut(false); @@ -413,6 +415,7 @@ public class AddClosingDayBean extends TaxiGenericBean implements Serializable { private Double totalPagosPoliza; private Double totalDevolucionPagosPoliza; + private Double totalRembolsosCancelacionPoliza; private Double validateMutual; private Double validateSale; @@ -656,6 +659,14 @@ public class AddClosingDayBean extends TaxiGenericBean implements Serializable { this.totalDevolucionPagosPoliza = totalDevolucionPagosPoliza; } + public Double getTotalRembolsosCancelacionPoliza() { + return totalRembolsosCancelacionPoliza; + } + + public void setTotalRembolsosCancelacionPoliza(Double totalRembolsosCancelacionPoliza) { + this.totalRembolsosCancelacionPoliza = totalRembolsosCancelacionPoliza; + } + final Logger logger = LogManager.getLogger(AddClosingDayBean.class); private static final long serialVersionUID = -2421681541992908524L; @@ -682,4 +693,10 @@ public class AddClosingDayBean extends TaxiGenericBean implements Serializable { + " AND tipo_pago = 'DEVOLUCION' " + " AND estatus_activo = 'ENABLED' "; + private final String query_total_rembolso_cancelacion_poliza = "SELECT IFNULL(SUM(monto_devolucion), 0) AS total_pago " + + "FROM solicitud_cancelacion_poliza WHERE DATE(fecha_pago) > " + sub_query_to_find_previously_closing_day + " " + + " AND id_solicitante = :userID " + + " AND estatus_solicitud = 'APROBADO' " + + " AND estatus_activo = 'ENABLED' "; + } diff --git a/crov-prase-web/src/main/java/com/crov/prase/prase/AprobarDevolucionPolizaBean.java b/crov-prase-web/src/main/java/com/crov/prase/prase/AprobarDevolucionPolizaBean.java new file mode 100644 index 0000000..c452257 --- /dev/null +++ b/crov-prase-web/src/main/java/com/crov/prase/prase/AprobarDevolucionPolizaBean.java @@ -0,0 +1,157 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package com.crov.prase.prase; + +import com.arrebol.taxiservicios.beans.Datatable; +import com.arrebol.taxiservicios.beans.TaxiGenericBean; +import com.arrebol.taxiservicios.controller.admin.ClosingDayServiceImpl; +import com.arrebol.taxiservicios.model.enums.EstatusSolicitud; +import com.crov.prase.controller.prase.PolizaController; +import com.crov.prase.model.prase.SolicitudCancelacionPoliza; +import java.io.Serializable; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import javax.annotation.PostConstruct; +import javax.faces.application.FacesMessage; +import javax.faces.view.ViewScoped; +import javax.inject.Named; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.primefaces.event.ReorderEvent; +import org.primefaces.event.RowEditEvent; + +/** + * + * @author Oscar + */ +@Named("aprobarDevolucionPolizaBean") +@ViewScoped +public class AprobarDevolucionPolizaBean extends TaxiGenericBean implements Serializable, Datatable { + + private static final long serialVersionUID = -136031528440947006L; + final Logger logger = LogManager.getLogger(PolizaBean.class); + + private PolizaController polizaController; + private List listSolicitudes; + private SolicitudCancelacionPoliza selectSolicitud; + + @PostConstruct + public void init() { + logger.info("init"); + try { + loadTaxiPropertyFile(); + loadBundlePropertyFile(); + + setPolizaController(new PolizaController()); + setSelectSolicitud(null); + cargarSolicitudes(); + } catch (Exception e) { + logger.error(e); + } + } + + public void cargarSolicitudes() { + logger.info("cargarSolicitudes()"); + try { + setListSolicitudes(getPolizaController().findSolicitudCancelacionPolizaByLocation(getLoggedUser().getLocation())); + } catch (Exception e) { + logger.error("cargarSolicitudes(): " + e); + showMessage(FacesMessage.SEVERITY_INFO, "Error", "Ocurrió un error al tratar de cargar la lista de solicitudes"); + } + } + + public void rechazarSolicitud() { + logger.info("rechazarSolicitud()"); + try { + getSelectSolicitud().setEstatusSolicitud(EstatusSolicitud.CANCELADO); + if (getPolizaController().updateSolicitudCancelacionPoliza(getSelectSolicitud(), getLoggedUser())) { + showMessage(FacesMessage.SEVERITY_INFO, "Solicitud rechazada", "Solicitud rechazada correctamente"); + } else { + showMessage(FacesMessage.SEVERITY_ERROR, "Error", "Ocurrió un error al tratar de rechazar la solicitud"); + } + cargarSolicitudes(); + } catch (Exception e) { + showMessage(FacesMessage.SEVERITY_FATAL, "Error", "Ocurrió un error al tratar de rechazar la solicitud"); + logger.error("rechazarSolicitud(): " + e); + } + } + + public void aprobarSolcitud() { + logger.info("aprobarSolcitud()"); + try { + if (new ClosingDayServiceImpl().existClosingDayByCreatedOn(correcciónDeHr(new Date(), -7), getSelectSolicitud().getSolicitante())) { + showMessage(FacesMessage.SEVERITY_WARN, "Error", "El usuario al que afectará la devolución ya realizó su corte del día "); + return; + } + if (getPolizaController().aprovarCanselacion(getSelectSolicitud(), getLoggedUser())) { + showMessage(FacesMessage.SEVERITY_INFO, "Solicitud aprobada", "Solicitud aprobada correctamente"); + } else { + showMessage(FacesMessage.SEVERITY_ERROR, "Error", "Ocurrió un error al tratar de aprobar la solicitud"); + } + cargarSolicitudes(); + } catch (Exception e) { + showMessage(FacesMessage.SEVERITY_FATAL, "Error", "Ocurrió un error al tratar de aprobar la solicitud"); + logger.error("aprobarSolcitud(): " + e); + } + } + + @Override + public void editRow(RowEditEvent event) { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + + @Override + public void onRowCancel(RowEditEvent event) { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + + @Override + public void onRowReorder(ReorderEvent event) { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + + @Override + public void addRow() { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + + @Override + public void deleteRow() { + throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody + } + + public List getListSolicitudes() { + return listSolicitudes; + } + + public void setListSolicitudes(List listSolicitudes) { + this.listSolicitudes = listSolicitudes; + } + + public SolicitudCancelacionPoliza getSelectSolicitud() { + return selectSolicitud; + } + + public void setSelectSolicitud(SolicitudCancelacionPoliza selectSolicitud) { + this.selectSolicitud = selectSolicitud; + } + + public PolizaController getPolizaController() { + return polizaController; + } + + public void setPolizaController(PolizaController polizaController) { + this.polizaController = polizaController; + } + + 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-web/src/main/java/com/crov/prase/prase/PagosPolizasBean.java b/crov-prase-web/src/main/java/com/crov/prase/prase/PagosPolizasBean.java index 68cc6e6..1c7f47f 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 @@ -263,7 +263,7 @@ public class PagosPolizasBean extends TaxiGenericBean implements Serializable { } public void limpiarFormDevolusionDetallePago() { - setComentarioDevolucionPago(""); + setComentario(""); } public void limpiarDetallePago() { 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 46b0d04..089b32a 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 @@ -23,6 +23,7 @@ import com.arrebol.taxiservicios.model.core.ContactNumber; import com.arrebol.taxiservicios.model.core.Person; import com.arrebol.taxiservicios.model.enums.AddressType; import com.arrebol.taxiservicios.model.enums.BasicType; +import com.arrebol.taxiservicios.model.enums.EstatusSolicitud; import com.arrebol.taxiservicios.model.enums.GenericEnumType; import com.arrebol.taxiservicios.model.enums.MetodoPago; import com.arrebol.taxiservicios.model.enums.PersonType; @@ -37,6 +38,7 @@ import com.crov.prase.model.catalog.TipoPoliza; import com.crov.prase.model.prase.DetellePagoPoliza; import com.crov.prase.model.prase.PagosPoliza; import com.crov.prase.model.prase.Poliza; +import com.crov.prase.model.prase.SolicitudCancelacionPoliza; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -252,6 +254,11 @@ public class PolizaBean extends TaxiGenericBean implements Serializable, Datatab } } + public void cargarDevolucion() { + setComentario(""); + setMontoRenbolso(getSelectedPoliza().getCantidadPagada()); + } + public void editarPoliza() { logger.info("editarPoliza()"); try { @@ -363,6 +370,38 @@ public class PolizaBean extends TaxiGenericBean implements Serializable, Datatab } } + public void solicitarCacelacionPoliza() { + logger.info("solicitarCacelacionPoliza()"); + if (getMontoRenbolso().isNaN() || getMontoRenbolso() < 0.0 || getMontoRenbolso() > getSelectedPoliza().getCantidadPagada()) { + showMessage(FacesMessage.SEVERITY_WARN, "Error", "Debe de colocar un monto mayor a 0 y menor al monto abotonado hasta el momento: $" + getSelectedPoliza().getCantidadPagada()); + return; + } + List verificarPolizas = getController().findSolicitudCancelacionPolizaByPolizaAndEstatus(getSelectedPoliza(), EstatusSolicitud.PENDIENTE); + if (!verificarPolizas.isEmpty()) { + showMessage(FacesMessage.SEVERITY_WARN, "Error", "Ya hay una solicitud de cancelación de póliza en proceso"); + return; + } + try { + SolicitudCancelacionPoliza socitud = new SolicitudCancelacionPoliza(); + socitud.setEstatusActivo(GenericEnumType.ENABLED); + socitud.setLocation(getLoggedUser().getLocation()); + socitud.setPoliza(getSelectedPoliza()); + socitud.setSolicitante(getLoggedUser()); + socitud.setFechaPago(null); + socitud.setEstatusSolicitud(EstatusSolicitud.PENDIENTE); + socitud.setMontoDevolucion(getMontoRenbolso()); + socitud.setComentario(getComentario()); + if (getController().saveSolicitudCancelacionPoliza(socitud, getLoggedUser())) { + showMessage(FacesMessage.SEVERITY_INFO, "Solicitud realizada", "Solicitud de cancelación de poliza realizada correctamente"); + } else { + showMessage(FacesMessage.SEVERITY_ERROR, "Error", "Error al generar la solicitud de cancelación de poliza"); + } + } catch (Exception e) { + logger.error("solicitarCacelacionPoliza(): " + e); + showMessage(FacesMessage.SEVERITY_FATAL, "Error", "Error al generar la solicitud de cancelación de piliza"); + } + } + private String obtenerFolio(String ab, Date fecha) { logger.info("Obteniendo último folio "); try { @@ -785,6 +824,7 @@ public class PolizaBean extends TaxiGenericBean implements Serializable, Datatab private String idCustomer; private String comentario; + private Double montoRenbolso; public int getContador() { return contador; @@ -1194,6 +1234,14 @@ public class PolizaBean extends TaxiGenericBean implements Serializable, Datatab this.metodoPago = metodoPago; } + public Double getMontoRenbolso() { + return montoRenbolso; + } + + public void setMontoRenbolso(Double montoRenbolso) { + this.montoRenbolso = montoRenbolso; + } + public void getPolizaList() { List PolizaActiva = getController().findActive(getLoggedUser().getLocation()); List PolizaDeshabilitada = getController().findDisable(getLoggedUser().getLocation()); diff --git a/crov-prase-web/src/main/resources/com/arrebol/taxiservicios/i18n/taxi.properties b/crov-prase-web/src/main/resources/com/arrebol/taxiservicios/i18n/taxi.properties index 5341214..87e97bf 100644 --- a/crov-prase-web/src/main/resources/com/arrebol/taxiservicios/i18n/taxi.properties +++ b/crov-prase-web/src/main/resources/com/arrebol/taxiservicios/i18n/taxi.properties @@ -742,4 +742,5 @@ outcome.prase.pagos=/app/prase/poliza/pagos outcome.prase.incidencias=/app/prase/incidencias/index outcome.prase.cargarIncidencia=/app/prase/incidencias/cargarIncidencia outcome.prase.polizas.aprobarDevolucionDePagos=/app/prase/poliza/aprobarDevolucionDePagos +outcome.prase.polizas.aprobarDevolucionPoliza=/app/prase/poliza/aprobarDevolucionPoliza diff --git a/crov-prase-web/src/main/webapp/WEB-INF/sidebar.xhtml b/crov-prase-web/src/main/webapp/WEB-INF/sidebar.xhtml index 9fa505e..978b646 100644 --- a/crov-prase-web/src/main/webapp/WEB-INF/sidebar.xhtml +++ b/crov-prase-web/src/main/webapp/WEB-INF/sidebar.xhtml @@ -49,6 +49,7 @@ + diff --git a/crov-prase-web/src/main/webapp/app/prase/poliza/aprobarDevolucionPoliza.xhtml b/crov-prase-web/src/main/webapp/app/prase/poliza/aprobarDevolucionPoliza.xhtml new file mode 100644 index 0000000..f03c5e0 --- /dev/null +++ b/crov-prase-web/src/main/webapp/app/prase/poliza/aprobarDevolucionPoliza.xhtml @@ -0,0 +1,85 @@ + + #{i18n.project} - Pólizas + + + + + + + + + +
  • Prase
  • +
  • /
  • +
  • Aprobar devolución de poliza
  • +
    + + +
    +
    +
    +

    Solicitudes de devolución de poliza

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + + +
    \ No newline at end of file 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 8154cb0..d27eca5 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 @@ -129,7 +129,7 @@ oncomplete="PF('dlg2').show()" update="carBrandForm:carBrandDialog" action="#{polizaBean.cargarPoliza()}" - rendered="#{data.active}"> + rendered="#{data.active and (data.estatus eq 'COTIZACION' or data.estatus eq 'PENDIENTE')}"> @@ -139,16 +139,12 @@ class="red-btn rounded-button" oncomplete="PF('eliminarPoliza').show()" update="eliminarPolizaForm:eliminarPoliza" - rendered="#{data.active}"> + action="#{polizaBean.cargarDevolucion()}" + rendered="#{data.active and (data.estatus eq 'COTIZACION' or data.estatus eq 'PENDIENTE')}"> - + - - - - - @@ -274,7 +270,7 @@ - + @@ -617,19 +613,24 @@ -
    +
    +
    + + + + +
    - - +
    - + 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 626f593..efb2f77 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 @@ -125,7 +125,7 @@ update="pagarMultipleForm" oncomplete="PF('pagarMultipleDialog').show()" action="#{pagosPolizasBean.limpiarDetallePago()}" - rendered="#{data.estatus=='PENDIENTE'}"> + rendered="#{data.estatus=='PENDIENTE' and data.estatus ne 'CANCELADO'}"> @@ -185,7 +185,9 @@ - + @@ -224,11 +226,11 @@ - + - + @@ -279,7 +281,7 @@ update="devolverDetatallePagoForm" style="margin-top: 0.5em; background-color: #E6702E" action="#{pagosPolizasBean.limpiarFormDevolusionDetallePago()}" - rendered="#{detallePago.id eq pagosPolizasBean.detallePagoDisponibleParaDevocion}"> + rendered="#{detallePago.id eq pagosPolizasBean.detallePagoDisponibleParaDevocion and detallePago.pagoPoliza.poliza.estatus ne 'CANCELADO'}">