From 33968edf28cb51c06bfbc567e08c9400af0ef2de Mon Sep 17 00:00:00 2001 From: SamSys Date: Tue, 25 Feb 2025 22:08:55 +0330 Subject: [PATCH] Enhance employee document handling and reporting - Added logic to include insurance left works in the EmployeeDocumentsRepository. - Modified employee ID retrieval in LeftWorkRepository to account for insurance left works. - Updated working hours calculations in RollCallMandatoryRepository to consider leave days and overtime. - Improved layout and presentation in PrintDetailsRollCall, PrintOneRollCall, and PrintDetailsRollCallRaw for better readability and consistency. - Adjusted leave type handling in roll call views for accurate attendance representation. --- .../Repository/EmployeeDocumentsRepository.cs | 6 +- .../Repository/LeftWorkRepository.cs | 8 +- .../Repository/RollCallMandatoryRepository.cs | 34 +- .../Checkouts/PrintDetailsRollCall.cshtml | 551 +++++++++--------- .../_Partials/PrintDetailsRollCallRaw.cshtml | 18 +- .../Company/Checkouts/PrintOneRollCall.cshtml | 233 +++++--- .../_Partials/PrintDetailsRollCallRaw.cshtml | 220 ++++--- 7 files changed, 613 insertions(+), 457 deletions(-) diff --git a/CompanyManagment.EFCore/Repository/EmployeeDocumentsRepository.cs b/CompanyManagment.EFCore/Repository/EmployeeDocumentsRepository.cs index 5a9018ee..b717fc3c 100644 --- a/CompanyManagment.EFCore/Repository/EmployeeDocumentsRepository.cs +++ b/CompanyManagment.EFCore/Repository/EmployeeDocumentsRepository.cs @@ -276,8 +276,12 @@ namespace CompanyManagment.EFCore.Repository .Where(x => query.Any(y => y.EmployeeId == x.EmployeeId && y.WorkshopId == cmd.WorkshopId && x.LeftWorkDate <= DateTime.Now.Date)) .Select(x => x.EmployeeId).AsEnumerable(); + var passedInsuranceLeftWorks = _companyContext.LeftWorkInsuranceList + .Where(x => query.Any(y => y.EmployeeId == x.EmployeeId && y.WorkshopId == cmd.WorkshopId && x.LeftWorkDate <= DateTime.Now.Date)) + .Select(x => x.EmployeeId).AsEnumerable(); + passedLeftWorks = passedLeftWorks.Concat(passedInsuranceLeftWorks).Distinct(); - List employeeDocuments; + List employeeDocuments; switch (cmd.Mode) { case EmployeeDocumentSearchMode.All: diff --git a/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs b/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs index 561b0829..01f1ff7f 100644 --- a/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs +++ b/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs @@ -198,9 +198,13 @@ public class LeftWorkRepository : RepositoryBase, ILeftWorkRepos public List GetEmployeeIdsByWorkshopIdActiveInDates(long workshopId, DateTime start, DateTime end) { - return _context.LeftWorkList - .Where(x => x.WorkshopId == workshopId && x.LeftWorkDate >= start && x.StartWorkDate.AddDays(-1) <= end) + var leftWorks = _context.LeftWorkList + .Where(x => x.WorkshopId == workshopId && x.LeftWorkDate.AddDays(-1) >= start && x.StartWorkDate.Date <= end.Date) .GroupBy(x => x.EmployeeId).Select(x => x.Key).ToList(); + var insuranceLeftWork = _context.LeftWorkInsuranceList + .Where(x => x.WorkshopId == workshopId && (x.LeftWorkDate == null && x.StartWorkDate <= start) || (x.LeftWorkDate != null && x.LeftWorkDate.Value.AddDays(-1) >= start && x.StartWorkDate.Date <= end.Date)) + .GroupBy(x => x.EmployeeId).Select(x => x.Key).ToList(); + return leftWorks.Concat(insuranceLeftWork).Distinct().ToList(); } public List GetLeftPersonelByWorkshopId(List workshopIds) diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index d77f301d..3a53b05d 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -106,13 +106,13 @@ CreateWorkingHoursTemp command, bool holidayWorking) // AfterSubtractRestSpan = AfterSubtract(command, x.SumOneDaySpan, x.CreationDate), //}).ToList(); TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); + TimeSpan sumSpansWhitOutleaves = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); + + //****افزودن مرخصی پرسنل به مجموع ساعات کار*** + #region AddEmployeeLeavs - //****افزودن مرخصی پرسنل به مجموع ساعات کار*** - #region AddEmployeeLeavs - - - LeaveSearchModel leaveSearch = new LeaveSearchModel() + LeaveSearchModel leaveSearch = new LeaveSearchModel() { EmployeeId = employeeId, WorkshopId = workshopId, @@ -196,7 +196,16 @@ CreateWorkingHoursTemp command, bool holidayWorking) //***********************************// var dailyFix = TimeSpan.Parse("07:20"); TimeSpan mandatoryHoursTimeSpan = new TimeSpan(7, 20, 0).Multiply(mandatorDays); - TimeSpan Mandatory = sumSpans.Subtract(mandatoryHoursTimeSpan); + TimeSpan Mandatory = sumSpansWhitOutleaves.Subtract(mandatoryHoursTimeSpan); + + double mandatoryWorkWithOutleaves = (sumSpansWhitOutleaves.TotalMinutes) / 60; + double owerTimeWork = 0; + if (mandatoryWorkWithOutleaves > mandatoryHours) + { + owerTimeWork = mandatoryWorkWithOutleaves - mandatoryHours; + + } + #endregion @@ -366,13 +375,14 @@ CreateWorkingHoursTemp command, bool holidayWorking) SumWorkeTime = $"{44}"; //اضافه کار - if (totalHourses > mandatoryHours) + if (owerTimeWork > 0) { - Console.WriteLine(Mandatory); - Console.WriteLine(Mandatory.Minutes); - int mandatoryH = (int)Mandatory.TotalHours; - int mandatoryM = (int)(Mandatory.TotalMinutes % 60); - overMandatoryHours = mandatoryH.ToString(); + + //int mandatoryH = (int)Mandatory.TotalHours; + //int mandatoryM = (int)(Mandatory.TotalMinutes % 60); + int mandatoryH = (int)owerTimeWork; + int mandatoryM = (int)Math.Round((owerTimeWork - mandatoryH) * 60); + overMandatoryHours = mandatoryH.ToString(); overMandatoryMinuts = mandatoryM.ToString(); } diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/PrintDetailsRollCall.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/PrintDetailsRollCall.cshtml index be1d6554..e47471c3 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/PrintDetailsRollCall.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/PrintDetailsRollCall.cshtml @@ -1,7 +1,7 @@ @using _0_Framework.Application @model CompanyManagment.App.Contracts.Checkout.CheckoutViewModel @{ - + } @@ -19,288 +19,294 @@
-
+
- - - - + + + + diff --git a/ServiceHost/Areas/Client/Pages/Company/Checkouts/PrintOneRollCall.cshtml b/ServiceHost/Areas/Client/Pages/Company/Checkouts/PrintOneRollCall.cshtml index c75d5f60..9e5254d2 100644 --- a/ServiceHost/Areas/Client/Pages/Company/Checkouts/PrintOneRollCall.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/Checkouts/PrintOneRollCall.cshtml @@ -309,31 +309,69 @@ - - - - - + + + + + - + @for (int i = 0; i < 15; i++) { - - - - - - + + + + @if (@Model.MonthlyRollCall[i].IsAbsent) + { + + + } + else + { + @if (string.IsNullOrWhiteSpace(Model.MonthlyRollCall[i].LeaveType)) + { + + + + + } + else + { + + + } + } + - - - - - + + + + + - + @@ -367,19 +405,57 @@ } @foreach (var day in Model.MonthlyRollCall) { - + - - - - + + @if (day.IsAbsent) + { + + + } + else + { + @if (string.IsNullOrWhiteSpace(day.LeaveType)) + { + + + + + } + else + { + + + } + } + -
ساعات موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStrساعات حضور : @Model.TotalPresentTimeStrساعات استراحت : @Model.TotalBreakTimeStrساعات کارکرد : @Model.TotalWorkingTimeStrموظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStrساعات حضور : @Model.TotalPresentTimeStrساعات استراحت : @Model.TotalBreakTimeStrساعات کارکرد : @Model.TotalWorkingTimeStr
تاریخورودخروجورودخروجاستراحتورودخروجورودخروجاستراحت منقطعساعت کارکردساعت کارکرد
@Model.MonthlyRollCall[i].DateTimeGr.ToFarsi() - @Model.MonthlyRollCall[i].DateTimeGr.DayOfWeek.DayOfWeeKToPersian()@Model.MonthlyRollCall[i].StartDate1@Model.MonthlyRollCall[i].EndDate1@Model.MonthlyRollCall[i].StartDate2@Model.MonthlyRollCall[i].EndDate2
@Model.MonthlyRollCall[i].DateTimeGr.ToFarsi() - @Model.MonthlyRollCall[i].DateTimeGr.DayOfWeek.DayOfWeeKToPersian() +
+ غیبت +
+
+
+ @* غیبت *@ +
+
@Model.MonthlyRollCall[i].StartDate1@Model.MonthlyRollCall[i].EndDate1@Model.MonthlyRollCall[i].StartDate2@Model.MonthlyRollCall[i].EndDate2 +
+ + @Model.MonthlyRollCall[i].LeaveType + +
+
+
+ @* + @Model.MonthlyRollCall[i].LeaveType + *@ +
+
@Model.MonthlyRollCall[i].BreakTimeString @if (@Model.MonthlyRollCall[i].IsSliced) { - - + + } else @@ -352,13 +390,13 @@
تاریخورودخروجورودخروجاستراحتورودخروجورودخروجاستراحت منقطعساعت کارکردساعت کارکرد
@day.DateTimeGr.ToFarsi() - @day.DateTimeGr.DayOfWeek.DayOfWeeKToPersian()@day.StartDate1@day.EndDate1@day.StartDate2@day.EndDate2 +
+ غیبت +
+
+
+ @* غیبت *@ +
+
@day.StartDate1@day.EndDate1@day.StartDate2@day.EndDate2 +
+ + @day.LeaveType + +
+
+
+ @* + @day.LeaveType + *@ +
+
@day.BreakTimeString + @if (day.IsSliced) { - - + + } else @@ -393,70 +469,63 @@
+ +
+
+ + + + + + + + + + + +
موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStrساعات حضور : @Model.TotalPresentTimeStrساعات استراحت : @Model.TotalBreakTimeStrساعات کارکرد : @Model.TotalWorkingTimeStr
+
+
-
-
-
- @{ - if (Model.IsLeft) - { - - طبق تصفیه حساب نهایی تنظیمی فوق، آخرین روز اشتغال بکار اینجانب  - @Model.LastDayOfWork  - بوده و قطع همکاری با کارفرما و کارگاه از تاریخ  - @Model.LeftWorkDate  - می باشد - - } - } +
+ + - -
-
- @*
اینجانب     @Model.EmployeeFullName
-
نام پدر:     @Model.FathersName
-
به کد ملی:  @Model.NationalCode
-
متولد:     @Model.DateOfBirth
*@ -
-
-
- @* پـرسنل شـرکت  @Model.WorkshopName -   - به کارفرمایی   آقای/خانم/شرکت    +
+ + + - - - - + +
@{ - foreach (var item in @Model.EmployerList) - { - @item.EmployerFullName ، + if (Model.IsLeft) + { + + طبق تصفیه حساب نهایی تنظیمی فوق، آخرین روز اشتغال بکار اینجانب  + @Model.LastDayOfWork  + بوده و قطع همکاری با کارفرما و کارگاه از تاریخ  + @Model.LeftWorkDate  + می باشد + + } + else + { + + } } - } -    - مبلغ ............. ریال را بصورت نقدی از کارفرما دریافت نمودم. *@ - - - - - - - -
- -
-
-
- اثر انگشت +
+
+
+ اثر انگشت
-
- امضاء +
+ امضاء
-
+
diff --git a/ServiceHost/Areas/Client/Pages/Company/Checkouts/_Partials/PrintDetailsRollCallRaw.cshtml b/ServiceHost/Areas/Client/Pages/Company/Checkouts/_Partials/PrintDetailsRollCallRaw.cshtml index 7b13f045..3524b47c 100644 --- a/ServiceHost/Areas/Client/Pages/Company/Checkouts/_Partials/PrintDetailsRollCallRaw.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/Checkouts/_Partials/PrintDetailsRollCallRaw.cshtml @@ -296,24 +296,62 @@ تاریخ - ورود - خروج - ورود - خروج - استراحت + ورود + خروج + ورود + خروج + استراحت منقطع - ساعت کارکرد + ساعت کارکرد @for (int i = 0; i < 15; i++) { - + @Model.MonthlyRollCall[i].DateTimeGr.ToFarsi() - @Model.MonthlyRollCall[i].DateTimeGr.DayOfWeek.DayOfWeeKToPersian() - @Model.MonthlyRollCall[i].StartDate1 - @Model.MonthlyRollCall[i].EndDate1 - @Model.MonthlyRollCall[i].StartDate2 - @Model.MonthlyRollCall[i].EndDate2 + + @if (@Model.MonthlyRollCall[i].IsAbsent) + { + +
+ غیبت +
+ + +
+ @* غیبت *@ +
+ + } + else + { + @if (string.IsNullOrWhiteSpace(Model.MonthlyRollCall[i].LeaveType)) + { + @Model.MonthlyRollCall[i].StartDate1 + @Model.MonthlyRollCall[i].EndDate1 + @Model.MonthlyRollCall[i].StartDate2 + @Model.MonthlyRollCall[i].EndDate2 + } + else + { + +
+ + @Model.MonthlyRollCall[i].LeaveType + +
+ + +
+ @* + @Model.MonthlyRollCall[i].LeaveType + *@ +
+ + } + } + @Model.MonthlyRollCall[i].BreakTimeString @if (@Model.MonthlyRollCall[i].IsSliced) @@ -339,13 +377,13 @@ تاریخ - ورود - خروج - ورود - خروج - استراحت + ورود + خروج + ورود + خروج + استراحت منقطع - ساعت کارکرد + ساعت کارکرد @@ -354,12 +392,50 @@ } @foreach (var day in Model.MonthlyRollCall) { - + @day.DateTimeGr.ToFarsi() - @day.DateTimeGr.DayOfWeek.DayOfWeeKToPersian() - @day.StartDate1 - @day.EndDate1 - @day.StartDate2 - @day.EndDate2 + + @if (day.IsAbsent) + { + +
+ غیبت +
+ + +
+ @* غیبت *@ +
+ + } + else + { + @if (string.IsNullOrWhiteSpace(day.LeaveType)) + { + @day.StartDate1 + @day.EndDate1 + @day.StartDate2 + @day.EndDate2 + } + else + { + +
+ + @day.LeaveType + +
+ + +
+ @* + @day.LeaveType + *@ +
+ + } + } + @day.BreakTimeString @if (day.IsSliced) @@ -380,75 +456,63 @@
+ +
+
+ + + + + + + + + + + +
موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStrساعات حضور : @Model.TotalPresentTimeStrساعات استراحت : @Model.TotalBreakTimeStrساعات کارکرد : @Model.TotalWorkingTimeStr
+
+
-
-
-
- @{ - if (Model.IsLeft) - { - - طبق تصفیه حساب نهایی تنظیمی فوق، آخرین روز اشتغال بکار اینجانب  - @Model.LastDayOfWork  - بوده و قطع همکاری با کارفرما و کارگاه از تاریخ  - @Model.LeftWorkDate  - می باشد - - } - else - { - - - } - } +
+ + - -
-
- @*
اینجانب     @Model.EmployeeFullName
-
نام پدر:     @Model.FathersName
-
به کد ملی:  @Model.NationalCode
-
متولد:     @Model.DateOfBirth
*@ -
-
-
- @* پـرسنل شـرکت  @Model.WorkshopName -   - به کارفرمایی   آقای/خانم/شرکت    +
+ + + - - - - + +
@{ - foreach (var item in @Model.EmployerList) - { - @item.EmployerFullName ، + if (Model.IsLeft) + { + + طبق تصفیه حساب نهایی تنظیمی فوق، آخرین روز اشتغال بکار اینجانب  + @Model.LastDayOfWork  + بوده و قطع همکاری با کارفرما و کارگاه از تاریخ  + @Model.LeftWorkDate  + می باشد + + } + else + { + + } } - } -    - مبلغ ............. ریال را بصورت نقدی از کارفرما دریافت نمودم. *@ - - - - - - - -
- -
-
+
+
اثر انگشت
-
+
امضاء
-
+