Exemplo n.º 1
0
        Entidades.Promocion RevisarPromocionesBD(string codigoArticulo)
        {
            Entidades.Promocion promocion = null;
            var consulta = from prom in Sesion.Promociones where prom.Detalles.Where(dp => dp.CodigoArticulo == codigoArticulo).Count() > 0 select prom;

            if (consulta.Count() > 0)
            {
                promocion = consulta.First();
            }

            return(promocion);
        }
Exemplo n.º 2
0
        void BuscarYRestarPromocion(string codigoArticulo, string nombreArticulo, int cantidad, decimal precio)
        {
            Entidades.Promocion promocionBD = RevisarPromocionesBD(codigoArticulo);

            if (promocionBD == null || cantidad >= 0)
            {
                return;
            }

            for (int disponible = cantidad; disponible < 0; disponible++)
            {
                Entidades.PromocionAplicada promoA;
                IEnumerable <Entidades.PromocionAplicada> promocionPrendiente = from prom in promocionesEnEspera where !prom.cumplida && prom.articulos.Where(a => a.Articulo.Codigo == codigoArticulo).Count() > 0 select prom;
                IEnumerable <Entidades.PromocionAplicada> promocionCumplidas  = from prom in promocionesEnEspera where prom.cumplida && prom.articulos.Where(a => a.Articulo.Codigo == codigoArticulo).Count() > 0 select prom;
                int indice = -1;

                if (promocionPrendiente.Count() > 0)
                {
                    promoA = promocionPrendiente.Last();
                }
                else if (promocionCumplidas.Count() > 0)
                {
                    promoA = promocionCumplidas.Last();
                }
                else
                {
                    return;
                }

                var consultaNecesarios = (from a in promoA.articulos where !a.EsRegalo && a.Articulo.Codigo == codigoArticulo select a);
                var consultaRegalo     = (from a in promoA.articulos where a.EsRegalo && a.Articulo.Codigo == codigoArticulo select a);

                if (consultaRegalo.Count() > 0)
                {
                    indice = promoA.articulos.IndexOf(consultaRegalo.First());
                }
                else
                {
                    indice = promoA.articulos.IndexOf(consultaNecesarios.First());
                }

                promoA.articulos.RemoveAt(indice);
                promoA.cumplida = false;
                if (promoA.articulos.Count == 0)
                {
                    indice = promocionesEnEspera.IndexOf(promoA);
                    promocionesEnEspera.RemoveAt(indice);
                }
            }
        }
Exemplo n.º 3
0
        void BuscarYAgregarPromocion(string codigoArticulo, string nombreArticulo, int cantidad, decimal precio)
        {
            Entidades.Promocion promocionBD = RevisarPromocionesBD(codigoArticulo);

            if (promocionBD == null || cantidad <= 0)
            {
                return;
            }

            for (int disponible = cantidad; disponible > 0; disponible--)
            {
                Entidades.PromocionAplicada     promoA;
                IEnumerable <PromocionAplicada> promocionPrendiente = from prom in promocionesEnEspera where !prom.cumplida && prom.promocion.Detalles.Where(d => d.CodigoArticulo == codigoArticulo).Count() > 0 select prom;
                Entidades.ComplementoPromocion  complemento         = null;

                if (promocionBD.TipoPromocion.ToUpper() == "PRODUCTO REGALO")
                {
                    List <Entidades.PromocionAplicada> promocionesFalanNecesarios = new List <Entidades.PromocionAplicada>();
                    List <Entidades.PromocionAplicada> promocionesFalanRegalos    = new List <Entidades.PromocionAplicada>();

                    if (promocionPrendiente.Count() > 0)
                    {
                        promocionesFalanNecesarios = (from prom in promocionPrendiente where prom.promocion.Detalles.Where(d => d.CodigoArticulo == codigoArticulo && d.EsNecesario).Count() > 0 && (prom.promocion.CantidadRequerida > prom.articulos.Where(a => !a.EsRegalo).Count()) select prom).ToList();
                        promocionesFalanRegalos    = (from prom in promocionPrendiente where prom.promocion.Detalles.Where(d => d.CodigoArticulo == codigoArticulo && d.EsRegalo).Count() > 0 && (prom.promocion.CantidadARegalar > prom.articulos.Where(a => a.EsRegalo).Count()) select prom).ToList();
                    }

                    bool complementesNecesariosListos = false;
                    bool complementesRegalosListos    = false;

                    if (promocionesFalanNecesarios.Count() > 0)
                    {
                        promoA               = promocionesFalanNecesarios.First();
                        complemento          = new Entidades.ComplementoPromocion();
                        complemento.Articulo = new Producto()
                        {
                            Codigo         = codigoArticulo,
                            NombreArticulo = nombreArticulo,
                            Precio         = precio
                        };
                        complemento.EsRegalo          = false;
                        complemento.PrecioPorArticulo = precio;
                        promoA.articulos.Add(complemento);

                        complementesNecesariosListos = promoA.promocion.CantidadRequerida <= promoA.articulos.Where(a => !a.EsRegalo).Count();
                        complementesRegalosListos    = promoA.promocion.CantidadARegalar <= promoA.articulos.Where(a => a.EsRegalo).Count();


                        if (complementesNecesariosListos && complementesRegalosListos)
                        {
                            promoA.cumplida  = true;
                            promoA.descuento = promoA.articulos.Sum(art => art.Articulo.Precio) - promoA.articulos.Sum(art => art.PrecioPorArticulo);
                        }
                    }
                    else if (promocionesFalanRegalos.Count() > 0)
                    {
                        promoA               = promocionesFalanRegalos.First();
                        complemento          = new Entidades.ComplementoPromocion();
                        complemento.Articulo = new Producto()
                        {
                            Codigo         = codigoArticulo,
                            NombreArticulo = nombreArticulo,
                            Precio         = precio
                        };
                        complemento.EsRegalo = true;
                        float aRegalar = promoA.promocion.CantidadARegalar - promoA.articulos.Where(a => a.EsRegalo).Count();
                        complemento.PrecioPorArticulo = aRegalar >= 1 ? 0 : (precio - (precio * (decimal)aRegalar));
                        promoA.articulos.Add(complemento);

                        complementesNecesariosListos = promoA.promocion.CantidadRequerida <= promoA.articulos.Where(a => !a.EsRegalo).Count();
                        complementesRegalosListos    = promoA.promocion.CantidadARegalar <= promoA.articulos.Where(a => a.EsRegalo).Count();

                        if (complementesNecesariosListos && complementesRegalosListos)
                        {
                            promoA.cumplida  = true;
                            promoA.descuento = promoA.articulos.Sum(art => art.Articulo.Precio) - promoA.articulos.Sum(art => art.PrecioPorArticulo);
                        }
                    }
                    else
                    {
                        promoA           = new Entidades.PromocionAplicada();
                        promoA.promocion = promocionBD;
                        promoA.cumplida  = false;
                        promoA.descuento = 0;
                        promoA.articulos = new List <Entidades.ComplementoPromocion>();
                        promocionesEnEspera.Add(promoA);

                        complemento          = new Entidades.ComplementoPromocion();
                        complemento.Articulo = new Producto()
                        {
                            Codigo         = codigoArticulo,
                            NombreArticulo = nombreArticulo,
                            Precio         = precio
                        };

                        bool esNecesario = promoA.promocion.Detalles.Where(d => d.CodigoArticulo == codigoArticulo && d.EsNecesario).Count() > 0;
                        //bool esRegalo = promoA.promocion.Detalles.Where(d => d.CodigoArticulo == codigoArticulo && d.EsRegalo).Count() > 0;

                        if (esNecesario)
                        {
                            complemento.EsRegalo          = false;
                            complemento.PrecioPorArticulo = precio;
                        }
                        else
                        {
                            complemento.EsRegalo = true;
                            float aRegalar = promoA.promocion.CantidadARegalar - promoA.articulos.Where(a => a.EsRegalo).Count();
                            complemento.PrecioPorArticulo = aRegalar >= 1 ? 0 : (precio - (precio * (decimal)aRegalar));
                        }

                        promoA.articulos.Add(complemento);

                        complementesNecesariosListos = promoA.promocion.CantidadRequerida <= promoA.articulos.Where(a => !a.EsRegalo).Count();
                        complementesRegalosListos    = promoA.promocion.CantidadARegalar <= promoA.articulos.Where(a => a.EsRegalo).Count();

                        if (complementesNecesariosListos && complementesRegalosListos)
                        {
                            promoA.cumplida  = true;
                            promoA.descuento = promoA.articulos.Sum(art => art.Articulo.Precio) - promoA.articulos.Sum(art => art.PrecioPorArticulo);
                        }
                    }
                }
                else
                {
                    if (promocionPrendiente.Count() > 0)
                    {
                        promoA = promocionPrendiente.First();
                    }
                    else
                    {
                        promoA           = new Entidades.PromocionAplicada();
                        promoA.promocion = promocionBD;
                        promoA.cumplida  = false;
                        promoA.descuento = 0;
                        promoA.articulos = new List <Entidades.ComplementoPromocion>();
                        promocionesEnEspera.Add(promoA);
                    }
                    switch (promocionBD.TipoPromocion.ToUpper())
                    {
                    case "CANTIDAD X CANTIDAD":
                        complemento          = new Entidades.ComplementoPromocion();
                        complemento.Articulo = new Producto()
                        {
                            Codigo         = codigoArticulo,
                            NombreArticulo = nombreArticulo
                        };
                        complemento.EsRegalo          = false;
                        complemento.PrecioPorArticulo = precio * (decimal)(promoA.promocion.CantidadARegalar / promoA.promocion.CantidadRequerida);
                        promoA.articulos.Add(complemento);

                        if (promoA.promocion.CantidadRequerida == promoA.articulos.Count())
                        {
                            promoA.cumplida = true;
                            int totalProductos = promoA.articulos.Count();
                            promoA.descuento = (precio - promoA.articulos.First().PrecioPorArticulo) * totalProductos;
                            break;
                        }
                        break;

                    case "DESCUENTO %":
                        complemento          = new Entidades.ComplementoPromocion();
                        complemento.Articulo = new Producto()
                        {
                            Codigo         = codigoArticulo,
                            NombreArticulo = nombreArticulo
                        };

                        complemento.EsRegalo          = false;
                        complemento.PrecioPorArticulo = precio - (precio * ((decimal)promoA.promocion.Detalles.First().PorcentajeDescuento / 100));
                        promoA.articulos.Add(complemento);
                        promoA.cumplida  = true;
                        promoA.descuento = precio * ((decimal)promoA.promocion.Detalles.First().PorcentajeDescuento / 100);
                        break;

                    case "DESCUENTO $":
                        complemento          = new Entidades.ComplementoPromocion();
                        complemento.Articulo = new Producto()
                        {
                            Codigo         = codigoArticulo,
                            NombreArticulo = nombreArticulo
                        };
                        complemento.EsRegalo          = false;
                        complemento.PrecioPorArticulo = precio - promoA.promocion.Detalles.First().ImporteDescuento;
                        promoA.articulos.Add(complemento);
                        promoA.cumplida  = true;
                        promoA.descuento = promoA.promocion.Detalles.First().ImporteDescuento;
                        break;

                    case "PRECIO FIJO":
                        complemento          = new Entidades.ComplementoPromocion();
                        complemento.Articulo = new Producto()
                        {
                            Codigo         = codigoArticulo,
                            NombreArticulo = nombreArticulo
                        };

                        complemento.EsRegalo          = false;
                        complemento.PrecioPorArticulo = promoA.promocion.Detalles.First().Precio;
                        promoA.articulos.Add(complemento);
                        promoA.cumplida  = true;
                        promoA.descuento = precio - promoA.promocion.Detalles.First().Precio;
                        break;
                    }
                }
            }
        }