//[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)); }
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); }