コード例 #1
0
        public async Task <IActionResult> GetReport([FromBody] ReportGetCommand req)
        {
            // TODO: Date checks & mapping queries
            var userId = req.UserId;
            var date   = req.Date.Date;

            var user = await _context.Users.AnyAsync(x => x.Id == userId);

            if (!user)
            {
                return(BadRequest("User wasn't found"));
            }

            var dailyReport = await _context.DailyReports
                              .Include(x => x.ReportItems)
                              .ThenInclude(x => x.Article)
                              .ThenInclude(x => x.Project)
                              .ThenInclude(x => x.Client)
                              .FirstOrDefaultAsync(x => x.UserId == userId && x.Date == date);

            if (dailyReport == null)
            {
                return(BadRequest("Report wasn't found"));
            }


            var itemsByClient = dailyReport.ReportItems.Where(x => !x.Article.IsCommon).GroupBy(x => x.Article.Project.Client).Distinct();
            var clients       = itemsByClient.Select(x => new
            {
                x.Key.Id,
                x.Key.Name,
                Projects = x.GroupBy(x => x.Article.Project).Select(x =>
                                                                    new {
                    x.Key.Id,
                    x.Key.Name,
                    Articles = x.Select(x => new
                    {
                        x.Article.Name,
                        x.Article.Id,
                        x.HoursConsumption
                    })
                })
            });


            var common = new List <ArticleInfo>();

            foreach (var x in _context.ConsumptionArticles.Where(x => x.IsCommon))
            {
                var artInfo = new ArticleInfo
                {
                    Id               = x.Id,
                    Name             = x.Name,
                    HoursConsumption = null
                };
                var art = dailyReport.ReportItems.FirstOrDefault(a => a.Article.Id == x.Id);
                if (art != null)
                {
                    artInfo.HoursConsumption = art.HoursConsumption;
                }

                common.Add(artInfo);
            }

            return(Ok(new { common, clients }));
        }
コード例 #2
0
        private async Task <object> GetReportImpl(ReportGetCommand req)
        {
            var userId = req.UserId;
            var date   = req.Date.Date;

            var user = await _context.Users.AnyAsync(x => x.Id == userId);

            if (!user)
            {
                return(BadRequest("User wasn't found"));
            }

            var dailyReport = await _context.DailyReports
                              .Include(x => x.ReportItems)
                              .ThenInclude(x => x.Article)
                              .ThenInclude(x => x.Project)
                              .ThenInclude(x => x.Client)
                              .FirstOrDefaultAsync(x => x.UserId == userId && x.Date == date);

            if (dailyReport == null)
            {
                return(BadRequest("Report wasn't found"));
            }

            var clientsAll = await _context.Clients
                             .ProjectTo <ReportClientItem>(_mapper.ConfigurationProvider)
                             .ToListAsync();

            var itemsByClient = dailyReport.ReportItems
                                .Where(x => !x.Article.IsCommon)
                                .GroupBy(x => x.Article.Project.Client)
                                .Distinct();


            foreach (var elem in dailyReport.ReportItems.Where(x => !x.Article.IsCommon).Select(x => x.Article))
            {
                var client  = clientsAll.FirstOrDefault(x => x.Id == elem.Project.ClientId);
                var project = client.Projects.FirstOrDefault(x => x.Id == elem.Project.Id);
                var article = project.Articles.FirstOrDefault(x => x.Id == elem.Id);
                client.IsChecked  = true;
                project.IsChecked = true;
                article.IsChecked = true;
            }

            var clients = clientsAll.Select(x => new
            {
                x.Id,
                x.Name,
                x.IsChecked,
                Projects = x.Projects.Select(x => new
                {
                    x.Id,
                    x.Name,
                    x.IsChecked,
                    Articles = x.Articles.Select(x => new
                    {
                        x.Id,
                        x.Name,
                        x.IsChecked,
                        HoursConsumption = GetHoursConsumptionIsChecked(x, dailyReport)
                    })
                })
            });

            var common = new List <ArticleInfo>();

            foreach (var x in _context.ConsumptionArticles.Where(x => x.IsCommon))
            {
                var artInfo = new ArticleInfo
                {
                    Id               = x.Id,
                    Name             = x.Name,
                    HoursConsumption = null
                };
                var art = dailyReport.ReportItems.FirstOrDefault(a => a.Article.Id == x.Id);
                if (art != null)
                {
                    artInfo.HoursConsumption = art.HoursConsumption;
                }

                common.Add(artInfo);
            }

            return(new { common, clients });
        }