示例#1
0
        public async Task <RankingViewModel> GetRankingClientes(int?ano)
        {
            try
            {
                //Lista de vendas
                var vendas = new DataAccess.VendaDataAccess().GetList();

                //Filtro
                var filter = vendas.AsEnumerable().Where(x => (ano == null || x.dtVenda.Year == ano)).ToList();

                //Ranking
                var ranking = from venda in filter
                              group venda by venda.nuCNPJ into vendasGroup
                              select new
                {
                    cnpj       = vendasGroup.Key,
                    qtdeVendas = vendasGroup.Count(),
                    vendas     = vendasGroup
                };
                //Ordenação
                ranking = ranking.OrderByDescending(x => x.qtdeVendas);

                //Transformo o objeto anônimo em viewmodel
                var     rankingView   = new RankingViewModel();
                decimal vrTotalVendas = 0;
                var     nmCliente     = string.Empty;

                foreach (var item in ranking)
                {
                    var vendaModelList = new List <VendaModel>();

                    foreach (var itemVenda in item.vendas)
                    {
                        var produto = new ProdutoBusiness().Get(itemVenda.idProduto);
                        if (produto != null)
                        {
                            var vrProduto = produto.vrProduto.Split('$')[1];
                            vrTotalVendas = vrTotalVendas + decimal.Parse(vrProduto);
                            var vendaModel = new VendaModel(itemVenda.nuCNPJ, itemVenda.dtVenda, itemVenda.idProduto, produto.nmProduto, vrProduto);

                            vendaModelList.Add(vendaModel);
                        }
                    }

                    var cliente = await new ClienteBusiness().Get(item.cnpj);

                    nmCliente = cliente.icSucesso ? string.IsNullOrEmpty(cliente.nmCliente) ? cliente.nmFantasia : cliente.nmCliente : "Cliente não localizado";

                    var vendaViewModel = new VendaViewModel();
                    vendaViewModel.Vendas = vendaModelList;
                    var itemRank = new RankingModel(item.qtdeVendas, vrTotalVendas, nmCliente, vendaViewModel);
                    rankingView.Ranking.Add(itemRank);

                    vrTotalVendas = 0;
                }

                return(rankingView);
            }
            catch (Exception e)
            {
                return(new RankingViewModel(e.Message));
            }
        }