/**
   * 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;
  }
 /*
  * (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;
 }
 /**
  * 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;
 }