-taegeta de pagos

This commit is contained in:
Brayan.Gonzalez 2025-03-18 14:55:25 -07:00
parent b70c05bb3b
commit 401eaee2e3
3 changed files with 549 additions and 98 deletions

View File

@ -15,6 +15,7 @@ import com.arrebol.apc.model.core.User;
import com.arrebol.apc.model.core.constance.LoanCfg; import com.arrebol.apc.model.core.constance.LoanCfg;
import com.arrebol.apc.model.enums.ActiveStatus; import com.arrebol.apc.model.enums.ActiveStatus;
import com.arrebol.apc.model.loan.Loan; import com.arrebol.apc.model.loan.Loan;
import com.arrebol.apc.model.views.CustomerView;
import com.arrebol.apc.model.views.LoanDetailZeroView; import com.arrebol.apc.model.views.LoanDetailZeroView;
import com.arrebol.apc.model.views.LoanFinishedView; import com.arrebol.apc.model.views.LoanFinishedView;
import com.arrebol.apc.repository.GenericEntityRepository; import com.arrebol.apc.repository.GenericEntityRepository;
@ -31,111 +32,111 @@ import org.hibernate.Transaction;
* *
* @author Oscar Armando Vargas Cardenas <oscar.vargas@arrebol.com.mx> * @author Oscar Armando Vargas Cardenas <oscar.vargas@arrebol.com.mx>
*/ */
public class CustomerController extends PeopleController implements Serializable{ public class CustomerController extends PeopleController implements Serializable {
/** public CustomerView findCustomerViewByPeopleId(String peopleId) {
* logger.debug("findCustomerViewByPeopleId");
* Searching all customers. return (CustomerView) genericEntityRepository.selectAPCEntityById(CustomerView.class, peopleId);
* }
* @param officeId
* @return
*/
public List<People> fillCustomersDatatable(String officeId) {
logger.debug("fillCustomersDatatable");
List<ModelParameter> parameters = new ArrayList<>();
parameters.add(new ModelParameter(PeopleCfg.FIELD_ACTIVE_STATUS, ActiveStatus.ENEBLED)); /**
*
* Searching all customers.
*
* @param officeId
* @return
*/
public List<People> fillCustomersDatatable(String officeId) {
logger.debug("fillCustomersDatatable");
List<ModelParameter> parameters = new ArrayList<>();
return genericEntityRepository.xmlQueryAPCEntities(People.class, PeopleCfg.QUERY_FIND_ALL_CUSTOMER, parameters); parameters.add(new ModelParameter(PeopleCfg.FIELD_ACTIVE_STATUS, ActiveStatus.ENEBLED));
}
/** return genericEntityRepository.xmlQueryAPCEntities(People.class, PeopleCfg.QUERY_FIND_ALL_CUSTOMER, parameters);
* }
* Searching all loan by customer.
*
* @param peopleId
* @return
*/
public List<Loan> findLoanByCustomer(String peopleId) {
logger.debug("findLoanByCustomer");
List<ModelParameter> parameters = new ArrayList<>();
parameters.add(new ModelParameter(LoanCfg.FIELD_CUSTOMER, new People(peopleId))); /**
*
* Searching all loan by customer.
*
* @param peopleId
* @return
*/
public List<Loan> findLoanByCustomer(String peopleId) {
logger.debug("findLoanByCustomer");
List<ModelParameter> parameters = new ArrayList<>();
return genericEntityRepository.xmlQueryAPCEntities(Loan.class, LoanCfg.QUERY_FIND_LOAN_BY_CUSTOMER, parameters); parameters.add(new ModelParameter(LoanCfg.FIELD_CUSTOMER, new People(peopleId)));
}
public List<Loan> findLoanByCustomerLimit(String peopleId) { return genericEntityRepository.xmlQueryAPCEntities(Loan.class, LoanCfg.QUERY_FIND_LOAN_BY_CUSTOMER, parameters);
logger.debug("findLoanByCustomer"); }
List<Loan> results = new ArrayList<>();
Transaction transaction = null; public List<Loan> findLoanByCustomerLimit(String peopleId) {
logger.debug("findLoanByCustomer");
List<Loan> results = new ArrayList<>();
try { Transaction transaction = null;
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
transaction = session.beginTransaction(); try {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
transaction = session.beginTransaction();
results = session.createQuery("SELECT l FROM Loan l WHERE customer = :customer AND loanStatus != 'DELETED' ORDER BY createdOn DESC")
.setParameter("customer", peopleId)
.setMaxResults(2)
.getResultList();
results = session.createQuery("SELECT l FROM Loan l WHERE customer = :customer AND loanStatus != 'DELETED' ORDER BY createdOn DESC") transaction.commit();
.setParameter("customer", peopleId)
.setMaxResults(2)
.getResultList();
transaction.commit(); logger.info("Closing daily detail's list " + results.size());
} catch (HibernateException e) {
logger.error("Can not find closing daily details list", e);
rollback(transaction);
} catch (Exception e) {
logger.error("Method findDetailsFromClosingDayID()", e);
rollback(transaction);
}
logger.info("Closing daily detail's list " + results.size()); return results;
} catch (HibernateException e) { }
logger.error("Can not find closing daily details list", e);
rollback(transaction);
} catch (Exception e) {
logger.error("Method findDetailsFromClosingDayID()", e);
rollback(transaction);
}
/**
*
* Searching all loan for juridical.
*
* @param idUser
* @return
*/
public List<Loan> findLoanJuridical(String idUser) {
logger.debug("findLoanJuridical");
List<ModelParameter> parameters = new ArrayList<>();
parameters.add(new ModelParameter(LoanCfg.FIELD_USER, new User(idUser)));
return genericEntityRepository.xmlQueryAPCEntities(Loan.class, LoanCfg.QUERY_FIND_LOAN_JURIDICAL, parameters);
}
public List<LoanDetailZeroView> findLoanZero() {
logger.debug("findLoanZero");
List<ModelParameter> parameters = new ArrayList<>();
return genericEntityRepository.xmlQueryAPCEntities(LoanDetailZeroView.class, LoanCfg.QUERY_FIND_LOAN_ZERO, parameters);
}
public List<LoanFinishedView> findLoanFinished() {
logger.debug("findLoanFinished");
List<ModelParameter> parameters = new ArrayList<>();
return genericEntityRepository.xmlQueryAPCEntities(LoanFinishedView.class, LoanCfg.QUERY_FIND_LOAN_FINISHED, parameters);
}
return results; final Logger logger = LogManager.getLogger(CustomerController.class);
} private final GenericEntityRepository genericEntityRepository;
/** public CustomerController() {
* this.genericEntityRepository = new GenericEntityRepository();
* Searching all loan for juridical. }
*
* @param idUser
* @return
*/
public List<Loan> findLoanJuridical(String idUser) {
logger.debug("findLoanJuridical");
List<ModelParameter> parameters = new ArrayList<>();
parameters.add(new ModelParameter(LoanCfg.FIELD_USER, new User(idUser)));
return genericEntityRepository.xmlQueryAPCEntities(Loan.class, LoanCfg.QUERY_FIND_LOAN_JURIDICAL, parameters);
}
public List<LoanDetailZeroView> findLoanZero( ) { protected void rollback(Transaction transaction) {
logger.debug("findLoanZero"); if (null != transaction) {
List<ModelParameter> parameters = new ArrayList<>(); transaction.rollback();
return genericEntityRepository.xmlQueryAPCEntities(LoanDetailZeroView.class, LoanCfg.QUERY_FIND_LOAN_ZERO, parameters); }
} }
public List<LoanFinishedView> findLoanFinished( ) {
logger.debug("findLoanFinished");
List<ModelParameter> parameters = new ArrayList<>();
return genericEntityRepository.xmlQueryAPCEntities(LoanFinishedView.class, LoanCfg.QUERY_FIND_LOAN_FINISHED, parameters);
}
final Logger logger = LogManager.getLogger(CustomerController.class);
private final GenericEntityRepository genericEntityRepository;
public CustomerController() {
this.genericEntityRepository = new GenericEntityRepository();
}
protected void rollback(Transaction transaction) {
if (null != transaction) {
transaction.rollback();
}
}
} }

View File

@ -14,6 +14,7 @@ import com.arrebol.apc.controller.admin.ClosingDayController;
import com.arrebol.apc.controller.admin.CustomerController; import com.arrebol.apc.controller.admin.CustomerController;
import com.arrebol.apc.controller.admin.EndorsementController; import com.arrebol.apc.controller.admin.EndorsementController;
import com.arrebol.apc.controller.admin.LoanController; import com.arrebol.apc.controller.admin.LoanController;
import com.arrebol.apc.controller.admin.PeopleController;
import com.arrebol.apc.controller.catalog.LoanTypeController; import com.arrebol.apc.controller.catalog.LoanTypeController;
import com.arrebol.apc.controller.catalog.RouteController; import com.arrebol.apc.controller.catalog.RouteController;
import com.arrebol.apc.controller.dashboard.CustomerWithoutRenovationViewService; import com.arrebol.apc.controller.dashboard.CustomerWithoutRenovationViewService;
@ -41,6 +42,7 @@ import com.arrebol.apc.model.payroll.TotalExpectedPaymentDailyByUser;
import com.arrebol.apc.model.system.logs.Bitacora; import com.arrebol.apc.model.system.logs.Bitacora;
import com.arrebol.apc.model.views.AdvanceUserDailyDetail; import com.arrebol.apc.model.views.AdvanceUserDailyDetail;
import com.arrebol.apc.model.views.AdvanceUserDailyView; import com.arrebol.apc.model.views.AdvanceUserDailyView;
import com.arrebol.apc.model.views.CustomerView;
import com.arrebol.apc.model.views.CustomerWithoutRenovationView; import com.arrebol.apc.model.views.CustomerWithoutRenovationView;
import com.arrebol.apc.model.views.LoanDetailZeroView; import com.arrebol.apc.model.views.LoanDetailZeroView;
import com.arrebol.apc.model.views.LoanFinishedView; import com.arrebol.apc.model.views.LoanFinishedView;
@ -53,6 +55,8 @@ import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -370,6 +374,413 @@ public class DashboardBean extends GenericBean implements Serializable {
showMessage(FacesMessage.SEVERITY_INFO, "Cambio de bono", "La venta empezó a contar como bono de cliente nuevo."); showMessage(FacesMessage.SEVERITY_INFO, "Cambio de bono", "La venta empezó a contar como bono de cliente nuevo.");
} }
public void cargarBoletaPagos() {
CustomerView clienteViewBoleta = customerCtrl.findCustomerViewByPeopleId(selectedLoan.getCustomer().getId());
People clienteBoleta = peopleCtrl.findPeopleById(selectedLoan.getCustomer().getId());
String pagos = "";
for (int i = 0; i < 50; i++) {
pagos = pagos
+ " <tr>\n"
+ " <td></td>\n"
+ " <td></td>\n"
+ " <td></td>\n"
+ " <td></td>\n"
+ " <td></td>\n"
+ " <td></td>\n"
+ " </tr>";
}
String html = " <style>\n"
+ " .platilla {\n"
+ " font-family: Arial, sans-serif;\n"
+ " margin: 20px auto;\n"
+ " max-width: 1200px;\n"
+ " padding: 0 15px;\n"
+ " }\n"
+ "\n"
+ " .section {\n"
+ " margin-bottom: 30px;\n"
+ " border-bottom: 1px solid #ccc;\n"
+ " padding-bottom: 15px;\n"
+ " }\n"
+ "\n"
+ " .row {\n"
+ " display: flex;\n"
+ " flex-wrap: wrap;\n"
+ " gap: 10px 30px;\n"
+ " margin-bottom: 8px;\n"
+ " }\n"
+ "\n"
+ " .field {\n"
+ " display: flex;\n"
+ " align-items: baseline;\n"
+ " min-width: 300px;\n"
+ " flex: 1 1 40%;\n"
+ " margin-bottom: 5px;\n"
+ " }\n"
+ "\n"
+ " .label {\n"
+ " font-weight: bold;\n"
+ " min-width: 160px;\n"
+ " color: #2c3e50;\n"
+ " margin-right: 10px;\n"
+ " flex-shrink: 0;\n"
+ " }\n"
+ "\n"
+ " .value {\n"
+ "\n"
+ " word-break: break-word;\n"
+ " flex-grow: 1;\n"
+ " }\n"
+ "\n"
+ " table {\n"
+ " border-collapse: collapse;\n"
+ " margin-top: 10px;\n"
+ " width: 100%;\n"
+ " }\n"
+ "\n"
+ " td,\n"
+ " th {\n"
+ " border: 1px solid #ddd;\n"
+ " padding: 8px;\n"
+ " text-align: left;\n"
+ " }\n"
+ "\n"
+ " textarea {\n"
+ " width: 100%;\n"
+ " min-height: 80px;\n"
+ " padding: 10px;\n"
+ " resize: vertical;\n"
+ " }\n"
+ "\n"
+ " @media (max-width: 768px) {\n"
+ " .field {\n"
+ " flex: 1 1 100%;\n"
+ " min-width: auto;\n"
+ " }\n"
+ "\n"
+ " .label {\n"
+ " min-width: 120px;\n"
+ " font-size: 0.9em;\n"
+ " }\n"
+ " }\n"
+ " </style>\n"
+ "</head>\n"
+ "\n"
+ "<div class=\"platilla\">\n"
+ " <h1>" + clienteBoleta.getContrato() + " - " + clienteViewBoleta.getRouteName() + "</h1>\n"
+ " <h2>CLIENTE</h2>\n"
+ "\n"
+ " <div class=\"section\">\n"
+ " <h3>Datos del Cliente</h3>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Dirección completa:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getAddressHome() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Colonia/Municipio:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getPersonalColonia() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Entre calles:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getPersonalCruzamientos() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Teléfono/Celular:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getPersonalCelular() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Ciudad:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getPersonalCiudad() + "</div>\n"
+ " </div>\n"
+ " </div>\n"
+ "\n"
+ " <div class=\"section\">\n"
+ " <h3>Características del Domicilio</h3>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Fachada:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getFachadaDecisionFachada() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">PUERTA:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getFachadaDescripcionPuerta() + "</div>\n"
+ " <div class=\"label\">VENTANA:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getFachadaDescripcionVentanas() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">FRENTE A NÚM:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getFachadaFrenteNumero() + "</div>\n"
+ " <div class=\"label\">ENTRE NÚM:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getFachadaEntreNumero1() + "</div>\n"
+ " <div class=\"label\">Y NÚM:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getFachadaEntreNumero2() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Señas especiales:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getFachadaSenasVivienda() + "</div>\n"
+ " </div>\n"
+ " </div>\n"
+ "\n"
+ " <div class=\"section\">\n"
+ " <h3>TRABAJO</h3>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Trabajo:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getTrabajo() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Domicilio:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getTrabajoDomicilio() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">ENTRE:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getTrabajoCruzamientos() + "</div>\n"
+ " <div class=\"label\">CD:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getTrabajoCiudad() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">COL:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getTrabajoColonia() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">TEL.1:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getTrabajoTelefono1() + "</div>\n"
+ " <div class=\"label\">EXT:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getTrabajoTelefonoExtra1() + "</div>\n"
+ " <div class=\"label\">TEL.2:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getTrabajoTelefono2() + "</div>\n"
+ " <div class=\"label\">EXT:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getTrabajoTelefonoExtra2() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">TURNO:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getTrabajoTurno() + "</div>\n"
+ " <div class=\"label\">DEPARTAMENTO:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getTrabajoDepartamento() + "</div>\n"
+ " </div>\n"
+ " </div>\n"
+ "\n"
+ " <div class=\"section\">\n"
+ " <h3>Avales</h3>\n"
+ " <div class=\"sub-section\">\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Aval:</div>\n"
+ " <div class=\"value\">" + selectedLoan.getEndorsement().getFullName() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">DOM:</div>\n"
+ " <div class=\"value\">" + selectedLoan.getEndorsement().getAddressHome() + "</div>\n"
+ " <div class=\"label\">COL:</div>\n"
+ " <div class=\"value\">D" + selectedLoan.getEndorsement().getPersonalColonia() + "ATO</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">CRUZA:</div>\n"
+ " <div class=\"value\">" + selectedLoan.getEndorsement().getPersonalCruzamientos() + "</div>\n"
+ " <div class=\"label\">CD:</div>\n"
+ " <div class=\"value\">" + selectedLoan.getEndorsement().getPersonalCiudad() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">TEL:</div>\n"
+ " <div class=\"value\">" + selectedLoan.getEndorsement().getPersonalCelular() + "</div>\n"
+ " <div class=\"label\">TEL. TRA:</div>\n"
+ " <div class=\"value\">" + selectedLoan.getEndorsement().getTrabajoTelefono1() + "</div>\n"
+ " <div class=\"label\">EXT:</div>\n"
+ " <div class=\"value\">" + selectedLoan.getEndorsement().getTrabajoTelefonoExtra1() + "</div>\n"
+ " </div>\n"
+ " </div>\n"
+ " </div>\n"
+ "\n"
+ " <div class=\"section\">\n"
+ " <h3>Referencias</h3>\n"
+ " <div class=\"sub-section\">\n"
+ " <h4>Referencia 1</h4>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Nombre:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia1Nombre() + "</div>\n"
+ " <div class=\"label\">PARENTESCO:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia1Parentesco() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">DOM:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia1Domicilio() + "</div>\n"
+ " <div class=\"label\">COL:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia1Colonia() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">CRUZA:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia1Cruzamientos() + "</div>\n"
+ " <div class=\"label\">CD:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia1Ciudad() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">TEL:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia1TelefonoParticular() + "</div>\n"
+ " <div class=\"label\">CEL:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia1CelularParticular() + "</div>\n"
+ " <div class=\"label\">TEL. TRA:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia1TelefonoTrabajo() + "</div>\n"
+ " <div class=\"label\">EXT:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia1ExtraTelefonoTrabajo() + "</div>\n"
+ " </div>\n"
+ " </div>\n"
+ "\n"
+ " <div class=\"sub-section\">\n"
+ " <h4>Referencia 2</h4>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Nombre:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia2Nombre() + "</div>\n"
+ " <div class=\"label\">PARENTESCO:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia2Parentesco() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">DOM:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia2Domicilio() + "</div>\n"
+ " <div class=\"label\">COL:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia2Colonia() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">CRUZA:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia2Cruzamientos() + "</div>\n"
+ " <div class=\"label\">CD:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia2Ciudad() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">TEL:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia2TelefonoParticular() + "</div>\n"
+ " <div class=\"label\">CEL:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia2CelularParticular() + "</div>\n"
+ " <div class=\"label\">TEL. TRA:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia2TelefonoTrabajo() + "</div>\n"
+ " <div class=\"label\">EXT:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getReferencia2ExtraTelefonoTrabajo() + "</div>\n"
+ " </div>\n"
+ " </div>\n"
+ " </div>\n"
+ "\n"
+ " <div class=\"section\">\n"
+ " <h3>Datos del Crédito</h3>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">COBRAR EN:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getDatosCreditoCobrarEn() + "</div>\n"
+ " <div class=\"label\">ENTREGADO EN:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getDatosCreditoEntradaEn() + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Fecha de compra:</div>\n"
+ " <div class=\"value\">" + formatDate(clienteBoleta.getDatosCreditoFechaCompra()) + "</div>\n"
+ " <div class=\"label\">Primer pago:</div>\n"
+ " <div class=\"value\">" + formatDate(clienteBoleta.getDatosCreditoPrimerPago()) + "</div>\n"
+ " <div class=\"label\">Vence:</div>\n"
+ " <div class=\"value\">" + calcularUltimoPago(clienteBoleta.getDatosCreditoPrimerPago(), clienteBoleta.getDatosCreditoNumeroPagos() == null ? 0 : clienteBoleta.getDatosCreditoNumeroPagos(), clienteBoleta.getDatosCreditoFormaPago() == null ? null : clienteBoleta.getDatosCreditoFormaPago().toString()) + "</div>\n"
+ " </div>\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Vendedor:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getDatosCreditoVendedor() + "</div>\n"
+ " <div class=\"label\">Forma de pago:</div>\n"
+ " <div class=\"value\">" + clienteBoleta.getDatosCreditoFormaPago() + "</div>\n"
+ " </div>\n"
+ "\n"
+ " <div class=\"row\">\n"
+ " <div class=\"label\">Investigación crediticia:</div>\n"
+ " <div class=\"value\"></div>\n"
+ " <div class=\"label\">Monto por pago:</div>\n"
+ " <div class=\"value\">" + selectedLoan.getLoanType().getPaymentDaily() + "</div>\n"
+ " </div>\n"
+ " </div>\n"
+ "\n"
+ " <div class=\"section\">\n"
+ " <h4>Observación de pago:</h4>\n"
+ " <div class=\"row\">\n"
+ " <textarea style=\"width:100%; height:70px; padding:10px\" disabled=\"true\"></textarea>\n"
+ " </div>\n"
+ " </div>\n"
+ "\n"
+ " <h3>Compra</h3>\n"
+ " <table>\n"
+ " <tr>\n"
+ " <th>Cant</th>\n"
+ " <th>Artículo</th>\n"
+ " <th>Precio</th>\n"
+ " <th>Importe</th>\n"
+ " </tr>\n"
+ " <tr>\n"
+ " <td>1</td>\n"
+ " <td>" + selectedLoan.getLoanType().getLoanTypeName() + "</td>\n"
+ " <td>" + selectedLoan.getLoanType().getPayment() + "</td>\n"
+ " <td>" + selectedLoan.getLoanType().getPayment() + "</td>\n"
+ " </tr>\n"
+ " </table>\n"
+ "\n"
+ " <div class=\"row\" style=\"margin-top:15px; font-size:1.1em\">\n"
+ " <div class=\"label\">Total de la compra:</div>\n"
+ " <div class=\"value\">" + selectedLoan.getLoanType().getPaymentTotal() + "</div>\n"
+ " </div>\n"
+ "\n"
+ " <div class=\"section\">\n"
+ " <h3>Apuntes del Cobrador</h3>\n"
+ " <textarea style=\"width:100%; height:70px; padding:10px\" disabled=\"true\"></textarea>\n"
+ " </div>\n"
+ "\n"
+ " <div class=\"section\">\n"
+ " <h3>PAGOS</h3>\n"
+ " <table>\n"
+ " <tr>\n"
+ " <th>FECHA</th>\n"
+ " <th>FOLIO</th>\n"
+ " <th>CONCEPTO</th>\n"
+ " <th>CARGOS</th>\n"
+ " <th>ABONOS</th>\n"
+ " <th>SALDO</th>\n"
+ " </tr>\n"
+ pagos
+ " </table>\n"
+ " </div>"
+ "</div>";
html = html.replaceAll("\\bnull\\b", " ");
setPlantillaHTML(html);
}
public static String formatDate(Date date) {
if (date == null) {
return null; // Evita NullPointerException
}
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); // Puedes cambiar el formato
return formatter.format(date);
}
public void main(String[] args) {
Date today = new Date();
System.out.println("Fecha formateada: " + formatDate(today));
}
public static String calcularUltimoPago(Date fechaInicio, int numeroPagos, String periodoPago) {
if (fechaInicio == null || numeroPagos <= 0 || periodoPago == null) {
return "NA";
}
LocalDate fechaInicioLocal = fechaInicio.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int diasAIncrementar;
switch (periodoPago.toUpperCase()) {
case "SEMANAL":
diasAIncrementar = 7;
break;
case "QUINCENAL":
diasAIncrementar = 15;
break;
case "MENSUAL":
LocalDate fechaUltimoPagoMes = fechaInicioLocal.plusMonths(numeroPagos - 1);
return formatDate(fechaUltimoPagoMes);
default:
throw new IllegalArgumentException("Periodo de pago no válido");
}
LocalDate fechaUltimoPago = fechaInicioLocal.plusDays(diasAIncrementar * (numeroPagos - 1));
return formatDate(fechaUltimoPago);
}
private static String formatDate(LocalDate date) {
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
return formatter.format(Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()));
}
public void removeBonusNewCustomer() { public void removeBonusNewCustomer() {
loanCtrl.updateBonusNewCustomer(ActiveStatus.DISABLED, selectedLoan.getId(), getLoggedUser().getUser().getId()); loanCtrl.updateBonusNewCustomer(ActiveStatus.DISABLED, selectedLoan.getId(), getLoggedUser().getUser().getId());
loan.clear(); loan.clear();
@ -1264,6 +1675,22 @@ public class DashboardBean extends GenericBean implements Serializable {
this.lastStableSmallBox = lastStableSmallBox; this.lastStableSmallBox = lastStableSmallBox;
} }
public String getPlantillaHTML() {
return plantillaHTML;
}
public void setPlantillaHTML(String plantillaHTML) {
this.plantillaHTML = plantillaHTML;
}
public PeopleController getPeopleCtrl() {
return peopleCtrl;
}
public void setPeopleCtrl(PeopleController peopleCtrl) {
this.peopleCtrl = peopleCtrl;
}
@Inject @Inject
private CustomerWithoutRenovationViewService customerWithoutRenovationViewService; private CustomerWithoutRenovationViewService customerWithoutRenovationViewService;
@ -1276,6 +1703,7 @@ public class DashboardBean extends GenericBean implements Serializable {
private LoanTypeController loanTypeCtrl; private LoanTypeController loanTypeCtrl;
private RouteController routeCtrl; private RouteController routeCtrl;
private BitacoraController bitacoraCtrl; private BitacoraController bitacoraCtrl;
private PeopleController peopleCtrl;
private BigDecimal totalAmountDaily; private BigDecimal totalAmountDaily;
private BigDecimal totalTransferSenderDaily; private BigDecimal totalTransferSenderDaily;
@ -1341,6 +1769,8 @@ public class DashboardBean extends GenericBean implements Serializable {
private Date lastStableSmallBox; private Date lastStableSmallBox;
private boolean stableSmallBoxToday; private boolean stableSmallBoxToday;
private String plantillaHTML;
@Inject @Inject
private CustomerService customerService; private CustomerService customerService;
@ -1357,6 +1787,7 @@ public class DashboardBean extends GenericBean implements Serializable {
loanTypeCtrl = new LoanTypeController(); loanTypeCtrl = new LoanTypeController();
routeCtrl = new RouteController(); routeCtrl = new RouteController();
bitacoraCtrl = new BitacoraController(); bitacoraCtrl = new BitacoraController();
peopleCtrl = new PeopleController();
commentsBitacora = ""; commentsBitacora = "";
setGenericValidateController(new GenericValidationController()); setGenericValidateController(new GenericValidationController());
setLastStableSmallBox(getGenericValidateController().lastStableSmallBoxByDate(getLoggedUser().getUser())); setLastStableSmallBox(getGenericValidateController().lastStableSmallBoxByDate(getLoggedUser().getUser()));

View File

@ -121,6 +121,7 @@
</p:dataTable> </p:dataTable>
<p:contextMenu for="dtLoan"> <p:contextMenu for="dtLoan">
<p:menuitem value="Imprimí tarjeta" icon="ui-icon-people" oncomplete="PF('tarjetaDialog').show();" update="tarjetaForm" actionListener="#{dashboardManager.cargarBoletaPagos()}"/>
<p:menuitem value="Cambiar propietario" icon="ui-icon-people" onclick="PF('dlg2').show();" update="dtLoan,:dashboardResumen:msgs" /> <p:menuitem value="Cambiar propietario" icon="ui-icon-people" onclick="PF('dlg2').show();" update="dtLoan,:dashboardResumen:msgs" />
<p:menuitem rendered="#{dashboardManager.getAction()}" value="Agregar abono" icon="ui-icon-check" onclick="PF('dlg3').show();" update="dtLoan,:dashboardResumen:msgs"/> <p:menuitem rendered="#{dashboardManager.getAction()}" value="Agregar abono" icon="ui-icon-check" onclick="PF('dlg3').show();" update="dtLoan,:dashboardResumen:msgs"/>
<p:menuitem value="Agregar depósito" icon="ui-icon-check" onclick="PF('dlg7').show();" update="dtLoan,:dashboardResumen:msgs"/> <p:menuitem value="Agregar depósito" icon="ui-icon-check" onclick="PF('dlg7').show();" update="dtLoan,:dashboardResumen:msgs"/>
@ -439,6 +440,24 @@
</p:dialog> </p:dialog>
</h:form> </h:form>
<h:form id="tarjetaForm">
<p:growl id="msgsDialogtarjeta" showDetail="true"/>
<p:dialog widgetVar="tarjetaDialog" id="tarjetaDialog" header="" modal="true" responsive="true" showEffect="clip" hideEffect="clip" style="max-height: 45em; overflow-y: scroll;" width="90em" >
<p:outputPanel id="pnlPrintMultiple" class="no-page-break scrollable-panel">
<h:outputText value="#{dashboardManager.plantillaHTML}" escape="false" />
</p:outputPanel>
<f:facet name="footer">
<h:panelGroup id="botones" >
<p:commandButton value="Imprimir" title="Imprimir" icon="ui-icon-print">
<p:printer target="pnlPrintMultiple" />
</p:commandButton>
</h:panelGroup>
</f:facet>
</p:dialog>
</h:form>
</div> </div>
</div> </div>
</ui:define> </ui:define>