public static List <Categoria> buscarCategoriasPorTienda(TiendaOnlineContext _db, IEnumerable <Producto> productosTienda, IEnumerable <Servicio> serviciosTienda, bool esProducto) { List <Categoria> categorias = new List <Categoria>(); foreach (Categoria cat in _db.Categorias.ToList()) { if (esProducto) { foreach (var prod in productosTienda) { if (prod.CategoriaId == cat.Id) { if (categorias.Contains(cat) == false) { categorias.Add(cat); } } } } else { foreach (var serv in serviciosTienda) { if (serv.CategoriaId == cat.Id) { if (categorias.Contains(cat) == false) { categorias.Add(cat); } } } } } return(categorias); }
public static Tuple <List <Producto>, List <Servicio>, List <Tienda>, Boolean, BusquedaTipo, string> BuscarProductosPorCategoriaConModeloMarcaYear(TiendaOnlineContext _db, int id, string busqueda, string modelo, string marca, int?year, string seccion, bool desdeTienda, Tienda tienda) { //Inicializacion de variables bool agregado = false; bool agregadoExacto = false; bool esTienda = false; //Será true solo en el caso de que no se encuentren productos o servicios. Producto productoExacto = null; Servicio servicioExacto = null; Tienda tiendaExacto = null; List <Producto> productosFiltrados = new List <Producto>(); List <Servicio> serviciosFiltrados = new List <Servicio>(); List <Tienda> TiendasFiltrados = new List <Tienda>(); List <Producto> productos = new List <Producto>(); List <Servicio> servicios = new List <Servicio>(); List <Tienda> tiendas = new List <Tienda>(); //------------------------------ if (desdeTienda) { //Realiza busqueda de productos/servicios solamente desde una tienda. productos = tienda.Productos.ToList(); servicios = tienda.Servicios.ToList(); } else { //Realiza busqueda de todos los productos/servicios. productos = _db.Productos.ToList(); servicios = _db.Servicios.ToList(); tiendas = _db.Tienda.ToList(); } //Si recibo una categoría, solo filtro productos/servicios pertenecientes a esa categoría. Categoria categoria = null; if (id != -1) { categoria = _db.Categorias.Find(id); if (categoria.TipoCategoria == Categoria.CategoriaTipo.Producto) { productos = categoria.Productos; } else if (categoria.TipoCategoria == Categoria.CategoriaTipo.Servicio) { servicios = categoria.Servicios; } } if (busqueda == null || busqueda.Equals("")) { return(Tuple.Create(productos, servicios, tiendas, false, BusquedaTipo.Producto, busqueda)); } //Busqueda de producto o servicio seleccionado categoria if (categoria != null && categoria.TipoCategoria == Categoria.CategoriaTipo.Producto) { Tuple <List <Producto>, List <Servicio>, List <Tienda>, Boolean, BusquedaTipo, string> productosTuple = BuscarProductosConModeloMarcaYear(productos, productoExacto, busqueda, marca, modelo, year, agregadoExacto, productosFiltrados, agregado); if (VerificacionTienda(productosTuple.Item1, productosTuple.Item2) == true) { esTienda = true; } return(productosTuple); } else if (categoria != null && categoria.TipoCategoria == Categoria.CategoriaTipo.Servicio) { Tuple <List <Producto>, List <Servicio>, List <Tienda>, Boolean, BusquedaTipo, string> serviciosTuple = BuscarServicios(servicios, servicioExacto, busqueda, agregadoExacto, serviciosFiltrados, agregado); if (VerificacionTienda(serviciosTuple.Item1, serviciosTuple.Item2) == true) { esTienda = true; } return(serviciosTuple); } else if (categoria == null) { Tuple <List <Producto>, List <Servicio>, List <Tienda>, Boolean, BusquedaTipo, string> productosTuple = BuscarProductosConModeloMarcaYear(productos, productoExacto, busqueda, marca, modelo, year, agregadoExacto, productosFiltrados, agregado); Tuple <List <Producto>, List <Servicio>, List <Tienda>, Boolean, BusquedaTipo, string> serviciosTuple = BuscarServicios(servicios, servicioExacto, busqueda, agregadoExacto, serviciosFiltrados, agregado); Tuple <List <Producto>, List <Servicio>, List <Tienda>, Boolean, BusquedaTipo, string> tiendasTuple = BuscarTiendas(tiendas, tiendaExacto, busqueda, agregadoExacto, TiendasFiltrados, agregado); return(Tuple.Create(productosTuple.Item1, serviciosTuple.Item2, tiendasTuple.Item3, false, BusquedaTipo.Producto, busqueda)); } return(null); }