-
+
@@ -508,8 +550,8 @@
@foreach (var person in @Model.Employees)
{
- var black = person.Black ? "blackSelect" : "";
-
+ var black = person.Black ? "blackSelect" : "";
+
}
@@ -655,18 +697,17 @@
-
+
+ var itemsYearList = @Html.Raw(Json.Serialize(Model.YearlyList.OrderBy(x => x)));
+
}
\ No newline at end of file
diff --git a/ServiceHost/Areas/Client/Pages/Company/Checkouts/Index.cshtml.cs b/ServiceHost/Areas/Client/Pages/Company/Checkouts/Index.cshtml.cs
index 0d3c406f..bee8d971 100644
--- a/ServiceHost/Areas/Client/Pages/Company/Checkouts/Index.cshtml.cs
+++ b/ServiceHost/Areas/Client/Pages/Company/Checkouts/Index.cshtml.cs
@@ -9,6 +9,18 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.Security.Claims;
using _0_Framework.Infrastructure;
+using CompanyManagment.App.Contracts.Contract;
+using CompanyManagment.App.Contracts.WorkingHours;
+using CompanyManagment.Application;
+using Company.Domain.YearlySalaryAgg;
+using CompanyManagment.App.Contracts.Leave;
+using CompanyManagment.App.Contracts.LeftWork;
+using CompanyManagment.App.Contracts.PersonalContractingParty;
+using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
+using CompanyManagment.App.Contracts.WorkingHoursItems;
+using CompanyManagment.App.Contracts.WorkingHoursTemp;
+using PersianTools.Core;
+using Company.Domain.HolidayItemAgg;
namespace ServiceHost.Areas.Client.Pages.Company.Checkouts
{
@@ -17,7 +29,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.Checkouts
public class IndexModel : PageModel
{
#region Entities
-
+ private string InterferenceMessage = string.Empty;
public List
Checkouts;
public CheckoutSearchModel SearchModel;
public List Employees;
@@ -36,6 +48,19 @@ namespace ServiceHost.Areas.Client.Pages.Company.Checkouts
private readonly IYearlySalaryApplication _yearlySalaryApplication;
private readonly IPasswordHasher _passwordHasher;
private readonly IRollCallApplication rollCallApplication;
+
+ private readonly ILeaveApplication _leaveApplication;
+ private readonly ILeftWorkApplication _leftWorkApplication;
+ private readonly IPersonalContractingPartyApp _personalContractingPartyApp;
+ private readonly IRollCallEmployeeStatusApplication _rollCallEmployeeStatusApp;
+ private readonly IRollCallMandatoryApplication _rollCallMandatoryApplication;
+ private readonly IWorkingHoursApplication _workingHoursApplication;
+ private readonly IWorkingHoursItemsApplication _workingHoursItemsApplication;
+ private readonly IWorkingHoursTempApplication _workingHoursTempApplication;
+ private readonly IYearlySalaryRepository _yearlySalaryRepository;
+ private readonly IContractApplication _contractApplication;
+ private readonly IHolidayItemRepository _holidayItemRepository;
+
public int PageIndex;
@@ -44,7 +69,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.Checkouts
public IndexModel(IWorkshopApplication workshopApplication,
IEmployeeApplication employeeApplication,
IYearlySalaryApplication yearlySalaryApplication,
- ICheckoutApplication checkoutApplication, IPasswordHasher passwordHasher, IRollCallApplication rollCallApplication)
+ ICheckoutApplication checkoutApplication, IPasswordHasher passwordHasher, IRollCallApplication rollCallApplication, ILeaveApplication leaveApplication, ILeftWorkApplication leftWorkApplication, IPersonalContractingPartyApp personalContractingPartyApp, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApp, IRollCallMandatoryApplication rollCallMandatoryApplication, IWorkingHoursApplication workingHoursApplication, IWorkingHoursItemsApplication workingHoursItemsApplication, IWorkingHoursTempApplication workingHoursTempApplication, IYearlySalaryRepository yearlySalaryRepository, IContractApplication contractApplication, IHolidayItemRepository holidayItemRepository)
{
_workshopApplication = workshopApplication;
@@ -56,8 +81,73 @@ namespace ServiceHost.Areas.Client.Pages.Company.Checkouts
_checkoutApplication = checkoutApplication;
_passwordHasher = passwordHasher;
this.rollCallApplication = rollCallApplication;
+ _leaveApplication = leaveApplication;
+ _leftWorkApplication = leftWorkApplication;
+ _personalContractingPartyApp = personalContractingPartyApp;
+ _rollCallEmployeeStatusApp = rollCallEmployeeStatusApp;
+ _rollCallMandatoryApplication = rollCallMandatoryApplication;
+ _workingHoursApplication = workingHoursApplication;
+ _workingHoursItemsApplication = workingHoursItemsApplication;
+ _workingHoursTempApplication = workingHoursTempApplication;
+ _yearlySalaryRepository = yearlySalaryRepository;
+ _contractApplication = contractApplication;
+ _holidayItemRepository = holidayItemRepository;
}
+ ///
+ /// گزارش نوبت کاری
+ ///
+ ///
+ ///
+
+ #region RotatngShiftReport
+
+ public async Task OnGetModalDetailsRotatingShiftReport(long id, string type = "Normal")
+ {
+ var result = new ComputingViewModel();
+ var checkout = _checkoutApplication.GetDetails(id);
+ var workingHours = _workingHoursTempApplication.GetByContractIdConvertToShiftwork4(checkout.ContractId);
+ if (checkout.HasRollCall)
+ {
+ result = await _rollCallMandatoryApplication.RotatingShiftReport(checkout.WorkshopId, checkout.EmployeeId, checkout.ContractStartGr, checkout.ContractEndGr, workingHours.ShiftWork);
+ result.HasRollCall = true;
+ }
+ else
+ {
+ var ConvertYear = checkout.ContractStart.Substring(0, 4);
+ var ConvertMonth = checkout.ContractStart.Substring(5, 2);
+
+ var contract = _contractApplication.GetDetails(checkout.ContractId);
+ var workshop = _workshopApplication.GetDetails(contract.WorkshopIds);
+ var separation = _contractApplication.contractSeparation(ConvertYear, ConvertMonth,
+ contract.ContractStartGr, contract.ContractEndGr, contract.EmployeeId, contract.WorkshopIds);
+ workingHours.ContractStartGr = separation.ContractStartGr;
+ workingHours.ContractEndGr = separation.ContractEndGr;
+ workingHours.ContarctStart = separation.ContarctStart;
+ workingHours.ContractEnd = separation.ContractEnd;
+ workingHours.GetWorkDate = contract.GetWorkDate;
+ workingHours.GetWorkDateHide = contract.GetWorkDate;
+ workingHours.WorkshopId = contract.WorkshopIds;
+ workingHours.EmployeeId = contract.EmployeeId;
+
+ result = MandatoryHours(workingHours, workshop.WorkshopHolidayWorking, 0);
+
+
+
+ }
+
+ result.EmployeeFullName = checkout.EmployeeFullName;
+ result.YearAndMonth = $"{checkout.Month} {checkout.Year}";
+ result.HasRotatingShift = result.RotatingStatus == "نوبت کاری ندارد" ? false : true;
+ Console.WriteLine("ok");
+ if (type == "Print")
+ return Partial("_Partials/PrintDetailsRotatingShiftReport", result);
+
+ return Partial("_Partials/ModalDetailsRotatingShiftReport", result);
+ }
+
+ #endregion
+
#region FirstLoad-OnGet
public async Task OnGet(CheckoutSearchModel searchModel)
@@ -189,6 +279,6308 @@ namespace ServiceHost.Areas.Client.Pages.Company.Checkouts
}
#endregion
+
+
+ #region MandatoryCompute
+
+ public ComputingViewModel MandatoryHours(CreateWorkingHoursTemp command, bool workshopHolidyWorking, long leavId)
+ {
+ var serachModel = new LeaveSearchModel
+ {
+ EmployeeId = command.EmployeeId,
+ WorkshopId = command.WorkshopId,
+ PaidLeaveType = "روزانه",
+
+ StartLeave = command.ContarctStart,
+ EndLeave = command.ContractEnd,
+ IsAccepted = true
+ };
+ var leavList = _leaveApplication.search(serachModel);
+
+ var serachModel2 = new LeaveSearchModel
+ {
+ EmployeeId = command.EmployeeId,
+ WorkshopId = command.WorkshopId,
+ LeaveType = "استعلاجی",
+ StartLeave = command.ContarctStart,
+ EndLeave = command.ContractEnd,
+ IsAccepted = true
+ };
+ var sickLeavList = _leaveApplication.search(serachModel2);
+ var sickLeaveCount = 0;
+ if (sickLeavList.Count > 0)
+ foreach (var leave in sickLeavList)
+ if (leave.StartLeaveGr < command.ContractStartGr && leave.EndLeaveGr <= command.ContractEndGr)
+ {
+ var res = (int)((leave.EndLeaveGr - command.ContractStartGr).TotalDays + 1);
+ sickLeaveCount += res;
+ }
+ else if (leave.StartLeaveGr >= command.ContractStartGr && leave.EndLeaveGr > command.ContractEndGr)
+ {
+ var res = (int)((command.ContractEndGr - leave.StartLeaveGr).TotalDays + 1);
+ sickLeaveCount += res;
+ }
+ else
+ {
+ var res = (int)((leave.EndLeaveGr - leave.StartLeaveGr).TotalDays + 1);
+ sickLeaveCount += res;
+ }
+
+ #region entityes
+
+ var Notholiday = string.Empty;
+ var Holidays = string.Empty;
+ double dayliFeeComplete = 0;
+ var SingleShiftResult = string.Empty;
+ var shift1Hourse = "0";
+ var shift1Minuts = "0";
+ var shift1HolidayHours = "0";
+ var shift1HolidayMinuts = "0";
+ var overMandatoryHours = "0";
+ var overMandatoryMinuts = "0";
+ var shiftOver22Hours = "0";
+ var shiftOver22Minuts = "0";
+ double ShiftPayResult = 0;
+ var SumWorkeTime = string.Empty;
+ var weeklyTime = new TimeSpan();
+ var FridayStartToEnd = 0;
+ var overNight = false;
+ var overNightTow = false;
+ var singleOver24 = new TimeSpan();
+ var towOver24 = new TimeSpan();
+ var panjshanbehOver24 = new TimeSpan();
+ var panjshanbehOver24Tow = new TimeSpan();
+ var rest = new TimeSpan();
+ var Over22 = new TimeSpan();
+
+ var starTimeSingel1 = new DateTime();
+ var endTimeSingel2 = new DateTime();
+ var singleShiftOver24 = new DateTime();
+ var startTimeTowSh1 = new DateTime();
+ var endTimeTowSh2 = new DateTime();
+ var nightWork22 = new DateTime();
+ var nightWork6 = new DateTime();
+
+ var rotatingResultList = new List();
+
+
+ singleShiftOver24 = Convert.ToDateTime("00:00");
+ nightWork22 = Convert.ToDateTime("22:00");
+ nightWork6 = Convert.ToDateTime("06:00");
+
+ 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();
+
+ var SumSingle = new TimeSpan();
+ var SumTow = new TimeSpan();
+ var SumSingleHourses = 0;
+ var SumTowHourses = 0;
+
+ var sumRest = new TimeSpan();
+ var SumComplexDays = 0;
+ var OfficialHoliday = 0;
+
+ var conStartGr = command.ContarctStart.ToGeorgianDateTime();
+ var conEndGr = command.ContractEnd.ToGeorgianDateTime();
+ var fridays = 0;
+
+ #endregion
+
+ #region SumRestTimesOneShift
+
+ switch (command.ShiftWork)
+ {
+ case "1":
+ case "2":
+ command.RestTime = command.RestTime == "0" ? "00" : command.RestTime;
+ command.RestTimeYekshanbeh = command.RestTimeYekshanbeh == "0" ? "00" : command.RestTimeYekshanbeh;
+ command.RestTimeDoshanbeh = command.RestTimeDoshanbeh == "0" ? "00" : command.RestTimeDoshanbeh;
+ command.RestTimeSeshanbeh = command.RestTimeSeshanbeh == "0" ? "00" : command.RestTimeSeshanbeh;
+ command.RestTimeCheharshanbeh =
+ command.RestTimeCheharshanbeh == "0" ? "00" : command.RestTimeCheharshanbeh;
+ command.RestTimePanjshanbeh = command.RestTimePanjshanbeh == "0" ? "00" : command.RestTimePanjshanbeh;
+ command.RestTimeJomeh = command.RestTimeJomeh == "0" ? "00" : command.RestTimeJomeh;
+ command.RestTimeMin = command.RestTimeMin == "0" ? "00" : command.RestTimeMin;
+ command.RestTimeYekshanbehMin =
+ command.RestTimeYekshanbehMin == "0" ? "00" : command.RestTimeYekshanbehMin;
+ command.RestTimeDoshanbehMin =
+ command.RestTimeDoshanbehMin == "0" ? "00" : command.RestTimeDoshanbehMin;
+ command.RestTimeSeshanbehMin =
+ command.RestTimeSeshanbehMin == "0" ? "00" : command.RestTimeSeshanbehMin;
+ command.RestTimeCheharshanbehMin =
+ command.RestTimeCheharshanbehMin == "0" ? "00" : command.RestTimeCheharshanbehMin;
+ command.RestTimePanjshanbehMin =
+ command.RestTimePanjshanbehMin == "0" ? "00" : command.RestTimePanjshanbehMin;
+ command.RestTimeJomehMin = command.RestTimeJomehMin == "0" ? "00" : command.RestTimeJomehMin;
+
+ rest0 = TimeSpan.Parse($"{command.RestTime}:{command.RestTimeMin}");
+ sumRest = sumRest.Add(rest0);
+ rest1 = TimeSpan.Parse($"{command.RestTimeYekshanbeh}:{command.RestTimeYekshanbehMin}");
+ sumRest = sumRest.Add(rest1);
+ rest2 = TimeSpan.Parse($"{command.RestTimeDoshanbeh}:{command.RestTimeDoshanbehMin}");
+ sumRest = sumRest.Add(rest2);
+ rest3 = TimeSpan.Parse($"{command.RestTimeSeshanbeh}:{command.RestTimeSeshanbehMin}");
+ sumRest = sumRest.Add(rest3);
+ rest4 = TimeSpan.Parse($"{command.RestTimeCheharshanbeh}:{command.RestTimeCheharshanbehMin}");
+ sumRest = sumRest.Add(rest4);
+ rest5 = TimeSpan.Parse($"{command.RestTimePanjshanbeh}:{command.RestTimePanjshanbehMin}");
+ sumRest = sumRest.Add(rest5);
+ rest6 = TimeSpan.Parse($"{command.RestTimeJomeh}:{command.RestTimeJomehMin}");
+ sumRest = sumRest.Add(rest6);
+ break;
+
+ case "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}");
+ break;
+ }
+
+ #endregion
+
+ #region SumSingleAndTowShifts
+
+ var StartShanbehSingle = Convert.ToDateTime(command.SingleShift1);
+ var EndShanbehSingle = Convert.ToDateTime(command.SingleShift2);
+ if (StartShanbehSingle > EndShanbehSingle)
+ EndShanbehSingle = EndShanbehSingle.AddDays(1);
+ var ShanbehSingle = EndShanbehSingle - StartShanbehSingle;
+ SumSingle = SumSingle.Add(ShanbehSingle);
+
+ var StartYekShanbehSingle = Convert.ToDateTime(command.SingleShift1Yekshanbeh);
+ var EndYekShanbehSingle = Convert.ToDateTime(command.SingleShift2Yekshanbeh);
+ if (StartYekShanbehSingle > EndYekShanbehSingle)
+ EndYekShanbehSingle = EndYekShanbehSingle.AddDays(1);
+ var YekShanbehSingle = EndYekShanbehSingle - StartYekShanbehSingle;
+ SumSingle = SumSingle.Add(YekShanbehSingle);
+
+ var StartDoShanbehSingle = Convert.ToDateTime(command.SingleShift1Doshanbeh);
+ var EndDoShanbehSingle = Convert.ToDateTime(command.SingleShift2Doshanbeh);
+ if (StartDoShanbehSingle > EndDoShanbehSingle)
+ EndDoShanbehSingle = EndDoShanbehSingle.AddDays(1);
+ var DoShanbehSingle = EndDoShanbehSingle - StartDoShanbehSingle;
+ SumSingle = SumSingle.Add(DoShanbehSingle);
+
+
+ var StartSehShanbehSingle = Convert.ToDateTime(command.SingleShift1Seshanbeh);
+ var EndSehShanbehSingle = Convert.ToDateTime(command.SingleShift2Seshanbeh);
+ if (StartSehShanbehSingle > EndSehShanbehSingle)
+ EndSehShanbehSingle = EndSehShanbehSingle.AddDays(1);
+ var SeShanbehSingle = EndSehShanbehSingle - StartSehShanbehSingle;
+ SumSingle = SumSingle.Add(SeShanbehSingle);
+
+ var StartCheharShanbehSingle = Convert.ToDateTime(command.SingleShift1Cheharshanbeh);
+ var EndCheharShanbehSingle = Convert.ToDateTime(command.SingleShift2Cheharshanbeh);
+ if (StartCheharShanbehSingle > EndCheharShanbehSingle)
+ EndCheharShanbehSingle = EndCheharShanbehSingle.AddDays(1);
+ var CheharShanbehSingle = EndCheharShanbehSingle - StartCheharShanbehSingle;
+ SumSingle = SumSingle.Add(CheharShanbehSingle);
+
+ var StartPanjShanbehSingle = Convert.ToDateTime(command.SingleShift1Panjshanbeh);
+ var EndPanjShanbehSingle = Convert.ToDateTime(command.SingleShift2Panjshanbeh);
+ if (StartPanjShanbehSingle > EndPanjShanbehSingle)
+ EndPanjShanbehSingle = EndPanjShanbehSingle.AddDays(1);
+ var PanjShanbehSingle = EndPanjShanbehSingle - StartPanjShanbehSingle;
+ SumSingle = SumSingle.Add(PanjShanbehSingle);
+
+ var StartJomehSingle = Convert.ToDateTime(command.SingleShift1Jomeh);
+ var EndjomehSingle = Convert.ToDateTime(command.SingleShift2Jomeh);
+ if (StartJomehSingle > EndjomehSingle)
+ EndjomehSingle = EndjomehSingle.AddDays(1);
+ var JomehSingle = EndjomehSingle - StartJomehSingle;
+ SumSingle = SumSingle.Add(JomehSingle);
+ if (command.ShiftWork == "1") SumSingle = SumSingle.Subtract(sumRest);
+ //SumSingleHourses = (int)SumSingle.TotalHours;
+
+
+ var StartShanbehTow = Convert.ToDateTime(command.TowShifts1);
+ var EndShanbehTow = Convert.ToDateTime(command.TowShifts2);
+ if (StartShanbehTow > EndShanbehTow)
+ EndShanbehTow = EndShanbehTow.AddDays(1);
+ var ShanbehTow = EndShanbehTow - StartShanbehTow;
+ SumTow = SumTow.Add(ShanbehTow);
+
+ var StartYekShanbehTow = Convert.ToDateTime(command.TowShifts1Yekshanbeh);
+ var EndYekShanbehTow = Convert.ToDateTime(command.TowShifts2Yekshanbeh);
+ if (StartYekShanbehTow > EndYekShanbehTow)
+ EndYekShanbehTow = EndYekShanbehTow.AddDays(1);
+ var YekShanbehTow = EndYekShanbehTow - StartYekShanbehTow;
+ SumTow = SumTow.Add(YekShanbehTow);
+
+ var StartDoShanbehTow = Convert.ToDateTime(command.TowShifts1Doshanbeh);
+ var EndDoShanbehTow = Convert.ToDateTime(command.TowShifts2Doshanbeh);
+ if (StartDoShanbehTow > EndDoShanbehTow)
+ EndDoShanbehTow = EndDoShanbehTow.AddDays(1);
+ var DoShanbehTow = EndDoShanbehTow - StartDoShanbehTow;
+ SumTow = SumTow.Add(DoShanbehTow);
+
+
+ var StartSehShanbehTow = Convert.ToDateTime(command.TowShifts1Seshanbeh);
+ var EndSehShanbehTow = Convert.ToDateTime(command.TowShifts2Seshanbeh);
+ if (StartSehShanbehTow > EndSehShanbehTow)
+ EndSehShanbehTow = EndSehShanbehTow.AddDays(1);
+ var SeShanbehTow = EndSehShanbehTow - StartSehShanbehTow;
+ SumTow = SumTow.Add(SeShanbehTow);
+
+ var StartCheharShanbehTow = Convert.ToDateTime(command.TowShifts1Cheharshanbeh);
+ var EndCheharShanbehTow = Convert.ToDateTime(command.TowShifts2Cheharshanbeh);
+ if (StartCheharShanbehTow > EndCheharShanbehTow)
+ EndCheharShanbehTow = EndCheharShanbehTow.AddDays(1);
+ var CheharShanbehTow = EndCheharShanbehTow - StartCheharShanbehTow;
+ SumTow = SumTow.Add(CheharShanbehTow);
+
+ var StartPanjShanbehTow = Convert.ToDateTime(command.TowShifts1Panjshanbeh);
+ var EndPanjShanbehTow = Convert.ToDateTime(command.TowShifts2Panjshanbeh);
+ if (StartPanjShanbehTow > EndPanjShanbehTow)
+ EndPanjShanbehTow = EndPanjShanbehTow.AddDays(1);
+ var PanjShanbehTow = EndPanjShanbehTow - StartPanjShanbehTow;
+ SumTow = SumTow.Add(PanjShanbehTow);
+
+ var StartJomehTow = Convert.ToDateTime(command.TowShifts1Jomeh);
+ var EndjomehTow = Convert.ToDateTime(command.TowShifts2Jomeh);
+ if (StartJomehTow > EndjomehTow)
+ EndjomehTow = EndjomehTow.AddDays(1);
+ var jomehTow = EndjomehTow - StartJomehTow;
+ SumTow = SumTow.Add(jomehTow);
+
+ //SumTowHourses = (int)SumTow.TotalHours;
+
+ #endregion
+
+ #region ComplexSumWorkTime
+
+ if (command.ShiftWork == "5")
+ SumWorkeTime = "24 - 12";
+ else if (command.ShiftWork == "6")
+ SumWorkeTime = "24 - 24";
+ else if (command.ShiftWork == "7")
+ SumWorkeTime = "36 - 12";
+ else if (command.ShiftWork == "8") SumWorkeTime = "48 - 24";
+
+ #endregion
+
+ #region OneAndTowShiftsCompute
+
+ var dailyFix = TimeSpan.Parse("07:20");
+ var notHolidays = new TimeSpan();
+ var HolidaysAndNot = new TimeSpan();
+ var jomeh = new TimeSpan();
+
+ 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);
+ int i = 0, i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0;
+ var holidayList = _holidayItemRepository.GetHolidayItem(sdate.Substring(0, 4));
+ var leavInfo = leavId > 0 ? _leaveApplication.GetDetails(leavId) : null;
+
+ #region shiftWork 1&2
+
+ if (command.ShiftWork == "1" || command.ShiftWork == "2")
+ {
+ for (var da = d1; da <= d2; da.AddDays(1))
+ {
+ var currentDay = da.ToGregorianDateTime();
+
+ if (da.DayOfWeek == "شنبه" && command.shanbeh && leavId == 0)
+ {
+ var checkHoliday = _holidayItemRepository.GetHoliday(currentDay);
+ if (checkHoliday == false)
+ {
+ i += 1;
+ if (command.ShiftWork == "1")
+ {
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ var singleSpan1 = endTimeSingel2 - starTimeSingel1;
+
+ singleSpan1 = singleSpan1.Subtract(rest0);
+
+ notHolidays = notHolidays.Add(singleSpan1);
+ var Over22Compute = Over22Check(starTimeSingel1, endTimeSingel2);
+ //Over22Compute = Over22Compute.Subtract(rest);
+ Over22 = Over22.Add(Over22Compute);
+ }
+ else if (command.ShiftWork == "2")
+ {
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2);
+ startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1);
+ endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ if (startTimeTowSh1 > endTimeTowSh2)
+ {
+ overNight = true;
+ endTimeTowSh2 = endTimeTowSh2.AddDays(1);
+ }
+
+ var singleSpanTow1 = endTimeSingel2 - starTimeSingel1;
+ var singleSpanTow2 = endTimeTowSh2 - startTimeTowSh1;
+ notHolidays = notHolidays.Add(singleSpanTow1);
+ notHolidays = notHolidays.Add(singleSpanTow2);
+
+ var Over22ComputeTow1 = Over22Check(starTimeSingel1, endTimeSingel2);
+ Over22 = Over22.Add(Over22ComputeTow1);
+ var Over22ComputeTow2 = Over22Check(startTimeTowSh1, endTimeTowSh2);
+ Over22 = Over22.Add(Over22ComputeTow2);
+ }
+ }
+ }
+ else if (da.DayOfWeek == "شنبه" && command.shanbeh && leavId > 0)
+ {
+ if (currentDay >= leavInfo.StartLeaveGr && currentDay <= leavInfo.EndLeaveGr)
+ if (leavInfo.LeaveType == "استحقاقی" && leavInfo.PaidLeaveType == "ساعتی")
+ {
+ var leaavHoursesInt = Convert.ToInt32(leavInfo.LeaveHourses);
+ var leavHourses = new TimeSpan(0, leaavHoursesInt, 0, 0);
+ i += 1;
+ if (command.ShiftWork == "1")
+ {
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ var singleSpan1 = endTimeSingel2 - starTimeSingel1;
+
+ singleSpan1 = singleSpan1.Subtract(rest0);
+ //کم کردن مرخصی ساعتی از ساعت کارکرد آن روز
+ singleSpan1 = singleSpan1.Subtract(leavHourses);
+
+ notHolidays = notHolidays.Add(singleSpan1);
+ //کم کردن ساعت مرخصی از پایان ساعات کاری
+ endTimeSingel2 = endTimeSingel2.AddHours(-leaavHoursesInt);
+ var Over22Compute = Over22Check(starTimeSingel1, endTimeSingel2);
+
+ Over22 = Over22.Add(Over22Compute);
+ }
+ else if (command.ShiftWork == "2")
+ {
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2);
+ startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1);
+ endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ if (startTimeTowSh1 > endTimeTowSh2)
+ {
+ overNight = true;
+ endTimeTowSh2 = endTimeTowSh2.AddDays(1);
+ }
+
+ var singleSpanTow1 = endTimeSingel2 - starTimeSingel1;
+ var singleSpanTow2 = endTimeTowSh2 - startTimeTowSh1;
+ notHolidays = notHolidays.Add(singleSpanTow1);
+ notHolidays = notHolidays.Add(singleSpanTow2);
+
+ var Over22ComputeTow1 = Over22Check(starTimeSingel1, endTimeSingel2);
+ Over22 = Over22.Add(Over22ComputeTow1);
+ var Over22ComputeTow2 = Over22Check(startTimeTowSh1, endTimeTowSh2);
+ Over22 = Over22.Add(Over22ComputeTow2);
+ }
+ }
+ }
+
+ if (da.DayOfWeek == "یکشنبه" && command.yekshanbeh && leavId == 0)
+ {
+ var test = da.ToGregorianDateTime();
+ var checkHoliday = _holidayItemRepository.GetHoliday(test);
+ if (checkHoliday == false)
+ {
+ i1 += 1;
+
+ if (command.ShiftWork == "1")
+ {
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Yekshanbeh);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Yekshanbeh);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ var singleSpan1 = endTimeSingel2 - starTimeSingel1;
+
+ singleSpan1 = singleSpan1.Subtract(rest1);
+
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var Over22Compute = Over22Check(starTimeSingel1, endTimeSingel2);
+ //Over22Compute = Over22Compute.Subtract(rest);
+ Over22 = Over22.Add(Over22Compute);
+ }
+
+ else if (command.ShiftWork == "2")
+ {
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Yekshanbeh);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Yekshanbeh);
+ startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Yekshanbeh);
+ endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Yekshanbeh);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ if (startTimeTowSh1 > endTimeTowSh2)
+ {
+ overNight = true;
+ endTimeTowSh2 = endTimeTowSh2.AddDays(1);
+ }
+
+ var singleSpanTow1 = endTimeSingel2 - starTimeSingel1;
+ var singleSpanTow2 = endTimeTowSh2 - startTimeTowSh1;
+ notHolidays = notHolidays.Add(singleSpanTow1);
+ notHolidays = notHolidays.Add(singleSpanTow2);
+
+ var Over22ComputeTow1 = Over22Check(starTimeSingel1, endTimeSingel2);
+ Over22 = Over22.Add(Over22ComputeTow1);
+ var Over22ComputeTow2 = Over22Check(startTimeTowSh1, endTimeTowSh2);
+ Over22 = Over22.Add(Over22ComputeTow2);
+ }
+ }
+ }
+ else if (da.DayOfWeek == "یکشنبه" && command.yekshanbeh && leavId > 0)
+ {
+ }
+
+ if (da.DayOfWeek == "دوشنبه" && command.doshanbeh && leavId == 0)
+ {
+ var test = da.ToGregorianDateTime();
+ var checkHoliday = _holidayItemRepository.GetHoliday(test);
+ if (checkHoliday == false)
+ {
+ i2 += 1;
+ switch (command.ShiftWork)
+ {
+ case "1":
+
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Doshanbeh);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Doshanbeh);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ var singleSpan1 = endTimeSingel2 - starTimeSingel1;
+
+ singleSpan1 = singleSpan1.Subtract(rest2);
+
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var Over22Compute = Over22Check(starTimeSingel1, endTimeSingel2);
+
+ Over22 = Over22.Add(Over22Compute);
+ break;
+
+ case "2":
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Doshanbeh);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Doshanbeh);
+ startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Doshanbeh);
+ endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Doshanbeh);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ if (startTimeTowSh1 > endTimeTowSh2)
+ {
+ overNight = true;
+ endTimeTowSh2 = endTimeTowSh2.AddDays(1);
+ }
+
+ var singleSpanTow1 = endTimeSingel2 - starTimeSingel1;
+ var singleSpanTow2 = endTimeTowSh2 - startTimeTowSh1;
+ notHolidays = notHolidays.Add(singleSpanTow1);
+ notHolidays = notHolidays.Add(singleSpanTow2);
+
+ var Over22ComputeTow1 = Over22Check(starTimeSingel1, endTimeSingel2);
+ Over22 = Over22.Add(Over22ComputeTow1);
+ var Over22ComputeTow2 = Over22Check(startTimeTowSh1, endTimeTowSh2);
+ Over22 = Over22.Add(Over22ComputeTow2);
+ break;
+ }
+ }
+ }
+ else if (da.DayOfWeek == "دوشنبه" && command.doshanbeh && leavId > 0)
+ {
+ }
+
+ if (da.DayOfWeek == "سه شنبه" && command.seshanbeh && leavId == 0)
+ {
+ var test = da.ToGregorianDateTime();
+ var checkHoliday = _holidayItemRepository.GetHoliday(test);
+ if (checkHoliday == false)
+ {
+ i3 += 1;
+ switch (command.ShiftWork)
+ {
+ case "1":
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Seshanbeh);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Seshanbeh);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ var singleSpan1 = endTimeSingel2 - starTimeSingel1;
+
+ singleSpan1 = singleSpan1.Subtract(rest3);
+
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var Over22Compute = Over22Check(starTimeSingel1, endTimeSingel2);
+ Over22 = Over22.Add(Over22Compute);
+ break;
+
+ case "2":
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Seshanbeh);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Seshanbeh);
+ startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Seshanbeh);
+ endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Seshanbeh);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ if (startTimeTowSh1 > endTimeTowSh2)
+ {
+ overNight = true;
+ endTimeTowSh2 = endTimeTowSh2.AddDays(1);
+ }
+
+ var singleSpanTow1 = endTimeSingel2 - starTimeSingel1;
+ var singleSpanTow2 = endTimeTowSh2 - startTimeTowSh1;
+ notHolidays = notHolidays.Add(singleSpanTow1);
+ notHolidays = notHolidays.Add(singleSpanTow2);
+
+ var Over22ComputeTow1 = Over22Check(starTimeSingel1, endTimeSingel2);
+ Over22 = Over22.Add(Over22ComputeTow1);
+ var Over22ComputeTow2 = Over22Check(startTimeTowSh1, endTimeTowSh2);
+ Over22 = Over22.Add(Over22ComputeTow2);
+ break;
+ }
+ }
+ }
+ else if (da.DayOfWeek == "سه شنبه" && command.seshanbeh && leavId > 0)
+ {
+ }
+
+ if (da.DayOfWeek == "چهارشنبه" && command.cheharshanbeh && leavId == 0)
+ {
+ var test = da.ToGregorianDateTime();
+ var checkHoliday = _holidayItemRepository.GetHoliday(test);
+ if (checkHoliday == false)
+ {
+ i4 += 1;
+ switch (command.ShiftWork)
+ {
+ case "1":
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Cheharshanbeh);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Cheharshanbeh);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ var singleSpan1 = endTimeSingel2 - starTimeSingel1;
+
+ singleSpan1 = singleSpan1.Subtract(rest4);
+
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var Over22Compute = Over22Check(starTimeSingel1, endTimeSingel2);
+ Over22 = Over22.Add(Over22Compute);
+ break;
+
+ case "2":
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Cheharshanbeh);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Cheharshanbeh);
+ startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Cheharshanbeh);
+ endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Cheharshanbeh);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ if (startTimeTowSh1 > endTimeTowSh2)
+ {
+ overNight = true;
+ endTimeTowSh2 = endTimeTowSh2.AddDays(1);
+ }
+
+ var singleSpanTow1 = endTimeSingel2 - starTimeSingel1;
+ var singleSpanTow2 = endTimeTowSh2 - startTimeTowSh1;
+ notHolidays = notHolidays.Add(singleSpanTow1);
+ notHolidays = notHolidays.Add(singleSpanTow2);
+
+ var Over22ComputeTow1 = Over22Check(starTimeSingel1, endTimeSingel2);
+ Over22 = Over22.Add(Over22ComputeTow1);
+ var Over22ComputeTow2 = Over22Check(startTimeTowSh1, endTimeTowSh2);
+ Over22 = Over22.Add(Over22ComputeTow2);
+ break;
+ }
+ }
+ }
+ else if (da.DayOfWeek == "چهارشنبه" && command.cheharshanbeh && leavId > 0)
+ {
+ }
+
+ if (da.DayOfWeek == "پنج شنبه" && command.pangshanbeh && leavId == 0)
+ {
+ var test = da.ToGregorianDateTime();
+ var checkHoliday = _holidayItemRepository.GetHoliday(test);
+ if (checkHoliday == false)
+ {
+ i5 += 1;
+ switch (command.ShiftWork)
+ {
+ case "1":
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Panjshanbeh);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Panjshanbeh);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ singleOver24 = endTimeSingel2 - singleShiftOver24;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ var singleSpan1 = endTimeSingel2 - starTimeSingel1;
+
+ singleSpan1 = singleSpan1.Subtract(rest5);
+
+ singleSpan1 = singleSpan1.Subtract(singleOver24);
+ jomeh = jomeh.Add(singleOver24);
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var Over22Compute = Over22Check(starTimeSingel1, endTimeSingel2);
+ Over22 = Over22.Add(Over22Compute);
+ break;
+
+ case "2":
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Panjshanbeh);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Panjshanbeh);
+ startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Panjshanbeh);
+ endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Panjshanbeh);
+ var singleOver24Tow = new TimeSpan();
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ singleOver24 = endTimeSingel2 - singleShiftOver24;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ if (startTimeTowSh1 > endTimeTowSh2)
+ {
+ overNight = true;
+ singleOver24Tow = endTimeTowSh2 - singleShiftOver24;
+ endTimeTowSh2 = endTimeTowSh2.AddDays(1);
+ }
+
+ var singleSpanTow1 = endTimeSingel2 - starTimeSingel1;
+ var singleSpanTow2 = endTimeTowSh2 - startTimeTowSh1;
+
+
+ singleSpanTow1 = singleSpanTow1.Subtract(singleOver24);
+ singleSpanTow2 = singleSpanTow2.Subtract(singleOver24Tow);
+
+ jomeh = jomeh.Add(singleOver24);
+ jomeh = jomeh.Add(singleOver24Tow);
+
+ notHolidays = notHolidays.Add(singleSpanTow1);
+ notHolidays = notHolidays.Add(singleSpanTow2);
+
+ var Over22ComputeTow1 = Over22Check(starTimeSingel1, endTimeSingel2);
+ Over22 = Over22.Add(Over22ComputeTow1);
+ var Over22ComputeTow2 = Over22Check(startTimeTowSh1, endTimeTowSh2);
+ Over22 = Over22.Add(Over22ComputeTow2);
+ break;
+ }
+ }
+ }
+ else if (da.DayOfWeek == "پنج شنبه" && command.pangshanbeh && leavId > 0)
+ {
+ }
+
+ if (da.DayOfWeek == "جمعه" && command.jomeh && leavId == 0)
+ {
+ i6 += 1;
+ switch (command.ShiftWork)
+ {
+ case "1":
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Jomeh);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Jomeh);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ var singleSpan1 = endTimeSingel2 - starTimeSingel1;
+ singleSpan1 = singleSpan1.Subtract(rest6);
+
+ jomeh = jomeh.Add(singleSpan1);
+
+ var Over22Compute = Over22Check(starTimeSingel1, endTimeSingel2);
+ Over22 = Over22.Add(Over22Compute);
+ break;
+
+ case "2":
+ starTimeSingel1 = Convert.ToDateTime(command.SingleShift1Jomeh);
+ endTimeSingel2 = Convert.ToDateTime(command.SingleShift2Jomeh);
+ startTimeTowSh1 = Convert.ToDateTime(command.TowShifts1Jomeh);
+ endTimeTowSh2 = Convert.ToDateTime(command.TowShifts2Jomeh);
+ if (starTimeSingel1 > endTimeSingel2)
+ {
+ overNight = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ }
+
+ if (startTimeTowSh1 > endTimeTowSh2)
+ {
+ overNight = true;
+ endTimeTowSh2 = endTimeTowSh2.AddDays(1);
+ }
+
+ var singleSpanTow1 = endTimeSingel2 - starTimeSingel1;
+ var singleSpanTow2 = endTimeTowSh2 - startTimeTowSh1;
+ jomeh = jomeh.Add(singleSpanTow1);
+ jomeh = jomeh.Add(singleSpanTow2);
+
+ var Over22ComputeTow1 = Over22Check(starTimeSingel1, endTimeSingel2);
+ Over22 = Over22.Add(Over22ComputeTow1);
+ var Over22ComputeTow2 = Over22Check(startTimeTowSh1, endTimeTowSh2);
+ Over22 = Over22.Add(Over22ComputeTow2);
+ break;
+ }
+ }
+ else if (da.DayOfWeek == "جمعه" && command.jomeh && leavId > 0)
+ {
+ }
+ else if (command.jomeh == false)
+ {
+ i6 = 0;
+ }
+
+ if (da.DayOfWeek == "جمعه") FridayStartToEnd += 1;
+ }
+ }
+
+ #endregion
+
+ #endregion
+
+ #region Rotating
+
+ else 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 "شنبه":
+ if (da.Day <= w1)
+ {
+ 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);
+ }
+ }
+ else if (command.Shanbe1 && leavId > 0)
+ {
+ }
+ }
+ 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
+
+ #region ComplexCompute
+
+ else if (command.ShiftWork == "5") //12-24
+ {
+ var now = DateTime.Now;
+ var sdate2 = command.ContarctStart.ToEnglishNumber();
+ var edate2 = command.ContractEnd.ToEnglishNumber();
+ var syear2 = Convert.ToInt32(sdate.Substring(0, 4));
+ var smonth2 = Convert.ToInt32(sdate.Substring(5, 2));
+ var sday2 = Convert.ToInt32(sdate.Substring(8, 2));
+
+ var eyear2 = Convert.ToInt32(edate.Substring(0, 4));
+ var emonth2 = Convert.ToInt32(edate.Substring(5, 2));
+ var eday2 = Convert.ToInt32(edate.Substring(8, 2));
+
+ var d1b = new PersianDateTime(syear2, smonth2, sday2);
+ var d2b = new PersianDateTime(eyear2, emonth2, eday2, 23, 59);
+
+ var start = Convert.ToDateTime(command.StartComplex);
+ var end = Convert.ToDateTime(command.EndComplex);
+
+
+ var sh = start.Hour;
+ var sm = start.Minute;
+ var eh = end.Hour;
+ var em = end.Minute;
+ var startDateAndTime = new PersianDateTime(syear2, smonth2, sday2, sh, sm);
+ var endDateTime = new PersianDateTime(syear2, smonth2, sday2, eh, em);
+
+ end = endDateTime.ToGregorianDateTime();
+
+
+ for (var da2 = startDateAndTime; da2 <= d2b; da2.AddHours(36))
+ {
+ var test = $"{da2}";
+ if (da2.DayOfWeek == "جمعه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+
+ var singleSpanTow1 = new TimeSpan();
+
+ i6 += 1;
+ if (start.Date < end.Date)
+ {
+ overNight = true;
+ var over24 = new DateTime(end.Year, end.Month, end.Day, 0, 0, 0);
+ singleOver24 = end - over24;
+
+ singleSpanTow1 = end - start;
+ singleSpanTow1 = singleSpanTow1.Subtract(singleOver24);
+ notHolidays = notHolidays.Add(singleOver24);
+ jomeh = jomeh.Add(singleSpanTow1);
+ i += 1;
+ }
+ else
+ {
+ singleSpanTow1 = end - start;
+ jomeh = jomeh.Add(singleSpanTow1);
+ }
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave)
+ {
+ Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+ fridays += 1;
+ }
+
+ var endCal = end - start;
+ var NextStart = start.AddHours(36);
+ end = NextStart.Add(endCal);
+ }
+ else if (da2.DayOfWeek == "پنج شنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+ var singleSpan1 = new TimeSpan();
+ i5 += 1;
+ if (start.Date < end.Date && start.Day != end.Day)
+ {
+ overNight = true;
+ var over24 = new DateTime(end.Year, end.Month, end.Day, 0, 0, 0);
+ singleOver24 = end - over24;
+
+
+ jomeh = jomeh.Add(singleOver24);
+
+ i6 += 1;
+
+ singleSpan1 = end - start;
+ singleSpan1 = singleSpan1.Subtract(singleOver24);
+ notHolidays = notHolidays.Add(singleSpan1);
+ }
+ else
+ {
+ singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+ }
+
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ var endCal = end - start;
+ var NextStart = start.AddHours(36);
+ end = NextStart.Add(endCal);
+ }
+ else if (da2.DayOfWeek == "شنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i += 1;
+ var NextStart = start.AddHours(36);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "یکشنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i1 += 1;
+
+ var NextStart = start.AddHours(36);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "دوشنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i2 += 1;
+
+ var NextStart = start.AddHours(36);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "سه شنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i3 += 1;
+ var NextStart = start.AddHours(36);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "چهارشنبه")
+ {
+ start = da2.ToGregorianDateTime();
+
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i4 += 1;
+ var NextStart = start.AddHours(36);
+ end = NextStart.Add(singleSpan1);
+ }
+ }
+
+
+ for (var daa = d1b; daa <= d2b; daa.AddDays(1))
+ {
+ var test = daa.ToGregorianDateTime();
+ var checkHoliday = _holidayItemRepository.GetHoliday(test);
+ if (daa.DayOfWeek != "جمعه")
+ {
+ if (checkHoliday == false)
+ SumComplexDays += 1;
+ else
+ OfficialHoliday += 1;
+ }
+ else
+ {
+ FridayStartToEnd += 1;
+ }
+ }
+ }
+ else if (command.ShiftWork == "6") //24-24
+ {
+ var now = DateTime.Now;
+ var sdate2 = command.ContarctStart.ToEnglishNumber();
+ var edate2 = command.ContractEnd.ToEnglishNumber();
+ var syear2 = Convert.ToInt32(sdate.Substring(0, 4));
+ var smonth2 = Convert.ToInt32(sdate.Substring(5, 2));
+ var sday2 = Convert.ToInt32(sdate.Substring(8, 2));
+
+ var eyear2 = Convert.ToInt32(edate.Substring(0, 4));
+ var emonth2 = Convert.ToInt32(edate.Substring(5, 2));
+ var eday2 = Convert.ToInt32(edate.Substring(8, 2));
+
+ var d1b = new PersianDateTime(syear2, smonth2, sday2);
+ var d2b = new PersianDateTime(eyear2, emonth2, eday2, 23, 59);
+
+ var start = Convert.ToDateTime(command.StartComplex);
+ var end = Convert.ToDateTime(command.EndComplex);
+
+
+ var sh = start.Hour;
+ var sm = start.Minute;
+ var eh = end.Hour;
+ var em = end.Minute;
+ var startDateAndTime = new PersianDateTime(syear2, smonth2, sday2, sh, sm);
+ var endDateTime = new PersianDateTime(syear2, smonth2, sday2, eh, em);
+ //if (start > end)
+ //{
+
+ // endDateTime.AddDays(1);
+ //}
+
+ endDateTime.AddDays(1);
+ end = endDateTime.ToGregorianDateTime();
+
+
+ for (var da2 = startDateAndTime; da2 <= d2b; da2.AddHours(48))
+ {
+ var test = $"{da2}";
+ if (da2.DayOfWeek == "جمعه")
+ {
+ start = da2.ToGregorianDateTime();
+
+ var singleSpanTow1 = new TimeSpan();
+ var WorkHours = end - start;
+ i6 += 1;
+ if (start.Date < end.Date)
+ {
+ overNight = true;
+ var over24 = new DateTime(end.Year, end.Month, end.Day, 0, 0, 0);
+ singleOver24 = end - over24;
+
+ singleSpanTow1 = end - start;
+ singleSpanTow1 = singleSpanTow1.Subtract(singleOver24);
+ notHolidays = notHolidays.Add(singleOver24);
+ jomeh = jomeh.Add(singleSpanTow1);
+ i += 1;
+ }
+ else
+ {
+ singleSpanTow1 = end - start;
+ jomeh = jomeh.Add(singleSpanTow1);
+ }
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave)
+ {
+ Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+ fridays += 1;
+ }
+
+
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(WorkHours);
+ }
+ else if (da2.DayOfWeek == "پنج شنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ var singleSpan1 = new TimeSpan();
+ var WorkHours = end - start;
+ i5 += 1;
+ if (start.Date < end.Date && start.Day != end.Day)
+ {
+ overNight = true;
+ var over24 = new DateTime(end.Year, end.Month, end.Day, 0, 0, 0);
+ singleOver24 = end - over24;
+
+
+ jomeh = jomeh.Add(singleOver24);
+
+ i6 += 1;
+
+ singleSpan1 = end - start;
+ singleSpan1 = singleSpan1.Subtract(singleOver24);
+ notHolidays = notHolidays.Add(singleSpan1);
+ }
+ else
+ {
+ singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+ }
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(WorkHours);
+ }
+ else if (da2.DayOfWeek == "شنبه")
+ {
+ start = da2.ToGregorianDateTime();
+
+
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i += 1;
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "یکشنبه")
+ {
+ start = da2.ToGregorianDateTime();
+
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i1 += 1;
+
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "دوشنبه")
+ {
+ start = da2.ToGregorianDateTime();
+
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i2 += 1;
+
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "سه شنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i3 += 1;
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "چهارشنبه")
+ {
+ start = da2.ToGregorianDateTime();
+
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i4 += 1;
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(singleSpan1);
+ }
+ }
+
+
+ for (var daa = d1b; daa <= d2b; daa.AddDays(1))
+ {
+ var test = daa.ToGregorianDateTime();
+ var checkHoliday = _holidayItemRepository.GetHoliday(test);
+ if (daa.DayOfWeek != "جمعه")
+ {
+ if (checkHoliday == false)
+ SumComplexDays += 1;
+ else
+ OfficialHoliday += 1;
+ }
+ else
+ {
+ FridayStartToEnd += 1;
+ }
+ }
+ }
+ else if (command.ShiftWork == "7") //12-36
+ {
+ var now = DateTime.Now;
+ var sdate2 = command.ContarctStart.ToEnglishNumber();
+ var edate2 = command.ContractEnd.ToEnglishNumber();
+ var syear2 = Convert.ToInt32(sdate.Substring(0, 4));
+ var smonth2 = Convert.ToInt32(sdate.Substring(5, 2));
+ var sday2 = Convert.ToInt32(sdate.Substring(8, 2));
+
+ var eyear2 = Convert.ToInt32(edate.Substring(0, 4));
+ var emonth2 = Convert.ToInt32(edate.Substring(5, 2));
+ var eday2 = Convert.ToInt32(edate.Substring(8, 2));
+
+ var d1b = new PersianDateTime(syear2, smonth2, sday2);
+ var d2b = new PersianDateTime(eyear2, emonth2, eday2, 23, 59);
+
+ var start = Convert.ToDateTime(command.StartComplex);
+ var end = Convert.ToDateTime(command.EndComplex);
+
+
+ var sh = start.Hour;
+ var sm = start.Minute;
+ var eh = end.Hour;
+ var em = end.Minute;
+ var startDateAndTime = new PersianDateTime(syear2, smonth2, sday2, sh, sm);
+ var endDateTime = new PersianDateTime(syear2, smonth2, sday2, eh, em);
+ //if (start > end)
+ //{
+
+ // endDateTime.AddDays(1);
+ //}
+
+ //endDateTime.AddDays(1);
+ end = endDateTime.ToGregorianDateTime();
+
+
+ for (var da2 = startDateAndTime; da2 <= d2b; da2.AddHours(48))
+ {
+ var test = $"{da2}";
+ if (da2.DayOfWeek == "جمعه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+
+ var singleSpanTow1 = new TimeSpan();
+
+ i6 += 1;
+ if (start.Date < end.Date)
+ {
+ overNight = true;
+ var over24 = new DateTime(end.Year, end.Month, end.Day, 0, 0, 0);
+ singleOver24 = end - over24;
+
+ singleSpanTow1 = end - start;
+ singleSpanTow1 = singleSpanTow1.Subtract(singleOver24);
+ notHolidays = notHolidays.Add(singleOver24);
+ jomeh = jomeh.Add(singleSpanTow1);
+ i += 1;
+ }
+ else
+ {
+ singleSpanTow1 = end - start;
+ jomeh = jomeh.Add(singleSpanTow1);
+ }
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave)
+ {
+ Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+ fridays += 1;
+ }
+
+
+ var WorkHours = end - start;
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(WorkHours);
+ }
+ else if (da2.DayOfWeek == "پنج شنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+ var singleSpan1 = new TimeSpan();
+
+ i5 += 1;
+ if (start.Date < end.Date && start.Day != end.Day)
+ {
+ overNight = true;
+ var over24 = new DateTime(end.Year, end.Month, end.Day, 0, 0, 0);
+ singleOver24 = end - over24;
+
+
+ jomeh = jomeh.Add(singleOver24);
+
+ i6 += 1;
+
+ singleSpan1 = end - start;
+ singleSpan1 = singleSpan1.Subtract(singleOver24);
+ notHolidays = notHolidays.Add(singleSpan1);
+ }
+ else
+ {
+ singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+ }
+
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ var WorkHours = end - start;
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(WorkHours);
+ }
+ else if (da2.DayOfWeek == "شنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i += 1;
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "یکشنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i1 += 1;
+
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "دوشنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i2 += 1;
+
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "سه شنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= endComplex && x.EndLeaveGr >= endComplex) ||
+ (x.StartLeaveGr >= startComplex &&
+ x.StartLeaveGr <= endComplex) ||
+ (x.EndLeaveGr >= startComplex && x.EndLeaveGr <= endComplex));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i3 += 1;
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "چهارشنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay)
+ end = end.AddDays(1);
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i4 += 1;
+ var NextStart = start.AddHours(48);
+ end = NextStart.Add(singleSpan1);
+ }
+ }
+
+
+ for (var daa = d1b; daa <= d2b; daa.AddDays(1))
+ {
+ var test = daa.ToGregorianDateTime();
+ var checkHoliday = _holidayItemRepository.GetHoliday(test);
+ if (daa.DayOfWeek != "جمعه")
+ {
+ if (checkHoliday == false)
+ SumComplexDays += 1;
+ else
+ OfficialHoliday += 1;
+ }
+ else
+ {
+ FridayStartToEnd += 1;
+ }
+ }
+ }
+ else if (command.ShiftWork == "8") //24-48
+ {
+ var now = DateTime.Now;
+ var sdate2 = command.ContarctStart.ToEnglishNumber();
+ var edate2 = command.ContractEnd.ToEnglishNumber();
+ var syear2 = Convert.ToInt32(sdate.Substring(0, 4));
+ var smonth2 = Convert.ToInt32(sdate.Substring(5, 2));
+ var sday2 = Convert.ToInt32(sdate.Substring(8, 2));
+
+ var eyear2 = Convert.ToInt32(edate.Substring(0, 4));
+ var emonth2 = Convert.ToInt32(edate.Substring(5, 2));
+ var eday2 = Convert.ToInt32(edate.Substring(8, 2));
+
+ var d1b = new PersianDateTime(syear2, smonth2, sday2);
+ var d2b = new PersianDateTime(eyear2, emonth2, eday2, 23, 59);
+
+ var start = Convert.ToDateTime(command.StartComplex);
+ var end = Convert.ToDateTime(command.EndComplex);
+
+ var sh = start.Hour;
+ var sm = start.Minute;
+ var eh = end.Hour;
+ var em = end.Minute;
+ var startDateAndTime = new PersianDateTime(syear2, smonth2, sday2, sh, sm);
+ var endDateTime = new PersianDateTime(syear2, smonth2, sday2, eh, em);
+ //if (start > end)
+ //{
+
+ // endDateTime.AddDays(1);
+ //}
+
+
+ end = endDateTime.ToGregorianDateTime();
+ end = end.AddDays(1);
+
+
+ for (var da2 = startDateAndTime; da2 <= d2b; da2.AddHours(72))
+ {
+ var test = $"{da2}";
+ if (da2.DayOfWeek == "جمعه")
+ {
+ start = da2.ToGregorianDateTime();
+
+ var singleSpanTow1 = new TimeSpan();
+
+ i6 += 1;
+ if (start.Date < end.Date)
+ {
+ overNight = true;
+ var over24 = new DateTime(end.Year, end.Month, end.Day, 0, 0, 0);
+ singleOver24 = end - over24;
+
+ singleSpanTow1 = end - start;
+ singleSpanTow1 = singleSpanTow1.Subtract(singleOver24);
+ notHolidays = notHolidays.Add(singleOver24);
+ jomeh = jomeh.Add(singleSpanTow1);
+ i += 1;
+ }
+ else
+ {
+ singleSpanTow1 = end - start;
+ jomeh = jomeh.Add(singleSpanTow1);
+ }
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave)
+ {
+ Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+ fridays += 1;
+ }
+
+
+ var WorkHours = end - start;
+ var NextStart = start.AddHours(72);
+ end = NextStart.Add(WorkHours);
+ }
+ else if (da2.DayOfWeek == "پنج شنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ var singleSpan1 = new TimeSpan();
+
+ i5 += 1;
+ if (start.Date < end.Date && start.Day != end.Day)
+ {
+ overNight = true;
+ var over24 = new DateTime(end.Year, end.Month, end.Day, 0, 0, 0);
+ singleOver24 = end - over24;
+
+
+ jomeh = jomeh.Add(singleOver24);
+
+ i6 += 1;
+
+ singleSpan1 = end - start;
+ singleSpan1 = singleSpan1.Subtract(singleOver24);
+ notHolidays = notHolidays.Add(singleSpan1);
+ }
+ else
+ {
+ singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+ }
+
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ var WorkHours = end - start;
+ var NextStart = start.AddHours(72);
+ end = NextStart.Add(WorkHours);
+ }
+ else if (da2.DayOfWeek == "شنبه")
+ {
+ start = da2.ToGregorianDateTime();
+
+
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i += 1;
+ var NextStart = start.AddHours(72);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "یکشنبه")
+ {
+ start = da2.ToGregorianDateTime();
+
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i1 += 1;
+
+ var NextStart = start.AddHours(72);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "دوشنبه")
+ {
+ start = da2.ToGregorianDateTime();
+
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i2 += 1;
+
+ var NextStart = start.AddHours(72);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "سه شنبه")
+ {
+ start = da2.ToGregorianDateTime();
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i3 += 1;
+ var NextStart = start.AddHours(72);
+ end = NextStart.Add(singleSpan1);
+ }
+ else if (da2.DayOfWeek == "چهارشنبه")
+ {
+ start = da2.ToGregorianDateTime();
+
+ var singleSpan1 = end - start;
+ notHolidays = notHolidays.Add(singleSpan1);
+
+ var startComplex = new DateTime(now.Year, now.Month, now.Day, start.Hour, start.Minute,
+ start.Second);
+ var endComplex = new DateTime(now.Year, now.Month, now.Day, end.Hour, end.Minute,
+ end.Second);
+ var rotatingCheck = RotatingShiftCheck(startComplex, endComplex, startTimeTowSh1, endTimeTowSh2);
+ rotatingCheck.RotatingDate = test;
+ rotatingResultList.Add(rotatingCheck);
+ //var Over22Computing = Over22Complex2424(start, end);
+ var hasLeave = leavList.Any(x => (x.StartLeaveGr <= start && x.EndLeaveGr >= start) ||
+ (x.StartLeaveGr <= end && x.EndLeaveGr >= end) ||
+ (x.StartLeaveGr >= start && x.StartLeaveGr <= end) ||
+ (x.EndLeaveGr >= start && x.EndLeaveGr <= end));
+ if (!hasLeave) Over22 = Over22.Add(rotatingCheck.NightWorkSpan);
+
+
+ i4 += 1;
+ var NextStart = start.AddHours(72);
+ end = NextStart.Add(singleSpan1);
+ }
+ }
+
+
+ for (var daa = d1b; daa <= d2b; daa.AddDays(1))
+ {
+ var test = daa.ToGregorianDateTime();
+ var checkHoliday = _holidayItemRepository.GetHoliday(test);
+ if (daa.DayOfWeek != "جمعه")
+ {
+ if (checkHoliday == false)
+ SumComplexDays += 1;
+ else
+ OfficialHoliday += 1;
+ }
+ else
+ {
+ FridayStartToEnd += 1;
+ }
+ }
+ }
+
+ #endregion
+
+ #region DayCounterAndDailyFix
+
+ var sumDays = i + i1 + i2 + i3 + i4 + i5 + i6;
+ var holidaysCount = i6;
+ var notHolidaysCount = i + i1 + i2 + i3 + i4 + i5;
+ // ساعات موظفی
+ var ComplexFix = dailyFix.Multiply(SumComplexDays);
+
+ dailyFix = dailyFix.Multiply(sumDays);
+
+ Notholiday = notHolidaysCount.ToString();
+ Holidays = holidaysCount.ToString();
+
+ var searchModel = new LeftWorkSearchModel
+ {
+ EmployeeId = command.EmployeeId,
+ WorkshopId = command.WorkshopId
+ };
+
+ var leftworkList = _leftWorkApplication.search(searchModel);
+ var lastLeftWork = leftworkList.FirstOrDefault();
+
+ var conStart = conStartGr;
+ var EndOfM = Convert.ToInt32(command.ContractEnd.Substring(8, 2));
+ var conEnd = conEndGr;
+ if (lastLeftWork.LeftWorkDate != "1500/01/01" && lastLeftWork.LeftWorkDateGr < conEnd)
+ {
+ conEnd = lastLeftWork.LeftWorkDateGr.AddDays(-1);
+ }
+ else
+ {
+ if (EndOfM == 31) conEnd = conEnd.AddDays(-1);
+ }
+
+
+ var AllDaysCount = (conEnd - conStart).TotalDays + 1;
+ var endContract = command.ContractEnd.ToGeorgianDateTime();
+ var AllmandatoryDays = 0;
+ int fridayCount = 0;
+ int officialHolidayCount = 0;
+ for (var gDate = conStart; gDate <= endContract; gDate = gDate.AddDays(1))
+ {
+ if (gDate.DayOfWeek != DayOfWeek.Friday)
+ AllmandatoryDays += 1;
+ if (gDate.DayOfWeek == DayOfWeek.Friday)
+ fridayCount += 1;
+ bool officialHoliday = _holidayItemRepository.GetHoliday(gDate);
+ if (officialHoliday)
+ officialHolidayCount += 1;
+
+ }
+
+
+ var mandatoryFixComplex = new TimeSpan(7, 20, 0).Multiply(AllmandatoryDays);
+
+ var allDays = (int)(endContract - conStart).TotalDays + 1;
+ int mondatoryDaysInMonth = allDays - (fridayCount + officialHolidayCount);
+ var mandatoryFixShifts = new TimeSpan(7, 20, 0).Multiply(mondatoryDaysInMonth);
+
+
+
+
+
+
+ var jomeh2 = new TimeSpan();
+
+ var notHolidays2 = new TimeSpan();
+ var Mandatory = new TimeSpan();
+
+
+ notHolidays = notHolidays.Add(jomeh);
+
+ var workingDaysH = (int)notHolidays.TotalHours;
+ var workingDaysM = notHolidays.TotalMinutes % 60;
+ //ساعات کاری پرسنل با احتساب تعطیلات رسمی
+ HolidaysAndNot = HolidaysAndNot.Add(notHolidays);
+ var totalHolidaysAndNotH = (int)HolidaysAndNot.TotalHours;
+ var totalHolidaysAndNotM = HolidaysAndNot.TotalMinutes % 60;
+
+
+ notHolidays2 = notHolidays2.Add(jomeh2);
+
+
+ var SumNotHolidays = notHolidays.Add(notHolidays2);
+ var SumNotHolidaysHours = (int)SumNotHolidays.TotalHours;
+ var SumNotHolidaysMinuts = SumNotHolidays.Minutes % 60;
+
+ var SumHolidays = jomeh.Add(jomeh2);
+ var SumHolidaysHours = (int)SumHolidays.TotalHours;
+ var SumHolidaysMinuts = SumHolidays.Minutes % 60;
+
+ var totalHoursShift1 = notHolidays;
+ var totalHoursShift1And2 = SumNotHolidays;
+
+ #endregion
+
+ #region DailyFeeCompute
+
+ var basic = "0";
+
+ var GetWorkStartDate = command.GetWorkDateHide.ToEnglishNumber();
+ var GetWorkEndDate = command.ContractEnd.ToEnglishNumber();
+ var styear = Convert.ToInt32(GetWorkStartDate.Substring(0, 4));
+ var stmonth = Convert.ToInt32(GetWorkStartDate.Substring(5, 2));
+ var stday = Convert.ToInt32(GetWorkStartDate.Substring(8, 2));
+
+ var edyear = Convert.ToInt32(GetWorkEndDate.Substring(0, 4));
+ var edmonth = Convert.ToInt32(GetWorkEndDate.Substring(5, 2));
+ var edday = Convert.ToInt32(GetWorkEndDate.Substring(8, 2));
+ var startDate = command.GetWorkDateHide.ToGeorgianDateTime();
+ var endDate = command.ContractEnd.ToGeorgianDateTime();
+ var dayliFee = "خطای تاریخ";
+
+ if (styear >= 1370)
+ {
+ if (leftworkList == null)
+ leftworkList = new List();
+ var ContractStart = command.ContarctStart.ToGeorgianDateTime();
+ var dayliFeeResult = _yearlySalaryRepository.DayliFeeComputing(startDate, ContractStart, endDate,
+ command.EmployeeId, command.WorkshopId, leftworkList);
+ dayliFee = dayliFeeResult.DayliFee;
+ dayliFeeComplete = dayliFeeResult.DayliFee.MoneyToDouble();
+ basic = dayliFeeResult.Basic;
+ }
+
+ #endregion
+
+ #region ConsumableItemsAndHousingAndFamily
+
+ var ConsumableItems = _yearlySalaryRepository.ConsumableItems(endDate);
+ var HousingAllowance = _yearlySalaryRepository.HousingAllowance(endDate);
+
+ var familyAllowance = _yearlySalaryRepository.FamilyAllowance(command.EmployeeId, conStartGr, endDate);
+ var MarriedAllowance = _yearlySalaryRepository.MarriedAllowance(endDate, command.EmployeeId);
+
+ #endregion
+
+ #region Fix44Compute
+
+ var dailyFixx = TimeSpan.Parse("07:20");
+ var fix44 = dailyFixx.Multiply(6);
+
+ var divideNum = TimeSpan.Parse("06:00");
+ // حق تاهل
+ var MarriedAllowanceStr = MarriedAllowance > 0 ? MarriedAllowance.ToMoney() : "0";
+ var AllDaysCountWithOutSickLive = AllDaysCount - sickLeaveCount;
+
+ if (command.ShiftWork == "1")
+ {
+ if (SumSingle < fix44)
+ {
+ // مجموع ساعت کار هفته تقسیم بر 6 ساعت
+ var dividTo6Days = SumSingle.Divide(divideNum);
+
+ var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble();
+ var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble();
+ var familyAllowanceNumberType = familyAllowance.MoneyToDouble();
+ var DailyFeeNumberType = dayliFee.MoneyToDouble();
+
+ //مزد روزانه تقسیم بر 7/33
+ var dailyStep1 = DailyFeeNumberType / 7.33;
+ //نتیجه ضربدر جواب مجموع ساعت تقسیم بر 6 روز هفته
+ var dailyStep2 = dailyStep1 * dividTo6Days;
+
+ dayliFee = dailyStep2.ToMoney();
+
+ var HousingStep1 = HousingAllowonceNumberType / 30;
+ var HousingStep2 = HousingStep1 / 7.33;
+ var HousingStep3 = HousingStep2 * dividTo6Days;
+ var HousingStep4 = HousingStep3 * AllDaysCount;
+ HousingAllowance = HousingStep4.ToMoney();
+
+ var consumableItemsStep1 = ConsumableItemsNumberType / 30;
+ var consumableItemsStep2 = consumableItemsStep1 / 7.33;
+ var consumableItemsStep3 = consumableItemsStep2 * dividTo6Days;
+ var consumableItemsStep4 = consumableItemsStep3 * AllDaysCount;
+ ConsumableItems = consumableItemsStep4.ToMoney();
+
+ //حق تاهل
+ if (MarriedAllowance > 0)
+ {
+ var MarriedStep1 = MarriedAllowance / 30;
+ var MarriedStep2 = MarriedStep1 / 7.33;
+ var MarriedStep3 = MarriedStep2 * dividTo6Days;
+ var MarriedStep4 = MarriedStep3 * AllDaysCount;
+ MarriedAllowanceStr = MarriedStep4.ToMoney();
+ }
+
+ if (familyAllowance != "0")
+ {
+ var familyAllowanceStep1 = familyAllowanceNumberType / 30;
+ var familyAllowanceStep2 = familyAllowanceStep1 / 7.33;
+ var familyAllowanceStep3 = familyAllowanceStep2 * dividTo6Days;
+ var familyAllowanceStep4 = familyAllowanceStep3 * AllDaysCount;
+ familyAllowance = familyAllowanceStep4.ToMoney();
+ }
+
+ var sumSingleRound = Math.Round(SumSingle.TotalHours, 2);
+ weeklyTime = SumSingle;
+ SumWorkeTime = $"{sumSingleRound}";
+ }
+ else
+ {
+ var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble();
+ var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble();
+ var familyAllowanceNumberType = familyAllowance.MoneyToDouble();
+
+ var HousingStep1 = HousingAllowonceNumberType / 30;
+ var HousingStep4 = HousingStep1 * AllDaysCount;
+ HousingAllowance = HousingStep4.ToMoney();
+
+
+ var consumableItemsStep1 = ConsumableItemsNumberType / 30;
+ var consumableItemsStep4 = consumableItemsStep1 * AllDaysCount;
+ ConsumableItems = consumableItemsStep4.ToMoney();
+
+ //حق تاهل
+ if (MarriedAllowance > 0)
+ {
+ var MarriedStep1 = MarriedAllowance / 30;
+ var MarriedStep4 = MarriedStep1 * AllDaysCount;
+ MarriedAllowanceStr = MarriedStep4.ToMoney();
+ }
+
+ if (familyAllowance != "0")
+ {
+ var familyAllowanceStep1 = familyAllowanceNumberType / 30;
+ var familyAllowanceStep4 = familyAllowanceStep1 * AllDaysCount;
+ familyAllowance = familyAllowanceStep4.ToMoney();
+ }
+
+ SumWorkeTime = $"{44}";
+ }
+ }
+ else if (command.ShiftWork == "2")
+ {
+ var totalShift = SumSingle + SumTow;
+ if (totalShift < fix44)
+ {
+ var dividTo6Days = totalShift.Divide(divideNum);
+ var DailyFeeNumberType = dayliFee.MoneyToDouble();
+
+ var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble();
+ var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble();
+ var familyAllowanceNumberType = familyAllowance.MoneyToDouble();
+
+ var step1 = DailyFeeNumberType / 7.33;
+ var step2 = step1 * dividTo6Days;
+
+ dayliFee = step2.ToMoney();
+
+
+ var HousingStep1 = HousingAllowonceNumberType / 30;
+ var HousingStep2 = HousingStep1 / 7.33;
+ var HousingStep3 = HousingStep2 * dividTo6Days;
+ var HousingStep4 = HousingStep3 * AllDaysCount;
+ HousingAllowance = HousingStep4.ToMoney();
+
+ var consumableItemsStep1 = ConsumableItemsNumberType / 30;
+ var consumableItemsStep2 = consumableItemsStep1 / 7.33;
+ var consumableItemsStep3 = consumableItemsStep2 * dividTo6Days;
+ var consumableItemsStep4 = consumableItemsStep3 * AllDaysCount;
+ ConsumableItems = consumableItemsStep4.ToMoney();
+
+ //حق تاهل
+ if (MarriedAllowance > 0)
+ {
+ var MarriedStep1 = MarriedAllowance / 30;
+ var MarriedStep2 = MarriedStep1 / 7.33;
+ var MarriedStep3 = MarriedStep2 * dividTo6Days;
+ var MarriedStep4 = MarriedStep3 * AllDaysCount;
+ MarriedAllowanceStr = MarriedStep4.ToMoney();
+ }
+
+ if (familyAllowance != "0")
+ {
+ var familyAllowanceStep1 = familyAllowanceNumberType / 30;
+ var familyAllowanceStep2 = familyAllowanceStep1 / 7.33;
+ var familyAllowanceStep3 = familyAllowanceStep2 * dividTo6Days;
+ var familyAllowanceStep4 = familyAllowanceStep3 * AllDaysCount;
+ familyAllowance = familyAllowanceStep4.ToMoney();
+ }
+
+ var totalShiftRound = Math.Round(totalShift.TotalHours, 2);
+ SumWorkeTime = $"{totalShiftRound}";
+ weeklyTime = totalShift;
+ }
+ else
+ {
+ var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble();
+ var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble();
+ var familyAllowanceNumberType = familyAllowance.MoneyToDouble();
+
+ var consumableItemsStep1 = ConsumableItemsNumberType / 30;
+ var consumableItemsStep4 = consumableItemsStep1 * AllDaysCount;
+ ConsumableItems = consumableItemsStep4.ToMoney();
+
+ var HousingStep1 = HousingAllowonceNumberType / 30;
+ var HousingStep4 = HousingStep1 * AllDaysCount;
+ HousingAllowance = HousingStep4.ToMoney();
+
+ //حق تاهل
+ if (MarriedAllowance > 0)
+ {
+ var MarriedStep1 = MarriedAllowance / 30;
+ var MarriedStep4 = MarriedStep1 * AllDaysCount;
+ MarriedAllowanceStr = MarriedStep4.ToMoney();
+ }
+
+ if (familyAllowance != "0")
+ {
+ var familyAllowanceStep1 = familyAllowanceNumberType / 30;
+ var familyAllowanceStep4 = familyAllowanceStep1 * AllDaysCount;
+ familyAllowance = familyAllowanceStep4.ToMoney();
+ }
+
+ SumWorkeTime = $"{44}";
+ }
+ }
+ else if (command.ShiftWork == "4")
+ {
+ var TotalContractDays = (conEndGr - conStartGr).TotalDays + 1;
+ var totalWeek = (int)(TotalContractDays / 6);
+ var TotalDaysNoFriday = TotalContractDays - FridayStartToEnd;
+ var FixHourses = TotalDaysNoFriday * 7.33;
+ var totalHourses = HolidaysAndNot.TotalMinutes / 60;
+ //var dividedForOneDay = totalHourses / notHolidaysCount;
+ if (totalHourses < FixHourses)
+ {
+ var DailyFeeNumberType = dayliFee.MoneyToDouble();
+ var dailyStep1 = DailyFeeNumberType / 7.33;
+ var hoursesPerDay = totalHourses / TotalDaysNoFriday;
+ var result = hoursesPerDay * dailyStep1;
+
+ dayliFee = result.ToMoney();
+
+
+ var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble();
+ var HousingStep1 = HousingAllowonceNumberType / 30;
+ var HousingStep2 = HousingStep1 / 7.33;
+ var HousingStep3 = HousingStep2 * hoursesPerDay;
+ var HousingStep4 = HousingStep3 * AllDaysCountWithOutSickLive;
+ HousingAllowance = HousingStep4.ToMoney();
+
+ var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble();
+ var consumableItemsStep1 = ConsumableItemsNumberType / 30;
+ var consumableItemsStep2 = consumableItemsStep1 / 7.33;
+ var consumableItemsStep3 = consumableItemsStep2 * hoursesPerDay;
+ var consumableItemsStep4 = consumableItemsStep3 * AllDaysCountWithOutSickLive;
+ ConsumableItems = consumableItemsStep4.ToMoney();
+
+
+ //حق تاهل
+ if (MarriedAllowance > 0)
+ {
+ var MarriedStep1 = MarriedAllowance / 30;
+ var MarriedStep2 = MarriedStep1 / 7.33;
+ var MarriedStep3 = MarriedStep2 * hoursesPerDay;
+ var MarriedStep4 = MarriedStep3 * AllDaysCountWithOutSickLive;
+ MarriedAllowanceStr = MarriedStep4.ToMoney();
+ }
+
+ if (familyAllowance != "0")
+ {
+ var familyAllowanceNumberType = familyAllowance.MoneyToDouble();
+ var familyAllowanceStep1 = familyAllowanceNumberType / 30;
+ var familyAllowanceStep2 = familyAllowanceStep1 / 7.33;
+ var familyAllowanceStep3 = familyAllowanceStep2 * hoursesPerDay;
+ var familyAllowanceStep4 = familyAllowanceStep3 * AllDaysCount;
+ familyAllowance = familyAllowanceStep4.ToMoney();
+ }
+
+ if (totalWeek > 1)
+ {
+ double weekAvrage = 0;
+ if (totalHourses < 44.00)
+ weekAvrage = totalHourses * 6 / TotalContractDays;
+ else
+ weekAvrage = totalHourses * 6 / TotalDaysNoFriday;
+ //var oneday = weekAvrage * 6;
+ var totalShiftRound = Math.Round(weekAvrage, 2);
+ SumWorkeTime = $"{totalShiftRound}";
+ }
+ else if (totalWeek <= 1 && TotalDaysNoFriday <= 6)
+ {
+ var totalShiftRound = Math.Round(totalHourses, 2);
+ SumWorkeTime = $"{totalShiftRound}";
+ }
+ else if (totalWeek <= 1 && TotalDaysNoFriday > 6)
+
+ {
+ var perDyeWorked = totalHourses / TotalDaysNoFriday;
+ var weekAvrage = perDyeWorked * 6;
+ var totalShiftRound = Math.Round(weekAvrage, 2);
+ SumWorkeTime = $"{totalShiftRound}";
+ }
+
+ weeklyTime = totalHoursShift1;
+ }
+ else
+ {
+ var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble();
+ var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble();
+ var familyAllowanceNumberType = familyAllowance.MoneyToDouble();
+
+ var HousingStep1 = HousingAllowonceNumberType / 30;
+ var HousingStep4 = HousingStep1 * AllDaysCountWithOutSickLive;
+ HousingAllowance = HousingStep4.ToMoney();
+
+
+ var consumableItemsStep1 = ConsumableItemsNumberType / 30;
+ var consumableItemsStep4 = consumableItemsStep1 * AllDaysCountWithOutSickLive;
+ ConsumableItems = consumableItemsStep4.ToMoney();
+
+ //حق تاهل
+ if (MarriedAllowance > 0)
+ {
+ var MarriedStep1 = MarriedAllowance / 30;
+ var MarriedStep4 = MarriedStep1 * AllDaysCountWithOutSickLive;
+ MarriedAllowanceStr = MarriedStep4.ToMoney();
+ }
+
+ if (familyAllowance != "0")
+ {
+ var familyAllowanceStep1 = familyAllowanceNumberType / 30;
+ var familyAllowanceStep4 = familyAllowanceStep1 * AllDaysCount;
+ familyAllowance = familyAllowanceStep4.ToMoney();
+ }
+
+ SumWorkeTime = $"{44}";
+ }
+ }
+ else
+ {
+ var TotalContractDays = (conEndGr - conStartGr).TotalDays + 1;
+ var TotalDaysNoFriday = TotalContractDays - FridayStartToEnd;
+ var FixHourses = TotalDaysNoFriday * 7.33;
+
+ var totalHourses = totalHoursShift1.TotalMinutes / 60;
+
+ if (totalHourses < FixHourses)
+ {
+ var dailyFeeNumberType = dayliFee.MoneyToDouble();
+ var dailyStep1 = dailyFeeNumberType / 7.33;
+ var hoursesPerDay = totalHourses / TotalDaysNoFriday;
+ var result = hoursesPerDay * dailyStep1;
+
+ dayliFee = result.ToMoney();
+
+ var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble();
+ var HousingStep1 = HousingAllowonceNumberType / 30;
+ var HousingStep2 = HousingStep1 / 7.33;
+ var HousingStep3 = HousingStep2 * hoursesPerDay;
+ var HousingStep4 = HousingStep3 * AllDaysCountWithOutSickLive;
+ HousingAllowance = HousingStep4.ToMoney();
+
+ var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble();
+ var consumableItemsStep1 = ConsumableItemsNumberType / 30;
+ var consumableItemsStep2 = consumableItemsStep1 / 7.33;
+ var consumableItemsStep3 = consumableItemsStep2 * hoursesPerDay;
+ var consumableItemsStep4 = consumableItemsStep3 * AllDaysCountWithOutSickLive;
+ ConsumableItems = consumableItemsStep4.ToMoney();
+
+ //حق تاهل
+ if (MarriedAllowance > 0)
+ {
+ var MarriedStep1 = MarriedAllowance / 30;
+ var MarriedStep2 = MarriedStep1 / 7.33;
+ var MarriedStep3 = MarriedStep2 * hoursesPerDay;
+ var MarriedStep4 = MarriedStep3 * AllDaysCountWithOutSickLive;
+ MarriedAllowanceStr = MarriedStep4.ToMoney();
+ }
+
+ if (familyAllowance != "0")
+ {
+ var familyAllowanceNumberType = familyAllowance.MoneyToDouble();
+ var familyAllowanceStep1 = familyAllowanceNumberType / 30;
+ var familyAllowanceStep2 = familyAllowanceStep1 / 7.33;
+ var familyAllowanceStep3 = familyAllowanceStep2 * hoursesPerDay;
+ var familyAllowanceStep4 = familyAllowanceStep3 * AllDaysCount;
+ familyAllowance = familyAllowanceStep4.ToMoney();
+ }
+ }
+ else
+ {
+ var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble();
+ var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble();
+ var familyAllowanceNumberType = familyAllowance.MoneyToDouble();
+
+ var HousingStep1 = HousingAllowonceNumberType / 30;
+ var HousingStep4 = HousingStep1 * AllDaysCountWithOutSickLive;
+ HousingAllowance = HousingStep4.ToMoney();
+
+
+ var consumableItemsStep1 = ConsumableItemsNumberType / 30;
+ var consumableItemsStep4 = consumableItemsStep1 * AllDaysCountWithOutSickLive;
+ ConsumableItems = consumableItemsStep4.ToMoney();
+
+ //حق تاهل
+ if (MarriedAllowance > 0)
+ {
+ var MarriedStep1 = MarriedAllowance / 30;
+ var MarriedStep4 = MarriedStep1 * AllDaysCountWithOutSickLive;
+ MarriedAllowanceStr = MarriedStep4.ToMoney();
+ }
+
+ if (familyAllowance != "0")
+ {
+ var familyAllowanceStep1 = familyAllowanceNumberType / 30;
+ var familyAllowanceStep4 = familyAllowanceStep1 * AllDaysCount;
+ familyAllowance = familyAllowanceStep4.ToMoney();
+ }
+ }
+ }
+
+ #endregion
+
+ #region MandatoryTimeCompute
+
+
+
+ //حالت عادی
+ if (command.ShiftWork == "2" || command.ShiftWork == "1" || command.ShiftWork == "4")
+ {
+ switch (workshopHolidyWorking)
+ {
+ case true:
+ if (HolidaysAndNot > mandatoryFixShifts)
+ {
+ Mandatory = HolidaysAndNot.Subtract(mandatoryFixShifts);
+ var mandatoryHours = (int)Mandatory.TotalHours;
+ var mandatoryminuts = Mandatory.Minutes % 60;
+ overMandatoryHours = mandatoryHours.ToString();
+ overMandatoryMinuts = mandatoryminuts.ToString();
+ }
+
+ break;
+ case false:
+ if (totalHoursShift1And2 > mandatoryFixShifts)
+ {
+ Mandatory = totalHoursShift1And2.Subtract(mandatoryFixShifts);
+ var mandatoryHours = (int)Mandatory.TotalHours;
+ var mandatoryminuts = Mandatory.Minutes % 60;
+ overMandatoryHours = mandatoryHours.ToString();
+ overMandatoryMinuts = mandatoryminuts.ToString();
+ }
+ break;
+ }
+
+ }
+
+
+
+ //حالت چرخشی
+ if ((command.ShiftWork == "5" && totalHoursShift1 > mandatoryFixComplex)
+ || (command.ShiftWork == "6" && totalHoursShift1 > mandatoryFixComplex)
+ || (command.ShiftWork == "7" && totalHoursShift1 > mandatoryFixComplex)
+ || (command.ShiftWork == "8" && totalHoursShift1 > mandatoryFixComplex))
+ {
+ Mandatory = totalHoursShift1.Subtract(mandatoryFixComplex);
+ var mandatoryHours = (int)Mandatory.TotalHours;
+ var mandatoryminuts = Mandatory.Minutes % 60;
+
+ var leavs = leavList.Where(x => x.StartLeaveGr >= conStartGr && x.EndLeaveGr <= conEndGr)
+ .Sum(x => x.LeaveHourses.ConvertToInt());
+ //کسر اضافه کار مرخصی
+ if (leavs > 0)
+ {
+ var avrageOfTotalShift = totalHoursShift1 / sumDays;
+ var avrageOfComplexFix = ComplexFix / sumDays;
+ var mandatoryPerOneDay = avrageOfTotalShift - avrageOfComplexFix;
+ var minuseMondatory = mandatoryPerOneDay * leavs;
+ if (minuseMondatory < Mandatory)
+ {
+ var newManadatory = Mandatory.Subtract(minuseMondatory);
+ mandatoryHours = (int)newManadatory.TotalHours;
+ mandatoryminuts = newManadatory.Minutes % 60;
+ }
+ else
+ {
+ mandatoryHours = 0;
+ mandatoryminuts = 0;
+ }
+ }
+ overMandatoryHours = mandatoryHours.ToString();
+ overMandatoryMinuts = mandatoryminuts.ToString();
+
+ }
+
+
+
+ //Over22 = Over22.Multiply(sumDays);
+ var Over22hours = (int)Over22.TotalHours;
+ var Over22Minuts = Over22.TotalMinutes % 60;
+
+ if (command.ShiftWork == "1" || command.ShiftWork == "4")
+ {
+ shift1Hourse = workingDaysH.ToString();
+ shift1Minuts = workingDaysM.ToString();
+
+
+ shiftOver22Hours = Over22hours.ToString();
+ shiftOver22Minuts = Over22Minuts.ToString();
+ }
+
+ if (command.ShiftWork == "2")
+ {
+ shift1Hourse = SumNotHolidaysHours.ToString();
+ shift1Minuts = SumNotHolidaysMinuts.ToString();
+
+
+
+ shiftOver22Hours = Over22hours.ToString();
+ shiftOver22Minuts = Over22Minuts.ToString();
+ }
+
+ var ComplexNotHolidays = string.Empty;
+ if (command.ShiftWork == "5" || command.ShiftWork == "6" || command.ShiftWork == "7" ||
+ command.ShiftWork == "8")
+ {
+ shift1Hourse = workingDaysH.ToString();
+ shift1Minuts = workingDaysM.ToString();
+
+
+
+
+ shiftOver22Hours = Over22hours.ToString();
+ shiftOver22Minuts = Over22Minuts.ToString();
+ ComplexNotHolidays = Notholiday;
+ Notholiday = "0";
+ }
+
+ //کسر جمعه های مرخصی
+
+ #region LeavesFriday
+
+ //foreach (var item in leavList)
+ //{
+ // for (var daa = item.StartLeaveGr; daa <= item.EndLeaveGr; daa = daa.AddDays(1))
+ // {
+
+ // if (daa.DayOfWeek == DayOfWeek.Friday)
+ // {
+ // fridayLeav += 1;
+ // }
+
+ // }
+ //}
+
+ //if (fridayLeav > 0)
+ //{
+ // if (fridayLeav <= holidaysCount)
+ // {
+ // Holidays = (holidaysCount - fridayLeav).ToString();
+ // }
+ // else
+ // {
+ // Holidays = "0";
+
+ // }
+
+ //}
+
+ #endregion
+
+ #endregion
+
+ #region RtatingStatus
+
+ string shiftpayValue = "0";
+ var moriningCount = rotatingResultList.Count(x => x.IsMorningShift);
+ var eveningCount = rotatingResultList.Count(x => x.IsEveningShift);
+ var nightCount = rotatingResultList.Count(x => x.IsNightShift);
+
+ var RotatingfaName = new List();
+ var totalDays = Convert.ToInt32(AllDaysCount);
+ int validCount = 0;
+ if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد
+ {
+ validCount = 2;
+ }
+ else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت
+ {
+ validCount = 6;
+ }
+ else
+ {
+ // تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است
+ validCount = (int)((totalDays * 6) / 28);
+ }
+
+ Console.WriteLine(validCount);
+ if (moriningCount >= validCount)
+ RotatingfaName.Add("صبح");
+ if (eveningCount >= validCount)
+ RotatingfaName.Add("عصر");
+ if (nightCount >= validCount)
+ RotatingfaName.Add("شب");
+ var rotatingFaResult = "";
+ if (RotatingfaName.Count > 1)
+ {
+ shiftOver22Hours = "0";
+ shiftOver22Minuts = "0";
+ for (var rotateNumber = 0; rotateNumber < RotatingfaName.Count; rotateNumber++)
+ {
+ if (rotateNumber == 0)
+ rotatingFaResult = $"{RotatingfaName[rotateNumber]}";
+ if (rotateNumber == 1)
+ rotatingFaResult += $" و {RotatingfaName[rotateNumber]}";
+ if (rotateNumber == 2)
+ rotatingFaResult += $" و {RotatingfaName[rotateNumber]}";
+ }
+ }
+ else if (RotatingfaName.Count <= 1)
+ {
+ rotatingFaResult = "نوبت کاری ندارد";
+ }
+
+ #endregion
+
+ #region ShiftPayPercent
+
+ if (rotatingFaResult != "نوبت کاری ندارد" || rotatingFaResult != "")
+ {
+ var TotalDays = (command.ContractEndGr - command.ContractStartGr).TotalDays + 1;
+ var DailyFeeNumberType = dayliFee.MoneyToDouble();
+ if (rotatingFaResult == "صبح و عصر")
+ {
+ var shiftPyaPercent = DailyFeeNumberType * 10 / 100;
+ ShiftPayResult = shiftPyaPercent * TotalDays;
+ shiftpayValue = "10";
+
+ }
+ else if (rotatingFaResult == "صبح و عصر و شب")
+ {
+ var shiftPyaPercent = DailyFeeNumberType * 15 / 100;
+ ShiftPayResult = shiftPyaPercent * TotalDays;
+ shiftpayValue = "15";
+ }
+ else if (rotatingFaResult == "صبح و شب" || rotatingFaResult == "عصر و شب")
+ {
+ var shiftPyaPercent = DailyFeeNumberType * 22.5 / 100;
+ ShiftPayResult = shiftPyaPercent * TotalDays;
+ shiftpayValue = "22.5";
+ }
+ }
+
+ #endregion
+
+ #region sendResult
+
+ rotatingResultList = rotatingResultList.Take(28).ToList();
+ var ress = new ComputingViewModel
+ {
+ NumberOfWorkingDays = Notholiday == "0" ? ComplexNotHolidays : Notholiday,
+ NumberOfFriday = fridays.ToString(),
+ TotalHoursesH = shift1Hourse,
+ TotalHoursesM = shift1Minuts,
+ E = shift1HolidayHours,
+ F = shift1HolidayMinuts,
+ Interference = InterferenceMessage,
+ OverTimeWorkH = overMandatoryHours,
+ OverTimeWorkM = overMandatoryMinuts,
+ OverNightWorkH = shiftOver22Hours,
+ OverNightWorkM = shiftOver22Minuts,
+ ComplexNumberOfWorkingDays = ComplexNotHolidays,
+ SalaryCompute = dayliFee,
+ SumTime44 = SumWorkeTime,
+ ConsumableItems = ConsumableItems,
+ HousingAllowance = HousingAllowance,
+ FamilyAllowance = familyAllowance,
+ OfficialHoliday = OfficialHoliday,
+ weeklyTime = weeklyTime,
+ RotatingResultList = rotatingResultList,
+ RotatingStatus = rotatingFaResult,
+ ShiftPay = ShiftPayResult,
+ Basic = basic,
+ FridayStartToEnd = FridayStartToEnd,
+ TotalHolidayAndNotH = totalHolidaysAndNotH.ToString(),
+ TotalHolidayAndNotM = totalHolidaysAndNotM.ToString(),
+ DayliFeeComplete = dayliFeeComplete,
+ MarriedAllowance = MarriedAllowanceStr,
+ RotatingShiftValue = shiftpayValue
+ };
+
+
+ return ress;
+
+ #endregion
+ }
+
+ #endregion
+
+ #region MandatoryDependingMetods
+
+ public RotatingShiftViewModel RotatingShiftCheck(DateTime? singleShift1, DateTime? singleShift2,
+ DateTime? towShift1, DateTime? towShift2)
+ {
+ #region Entityes
+
+ var nullDateTme = new DateTime(0001, 01, 01);
+ var midNight24 = Convert.ToDateTime("00:00");
+ var morningWorkingTime1 = new TimeSpan();
+ var eveningWorkingTime1 = new TimeSpan();
+ var nightWorkingTime1 = new TimeSpan();
+ var morningWorkingTime2 = new TimeSpan();
+ var eveningWorkingTime2 = new TimeSpan();
+ var nightWorkingTime2 = new TimeSpan();
+ var morningStart = Convert.ToDateTime("06:00");
+ var morningEnd = Convert.ToDateTime("14:00");
+ var eveningStart = Convert.ToDateTime("14:00");
+ var eveningEnd = Convert.ToDateTime("22:00");
+ var nightStart = Convert.ToDateTime("22:00");
+ var nightEnd = Convert.ToDateTime("6:00");
+ var nightEndNextday = nightEnd.AddDays(1);
+ var morningEndNextday = morningEnd.AddDays(1);
+
+ #endregion
+
+ #region shift1
+
+ if (singleShift1 != nullDateTme && singleShift2 != nullDateTme)
+ {
+ if (singleShift2 < singleShift1) singleShift2 = singleShift2?.AddDays(1);
+
+ if (singleShift1 == singleShift2) // example 22<---22
+ {
+ nightWorkingTime1 = new TimeSpan(8, 0, 0);
+ morningWorkingTime1 = new TimeSpan(8, 0, 0);
+ eveningWorkingTime1 = new TimeSpan(8, 0, 0);
+ }
+ else
+ {
+ #region morning enter 14 <- 6
+
+ if (singleShift1 >= morningStart // 14<---<6
+ && singleShift1 < morningEnd
+ && singleShift2 > morningStart
+ && singleShift2 <= morningEnd)
+ {
+ morningWorkingTime1 = (TimeSpan)(singleShift2 - singleShift1);
+ }
+ else if (singleShift1 >= morningStart // <---14---6
+ && singleShift1 < morningEnd
+ && singleShift2 > morningStart
+ && singleShift2 <= nightEndNextday)
+ {
+ if (singleShift2 <= eveningEnd) // 22<---14---6
+ {
+ morningWorkingTime1 = (TimeSpan)(morningEnd - singleShift1);
+ eveningWorkingTime1 = (TimeSpan)(singleShift2 - eveningStart);
+ }
+ else if (singleShift2 > eveningEnd) // 6<---22---14---6
+ {
+ morningWorkingTime1 = (TimeSpan)(morningEnd - singleShift1);
+ eveningWorkingTime1 = new TimeSpan(8, 0, 0);
+ nightWorkingTime1 = (TimeSpan)(singleShift2 - eveningEnd);
+ }
+ }
+ else if (singleShift1 >= morningStart // 14<---<6
+ && singleShift1 < morningEnd
+ && singleShift2 > morningStart
+ && singleShift2 > nightEndNextday)
+ {
+ eveningWorkingTime1 = new TimeSpan(8, 0, 0);
+ nightWorkingTime1 = new TimeSpan(8, 0, 0);
+ morningWorkingTime1 = (TimeSpan)(morningEnd - singleShift1);
+ morningWorkingTime1 += (TimeSpan)(singleShift2 - nightEndNextday);
+ }
+
+ #endregion
+
+ #region evening enter 22 <- 14
+
+ if (singleShift1 >= eveningStart // 22<---<14
+ && singleShift1 < eveningEnd
+ && singleShift2 > eveningStart
+ && singleShift2 <= eveningEnd)
+ {
+ eveningWorkingTime1 = (TimeSpan)(singleShift2 - singleShift1);
+ }
+ else if (singleShift1 >= eveningStart // <14---6---22---14
+ && singleShift1 < eveningEnd
+ && singleShift2 > eveningStart
+ && singleShift2 <= morningEndNextday)
+ {
+ if (singleShift2 <= nightEndNextday) // 6<---22---14
+ {
+ eveningWorkingTime1 = (TimeSpan)(eveningEnd - singleShift1);
+ nightWorkingTime1 = (TimeSpan)(singleShift2 - eveningEnd);
+ }
+ else if (singleShift2 > nightEndNextday) // 14<---6---22---14
+ {
+ eveningWorkingTime1 = (TimeSpan)(eveningEnd - singleShift1);
+ nightWorkingTime1 = new TimeSpan(8, 0, 0);
+ morningWorkingTime1 = (TimeSpan)(singleShift2 - nightEndNextday);
+ }
+ }
+ else if (singleShift1 >= eveningStart // <22---14---6---22---14
+ && singleShift1 < eveningEnd
+ && singleShift2 > eveningStart
+ && singleShift2 > morningEndNextday)
+ {
+ nightWorkingTime1 = new TimeSpan(8, 0, 0);
+ morningWorkingTime1 = new TimeSpan(8, 0, 0);
+ eveningWorkingTime1 = (TimeSpan)(eveningEnd - singleShift1);
+ eveningWorkingTime1 += (TimeSpan)(singleShift2 - morningEndNextday);
+ }
+
+ #endregion
+
+ #region night enter 6 <- 22
+
+ if ((singleShift1 >= nightStart // 6<---<22
+ && singleShift1 < nightEndNextday
+ && singleShift2 > nightStart
+ && singleShift2 <= nightEndNextday)
+ || (singleShift1 >= midNight24
+ && singleShift1 < nightEnd
+ && singleShift2 > midNight24
+ && singleShift2 <= nightEnd))
+ {
+ nightWorkingTime1 = (TimeSpan)(singleShift2 - singleShift1);
+ }
+ else if (singleShift1 >= nightStart // <---6---22
+ && singleShift1 < nightEndNextday
+ && singleShift2 > nightStart
+ && singleShift2 > nightEndNextday)
+ {
+ if (singleShift2 <= morningEndNextday) // 14<---6---22
+ {
+ nightWorkingTime1 = (TimeSpan)(nightEndNextday - singleShift1);
+ morningWorkingTime1 = (TimeSpan)(singleShift2 - nightEndNextday);
+ }
+ else if (singleShift2 > morningEndNextday) // 22<---14---6---22
+ {
+ nightWorkingTime1 = (TimeSpan)(nightEndNextday - singleShift1);
+ morningWorkingTime1 = new TimeSpan(8, 0, 0);
+ eveningWorkingTime1 = (TimeSpan)(singleShift2 - morningEndNextday);
+ }
+ }
+ else if (singleShift1 >= midNight24 // <---6---00
+ && singleShift1 < nightEnd
+ && singleShift2 > midNight24
+ && singleShift2 > nightEnd)
+
+ {
+ if (singleShift2 <= morningEnd) // 14<---6---00
+ {
+ nightWorkingTime1 = (TimeSpan)(nightEnd - singleShift1);
+ morningWorkingTime1 = (TimeSpan)(singleShift2 - nightEnd);
+ }
+
+ else if (singleShift2 > morningEnd && singleShift1 >= midNight24) // 22<---14---6--00
+ {
+ nightWorkingTime1 = (TimeSpan)(nightEnd - singleShift1);
+ morningWorkingTime1 = new TimeSpan(8, 0, 0);
+ eveningWorkingTime1 = (TimeSpan)(singleShift2 - morningEnd);
+ }
+ }
+
+ #endregion
+ }
+ }
+
+ #endregion
+
+ #region shift2
+
+ if (towShift1 != nullDateTme && towShift2 != nullDateTme)
+ {
+ if (towShift2 < towShift1) towShift2 = towShift2?.AddDays(1);
+
+ if (towShift1 == towShift2) // example 22<---22
+ {
+ nightWorkingTime2 = new TimeSpan(8, 0, 0);
+ morningWorkingTime2 = new TimeSpan(8, 0, 0);
+ eveningWorkingTime2 = new TimeSpan(8, 0, 0);
+ }
+ else
+ {
+ #region morning enter 14 <- 6
+
+ if (towShift1 >= morningStart // 14<---<6
+ && towShift1 < morningEnd
+ && towShift2 > morningStart
+ && towShift2 <= morningEnd)
+ {
+ morningWorkingTime2 = (TimeSpan)(towShift2 - towShift1);
+ }
+ else if (towShift1 >= morningStart // <---14---6
+ && towShift1 < morningEnd
+ && towShift2 > morningStart
+ && towShift2 <= nightEndNextday)
+ {
+ if (towShift2 <= eveningEnd) // 22<---14---6
+ {
+ morningWorkingTime2 = (TimeSpan)(morningEnd - towShift1);
+ eveningWorkingTime2 = (TimeSpan)(towShift2 - eveningStart);
+ }
+ else if (towShift2 > eveningEnd) // 6<---22---14---6
+ {
+ morningWorkingTime2 = (TimeSpan)(morningEnd - towShift1);
+ eveningWorkingTime2 = new TimeSpan(8, 0, 0);
+ nightWorkingTime2 = (TimeSpan)(towShift2 - eveningEnd);
+ }
+ }
+ else if (towShift1 >= morningStart // 14<---<6
+ && towShift1 < morningEnd
+ && towShift2 > morningStart
+ && towShift2 > nightEndNextday)
+ {
+ eveningWorkingTime2 = new TimeSpan(8, 0, 0);
+ nightWorkingTime2 = new TimeSpan(8, 0, 0);
+ morningWorkingTime2 = (TimeSpan)(morningEnd - towShift1);
+ morningWorkingTime2 += (TimeSpan)(towShift2 - nightEndNextday);
+ }
+
+ #endregion
+
+ #region evening enter 22 <- 14
+
+ if (towShift1 >= eveningStart // 22<---<14
+ && towShift1 < eveningEnd
+ && towShift2 > eveningStart
+ && towShift2 <= eveningEnd)
+ {
+ eveningWorkingTime2 = (TimeSpan)(towShift2 - towShift1);
+ }
+ else if (towShift1 >= eveningStart // <14---6---22---14
+ && towShift1 < eveningEnd
+ && towShift2 > eveningStart
+ && towShift2 <= morningEndNextday)
+ {
+ if (towShift2 <= nightEndNextday) // 6<---22---14
+ {
+ eveningWorkingTime2 = (TimeSpan)(eveningEnd - towShift1);
+ nightWorkingTime2 = (TimeSpan)(towShift2 - eveningEnd);
+ }
+ else if (towShift2 > nightEndNextday) // 14<---6---22---14
+ {
+ eveningWorkingTime2 = (TimeSpan)(eveningEnd - towShift1);
+ nightWorkingTime2 = new TimeSpan(8, 0, 0);
+ morningWorkingTime2 = (TimeSpan)(towShift2 - nightEndNextday);
+ }
+ }
+ else if (towShift1 >= eveningStart // <22---14---6---22---14
+ && towShift1 < eveningEnd
+ && towShift2 > eveningStart
+ && towShift2 > morningEndNextday)
+ {
+ nightWorkingTime2 = new TimeSpan(8, 0, 0);
+ morningWorkingTime2 = new TimeSpan(8, 0, 0);
+ eveningWorkingTime2 = (TimeSpan)(eveningEnd - towShift1);
+ eveningWorkingTime2 += (TimeSpan)(towShift2 - morningEndNextday);
+ }
+
+ #endregion
+
+ #region night enter 6 <- 22
+
+ if ((towShift1 >= nightStart // 6<---<22
+ && towShift1 < nightEndNextday
+ && towShift2 > nightStart
+ && towShift2 <= nightEndNextday)
+ || (towShift1 >= midNight24
+ && towShift1 < nightEnd
+ && towShift2 > midNight24
+ && towShift2 <= nightEnd))
+ {
+ nightWorkingTime2 = (TimeSpan)(towShift2 - towShift1);
+ }
+ else if (towShift1 >= nightStart // <---6---22
+ && towShift1 < nightEndNextday
+ && towShift2 > nightStart
+ && towShift2 > nightEndNextday)
+ {
+ if (towShift2 <= morningEndNextday) // 14<---6---22
+ {
+ nightWorkingTime2 = (TimeSpan)(nightEndNextday - towShift1);
+ morningWorkingTime2 = (TimeSpan)(towShift2 - nightEndNextday);
+ }
+ else if (towShift2 > morningEndNextday) // 22<---14---6---22
+ {
+ nightWorkingTime2 = (TimeSpan)(nightEndNextday - towShift1);
+ morningWorkingTime2 = new TimeSpan(8, 0, 0);
+ eveningWorkingTime2 = (TimeSpan)(towShift2 - morningEndNextday);
+ }
+ }
+ else if (towShift1 >= midNight24 // <---6---00
+ && towShift1 < nightEnd
+ && towShift2 > midNight24
+ && towShift2 > nightEnd)
+
+ {
+ if (towShift2 <= morningEnd) // 14<---6---00
+ {
+ nightWorkingTime2 = (TimeSpan)(nightEnd - towShift1);
+ morningWorkingTime2 = (TimeSpan)(towShift2 - nightEnd);
+ }
+
+ else if (towShift2 > morningEnd && towShift1 >= midNight24) // 22<---14---6--00
+ {
+ nightWorkingTime2 = (TimeSpan)(nightEnd - towShift1);
+ morningWorkingTime2 = new TimeSpan(8, 0, 0);
+ eveningWorkingTime2 = (TimeSpan)(towShift2 - morningEnd);
+ }
+ }
+
+ #endregion
+ }
+ }
+
+ #endregion
+
+ #region FinalResult
+
+ var result = new RotatingShiftViewModel();
+ result.MorningWorkSpan = morningWorkingTime1.Add(morningWorkingTime2);
+ result.EveningWorkSpan = eveningWorkingTime1.Add(eveningWorkingTime2);
+ result.NightWorkSpan = nightWorkingTime1.Add(nightWorkingTime2);
+ var nullWorkspan = new TimeSpan(0, 0, 0);
+ var totalTime = result.TotalWorkingTime.Add(result.MorningWorkSpan);
+ totalTime = totalTime.Add(result.EveningWorkSpan);
+ totalTime = totalTime.Add(result.NightWorkSpan);
+
+ result.TotalWorkingTime = totalTime;
+
+ var morningH = (int)result.MorningWorkSpan.TotalHours;
+ var morningM = result.MorningWorkSpan.Minutes % 60;
+ var morningMS = "00";
+ if (morningM < 10 && morningM > 0)
+ morningMS = $"0{morningM}";
+ if (morningM > 10)
+ morningMS = $"{morningM}";
+ result.MorningString = $"0{morningH}:{morningMS}";
+
+ var eveningH = (int)result.EveningWorkSpan.TotalHours;
+ var eveningM = result.EveningWorkSpan.Minutes % 60;
+ var eveningMS = "00";
+ if (eveningM < 10 && eveningM > 0)
+ eveningMS = $"0{eveningM}";
+ if (eveningM > 10)
+ eveningMS = $"{eveningM}";
+ result.EveningString = $"0{eveningH}:{eveningMS}";
+
+ var nightH = (int)result.NightWorkSpan.TotalHours;
+ var nightM = result.NightWorkSpan.Minutes % 60;
+ var nightMS = "00";
+ if (nightM < 10 && nightM > 0)
+ nightMS = $"0{nightM}";
+ if (nightM > 10)
+ nightMS = $"{nightM}";
+ result.NightString = $"0{nightH}:{nightMS}";
+
+ if (result.MorningWorkSpan > result.EveningWorkSpan
+ || result.MorningWorkSpan == result.EveningWorkSpan) // if morning bigerThan evening or equal
+ {
+ if (result.MorningWorkSpan != nullWorkspan)
+ {
+ result.IsMorningShift = true;
+ result.IsNightShift = false;
+ result.IsEveningShift = false;
+ result.RotatingShiftStatus = "صبح";
+ }
+
+ if (result.MorningWorkSpan < result.NightWorkSpan
+ || result.MorningWorkSpan == result.NightWorkSpan) // if night bigerThan morning or equal
+ if (result.NightWorkSpan != nullWorkspan)
+ {
+ result.IsMorningShift = false;
+ result.IsNightShift = true;
+ result.IsEveningShift = false;
+ result.RotatingShiftStatus = "شب";
+ }
+ }
+ else if (result.MorningWorkSpan < result.EveningWorkSpan) // if evening bigerThan morning
+ {
+ if (result.EveningWorkSpan != nullWorkspan)
+ {
+ result.IsEveningShift = true;
+ result.IsMorningShift = false;
+ result.IsNightShift = false;
+ result.RotatingShiftStatus = "عصر";
+ }
+
+ if (result.EveningWorkSpan < result.NightWorkSpan
+ || result.EveningWorkSpan == result.NightWorkSpan) // if night bigerThan evening or equal
+ if (result.NightWorkSpan != nullWorkspan)
+ {
+ result.IsMorningShift = false;
+ result.IsEveningShift = false;
+ result.IsNightShift = true;
+ result.RotatingShiftStatus = "شب";
+ }
+ }
+
+ #endregion
+
+
+ return result;
+ }
+
+ public TimeSpan Over22Check(DateTime date1, DateTime date2)
+ {
+ var Over22 = new TimeSpan();
+ var singleShiftOver24 = Convert.ToDateTime("00:00");
+ var nightWork22 = Convert.ToDateTime("22:00");
+ var nightWork6 = Convert.ToDateTime("06:00");
+ var starTimeSingel1 = date1;
+ var endTimeSingel2 = date2;
+ var check = false;
+ if ((endTimeSingel2 > nightWork22 || endTimeSingel2 == singleShiftOver24) && starTimeSingel1 < nightWork22 &&
+ starTimeSingel1 > nightWork6)
+ {
+ var nightWork6NextDay = new DateTime();
+ if (endTimeSingel2.Date > starTimeSingel1.Date)
+ // 15:00 - 00:00
+ nightWork6NextDay = nightWork6.AddDays(1);
+ check = true;
+ if (endTimeSingel2 <= nightWork6NextDay)
+ {
+ check = true;
+ Over22 = endTimeSingel2 - nightWork22;
+ }
+ else
+ {
+ check = true;
+ Over22 = nightWork6NextDay - nightWork22;
+ }
+ }
+
+ if (date2 > singleShiftOver24 && endTimeSingel2 <= nightWork6 && starTimeSingel1 < nightWork22 &&
+ starTimeSingel1 > nightWork6)
+ {
+ check = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ Over22 = endTimeSingel2 - nightWork22;
+ }
+
+ if (endTimeSingel2 > singleShiftOver24 && endTimeSingel2 <= nightWork6 && starTimeSingel1 >= nightWork22)
+ {
+ check = true;
+ endTimeSingel2 = endTimeSingel2.AddDays(1);
+ Over22 = endTimeSingel2 - starTimeSingel1;
+ }
+
+ if (endTimeSingel2 > singleShiftOver24 && endTimeSingel2 <= nightWork6 &&
+ starTimeSingel1 >= singleShiftOver24 && starTimeSingel1 <= nightWork6)
+ {
+ check = true;
+ Over22 = endTimeSingel2 - starTimeSingel1;
+ }
+
+ if (starTimeSingel1 >= nightWork22 && endTimeSingel2 > nightWork22)
+ {
+ check = true;
+
+ var nightWork6NextDay = new DateTime();
+ if (endTimeSingel2.Date > starTimeSingel1.Date)
+ {
+ nightWork6NextDay = nightWork6.AddDays(1);
+ if (endTimeSingel2 <= nightWork6NextDay)
+ {
+ check = true;
+ Over22 = endTimeSingel2 - starTimeSingel1;
+ }
+ else
+ {
+ check = true;
+ Over22 = nightWork6NextDay - starTimeSingel1;
+ }
+ }
+ }
+
+ if (endTimeSingel2.Date == starTimeSingel1.Date)
+ {
+ if (endTimeSingel2 <= nightWork6 && starTimeSingel1 >= singleShiftOver24)
+ {
+ check = true;
+ Over22 = endTimeSingel2 - starTimeSingel1;
+ }
+ else if (endTimeSingel2 >= nightWork6 && starTimeSingel1 >= singleShiftOver24 &&
+ endTimeSingel2 <= nightWork22)
+
+ {
+ if (starTimeSingel1 >= nightWork6 && endTimeSingel2 <= nightWork22)
+ Over22 = TimeSpan.Zero;
+ else
+ Over22 = nightWork6 - starTimeSingel1;
+ }
+ else if (starTimeSingel1 >= singleShiftOver24 && endTimeSingel2 > nightWork22)
+ {
+ if (starTimeSingel1 >= nightWork22)
+ {
+ Over22 = endTimeSingel2 - starTimeSingel1;
+ }
+ else if (starTimeSingel1 < nightWork22 && endTimeSingel2 > nightWork22)
+ {
+ if (starTimeSingel1 < nightWork6)
+ {
+ var step1 = nightWork6 - starTimeSingel1;
+ var step2 = endTimeSingel2 - nightWork22;
+ var step3 = step1 + step2;
+ Over22 = step3;
+ }
+ else
+ {
+ Over22 = endTimeSingel2 - nightWork22;
+ }
+ }
+ }
+ else if (starTimeSingel1 > nightWork22 && endTimeSingel2 > nightWork22)
+ {
+ Over22 = endTimeSingel2 - starTimeSingel1;
+ }
+ }
+
+ return Over22;
+ }
+
+ public TimeSpan Over22Complex(DateTime date1, DateTime date2)
+ {
+ var Over22Result = new TimeSpan();
+ var Over24 = new DateTime(date2.Year, date2.Month, date2.Day, 0, 0, 0);
+ var nightWork22 = new DateTime(date1.Year, date1.Month, date1.Day, 22, 0, 0);
+ var nightWork22b = new DateTime(date2.Year, date2.Month, date2.Day, 22, 0, 0);
+ var nightWork6 = new DateTime(date2.Year, date2.Month, date2.Day, 6, 0, 0);
+ var nightWork6a = new DateTime(date1.Year, date1.Month, date1.Day, 6, 0, 0);
+ var starTime = date1;
+ var endTime = date2;
+ if (endTime > nightWork22 && starTime < nightWork22)
+ {
+ if (starTime.Date == endTime.Date) nightWork6 = nightWork6.AddDays(1);
+
+ if (endTime <= nightWork6)
+ Over22Result = endTime - nightWork22;
+ else if (endTime > nightWork6) Over22Result = nightWork6 - nightWork22;
+ }
+
+ if (endTime > nightWork22 && starTime >= nightWork22)
+ {
+ if (endTime <= nightWork6)
+ Over22Result = endTime - starTime;
+ else if (endTime > nightWork6) Over22Result = nightWork6 - starTime;
+ }
+
+ if (starTime.Hour >= 0 && starTime.Minute >= 0 && starTime < nightWork6 && starTime.Date == nightWork6.Date)
+ {
+ if (endTime > nightWork6)
+ Over22Result = nightWork6 - starTime;
+ else if (endTime <= nightWork6) Over22Result = endTime - starTime;
+ //nightWork22 = nightWork22.Subtract(new TimeSpan(1, 0, 0, 0));
+ }
+
+ return Over22Result;
+ }
+
+ public TimeSpan Over22Complex2424(DateTime date1, DateTime date2)
+ {
+ var Over22Result = new TimeSpan();
+ var Over24a = new DateTime(date1.Year, date1.Month, date1.Day, 0, 0, 0);
+ var Over24b = new DateTime(date2.Year, date2.Month, date2.Day, 0, 0, 0);
+ var nightWork22a = new DateTime(date1.Year, date1.Month, date1.Day, 22, 0, 0);
+ var nightWork22b = new DateTime(date2.Year, date2.Month, date2.Day, 22, 0, 0);
+
+ var nightWork6a = new DateTime(date1.Year, date1.Month, date1.Day, 6, 0, 0);
+ var nightWork6b = new DateTime(date2.Year, date2.Month, date2.Day, 6, 0, 0);
+ var starTime = date1;
+ var endTime = date2;
+
+ if (starTime >= Over24a && starTime <= nightWork6a)
+ {
+ if (endTime > nightWork22a && endTime <= nightWork6b)
+ {
+ var night1 = nightWork6a - starTime;
+ var night2 = endTime - nightWork22a;
+ Over22Result = night1.Add(night2);
+ }
+
+ if (endTime > nightWork6a && endTime < nightWork22a) Over22Result = nightWork6a - starTime;
+ }
+
+ if (starTime >= nightWork6a && starTime < nightWork22a)
+ {
+ if (endTime > nightWork22a && endTime <= nightWork6b) Over22Result = endTime - nightWork22a;
+
+ if (endTime > nightWork6b) Over22Result = nightWork6b - nightWork22a;
+ }
+
+ if (starTime >= nightWork22a && starTime < Over24b)
+ {
+ if (endTime <= nightWork22b) Over22Result = nightWork6b - starTime;
+
+
+ if (endTime > nightWork22b)
+ {
+ var night1 = nightWork6b - starTime;
+ var night2 = endTime - nightWork22b;
+ Over22Result = night1.Add(night2);
+ }
+ }
+
+
+ return Over22Result;
+ }
+
+ #endregion
+
+
}
public class Person
diff --git a/ServiceHost/Areas/Client/Pages/Company/Checkouts/_Partials/ModalDetailsRotatingShiftReport.cshtml b/ServiceHost/Areas/Client/Pages/Company/Checkouts/_Partials/ModalDetailsRotatingShiftReport.cshtml
new file mode 100644
index 00000000..c5992cf4
--- /dev/null
+++ b/ServiceHost/Areas/Client/Pages/Company/Checkouts/_Partials/ModalDetailsRotatingShiftReport.cshtml
@@ -0,0 +1,193 @@
+@model CompanyManagment.App.Contracts.Contract.ComputingViewModel
+
+@{
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
وضعیت نوبت کاری: @Model.RotatingStatus
+
+
+
+ نوع ساعت کاری:
+ @if (Model.HasRollCall)
+ {
+ حضور غیاب
+ }
+ else
+ {
+ عدم حضور غیاب
+ }
+
+
+
+
+
+
+
+
+
تاریخ
+
کارکرد صبح
+
کارکرد عصر
+
کارکرد شب
+
نوبت صبح
+
نوبت عصر
+
نوبت شب
+
+
+
+ @foreach (var item in @Model.RotatingResultList)
+ {
+
+
+
تاریخ
+
@item.RotatingDate
+
+
+
کارکرد صبح
+
@item.MorningString
+
+
+
کارکرد عصر
+
@item.EveningString
+
+
+
کارکرد شب
+
@item.NightString
+
+
+
نوبت صبح
+
+ @if (item.IsMorningShift == true)
+ {
+
+ }
+ else
+ {
+
+ }
+
+
+
+
نوبت عصر
+
+ @if (item.IsEveningShift == true)
+ {
+
+ }
+ else
+ {
+
+ }
+
+
+
+
نوبت شب
+
+ @if (item.IsNightShift == true)
+ {
+
+ }
+ else
+ {
+
+ }
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ServiceHost/Areas/Client/Pages/Company/Checkouts/_Partials/PrintDetailsRotatingShiftReport.cshtml b/ServiceHost/Areas/Client/Pages/Company/Checkouts/_Partials/PrintDetailsRotatingShiftReport.cshtml
new file mode 100644
index 00000000..c02a678c
--- /dev/null
+++ b/ServiceHost/Areas/Client/Pages/Company/Checkouts/_Partials/PrintDetailsRotatingShiftReport.cshtml
@@ -0,0 +1,866 @@
+@using _0_Framework.Application
+@model CompanyManagment.App.Contracts.Contract.ComputingViewModel
+
+@{
+
+}
+
+
+
+
+
+@* *@
+
\ No newline at end of file
diff --git a/ServiceHost/wwwroot/AssetsClient/pages/Checkouts/js/Index.js b/ServiceHost/wwwroot/AssetsClient/pages/Checkouts/js/Index.js
index 710a1c70..4e7b370c 100644
--- a/ServiceHost/wwwroot/AssetsClient/pages/Checkouts/js/Index.js
+++ b/ServiceHost/wwwroot/AssetsClient/pages/Checkouts/js/Index.js
@@ -1247,7 +1247,7 @@ $("#overlaySearchAdvance").click(function () {
-