Beispiel #1
0
 private void QuitarChequeDesdePago(VentaPago pago)
 {
     foreach (int numeroOrdenCheque in pago.NumeroOrdenCheques)
     {
         Cheques.Remove(Cheques.FirstOrDefault(y => y.NumeroCheque == numeroOrdenCheque));
     }
 }
Beispiel #2
0
        public void AgregaPago(decimal monto, decimal descuento, decimal cft, decimal iva, TipoPago tipoPago, decimal porcentajeCft, string trajeta, int numeroCuotas, IEnumerable <Cheque> cheques, CuentaBancaria cuentaBancaria, bool habilitado = true)
        {
            if (VentaItems.Count == 0)
            {
                throw new NegocioException("Error al registrar el pago. No se encuentran productos registrados en la venta.");
            }
            if (EstaPaga)
            {
                throw new NegocioException("Error al registrar el pago. La venta ya cuenta con el/los pagos necesarios para ser finalizada.");
            }
            if (monto == 0 && descuento == 0 && cft == 0 && iva == 0)
            {
                throw new NegocioException("Error al registrar el pago. El monto o el descuento o el CFT o el IVA debe ser mayor a cero.");
            }

            int[] numeroOrdenCheques = cheques != null?cheques.Select(x => x.NumeroOrden).ToArray() : null;

            VentaPago pago = new VentaPago(Id, tipoPago, trajeta, numeroCuotas, porcentajeCft, numeroOrdenCheques, cuentaBancaria, monto, monto, descuento, cft, iva, habilitado);

            Cheques.AddRange(cheques);

            if (pago.MontoPago.Total < 0)
            {
                throw new NegocioException("Error al registrar el pago. El total debe ser mayor a cero.");
            }

            Pagos.Add(pago);

            Pagos = Pagos.OrderBy(x => x.TipoPago).ToList();

            ActualizarPagos();

            ActualizarTotalesPago();
        }
Beispiel #3
0
        public void CorregirPago(long idPago)
        {
            VentaPago pago = Pagos.FirstOrDefault(x => x.Id == idPago);

            pago.Corregir();


            ActualizarTotalesPago();
        }
Beispiel #4
0
        internal void QuitarPago(long id)
        {
            VentaPago pago = Pagos.FirstOrDefault(x => x.Key.Id == id).Key;

            if (pago != null)
            {
                Pagos.Remove(pago);
            }
            ActualizarPorcentajePago();
        }
Beispiel #5
0
 private void ActualizarPagos(VentaPago pago, decimal resto, decimal abonado)
 {
     if (Pagos.ContainsKey(pago))
     {
         Pagos.Remove(pago);
         pago.ActualizarMontoRestante(resto);
         Pagos.Add(pago, abonado);
     }
     else
     {
         pago.ActualizarMontoRestante(resto);
         Pagos.Add(pago, abonado);
     }
 }
Beispiel #6
0
        public void QuitarPago(long idPago)
        {
            VentaItems.ToList().ForEach(x => x.QuitarPago(idPago));

            VentaPago pago = Pagos.FirstOrDefault(x => x.Id == idPago);

            Pagos.Remove(pago);

            if (pago.TipoPago == TipoPago.Cheque)
            {
                QuitarChequeDesdePago(pago);
            }

            ActualizarTotalesPago();
        }
Beispiel #7
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);
            }
        }