diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index 39a8e3ee..4a781e52 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -4723,6 +4723,8 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll #endregion #region KebabMahdiAbsentsCaclculation + + var rollCallDays = groupedRollCall.Count > mandatoryDays ? mandatoryDays : groupedRollCall.Count; @@ -5108,6 +5110,45 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll }); } #endregion + + #region اگر که پرسنل در روز های جمعه یا پنجشنبه غیبت داشت یک روز به غیبت اضافه شود +//این منطق زمانی برقرار هست که مرخصی در اون روز نداشته باشه + + // ساخت لیست روزهای بین شروع و پایان قرارداد + var contractDaysList = Enumerable.Range(0, (contractEnd - contractStart).Days + 1) + .Select(offset => contractStart.AddDays(offset)) + .ToList(); + + // کم کردن روزهایی که حضور دارند + var absentDaysList = contractDaysList + .Where(date => !groupedRollCall.Any(g => g.ShiftDate.Date == date.Date)) + .ToList(); + + var absentFridaysOrThursdays = absentDaysList + .Where(date => date.DayOfWeek is DayOfWeek.Friday or DayOfWeek.Thursday) + .ToList(); + + var leaveList = _context.LeaveList + .Where(x => x.EmployeeId == employeeId + && x.WorkshopId == workshopId + && x.IsAccepted == true + && x.StartLeave <= contractEnd + && x.EndLeave >= contractStart + && x.LeaveType == "استحقاقی" + && x.PaidLeaveType =="روزانه") + .Select(x => new { x.StartLeave, x.EndLeave }) + .ToList(); + + // بررسی کدام روزهای غایب جمعه/پنجشنبه در بازه مرخصی قرار ندارند + var absentFridaysOrThursdaysWithoutLeave = absentFridaysOrThursdays + .Where(date => !leaveList.Any(leave => date.Date >= leave.StartLeave.Date && date.Date <= leave.EndLeave.Date)) + .ToList(); + + // تعداد روزهای غایب جمعه/پنجشنبه بدون مرخصی + int absentFridaysOrThursdaysWithoutLeaveCount = absentFridaysOrThursdaysWithoutLeave.Count; + + absentsDeductionAmount += absentFridaysOrThursdaysWithoutLeaveCount * dailyWage; + #endregion return new CustomizeCheckoutMandatoryViewModel