Exemplo n.º 1
0
        public Pago(TipoPago tipoPago, string tarjeta, int numeroCuotas, decimal porcentajeRecargo, int[] numeroOrdenCheques, CuentaBancaria cuentaBancaria, decimal monto, decimal montoRestante, decimal descuento, decimal cft, decimal iva, bool habilitado = true) : base(true)
        {
            if ((tipoPago == TipoPago.TarjetaCrédito || tipoPago == TipoPago.TarjetaDébito) && string.IsNullOrEmpty(tarjeta))
            {
                throw new NegocioException("Error al crear el pago. La trajeta no puede ser vacia.");
            }

            if (tipoPago == TipoPago.TarjetaCrédito && numeroCuotas == 0)
            {
                throw new NegocioException("Error al crear el pago. La cantidad de cuotas debe ser mayor a cero.");
            }

            TipoPago           = tipoPago;
            PorcentajeRecargo  = porcentajeRecargo;
            MontoPago          = new MontoPago(monto, descuento, cft, iva);
            Tarjeta            = tarjeta;
            NumeroCuotas       = numeroCuotas;
            NumeroOrdenCheques = numeroOrdenCheques;
            FechaEdicion       = DateTime.Now;
            MontoRestante      = montoRestante;
            Habilitado         = habilitado;

            if (tipoPago == TipoPago.Deposito)
            {
                IdCuentaBancaria = cuentaBancaria.Id;
                CuentaBancaria   = cuentaBancaria;
            }
        }
Exemplo n.º 2
0
 public PagoDeposito(MontoPago montoPago) : base(montoPago)
 {
     if (montoPago.CFT > 0)
     {
         throw new NegocioException("Error al crear el deposito. El CFT debe ser cero.");
     }
 }
Exemplo n.º 3
0
 internal void ActualizarDescuento(decimal descuento)
 {
     if (Habilitado)
     {
         MontoPago = new MontoPago(MontoPago.Monto, descuento, MontoPago.CFT, MontoPago.IVA);
     }
 }
Exemplo n.º 4
0
        public MontoPago ObtenerMontoPagoDesdeSubtotal(decimal montoSubtotal, decimal porcentajeCft, decimal porcentajeFacturacion, TipoCliente tipoCliente, TipoPago formaDePago)
        {
            if (EstaPaga)
            {
                return(new MontoPago(0, 0, 0, 0));
            }

            MontoPago montoPagoPendiente = new MontoPago(0, 0, 0, 0);

            foreach (VentaItem ventaItem in VentaItems)
            {
                MontoProducto montoProductoPendientePago = ventaItem.PendientePago();

                if (montoSubtotal >= montoProductoPendientePago.Valor)
                {
                    montoPagoPendiente += ventaItem.ObtenerMontoPagoPendiente(porcentajeCft, porcentajeFacturacion, tipoCliente, formaDePago);
                    montoSubtotal      -= montoProductoPendientePago.Valor;
                }
                else
                {
                    montoPagoPendiente += ventaItem.ObtenerMontoPago(montoSubtotal, porcentajeCft, porcentajeFacturacion, tipoCliente, formaDePago);
                    montoSubtotal       = 0;
                    break;
                }
            }

            return(montoPagoPendiente);
        }
Exemplo n.º 5
0
 public PagoCheque(MontoPago montoPago) : base(montoPago)
 {
     if (montoPago.CFT > 0)
     {
         throw new NegocioException("Error al crear el pago en cheque. El CFT debe ser cero.");
     }
 }
Exemplo n.º 6
0
 public PagoEfectivo(MontoPago montoPago) : base(montoPago)
 {
     if (montoPago.CFT > 0)
     {
         throw new NegocioException("Error al crear el pago en efectivo. El CFT debe ser cero.");
     }
 }
Exemplo n.º 7
0
        public Pago(MontoPago montoPago)
        {
            if (montoPago == null)
            {
                throw new NegocioException("Error al crear el pago. El monto no puede ser nulo.");
            }

            MontoPago = montoPago;
        }
Exemplo n.º 8
0
 public void ActualizarTotalesPago()
 {
     if (Pagos.Count == 0)
     {
         PagoTotal = new MontoPago(0, 0, 0, 0);
     }
     else
     {
         PagoTotal = Pagos.Select(x => x.MontoPago).Aggregate((x, y) => x + y);
     }
 }
Exemplo n.º 9
0
        internal IEnumerable <VentaPago> ObtenerPagosDeProducto(decimal porcentajeFacturacion, TipoCliente tipoCliente)
        {
            List <VentaPago> pagos = new List <VentaPago>();

            foreach (KeyValuePair <VentaPago, decimal> montoPorPago in this.Pagos)
            {
                MontoPago montoPago = ObtenerMontoPago(montoPorPago.Value, montoPorPago.Key.PorcentajeRecargo, porcentajeFacturacion, tipoCliente, montoPorPago.Key.TipoPago);
                pagos.Add(new VentaPago(montoPorPago.Key.IdVenta, montoPorPago.Key.TipoPago, montoPorPago.Key.Tarjeta, montoPorPago.Key.NumeroCuotas, montoPorPago.Key.PorcentajeRecargo, montoPorPago.Key.NumeroOrdenCheques, montoPorPago.Key.CuentaBancaria, montoPago.Monto, 0, montoPago.Descuento, montoPago.CFT, montoPago.IVA));
            }

            return(pagos);
        }
Exemplo n.º 10
0
 public Venta(int idSucursal) : base(true)
 {
     IdSucursal            = idSucursal;
     VentaItems            = new List <VentaItem>();
     Pagos                 = new List <VentaPago>();
     Cheques               = new List <Cheque>();
     MontoTotal            = new MontoProducto(0, 0);
     PagoTotal             = new MontoPago(0, 0, 0, 0);
     Comisiones            = new List <Comision>();
     Fecha                 = DateTime.Now;
     FechaEdicion          = DateTime.Now;
     PorcentajeFacturacion = 1;
 }
Exemplo n.º 11
0
        public PagoDebito(Banco banco, MontoPago montoPago) : base(montoPago)
        {
            if (montoPago.CFT > 0)
            {
                throw new NegocioException("Error al crear el pago en debito. El CFT debe ser cero.");
            }

            if (banco == null)
            {
                throw new NegocioException("Error al crear el pago en debito. El banco no puede ser nulo.");
            }

            Banco = banco;
        }
Exemplo n.º 12
0
        public PagoCredito(Banco banco, int cantidadCuotas, MontoPago montoPago) : base(montoPago)
        {
            if (banco == null)
            {
                throw new NegocioException("Error al crear el pago en crédito. El banco no puede ser nulo.");
            }

            if (cantidadCuotas > 0)
            {
                throw new NegocioException("Error al crear el pago en crédito. La cantidad de cuotas debe ser mayor a cero.");
            }

            Banco          = banco;
            CantidadCuotas = cantidadCuotas;
        }
Exemplo n.º 13
0
        internal decimal AgregarPago(VentaPago pago, decimal porcentajeRecargo, decimal porcentajeFacturacion, TipoCliente tipoCliente)
        {
            decimal pendientePago = 0;

            if (Total.Valor == 0)
            {
                ActualizarPagos(pago, pago.MontoRestante, 0);
                return(pago.MontoRestante);
            }

            if (PorcentajePago == 0)
            {
                pendientePago = Total.Valor;
            }
            else
            {
                pendientePago = PendientePago().Valor;
            }

            if (pendientePago > pago.MontoRestante)
            {
                MontoPago montoPago = ObtenerMontoPago(pago.MontoRestante, porcentajeRecargo, porcentajeFacturacion, tipoCliente, pago.TipoPago);
                pago.ActualizarIva(pago.MontoPago.IVA + montoPago.IVA);
                pago.ActualizarDescuento(pago.MontoPago.Descuento + montoPago.Descuento);
                PorcentajePago += Math.Round(pago.MontoRestante / Total.Valor, 4, MidpointRounding.AwayFromZero);
                ActualizarPagos(pago, 0, pago.MontoRestante);
                return(0);
            }
            else
            {
                MontoPago montoPago = ObtenerMontoPago(pendientePago, porcentajeRecargo, porcentajeFacturacion, tipoCliente, pago.TipoPago);
                pago.ActualizarIva(pago.MontoPago.IVA + montoPago.IVA);
                pago.ActualizarDescuento(pago.MontoPago.Descuento + montoPago.Descuento);
                PorcentajePago += Math.Round(pendientePago / Total.Valor, 4, MidpointRounding.AwayFromZero);
                ActualizarPagos(pago, pago.MontoRestante - pendientePago, pendientePago);
                return(pago.MontoRestante);
            }
        }
Exemplo n.º 14
0
 internal void ActualizarIva(decimal iva)
 {
     MontoPago = new MontoPago(MontoPago.Monto, MontoPago.Descuento, MontoPago.CFT, iva);
 }
Exemplo n.º 15
0
 internal void Corregir()
 {
     MontoPago = new MontoPago(MontoPago.Monto - MontoRestante, MontoPago.Descuento, MontoPago.CFT, MontoPago.IVA);
     ActualizarMontoRestante(0);
 }