Пример #1
0
        internal async Task UpdateTotalHoursFromWorkDayAsync(UpdateTotalHoursFromWorkDayMessage message, CancellationToken cancellationToken)
        {
            using (var scope = _serviceProvider.CreateScope())
            {
                using (var context = scope.ServiceProvider.GetRequiredService <AppDbContext>())
                {
                    var workDay = await context.WorkDays.Include(x => x.WorkingPeriods).Include(wd => wd.Contract).FirstOrDefaultAsync(x => x.Id == message.WorkdayId, cancellationToken);

                    if (workDay == null)
                    {
                        _logger.LogInformation("No work day found for id {WorkdayId}", message.WorkdayId);
                        return;
                    }

                    if (workDay.WorkingPeriods.Count == 0)
                    {
                        context.WorkDays.Remove(workDay);

                        await context.SaveChangesAsync();

                        _logger.LogInformation("Workday of {workDayDate} didn't have any work periods and was deleted.", workDay.Date);

                        return;
                    }

                    workDay.TotalHours = CalculateTotalHoursFromWorkDay(workDay);

                    await UpdateTotalOverhoursOfContract(context, workDay.Contract.UserId);

                    await context.SaveChangesAsync();

                    _logger.LogInformation("Processed {workDayDate} via queue.", workDay.Date);
                }
            }
        }
        public async Task Index_Runs_RecalculateHoursOfUserAsync()
        {
            var handlerRequest = new DeleteWorkingPeriodRequest(new() { });

            await _handler.Handle(handlerRequest, CancellationToken.None);

            var request = new UpdateTotalHoursFromWorkDayMessage(4);
            await _worker.UpdateTotalHoursFromWorkDayAsync(request, CancellationToken.None);
        }