示例#1
0
        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);
        }