From 30c70c83b2f0a94f13f02ddb845fb330a61a1560 Mon Sep 17 00:00:00 2001 From: MahanCh Date: Tue, 13 May 2025 19:39:19 +0330 Subject: [PATCH] recalculte values group --- 0_Framework/Application/OperationResult.cs | 7 + .../CustomizeWorkshopEmployeeSettings.cs | 54 +++++++ .../ICustomizeWorkshopSettingsApplication.cs | 10 +- .../CustomizeWorkshopSettingsApplication.cs | 88 +++++++++++- ...omizeWorkshopEmployeeSettingsRepository.cs | 5 + .../Pages/Company/RollCall/Grouping.cshtml.cs | 8 +- .../Pages/Company/RollCall/Grouping.cshtml.cs | 4 +- .../Company/RollCall/ModalEditGroup.cshtml | 1 + .../ConfirmEditGroupTimeChangeModal.cshtml | 29 ++-- .../ConfirmEmployeeChangeModal.cshtml | 3 +- .../css/ConfirmEditGroupTimeChangeModal.css | 47 +++--- .../RollCall/js/ConfirmEmployeeChange.js | 48 +++++-- .../RollCall/js/ModalEditEmployeeGroup.js | 2 + .../pages/RollCall/js/ModalEditGroup.js | 135 ++++++++++-------- 14 files changed, 332 insertions(+), 109 deletions(-) diff --git a/0_Framework/Application/OperationResult.cs b/0_Framework/Application/OperationResult.cs index f37172bb..65b6b61e 100644 --- a/0_Framework/Application/OperationResult.cs +++ b/0_Framework/Application/OperationResult.cs @@ -51,4 +51,11 @@ public class OperationResult Message = message; return this; } + public OperationResult Failed(string message, T data) + { + IsSuccedded = false; + Message = message; + Data = data; + return this; + } } \ No newline at end of file diff --git a/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/Entities/CustomizeWorkshopEmployeeSettings.cs b/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/Entities/CustomizeWorkshopEmployeeSettings.cs index 964f70d9..d3db6404 100644 --- a/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/Entities/CustomizeWorkshopEmployeeSettings.cs +++ b/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/Entities/CustomizeWorkshopEmployeeSettings.cs @@ -213,6 +213,60 @@ public class CustomizeWorkshopEmployeeSettings : BaseCustomizeEntity earlyExit.EarlyExitTimeFines.Select(x => new EarlyExitTimeFine(x.Minute, x.FineMoney)) .ToList(), earlyExit.Value); } + public void UpdateIsShiftChange() + { + var groupSetting = CustomizeWorkshopGroupSettings; + if (groupSetting == null) + return; + bool isShiftChange; + if (WorkshopShiftStatus == WorkshopShiftStatus.Regular) + { + + + + if (CustomizeWorkshopEmployeeSettingsShifts.All(x => groupSetting.CustomizeWorkshopGroupSettingsShifts.Any(y => x.Equals(y))) + && WorkshopShiftStatus == groupSetting.WorkshopShiftStatus && FridayWork == groupSetting.FridayWork && + HolidayWork == groupSetting.HolidayWork && BreakTime == groupSetting.BreakTime) + { + isShiftChange = false; + } + + else + { + isShiftChange = true; + } + } + else if (WorkshopShiftStatus == WorkshopShiftStatus.Irregular) + { + if (WorkshopShiftStatus == groupSetting.WorkshopShiftStatus && BreakTime == groupSetting.BreakTime && + IrregularShift == groupSetting.IrregularShift && FridayWork == groupSetting.FridayWork && + HolidayWork == groupSetting.HolidayWork) + { + isShiftChange = false; + } + else + { + isShiftChange = true; + } + } + else + { + if (CustomizeRotatingShifts.All(x => groupSetting.CustomizeRotatingShifts.Any(y => x.Equals(y))) + && WorkshopShiftStatus == groupSetting.WorkshopShiftStatus && FridayWork == groupSetting.FridayWork && + HolidayWork == groupSetting.HolidayWork && BreakTime == groupSetting.BreakTime) + { + isShiftChange = false; + } + + else + { + isShiftChange = true; + } + + } + + IsShiftChanged = isShiftChange; + } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/CustomizeWorkshopSettings/ICustomizeWorkshopSettingsApplication.cs b/CompanyManagment.App.Contracts/CustomizeWorkshopSettings/ICustomizeWorkshopSettingsApplication.cs index 97bf7a29..46c5836e 100644 --- a/CompanyManagment.App.Contracts/CustomizeWorkshopSettings/ICustomizeWorkshopSettingsApplication.cs +++ b/CompanyManagment.App.Contracts/CustomizeWorkshopSettings/ICustomizeWorkshopSettingsApplication.cs @@ -33,7 +33,7 @@ public interface ICustomizeWorkshopSettingsApplication //Remove the Employee From the Group Settings OperationResult RemoveEmployeeFromRollCallWorkshopGroup(long employeeId, long groupId, long workshopId); - OperationResult EditSimpleRollCallGroupSetting(EditCustomizeWorkshopGroupSettings command); + OperationResult EditSimpleRollCallGroupSetting(EditCustomizeWorkshopGroupSettings command, List reCalculateCommand); #region Vafa OperationResult EditSimpleRollCallEmployeeSetting(EditCustomizeEmployeeSettings command, @@ -90,7 +90,13 @@ public interface ICustomizeWorkshopSettingsApplication List GetEmployeeSettingsByWorkshopId(long workshopId); CustomizeWorkshopGroupSettingsViewModel GetEmployeesGroupSettingsByEmployeeId(long employeeId, long workshopId); - + /// + /// این متد برای قبل از ویرایش گروهی و محاسبه مجدد گروهی استفاده میشود برای اینکه پرسنل هایی که دارای فیش هستند رو فرانت نمایش بده + /// + /// + /// + /// + OperationResult> ValidateReCalculateValueForGroupEdit(List command, long workshopId); bool HasAnyEmployeeWithoutGroup(long workshopId); /// diff --git a/CompanyManagment.Application/CustomizeWorkshopSettingsApplication.cs b/CompanyManagment.Application/CustomizeWorkshopSettingsApplication.cs index 18fd28e1..553a98fe 100644 --- a/CompanyManagment.Application/CustomizeWorkshopSettingsApplication.cs +++ b/CompanyManagment.Application/CustomizeWorkshopSettingsApplication.cs @@ -21,6 +21,10 @@ using System.Threading.Tasks; using System.Transactions; using CompanyManagment.App.Contracts.RollCall; using Microsoft.EntityFrameworkCore.Query; +using Company.Domain.CheckoutAgg; +using Company.Domain.CustomizeCheckoutAgg; +using Company.Domain.CustomizeCheckoutTempAgg; +using CompanyManagment.EFCore.Repository; namespace CompanyManagment.Application; @@ -30,7 +34,10 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo ICustomizeWorkshopGroupSettingsRepository customizeWorkshopGroupSettingsRepository, IEmployeeRepository employeeRepository, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, IRollCallEmployeeApplication rollCallEmployeeApplication, - IRollCallApplication rollCallAppllication) + IRollCallApplication rollCallAppllication, + ICheckoutRepository checkoutRepository, + ICustomizeCheckoutRepository customizeCheckoutRepository, + ICustomizeCheckoutTempRepository customizeCheckoutTempRepository) : ICustomizeWorkshopSettingsApplication { private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository; @@ -42,6 +49,9 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo private readonly ICameraAccountApplication _cameraAccountApplication = cameraAccountApplication; private readonly IRollCallEmployeeApplication _rollCallEmployeeApplication = rollCallEmployeeApplication; private readonly IRollCallApplication _rollCallApplication = rollCallAppllication; + private readonly ICheckoutRepository _checkoutRepository = checkoutRepository; + private readonly ICustomizeCheckoutRepository _customizeCheckoutRepository = customizeCheckoutRepository; + private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository = customizeCheckoutTempRepository; #region RollCallShifts @@ -670,7 +680,8 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo transActionScope.Complete(); return op.Succcedded(); } - public OperationResult EditSimpleRollCallGroupSetting(EditCustomizeWorkshopGroupSettings command) + public OperationResult EditSimpleRollCallGroupSetting(EditCustomizeWorkshopGroupSettings command, + List reCalculateCommand) { OperationResult op = new(); @@ -689,9 +700,11 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo var workshopSettings = _customizeWorkshopSettingsRepository.Get(entity.CustomizeWorkshopSettingId); - var employeeIds = command.IsShiftChanged ? entity.CustomizeWorkshopEmployeeSettingsCollection - .Select(x => x.id).ToList() : entity.CustomizeWorkshopEmployeeSettingsCollection.Where(x => !x.IsShiftChanged) - .Select(x => x.id).ToList(); + //var employeeIds = command.IsShiftChanged ? entity.CustomizeWorkshopEmployeeSettingsCollection + // .Select(x => x.id).ToList() : entity.CustomizeWorkshopEmployeeSettingsCollection.Where(x => !x.IsShiftChanged) + // .Select(x => x.id).ToList(); + + var groupSettingsShifts = new List(); ICollection rotatingShift = []; bool isChanged; @@ -708,7 +721,7 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo return new CustomizeWorkshopGroupSettingsShift(start, end, x.Placement); }).ToList(); - ; + if (groupSettingsShifts.All(x => workshopSettings.CustomizeWorkshopSettingsShifts.Any(y => x.Equals(y))) && command.WorkshopShiftStatus == workshopSettings.WorkshopShiftStatus && command.FridayWork == workshopSettings.FridayWork && command.HolidayWork == workshopSettings.HolidayWork && @@ -782,10 +795,38 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo var breakTime = new BreakTime(command.BreakTime.HasBreakTimeValue, command.BreakTime.BreakTimeValue); - entity.EditSimpleAndOverwriteOnEmployee(command.Name, employeeIds, groupSettingsShifts, command.WorkshopShiftStatus, + var employeeSettings = entity.CustomizeWorkshopEmployeeSettingsCollection; + + var employeeSettingIds = employeeSettings.Select(x => x.EmployeeId).ToList(); + + reCalculateCommand = reCalculateCommand.Where(x => employeeSettingIds.Contains(x.EmployeeId)).ToList(); + + var selectedEmployeesIds = reCalculateCommand.Select(x => x.EmployeeId).ToList(); + + var notSelectedEmployeeSettings = employeeSettings.Where(x => !selectedEmployeesIds.Contains(x.EmployeeId)); + + using var transaction = new TransactionScope(); + + entity.EditSimpleAndOverwriteOnEmployee(command.Name, selectedEmployeesIds, groupSettingsShifts, command.WorkshopShiftStatus, command.IrregularShift, breakTime, isChanged, command.FridayWork, command.HolidayWork, rotatingShift); + if (reCalculateCommand.Count > 0) + { + var result = _rollCallApplication.RecalculateValues(workshopSettings.WorkshopId, reCalculateCommand); + + if (result.IsSuccedded == false) + { + return result; + } + } + + foreach (var notSelectedEmployeeSetting in notSelectedEmployeeSettings) + { + notSelectedEmployeeSetting.UpdateIsShiftChange(); + } _customizeWorkshopGroupSettingsRepository.SaveChanges(); + + transaction.Complete(); return op.Succcedded(); } public OperationResult EditSimpleRollCallEmployeeSetting(EditCustomizeEmployeeSettings command, @@ -1552,7 +1593,40 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo { return _customizeWorkshopGroupSettingsRepository.HasAnyEmployeeWithoutGroup(workshopId); } + public OperationResult> ValidateReCalculateValueForGroupEdit(List commands, + long workshopId) + { + var operationResult = new OperationResult>(); + bool isSuccess = true; + List employeeIdsHasCheckout = []; + foreach (var command in commands) + { + var fromDateGr = command.FromDate.ToGeorgianDateTime(); + if (_checkoutRepository.Exists(x => x.WorkshopId == workshopId && x.EmployeeId == command.EmployeeId && fromDateGr <= x.ContractStart)) + { + isSuccess = false; + employeeIdsHasCheckout.Add(command.EmployeeId); + } + if (_customizeCheckoutRepository.Exists(x => x.WorkshopId == workshopId && x.EmployeeId == command.EmployeeId && fromDateGr <= x.ContractStart)) + { + isSuccess = false; + employeeIdsHasCheckout.Add(command.EmployeeId); + } + + if (_customizeCheckoutTempRepository.Exists(x => x.WorkshopId == workshopId && x.EmployeeId == command.EmployeeId && fromDateGr <= x.ContractStart)) + { + isSuccess = false; + employeeIdsHasCheckout.Add(command.EmployeeId); + } + } + + employeeIdsHasCheckout = employeeIdsHasCheckout.Distinct().ToList(); + return isSuccess ? + operationResult.Succcedded(employeeIdsHasCheckout) + : + operationResult.Failed("پرسنل هایی دارای فیش هستند لطفا نسبت به تعیین تکلیف این ها اقدام نمایید", employeeIdsHasCheckout); + } public bool CheckEmployeeShiftHasChanged(EditCustomizeEmployeeSettings command) { return _customizeWorkshopEmployeeSettingsRepository.CheckEmployeeShiftHasChanged(command); diff --git a/CompanyManagment.EFCore/Repository/CustomizeWorkshopEmployeeSettingsRepository.cs b/CompanyManagment.EFCore/Repository/CustomizeWorkshopEmployeeSettingsRepository.cs index 33bcd3df..ad761f28 100644 --- a/CompanyManagment.EFCore/Repository/CustomizeWorkshopEmployeeSettingsRepository.cs +++ b/CompanyManagment.EFCore/Repository/CustomizeWorkshopEmployeeSettingsRepository.cs @@ -196,6 +196,11 @@ public class CustomizeWorkshopEmployeeSettingsRepository(CompanyContext companyC return true; } + if (command.BreakTime.BreakTimeValue != employeeSettings.BreakTime.BreakTimeValue || command.BreakTime.HasBreakTimeValue != employeeSettings.BreakTime.HasBreakTimeValue) + { + return true; + } + switch (employeeSettings.WorkshopShiftStatus) { case WorkshopShiftStatus.Irregular: diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/RollCall/Grouping.cshtml.cs b/ServiceHost/Areas/AdminNew/Pages/Company/RollCall/Grouping.cshtml.cs index 29fc8aa7..8b2639dc 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/RollCall/Grouping.cshtml.cs +++ b/ServiceHost/Areas/AdminNew/Pages/Company/RollCall/Grouping.cshtml.cs @@ -130,11 +130,11 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.RollCall return Partial("ModalEditGroup", command); } - public IActionResult OnPostEditGroup(EditCustomizeWorkshopGroupSettings command) - { - var result = _customizeWorkshopSettingsApplication.EditSimpleRollCallGroupSetting(command); + public IActionResult OnPostEditGroup(EditCustomizeWorkshopGroupSettings command, List reCalculateCommand) + { + var result = _customizeWorkshopSettingsApplication.EditSimpleRollCallGroupSetting(command, reCalculateCommand); - return new JsonResult(new + return new JsonResult(new { success = result.IsSuccedded, message = result.Message diff --git a/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml.cs b/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml.cs index 43658362..25a4917d 100644 --- a/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml.cs +++ b/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml.cs @@ -152,9 +152,9 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall return Partial("ModalEditGroup", command); } - public IActionResult OnPostEditGroup(EditCustomizeWorkshopGroupSettings command) + public IActionResult OnPostEditGroup(EditCustomizeWorkshopGroupSettings command, List reCalculateCommand) { - var result = _customizeWorkshopSettingsApplication.EditSimpleRollCallGroupSetting(command); + var result = _customizeWorkshopSettingsApplication.EditSimpleRollCallGroupSetting(command, reCalculateCommand); return new JsonResult(new { diff --git a/ServiceHost/Areas/Client/Pages/Company/RollCall/ModalEditGroup.cshtml b/ServiceHost/Areas/Client/Pages/Company/RollCall/ModalEditGroup.cshtml index 4f66e0e5..00728add 100644 --- a/ServiceHost/Areas/Client/Pages/Company/RollCall/ModalEditGroup.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/RollCall/ModalEditGroup.cshtml @@ -481,6 +481,7 @@ var indexShiftViewModel = Number(@indexShiftViewModel); var indexShiftViewModelRS = Number(@indexShiftViewModel); + var ajaxEmployeeSettingsHasChangedValueUrl = `@Url.Page("./Grouping", "EmployeeSettingsHasChangedValue")`; var groupId = Number(@Model.Id); var IsRegularWorkshop = @(Model.WorkshopShiftStatus == WorkshopShiftStatus.Regular ? 0 : Model.WorkshopShiftStatus == WorkshopShiftStatus.Irregular ? 1 : 2); diff --git a/ServiceHost/Areas/Client/Pages/Company/RollCall/_Partials/ConfirmEditGroupTimeChangeModal.cshtml b/ServiceHost/Areas/Client/Pages/Company/RollCall/_Partials/ConfirmEditGroupTimeChangeModal.cshtml index 398624f8..409834c4 100644 --- a/ServiceHost/Areas/Client/Pages/Company/RollCall/_Partials/ConfirmEditGroupTimeChangeModal.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/RollCall/_Partials/ConfirmEditGroupTimeChangeModal.cshtml @@ -8,10 +8,9 @@