public ServicioVentas(PizzeriaDbContext context, IRepositorioVentas repositorio,
                       IRepositorioItemVentas repositorioItems, IUnitOfWork unitOfWork)
 {
     _context          = context;
     _repositorio      = repositorio;
     _repositorioItems = repositorioItems;
     _unitOfWork       = unitOfWork;
     _mapper           = Mapeador.Mapeador.CrearMapper();
 }
        public void Guardar(Venta venta)
        {
            conexion = new ConexionBd();
            SqlTransaction transaction = null;

            try
            {
                SqlConnection cn = conexion.AbrirConexion();
                transaction              = cn.BeginTransaction();
                repositorioVentas        = new RepositorioVentas(cn, transaction);
                repositorioDetalleVentas = new RepositorioDetalleVentas(cn, transaction);
                repositorioProductos     = new RepositorioProductos(cn, transaction);
                repositorioKardex        = new RepositorioKardex(transaction, cn);

                repositorioVentas.Guardar(venta);
                foreach (var detalleVenta in venta.DetalleVentas)
                {
                    detalleVenta.Venta = venta;
                    Kardex kardex = repositorioKardex.GetUltimoKardex(detalleVenta.Producto);
                    if (kardex == null)
                    {
                        kardex            = new Kardex();
                        kardex.Producto   = detalleVenta.Producto;
                        kardex.Fecha      = venta.Fecha;
                        kardex.Movimiento = $"Venta numero {venta.VentaId}";
                        kardex.Entrada    = 0;
                        kardex.Salida     = detalleVenta.Cantidad;
                        kardex.Saldo      = detalleVenta.Cantidad;
                    }
                    else
                    {
                        kardex.Fecha      = venta.Fecha;
                        kardex.Movimiento = $"Venta numero {venta.VentaId}";
                        kardex.Entrada    = 0;
                        kardex.Salida     = detalleVenta.Cantidad;
                        kardex.Saldo     -= detalleVenta.Cantidad;
                    }
                    repositorioKardex.Guardar(kardex);
                    detalleVenta.Kardex = kardex;
                    repositorioDetalleVentas.Guardar(detalleVenta);
                    repositorioProductos.ActualizarStock(detalleVenta.Producto, -detalleVenta.Cantidad);
                }
                transaction.Commit();
            }
            catch (Exception e)
            {
                transaction.Rollback();
                throw new Exception(e.Message);
            }
        }
 public void FacturarVenta(int ventaId)
 {
     try
     {
         conexion          = new ConexionBd();
         repositorioVentas = new RepositorioVentas(conexion.AbrirConexion());
         repositorioVentas.FacturarVenta(ventaId);
         conexion.CerrarConexion();
     }
     catch (Exception e)
     {
         throw new Exception(e.Message);
     }
 }
 public decimal GetTotalVenta(int ventaId)
 {
     try
     {
         conexion          = new ConexionBd();
         repositorioVentas = new RepositorioVentas(conexion.AbrirConexion());
         decimal total = repositorioVentas.GetTotalVenta(ventaId);
         conexion.CerrarConexion();
         return(total);
     }
     catch (Exception e)
     {
         throw new Exception(e.Message);
     }
 }
 public List <VentaListDto> GetLista(int?clienteId, DateTime fechaInicial, DateTime fechaFinal)
 {
     try
     {
         _conexionBd         = new ConexionBd();
         _repositorioDetalle = new RepositorioDetalleVentas(_conexionBd.AbrirConexion());
         _repositorio        = new RepositorioVentas(_conexionBd.AbrirConexion(), _repositorioDetalle);
         var lista = _repositorio.GetLista(clienteId, fechaInicial, fechaFinal);
         _conexionBd.CerrarConexion();
         return(lista);
     }
     catch (Exception e)
     {
         throw new Exception(e.Message);
     }
 }
        public void Guardar(VentaEditDto ventaDto)
        {
            #region Pasar de Dto a Entidad

            var listaDetalles = new List <DetalleVenta>();
            foreach (var itemDto in ventaDto.DetalleVentas)
            {
                var item = new DetalleVenta()
                {
                    DetalleVentaId = itemDto.DetalleVentaId,
                    Producto       = new Producto
                    {
                        ProductoId     = itemDto.Producto.ProductoId,
                        NombreProducto = itemDto.Producto.NombreProducto
                    },
                    Cantidad = itemDto.Cantidad,
                    Precio   = itemDto.Precio
                };
                listaDetalles.Add(item);
            }

            var venta = new Venta
            {
                VentaId = ventaDto.VentaId,
                Cliente = new Cliente
                {
                    ClienteId      = ventaDto.Cliente.ClienteId,
                    NombreCompania = ventaDto.Cliente.NombreCompania
                },
                FechaVenta    = ventaDto.FechaVenta,
                DetalleVentas = listaDetalles
            };


            #endregion

            #region Guardar la Venta

            _conexionBd = new ConexionBd();
            SqlTransaction tran = null;
            try
            {
                SqlConnection cn = _conexionBd.AbrirConexion();
                tran                  = cn.BeginTransaction();//Comienza la transacción
                _repositorio          = new RepositorioVentas(cn, tran);
                _repositorioProductos = new RepositorioProductos(cn, tran);
                _repositorioDetalle   = new RepositorioDetalleVentas(cn, tran);

                _repositorio.Guardar(venta);
                #region Recorrer los detalles de la venta

                foreach (var detalleVenta in venta.DetalleVentas)
                {
                    detalleVenta.Venta = venta;
                    _repositorioDetalle.Guardar(detalleVenta);
                    _repositorioProductos.ActualizarStock(detalleVenta.Producto,
                                                          -detalleVenta.Cantidad);
                }
                #endregion
                tran.Commit();//Confirma la persistencia de los datos
                ventaDto.VentaId = venta.VentaId;
            }
            catch (Exception e)
            {
                tran.Rollback();//Tira para atrás toda la transacción si no se completa
                throw new Exception(e.Message);
            }


            #endregion
        }
Exemple #7
0
 public ServiciosVenta(IRepositorioVentas repositorio, IUnitOfWork unitOfWork)
 {
     _repositorio = repositorio;
     _mapper      = Mapeador.CrearMapper();
     _unitOfWork  = unitOfWork;
 }