/// <summary> /// Retorna as imagens de acordo com a cor passada. /// </summary> /// <param name="produtoCorId"></param> /// <param name="quantIdadeImagem"></param> /// <param name="produtoCor"></param> /// <returns></returns> public MvcHtmlString Imagem(int produtoCorId, int quantIdadeImagem, ProdutoCor produtoCor) { _tagDivImagem = new TagBuilder("div"); ICollection <ProdutoImagem> imagem; if (quantIdadeImagem == 0) { using (_db = new ApplicationDbContext()) { imagem = produtoCorId != 0 ? _db.ProdutoImagens.AsNoTracking().Where(i => i.ProdutoCorId == produtoCorId).ToList() : produtoCor.ProdutoImagens.ToList(); } } else { imagem = produtoCorId != 0 ? _db.ProdutoImagens.AsNoTracking().Where(i => i.ProdutoCorId == produtoCorId).Take(quantIdadeImagem).ToList() : produtoCor.ProdutoImagens.Take(quantIdadeImagem).ToList(); } foreach (var item in imagem) { _tagImg = new TagBuilder("img"); _tagImg.MergeAttribute("Id", Convert.ToString(item.Id)); _tagImg.AddCssClass(produtoCor == null ? Convert.ToString(produtoCorId) : Convert.ToString(produtoCor.ProdutoTamanho.ProdutoId)); _tagImg.AddCssClass("img-responsive img-secund"); _tagImg.MergeAttribute("src", item.TipoArquivo == TipoArquivo.Imagem ? item.Imagem : "/img/no-video-img.png"); _tagImg.MergeAttribute("alt", ""); _tagImg.MergeAttribute("tipo", item.TipoArquivo.ToString()); _tagImg.MergeAttribute("url", item.Imagem); _tagImg.MergeAttribute("src-other", item.Imagem2); if (produtoCor != null) { _tagImg.MergeAttribute("onClick", "DispararBotao(" + produtoCor.ProdutoTamanho.ProdutoId + ")"); } _tagDivImagem.InnerHtml += _tagImg.ToString(); } return(MvcHtmlString.Create(_tagDivImagem.ToString())); }
/// <summary> /// Processa grade de produtos. /// </summary> /// <param name="pageNumber">Especifica número da página</param> /// /// <param name="totalPage">Total de páginas que será retornada</param> /// <returns></returns> private IList <Produto> CarregaGrade(int pageNumber, int totalPage) { var grades = _db.Produtos.AsNoTracking().OrderBy(c => c.Descricao).ToPagedList(pageNumber, totalPage); var resultado = (from g in grades join pt in _db.ProdutoTamanhos.AsNoTracking() on g.Id equals pt.ProdutoId join pc in _db.ProdutoCores.AsNoTracking() on pt.Id equals pc.ProdutoTamanhoId join pi in _db.ProdutoImagens.AsNoTracking() on pc.Id equals pi.ProdutoCorId join p in _db.ProdutosMontados.AsNoTracking() on g.Id equals p.ProdutoId where p.ProdutoTamanhoId == pt.Id && p.ProdutoCorId == pc.Id && p.Publica == 1 select new { GId = g.Id, PtId = pt.Id, PcId = pc.Id, g.Descricao, Tamanho = pt.Tamanho.Descricao, Cor = pc.Cor.Descricao, pc.Cor.Hexadecimal, pc.Cor.HexadecimalCombinacao, CorImagem = pc.Cor.Imagem, pi.Imagem }).OrderBy(c => c.Descricao); // Informações da paginção do conteúdo. TempData["FirstItemOnPage"] = grades.FirstItemOnPage; TempData["HasNextPage"] = grades.HasNextPage; TempData["HasPreviousPage"] = grades.HasPreviousPage; TempData["IsFirstPage"] = grades.IsFirstPage; TempData["IsLastPage"] = grades.IsLastPage; TempData["LastItemOnPage"] = grades.LastItemOnPage; TempData["PageCount"] = grades.PageCount; TempData["PageNumber"] = grades.PageNumber; TempData["PageSize"] = grades.PageSize; TempData["TotalItemCount"] = grades.TotalItemCount; // Prepara estrutura da grade. IList <Produto> grade = new List <Produto>(); // Grupo de grades var gGrade = resultado.GroupBy(c => new { c.GId, c.Descricao }); foreach (var g in gGrade) { var produto = new Produto() { Id = g.Key.GId, Descricao = g.Key.Descricao }; // Grupo de tamanhos da grade var gTamanhos = g.GroupBy(c => new { c.PtId, c.Tamanho }); // Inicializa coleção de tamanhos da grade. if (produto.ProdutoTamanhos == null) { produto.ProdutoTamanhos = new List <ProdutoTamanho>(); } foreach (var t in gTamanhos) { var tamanho = new ProdutoTamanho() { Id = t.Key.PtId, Tamanho = new Tamanho() { Descricao = t.Key.Tamanho } }; // Grupo de cores. var gCores = t.GroupBy(c => new { c.PcId, c.Cor, c.Hexadecimal, c.HexadecimalCombinacao, c.CorImagem }); // Inicializa coleção de cores do tamanho if (tamanho.ProdutoCores == null) { tamanho.ProdutoCores = new List <ProdutoCor>(); } foreach (var c in gCores) { var cor = new ProdutoCor() { Id = c.Key.PcId, Cor = new Cor() { Descricao = c.Key.Cor, Hexadecimal = c.Key.Hexadecimal, HexadecimalCombinacao = c.Key.HexadecimalCombinacao, Imagem = c.Key.CorImagem }, ProdutoImagens = new List <ProdutoImagem>() { { new ProdutoImagem() { Imagem = c.First().Imagem } } } }; tamanho.ProdutoCores.Add(cor); } produto.ProdutoTamanhos.Add(tamanho); } grade.Add(produto); } return(grade); }