Beispiel #1
0
        //[ProducesResponseType(typeof(ReportTemplateResponse), StatusCodes.Status200OK)]
        public async Task <IActionResult> GetDayInfo([FromBody] ReportTemplateRequest req)
        {
            var response = new DayInfoRepsponse {
            };
            var date     = req.Date.Date;
            var user     = await _context.Users.FirstOrDefaultAsync(x => x.Id == req.UserId);

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

            var report = await _context.DailyReports
                         .FirstOrDefaultAsync(x => x.Date == date && x.UserId == req.UserId);


            if (report != null)
            {
                response.ReportState = (ReportState)report.State;
                response.Data        = await GetReportImpl(new ReportGetCommand { Date = date, UserId = req.UserId });
            }
            else
            {
                response.ReportState = ReportState.Empty;
                response.Data        = await GetTemplateImpl(new ReportTemplateRequest { Date = date, UserId = req.UserId });
            }

            response.HoursRequired = (int)(user.Rate * 8);

            return(Ok(response));
        }
Beispiel #2
0
        private async Task <object> GetTemplateImpl(ReportTemplateRequest req)
        {
            var date = req.Date.Date;
            var theLatestDayBefore = await _context.DailyReports
                                     .Where(x => x.Date <= date && x.UserId == req.UserId)
                                     .OrderByDescending(x => x.Date)
                                     .Include(x => x.ReportItems)
                                     .ThenInclude(x => x.Article)
                                     .ThenInclude(x => x.Project)
                                     .ThenInclude(x => x.Client)
                                     .FirstOrDefaultAsync();

            var data = new ReportTemplateResponse {
                Common = await GenerateDefaultTemplate()
            };

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

            if (theLatestDayBefore != null)
            {
                foreach (var elem in theLatestDayBefore.ReportItems
                         .Where(x => !x.Article.IsCommon).Select(x => x.Article))
                {
                    var client  = clients.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;
                }
            }

            foreach (var reportClientItem in clients)
            {
                foreach (var reportProjectItem in reportClientItem.Projects)
                {
                    reportProjectItem.Articles = reportProjectItem.Articles.Where(x => x.IsActive).ToList();
                }
            }

            data.Clients = clients;

            return(data);
        }