예제 #1
0
        public void Pagar(long cajaId, long usuarioId, long clienteId, decimal monto, string clienteApyNom)
        {
            try
            {
                var fechaActual    = DateTime.Now;
                var nroComprobante = _contadorServicio.ObtenerSiguienteNumeroComprobante(TipoComprobante.CuentaCorriente);

                var movimiento = new MovimientoCuentaCorriente
                {
                    CajaId                  = cajaId,
                    ClienteId               = clienteId,
                    Fecha                   = fechaActual,
                    Descripcion             = $"Pago Cta Cte del cliente {clienteApyNom} - Nro:{nroComprobante} - Monto: {monto.ToString("C")}",
                    TipoMovimiento          = TipoMovimiento.Ingreso,
                    UsuarioId               = usuarioId,
                    Monto                   = monto,
                    EstaEliminado           = false,
                    cuentaCorrienteClientes = new List <CuentaCorrienteCliente>()
                };



                var nuevoComprobante = new CuentaCorrienteCliente
                {
                    ClienteId     = clienteId,
                    Descuento     = 0,
                    SubTotal      = monto,
                    Total         = monto,
                    Fecha         = fechaActual,
                    Iva105        = 0,
                    Iva21         = 0,
                    Numero        = nroComprobante,
                    EstaEliminado = false,
                    UsuarioId     = usuarioId,
                };

                movimiento.cuentaCorrienteClientes.Add(nuevoComprobante);

                _unidadDeTrabajo.CuentaCorrienteRepositorio.Insertar(movimiento);
                _unidadDeTrabajo.Commit();
            }
            catch (Exception e)
            {
                throw new Exception("Ocurrió un error al pagar la Cuenta Corriente");
            }
        }
        public override long Insertar(ComprobanteDto comprobante)
        {
            using (var tran = new TransactionScope())
            {
                try
                {
                    int numeroComprobante = 0;

                    var cajaActual = _unidadDeTrabajo.CajaRepositorio.Obtener
                                         (x => x.UsuarioAperturaId == comprobante.UsuarioId &&
                                         x.UsuarioCierreId == null).FirstOrDefault();

                    if (cajaActual == null)
                    {
                        throw new Exception("Ocurrio un error al obtener la Caja");
                    }

                    var ctaCteCompDto = (CtaCteComprobanteDto)comprobante;

                    CuentaCorrienteCliente _CtaCteNueva = new CuentaCorrienteCliente();

                    numeroComprobante = _contadorServicio.ObtenerSiguienteNumeroComprobante(comprobante.TipoComprobante);

                    _CtaCteNueva = new CuentaCorrienteCliente
                    {
                        ClienteId           = ctaCteCompDto.ClienteId,
                        Descuento           = ctaCteCompDto.Descuento,
                        EmpleadoId          = ctaCteCompDto.EmpleadoId,
                        Fecha               = ctaCteCompDto.Fecha,
                        Iva105              = ctaCteCompDto.Iva105,
                        Iva21               = ctaCteCompDto.Iva21,
                        Numero              = numeroComprobante,
                        SubTotal            = ctaCteCompDto.SubTotal,
                        Total               = ctaCteCompDto.Total,
                        TipoComprobante     = ctaCteCompDto.TipoComprobante,
                        UsuarioId           = ctaCteCompDto.UsuarioId,
                        DetalleComprobantes = new List <DetalleComprobante>(),
                        Movimientos         = new List <Movimiento>(),
                        FormaPagos          = new List <FormaPago>(),
                        EstaEliminado       = false
                    };



                    _CtaCteNueva.Movimientos.Add(new Movimiento
                    {
                        ComprobanteId  = _CtaCteNueva.Id,
                        CajaId         = cajaActual.Id,
                        Fecha          = ctaCteCompDto.Fecha,
                        Monto          = ctaCteCompDto.Total,
                        UsuarioId      = ctaCteCompDto.UsuarioId,
                        TipoMovimiento = TipoMovimiento.Ingreso,
                        Descripcion    = $"Fa- { ctaCteCompDto.TipoComprobante.ToString() }-Nro { numeroComprobante }",
                        EstaEliminado  = false
                    });

                    foreach (var fp in ctaCteCompDto.FormasDePagos)
                    {
                        var fpCtaCTe = (FormaPagoCtaCteDto)fp;
                        _CtaCteNueva.FormaPagos.Add(new FormaPagoCtaCte
                        {
                            Monto         = fpCtaCTe.Monto,
                            TipoPago      = TipoPago.CtaCte,
                            ClienteId     = fpCtaCTe.ClienteId,
                            EstaEliminado = false
                        });

                        _CtaCteNueva.Movimientos.Add(new MovimientoCuentaCorriente
                        {
                            ComprobanteId  = _CtaCteNueva.Id,
                            CajaId         = cajaActual.Id,
                            Fecha          = ctaCteCompDto.Fecha,
                            Monto          = fpCtaCTe.Monto,
                            UsuarioId      = ctaCteCompDto.UsuarioId,
                            TipoMovimiento =
                                TipoMovimiento.Egreso,
                            Descripcion   = $"Fa- { ctaCteCompDto.TipoComprobante.ToString() }-Nro { numeroComprobante }",
                            ClienteId     = fpCtaCTe.ClienteId,
                            EstaEliminado = false
                        });
                        cajaActual.TotalEntradaCtaCte +=
                            fpCtaCTe.Monto;
                        cajaActual.DetalleCajas.Add(new DetalleCaja
                        {
                            Monto    = fpCtaCTe.Monto,
                            TipoPago = TipoPago.CtaCte
                        });


                        _unidadDeTrabajo.CajaRepositorio.Modificar(cajaActual);
                    }

                    _unidadDeTrabajo.FacturaRepositorio.Modificar(_CtaCteNueva);

                    _unidadDeTrabajo.Commit();
                    tran.Complete();
                    return(0);
                }
                catch (DbEntityValidationException ex)
                {
                    var error = ex.EntityValidationErrors.SelectMany(v => v.ValidationErrors)
                                .Aggregate(string.Empty,
                                           (current, validationError) =>
                                           current +
                                           ($"Property: {validationError.PropertyName} Error: {validationError.ErrorMessage}. {Environment.NewLine}"
                                           ));

                    tran.Dispose();
                    throw new Exception($"Ocurrio un error grave al grabar la Factura. Error: {error}");
                }
            }
        }
예제 #3
0
        public static ICuentaCorrienteCliente GetCuentaCorrienteCliente()
        {
            CuentaCorrienteCliente cuentaCorrienteCliente = new CuentaCorrienteCliente();

            return((ICuentaCorrienteCliente)cuentaCorrienteCliente);
        }