From 5daa36cfb552527f010bffee50563a25a1601fbf Mon Sep 17 00:00:00 2001 From: SamSys Date: Tue, 6 May 2025 19:16:40 +0330 Subject: [PATCH] start Convert Static compute to rollCall Compute --- .../InsuranceListApplication.cs | 3 +- .../Repository/RollCallMandatoryRepository.cs | 3114 ++++++++++++++++- .../Pages/Company/Checkouts/Index.cshtml.cs | 4 + 3 files changed, 3092 insertions(+), 29 deletions(-) diff --git a/CompanyManagment.Application/InsuranceListApplication.cs b/CompanyManagment.Application/InsuranceListApplication.cs index ff63467e..60ad1fef 100644 --- a/CompanyManagment.Application/InsuranceListApplication.cs +++ b/CompanyManagment.Application/InsuranceListApplication.cs @@ -1633,7 +1633,8 @@ public class InsuranceListApplication: IInsuranceListApplication dateSaleryviewModel.StartDateGr = startDateGr; dateSaleryviewModel.EndDateGr = endDateGr; var _dateSalary = _dateSalaryRepository.GetDateSalaryViewModel(dateSaleryviewModel); - if (_dateSalary != null && _dateSalary.Id >0) + // && _dateSalary.Id >0 + if (_dateSalary != null) { var dateSaleryItemviewModel = new DateSalaryItemSearchModel(); dateSaleryItemviewModel.DateSalaryId = _dateSalary.Id; diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index 42131f83..01d392cc 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -32,6 +32,9 @@ using Company.Domain.RewardAgg; using CompanyManagment.App.Contracts.Reward.Enums; using static System.Runtime.InteropServices.JavaScript.JSType; using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; +using Company.Domain.HolidayItemAgg; +using PersianTools.Core; +using CompanyManagment.EFCore.Migrations; namespace CompanyManagment.EFCore.Repository; @@ -42,21 +45,23 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll private readonly IYearlySalaryRepository _yearlySalaryRepository; private readonly ILeftWorkRepository _leftWorkRepository; private readonly ILeaveRepository _leaveRepository; + private readonly IHolidayItemRepository _holidayItemRepository; public RollCallMandatoryRepository(CompanyContext context, IYearlySalaryRepository yearlySalaryRepository, - ILeftWorkRepository leftWorkRepository, ILeaveRepository leaveRepository) : base(context) + ILeftWorkRepository leftWorkRepository, ILeaveRepository leaveRepository, IHolidayItemRepository holidayItemRepository) : base(context) { _context = context; _yearlySalaryRepository = yearlySalaryRepository; _leftWorkRepository = leftWorkRepository; _leaveRepository = leaveRepository; + _holidayItemRepository = holidayItemRepository; } #region OfficialChckout public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, -DateTime contractEnd, -CreateWorkingHoursTemp command, bool holidayWorking) + DateTime contractEnd, + CreateWorkingHoursTemp command, bool holidayWorking) { #region Entities @@ -163,9 +168,9 @@ CreateWorkingHoursTemp command, bool holidayWorking) { if (leaveSearchResult.Any(x => x.HasShiftDuration)) { - - - + + + var sumSpansDouble = (sumSpans.TotalMinutes) / 60; if (sumSpansDouble < mandatoryHours) @@ -182,9 +187,9 @@ CreateWorkingHoursTemp command, bool holidayWorking) TimeSpan totalLeave = new TimeSpan(leaveSearchResult.Sum(x => x.ShiftDuration.Ticks)); var totalLeaveDouble = (totalLeave.TotalMinutes) / 60; - if(totalLeaveDouble > starndardHoursesPerTotalDays) + if (totalLeaveDouble > starndardHoursesPerTotalDays) { - + sumSpans = sumSpans.Add(starndardHoursesPerTotalDaysSapn); } else @@ -243,7 +248,7 @@ CreateWorkingHoursTemp command, bool holidayWorking) } } - + } Console.WriteLine(sumSpans); @@ -259,8 +264,8 @@ CreateWorkingHoursTemp command, bool holidayWorking) //********** محاسبه مدت اضافه کاری ***********// #region ComputeMandatoryAtThisTime - - + + //***********************************// var dailyFix = TimeSpan.Parse("07:20"); TimeSpan mandatoryHoursTimeSpan = new TimeSpan(7, 20, 0).Multiply(mandatorDays); @@ -646,24 +651,24 @@ CreateWorkingHoursTemp command, bool holidayWorking) return res; } - public async Task RotatingShiftReport(long workshopId,long employeeId, DateTime contractStart, DateTime contractEnd, string shiftwork) + public async Task RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart, DateTime contractEnd, string shiftwork) { - List rollCallResult =await _context.RollCalls.Where(x => + List rollCallResult = await _context.RollCalls.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date && x.StartDate.Value.Date <= contractEnd.Date && x.EndDate != null).Select(x => new RollCallViewModel() - { - StartDate = x.StartDate, - EndDate = x.EndDate, - ShiftSpan = (x.EndDate.Value - x.StartDate.Value), - CreationDate = x.ShiftDate, - }).ToListAsync(); + { + StartDate = x.StartDate, + EndDate = x.EndDate, + ShiftSpan = (x.EndDate.Value - x.StartDate.Value), + CreationDate = x.ShiftDate, + }).ToListAsync(); List groupedRollCall = rollCallResult.GroupBy(x => x.CreationDate.Date).Select(x => new GroupedRollCalls() { CreationDate = x.Key, ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = 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)), - + }).OrderBy(x => x.CreationDate).ToList(); @@ -676,8 +681,8 @@ CreateWorkingHoursTemp command, bool holidayWorking) int moriningCount = 0; int eveningCount = 0; int nightCount = 0; - - int moriningWinRate = rotatingResultList.Where(x=>x.IsMorningShift).Sum(x => x.WinRate); + + int moriningWinRate = rotatingResultList.Where(x => x.IsMorningShift).Sum(x => x.WinRate); int eveningWinRate = rotatingResultList.Where(x => x.IsEveningShift).Sum(x => x.WinRate); int nightWinRate = rotatingResultList.Where(x => x.IsNightShift).Sum(x => x.WinRate); @@ -702,7 +707,7 @@ CreateWorkingHoursTemp command, bool holidayWorking) eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); nightCount = rotatingResultList.Count(x => x.IsNightShift); } - + @@ -722,7 +727,7 @@ CreateWorkingHoursTemp command, bool holidayWorking) //} //else// اگر منظم و شیفتی بود //{ - + //} var totalDays = (int)(contractEnd - contractStart).TotalDays + 1; @@ -754,7 +759,7 @@ CreateWorkingHoursTemp command, bool holidayWorking) var rotatingFaResult = ""; if (RotatingfaName.Count > 1)// اگر تعداد شیفت های محاسبه شده بیش از یک بود { - + for (var rotateNumber = 0; rotateNumber < RotatingfaName.Count; rotateNumber++) { if (rotateNumber == 0) @@ -769,7 +774,7 @@ CreateWorkingHoursTemp command, bool holidayWorking) { rotatingFaResult = "نوبت کاری ندارد"; - + } @@ -926,7 +931,7 @@ CreateWorkingHoursTemp command, bool holidayWorking) var nightWorkingTime = new TimeSpan(); #endregion - + foreach (var shift in item.ShiftList) { #region DatePeriod @@ -1154,7 +1159,7 @@ CreateWorkingHoursTemp command, bool holidayWorking) result.IsNightShift = false; result.IsEveningShift = false; result.RotatingShiftStatus = "صبح"; - + } if (result.MorningWorkSpan < result.NightWorkSpan @@ -1208,6 +1213,3050 @@ CreateWorkingHoursTemp command, bool holidayWorking) } + + public List ConvertStaticHouresToRollCall(CreateWorkingHoursTemp command, bool workshopHolidyWorking) + { + #region Entities + + var sdate = command.ContarctStart.ToEnglishNumber(); + var edate = command.ContractEnd.ToEnglishNumber(); + var syear = Convert.ToInt32(sdate.Substring(0, 4)); + var smonth = Convert.ToInt32(sdate.Substring(5, 2)); + var sday = Convert.ToInt32(sdate.Substring(8, 2)); + + var eyear = Convert.ToInt32(edate.Substring(0, 4)); + var emonth = Convert.ToInt32(edate.Substring(5, 2)); + var eday = Convert.ToInt32(edate.Substring(8, 2)); + + var d1 = new PersianDateTime(syear, smonth, sday); + var d2 = new PersianDateTime(eyear, emonth, eday); + + + #endregion + + + + #region SumRestTimesOneShift + + var rest0 = new TimeSpan(); + var rest1 = new TimeSpan(); + var rest2 = new TimeSpan(); + var rest3 = new TimeSpan(); + var rest4 = new TimeSpan(); + var rest5 = new TimeSpan(); + var rest6 = new TimeSpan(); + + var rest0w1 = new TimeSpan(); + var rest1w1 = new TimeSpan(); + var rest2w1 = new TimeSpan(); + var rest3w1 = new TimeSpan(); + var rest4w1 = new TimeSpan(); + var rest5w1 = new TimeSpan(); + var rest6w1 = new TimeSpan(); + + var rest0w2 = new TimeSpan(); + var rest1w2 = new TimeSpan(); + var rest2w2 = new TimeSpan(); + var rest3w2 = new TimeSpan(); + var rest4w2 = new TimeSpan(); + var rest5w2 = new TimeSpan(); + var rest6w2 = new TimeSpan(); + + var rest0w3 = new TimeSpan(); + var rest1w3 = new TimeSpan(); + var rest2w3 = new TimeSpan(); + var rest3w3 = new TimeSpan(); + var rest4w3 = new TimeSpan(); + var rest5w3 = new TimeSpan(); + var rest6w3 = new TimeSpan(); + + var rest0w4 = new TimeSpan(); + var rest1w4 = new TimeSpan(); + var rest2w4 = new TimeSpan(); + var rest3w4 = new TimeSpan(); + var rest4w4 = new TimeSpan(); + var rest5w4 = new TimeSpan(); + var rest6w4 = new TimeSpan(); + if (command.ShiftWork == "4") + { + + //week1 + command.RestTimeShanbe1 = command.RestTimeShanbe1 == "0" ? "00" : command.RestTimeShanbe1; + command.RestTimeShanbe1Min = command.RestTimeShanbe1Min == "0" ? "00" : command.RestTimeShanbe1Min; + command.RestTimeYekShanbe1 = command.RestTimeYekShanbe1 == "0" ? "00" : command.RestTimeYekShanbe1; + command.RestTimeYekShanbe1Min = + command.RestTimeYekShanbe1Min == "0" ? "00" : command.RestTimeYekShanbe1Min; + command.RestTimeDoShanbe1 = command.RestTimeDoShanbe1 == "0" ? "00" : command.RestTimeDoShanbe1; + command.RestTimeDoShanbe1Min = + command.RestTimeDoShanbe1Min == "0" ? "00" : command.RestTimeDoShanbe1Min; + command.RestTimeSeShanbe1 = command.RestTimeSeShanbe1 == "0" ? "00" : command.RestTimeSeShanbe1; + command.RestTimeSeShanbe1Min = + command.RestTimeSeShanbe1Min == "0" ? "00" : command.RestTimeSeShanbe1Min; + command.RestTimeCheharShanbe1 = + command.RestTimeCheharShanbe1 == "0" ? "00" : command.RestTimeCheharShanbe1; + command.RestTimeCheharShanbe1Min = + command.RestTimeCheharShanbe1Min == "0" ? "00" : command.RestTimeCheharShanbe1Min; + command.RestTimePanjShanbe1 = command.RestTimePanjShanbe1 == "0" ? "00" : command.RestTimePanjShanbe1; + command.RestTimePanjShanbe1Min = + command.RestTimePanjShanbe1Min == "0" ? "00" : command.RestTimePanjShanbe1Min; + command.RestTimeJome1 = command.RestTimeJome1 == "0" ? "00" : command.RestTimeJome1; + command.RestTimeJome1Min = command.RestTimeJome1Min == "0" ? "00" : command.RestTimeJome1Min; + + //week2 + command.RestTimeShanbe2 = command.RestTimeShanbe2 == "0" ? "00" : command.RestTimeShanbe2; + command.RestTimeShanbe2Min = command.RestTimeShanbe2Min == "0" ? "00" : command.RestTimeShanbe2Min; + command.RestTimeYekShanbe2 = command.RestTimeYekShanbe2 == "0" ? "00" : command.RestTimeYekShanbe2; + command.RestTimeYekShanbe2Min = + command.RestTimeYekShanbe2Min == "0" ? "00" : command.RestTimeYekShanbe2Min; + command.RestTimeDoShanbe2 = command.RestTimeDoShanbe2 == "0" ? "00" : command.RestTimeDoShanbe2; + command.RestTimeDoShanbe2Min = + command.RestTimeDoShanbe2Min == "0" ? "00" : command.RestTimeDoShanbe2Min; + command.RestTimeSeShanbe2 = command.RestTimeSeShanbe2 == "0" ? "00" : command.RestTimeSeShanbe2; + command.RestTimeSeShanbe2Min = + command.RestTimeSeShanbe2Min == "0" ? "00" : command.RestTimeSeShanbe2Min; + command.RestTimeCheharShanbe2 = + command.RestTimeCheharShanbe2 == "0" ? "00" : command.RestTimeCheharShanbe2; + command.RestTimeCheharShanbe2Min = + command.RestTimeCheharShanbe2Min == "0" ? "00" : command.RestTimeCheharShanbe2Min; + command.RestTimePanjShanbe2 = command.RestTimePanjShanbe2 == "0" ? "00" : command.RestTimePanjShanbe2; + command.RestTimePanjShanbe2Min = + command.RestTimePanjShanbe2Min == "0" ? "00" : command.RestTimePanjShanbe2Min; + command.RestTimeJome2 = command.RestTimeJome2 == "0" ? "00" : command.RestTimeJome2; + command.RestTimeJome2Min = command.RestTimeJome2Min == "0" ? "00" : command.RestTimeJome2Min; + + //week3 + command.RestTimeShanbe3 = command.RestTimeShanbe3 == "0" ? "00" : command.RestTimeShanbe3; + command.RestTimeShanbe3Min = command.RestTimeShanbe3Min == "0" ? "00" : command.RestTimeShanbe3Min; + command.RestTimeYekShanbe3 = command.RestTimeYekShanbe3 == "0" ? "00" : command.RestTimeYekShanbe3; + command.RestTimeYekShanbe3Min = + command.RestTimeYekShanbe3Min == "0" ? "00" : command.RestTimeYekShanbe3Min; + command.RestTimeDoShanbe3 = command.RestTimeDoShanbe3 == "0" ? "00" : command.RestTimeDoShanbe3; + command.RestTimeDoShanbe3Min = + command.RestTimeDoShanbe3Min == "0" ? "00" : command.RestTimeDoShanbe3Min; + command.RestTimeSeShanbe3 = command.RestTimeSeShanbe3 == "0" ? "00" : command.RestTimeSeShanbe3; + command.RestTimeSeShanbe3Min = + command.RestTimeSeShanbe3Min == "0" ? "00" : command.RestTimeSeShanbe3Min; + command.RestTimeCheharShanbe3 = + command.RestTimeCheharShanbe3 == "0" ? "00" : command.RestTimeCheharShanbe3; + command.RestTimeCheharShanbe3Min = + command.RestTimeCheharShanbe3Min == "0" ? "00" : command.RestTimeCheharShanbe3Min; + command.RestTimePanjShanbe3 = command.RestTimePanjShanbe3 == "0" ? "00" : command.RestTimePanjShanbe3; + command.RestTimePanjShanbe3Min = + command.RestTimePanjShanbe3Min == "0" ? "00" : command.RestTimePanjShanbe3Min; + command.RestTimeJome3 = command.RestTimeJome3 == "0" ? "00" : command.RestTimeJome3; + command.RestTimeJome3Min = command.RestTimeJome3Min == "0" ? "00" : command.RestTimeJome3Min; + + //week4 + command.RestTimeShanbe4 = command.RestTimeShanbe4 == "0" ? "00" : command.RestTimeShanbe4; + command.RestTimeShanbe4Min = command.RestTimeShanbe4Min == "0" ? "00" : command.RestTimeShanbe4Min; + command.RestTimeYekShanbe4 = command.RestTimeYekShanbe4 == "0" ? "00" : command.RestTimeYekShanbe4; + command.RestTimeYekShanbe4Min = + command.RestTimeYekShanbe4Min == "0" ? "00" : command.RestTimeYekShanbe4Min; + command.RestTimeDoShanbe4 = command.RestTimeDoShanbe4 == "0" ? "00" : command.RestTimeDoShanbe4; + command.RestTimeDoShanbe4Min = + command.RestTimeDoShanbe4Min == "0" ? "00" : command.RestTimeDoShanbe4Min; + command.RestTimeSeShanbe4 = command.RestTimeSeShanbe4 == "0" ? "00" : command.RestTimeSeShanbe4; + command.RestTimeSeShanbe4Min = + command.RestTimeSeShanbe4Min == "0" ? "00" : command.RestTimeSeShanbe4Min; + command.RestTimeCheharShanbe4 = + command.RestTimeCheharShanbe4 == "0" ? "00" : command.RestTimeCheharShanbe4; + command.RestTimeCheharShanbe4Min = + command.RestTimeCheharShanbe4Min == "0" ? "00" : command.RestTimeCheharShanbe4Min; + command.RestTimePanjShanbe4 = command.RestTimePanjShanbe4 == "0" ? "00" : command.RestTimePanjShanbe4; + command.RestTimePanjShanbe4Min = + command.RestTimePanjShanbe4Min == "0" ? "00" : command.RestTimePanjShanbe4Min; + command.RestTimeJome4 = command.RestTimeJome4 == "0" ? "00" : command.RestTimeJome4; + command.RestTimeJome4Min = command.RestTimeJome4Min == "0" ? "00" : command.RestTimeJome4Min; + + // sumrest week1 + rest0w1 = TimeSpan.Parse($"{command.RestTimeShanbe1}:{command.RestTimeShanbe1Min}"); + rest1w1 = TimeSpan.Parse($"{command.RestTimeYekShanbe1}:{command.RestTimeYekShanbe1Min}"); + rest2w1 = TimeSpan.Parse($"{command.RestTimeDoShanbe1}:{command.RestTimeDoShanbe1Min}"); + rest3w1 = TimeSpan.Parse($"{command.RestTimeSeShanbe1}:{command.RestTimeSeShanbe1Min}"); + rest4w1 = TimeSpan.Parse($"{command.RestTimeCheharShanbe1}:{command.RestTimeCheharShanbe1Min}"); + rest5w1 = TimeSpan.Parse($"{command.RestTimePanjShanbe1}:{command.RestTimePanjShanbe1Min}"); + rest6w1 = TimeSpan.Parse($"{command.RestTimeJome1}:{command.RestTimeJome1Min}"); + + // sumrest week2 + rest0w2 = TimeSpan.Parse($"{command.RestTimeShanbe2}:{command.RestTimeShanbe2Min}"); + rest1w2 = TimeSpan.Parse($"{command.RestTimeYekShanbe2}:{command.RestTimeYekShanbe2Min}"); + rest2w2 = TimeSpan.Parse($"{command.RestTimeDoShanbe2}:{command.RestTimeDoShanbe2Min}"); + rest3w2 = TimeSpan.Parse($"{command.RestTimeSeShanbe2}:{command.RestTimeSeShanbe2Min}"); + rest4w2 = TimeSpan.Parse($"{command.RestTimeCheharShanbe2}:{command.RestTimeCheharShanbe2Min}"); + rest5w2 = TimeSpan.Parse($"{command.RestTimePanjShanbe2}:{command.RestTimePanjShanbe2Min}"); + rest6w2 = TimeSpan.Parse($"{command.RestTimeJome2}:{command.RestTimeJome2Min}"); + + // sumrest week3 + rest0w3 = TimeSpan.Parse($"{command.RestTimeShanbe3}:{command.RestTimeShanbe3Min}"); + rest1w3 = TimeSpan.Parse($"{command.RestTimeYekShanbe3}:{command.RestTimeYekShanbe3Min}"); + rest2w3 = TimeSpan.Parse($"{command.RestTimeDoShanbe3}:{command.RestTimeDoShanbe3Min}"); + rest3w3 = TimeSpan.Parse($"{command.RestTimeSeShanbe3}:{command.RestTimeSeShanbe3Min}"); + rest4w3 = TimeSpan.Parse($"{command.RestTimeCheharShanbe3}:{command.RestTimeCheharShanbe3Min}"); + rest5w3 = TimeSpan.Parse($"{command.RestTimePanjShanbe3}:{command.RestTimePanjShanbe3Min}"); + rest6w3 = TimeSpan.Parse($"{command.RestTimeJome3}:{command.RestTimeJome3Min}"); + + // sumrest week4 + rest0w4 = TimeSpan.Parse($"{command.RestTimeShanbe4}:{command.RestTimeShanbe4Min}"); + rest1w4 = TimeSpan.Parse($"{command.RestTimeYekShanbe4}:{command.RestTimeYekShanbe4Min}"); + rest2w4 = TimeSpan.Parse($"{command.RestTimeDoShanbe4}:{command.RestTimeDoShanbe4Min}"); + rest3w4 = TimeSpan.Parse($"{command.RestTimeSeShanbe4}:{command.RestTimeSeShanbe4Min}"); + rest4w4 = TimeSpan.Parse($"{command.RestTimeCheharShanbe4}:{command.RestTimeCheharShanbe4Min}"); + rest5w4 = TimeSpan.Parse($"{command.RestTimePanjShanbe4}:{command.RestTimePanjShanbe4Min}"); + rest6w4 = TimeSpan.Parse($"{command.RestTimeJome4}:{command.RestTimeJome4Min}"); + + } + + #endregion + + + //بدست آوردن مرخصی + LeaveSearchModel leaveSearch = new LeaveSearchModel() + { + EmployeeId = command.EmployeeId, + WorkshopId = command.WorkshopId, + + StartLeaveGr = command.ContractStartGr, + EndLeaveGr = command.ContractEndGr, + IsAccepted = true, + }; + var leaveSearchResult = _leaveRepository.search(leaveSearch); + //بدس آوردن تعطیلات رسمی + var holidayList = _holidayItemRepository.GetHolidayItem(sdate.Substring(0, 4)); + bool isHoliday = false; + + #region ShiftWork4Compute + + if (command.ShiftWork == "4") + { + //DateTime currentDay = ($"{da}").ToGeorgianDateTime(); + var hasSickLeave = false; + for (var da = d1; da <= d2; da.AddDays(1)) + { + var FirstDayOfMonth = new PersianDateTime(da.Year, da.Month, 1); + var w1 = 0; + var w2 = 0; + var w3 = 0; + var w4 = 0; + var w5 = 0; + var w6 = 0; + + switch (FirstDayOfMonth.DayOfWeek) + { + case "شنبه": + w1 = 7; + w2 = 14; + w3 = 28; + w4 = 31; + break; + case "یکشنبه": + w1 = 6; + w2 = 13; + w3 = 20; + w4 = 27; + w5 = 31; + break; + case "دوشنبه": + w1 = 5; + w2 = 12; + w3 = 19; + w4 = 26; + w5 = 31; + break; + case "سه شنبه": + w1 = 4; + w2 = 11; + w3 = 18; + w4 = 25; + w5 = 31; + break; + case "چهارشنبه": + w1 = 3; + w2 = 10; + w3 = 17; + w4 = 24; + w5 = 31; + break; + case "پنج شنبه": + w1 = 2; + w2 = 9; + w3 = 16; + w4 = 23; + w5 = 30; + w6 = 31; + break; + case "جمعه": + w1 = 1; + w2 = 8; + w3 = 15; + w4 = 22; + w5 = 29; + w6 = 31; + break; + } + + switch (da.DayOfWeek) + { + case "شنبه": + var currentDateFa = $"{da}"; + + if (!workshopHolidyWorking) + { + isHoliday = holidayList.Any(x => x == currentDateFa); + } + if (da.Day <= w1 && command.Shanbe1 && isHoliday == false) + { + DateTime currntDateGr = currentDateFa.ToGeorgianDateTime(); + var res = FindStaticShiftsStatus(command.SingleShift1Shanbe1, command.SingleShift2Shanbe1, command.TowShifts1Shanbe1, command.TowShifts2Shanbe1, currntDateGr, rest0w1) + + } + else if (da.Day > w1 && da.Day <= w2) + { + if (command.Shanbe2 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Shanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Shanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Shanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Shanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest0w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest0w2); + sumRest = sumRest.Add(rest0w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Shanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Shanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Shanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Shanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest0w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest0w2); + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + + } + } + else if (command.Shanbe2 && leavId > 0) + { + } + } + else if (da.Day > w2 && da.Day <= w3) + { + if (command.Shanbe3 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Shanbe3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Shanbe3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Shanbe3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Shanbe3); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest0w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest0w3); + sumRest = sumRest.Add(rest0w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Shanbe3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Shanbe3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Shanbe3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Shanbe3); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest0w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest0w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.Shanbe3 && leavId > 0) + { + } + } + else if (da.Day > w3 && da.Day <= w4) + { + if (command.Shanbe4 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Shanbe4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Shanbe4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Shanbe4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Shanbe4); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest0w4) + endTimeSingel2 = endTimeSingel2.Subtract(rest0w4); + sumRest = sumRest.Add(rest0w4); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Shanbe4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Shanbe4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Shanbe4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Shanbe4); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest0w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest0w4); + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.Shanbe4 && leavId > 0) + { + } + } + else if (da.Day > w4 && da.Day <= w5) + { + if (command.Shanbe1 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Shanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Shanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Shanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Shanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest0w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest0w1); + sumRest = sumRest.Add(rest0w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Shanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Shanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Shanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Shanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest0w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest0w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.Shanbe1 && leavId > 0) + { + } + } + else if (da.Day > w5 && da.Day <= w6) + { + if (command.Shanbe2 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Shanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Shanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Shanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Shanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest0w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest0w2); + sumRest = sumRest.Add(rest0w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Shanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Shanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Shanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Shanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest0w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest0w2); + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.Shanbe2 && leavId > 0) + { + } + } + + break; + case "یکشنبه": + if (da.Day <= w1) + { + if (command.YekShanbe1 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1YekShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2YekShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1YekShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2YekShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest1w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest1w1); + sumRest = sumRest.Add(rest1w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1YekShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2YekShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1YekShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2YekShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest1w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest1w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.YekShanbe1 && leavId > 0) + { + } + } + else if (da.Day > w1 && da.Day <= w2) + { + if (command.YekShanbe2 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1YekShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2YekShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1YekShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2YekShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest1w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest1w2); + sumRest = sumRest.Add(rest1w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1YekShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2YekShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1YekShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2YekShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest1w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest1w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.YekShanbe2 && leavId > 0) + { + } + } + else if (da.Day > w2 && da.Day <= w3) + { + if (command.YekShanbe3 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1YekShanbe3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2YekShanbe3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1YekShanbe3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2YekShanbe3); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest1w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest1w3); + sumRest = sumRest.Add(rest1w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1YekShanbe3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2YekShanbe3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1YekShanbe3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2YekShanbe3); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest1w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest1w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.YekShanbe3 && leavId > 0) + { + } + } + else if (da.Day > w3 && da.Day <= w4) + { + if (command.YekShanbe4 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1YekShanbe4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2YekShanbe4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1YekShanbe4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2YekShanbe4); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest1w4) + endTimeSingel2 = endTimeSingel2.Subtract(rest1w4); + sumRest = sumRest.Add(rest1w4); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1YekShanbe4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2YekShanbe4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1YekShanbe4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2YekShanbe4); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest1w4) + endTimeSingel2 = endTimeSingel2.Subtract(rest1w4); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.YekShanbe4 && leavId > 0) + { + } + } + else if (da.Day > w4 && da.Day <= w5) + { + if (command.YekShanbe1 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1YekShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2YekShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1YekShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2YekShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest1w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest1w1); + sumRest = sumRest.Add(rest1w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1YekShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2YekShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1YekShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2YekShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest1w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest1w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.YekShanbe1 && leavId > 0) + { + } + } + else if (da.Day > w5 && da.Day <= w6) + { + if (command.YekShanbe2 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1YekShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2YekShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1YekShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2YekShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest1w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest1w2); + sumRest = sumRest.Add(rest1w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1YekShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2YekShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1YekShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2YekShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest1w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest1w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.YekShanbe2 && leavId > 0) + { + } + } + + break; + case "دوشنبه": + if (da.Day <= w1) + { + if (command.DoShanbe1 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1DoShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2DoShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1DoShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2DoShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest2w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest2w1); + + sumRest = sumRest.Add(rest2w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1DoShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2DoShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1DoShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2DoShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest2w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest2w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + else + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + } + } + else if (command.DoShanbe1 && leavId > 0) + { + } + } + else if (da.Day > w1 && da.Day <= w2) + { + if (command.DoShanbe2 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1DoShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2DoShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1DoShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2DoShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest2w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest2w2); + sumRest = sumRest.Add(rest2w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1DoShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2DoShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1DoShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2DoShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest2w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest2w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.DoShanbe2 && leavId > 0) + { + } + } + else if (da.Day > w2 && da.Day <= w3) + { + if (command.DoShanbe3 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1DoShanbe3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2DoShanbe3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1DoShanbe3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2DoShanbe3); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest2w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest2w3); + sumRest = sumRest.Add(rest2w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1DoShanbe3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2DoShanbe3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1DoShanbe3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2DoShanbe3); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest2w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest2w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.DoShanbe3 && leavId > 0) + { + } + } + else if (da.Day > w3 && da.Day <= w4) + { + if (command.DoShanbe4 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1DoShanbe4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2DoShanbe4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1DoShanbe4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2DoShanbe4); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest2w4) + endTimeSingel2 = endTimeSingel2.Subtract(rest2w4); + sumRest = sumRest.Add(rest2w4); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1DoShanbe4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2DoShanbe4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1DoShanbe4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2DoShanbe4); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest2w4) + endTimeSingel2 = endTimeSingel2.Subtract(rest2w4); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.DoShanbe4 && leavId > 0) + { + } + } + else if (da.Day > w4 && da.Day <= w5) + { + if (command.DoShanbe1 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1DoShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2DoShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1DoShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2DoShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest2w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest2w1); + sumRest = sumRest.Add(rest2w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1DoShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2DoShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1DoShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2DoShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest2w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest2w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.DoShanbe1 && leavId > 0) + { + } + } + else if (da.Day > w5 && da.Day <= w6) + { + if (command.DoShanbe2 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1DoShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2DoShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1DoShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2DoShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest2w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest2w2); + sumRest = sumRest.Add(rest2w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1DoShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2DoShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1DoShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2DoShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest2w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest2w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.DoShanbe2 && leavId > 0) + { + } + } + + break; + case "سه شنبه": + if (da.Day <= w1) + { + if (command.SeShanbe1 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1SeShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2SeShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1SeShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2SeShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest3w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest3w1); + sumRest = sumRest.Add(rest3w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1SeShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2SeShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1SeShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2SeShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest3w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest3w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.SeShanbe1 && leavId > 0) + { + } + } + else if (da.Day > w1 && da.Day <= w2) + { + if (command.SeShanbe2 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1SeShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2SeShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1SeShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2SeShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest3w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest3w2); + sumRest = sumRest.Add(rest3w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1SeShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2SeShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1SeShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2SeShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest3w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest3w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.SeShanbe2 && leavId > 0) + { + } + } + else if (da.Day > w2 && da.Day <= w3) + { + if (command.SeShanbe3 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1SeShanbe3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2SeShanbe3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1SeShanbe3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2SeShanbe3); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest3w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest3w3); + sumRest = sumRest.Add(rest3w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1SeShanbe3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2SeShanbe3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1SeShanbe3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2SeShanbe3); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest3w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest3w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.SeShanbe3 && leavId > 0) + { + } + } + else if (da.Day > w3 && da.Day <= w4) + { + if (command.SeShanbe4 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1SeShanbe4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2SeShanbe4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1SeShanbe4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2SeShanbe4); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest3w4) + endTimeSingel2 = endTimeSingel2.Subtract(rest3w4); + sumRest = sumRest.Add(rest3w4); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1SeShanbe4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2SeShanbe4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1SeShanbe4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2SeShanbe4); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest3w4) + endTimeSingel2 = endTimeSingel2.Subtract(rest3w4); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.SeShanbe4 && leavId > 0) + { + } + } + else if (da.Day > w4 && da.Day <= w5) + { + if (command.SeShanbe1 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1SeShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2SeShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1SeShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2SeShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest3w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest3w1); + sumRest = sumRest.Add(rest3w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1SeShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2SeShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1SeShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2SeShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest3w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest3w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.SeShanbe1 && leavId > 0) + { + } + } + else if (da.Day > w5 && da.Day <= w6) + { + if (command.SeShanbe2 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1SeShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2SeShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1SeShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2SeShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest3w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest3w2); + sumRest = sumRest.Add(rest3w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1SeShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2SeShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1SeShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2SeShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest3w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest3w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.SeShanbe2 && leavId > 0) + { + } + } + + break; + case "چهارشنبه": + if (da.Day <= w1) + { + if (command.CheharShanbe1 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1CheharShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2CheharShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1CheharShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2CheharShanbe1); + + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + + if (endTimeSingel2 - starTimeSingel1 >= rest4w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest4w1); + sumRest = sumRest.Add(rest4w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1CheharShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2CheharShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1CheharShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2CheharShanbe1); + + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + + if (endTimeSingel2 - starTimeSingel1 >= rest4w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest4w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + else + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + } + } + else if (command.CheharShanbe1 && leavId > 0) + { + } + } + else if (da.Day > w1 && da.Day <= w2) + { + if (command.CheharShanbe2 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1CheharShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2CheharShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1CheharShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2CheharShanbe2); + + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + + if (endTimeSingel2 - starTimeSingel1 >= rest4w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest4w2); + sumRest = sumRest.Add(rest4w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1CheharShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2CheharShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1CheharShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2CheharShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest4w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest4w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.CheharShanbe2 && leavId > 0) + { + } + } + else if (da.Day > w2 && da.Day <= w3) + { + if (command.CheharShanbe3 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1CheharShanbe3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2CheharShanbe3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1CheharShanbe3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2CheharShanbe3); + + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + + if (endTimeSingel2 - starTimeSingel1 >= rest4w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest4w3); + sumRest = sumRest.Add(rest4w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1CheharShanbe3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2CheharShanbe3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1CheharShanbe3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2CheharShanbe3); + + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + + if (endTimeSingel2 - starTimeSingel1 >= rest4w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest4w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.CheharShanbe3 && leavId > 0) + { + } + } + else if (da.Day > w3 && da.Day <= w4) + { + if (command.CheharShanbe4 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1CheharShanbe4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2CheharShanbe4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1CheharShanbe4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2CheharShanbe4); + + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + + if (endTimeSingel2 - starTimeSingel1 >= rest4w4) + endTimeSingel2 = endTimeSingel2.Subtract(rest4w4); + sumRest = sumRest.Add(rest4w4); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1CheharShanbe4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2CheharShanbe4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1CheharShanbe4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2CheharShanbe4); + + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + + if (endTimeSingel2 - starTimeSingel1 >= rest4w4) + endTimeSingel2 = endTimeSingel2.Subtract(rest4w4); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.CheharShanbe4 && leavId > 0) + { + } + } + else if (da.Day > w4 && da.Day <= w5) + { + if (command.CheharShanbe1 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1CheharShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2CheharShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1CheharShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2CheharShanbe1); + + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + + if (endTimeSingel2 - starTimeSingel1 >= rest4w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest4w1); + sumRest = sumRest.Add(rest4w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1CheharShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2CheharShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1CheharShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2CheharShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + + if (endTimeSingel2 - starTimeSingel1 >= rest4w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest4w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.CheharShanbe1 && leavId > 0) + { + } + } + else if (da.Day > w5 && da.Day <= w6) + { + if (command.CheharShanbe2 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1CheharShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2CheharShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1CheharShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2CheharShanbe2); + + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + + if (endTimeSingel2 - starTimeSingel1 >= rest4w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest4w2); + sumRest = sumRest.Add(rest4w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1CheharShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2CheharShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1CheharShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2CheharShanbe2); + + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest4w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest4w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.CheharShanbe2 && leavId > 0) + { + } + } + + break; + case "پنج شنبه": + if (da.Day <= w1) + { + if (command.PanjShanbe1 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1PanjShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2PanjShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1PanjShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2PanjShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest5w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest5w1); + sumRest = sumRest.Add(rest5w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1PanjShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2PanjShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1PanjShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2PanjShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest5w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest5w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.PanjShanbe1 && leavId > 0) + { + } + } + else if (da.Day > w1 && da.Day <= w2) + { + if (command.PanjShanbe2 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1PanjShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2PanjShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1PanjShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2PanjShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest5w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest5w2); + sumRest = sumRest.Add(rest5w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1PanjShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2PanjShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1PanjShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2PanjShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest5w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest5w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.PanjShanbe2 && leavId > 0) + { + } + } + else if (da.Day > w2 && da.Day <= w3) + { + if (command.PanjShanbe3 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1PanjShanbe3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2PanjShanbe3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1PanjShanbe3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2PanjShanbe3); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest5w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest5w3); + sumRest = sumRest.Add(rest5w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1PanjShanbe3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2PanjShanbe3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1PanjShanbe3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2PanjShanbe3); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest5w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest5w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.PanjShanbe3 && leavId > 0) + { + } + } + else if (da.Day > w3 && da.Day <= w4) + { + if (command.PanjShanbe4 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1PanjShanbe4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2PanjShanbe4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1PanjShanbe4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2PanjShanbe4); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest5w4) + endTimeSingel2 = endTimeSingel2.Subtract(rest5w4); + sumRest = sumRest.Add(rest5w4); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1PanjShanbe4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2PanjShanbe4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1PanjShanbe4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2PanjShanbe4); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest5w4) + endTimeSingel2 = endTimeSingel2.Subtract(rest5w4); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.PanjShanbe4 && leavId > 0) + { + } + } + else if (da.Day > w4 && da.Day <= w5) + { + if (command.PanjShanbe1 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1PanjShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2PanjShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1PanjShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2PanjShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest5w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest5w1); + sumRest = sumRest.Add(rest5w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1PanjShanbe1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2PanjShanbe1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1PanjShanbe1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2PanjShanbe1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest5w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest5w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.PanjShanbe1 && leavId > 0) + { + } + } + else if (da.Day > w5 && da.Day <= w6) + { + if (command.PanjShanbe2 && !hasSickLeave) + { + var test = $"{da}"; + var checkHoliday = holidayList.Any(x => x == test); + if (checkHoliday == false) + { + i += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1PanjShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2PanjShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1PanjShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2PanjShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest5w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest5w2); + sumRest = sumRest.Add(rest5w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + notHolidays = notHolidays.Add(dailyFix); + else + notHolidays = notHolidays.Add(rotatingCheck.TotalWorkingTime); + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else + { + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1PanjShanbe2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2PanjShanbe2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1PanjShanbe2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2PanjShanbe2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest5w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest5w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, + startTimeTowSh1, endTimeTowSh2); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + { + HolidaysAndNot = HolidaysAndNot.Add(dailyFix); + } + else + { + HolidaysAndNot = HolidaysAndNot.Add(rotatingCheck.TotalWorkingTime); + if (workshopHolidyWorking) + { + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + rotatingResultList.Add(rotatingCheck); + } + } + } + } + else if (command.PanjShanbe2 && leavId > 0) + { + } + } + + break; + case "جمعه": + if (da.Day <= w1) + { + if (command.Jome1 && !hasSickLeave) + { + var test = $"{da}"; + + + i6 += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Jome1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Jome1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Jome1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Jome1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest6w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest6w1); + sumRest = sumRest.Add(rest6w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, startTimeTowSh1, + endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + jomeh = jomeh.Add(dailyFix); + else + jomeh = jomeh.Add(rotatingCheck.TotalWorkingTime); + + //افزودن جمعه کاری + if (!leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr)) + fridays += 1; + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else if (command.Jome1 && leavId > 0) + { + } + } + else if (da.Day > w1 && da.Day <= w2) + { + if (command.Jome2 && !hasSickLeave) + { + var test = $"{da}"; + + i6 += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Jome2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Jome2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Jome2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Jome2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest6w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest6w2); + sumRest = sumRest.Add(rest6w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, startTimeTowSh1, + endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + jomeh = jomeh.Add(dailyFix); + else + jomeh = jomeh.Add(rotatingCheck.TotalWorkingTime); + + //افزودن جمعه کاری + if (!leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr)) + fridays += 1; + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else if (command.Jome2 && leavId > 0) + { + } + } + else if (da.Day > w2 && da.Day <= w3) + { + if (command.Jome3 && !hasSickLeave) + { + var test = $"{da}"; + + i6 += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Jome3); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Jome3); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Jome3); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Jome3); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest6w3) + endTimeSingel2 = endTimeSingel2.Subtract(rest6w3); + sumRest = sumRest.Add(rest6w3); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, startTimeTowSh1, + endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + jomeh = jomeh.Add(dailyFix); + else + jomeh = jomeh.Add(rotatingCheck.TotalWorkingTime); + + //افزودن جمعه کاری + if (!leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr)) + fridays += 1; + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else if (command.Jome3 && leavId > 0) + { + } + } + else if (da.Day > w3 && da.Day <= w4) + { + if (command.Jome4 && !hasSickLeave) + { + var test = $"{da}"; + + i6 += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Jome4); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Jome4); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Jome4); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Jome4); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest6w4) + endTimeSingel2 = endTimeSingel2.Subtract(rest6w4); + sumRest = sumRest.Add(rest6w4); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, startTimeTowSh1, + endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + jomeh = jomeh.Add(dailyFix); + else + jomeh = jomeh.Add(rotatingCheck.TotalWorkingTime); + + //افزودن جمعه کاری + if (!leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr)) + fridays += 1; + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else if (command.Jome4 && leavId > 0) + { + } + } + else if (da.Day > w4 && da.Day <= w5) + { + if (command.Jome1 && !hasSickLeave) + { + var test = $"{da}"; + + i6 += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Jome1); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Jome1); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Jome1); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Jome1); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest6w1) + endTimeSingel2 = endTimeSingel2.Subtract(rest6w1); + sumRest = sumRest.Add(rest6w1); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, startTimeTowSh1, + endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + jomeh = jomeh.Add(dailyFix); + else + jomeh = jomeh.Add(rotatingCheck.TotalWorkingTime); + + //افزودن جمعه کاری + if (!leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr)) + fridays += 1; + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else if (command.Jome1 && leavId > 0) + { + } + } + else if (da.Day > w5 && da.Day <= w6) + { + if (command.Jome2 && !hasSickLeave) + { + var test = $"{da}"; + + i6 += 1; + SumComplexDays += 1; + starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Jome2); + endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Jome2); + startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Jome2); + endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Jome2); + if (endTimeSingel2.TimeOfDay == new TimeSpan(0, 0, 0)) + endTimeSingel2 = endTimeSingel2.AddDays(1); + if (endTimeSingel2 - starTimeSingel1 >= rest6w2) + endTimeSingel2 = endTimeSingel2.Subtract(rest6w2); + sumRest = sumRest.Add(rest6w2); + + var rotatingCheck = RotatingShiftCheck(starTimeSingel1, endTimeSingel2, startTimeTowSh1, + endTimeTowSh2); + rotatingCheck.RotatingDate = test; + rotatingResultList.Add(rotatingCheck); + var testGr = test.ToGeorgianDateTime(); + if (leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr) && + rotatingCheck.TotalWorkingTime > dailyFix) + jomeh = jomeh.Add(dailyFix); + else + jomeh = jomeh.Add(rotatingCheck.TotalWorkingTime); + + //افزودن جمعه کاری + if (!leavList.Any(x => x.StartLeaveGr <= testGr && x.EndLeaveGr >= testGr)) + fridays += 1; + + Over22 = Over22.Add(rotatingCheck.NightWorkSpan); + } + else if (command.Jome2 && leavId > 0) + { + } + } + + break; + } + + + if (da.DayOfWeek != "جمعه") + { + var testDay = $"{da}"; + var IsHoliday = holidayList.Any(x => x == testDay); + if (IsHoliday) OfficialHoliday += 1; + } + else + { + FridayStartToEnd += 1; + } + } + + rotatingResultList = rotatingResultList.Where(x => + x.IsMorningShift || x.IsEveningShift || x.IsNightShift).ToList(); + } + + #endregion + + return new(); + } + + /// + /// جاگذاری شیفت های استاتیک در بازه تاریخ + /// + /// + private List FindStaticShiftsStatus(string shift1Start, string shift1End, string shift2Start, + string shift2End, DateTime cuurentDate, TimeSpan restTime) + { + var result = new List(); + + var shift1StartGr = new DateTime; + var shift1EndGr = new DateTime; + + var shift2StartGr = new DateTime; + var shift2EndGr = new DateTime; + + #region Shift1 + + if (!string.IsNullOrWhiteSpace(shift1Start) && !string.IsNullOrWhiteSpace(shift1End)) + { + try + { + var starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Shanbe1); + var endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Shanbe1); + + + + shift1StartGr = new DateTime(cuurentDate.Date, starTimeSingel1.TimeOfDay); + shift1EndGr = new DateTime(cuurentDate.Date, endTimeSingel2.TimeOfDay); + + if (shift1EndGr.TimeOfDay < shift1StartGr.TimeOfDay) + shift1EndGr.AddDays(1); + + var shiftSpan = (shift1EndGr - shift1StartGr); + if (restTime > TimeSpan.Zero && shiftSpan >= restTime) + { + shift1EndGr.Subtract(restTime); + shiftSpan = (shift1EndGr - shift1StartGr) + } + + result.Add(new StaticShiftStartEnd() + { + StartShift = shift1StartGr, + EndShift = shift1EndGr, + ShiftSpanning = shiftSpan + HasValue = true, + ShiftType = "1" + }); + } + catch (Exception e) + { + result.Add(new StaticShiftStartEnd() + { + StartShift = null, + EndShift = null, + ShiftSpanning = TimeSpan.Zero, + HasValue = false, + ShiftType = "1" + }); + } + } + + #endregion + + #region Shift2 + + if (!string.IsNullOrWhiteSpace(shift2Start) && !string.IsNullOrWhiteSpace(shift2End)) + { + try + { + + + var startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Shanbe1); + var endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Shanbe1); + + //اگر شیفت 1 وجود داشت تاریخ جاری را از شیف 1 میگیریم + //زیرا ممکن پایان شیف 1 در روز بعد باشد + var shift1 = result.FirstOrDefault(x => x.HasValue == true && x.ShiftType = "1")) + if(shift1 != null) + cuurentDate = shift1.EndShift + + + + + shift2StartGr = new DateTime(cuurentDate.Date, startTimeTowSh1.TimeOfDay); + shift2EndGr = new DateTime(cuurentDate.Date, endTimeTowSh2.TimeOfDay); + + if (shift2EndGr.TimeOfDay < shift2StartGr.TimeOfDay) + shift2EndGr.AddDays(1); + + + result.Add(new StaticShiftStartEnd() + { + StartShift = shift2StartGr, + EndShift = shift2EndGr, + ShiftSpanning = (shift2EndGr - shift2StartGr), + HasValue = true, + ShiftType = "2" + }); + } + catch (Exception e) + { + result.Add(new StaticShiftStartEnd() + { + StartShift = null, + EndShift = null, + ShiftSpanning = TimeSpan.Zero, + HasValue = false, + ShiftType = "2" + }); + } + } + + #endregion + + + return result; + + } #endregion #region CustomizeCheckout @@ -3921,4 +6970,13 @@ internal class EmployeeShiftResult { public ShiftPlacement Placement { get; set; } public TimeSpan ShiftSpan { get; set; } +} + +internal class StaticShiftStartEnd +{ + public DateTime StartShift { get; set; } + public DateTime EndShift { get; set; } + public TimeSpan ShiftSpanning { get; set; } + public bool HasValue { get; set; } + public string ShiftType { get; set; } } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs index a95cbb5e..c0e05d30 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs @@ -330,6 +330,10 @@ public class IndexModel : PageModel return Partial("./Create", command); } + /// + /// متد اصلاحی + /// + /// public async Task OnGetCorrectCheckout() { var result = await _workingHoursTempApplication.Correct();