// called by the background service every 24 hours // not performance important, can take as long as it needs as work is done on inexpensive background thread. public async Task <bool> SaveDailyChartData() { try { var boardIds = await _context.Boards.Where(b => b.IsActive == true) .Select(i => i.Id) .ToListAsync(); foreach (var boardId in boardIds) { var loggedTimes = await _context.AgileItems.Where(s => s.BoardId == boardId && s.IsActive == true).Select(t => t.LoggedTime).ToListAsync(); int totalTime = 0; foreach (var loggedTime in loggedTimes) { if (loggedTime != null) { totalTime += Convert.ToInt32(loggedTime); } } var completeTasks = await _context.AgileItems.Where(s => s.BoardId == boardId == s.IsActive == true && s.Status == Models.Types.Status.Complete).CountAsync(); var dailyData = new DailyDataDto { Id = Guid.NewGuid(), BoardId = boardId, Date = DateTime.Now, LoggedHours = totalTime, TasksComplete = completeTasks, }; _context.DailyData.Add(dailyData); await _context.SaveChangesAsync(); } return(true); } catch (Exception e) { // exception saving daily data } return(false); }
private DailyData ValidateAndReturnDailyDataEntities(DailyDataDto data) { var adminAreaId = GetAdminAreaId(data.Account); var result = new DailyData { AdminAreaId = adminAreaId, Girls = ValidateAndReturnGirls(data.Girls), Managers = ValidateAndReturnManagers(data.Managers), Gifts = ValidateAndReturnGifts(data.Gifts, adminAreaId), Men = ValidateAndReturnMen(data.Men), Payments = ValidateAndReturnPayments(data.PaymentsStatistic, adminAreaId), GirlsPassportScans = ValidateAndReturnGirlsPassportScans(data.Girls), GirlImages = ValidateAndReturnGirlsImages(data.Girls), ManagersGirls = GetManagersGirlsReference(data.Girls), Orders = ValidateAndReturnOrders(data.Gifts), GiftOrders = ValidateAndReturnGiftOrders(data.Gifts) }; return(result); }
public HttpResponseMessage UploadDailyData(DailyDataDto data) { _logger.Info("DataSaverController.UploadDailyData"); try { _dailyDataService.UpdateDailyData(data); return(new HttpResponseMessage(HttpStatusCode.OK)); } catch (PrimeDatingException ex) { _logger.WarningException(ex.Message, ex); return(Request.CreateResponse(HttpStatusCode.BadRequest, ex.GetErrorMessage())); } catch (DbEntityValidationException ex) { var message = new StringBuilder(); message.AppendLine("Validation Error:"); foreach (var validationError in ex.EntityValidationErrors.SelectMany(t => t.ValidationErrors)) { message.AppendLine( $"PropertyName: {validationError.PropertyName}, Error: {validationError.ErrorMessage}"); } _logger.ErrorException($"{ex.Message}. {message}", ex); return(Request.CreateResponse(HttpStatusCode.BadRequest, $"{ex.GetErrorMessage()}. {message}")); } catch (Exception ex) { _logger.ErrorException(ex.Message, ex); return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.GetErrorMessage())); } }
public void UpdateDailyData(DailyDataDto data) { var dailyData = ValidateAndReturnDailyDataEntities(data); UpdateManagersData(dailyData.Managers, dailyData.AdminAreaId); UpdateGirlsData(dailyData.Girls, dailyData.AdminAreaId); UpdateGirlsPassportScans(dailyData.GirlsPassportScans); UpdateGirlsImages(dailyData.GirlImages); UpdateManagersGirlsReference(dailyData.ManagersGirls); UpdateMenData(dailyData.Men); UpdateOrdersData(dailyData.Orders); UpdateGiftsData(dailyData.Gifts); UpdateGiftOrdersData(dailyData.GiftOrders); UpdatePaymentsData(dailyData.Payments); }