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