Exemplo n.º 1
0
        public Producto ProcesarStockMayorista(int idCliente, Producto prod)
        {
            /*URL DE LA FOTO*/
            /*Se usa la URL del mayorista*/
            ServicioGenerico servGenerico = new ServicioGenerico();
            decimal          myGanancia   = servGenerico.ParametroObtenerValor("PORC_GANANCIA_GRAL").ConvertirDecimal();

            //Para revendedor, el precio unitario es el precio final del mayorista mas la ganancia
            prod.PrecioUnitario = prod.PrecioUnitarioFinal;

            if (myGanancia > 0)
            {
                prod.PrecioUnitario = prod.PrecioUnitarioFinal + ((prod.PrecioUnitarioFinal * myGanancia) / 100);
            }

            /*CALCULO DEL PRECIO SEGUN LISTA*/
            ServiciosPedido servPedido         = new ServiciosPedido();
            decimal         precioListaCliente = servPedido.DamePrecioListaClienteMayorista(idCliente);

            decimal precio = 0;

            //Aplicamos descuento para clientes que tengan asignada lista
            if (precioListaCliente != -1)
            {
                precio = prod.PrecioUnitario - ((precioListaCliente * prod.PrecioUnitario) / 100);
            }
            else
            {
                precio = prod.PrecioUnitario;
            }

            prod.PrecioUnitarioProcesado = precio;

            return(prod);
        }
Exemplo n.º 2
0
        public Producto ProcesarStockPropio(List <ClienteLista> listaCliente, string url_host, Producto prod)
        {
            /*URL DE LA FOTO*/
            //if (prod.Foto != null)
            //    prod.FotoLink = string.Format("{0}{1}{2}{3}", url_host, "assets/fotos", prod.Path, prod.Foto);

            /*CALCULO DEL PRECIO SEGUN LISTA*/
            ServiciosPedido servPedido         = new ServiciosPedido();
            decimal         precioListaCliente = servPedido.DamePrecioListaCliente(listaCliente, prod);

            //determinar precio del producto puede ser de la lista del producto o la asignada al cliente
            decimal precio = 0;

            if (precioListaCliente != -1)
            {
                if (prod.PrecioPorPeso)
                {
                    precio = precioListaCliente;
                }
                else
                {
                    precio = prod.PrecioUnitario - ((precioListaCliente * prod.PrecioUnitario) / 100);
                }
            }
            else
            {
                if (prod.PrecioPorPeso)
                {
                    precio = prod.ListaPrecio.Precio;
                }
                else
                {
                    precio = prod.PrecioUnitario;
                }
            }

            prod.PrecioUnitarioProcesado = precio;

            return(prod);
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
0
        public ProductoList ProductoListarCarrito(bool conStock, int idSubcategoria, string textoBuscar, int idCliente, int numeroPagina, int cantidadRegistros)
        {
            ServiciosPedido  servPedido   = new ServiciosPedido();
            ServicioGenerico servGenerico = new ServicioGenerico();

            ProductoRepository repository  = new ProductoRepository();
            List <Producto>    listProds   = new List <Producto>();
            List <PedidoItem>  pedidoItems = new List <PedidoItem>();

            /* MONEDA_VENTA => Se parametriza desde el ABM de Cotizaciones
             * valores posibles
             * * PESO_ARGENTINO
             * * DOLAR_EEUU
             */

            /*Parametros del sistema*/
            string monedaVenta = servGenerico.ParametroObtenerValor("MONEDA_VENTA");
            string url_host    = servGenerico.ParametroObtenerValor("URL_HOST");
            string myIdCliente = servGenerico.ParametroObtenerValor("TRADING_ID_CLIENTE");

            List <ClienteLista> listaCliente = null;

            if (idCliente > 0)
            {
                ServicioClientes servClientes = new ServicioClientes();
                listaCliente = servClientes.ClienteListaObtenerVigentesCache()
                               .Where(item => item.IdCliente == idCliente)
                               .ToList <ClienteLista>();
                //Pedido pedido = servPedido.PedidoObtenerClienteIngresado(idCliente, -1, -1);
            }
            else
            {
                //cuando se muestra el carrito a usuarios no registrados se fuerza PESO_ARGENTINO
                monedaVenta = "PESO_ARGENTINO";
            }

            decimal cotizacionDolar = this.CotizacionDolarVigente().Cotizacion;

            List <Producto> listProdsFull = new List <Producto>();

            if (idSubcategoria != -1)
            {
                //1ro se obtienen y listan los productos del MONORISTA

                if (textoBuscar.Contains("ETIQUETA=NOVEDAD"))
                {
                    listProdsFull.AddRange(this.ProductoObtenerVigentesCache(idSubcategoria)
                                           .FindAll(item => item.Stock > 0 && item.Etiquetas.Contains("NOVEDAD"))
                                           .OrderBy(item => item.Orden)
                                           .ToList <Producto>());
                }
                else
                {
                    List <Producto> listAux = this.ProductoObtenerVigentesCache(idSubcategoria);
                    listProdsFull.AddRange(listAux
                                           .FindAll(item => item.Stock > 0)
                                           .OrderBy(item => item.Orden)
                                           .ToList <Producto>());
                }

                //despues se buscan los del mayorista
                SubcategoriaMerge subcateMerge = this.ObtenerSubcategoriaMerge(idSubcategoria);
                if (subcateMerge != null && subcateMerge.IdSubcategoriaMayorista > 0)
                {
                    idSubcategoria = subcateMerge.IdSubcategoriaMayorista;
                    textoBuscar    = subcateMerge.Etiqueta;
                }
            }
            else
            {
                listProdsFull.AddRange(repository.BuscarProductos(textoBuscar, conStock, true, 1, 100));
            }

            //2ro se obtienen y listan los productos del MAYORISTA
            listProdsFull.AddRange(this.ProductoObtenerDelMayorista(conStock, idSubcategoria, textoBuscar, myIdCliente.ConvertirInt()));

            int totalFilas = listProdsFull.Count;

            bool paginar = (numeroPagina != -1 && cantidadRegistros != -1);

            if (paginar)
            {
                int nro_fila = 1;
                listProdsFull
                .ForEach(delegate(Producto item)
                {
                    item.NroFila = nro_fila;
                    nro_fila++;
                });
                int filaDesde = (numeroPagina - 1) * cantidadRegistros;
                int filaHasta = filaDesde + cantidadRegistros;
                listProds = listProdsFull.FindAll(item => item.NroFila > filaDesde && item.NroFila <= filaHasta);
            }
            else
            {
                listProds = listProdsFull;
            }


            listProds.ForEach(delegate(Producto prod)
            {
                if (prod.StockPropio)
                {
                    prod = ProcesarStockPropio(listaCliente, url_host, prod);
                }
                else
                {
                    prod = ProcesarStockMayorista(idCliente, prod);
                }

                prod.MonedaVenta = monedaVenta == "DOLAR_EEUU" ? "USD" : "$";
                if (monedaVenta != "DOLAR_EEUU")
                {
                    prod.PrecioUnitarioFinal = Decimal.Round(prod.PrecioUnitarioProcesado * cotizacionDolar, 2);
                }
                else
                {
                    prod.PrecioUnitarioFinal = Decimal.Round(prod.PrecioUnitarioProcesado, 2);
                }


                prod.CantidadPedido = 0;
                prod.ProductoPedido = false;
            });

            ProductoList listReturn = new ProductoList();

            listReturn.TotalFilas = totalFilas;
            listReturn.Productos  = listProds;
            return(listReturn);
        }