public OrdensVenda GetResumed(int idCliente, List <int> ano, int group1 = 0, int group2 = 0, List <int> lgroup = null) { var ctx = new DesenvContext(); var status = new int[] { 0, 1, 2, 5 }.ToList(); List <int> produtos = new List <int>(); if (group1 > 0) { produtos.Add(group1); } if (group2 > 0) { produtos.Add(group2); } if (lgroup != null && lgroup.Count() > 0) { produtos.AddRange(lgroup); } List <OrdemVenda> consulta = (from so in ctx.tblSellOrders join d in ctx.tblSellOrderDetails on so.intOrderID equals d.intOrderID join p in ctx.tblProducts on d.intProductID equals p.intProductID join c in ctx.tblCourses on d.intProductID equals c.intCourseID where so.intClientID == idCliente && so.intStatus != 1 && ano.Contains(c.intYear.Value) && ( (produtos.Count() == 0) || (produtos.Count() > 0 && produtos.Contains(p.intProductGroup1.Value)) ) orderby so.intOrderID descending select new OrdemVenda { ID = so.intOrderID, IdCliente = so.intClientID, IdFilial = so.intStoreID, Status = (OrdemVenda.StatusOv)so.intStatus, Status2 = (OrdemVenda.StatusOv)so.intStatus2, /////Data = it.dteDate ?? DateTime.MinValue, Descricao = so.txtComment, IdCondicaoPagamento = so.intConditionTypeID ?? -1, IdMethodoEnvio = so.intShippingMethodID ?? -1, IdVendedor = so.intSellerID ?? -1, IdTermo = so.intAgreementID ?? -1, IsParcelado = false, TxtRegister = "", IdProduto = ctx.tblSellOrderDetails.Where(sd => sd.intOrderID == so.intOrderID).Count() == 1 ? p.intProductID : 0, Year = c.intYear ?? 0, GroupID = p.intProductGroup1 ?? 0, // IdCombo = ctx.tblSellOrderDetails.Where(sd => sd.intOrderID == so.intOrderID).Count() > 1 ? //sÓ FAZ SE FOR COMBO // ctx.tblProductCombos_Products // .Where(combo => ctx.tblSellOrderDetails // .Any(sd => sd.intOrderID == so.intOrderID && sd.intProductID.Equals(combo.intProductID))) //PEGO TODA A RELAÇÃO PRODUTO X COMBOS QUE POSSUEM O ALGUM ID DE PRODUTO DA OV // .GroupBy(x => x.intComboID) //AGRUPO POR ID DE COMBO // .Select(x => new // { // qtdProdutosCombo = ctx.tblProductCombos_Products // .Where(cp => cp.intComboID == x.Key) // .Select(j => j.intProductID).Count(), // qtdProdutosComboNaOV = x.Distinct().Count(), // IdCombo = x.Key // }) // VEJO A QUANTIDADE DE PRODUTOS POR COMBO e a quantidade de produtos do combo presentes na OV // .Where(y => y.qtdProdutosCombo.Equals(y.qtdProdutosComboNaOV) && y.qtdProdutosCombo.Equals(ctx.tblProducts // .Where(produto => ctx.tblSellOrderDetails // .Any(sd => sd.intOrderID == so.intOrderID && sd.intProductID.Equals(produto.intProductID))) // .Count())) //Filtra os combos com todos os produtos do combo na OV e a mesma qtdade de produtos que a OV // .Select(x => x.IdCombo).DefaultIfEmpty(0).FirstOrDefault() : 0 } ).ToList(); OrdensVenda ov = new OrdensVenda(); ov.AddRange(consulta.Select(x => new OrdemVenda { ID = x.ID, IdCliente = x.IdCliente, IdFilial = x.IdFilial, Status = x.Status, Status2 = x.Status2, /////Data = it.dteDate ?? DateTime.MinValue, Descricao = x.Descricao, IdCondicaoPagamento = x.IdCondicaoPagamento, IdMethodoEnvio = x.IdMethodoEnvio, IdVendedor = x.IdVendedor, IdTermo = x.IdTermo, IsParcelado = x.IsParcelado, TxtRegister = x.TxtRegister, GroupID = x.GroupID, Year = x.Year, IdProduto = x.IdCombo == 0 ? x.IdProduto : 0, IdCombo = x.IdCombo }).Distinct()); foreach (var o in ov) { if (o.IdCombo > 0) { var produtosCombo = new ProdutoEntity().GetComboProdutos(o.IdCombo); o.ProductIDs = produtosCombo.Select(p => p.ID).ToList(); } else { o.ProductIDs = consulta.Where(c => c.ID == o.ID).Select(z => z.IdProduto).Distinct().ToList(); } } return(ov); }
public OrdensVenda GetOrdensVenda(int idCliente, List <int> ano, int group1, int group2) { var ctx = new DesenvContext(); var status = new int[] { 0, 2, 5 }.ToList();//Somente status de OV que consideramos List <int> produtos = new List <int>(); if (group1 > 0) { produtos.Add(group1); } if (group2 > 0) { produtos.Add(group2); } List <OrdemVenda> consulta = (from so in ctx.tblSellOrders //join s in status on so.intStatus equals s join d in ctx.tblSellOrderDetails on so.intOrderID equals d.intOrderID join p in ctx.tblProducts on d.intProductID equals p.intProductID join c in ctx.tblCourses on d.intProductID equals c.intCourseID where so.intClientID == idCliente && ano.Contains(c.intYear.Value) && ( (produtos.Count() == 0) || (produtos.Count() > 0 && produtos.Contains(p.intProductGroup1.Value)) ) orderby so.intOrderID descending select new OrdemVenda { ID = so.intOrderID, IdCliente = so.intClientID, IdFilial = so.intStoreID, Status = (OrdemVenda.StatusOv)so.intStatus, Status2 = (OrdemVenda.StatusOv)so.intStatus2, /////Data = it.dteDate ?? DateTime.MinValue, Descricao = so.txtComment, IdCondicaoPagamento = so.intConditionTypeID ?? -1, IdMethodoEnvio = so.intShippingMethodID ?? -1, IdVendedor = so.intSellerID ?? -1, IdTermo = so.intAgreementID ?? -1, IsParcelado = false, TxtRegister = "", IdProduto = ctx.tblSellOrderDetails.Where(sd => sd.intOrderID == so.intOrderID).Count() == 1 ? p.intProductID : 0, GroupID = p.intProductGroup1 ?? 0, Year = c.intYear ?? 0, IdCombo = ctx.tblSellOrderDetails.Where(sd => sd.intOrderID == so.intOrderID).Count() > 1 ? ctx.tblProductCombos_Products .Where(combo => ctx.tblSellOrderDetails .Any(sd => sd.intOrderID == so.intOrderID && sd.intProductID.Equals(combo.intProductID))) .GroupBy(x => x.intComboID) .Select(x => new { qtd = x.Count(), IdCombo = x.Key }) .Where(y => y.qtd.Equals(ctx.tblProducts .Where(produto => ctx.tblSellOrderDetails .Any(sd => sd.intOrderID == so.intOrderID && sd.intProductID.Equals(produto.intProductID))) .Count())) .Select(x => x.IdCombo).FirstOrDefault() : 0 } ).ToList(); OrdensVenda ov = new OrdensVenda(); ov.AddRange(consulta.Select(x => new OrdemVenda { ID = x.ID, IdCliente = x.IdCliente, IdFilial = x.IdFilial, Status = x.Status, Status2 = x.Status2, /////Data = it.dteDate ?? DateTime.MinValue, Descricao = x.Descricao, IdCondicaoPagamento = x.IdCondicaoPagamento, IdMethodoEnvio = x.IdMethodoEnvio, IdVendedor = x.IdVendedor, IdTermo = x.IdTermo, IsParcelado = x.IsParcelado, TxtRegister = x.TxtRegister, GroupID = x.GroupID, Year = x.Year, IdProduto = x.IdCombo == 0 ? x.IdProduto : 0, IdCombo = x.IdCombo }).Distinct()); ov.ForEach(y => y.ProductIDs = consulta.Where(c => c.ID == y.ID).Select(z => z.IdProduto).Distinct().ToList()); return(ov); }