Exemple #1
0
        public DocumentoVenta DocumentoVentaItemEliminar(DocumentoVentaItem docItem)
        {
            RepositoryGenerico <DocumentoVentaItem> repository = new RepositoryGenerico <DocumentoVentaItem>();
            ServiciosProductos servProductos = new ServiciosProductos();

            DocumentoVentaItem dato = repository.Obtener(docItem.Id);

            repository.Eliminar(dato);

            DocumentoVenta docVenta = this.DocumentoVentaObtener(docItem.IdVenta);

            if (docItem.IdPedidoItemProducto <= 0 && docItem.IdProductoStock > 0)
            {
                bool?_descuentaStock = null;
                if (docVenta.TipoComprobante.Id == (int)TIPOS_COMPROBANTE.NOTA_DE_PEDIDO_)
                {
                    _descuentaStock = false;
                }
                else if (docVenta.TipoComprobante.Id == (int)TIPOS_COMPROBANTE.NOTA_DE_CREDITO_)
                {
                    _descuentaStock = true;
                }

                if (_descuentaStock.HasValue)
                {
                    servProductos.ProductoStockActualizarStock(docItem.IdProductoStock, docItem.Cantidad, _descuentaStock.Value);
                }
            }
            return(this.CalcularTotales(docVenta));
        }
        public IHttpActionResult EliminarItem([FromBody] DocumentoVentaItem docItem)
        {
            try
            {
                ServiciosVentas servicio = new ServiciosVentas();
                DocumentoVenta  resp     = servicio.DocumentoVentaItemEliminar(docItem);

                if (resp == null)
                {
                    return(NotFound());
                }

                LoggerHelper.LogInfo(System.Reflection.MethodBase.GetCurrentMethod(), JsonConvert.SerializeObject(resp));
                return(Ok(resp));
            }
            catch (ApplicationException ex)
            {
                LoggerHelper.LogError(MethodBase.GetCurrentMethod(), ex);
                return(BadRequest(ex.Message));
            }
            catch (Exception ex)
            {
                LoggerHelper.LogError(MethodBase.GetCurrentMethod(), ex);
                return(BadRequest("El documento de venta no se pudo actualizar."));
            }
        }
Exemple #3
0
        public DocumentoVentaItem DocumentoVentaItemGrabar(DocumentoVentaItem datosGraba)
        {
            RepositoryGenerico <DocumentoVentaItem> repository = new RepositoryGenerico <DocumentoVentaItem>();
            DocumentoVentaItem dato;

            int _id = datosGraba.Id;

            if (_id == -1)
            {
                dato = new DocumentoVentaItem();
            }
            else
            {
                dato = repository.Obtener(_id);
            }

            dato.IdVenta              = datosGraba.IdVenta;
            dato.NroItem              = datosGraba.NroItem;
            dato.IdProductoStock      = datosGraba.IdProductoStock;
            dato.IdPedidoItemProducto = datosGraba.IdPedidoItemProducto;
            dato.Descripcion          = datosGraba.Descripcion;
            dato.Cantidad             = datosGraba.Cantidad;
            dato.PrecioUnitario       = datosGraba.PrecioUnitario;
            dato.Precio = datosGraba.Precio;

            repository.Actualizar(dato);

            return(dato);
        }
Exemple #4
0
        public IDictionary ImprimirDatosNotaPedido(int idVenta)
        {
            IDictionary    datos    = new Hashtable();
            DocumentoVenta docVenta = this.DocumentoVentaObtener(idVenta);

            if (docVenta == null)
            {
                throw new ApplicationException("No existe Nota de Pedido");
            }

            DocumentoVentaItem itemDtoOculto = docVenta.Items.FirstOrDefault(item => item.Descripcion.EndsWith("[NO SE IMPRIME]"));

            List <DocumentoVentaItem> listadoItems = docVenta.Items.ToList <DocumentoVentaItem>()
                                                     .FindAll(item => item != itemDtoOculto)
                                                     .ToList <DocumentoVentaItem>();

            decimal subtotal = docVenta.Gravado;
            decimal total    = docVenta.Total;

            if (itemDtoOculto != null)
            {
                subtotal = docVenta.Gravado + (itemDtoOculto.Precio * -1);
                total    = docVenta.Total + (itemDtoOculto.Precio * -1);
            }

            datos.Add("DescripcionComprobante", docVenta.TipoComprobante.Descripcion);
            datos.Add("Numero", string.Format("{0:00000}", docVenta.Numero));
            datos.Add("Fecha", string.Format("{0}", string.Format("{0:dd/MM/yyy}", docVenta.Fecha)));
            datos.Add("NombreCliente", string.Format("{0} - {1} {2}", docVenta.Cliente.Id.ToString(), docVenta.Cliente.Nombre, docVenta.Cliente.Apellido));
            datos.Add("NombreFantasia", docVenta.Cliente.NombreFantasia.ConvertirString());
            datos.Add("RazonSocial", docVenta.Cliente.RazonSocial.ConvertirString());
            datos.Add("CodigoCliente", string.Format("{0:0000}", docVenta.Cliente.Id));
            datos.Add("ListadoItems", listadoItems);
            datos.Add("NroPedido", string.Format("{0:00000}", docVenta.NumeroPedido > 0 ? docVenta.NumeroPedido : 0));
            datos.Add("Direccion", docVenta.Cliente.Direccion.ConvertirString());
            datos.Add("Localidad", docVenta.Cliente.Localidad.ConvertirString());
            datos.Add("Provincia", docVenta.Cliente.Provincia != null ? docVenta.Cliente.Provincia.Descripcion : string.Empty);
            datos.Add("CodigoPostal", docVenta.Cliente.CodigoPostal.ConvertirString());
            datos.Add("Telefono", docVenta.Cliente.Celular.ConvertirString());
            datos.Add("Email", docVenta.Cliente.Email);
            datos.Add("SituacionIVA", docVenta.Cliente.SituacionIVA != null ? docVenta.Cliente.SituacionIVA.Descripcion : string.Empty);
            datos.Add("Subtotal", string.Format("{0:#,##0.00}", subtotal));
            datos.Add("Descuento", string.Format("{0:#,##0.00}", docVenta.Descuento));
            datos.Add("ImprimirSubtotal", string.Format("{0}", docVenta.Descuento != 0 ? 1 : 0));
            datos.Add("Total", string.Format("{0:#,##0.00}", total));
            datos.Add("TextoPiePagina", string.Empty);

            return(datos);
        }
Exemple #5
0
        public DocumentoVenta DocumentoVentaGrabar(DocumentoVenta datosGraba)
        {
            VentaRepository repository = new VentaRepository();
            DocumentoVenta  dato;

            int _id = datosGraba.Id;

            if (_id == -1)
            {
                dato = new DocumentoVenta();
                dato.TipoComprobante = datosGraba.TipoComprobante;
                dato.Numero          = repository.ObtenerProximoNumero(datosGraba.TipoComprobante.Id);
            }
            else
            {
                dato = repository.Obtener(_id);
            }

            dato.IdEmpresa                   = datosGraba.IdEmpresa;
            dato.Usuario                     = this.ObtenerObjeto <Cliente>(datosGraba.Usuario.Id);
            dato.Cliente                     = this.ObtenerObjeto <Cliente>(datosGraba.Cliente.Id);
            dato.IdPedido                    = datosGraba.IdPedido;
            dato.NumeroPedido                = datosGraba.NumeroPedido;
            dato.Letra                       = datosGraba.Letra;
            dato.Sucursal                    = datosGraba.Sucursal;
            dato.Fecha                       = datosGraba.Fecha;
            dato.Vencimiento                 = datosGraba.Vencimiento;
            dato.Gravado                     = datosGraba.Gravado;
            dato.Descuento                   = datosGraba.Descuento;
            dato.PorcentajeIVA               = datosGraba.PorcentajeIVA;
            dato.IVA                         = datosGraba.IVA;
            dato.Total                       = datosGraba.Total;
            dato.Pendiente                   = datosGraba.Pendiente;
            dato.Comision                    = datosGraba.Comision;
            dato.Efectivo                    = datosGraba.Efectivo;
            dato.EfectivoCotizaDolar         = datosGraba.EfectivoCotizaDolar;
            dato.Dolares                     = datosGraba.Dolares;
            dato.DolaresCotizaDolar          = datosGraba.DolaresCotizaDolar;
            dato.Euros                       = datosGraba.Euros;
            dato.EurosCotizaDolar            = datosGraba.EurosCotizaDolar;
            dato.Cheques                     = datosGraba.Cheques;
            dato.ChequesCotizaDolar          = datosGraba.ChequesCotizaDolar;
            dato.Tarjeta                     = datosGraba.Tarjeta;
            dato.TarjetaCotizaDolar          = datosGraba.TarjetaCotizaDolar;
            dato.MercadoPago                 = datosGraba.MercadoPago;
            dato.MercadoPagoCotizaDolar      = datosGraba.MercadoPagoCotizaDolar;
            dato.DepositoTransferencia       = datosGraba.DepositoTransferencia;
            dato.DepositoTransferCotizaDolar = datosGraba.DepositoTransferCotizaDolar;
            dato.RetencionIVA                = datosGraba.RetencionIVA;
            dato.RetencionGanancia           = datosGraba.RetencionGanancia;
            dato.RetencionIngBrutos          = datosGraba.RetencionIngBrutos;

            repository.Actualizar(dato);

            if (datosGraba.Observaciones != null)
            {
                datosGraba.Observaciones.IdVenta = dato.Id;
                dato.Observaciones = this.DocumentoVentaObservacionesGrabar(datosGraba.Observaciones);
            }

            if (datosGraba.Items != null && datosGraba.Items.Count > 0)
            {
                if (dato.Items == null)
                {
                    dato.Items = new List <DocumentoVentaItem>();
                }

                datosGraba.Items.ToList <DocumentoVentaItem>()
                .ForEach(delegate(DocumentoVentaItem item)
                {
                    item.IdVenta = dato.Id;
                    DocumentoVentaItem docItem = this.DocumentoVentaItemGrabar(item);

                    dato.Gravado = dato.Gravado + docItem.Precio;
                });

                dato       = this.CalcularTotales(dato);
                dato.Items = this.Listar <DocumentoVentaItem>("IdVenta", dato.Id).ToList <DocumentoVentaItem>();
            }


            return(dato);
        }
Exemple #6
0
        public DocumentoVenta DocumentoVentaFacturarPedido(DocumentoVenta dato)
        {
            ServiciosProductos servProductos = new ServiciosProductos();
            ServiciosPedido    servPedido    = new ServiciosPedido();
            VentaRepository    repository    = new VentaRepository();

            if (dato.Items == null)
            {
                dato.Items = new List <DocumentoVentaItem>();
            }

            Pedido pedido = servPedido.PedidoObtener(dato.IdPedido);

            pedido.Items.ToList <PedidoItem>()
            .OrderBy(item => item.Producto.Ubicacion).ToList <PedidoItem>()
            .ForEach(delegate(PedidoItem pi)
            {
                decimal _precioUnitario = 0;
                if (pi.Producto.PrecioPorPeso)
                {
                    _precioUnitario = pi.Precio * pi.Producto.Peso;
                }
                else
                {
                    _precioUnitario = pi.Precio;
                }

                if (pi.Cantidad == 0)
                {
                    // si la cantidad esta en 0 lo mismo se genera el item de la factura en 0
                    // para mantener la numeracion de los items
                    string _descripcion = string.Format("{0} {1} - Código: {2} ",
                                                        pi.Producto.DescripcionCategoria,
                                                        pi.Producto.DescripcionSubcategoria,
                                                        pi.Producto.Codigo.ToString());

                    DocumentoVentaItem dvItem = new DocumentoVentaItem()
                    {
                        Id                   = -1,
                        IdVenta              = dato.Id,
                        NroItem              = dato.Items.Count + 1,
                        Descripcion          = _descripcion,
                        IdProductoStock      = pi.Producto.ProductoStock[0].Id,
                        IdPedidoItemProducto = -1,
                        Cantidad             = 0,
                        PrecioUnitario       = _precioUnitario,
                        Precio               = 0
                    };
                    dato.Items.Add(dvItem);
                }
                else
                {
                    pi.ItemProductos.ToList <PedidoItemProducto>()
                    .ForEach(delegate(PedidoItemProducto pip)
                    {
                        if (pip.Cantidad > 0)
                        {
                            string _descripcion = string.Format("{0} {1} - Código: {2} - {3}",
                                                                pi.Producto.DescripcionCategoria,
                                                                pi.Producto.DescripcionSubcategoria,
                                                                pi.Producto.Codigo.ToString(),
                                                                pip.Medida.Observaciones);

                            DocumentoVentaItem dvItem = new DocumentoVentaItem()
                            {
                                Id                   = -1,
                                IdVenta              = dato.Id,
                                NroItem              = dato.Items.Count + 1,
                                Descripcion          = _descripcion,
                                IdProductoStock      = pip.IdProductoStock,
                                IdPedidoItemProducto = pip.Id,
                                Cantidad             = pip.Cantidad,
                                PrecioUnitario       = _precioUnitario,
                                Precio               = pip.Cantidad * _precioUnitario
                            };
                            dato.Items.Add(dvItem);
                        }
                    });
                }
            });

            if (pedido.Cliente.ComisionApp > 0 && pedido.NumeroPedidoMinorista > 0)
            {
                DocumentoVentaItem dvItem = new DocumentoVentaItem()
                {
                    Id                   = -1,
                    IdVenta              = dato.Id,
                    NroItem              = dato.Items.Count + 1,
                    Descripcion          = string.Format("Comisión APP Tienda WEB {0}%", pedido.Cliente.ComisionApp),
                    IdProductoStock      = -1,
                    IdPedidoItemProducto = -1,
                    Cantidad             = 1,
                    PrecioUnitario       = (pedido.Total * pedido.Cliente.ComisionApp) / 100,
                    Precio               = (pedido.Total * pedido.Cliente.ComisionApp) / 100
                };
                dato.Items.Add(dvItem);
            }
            if (pedido.Cliente.DescuentoOculto > 0)
            {
                decimal            descuento = ((pedido.Total * pedido.Cliente.DescuentoOculto) / 100) * -1;
                DocumentoVentaItem dvItem    = new DocumentoVentaItem()
                {
                    Id                   = -1,
                    IdVenta              = dato.Id,
                    NroItem              = dato.Items.Count + 1,
                    Descripcion          = string.Format("Descuento cliente {0}% [NO SE IMPRIME]", pedido.Cliente.DescuentoOculto),
                    IdProductoStock      = -1,
                    IdPedidoItemProducto = -1,
                    Cantidad             = 1,
                    PrecioUnitario       = descuento,
                    Precio               = descuento
                };
                dato.Items.Add(dvItem);
            }

            /************************/
            pedido.Estado = this.ObtenerObjeto <Estado>((int)ESTADOS.FACTURADO_);
            servPedido.PedidoGrabar(pedido);
            /************************/

            //hay que grabar para que se actualice el numero de pedido que se esta facturando..
            dato.NumeroPedido = pedido.Numero;
            dato = this.DocumentoVentaGrabar(dato);

            return(dato);
        }
Exemple #7
0
        public DocumentoVenta DocumentoVentaFacturarProducto(Producto producto)
        {
            ServiciosProductos servProductos = new ServiciosProductos();
            DocumentoVenta     dato          = this.DocumentoVentaObtener(producto.IdDocumentoVenta);

            producto.ProductoStock.ToList <ProductoStock>()
            .ForEach(delegate(ProductoStock ps)
            {
                if (ps.CantidadPedido > 0)
                {
                    Producto prodDescripcion = this.ObtenerObjeto <Producto>(producto.Id);
                    string descripcion       = string.Format("{0} {1} - Código: {2} - {3}",
                                                             prodDescripcion.DescripcionCategoria,
                                                             prodDescripcion.DescripcionSubcategoria,
                                                             producto.Codigo.ToString(),
                                                             ps.Medida.Observaciones);

                    decimal precioUnitario = 0;
                    if (producto.PrecioPorPeso)
                    {
                        precioUnitario = producto.PrecioUnitarioFinal * producto.Peso;
                    }
                    else
                    {
                        precioUnitario = producto.PrecioUnitarioFinal;
                    }

                    DocumentoVentaItem dvItem = new DocumentoVentaItem()
                    {
                        Id              = -1,
                        IdVenta         = dato.Id,
                        NroItem         = dato.Items.Count + 1,
                        Descripcion     = descripcion,
                        IdProductoStock = ps.Id,
                        Cantidad        = ps.CantidadPedido,
                        PrecioUnitario  = precioUnitario,
                        Precio          = ps.CantidadPedido * precioUnitario
                    };
                    dato.Items.Add(dvItem);
                }
            });

            dato = this.DocumentoVentaGrabar(dato);

            //para actualizar, vuelvo a ciclar por las dudas que la actualización que de error al Grabar
            bool?_descuentaStock = null;

            if (dato.TipoComprobante.Id == (int)TIPOS_COMPROBANTE.NOTA_DE_PEDIDO_)
            {
                _descuentaStock = true;
            }
            else if (dato.TipoComprobante.Id == (int)TIPOS_COMPROBANTE.NOTA_DE_CREDITO_)
            {
                _descuentaStock = false;
            }

            if (_descuentaStock.HasValue)
            {
                producto.ProductoStock.ToList <ProductoStock>()
                .ForEach(delegate(ProductoStock ps)
                {
                    if (ps.CantidadPedido > 0)
                    {
                        servProductos.ProductoStockActualizarStock(ps.Id, ps.CantidadPedido, _descuentaStock.Value);
                    }
                });
            }

            return(dato);
        }