/** * Procede con el proceso de pago con otros una vez que se localizaron los pagos con disponible * * @param c * @param pagos * @param ventas */ private void procedePagoConOtros( final Cliente c, final List<PagoM> pagos, final List<Venta> ventas) { CXCFiltros.filtrarVentasConSaldo(ventas); final PagoM origen = Selectores.seleccionarPagoM(c, pagos); if (origen != null) { final PagoConOtros pago = getPagosFactory().crearPago(origen, ventas); if (pago != null) { pago.setOrigen(origen); pago.setCliente(origen.getCliente()); final PagoConOtrosModelImpl model = new PagoConOtrosModelImpl(true, pago); final PagoConOtrosForm form = new PagoConOtrosForm(model); form.open(); if (!form.hasBeenCanceled()) { getPagosManager().salvarGrupoDePagos(pago); final List<Venta> ventasResultantes = PagosUtils.extraerVentas(pago); for (Venta vv : ventasResultantes) { getVentasManager().refresh(vv); } completar(pago); } } else { MessageUtils.showMessage("La selección de ventas no califica para el pago", "Pagos"); } } }
/** * Genera un pago para el grupo de cargos indicado * * @param c * @param cargos * @return */ public PagoM crearPago(final Cliente c, final List<NotaDeCredito> cargos) { Assert.notEmpty(cargos, "La collecion de cargos debe tener elementos"); final PagoM pago = new PagoM(); pago.setCliente(c); pago.setClave(c.getClave()); pago.setTipoDeDocumento("M"); CollectionUtils.forAllDo( cargos, new Closure() { public void execute(Object input) { NotaDeCredito cargo = (NotaDeCredito) input; Pago p = new Pago(); p.setCliente(pago.getCliente()); p.setClave(pago.getClave()); p.setPagoM(pago); p.setNota(cargo); pago.getPagos().add(p); p.setOrigen(cargo.getOrigen()); p.setTipoDocto(cargo.getTipo()); p.setNumero(cargo.getNumero()); p.setSucursal(1); } }); return pago; }
/** * Verifica si para este pago proceden notas de credito de descuento * * @param pago * @return */ public boolean procedeDescuento(PagoM pago) { boolean val = (pago.getTipoDeDocumento().equals("E") || pago.getTipoDeDocumento().equals("S")); if (!val) return val; for (Pago p : pago.getPagos()) { if (p.getVenta().getDescuento1() == 0 && p.getVenta().getBonificaciones() == 0) { return true; } } return false; }
/* * (non-Javadoc) * @see com.luxsoft.siipap.cxc.model.PagosFactory#crearPagoAutomaticoParaNotaDeCargo(java.util.List) */ public PagoM crearPagoAutomaticoParaNotaDeCargo(List<NotaDeCredito> cargos) { Assert.notEmpty(cargos, "La collecion de cargos debe tener elementos"); final PagoM pago = crearPago(cargos.get(0).getCliente(), cargos); pago.setFormaDePago(FormaDePago.D); CantidadMonetaria total = CantidadMonetaria.pesos(0); for (NotaDeCredito c : cargos) { final CantidadMonetaria importe = c.getSaldoDelCargoEnMoneda(); pago.aplicarPago(c, importe); total = total.add(importe); } pago.setImporte(total); return pago; }
/** * Completa el proceso de pago genrando descuentos y realizando pagos automaticos cuando estos * apliquen * * @param ventas */ public List<Venta> completar(final PagoM pago) { final List<Venta> ventasResultantes = PagosUtils.extraerVentas(pago); if (!ventasResultantes.isEmpty() && procedeDescuento(pago)) { List<NotaDeCredito> descuentos = aplicarNotaDeDescuento(pago.getCliente(), ventasResultantes, pago.getFecha()); /** * if(!descuentos.isEmpty()){ List<NotaDeCredito> * resNotas=Browsers.seleccionarNotasParaSuImpresion(descuentos); for(NotaDeCredito * nota:resNotas){ getNotasManager().imprimirNotaDeDescuento(nota); } } */ } if (!ventasResultantes.isEmpty() && (!pago.getTipoDeDocumento().equals("X"))) { registrarPagoAutomatico(ventasResultantes); } return ventasResultantes; }
public PagoConOtros crearPagoDeCargo(PagoM origen, List<NotaDeCredito> cargos) { Assert.notEmpty(cargos, "La collecion de cargos debe tener elementos"); Assert.isTrue(origen.getDisponible().doubleValue() > 0, "El pago origen debe tener disponible"); CXCFiltros.filtrarCargosConSaldo(cargos); if (cargos.isEmpty()) return null; final PagoConOtros pago = new PagoConOtros(); pago.setOrigen(origen); pago.setReferencia(origen.getId().toString()); pago.setCliente(origen.getCliente()); pago.setFormaDePago(FormaDePago.S); pago.setTipoDeDocumento(cargos.get(0).getTipo()); pago.setCliente(cargos.get(0).getCliente()); for (NotaDeCredito c : cargos) { Pago pp = pago.aplicarPago(c, CantidadMonetaria.pesos(0)); pp.setSucursal(1); } return pago; }
/* * (non-Javadoc) * @see com.luxsoft.siipap.cxc.pagos.IControladorDePagos#diferenciaCambiaria(com.luxsoft.siipap.cxc.domain.PagoM) */ public boolean diferenciaCambiaria(final PagoM pago) { if (pago.getTipoDeDocumento().equals("X") || pago.getTipoDeDocumento().equals("M")) { if (pago.getDisponible().doubleValue() > 0) { if (MessageUtils.showConfirmationMessage( "Pago de facturas en dolares. Es el disponible diferencia cambiaria?", "Diferencia cambiaria")) { PagoConOtros pp = getPagosFactory().crearPagoParaDiferienciaCambiaria(pago); getPagosManager().salvarGrupoDePagos(pp); MessageUtils.showMessage( "Pago a diferencia cambiaria generado:\n" + pp.toString(), "Pago autmático"); return true; } } else { diferenciaCambiaria(pago.getVentasAplicadas()); } } return false; }
/** * Genera un {@link PagoConOtros} para un grupo de ventas * * @param origen * @param ventas * @return */ public PagoConOtros crearPago(final PagoM origen, final List<Venta> ventas) { Assert.notEmpty(ventas, "La collecion de ventas debe tener elementos"); Assert.isTrue(origen.getDisponible().doubleValue() > 0, "El pago origen debe tener disponible"); CXCFiltros.filtrarVentasConSaldo(ventas); if (ventas.isEmpty()) return null; final String tipo = ventas.get(0).getTipo(); if (ventas.isEmpty()) return null; CXCFiltros.filtrarVentasParaUnTipo(ventas, tipo); final PagoConOtros pago = new PagoConOtros(); pago.setOrigen(origen); pago.setReferencia(origen.getId().toString()); pago.setCliente(origen.getCliente()); pago.setFormaDePago(FormaDePago.S); pago.setTipoDeDocumento(tipo); pago.setCliente(ventas.get(0).getCliente()); for (Venta v : ventas) { pago.aplicarPago(v, CantidadMonetaria.pesos(0)); } return pago; }
/** * Intenta eliminar un pago tipo PagoM aplicado * * @param pago * @return */ public boolean eliminarPagoM(final PagoM pago) { final String pattern = "Elminar Pago aplicado: {0}\n (Tiene {1} pagos de facturas con descuentos aplicados)"; int aplicados = 0; getPagosManager().refresh(pago); for (Pago p : pago.getPagos()) { if (p.getVenta() != null && p.getVenta().getDescuentos() != 0) aplicados++; } boolean res = MessageUtils.showConfirmationMessage( MessageFormat.format(pattern, pago.getId(), aplicados), "Eliminación de pagos"); if (res) { try { getPagosManager().eliminarPagoM(pago); return true; } catch (Exception e) { MessageUtils.showError("Error al elimiar pago", e); return false; } } return false; }
/* * (non-Javadoc) * @see com.luxsoft.siipap.cxc.model.PagosFactory#crearPagoParaDiferienciaCambiaria(java.util.List) */ public PagoM crearPagoParaDiferienciaCambiaria(final List<Venta> ventas) { Assert.notEmpty(ventas, "La collecion de ventas debe tener elementos"); if (ventas.isEmpty()) return null; final String tipo = ventas.get(0).getTipo(); final PagoM pago = new PagoM(); pago.setFormaDePago(FormaDePago.F); pago.setTipoDeDocumento(tipo); pago.setCliente(ventas.get(0).getCliente()); pago.setComentario("DIFERENCIA CAMBIARA DE MENOS"); CantidadMonetaria total = CantidadMonetaria.pesos(0); for (Venta v : ventas) { final CantidadMonetaria importe = v.getSaldoEnMonedaSinImportaroSigno(); pago.aplicarPago(v, importe); total = total.add(importe); } pago.setImporte(total); return pago; }
/* * (non-Javadoc) * @see com.luxsoft.siipap.cxc.model.PagosFactory#crearPagoParaDiferienciaCambiaria(com.luxsoft.siipap.cxc.domain.PagoM) */ public PagoConOtros crearPagoParaDiferienciaCambiaria(final PagoM origen) { Assert.notNull(origen, "El pago no debe ser nulo"); Assert.isTrue(origen.getDisponible().doubleValue() > 0); final String tipo = origen.getTipoDeDocumento(); final CantidadMonetaria total = origen.getDisponibleAsMoneda(); final PagoConOtros pago = new PagoConOtros(); pago.setOrigen(origen); pago.setReferencia(origen.getId().toString()); pago.setCliente(origen.getCliente()); pago.setTipoDeDocumento(tipo); pago.setCliente(origen.getCliente()); pago.setFormaDePago(FormaDePago.F); pago.setComentario("DIFERENCIA CAMBIARA DE MAS"); pago.setImporte(total); return pago; }
/** * Genera un PagoM para ventas con saldo menor o igual a 100 pesos * * @param ventas * @return */ public PagoM crearPagoAutomatico(List<Venta> ventas) { Assert.notEmpty(ventas, "La collecion de ventas debe tener elementos"); CXCFiltros.filtrarParaPagoAutomatico(ventas); if (ventas.isEmpty()) return null; final String tipo = ventas.get(0).getTipo(); if (ventas.isEmpty()) return null; CXCFiltros.filtrarVentasParaUnTipo(ventas, tipo); final PagoM pago = new PagoM(); pago.setFormaDePago(FormaDePago.D); pago.setTipoDeDocumento(tipo); pago.setCliente(ventas.get(0).getCliente()); CantidadMonetaria total = CantidadMonetaria.pesos(0); for (Venta v : ventas) { final CantidadMonetaria importe = v.getSaldoEnMoneda(); pago.aplicarPago(v, importe); total = total.add(importe); } pago.setImporte(total); // pago.calcularDisponible(); return pago; }