//ya no se usa
        public SystemValidationModel Edit(VentasViewViewModel viewModel)
        {
            var venta = GetById(viewModel.Id);

            venta = Mapper.Map(viewModel, venta);

            UpdateDetalle(venta, viewModel);
            _context.Entry(venta).State = EntityState.Modified;

            var success    = _context.SaveChanges() > 0;
            var validation = new SystemValidationModel()
            {
                Message = success ? "Se ha editado correctamente la venta" : "No se pudo editado la venta",
                Success = success
            };

            return(validation);
        }
        private void UpdateDetalle(Venta venta, VentasViewViewModel viewModel)
        {
            var ventaDetalleIds    = venta.DetalleVenta.Select(x => x.Id);
            var detalleIds         = viewModel.DetalleVenta.Select(x => x.Id).ToList();
            var detalleIdsToDelete = ventaDetalleIds.Except(detalleIds).ToList();
            var detallesToDelete   = _context.Set <DetalleVenta>().Where(x => x.Active && detalleIdsToDelete.Contains(x.Id)).ToList();

            foreach (var detalle in viewModel.DetalleVenta.Where(x => x.Id == 0))
            {
                var item = Mapper.Map <DetalleVenta>(detalle);
                _context.Entry(item).State = EntityState.Added;
                item.Venta = venta;
            }

            foreach (var detalle in detallesToDelete)
            {
                _context.Entry(detalle).State = EntityState.Deleted;
            }
        }
        public VentasViewViewModel GetForView(int id)
        {
            var viewModel = new VentasViewViewModel()
            {
            };

            var venta = _context.Set <Venta>().Include(x => x.DetalleVenta).Include(x => x.Cliente).Include(x => x.Timbrado).FirstOrDefault(x => x.Active && x.Id == id);


            venta.DetalleVenta = venta.DetalleVenta.Where(x => x.Active).ToList();
            viewModel          = Mapper.Map <VentasViewViewModel>(GetById(id));
            viewModel          = Mapper.Map(venta.Timbrado, viewModel);
            var productosIds = venta.DetalleVenta.Select(x => x.ProductoId).ToList();
            var productos    = _context.Set <Producto>().Where(x => productosIds.Contains(x.Id));

            foreach (var detalle in viewModel.DetalleVenta)
            {
                var producto = productos.FirstOrDefault(x => x.Id == detalle.ProductoId);
                detalle.PorcentajeIva = producto.PorcentajeIva;
            }
            return(viewModel);
        }
        public SystemValidationModel Confirm(VentasViewViewModel viewModel)
        {
            var venta = GetById(viewModel.Id);

            venta = Mapper.Map(viewModel, venta);
            //var timbrado = _timbrados.GetValidTimbrado(viewModel.SucursalId, viewModel.CajaId);
            //if (timbrado == null)
            //	return new SystemValidationModel() { Success = false, Message = "No existe un timbrado valido registrado" };
            //venta.Timbrado = timbrado;
            //var nroFactura = GetValidNroFactura(timbrado);
            //if (nroFactura == null)
            //	return new SystemValidationModel() { Success = false, Message = "No existen numeros validos para el timbrado actual" };

            //venta.NroFactura = nroFactura.Value;
            DescontarStock(viewModel.DetalleVenta, viewModel.SucursalId);
            _context.Entry(venta).State = EntityState.Modified;
            venta.Estado = viewModel.CondicionVenta == Constants.CondicionVenta.Contado ? Constants.EstadoVenta.Pagado : Constants.EstadoVenta.PendientedePago;
            UpdateDetalle(venta, viewModel);
            //DescontarStock(viewModel.DetalleVenta, viewModel.SucursalId);
            if (viewModel.PedidoId != null)
            {
                var pedido = _pedidos.GetById(viewModel.PedidoId.Value);
                pedido.Estado = Constants.EstadoPedido.Finalizado;
                ChecForUpdatePedido(pedido, venta.DetalleVenta);
                _context.Entry(pedido).State = EntityState.Modified;
            }

            var success    = _context.SaveChanges() > 0;
            var validation = new SystemValidationModel()
            {
                Message = success ? "Se ha confirmado correctamente la venta" : "No se pudo confirmar la venta",
                Success = success
            };

            return(validation);
        }