private List <Entidades.ListaProductoVenta> BuscarPromociones(List <Entidades.ListaProductoVenta> listaProductosEspejo) { double totalDescuento = 0; List <Entidades.ListaProductoVenta> listaDescuentos = new List <Entidades.ListaProductoVenta>(); foreach (var producto in listaProductosEspejo) { if (producto.Cantidad > 0) { List <Ofertas> promociones = Ventas.BuscarPromociones("", producto.idProducto, 2).OrderBy(x => x.PrecioCombo).ToList(); foreach (var item in promociones) { if (item.Productos.Count == 1) { int cantidad = producto.Cantidad / item.Productos.First().Unidades; if (cantidad != 0) { double descuento_promocion = Convert.ToDouble((producto.PrecioVenta * (cantidad * item.Productos.First().Unidades)) - (cantidad * item.PrecioCombo)); Entidades.ListaProductoVenta descuento = new Entidades.ListaProductoVenta(); descuento.idOferta = item.idOferta; descuento.PrecioVentaFinal = Convert.ToDecimal(-descuento_promocion); descuento.NombreProducto = "DESCUENTO APLICADO POR " + item.NombreOferta; descuento.Cantidad = cantidad; descuento.PrecioUnitario = item.PrecioCombo; descuento.MontoDescuento = item.MontoDescuento; listaDescuentos.Add(descuento); totalDescuento = totalDescuento + descuento_promocion; producto.Cantidad = producto.Cantidad - (cantidad * item.Productos.First().Unidades); } } else { if (!listaDescuentos.Exists(e => e.idOferta == item.idOferta)) { double totalProductosPromocion = 0; int cantidadPromociones = 10000; bool promocionCompleta = true; foreach (var itemNEW in item.Productos) { Entidades.ListaProductoVenta productoVenta = listaProductosEspejo.Find(e => e.idProducto == itemNEW.idProducto); if (productoVenta != null) { if ((productoVenta.Cantidad / itemNEW.Unidades) == 0) { promocionCompleta = false; break; } else { int posiblesPromociones = productoVenta.Cantidad / itemNEW.Unidades; cantidadPromociones = cantidadPromociones > posiblesPromociones ? posiblesPromociones : cantidadPromociones; totalProductosPromocion = totalProductosPromocion + Convert.ToDouble(productoVenta.PrecioVenta); } } else { promocionCompleta = false; break; } } if (promocionCompleta) { if (!listaDescuentos.Exists(e => e.idOferta == item.idOferta)) { Entidades.ListaProductoVenta descuento = new Entidades.ListaProductoVenta(); double descuento_promocion = ((cantidadPromociones * totalProductosPromocion) - (cantidadPromociones * Convert.ToDouble(item.PrecioCombo))); descuento.idOferta = item.idOferta; descuento.PrecioVentaFinal = Convert.ToDecimal(-descuento_promocion); descuento.NombreProducto = "DESCUENTO APLICADO POR " + item.NombreOferta; descuento.Cantidad = cantidadPromociones; descuento.PrecioUnitario = item.PrecioCombo; descuento.MontoDescuento = item.MontoDescuento; listaDescuentos.Add(descuento); totalDescuento = totalDescuento + descuento_promocion; foreach (var item2 in item.Productos) { Entidades.ListaProductoVenta productoVenta = listaProductosEspejo.Find(e => e.idProducto == item2.idProducto); productoVenta.Cantidad = productoVenta.Cantidad - (cantidadPromociones * item2.Unidades); } } } } } } } } return(listaDescuentos); }