Get Average Weekly Duration query Handler
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
using GozareshgirProgramManager.Application._Common.Interfaces;
|
||||
using GozareshgirProgramManager.Application._Common.Models;
|
||||
using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Commands.CreateSalarySettings;
|
||||
using GozareshgirProgramManager.Domain.SalaryPaymentSettingAgg.Entities;
|
||||
|
||||
namespace GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Queries.GetAverageWeeklyDuration;
|
||||
|
||||
public class GetAverageWeeklyDurationQueryHandler : IBaseQueryHandler<GetAverageWeeklyDurationQuery, GetAverageWeeklyDurationResponse>
|
||||
{
|
||||
|
||||
|
||||
public async Task<OperationResult<GetAverageWeeklyDurationResponse>> Handle(GetAverageWeeklyDurationQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
TimeSpan shiftDurationResult = new TimeSpan();
|
||||
int shiftDurationInMinutesResult = 0;
|
||||
if (request.WorkingHoursList.Any())
|
||||
{
|
||||
var workingHoursList = request.WorkingHoursList.Where(x=> x.IsActiveDay).ToList();
|
||||
|
||||
|
||||
foreach (var item in workingHoursList)
|
||||
{
|
||||
var startShiftOne = new TimeSpan();
|
||||
var endShiftOne = new TimeSpan();
|
||||
var startShiftTwo = new TimeSpan();
|
||||
var endShiftTwo = new TimeSpan();
|
||||
var restTime = new TimeSpan();
|
||||
item.HasShiftOne = false;
|
||||
item.HasRestTime = false;
|
||||
item.HasShiftTow = false;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(item.StartShiftOne) && !string.IsNullOrWhiteSpace(item.EndShiftOne))
|
||||
{
|
||||
startShiftOne = TimeSpan.ParseExact(item.StartShiftOne, @"hh\:mm", null);
|
||||
endShiftOne = TimeSpan.ParseExact(item.EndShiftOne, @"hh\:mm", null);
|
||||
|
||||
item.HasShiftOne = true;
|
||||
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(item.RestTime))
|
||||
{
|
||||
try
|
||||
{
|
||||
restTime = TimeSpan.ParseExact(item.RestTime, @"hh\:mm", null);
|
||||
item.HasRestTime = true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
var zeroResponse = new GetAverageWeeklyDurationResponse(new TimeSpan(), 0);
|
||||
return OperationResult<GetAverageWeeklyDurationResponse>.Success(zeroResponse);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(item.StartShiftTwo) &&
|
||||
!string.IsNullOrWhiteSpace(item.EndShiftTwo))
|
||||
{
|
||||
item.HasRestTime = false;
|
||||
item.HasShiftTow = true;
|
||||
|
||||
startShiftTwo = TimeSpan.ParseExact(item.StartShiftTwo, @"hh\:mm", null);
|
||||
endShiftTwo = TimeSpan.ParseExact(item.EndShiftTwo, @"hh\:mm", null);
|
||||
}
|
||||
|
||||
var res = WorkingHours.ComputeShiftDuration(startShiftOne, endShiftOne, startShiftTwo,
|
||||
endShiftTwo, restTime, item.HasShiftOne, item.HasShiftTow, item.HasRestTime);
|
||||
|
||||
shiftDurationResult = shiftDurationResult.Add(res.shiftDuration);
|
||||
shiftDurationInMinutesResult += res.shiftDurationInMinutes;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
var response = new GetAverageWeeklyDurationResponse(shiftDurationResult, shiftDurationInMinutesResult);
|
||||
return OperationResult<GetAverageWeeklyDurationResponse>.Success(response);
|
||||
}
|
||||
}
|
||||
|
||||
public record GetAverageWeeklyDurationQuery(List<WorkingHoursListDto> WorkingHoursList) : IBaseQuery<GetAverageWeeklyDurationResponse>;
|
||||
|
||||
public record GetAverageWeeklyDurationResponse(TimeSpan AverageSpan, int AverageInt);
|
||||
Reference in New Issue
Block a user