예제 #1
0
  /**
   * 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");
      }
    }
  }
예제 #2
0
  /**
   * 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;
  }
예제 #3
0
 /**
  * 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;
 }
예제 #4
0
  /*
   * (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;
  }
예제 #5
0
 /**
  * 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;
 }
예제 #6
0
 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;
 }
예제 #7
0
 /*
  * (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;
 }
예제 #8
0
 /**
  * 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;
 }
예제 #9
0
 /**
  * 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;
 }
예제 #10
0
 /*
  * (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;
 }
예제 #11
0
  /*
   * (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;
  }
예제 #12
0
 /**
  * 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;
 }