コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }