From 179ff95d54f014dc15a6d35f41567a119eab2426 Mon Sep 17 00:00:00 2001 From: MahanCh Date: Wed, 3 Sep 2025 15:22:55 +0330 Subject: [PATCH 01/14] fix: normalize file extension check to lowercase --- CompanyManagment.Application/EmployeeDocumentsApplication.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CompanyManagment.Application/EmployeeDocumentsApplication.cs b/CompanyManagment.Application/EmployeeDocumentsApplication.cs index a84392b8..bce8a935 100644 --- a/CompanyManagment.Application/EmployeeDocumentsApplication.cs +++ b/CompanyManagment.Application/EmployeeDocumentsApplication.cs @@ -1735,7 +1735,7 @@ namespace CompanyManagment.Application if (file.Length > (50 * 1024 * 1024)) return op.Failed("حجم فایل نمی تواند بیشتر از 50 مگابایت باشد"); - if (!allowedExtensions.Contains(fileExtension)) + if (!allowedExtensions.Contains(fileExtension.ToLower())) { var operationMessage = ":فرمت فایل باید یکی از موارد زیر باشد"; operationMessage += "\n"; From 9cd00a188624317be2ae4cda6b2835ef3c31f989 Mon Sep 17 00:00:00 2001 From: SamSys Date: Sun, 7 Sep 2025 05:25:46 +0330 Subject: [PATCH 02/14] test --- CompanyManagment.App.Contracts/ContactUs/test1.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 CompanyManagment.App.Contracts/ContactUs/test1.cs diff --git a/CompanyManagment.App.Contracts/ContactUs/test1.cs b/CompanyManagment.App.Contracts/ContactUs/test1.cs new file mode 100644 index 00000000..69ed851c --- /dev/null +++ b/CompanyManagment.App.Contracts/ContactUs/test1.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CompanyManagment.App.Contracts.ContactUs +{ + class test1 + { + } +} From 1daaeff194b7f944d9f0477686e2a1b4ed35e96f Mon Sep 17 00:00:00 2001 From: SamSys Date: Sun, 7 Sep 2025 05:29:07 +0330 Subject: [PATCH 03/14] test 2 --- CompanyManagment.App.Contracts/ContactUs/test2.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 CompanyManagment.App.Contracts/ContactUs/test2.cs diff --git a/CompanyManagment.App.Contracts/ContactUs/test2.cs b/CompanyManagment.App.Contracts/ContactUs/test2.cs new file mode 100644 index 00000000..f1bfb5e3 --- /dev/null +++ b/CompanyManagment.App.Contracts/ContactUs/test2.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CompanyManagment.App.Contracts.ContactUs +{ + class test2 + { + } +} From 58c015b151737736f041451d444723022038bd3f Mon Sep 17 00:00:00 2001 From: MahanCh Date: Sun, 7 Sep 2025 17:22:01 +0330 Subject: [PATCH 04/14] fix: remove unnecessary whitespace in development environment check --- ServiceHost/Program.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/ServiceHost/Program.cs b/ServiceHost/Program.cs index bd2e195b..5df65d59 100644 --- a/ServiceHost/Program.cs +++ b/ServiceHost/Program.cs @@ -314,6 +314,7 @@ app.UseCors("AllowSpecificOrigins"); //the backend Tester if (builder.Environment.IsDevelopment()) + { using var scope = app.Services.CreateScope(); var tester = scope.ServiceProvider.GetRequiredService(); From ca350aa795bed83dfbac19732b5a7763cc365928 Mon Sep 17 00:00:00 2001 From: SamSys Date: Mon, 8 Sep 2025 00:40:17 +0330 Subject: [PATCH 05/14] delete test files --- CompanyManagment.App.Contracts/ContactUs/test1.cs | 12 ------------ CompanyManagment.App.Contracts/ContactUs/test2.cs | 12 ------------ 2 files changed, 24 deletions(-) delete mode 100644 CompanyManagment.App.Contracts/ContactUs/test1.cs delete mode 100644 CompanyManagment.App.Contracts/ContactUs/test2.cs diff --git a/CompanyManagment.App.Contracts/ContactUs/test1.cs b/CompanyManagment.App.Contracts/ContactUs/test1.cs deleted file mode 100644 index 69ed851c..00000000 --- a/CompanyManagment.App.Contracts/ContactUs/test1.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace CompanyManagment.App.Contracts.ContactUs -{ - class test1 - { - } -} diff --git a/CompanyManagment.App.Contracts/ContactUs/test2.cs b/CompanyManagment.App.Contracts/ContactUs/test2.cs deleted file mode 100644 index f1bfb5e3..00000000 --- a/CompanyManagment.App.Contracts/ContactUs/test2.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace CompanyManagment.App.Contracts.ContactUs -{ - class test2 - { - } -} From 1c6b0ac292a5992a455374a62fee216aab82519d Mon Sep 17 00:00:00 2001 From: SamSys Date: Mon, 8 Sep 2025 01:04:02 +0330 Subject: [PATCH 06/14] test miror --- Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs index b9c58e62..1e67bc01 100644 --- a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs +++ b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs @@ -10,6 +10,7 @@ namespace Company.Domain.ClassifiedSalaryAgg { public class ClassifiedSalary : EntityBase { + //test//test public ClassifiedSalary(double group1, double group2, double group3, double group4, double group5, double group6, double group7, double group8, double group9, double group10, double group11, double group12, double group13, double group14, double group15, double group16, double group17, double group18, double group19, double group20, DateTime startDate, DateTime endDate, int year) { Group1 = group1; From e80621280c4e60e330cf8d7d25194a852d7c2cc6 Mon Sep 17 00:00:00 2001 From: SamSys Date: Mon, 8 Sep 2025 01:09:15 +0330 Subject: [PATCH 07/14] mirror test --- Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs index 1e67bc01..51beaf0b 100644 --- a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs +++ b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs @@ -10,7 +10,7 @@ namespace Company.Domain.ClassifiedSalaryAgg { public class ClassifiedSalary : EntityBase { - //test//test + //test// public ClassifiedSalary(double group1, double group2, double group3, double group4, double group5, double group6, double group7, double group8, double group9, double group10, double group11, double group12, double group13, double group14, double group15, double group16, double group17, double group18, double group19, double group20, DateTime startDate, DateTime endDate, int year) { Group1 = group1; From 82d035b7e15aee9aaa04e45abecc89d1da2618be Mon Sep 17 00:00:00 2001 From: SamSys Date: Mon, 8 Sep 2025 01:20:58 +0330 Subject: [PATCH 08/14] mirrorTest4 --- Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs index 51beaf0b..1e67bc01 100644 --- a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs +++ b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs @@ -10,7 +10,7 @@ namespace Company.Domain.ClassifiedSalaryAgg { public class ClassifiedSalary : EntityBase { - //test// + //test//test public ClassifiedSalary(double group1, double group2, double group3, double group4, double group5, double group6, double group7, double group8, double group9, double group10, double group11, double group12, double group13, double group14, double group15, double group16, double group17, double group18, double group19, double group20, DateTime startDate, DateTime endDate, int year) { Group1 = group1; From 3b12be04b5352c0cf3ff5a5e134a6d649ba7ec99 Mon Sep 17 00:00:00 2001 From: SamSys Date: Tue, 9 Sep 2025 16:18:38 +0330 Subject: [PATCH 09/14] test defualt remote --- Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs index 1e67bc01..2de9ba33 100644 --- a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs +++ b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs @@ -10,7 +10,7 @@ namespace Company.Domain.ClassifiedSalaryAgg { public class ClassifiedSalary : EntityBase { - //test//test + //test public ClassifiedSalary(double group1, double group2, double group3, double group4, double group5, double group6, double group7, double group8, double group9, double group10, double group11, double group12, double group13, double group14, double group15, double group16, double group17, double group18, double group19, double group20, DateTime startDate, DateTime endDate, int year) { Group1 = group1; From f9947dc138bc93d1b10da01bceaf74e338b5a27e Mon Sep 17 00:00:00 2001 From: SamSys Date: Tue, 9 Sep 2025 18:41:16 +0330 Subject: [PATCH 10/14] change leaving time on checkout for EndOfyear or OnLeftWork Employees --- .../Contract/ComputingViewModel.cs | 4 ++++ .../Repository/CheckoutRepository.cs | 2 +- .../Repository/RollCallMandatoryRepository.cs | 14 +++++++++++++- .../Pages/Company/Checkouts/Index.cshtml.cs | 18 ++++++++++++++++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/CompanyManagment.App.Contracts/Contract/ComputingViewModel.cs b/CompanyManagment.App.Contracts/Contract/ComputingViewModel.cs index 4c9478c8..ed64868b 100644 --- a/CompanyManagment.App.Contracts/Contract/ComputingViewModel.cs +++ b/CompanyManagment.App.Contracts/Contract/ComputingViewModel.cs @@ -61,5 +61,9 @@ public class ComputingViewModel /// public TimeSpan EmployeeMandatoryHours { get; set; } + /// + /// مجموع مرخصی های پرسنل در این فیش حقوقی + /// + public TimeSpan TotalLeaveOnThisCheckout { get; set; } //public List holidays; } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs index 6b0f52d7..f05ae55b 100644 --- a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs @@ -1131,7 +1131,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos ch.TotalBreakTimeStr = ch.CheckoutRollCall.TotalBreakTimeSpan.ToFarsiHoursAndMinutes("-"); ch.TotalPresentTimeStr = ch.CheckoutRollCall.TotalPresentTimeSpan.ToFarsiHoursAndMinutes("-"); ch.TotalMandatoryTimeStr = ch.CheckoutRollCall.TotalMandatoryTimeSpan.ToFarsiHoursAndMinutes("-"); - ch.TotalPaidLeave = ch.CheckoutRollCall.TotalPaidLeaveTmeSpan.ToFarsiDaysAndHoursAndMinutes("-"); + ch.TotalPaidLeave = Tools.ToFarsiHoursAndMinutes(Convert.ToInt32(ch.CheckoutRollCall.TotalPaidLeaveTmeSpan.TotalHours), ch.CheckoutRollCall.TotalPaidLeaveTmeSpan.Minutes, "-"); ch.MonthlyRollCall = ch.CheckoutRollCall.RollCallDaysCollection .Select(x => new CheckoutDailyRollCallViewModel { diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index 261dea2c..eb78e688 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -323,6 +323,9 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll TimeSpan totalLeaveSpan = TimeSpan.Zero; TimeSpan starndardHoursesPerTotalDaysSapn = new TimeSpan(hours, minutes, 0); + + //محموع تمام مرخصی های این ماه + TimeSpan totalLeaveOnThisCheckout = TimeSpan.Zero; if (leaveSearchResult.Count > 0 || hoursesleave.Count > 0) { if (leaveSearchResult.Any(x => x.HasShiftDuration)) @@ -342,6 +345,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll TimeSpan totalLeave = new TimeSpan(leaveSearchResult.Sum(x => x.ShiftDuration.Ticks)); totalLeave = totalLeave.Add(hoursesleaveTimeSpans); + totalLeaveOnThisCheckout = totalLeave; var totalLeaveDouble = (totalLeave.TotalMinutes) / 60; if (totalLeaveDouble > starndardHoursesPerTotalDays) { @@ -413,7 +417,11 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll totalLeaveSpan = sumLeave; } - + #region TotalLeaveOnThisCheckout + + totalLeaveOnThisCheckout = (leavingDayCout * workingPerDayAve).Add(hoursesleaveTimeSpans); + + #endregion } @@ -886,6 +894,10 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll // مرخصی استحقاقی TotalPaidLeave = totalLeaveSpan, + + // مجموع مرخصی های پرسنل در این فیش حقوقی + TotalLeaveOnThisCheckout = totalLeaveOnThisCheckout, + //مرخصی استعلاجی TotalSickLeave = new TimeSpan(sickLeaveTimeSpans.Sum(x => x.Ticks)), diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs index ff15a680..9910ae27 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs @@ -31,6 +31,7 @@ using PersianTools.Core; using ServiceHost.Hubs; using System.Diagnostics.Contracts; using WorkFlow.Application.Contracts.WorkFlow; +using System.Globalization; namespace ServiceHost.Areas.Admin.Pages.Company.Checkouts; @@ -949,6 +950,23 @@ public class IndexModel : PageModel contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, fridayStartToEnd, officialHoliday, totalHoursH, totalHoursM, consumableItemDouble, housingAllowanceDouble, familyAllowanceDouble, marriedAllowanceDouble, workshop.IsOldContract); + + switch (computeOption) + { + case "OnEndOfYear": + var endOfYearCheckout = separation.ContractEnd.Substring(5, 2); + + mandatoryCompute.TotalPaidLeave = separation.HasLeft || endOfYearCheckout == "12" ? mandatoryCompute.TotalPaidLeave : mandatoryCompute.TotalLeaveOnThisCheckout; + break; + case "OnLeftWork": + mandatoryCompute.TotalPaidLeave = separation.HasLeft ? mandatoryCompute.TotalPaidLeave : mandatoryCompute.TotalLeaveOnThisCheckout; + break; + case "OnEndOfContract": + var startMonth = contract.ContarctStart.Substring(5, 2); + var endMonth = contract.ContractEnd.Substring(5, 2); + mandatoryCompute.TotalPaidLeave = startMonth != endMonth ? mandatoryCompute.TotalLeaveOnThisCheckout : mandatoryCompute.TotalPaidLeave; + break; + } var command = new CreateCheckout { EmployeeFullName = employee.EmployeeFullName, From c3cb3df3d3b2cca3edac6ea5e793c05e89008743 Mon Sep 17 00:00:00 2001 From: SamSys Date: Sat, 13 Sep 2025 06:29:25 +0330 Subject: [PATCH 11/14] change compute leaving model on checkout --- .../IRollCallMandatoryRepository.cs | 2 +- .../Contract/ComputingViewModel.cs | 2 +- .../RollCall/IRollCallMandatoryApplication.cs | 2 +- .../CheckoutApplication.cs | 3 +- .../RollCallMandatoryApplication.cs | 4 +- .../Repository/RollCallMandatoryRepository.cs | 22 ++--- .../Repository/YearlySalaryRepository.cs | 8 +- .../Pages/Company/Checkouts/Index.cshtml.cs | 84 +++++++++++-------- 8 files changed, 73 insertions(+), 54 deletions(-) diff --git a/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs b/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs index c1a8e006..9c77aa59 100644 --- a/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs +++ b/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs @@ -15,7 +15,7 @@ namespace Company.Domain.RollCallAgg; public interface IRollCallMandatoryRepository : IRepository { - ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute); + ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute, bool totalLeaveCompute); /// /// محاسبه ساعات کارکرد پرسنل در صورت داشتن حضور غیاب diff --git a/CompanyManagment.App.Contracts/Contract/ComputingViewModel.cs b/CompanyManagment.App.Contracts/Contract/ComputingViewModel.cs index ed64868b..3a2c0ddd 100644 --- a/CompanyManagment.App.Contracts/Contract/ComputingViewModel.cs +++ b/CompanyManagment.App.Contracts/Contract/ComputingViewModel.cs @@ -64,6 +64,6 @@ public class ComputingViewModel /// /// مجموع مرخصی های پرسنل در این فیش حقوقی /// - public TimeSpan TotalLeaveOnThisCheckout { get; set; } + //public TimeSpan TotalLeaveOnThisCheckout { get; set; } //public List holidays; } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/RollCall/IRollCallMandatoryApplication.cs b/CompanyManagment.App.Contracts/RollCall/IRollCallMandatoryApplication.cs index ce101b2b..27bdb4c0 100644 --- a/CompanyManagment.App.Contracts/RollCall/IRollCallMandatoryApplication.cs +++ b/CompanyManagment.App.Contracts/RollCall/IRollCallMandatoryApplication.cs @@ -8,7 +8,7 @@ namespace CompanyManagment.App.Contracts.RollCall; public interface IRollCallMandatoryApplication { bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart); - ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute); + ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute, bool totalLeaveCompute); /// /// گزارش نوبت کاری حضور غیاب diff --git a/CompanyManagment.Application/CheckoutApplication.cs b/CompanyManagment.Application/CheckoutApplication.cs index 4101295b..bd4fca43 100644 --- a/CompanyManagment.Application/CheckoutApplication.cs +++ b/CompanyManagment.Application/CheckoutApplication.cs @@ -184,7 +184,8 @@ public class CheckoutApplication : ICheckoutApplication { command.AbsenceDeduction = command.AbsenceDeduction - command.OvertimePay; command.OvertimePay = 0; - } + command.OverTimeWorkValue = "00:00"; + } else { command.OvertimePay = command.OvertimePay - command.AbsenceDeduction; diff --git a/CompanyManagment.Application/RollCallMandatoryApplication.cs b/CompanyManagment.Application/RollCallMandatoryApplication.cs index 617b906e..25e46b9f 100644 --- a/CompanyManagment.Application/RollCallMandatoryApplication.cs +++ b/CompanyManagment.Application/RollCallMandatoryApplication.cs @@ -21,9 +21,9 @@ public class RollCallMandatoryApplication : IRollCallMandatoryApplication return _rollCallMandatoryRepository.Exists(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date); } - public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute) + public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute,bool totalLeaveCompute) { - return _rollCallMandatoryRepository.MandatoryCompute(employeeId,workshopId, contractStart, contractEnd, command, holidayWorking, isStaticCheckout, rotatingShiftCompute); + return _rollCallMandatoryRepository.MandatoryCompute(employeeId,workshopId, contractStart, contractEnd, command, holidayWorking, isStaticCheckout, rotatingShiftCompute, totalLeaveCompute); } public async Task RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart, DateTime contractEnd, diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index eb78e688..a4aaf37f 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -67,7 +67,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll #region OfficialChckout public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, - CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute) + CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute, bool totalLeaveCompute) { #region Entities @@ -325,7 +325,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll TimeSpan starndardHoursesPerTotalDaysSapn = new TimeSpan(hours, minutes, 0); //محموع تمام مرخصی های این ماه - TimeSpan totalLeaveOnThisCheckout = TimeSpan.Zero; + //TimeSpan totalLeaveOnThisCheckout = TimeSpan.Zero; if (leaveSearchResult.Count > 0 || hoursesleave.Count > 0) { if (leaveSearchResult.Any(x => x.HasShiftDuration)) @@ -345,9 +345,11 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll TimeSpan totalLeave = new TimeSpan(leaveSearchResult.Sum(x => x.ShiftDuration.Ticks)); totalLeave = totalLeave.Add(hoursesleaveTimeSpans); - totalLeaveOnThisCheckout = totalLeave; + //totalLeaveOnThisCheckout = totalLeave; var totalLeaveDouble = (totalLeave.TotalMinutes) / 60; - if (totalLeaveDouble > starndardHoursesPerTotalDays) + + //اگر مدت مرخصی از مجاز بیشتر بود و مدل محاسبه کامل نبود + if (totalLeaveDouble > starndardHoursesPerTotalDays && !totalLeaveCompute) { sumSpans = sumSpans.Add(starndardHoursesPerTotalDaysSapn); @@ -406,7 +408,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll } - if (sumLeave > starndardHoursesPerTotalDaysSapn) + if (sumLeave > starndardHoursesPerTotalDaysSapn && !totalLeaveCompute) { sumSpans = sumSpans.Add(starndardHoursesPerTotalDaysSapn); totalLeaveSpan = starndardHoursesPerTotalDaysSapn; @@ -417,11 +419,11 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll totalLeaveSpan = sumLeave; } - #region TotalLeaveOnThisCheckout + //#region TotalLeaveOnThisCheckout - totalLeaveOnThisCheckout = (leavingDayCout * workingPerDayAve).Add(hoursesleaveTimeSpans); + //totalLeaveOnThisCheckout = (leavingDayCout * workingPerDayAve).Add(hoursesleaveTimeSpans); - #endregion + //#endregion } @@ -895,8 +897,8 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll // مرخصی استحقاقی TotalPaidLeave = totalLeaveSpan, - // مجموع مرخصی های پرسنل در این فیش حقوقی - TotalLeaveOnThisCheckout = totalLeaveOnThisCheckout, + //// مجموع مرخصی های پرسنل در این فیش حقوقی + //TotalLeaveOnThisCheckout = totalLeaveOnThisCheckout, //مرخصی استعلاجی TotalSickLeave = new TimeSpan(sickLeaveTimeSpans.Sum(x => x.Ticks)), diff --git a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs index e148e46a..1f0278a5 100644 --- a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs +++ b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs @@ -2133,6 +2133,7 @@ public class YearlySalaryRepository : RepositoryBase, IYearl else if (isOldContract && contractEnd > start1403) { var startDate = startWorkDate >= start1403 ? startWorkDate : start1403; + var endOfYearRes = EndOfYearCantoleaveList(startDate, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) .FirstOrDefault(x => x.ContractStart == separationStartDate); @@ -2141,12 +2142,13 @@ public class YearlySalaryRepository : RepositoryBase, IYearl var end = EndOfYearCantoleaveList(startDate, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate); + //وضعیت تصفیه مزد مرخصی result.LeaveCheckout = true; var canTolv = endOfYearRes.CanToLeave; - var absence = end.Sum(x => x.PeriodOfAbsence); + var absence = end.Where(x=>x.ContractStart >= startDayOfYearGr).Sum(x => x.PeriodOfAbsence); if (canTolv >= absence) { @@ -2208,8 +2210,8 @@ public class YearlySalaryRepository : RepositoryBase, IYearl separationStartDate); var canTolv = endOfYearRes.CanToLeave; - var absence = end.Sum(x => x.PeriodOfAbsence); - if (canTolv >= absence) + var absence = end.Where(x => x.ContractStart >= startDayOfYearGr).Sum(x => x.PeriodOfAbsence); + if (canTolv >= absence) { canTolv -= absence; absence = 0; diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs index 9910ae27..9dc85a10 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs @@ -767,9 +767,51 @@ public class IndexModel : PageModel var workingHours = _workingHoursTempApplication.GetByContractIdConvertToShiftwork4(contract.Id); var separation = _contractApplication.contractSeparation(ConvertYear, ConvertMonth, contract.ContractStartGr, contract.ContractEndGr, contract.EmployeeId, contract.WorkshopIds); - + if (separation.checker) { + //workshopInfo + var workshop = _workshopApplication.GetDetails(contract.WorkshopIds); + + var employeeOptions = + _employeeComputeOptionsApplication.GetAllByWorkshopId(contract.WorkshopIds); + var getYearsOption = employeeOptions.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId); + var yearsOption = getYearsOption == null ? workshop.YearsOptions : getYearsOption.YearsOptions; + var getBonusesOption = employeeOptions.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId); + var bonusesOption = getBonusesOption == null + ? workshop.BonusesOptions + : getBonusesOption.BonusesOptions; + var getComputeOption = employeeOptions.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId); + var computeOption = getComputeOption == null + ? workshop.ComputeOptions + : getComputeOption.ComputeOptions; + //آیا کل مرخصی به ساعت کاراضافه شود؟ + bool totalLeaveCompute = false; + //آیا غیبت محاسبه شود؟ + bool abcenseDeduction = false; + switch (computeOption) + { + case "OnEndOfYear": + var endOfYearCheckout = separation.ContractEnd.Substring(5, 2); + + + totalLeaveCompute = true; + abcenseDeduction = separation.HasLeft || endOfYearCheckout == "12"; + break; + case "OnLeftWork": + + totalLeaveCompute = true; + abcenseDeduction = separation.HasLeft; + break; + case "OnEndOfContract": + var startMonth = contract.ContarctStart.Substring(5, 2); + var endMonth = contract.ContractEnd.Substring(5, 2); + + totalLeaveCompute = startMonth == endMonth ? false : true; + abcenseDeduction = (startMonth != endMonth && separation.HasLeft) || (startMonth != endMonth && contract.ContractEndGr == separation.ContractEndGr); + break; + } + workingHours.ContractStartGr = separation.ContractStartGr; workingHours.ContractEndGr = separation.ContractEndGr; workingHours.ContarctStart = separation.ContarctStart; @@ -778,8 +820,7 @@ public class IndexModel : PageModel workingHours.GetWorkDateHide = contract.GetWorkDate; workingHours.WorkshopId = contract.WorkshopIds; workingHours.EmployeeId = contract.EmployeeId; - //workshopInfo - var workshop = _workshopApplication.GetDetails(contract.WorkshopIds); + var mandatoryCompute = new ComputingViewModel(); var hasRollCall = _rollCallEmployeeStatusApp.HasRollCallRecord(contract.EmployeeId, @@ -791,13 +832,13 @@ public class IndexModel : PageModel { mandatoryCompute = _rollCallMandatoryApplication.MandatoryCompute(contract.EmployeeId, contract.WorkshopIds, - separation.ContractStartGr, separation.ContractEndGr, workingHours, workshop.WorkshopHolidayWorking, false,workshop.RotatingShiftCompute); + separation.ContractStartGr, separation.ContractEndGr, workingHours, workshop.WorkshopHolidayWorking, false,workshop.RotatingShiftCompute, totalLeaveCompute); } else { mandatoryCompute = _rollCallMandatoryApplication.MandatoryCompute(contract.EmployeeId, contract.WorkshopIds, - separation.ContractStartGr, separation.ContractEndGr, workingHours, workshop.WorkshopHolidayWorking, true,workshop.RotatingShiftCompute); + separation.ContractStartGr, separation.ContractEndGr, workingHours, workshop.WorkshopHolidayWorking, true,workshop.RotatingShiftCompute, totalLeaveCompute); //var hasLeave = _leaveApplication.LeavOnChekout(separation.ContractStartGr, // separation.ContractEndGr, contract.EmployeeId, contract.WorkshopIds); //if (hasLeave != null) @@ -843,18 +884,6 @@ public class IndexModel : PageModel // workshop.ComputeOptions = "OnEndOfContract"; //} - var employeeOptions = - _employeeComputeOptionsApplication.GetAllByWorkshopId(contract.WorkshopIds); - var getYearsOption = employeeOptions.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId); - var yearsOption = getYearsOption == null ? workshop.YearsOptions : getYearsOption.YearsOptions; - var getBonusesOption = employeeOptions.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId); - var bonusesOption = getBonusesOption == null - ? workshop.BonusesOptions - : getBonusesOption.BonusesOptions; - var getComputeOption = employeeOptions.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId); - var computeOption = getComputeOption == null - ? workshop.ComputeOptions - : getComputeOption.ComputeOptions; //سنوات var yearsPay = _yearlySalaryRepository.Years(separation.ContractStartGr, separation.LeftWorkDate, @@ -905,7 +934,7 @@ public class IndexModel : PageModel { foundMandatoryCompute = _rollCallMandatoryApplication.MandatoryCompute(contract.EmployeeId, contract.WorkshopIds, - found.ContractStart, found.ContractEnd, foundWorkingHours, workshop.WorkshopHolidayWorking, false, workshop.RotatingShiftCompute); + found.ContractStart, found.ContractEnd, foundWorkingHours, workshop.WorkshopHolidayWorking, false, workshop.RotatingShiftCompute, totalLeaveCompute); } else @@ -951,22 +980,7 @@ public class IndexModel : PageModel officialHoliday, totalHoursH, totalHoursM, consumableItemDouble, housingAllowanceDouble, familyAllowanceDouble, marriedAllowanceDouble, workshop.IsOldContract); - switch (computeOption) - { - case "OnEndOfYear": - var endOfYearCheckout = separation.ContractEnd.Substring(5, 2); - - mandatoryCompute.TotalPaidLeave = separation.HasLeft || endOfYearCheckout == "12" ? mandatoryCompute.TotalPaidLeave : mandatoryCompute.TotalLeaveOnThisCheckout; - break; - case "OnLeftWork": - mandatoryCompute.TotalPaidLeave = separation.HasLeft ? mandatoryCompute.TotalPaidLeave : mandatoryCompute.TotalLeaveOnThisCheckout; - break; - case "OnEndOfContract": - var startMonth = contract.ContarctStart.Substring(5, 2); - var endMonth = contract.ContractEnd.Substring(5, 2); - mandatoryCompute.TotalPaidLeave = startMonth != endMonth ? mandatoryCompute.TotalLeaveOnThisCheckout : mandatoryCompute.TotalPaidLeave; - break; - } + var command = new CreateCheckout { EmployeeFullName = employee.EmployeeFullName, @@ -1015,7 +1029,7 @@ public class IndexModel : PageModel //مدت غیبت AbsencePeriod = leavePayNew.AbsencePeriod, //کسری غیبت - AbsenceDeduction = 0, + AbsenceDeduction = abcenseDeduction ? leavePayNew.AbsenceDeduction : 0, //وضعیت تصفیه مزد مرخصی LeaveCheckout = leavePayNew.LeaveCheckout, //میانگین ساعت کار در روز From 8eded713da045de4ab4f9e60ee233a51ea40dc2c Mon Sep 17 00:00:00 2001 From: mahan Date: Mon, 15 Sep 2025 16:12:17 +0330 Subject: [PATCH 12/14] fix: update gender handling in Create and CreateEmployee views --- 0_Framework/Application/UID/IUidService.cs | 2 +- .../Areas/Admin/Pages/Company/Employees/Create.cshtml | 6 ++++++ .../Admin/Pages/Company/Employees/CreateEmployee.cshtml | 5 +++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/0_Framework/Application/UID/IUidService.cs b/0_Framework/Application/UID/IUidService.cs index 19dd0034..c2c26bd5 100644 --- a/0_Framework/Application/UID/IUidService.cs +++ b/0_Framework/Application/UID/IUidService.cs @@ -38,7 +38,7 @@ public class UidBasicInformation { "GENDER_MALE" => Application.Gender.Male, "GENDER_FEMALE" => Application.Gender.Female, - _ => throw new ArgumentOutOfRangeException() + _ => Application.Gender.None }; } public record IdentificationInformation(string NationalId, string BirthDate, string ShenasnameSeri, string ShenasnameSerial, string ShenasnamehNumber); diff --git a/ServiceHost/Areas/Admin/Pages/Company/Employees/Create.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Employees/Create.cshtml index 32b0cd0e..c0921767 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Employees/Create.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Employees/Create.cshtml @@ -571,6 +571,12 @@ } else if (response.data.gender === 1) { $('#GenderFemale').prop('checked', true); $('#soldier').prop('disabled', true); + } + else{ + $('#GenderMale').removeClass("disable"); + $('#GenderFemale').removeClass("disable"); + $('#divGender .radio-box').removeClass('disable'); + } currentStep++; showStep(currentStep); diff --git a/ServiceHost/Areas/Admin/Pages/Company/Employees/CreateEmployee.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Employees/CreateEmployee.cshtml index 4df980de..28543bbb 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Employees/CreateEmployee.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Employees/CreateEmployee.cshtml @@ -571,6 +571,11 @@ } else if (response.data.gender === 1) { $('#GenderFemale').prop('checked', true); $('#soldier').prop('disabled', true); + } + else{ + $('#GenderMale').removeClass("disable"); + $('#GenderFemale').removeClass("disable"); + $('#divGender .radio-box').removeClass('disable'); } currentStep++; showStep(currentStep); From b2c6ad25414de045d644d9f0dba106867687467e Mon Sep 17 00:00:00 2001 From: SamSys Date: Mon, 15 Sep 2025 17:31:05 +0330 Subject: [PATCH 13/14] SickLeaving Bug on Static Checkout Fixed --- .../Repository/RollCallMandatoryRepository.cs | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index a4aaf37f..196b4245 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -1801,6 +1801,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll var startDateAndTime = new PersianDateTime(syear, smonth, sday, start.Hour, start.Minute); var startContract = new PersianDateTime(syear, smonth, sday, start.Hour, start.Minute); var endContract = new PersianDateTime(eyear, emonth, eday, 23, 59); + var countLeves = leaveSearchResult.Where(x => x.PaidLeaveType == "روزانه").ToList(); for (var da = startDateAndTime; da <= endContract; da = da.AddHours(addHours)) { @@ -1824,14 +1825,20 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll end.Second); Console.WriteLine($"{currentDateFa} - {currentDateGr.Date} - start : {startComplex} end : {endComplex}"); - rollCallList.Add(new RollCallViewModel() + + var hasLeave = countLeves.Any(x => x.StartLeaveGr <= startComplex && x.EndLeaveGr >= endComplex); + if (!hasLeave) { - StartDate = startComplex, - EndDate = endComplex, - ShiftSpan = (endComplex - startComplex), - ShiftDate = currentDateGr, - ShiftEndWithoutRest = endComplex - }); + rollCallList.Add(new RollCallViewModel() + { + StartDate = startComplex, + EndDate = endComplex, + ShiftSpan = (endComplex - startComplex), + ShiftDate = currentDateGr, + ShiftEndWithoutRest = endComplex + }); + } + var endCal = end - start; @@ -1840,16 +1847,16 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll } - var countLeves = leaveSearchResult.Where(x => x.PaidLeaveType == "روزانه").ToList(); - if (countLeves.Count > 0) - { - int totalDays = countLeves.Sum(x => int.Parse(x.LeaveHourses)); + + //if (countLeves.Count > 0) + //{ + // int totalDays = countLeves.Sum(x => int.Parse(x.LeaveHourses)); - int countRollCall = rollCallList.Count(); - int takRollCall = totalDays < countRollCall ? (countRollCall - totalDays) : 0; - rollCallList = rollCallList.Take(takRollCall).ToList(); - } + // int countRollCall = rollCallList.Count(); + // int takRollCall = totalDays < countRollCall ? (countRollCall - totalDays) : 0; + // rollCallList = rollCallList.Take(takRollCall).ToList(); + //} } From 74c7b1ebbd6a9b8840783d0c75642b8bb8b4dc21 Mon Sep 17 00:00:00 2001 From: SamSys Date: Mon, 15 Sep 2025 23:44:37 +0330 Subject: [PATCH 14/14] Optimized leaves affected on checkout --- .../Repository/RollCallMandatoryRepository.cs | 164 +++++++++++++----- 1 file changed, 122 insertions(+), 42 deletions(-) diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index 196b4245..ae9a3c0f 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -39,6 +39,7 @@ using PersianTools.Core; + namespace CompanyManagment.EFCore.Repository; public class RollCallMandatoryRepository : RepositoryBase, IRollCallMandatoryRepository @@ -64,12 +65,12 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll } - #region OfficialChckout - public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, - DateTime contractEnd, - CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute, bool totalLeaveCompute) - { - #region Entities + #region OfficialChckout + public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, + DateTime contractEnd, + CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute, bool totalLeaveCompute) + { + #region Entities string SumWorkeTime = string.Empty; var weeklyTime = new TimeSpan(); @@ -144,7 +145,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll groupedRollCall = rollCallResult.GroupBy(x => x.ShiftDate.Date).Select(x => { - + DateTime friday = new DateTime(); @@ -197,19 +198,19 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll BreakTimeSpan = x.BreakTimeSpan }).ToList(); - groupedRollCall = rollCallResult.GroupBy(x => x.CreationDate.Date).Select(x => - { - TimeSpan breakTime; - if (contractStart > endOfFarvardin) - { - breakTime = CalculateBreakTime( - x.First().BreakTimeSpan, - new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))); - } - else - { - breakTime = CalculateBreakTime(breakTimeEntity, new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))); - } + groupedRollCall = rollCallResult.GroupBy(x => x.CreationDate.Date).Select(x => + { + TimeSpan breakTime; + if (contractStart > endOfFarvardin) + { + breakTime = CalculateBreakTime( + x.First().BreakTimeSpan, + new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))); + } + else + { + breakTime = CalculateBreakTime(breakTimeEntity, new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))); + } DateTime friday = new DateTime(); @@ -220,7 +221,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday)) .StartDate.Value; - + } if (x.Any(s => @@ -233,15 +234,15 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll } return new GroupedRollCalls() - { - CreationDate = x.Key, - ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value, EndWithOutResTime = s.EndDate!.Value }) - .ToList(), - //HasFriday = x.Any(s => - // s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || - // s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)), + { + CreationDate = x.Key, + ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value, EndWithOutResTime = s.EndDate!.Value }) + .ToList(), + //HasFriday = x.Any(s => + // s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || + // s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)), - Fridays = friday, + Fridays = friday, SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - breakTime, @@ -265,7 +266,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); - TimeSpan sumSpansWhitOutleaves = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); + TimeSpan sumSpansWhitOutleaves = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); //بدست آوردن مرخصی ساعتی @@ -347,7 +348,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll totalLeave = totalLeave.Add(hoursesleaveTimeSpans); //totalLeaveOnThisCheckout = totalLeave; var totalLeaveDouble = (totalLeave.TotalMinutes) / 60; - + //اگر مدت مرخصی از مجاز بیشتر بود و مدل محاسبه کامل نبود if (totalLeaveDouble > starndardHoursesPerTotalDays && !totalLeaveCompute) { @@ -902,7 +903,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll //مرخصی استعلاجی TotalSickLeave = new TimeSpan(sickLeaveTimeSpans.Sum(x => x.Ticks)), - + //ساعت موظفی پرسنل در این ماه EmployeeMandatoryHours = mandatoryHoursTimeSpan, #endregion @@ -1802,6 +1803,68 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll var startContract = new PersianDateTime(syear, smonth, sday, start.Hour, start.Minute); var endContract = new PersianDateTime(eyear, emonth, eday, 23, 59); var countLeves = leaveSearchResult.Where(x => x.PaidLeaveType == "روزانه").ToList(); + //int totalLeaveDays = countLeves.Sum(x => int.Parse(x.LeaveHourses)); + List affectedLeaves = new List(); + + DateTime contractStart = ($"{startContract}").ToGeorgianDateTime(); + DateTime contractEnd = ($"{endContract}").ToGeorgianDateTime(); + int leavingDayCout = 0; + List thisCheckoutLeaves = new List(); + + + if (leaveSearchResult.Count > 0) + { + foreach (var leave in leaveSearchResult) + { + //مرخصی های مابین + if (leave.StartLeaveGr >= contractStart && leave.EndLeaveGr <= contractEnd) + { + var modifyleave = new LeaveViewModel() + { + Id = leave.Id, + StartLeaveGr = leave.StartLeaveGr, + EndLeaveGr = leave.EndLeaveGr + }; + thisCheckoutLeaves.Add(leave); + } + + // مرخصی که شروعش قبل از شروع تصفیه حساب است + if (leave.StartLeaveGr < contractStart && leave.EndLeaveGr <= contractEnd) + { + var modifyleave = new LeaveViewModel() + { + Id = leave.Id, + StartLeaveGr = contractStart, + EndLeaveGr = leave.EndLeaveGr + }; + thisCheckoutLeaves.Add(modifyleave); + } + // مرخصی که پایانش بعد از پایان تصفیه حساب است + if (leave.EndLeaveGr > contractEnd && leave.StartLeaveGr >= contractStart) + { + var modifyleave = new LeaveViewModel() + { + Id = leave.Id, + StartLeaveGr = leave.StartLeaveGr, + EndLeaveGr = contractEnd, + }; + thisCheckoutLeaves.Add(modifyleave); + } + + //مرخصی استثنا که تمام بازه فیش را پوشش میدهد + if (leave.StartLeaveGr < contractStart && leave.EndLeaveGr > contractEnd) + { + var modifyleave = new LeaveViewModel() + { + Id = leave.Id, + StartLeaveGr = leave.StartLeaveGr, + EndLeaveGr = contractEnd, + }; + thisCheckoutLeaves.Add(modifyleave); + } + } + } + for (var da = startDateAndTime; da <= endContract; da = da.AddHours(addHours)) { @@ -1826,7 +1889,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll Console.WriteLine($"{currentDateFa} - {currentDateGr.Date} - start : {startComplex} end : {endComplex}"); - var hasLeave = countLeves.Any(x => x.StartLeaveGr <= startComplex && x.EndLeaveGr >= endComplex); + var hasLeave = thisCheckoutLeaves.Any(x => startComplex.Date <= x.EndLeaveGr.Date && endComplex.Date >= x.StartLeaveGr.Date); if (!hasLeave) { rollCallList.Add(new RollCallViewModel() @@ -1838,7 +1901,18 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll ShiftEndWithoutRest = endComplex }); } - + else + { + var affected = thisCheckoutLeaves.FirstOrDefault(x => startComplex.Date <= x.EndLeaveGr.Date && endComplex.Date >= x.StartLeaveGr.Date); + var modifyleave = new LeaveViewModel() + { + Id = affected.Id, + StartLeaveGr = affected.StartLeaveGr, + EndLeaveGr = affected.EndLeaveGr + }; + affectedLeaves.Add(modifyleave); + } + var endCal = end - start; @@ -1847,16 +1921,22 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll } - - //if (countLeves.Count > 0) - //{ - // int totalDays = countLeves.Sum(x => int.Parse(x.LeaveHourses)); - // int countRollCall = rollCallList.Count(); - // int takRollCall = totalDays < countRollCall ? (countRollCall - totalDays) : 0; - // rollCallList = rollCallList.Take(takRollCall).ToList(); - //} + affectedLeaves = affectedLeaves.DistinctBy(x => x.Id).ToList(); + + //مرخصی هایی که تاریخ آن ها بین رکورد های حضور پرسنل بوده و اعمال نشده + var exceptionLeaves = thisCheckoutLeaves + .Where(t => !affectedLeaves.Select(a => a.Id).Contains(t.Id)) + .ToList(); + + //حذف رکورد های حضور به تعداد مرخصی های اعمال نشده + if (exceptionLeaves.Count > 0) + { + int countRollCall = rollCallList.Count(); + int takRollCall = exceptionLeaves.Count < countRollCall ? (countRollCall - exceptionLeaves.Count) : 0; + rollCallList = rollCallList.Take(takRollCall).ToList(); + } }