diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/SalaryPaymentSettings/Queries/GetAverageWeeklyDuration/GetAverageWeeklyDurationQueryHandler.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/SalaryPaymentSettings/Queries/GetAverageWeeklyDuration/GetAverageWeeklyDurationQueryHandler.cs new file mode 100644 index 00000000..d4d548dc --- /dev/null +++ b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/SalaryPaymentSettings/Queries/GetAverageWeeklyDuration/GetAverageWeeklyDurationQueryHandler.cs @@ -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 +{ + + + public async Task> 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.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.Success(response); + } +} + +public record GetAverageWeeklyDurationQuery(List WorkingHoursList) : IBaseQuery; + +public record GetAverageWeeklyDurationResponse(TimeSpan AverageSpan, int AverageInt); \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs b/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs index bc4784e2..f4ed03b8 100644 --- a/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs +++ b/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs @@ -1,6 +1,7 @@ using GozareshgirProgramManager.Application._Common.Models; using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Commands.CreateSalarySettings; using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Commands.EditSalarySettings; +using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Queries.GetAverageWeeklyDuration; using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Queries.GetSalarySettingToEdit; using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Queries.GetUserListWhoHaveSettings; using GozareshgirProgramManager.Domain.SalaryPaymentSettingAgg.Enums; @@ -45,6 +46,15 @@ public class SalaryPaymentSettingsController : ProgramManagerBaseController return res; } + [HttpPost("GetAverageWeeklyDuration")] + public async Task>> GetAverageWeeklyDuration(GetAverageWeeklyDurationQuery command) + { + + var res = await _mediator.Send(command); + + return res; + } + [HttpPost("edit")] public async Task> Edit([FromBody] EditSalarySettingsCommand command) {