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); }
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); }
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); }
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); }