7845 lines
410 KiB
C#
7845 lines
410 KiB
C#
using System.Diagnostics;
|
|
using _0_Framework.Application;
|
|
using Company.Domain.ContractAgg;
|
|
using Company.Domain.HolidayItemAgg;
|
|
using Company.Domain.YearlySalaryAgg;
|
|
using CompanyManagment.App.Contracts.Checkout;
|
|
using CompanyManagment.App.Contracts.Contract;
|
|
using CompanyManagment.App.Contracts.Employee;
|
|
using CompanyManagment.App.Contracts.EmployeeComputeOptions;
|
|
using CompanyManagment.App.Contracts.Employer;
|
|
using CompanyManagment.App.Contracts.Job;
|
|
using CompanyManagment.App.Contracts.Leave;
|
|
using CompanyManagment.App.Contracts.LeftWork;
|
|
using CompanyManagment.App.Contracts.MandantoryHours;
|
|
using CompanyManagment.App.Contracts.PersonalContractingParty;
|
|
using CompanyManagment.App.Contracts.RollCall;
|
|
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
|
|
using CompanyManagment.App.Contracts.WorkingHours;
|
|
using CompanyManagment.App.Contracts.WorkingHoursItems;
|
|
using CompanyManagment.App.Contracts.WorkingHoursTemp;
|
|
using CompanyManagment.App.Contracts.Workshop;
|
|
using CompanyManagment.App.Contracts.YearlySalary;
|
|
using CompanyManagment.Application;
|
|
using Humanizer;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
|
using Microsoft.AspNetCore.SignalR;
|
|
using PersianTools.Core;
|
|
using ServiceHost.Hubs;
|
|
using System.Diagnostics.Contracts;
|
|
using WorkFlow.Application.Contracts.WorkFlow;
|
|
using System.Globalization;
|
|
using Company.Domain.LeftWorkInsuranceAgg;
|
|
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
|
|
using Company.Domain.InsuranceListAgg;
|
|
using CompanyManagment.App.Contracts.InsuranceList;
|
|
using CompanyManagment.EFCore.Repository;
|
|
using System.Linq;
|
|
|
|
namespace ServiceHost.Areas.Admin.Pages.Company.Checkouts;
|
|
|
|
[Authorize]
|
|
public class IndexModel : PageModel
|
|
{
|
|
private readonly IAuthHelper _authHelper;
|
|
private readonly ICheckoutApplication _checkoutApplication;
|
|
private readonly IContractApplication _contractApplication;
|
|
private readonly IContractRepository _contractRepository;
|
|
private readonly IEmployeeApplication _employeeApplication;
|
|
private readonly IEmployeeComputeOptionsApplication _employeeComputeOptionsApplication;
|
|
private readonly IEmployerApplication _employerApplication;
|
|
private readonly IHolidayItemRepository _holidayItemRepository;
|
|
private readonly IHubContext<CheckoutHub> _hubContext;
|
|
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 IWorkshopApplication _workshopApplication;
|
|
private readonly IYearlySalaryApplication _yearlySalaryApplication;
|
|
private readonly IYearlySalaryRepository _yearlySalaryRepository;
|
|
private readonly IWorkFlowApplication _workFlowApplication;
|
|
private readonly ILeftWorkInsuranceRepository _leftWorkInsuranceRepository;
|
|
private readonly IInsuranceListApplication _insuranceListApplication;
|
|
private readonly IInsuranceListRepository _insuranceListRepository;
|
|
|
|
|
|
public List<CheckoutViewModel> chekoutlist;
|
|
public List<ComputingViewModel> ComputingView;
|
|
public List<ContractViweModel> Contracts2;
|
|
public string employeeFullName;
|
|
public List<EmployeeViewModel> EmployeeList;
|
|
public SelectList Employees;
|
|
public SelectList Employers;
|
|
public List<EmployerViewModel> EmployersList;
|
|
private string InterferenceMessage = string.Empty;
|
|
|
|
|
|
public List<JobViewModel> JobList;
|
|
|
|
public List<EmployeeSelectListViewModel> PersonnelList;
|
|
|
|
public CheckoutSearchModel SearchModel;
|
|
public List<WorkshopEmployerViewModel> WorkshopEmployer;
|
|
public List<WorkshopViewModel> WorkshopList;
|
|
|
|
public SelectList Workshops;
|
|
public SelectList WorkshopsCode;
|
|
public string WorkshopSearch = "false";
|
|
public List<string> YearlyList;
|
|
|
|
public IndexModel(IContractApplication contractApplication, IWorkshopApplication workshopApplication,
|
|
IEmployeeApplication employeeApplication,
|
|
IEmployerApplication employerApplication,
|
|
IYearlySalaryApplication yearlySalaryApplication,
|
|
IContractRepository contractRepository,
|
|
IWorkingHoursApplication workingHoursApplication,
|
|
IWorkingHoursItemsApplication workingHoursItemsApplication,
|
|
IAuthHelper authHelper, ICheckoutApplication checkoutApplication,
|
|
IYearlySalaryRepository yearlySalaryRepository,
|
|
IWorkingHoursTempApplication workingHoursTempApplication,
|
|
IHolidayItemRepository holidayItemRepository, ILeftWorkApplication leftWorkApplication,
|
|
IPersonalContractingPartyApp personalContractingPartyApp,
|
|
ILeaveApplication leaveApplication, IHubContext<CheckoutHub> hubContext,
|
|
IEmployeeComputeOptionsApplication employeeComputeOptionsApplication,
|
|
IRollCallMandatoryApplication rollCallMandatoryApplication,
|
|
IRollCallEmployeeStatusApplication rollCallEmployeeStatusApp, IWorkFlowApplication workFlowApplication, ILeftWorkInsuranceRepository leftWorkInsuranceRepository, IInsuranceListApplication insuranceListApplication, IInsuranceListRepository insuranceListRepository)
|
|
{
|
|
_contractApplication = contractApplication;
|
|
_workshopApplication = workshopApplication;
|
|
_employeeApplication = employeeApplication;
|
|
_employerApplication = employerApplication;
|
|
_yearlySalaryApplication = yearlySalaryApplication;
|
|
|
|
_contractRepository = contractRepository;
|
|
_workingHoursApplication = workingHoursApplication;
|
|
_workingHoursItemsApplication = workingHoursItemsApplication;
|
|
_authHelper = authHelper;
|
|
_checkoutApplication = checkoutApplication;
|
|
_yearlySalaryRepository = yearlySalaryRepository;
|
|
_workingHoursTempApplication = workingHoursTempApplication;
|
|
_holidayItemRepository = holidayItemRepository;
|
|
_leftWorkApplication = leftWorkApplication;
|
|
_personalContractingPartyApp = personalContractingPartyApp;
|
|
_leaveApplication = leaveApplication;
|
|
_hubContext = hubContext;
|
|
_employeeComputeOptionsApplication = employeeComputeOptionsApplication;
|
|
_rollCallMandatoryApplication = rollCallMandatoryApplication;
|
|
_rollCallEmployeeStatusApp = rollCallEmployeeStatusApp;
|
|
_workFlowApplication = workFlowApplication;
|
|
_leftWorkInsuranceRepository = leftWorkInsuranceRepository;
|
|
_insuranceListApplication = insuranceListApplication;
|
|
_insuranceListRepository = insuranceListRepository;
|
|
}
|
|
|
|
public string Message { get; set; }
|
|
public bool falseCheck { get; set; }
|
|
|
|
/// <summary>
|
|
/// در زمان لود صفحه اصلی فیش حقوقی
|
|
/// </summary>
|
|
/// <param name="searchModel"></param>
|
|
/// <returns></returns>
|
|
#region OnGet
|
|
public async Task OnGet(CheckoutSearchModel searchModel)
|
|
{
|
|
if (searchModel.WorkshopId != 0 || searchModel.EmployeeId != 0) WorkshopSearch = "true";
|
|
|
|
//EmployerList = _employerApplication.GetEmployers();
|
|
//EmployeeList = _employeeApplication.GetEmployee();
|
|
//WorkshopList = _workshopApplication.GetWorkshop();
|
|
|
|
|
|
//Employees =
|
|
// new SelectList(await _employeeApplication.GetEmployeeToList(), "Id", "EmployeeFullName");
|
|
|
|
//Employers =
|
|
// new SelectList(_employerApplication.GetEmployers(), "Id", "FullName");
|
|
YearlyList =
|
|
_yearlySalaryApplication.GetYears();
|
|
|
|
//chekoutlist = await _checkoutApplication.Search(searchModel);
|
|
}
|
|
|
|
|
|
public async Task<IActionResult> OnGetSearch(CheckoutSearchModel searchModel)
|
|
{
|
|
var accountId = _authHelper.CurrentAccountId();
|
|
|
|
|
|
//var oldSearch = await _checkoutApplication.Search(searchModel);
|
|
|
|
var searchResult = await _checkoutApplication.SearchCheckoutOptimized(searchModel);
|
|
|
|
var result = new CompanyManagment.App.Contracts.Checkout.MainViewModel();
|
|
result.IsSysManager = accountId is 2 or 3;
|
|
result.MainList = searchResult;
|
|
if (searchModel.WorkshopId != 0 || searchModel.EmployeeId != 0)
|
|
result.WorkshopSearch = "true";
|
|
else
|
|
result.WorkshopSearch = "false";
|
|
|
|
if (searchModel.EmployeeId > 0)
|
|
employeeFullName = searchResult.Select(x => x.EmployeeFullName).FirstOrDefault();
|
|
else
|
|
employeeFullName = searchModel.EmployeeName;
|
|
return Partial("./MainSearch", result);
|
|
}
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// گزارش نوبت کاری
|
|
/// </summary>
|
|
/// <param name="searchModel"></param>
|
|
/// <returns></returns>
|
|
#region RotatngShiftReport
|
|
|
|
public async Task<IActionResult> OnGetRotatngShiftReportDesktop(long id)
|
|
{
|
|
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, true, workingHours, false);
|
|
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 = await _rollCallMandatoryApplication.RotatingShiftReport(checkout.WorkshopId, checkout.EmployeeId, checkout.ContractStartGr, checkout.ContractEndGr, workingHours.ShiftWork, false, workingHours, workshop.WorkshopHolidayWorking);
|
|
|
|
|
|
|
|
}
|
|
|
|
result.EmployeeFullName = checkout.EmployeeFullName;
|
|
result.YearAndMonth = $"{checkout.Month} {checkout.Year}";
|
|
result.HasRotatingShift = result.RotatingStatus == "نوبت کاری ندارد" ? false : true;
|
|
Console.WriteLine("ok");
|
|
return Partial("./RotatingShiftReportDesktop", result);
|
|
}
|
|
|
|
public async Task<IActionResult> OnGetRotatngShiftReportMobile(long id)
|
|
{
|
|
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, true, workingHours, false);
|
|
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 = await _rollCallMandatoryApplication.RotatingShiftReport(checkout.WorkshopId, checkout.EmployeeId, checkout.ContractStartGr, checkout.ContractEndGr, workingHours.ShiftWork, false, workingHours, workshop.WorkshopHolidayWorking);
|
|
|
|
|
|
|
|
}
|
|
result.EmployeeFullName = checkout.EmployeeFullName;
|
|
result.YearAndMonth = $"{checkout.Month} {checkout.Year}";
|
|
Console.WriteLine("ok");
|
|
return Partial("./RotatingShiftReportMobile", result);
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// سلکت تو - کارگاه صفحه اصلی
|
|
/// index
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public IActionResult OnGetWorkshopMainList()
|
|
{
|
|
var workshop = _workshopApplication.GetWorkshopAccount();
|
|
|
|
//Workshops =
|
|
// new SelectList(workshop, "Id", "WorkshopFullName");
|
|
|
|
//WorkshopsCode =
|
|
// new SelectList(workshop, "Id", "ArchiveCode");
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = true,
|
|
mylist = workshop
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// سلکت تو - پرسنل صفحه اصلی
|
|
/// index
|
|
/// </summary>
|
|
/// <param name="searchEmployee"></param>
|
|
/// <returns></returns>
|
|
public async Task<IActionResult> OnGetPersonelMainList(string searchEmployee)
|
|
{
|
|
PersonnelList = await _employeeApplication.GetEmployeeToList();
|
|
var person = PersonnelList.Where(x => x.EmployeeFullName.Contains(searchEmployee)).Take(200).ToList();
|
|
person = person.OrderBy(x => x.EmployeeFullName.Length).ToList();
|
|
|
|
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = true,
|
|
mylist = person
|
|
});
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// سلکت تو - کارفرما صفحه اصلی
|
|
/// index
|
|
/// </summary>
|
|
/// <param name="searchEmployee"></param>
|
|
/// <returns></returns>
|
|
public IActionResult OnGetEmployerMainList()
|
|
{
|
|
var employers = _employerApplication.GetEmployers();
|
|
|
|
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = true,
|
|
mylist = employers
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
///مودال ایجاد
|
|
/// -
|
|
/// لود پرسنل بعد از انتخاب کارگاه
|
|
/// Create
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
public IActionResult OnPostLoadWorkshops(long id)
|
|
{
|
|
var result = _workshopApplication.GetWorkshopInfo(id);
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = true,
|
|
InsurancCode = result.InsuranceCode,
|
|
archiveCode = result.ArchiveCode,
|
|
state = result.State,
|
|
city = result.City,
|
|
address = result.Address,
|
|
adres = result.State + "-" + result.City + "-" + result.Address,
|
|
empList = result.EmpList,
|
|
employeeList = result.EmployeeList
|
|
});
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// لود مودال ایجاد تصفیه
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public IActionResult OnGetCreate()
|
|
{
|
|
var command = new CreateCheckout
|
|
{
|
|
UserId = _authHelper.CurrentAccountId(),
|
|
Yearlist = _yearlySalaryApplication.GetYears(),
|
|
|
|
WorkshopNameSelectList =
|
|
new SelectList(_workshopApplication.GetWorkshopAccount(), "Id", "WorkshopFullName"),
|
|
WorkshopCodeSelectList = new SelectList(_workshopApplication.GetWorkshopAccount(), "Id", "ArchiveCode")
|
|
};
|
|
|
|
|
|
return Partial("./Create", command);
|
|
}
|
|
|
|
/// <summary>
|
|
/// متد اصلاحی
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task<IActionResult> OnGetCorrectCheckout()
|
|
{
|
|
var result = await _workingHoursTempApplication.Correct();
|
|
|
|
var ContractsId = result.Select(x => x.Id).ToList();
|
|
var i = 1;
|
|
var c = 1;
|
|
foreach (var item in ContractsId)
|
|
{
|
|
var contract = _contractApplication.GetDetails(item);
|
|
|
|
var workingHours = _workingHoursTempApplication.GetByContractIdConvertToShiftwork4(contract.Id);
|
|
if (workingHours.ShiftWorkTemp == "1")
|
|
{
|
|
var serchModel = new CheckoutSearchModel
|
|
{
|
|
ContractNo = contract.ContractNo,
|
|
ContractId = item
|
|
};
|
|
var getChekouts = _checkoutApplication.SimpleSearch(serchModel);
|
|
if (getChekouts != null)
|
|
{
|
|
foreach (var checkout in getChekouts)
|
|
{
|
|
var separation = checkout;
|
|
var removeCheckout = _checkoutApplication.DeleteCheckout(checkout.Id);
|
|
workingHours.ContractStartGr = separation.ContractStartGr;
|
|
workingHours.ContractEndGr = separation.ContractEndGr;
|
|
workingHours.ContarctStart = separation.ContractStart;
|
|
workingHours.ContractEnd = separation.ContractEnd;
|
|
workingHours.GetWorkDate = contract.GetWorkDate;
|
|
workingHours.GetWorkDateHide = contract.GetWorkDate;
|
|
workingHours.WorkshopId = contract.WorkshopIds;
|
|
workingHours.EmployeeId = contract.EmployeeId;
|
|
Thread.Sleep(100);
|
|
|
|
|
|
var mandatoryCompute = MandatoryHours(workingHours, false, 0);
|
|
if (contract.EmployeeId == 9659)
|
|
mandatoryCompute.SumTime44 = "48 - 24";
|
|
|
|
|
|
var employee = _employeeApplication.GetDetails(contract.EmployeeId);
|
|
var workshop = _workshopApplication.GetDetails(contract.WorkshopIds);
|
|
var officialHoliday = mandatoryCompute.OfficialHoliday;
|
|
var Friday = int.Parse(mandatoryCompute.NumberOfFriday);
|
|
var fridayStartToEnd = mandatoryCompute.FridayStartToEnd;
|
|
var totalHoursH = mandatoryCompute.TotalHoursesH;
|
|
var totalHoursM = mandatoryCompute.TotalHoursesM;
|
|
var dayliWage = mandatoryCompute.SalaryCompute.MoneyToDouble();
|
|
var consumableItemDouble = mandatoryCompute.ConsumableItems.MoneyToDouble();
|
|
var housingAllowanceDouble = mandatoryCompute.HousingAllowance.MoneyToDouble();
|
|
var familyAllowanceDouble = mandatoryCompute.FamilyAllowance.MoneyToDouble();
|
|
var overTimeWorking = _yearlySalaryRepository.GetOverTimeWorking(dayliWage,
|
|
mandatoryCompute.OverTimeWorkH, mandatoryCompute.OverTimeWorkM);
|
|
|
|
|
|
var overNightWorking = _yearlySalaryRepository.GetOverNightWorking(dayliWage,
|
|
mandatoryCompute.OverNightWorkH, mandatoryCompute.OverNightWorkM,
|
|
mandatoryCompute.SumTime44, officialHoliday, Friday, separation.ContractStartGr,
|
|
separation.ContractEndGr, totalHoursH, totalHoursM);
|
|
var leavePay = _yearlySalaryRepository.GetLeavePay(separation.ContractStartGr,
|
|
separation.ContractEndGr,
|
|
dayliWage, consumableItemDouble, housingAllowanceDouble, familyAllowanceDouble,
|
|
mandatoryCompute.SumTime44, officialHoliday, Friday, totalHoursH, totalHoursM);
|
|
|
|
var command = new CreateCheckout
|
|
{
|
|
EmployeeFullName = employee.EmployeeFullName,
|
|
FathersName = employee.FatherName,
|
|
NationalCode = employee.NationalCode,
|
|
DateOfBirth = employee.DateOfBirth,
|
|
EmployeeId = employee.Id,
|
|
|
|
WorkshopName = workshop.WorkshopFullName,
|
|
WorkshopId = workshop.Id,
|
|
ArchiveCode = workshop.ArchiveCode,
|
|
|
|
ContractNo = contract.ContractNo,
|
|
ContractStartGr = separation.ContractStartGr,
|
|
ContractEndGr = separation.ContractEndGr,
|
|
ContractStart = separation.ContractStart,
|
|
ContractEnd = separation.ContractEnd,
|
|
Month = separation.Month,
|
|
Year = separation.Year,
|
|
ContractId = contract.Id,
|
|
PersonnelCode = contract.PersonnelCode.ToString(),
|
|
|
|
WorkingHoursId = workingHours.WorknigHoursId,
|
|
OvertimePay = overTimeWorking,
|
|
NightworkPay = overNightWorking,
|
|
ConsumableItems = mandatoryCompute.ConsumableItems,
|
|
HousingAllowance = mandatoryCompute.HousingAllowance,
|
|
FamilyAllowance = mandatoryCompute.FamilyAllowance,
|
|
DayliWage = mandatoryCompute.SalaryCompute,
|
|
LeavePay = leavePay,
|
|
|
|
WorkingWeeklyTime = mandatoryCompute.SumTime44,
|
|
officialholiday = officialHoliday,
|
|
friday = Friday,
|
|
totalHoursH = totalHoursH,
|
|
totalHorsM = totalHoursM,
|
|
WeeklyTime = mandatoryCompute.weeklyTime,
|
|
ShiftPay = mandatoryCompute.ShiftPay,
|
|
Basic = mandatoryCompute.Basic,
|
|
FridayStarttoEnd = fridayStartToEnd,
|
|
TotalHolidaysAndNotH = mandatoryCompute.TotalHolidayAndNotH,
|
|
TotalHolidaysAndNotM = mandatoryCompute.TotalHolidayAndNotM,
|
|
DailFeeComplete = mandatoryCompute.DayliFeeComplete,
|
|
Signature = checkout.Signature,
|
|
|
|
|
|
|
|
};
|
|
_checkoutApplication.Create(command);
|
|
//if (checkout.Signature == "1")
|
|
//{
|
|
// var search = new CheckoutSearchModel()
|
|
// {
|
|
// EmployeeId = checkout.EmployeeId,
|
|
// WorkshopId = checkout.WorkshopId,
|
|
// ContractStart = checkout.ContractStart,
|
|
// ContractEnd = checkout.ContractEnd,
|
|
// };
|
|
// var checkoutId = _checkoutApplication.SimpleSearch(search).FirstOrDefault();
|
|
// _checkoutApplication.Sign(checkoutId.Id);
|
|
//}
|
|
if (checkout.Signature == "1")
|
|
Console.WriteLine(c + "-" + i + "- finish checkout : " + contract.ContractNo + "Signature" +
|
|
" . wID " + checkout.WorkshopId + " eID " + checkout.EmployeeId);
|
|
else
|
|
Console.WriteLine(c + "-" + i + "- finish checkout : " + contract.ContractNo);
|
|
|
|
Thread.Sleep(30);
|
|
i++;
|
|
}
|
|
|
|
_contractApplication.EditAgreement(item);
|
|
c++;
|
|
}
|
|
}
|
|
}
|
|
|
|
Console.WriteLine("complete");
|
|
return RedirectToPage("./Index");
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// لیست قرداد هایی که قابلیت صدور تصفیه حساب دارند
|
|
/// </summary>
|
|
/// <param name="WorkshopId"></param>
|
|
/// <param name="Year"></param>
|
|
/// <param name="Month"></param>
|
|
/// <param name="ContractStart"></param>
|
|
/// <param name="ContractEnd"></param>
|
|
/// <param name="EmployeeId"></param>
|
|
/// <returns></returns>
|
|
public async Task<IActionResult> OnGetLoadContracts(long WorkshopId, string Year, string Month,
|
|
string ContractStart, string ContractEnd, long EmployeeId)
|
|
{
|
|
|
|
var result = await _checkoutApplication.GetContractResultToCreateCheckout(WorkshopId, EmployeeId, Year, Month, ContractStart,
|
|
ContractEnd);
|
|
|
|
var workshop = _workshopApplication.GetDetails(WorkshopId);
|
|
#region Old
|
|
//var today = DateTime.Now;
|
|
// var GrogorianEnd = new DateTime();
|
|
// var GrogorianStart = new DateTime();
|
|
// //var GrogorianThisMonthStart2 = new DateTime();
|
|
// //var GrogorianPreviusMonthStart2 = new DateTime();
|
|
// //var ConvertContractStartGr = new DateTime();
|
|
// //var ConvertContractEndGr = new DateTime();
|
|
// //var ConvertStartFarsi = string.Empty;
|
|
// //var nextmonthEndfarsi = string.Empty;
|
|
// var faToday = string.Empty;
|
|
// var faToday2 = string.Empty;
|
|
// var syear = 0;
|
|
// var smonth = 0;
|
|
// var eyear = 0;
|
|
// var emonth = 0;
|
|
// var ConvertStart = new DateTime();
|
|
// var ConvertEnd = new DateTime();
|
|
// if (string.IsNullOrWhiteSpace(ContractStart) && string.IsNullOrWhiteSpace(ContractEnd))
|
|
// {
|
|
// if (Month == "0" && Year == "0")
|
|
// faToday = today.ToFarsi();
|
|
// else
|
|
// faToday = $"{Year}/{Month}/01";
|
|
|
|
// syear = Convert.ToInt32(faToday.Substring(0, 4));
|
|
// smonth = Convert.ToInt32(faToday.Substring(5, 2));
|
|
|
|
// var PersianStart = new PersianDateTime(syear, smonth, 01);
|
|
// GrogorianStart = PersianStart.ToGregorianDateTime();
|
|
// var PersianEndFinde = new PersianDateTime(syear, smonth, 01);
|
|
// PersianEndFinde = PersianEndFinde.AddMonths(1);
|
|
// PersianEndFinde = PersianEndFinde.AddDays(-1);
|
|
// GrogorianEnd = PersianEndFinde.ToGregorianDateTime();
|
|
|
|
// ContractStart = GrogorianStart.ToFarsi();
|
|
// ContractEnd = GrogorianEnd.ToFarsi();
|
|
|
|
|
|
// //nextMonthStartFarsi = GrogorianThisMonthStart.ToFarsi();
|
|
// //nextmonthEndfarsi = nextMonthStartFarsi.FindeEndOfMonth();
|
|
// }
|
|
|
|
// var a = new ContractSearchModel
|
|
// {
|
|
// WorkshopIds = WorkshopId,
|
|
|
|
// ContarctStart = ContractStart,
|
|
// ContractEnd = ContractEnd,
|
|
// EmployeeId = EmployeeId
|
|
// };
|
|
|
|
|
|
// var ContractSearch = _contractApplication.SearchForCheckout(a);
|
|
// var ContractListNew = new List<ContractViweModel>();
|
|
// foreach (var item in ContractSearch)
|
|
// {
|
|
// var separation = _contractApplication.contractSeparation(Year, Month,
|
|
// item.ContractStartGr, item.ContractEndGr, item.EmployeeId, item.WorkshopIds);
|
|
// //if (EmployeeId == 41256) //نوشین عینی فرد
|
|
// //{
|
|
// // separation.ContarctStart = item.ContarctStart;
|
|
// // separation.ContractEnd = item.ContractEnd;
|
|
// //}
|
|
|
|
// var search = new CheckoutSearchModel
|
|
// {
|
|
// ContractNo = item.ContractNo,
|
|
// ContractId = item.Id,
|
|
// ContractStart = separation.ContarctStart,
|
|
// ContractEnd = separation.ContractEnd
|
|
// };
|
|
// var checkedCHeckout = await _checkoutApplication.Search(search);
|
|
|
|
// if (checkedCHeckout.Count > 0)
|
|
// {
|
|
// item.RedColor = true;
|
|
// item.Extension = false;
|
|
// //x.ContractStartGr <= start && x.ContractEndGr >= endd || start <= x.ContractStartGr && endd > x.ContractStartGr || endd >= x.ContractEndGr && start < x.ContractEndGr
|
|
// if (item.ContractStartGr < GrogorianStart || item.ContractEndGr > GrogorianEnd)
|
|
// item.LaterThanEnd = true;
|
|
|
|
// item.MoreThanOneMonth = true;
|
|
// }
|
|
// else
|
|
// {
|
|
// if (item.ContractStartGr < GrogorianStart || item.ContractEndGr > GrogorianEnd)
|
|
// {
|
|
// item.LaterThanEnd = true;
|
|
// item.Extension = true;
|
|
// item.RedColor = false;
|
|
// }
|
|
// else
|
|
// {
|
|
// item.RedColor = false;
|
|
// item.Extension = true;
|
|
// }
|
|
// }
|
|
|
|
|
|
// if (!separation.checker)
|
|
// {
|
|
// item.RedColor = true;
|
|
// item.Extension = false;
|
|
|
|
// }
|
|
|
|
// ContractListNew.Add(item);
|
|
// }
|
|
|
|
|
|
#endregion
|
|
|
|
bool hasWorkFlow = false;
|
|
var skipRollCallByWorkshopId = WorkshopId is 368 or 367 or 610;
|
|
if (result.CreateCheckoutList.Count > 0 && workshop.HasRollCallFreeVip == "true" && !skipRollCallByWorkshopId)
|
|
{
|
|
DateTime startSreach;
|
|
DateTime endSearch;
|
|
|
|
if (Month == "0" && Year == "0")
|
|
{
|
|
DateTime now = DateTime.Now;
|
|
string startStr = $"{now.ToFarsi().Substring(0, 8)}01";
|
|
startSreach = startStr.ToGeorgianDateTime();
|
|
endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime();
|
|
}
|
|
else if (Month == "0" && Year != "0")
|
|
{
|
|
DateTime now = DateTime.Now;
|
|
|
|
string startStr = $"{Year}/{now.ToFarsi().Substring(5, 2)}/01";
|
|
startSreach = startStr.ToGeorgianDateTime();
|
|
endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime();
|
|
}
|
|
else if (Month != "0" && Year == "0")
|
|
{
|
|
DateTime now = DateTime.Now;
|
|
|
|
string startStr = $"{now.ToFarsi().Substring(0, 4)}/{Month}/01";
|
|
startSreach = startStr.ToGeorgianDateTime();
|
|
endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime();
|
|
}
|
|
else
|
|
{
|
|
string startStr = $"{Year}/{Month}/01";
|
|
startSreach = startStr.ToGeorgianDateTime();
|
|
endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime();
|
|
}
|
|
|
|
|
|
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
|
|
if (lastMonthEnd == endSearch)
|
|
{
|
|
var countWorkFlowCut = await _workFlowApplication.CountCutByBgServiceLastMonth(WorkshopId);
|
|
var countWorkFlowAbsent = await _workFlowApplication.CountAbsentRollCallLastMonth(WorkshopId);
|
|
var countWorkFlowLunchBreak = await _workFlowApplication.CountEmployeesWithoutLunchBreakLastMonth(WorkshopId);
|
|
var countUndefinedRollCalls = await _workFlowApplication.CountUndefinedLastMonth(WorkshopId);
|
|
|
|
hasWorkFlow = countWorkFlowCut > 0 || countWorkFlowAbsent > 0 || countWorkFlowLunchBreak > 0 ||
|
|
countUndefinedRollCalls > 0;
|
|
}
|
|
|
|
}
|
|
|
|
var command = new CreateCheckoutListViewModel
|
|
{
|
|
HasWorkFlow = hasWorkFlow,
|
|
CreateCheckoutList = result.CreateCheckoutList
|
|
};
|
|
return Partial("./CreateLoadList", command);
|
|
}
|
|
|
|
/// <summary>
|
|
/// ایجاد تصفیه
|
|
/// </summary>
|
|
/// <param name="ContractsId"></param>
|
|
/// <param name="ConvertYear"></param>
|
|
/// <param name="ConvertMonth"></param>
|
|
/// <returns></returns>
|
|
public IActionResult OnPostCreate(List<long> ContractsId, string ConvertYear, string ConvertMonth)
|
|
{
|
|
var currntAcc = _authHelper.CurrentAccountId();
|
|
|
|
if (ConvertYear == "0" && ConvertMonth == "0")
|
|
{
|
|
var today = DateTime.Now;
|
|
var FaToday = today.ToFarsi();
|
|
var year = FaToday.Substring(0, 4);
|
|
var month = FaToday.Substring(5, 2);
|
|
|
|
ConvertYear = year;
|
|
ConvertMonth = month;
|
|
}
|
|
else if (ConvertYear == "0" || ConvertMonth == "0")
|
|
{
|
|
var opration2 = new OperationResult
|
|
{
|
|
IsSuccedded = false,
|
|
Message = "لطفا ماه و سال را انتخاب کنید"
|
|
};
|
|
return new JsonResult(opration2);
|
|
}
|
|
|
|
ContractsId = ContractsId.Where(x => x != 0).ToList();
|
|
var n = 1;
|
|
var maxNumber = Convert.ToDouble(ContractsId.Count());
|
|
if (ContractsId.Count > 0)
|
|
{
|
|
#region Insurance
|
|
var watch = new Stopwatch();
|
|
|
|
watch.Start();
|
|
var contractpData = _contractApplication.GetDetails(ContractsId[0]);
|
|
|
|
var startMonthFa = $"{ConvertYear}/{ConvertMonth.PadLeft(2, '0')}/01";
|
|
DateTime startDateGr = startMonthFa.ToGeorgianDateTime();
|
|
DateTime endDateGr = startMonthFa.FindeEndOfMonth().ToGeorgianDateTime();
|
|
int endOfMonth = Convert.ToInt32((startMonthFa.FindeEndOfMonth()).Substring(8, 2));
|
|
//مقادیر سالانه این تاریخ
|
|
var yearlysaleries = _yearlySalaryApplication.GetInsuranceItems(startDateGr, endDateGr, ConvertYear);
|
|
|
|
var insuranceEmployeeData =
|
|
_leftWorkInsuranceRepository.GetEmployeeInsuranceLeftWorksAndInformation(contractpData.WorkshopIds, startDateGr,
|
|
endDateGr);
|
|
Console.WriteLine("checkout-test-timer" + watch.Elapsed);
|
|
watch.Stop();
|
|
#endregion
|
|
|
|
|
|
|
|
//int i = 0;
|
|
foreach (var item in ContractsId)
|
|
{
|
|
var contract = _contractApplication.GetDetails(item);
|
|
|
|
//var workingHours = _workingHoursApplication.GetByContractId(contract.Id);
|
|
var workingHours = _workingHoursTempApplication.GetByContractIdConvertToShiftwork4(contract.Id);
|
|
var separation = _contractApplication.contractSeparation(ConvertYear, ConvertMonth,
|
|
contract.ContractStartGr, contract.ContractEndGr, contract.EmployeeId, contract.WorkshopIds);
|
|
|
|
if (separation.checker)
|
|
{
|
|
//workshopInfo
|
|
var workshop = _workshopApplication.GetDetails(contract.WorkshopIds);
|
|
|
|
var employeeOptions =
|
|
_employeeComputeOptionsApplication.GetAllByWorkshopId(contract.WorkshopIds);
|
|
var getYearsOption = employeeOptions.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId);
|
|
var yearsOption = getYearsOption == null ? workshop.YearsOptions : getYearsOption.YearsOptions;
|
|
var getBonusesOption = employeeOptions.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId);
|
|
var bonusesOption = getBonusesOption == null
|
|
? workshop.BonusesOptions
|
|
: getBonusesOption.BonusesOptions;
|
|
var getComputeOption = employeeOptions.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId);
|
|
var computeOption = getComputeOption == null
|
|
? workshop.ComputeOptions
|
|
: getComputeOption.ComputeOptions;
|
|
//آیا کل مرخصی به ساعت کاراضافه شود؟
|
|
bool totalLeaveCompute = false;
|
|
//آیا غیبت محاسبه شود؟
|
|
bool abcenseDeduction = false;
|
|
switch (computeOption)
|
|
{
|
|
case "OnEndOfYear":
|
|
var endOfYearCheckout = separation.ContractEnd.Substring(5, 2);
|
|
|
|
|
|
totalLeaveCompute = true;
|
|
abcenseDeduction = separation.HasLeft || endOfYearCheckout == "12";
|
|
break;
|
|
case "OnLeftWork":
|
|
|
|
totalLeaveCompute = true;
|
|
abcenseDeduction = separation.HasLeft;
|
|
break;
|
|
case "OnEndOfContract":
|
|
var startMonth = contract.ContarctStart.Substring(5, 2);
|
|
var endMonth = contract.ContractEnd.Substring(5, 2);
|
|
|
|
totalLeaveCompute = startMonth == endMonth ? false : true;
|
|
abcenseDeduction = (startMonth != endMonth && separation.HasLeft) || (startMonth != endMonth && contract.ContractEndGr == separation.ContractEndGr);
|
|
break;
|
|
}
|
|
|
|
workingHours.ContractStartGr = separation.ContractStartGr;
|
|
workingHours.ContractEndGr = separation.ContractEndGr;
|
|
workingHours.ContarctStart = separation.ContarctStart;
|
|
workingHours.ContractEnd = separation.ContractEnd;
|
|
workingHours.GetWorkDate = contract.GetWorkDate;
|
|
workingHours.GetWorkDateHide = contract.GetWorkDate;
|
|
workingHours.WorkshopId = contract.WorkshopIds;
|
|
workingHours.EmployeeId = contract.EmployeeId;
|
|
|
|
var mandatoryCompute = new ComputingViewModel();
|
|
|
|
#region DailyWageCompute
|
|
|
|
var dailyWageUnAffected = _yearlySalaryRepository.GetCheckoutDailyWage(contract,
|
|
separation.ContractStartGr, separation.ContractEndGr).GetAwaiter().GetResult();
|
|
|
|
|
|
#endregion
|
|
|
|
var hasRollCall = _rollCallEmployeeStatusApp.HasRollCallRecord(contract.EmployeeId,
|
|
contract.WorkshopIds,
|
|
separation.ContractStartGr, separation.ContractEndGr);
|
|
if (workshop.IsStaticCheckout)
|
|
hasRollCall = false;
|
|
if (hasRollCall)
|
|
{
|
|
mandatoryCompute = _rollCallMandatoryApplication.MandatoryCompute(contract.EmployeeId,
|
|
contract.WorkshopIds,
|
|
separation.ContractStartGr, separation.ContractEndGr, workingHours, workshop.WorkshopHolidayWorking, false,workshop.RotatingShiftCompute, dailyWageUnAffected, totalLeaveCompute);
|
|
|
|
}
|
|
else
|
|
{
|
|
mandatoryCompute = _rollCallMandatoryApplication.MandatoryCompute(contract.EmployeeId,
|
|
contract.WorkshopIds,
|
|
separation.ContractStartGr, separation.ContractEndGr, workingHours, workshop.WorkshopHolidayWorking, true,workshop.RotatingShiftCompute, dailyWageUnAffected, totalLeaveCompute);
|
|
|
|
//var hasLeave = _leaveApplication.LeavOnChekout(separation.ContractStartGr,
|
|
// separation.ContractEndGr, contract.EmployeeId, contract.WorkshopIds);
|
|
//if (hasLeave != null)
|
|
//{
|
|
// //var LeaveCompute = MandatoryHours(workingHours, hasLeave.Id);
|
|
//}
|
|
}
|
|
|
|
|
|
var employee = _employeeApplication.GetDetails(contract.EmployeeId);
|
|
if (contract.EmployeeId == 9659)
|
|
mandatoryCompute.SumTime44 = "48 - 24";
|
|
|
|
var officialHoliday = mandatoryCompute.OfficialHoliday;
|
|
var Friday = int.Parse(mandatoryCompute.NumberOfFriday);
|
|
var fridayStartToEnd = mandatoryCompute.FridayStartToEnd;
|
|
|
|
var totalHoursH = mandatoryCompute.TotalHoursesH;
|
|
var totalHoursM = mandatoryCompute.TotalHoursesM;
|
|
var dayliWage = mandatoryCompute.SalaryCompute.MoneyToDouble();
|
|
var consumableItemDouble = mandatoryCompute.ConsumableItems.MoneyToDouble();
|
|
var housingAllowanceDouble = mandatoryCompute.HousingAllowance.MoneyToDouble();
|
|
var familyAllowanceDouble = mandatoryCompute.FamilyAllowance.MoneyToDouble();
|
|
var marriedAllowanceDouble = mandatoryCompute.MarriedAllowance.MoneyToDouble();
|
|
var overTimeWorking = _yearlySalaryRepository.GetOverTimeWorking(dayliWage,
|
|
mandatoryCompute.OverTimeWorkH, mandatoryCompute.OverTimeWorkM);
|
|
|
|
|
|
var overNightWorking = _yearlySalaryRepository.GetOverNightWorking(dayliWage,
|
|
mandatoryCompute.OverNightWorkH, mandatoryCompute.OverNightWorkM, mandatoryCompute.SumTime44,
|
|
officialHoliday, Friday, separation.ContractStartGr, separation.ContractEndGr, totalHoursH,
|
|
totalHoursM);
|
|
//مزد مرخصی
|
|
//var leavePay = _yearlySalaryRepository.GetLeavePay(separation.ContractStartGr, separation.ContractEndGr,
|
|
// dayliWage, consumableItemDouble, housingAllowanceDouble, familyAllowanceDouble, mandatoryCompute.SumTime44, officialHoliday, Friday, totalHoursH, totalHoursM);
|
|
|
|
//manual
|
|
//if ((contract.EmployeeId == 7003 && contract.WorkshopIds == 216) ||
|
|
// (contract.EmployeeId == 7106 && contract.WorkshopIds == 216))
|
|
//{
|
|
// workshop.YearsOptions = "OnEndOfContract";
|
|
// workshop.BonusesOptions = "OnEndOfContract";
|
|
// workshop.ComputeOptions = "OnEndOfContract";
|
|
//}
|
|
|
|
|
|
//سنوات
|
|
var yearsPay = _yearlySalaryRepository.Years(separation.ContractStartGr, separation.LeftWorkDate,
|
|
separation.ContractEndGr,
|
|
dayliWage, yearsOption, separation.HasLeft, separation.StartWorkDate, contract.ContractStartGr,
|
|
contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, workshop.IsOldContract);
|
|
//عیدی
|
|
#region BonusesPay
|
|
var bunosesPay = _yearlySalaryRepository.Bunoses(separation.ContarctStart, separation.LeftWorkDate,
|
|
separation.ContractStartGr, separation.ContractEndGr,
|
|
dayliWage, bonusesOption, separation.HasLeft, separation.StartWorkDate,
|
|
contract.ContractStartGr,
|
|
contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, workshop.IsOldContract);
|
|
//اگر تصفیه حساب پاک شده برای عیدی یا سنوات وجود داشت
|
|
if (bunosesPay.NotCompleted || yearsPay.NotCompleted)
|
|
{
|
|
|
|
List<BunosesAndYearsPayStatus> lostCheckoutsDates = new List<BunosesAndYearsPayStatus>();
|
|
if ((bunosesPay.NotCompleted && yearsPay.NotCompleted) || (bunosesPay.NotCompleted && !yearsPay.NotCompleted))
|
|
lostCheckoutsDates = bunosesPay.BunosesStatusList;
|
|
if (!bunosesPay.NotCompleted && yearsPay.NotCompleted)
|
|
lostCheckoutsDates = yearsPay.BunosesStatusList;
|
|
|
|
foreach (var found in lostCheckoutsDates)
|
|
{
|
|
ComputingViewModel foundMandatoryCompute = new ComputingViewModel();
|
|
var foundContract = _contractRepository.GetContractByStartEnd(found.ContractStart,
|
|
found.ContractEnd, contract.WorkshopIds, contract.EmployeeId);
|
|
|
|
if (foundContract.Id > 0)
|
|
{
|
|
var foundWorkingHours = _workingHoursTempApplication.GetByContractIdConvertToShiftwork4(foundContract.Id);
|
|
foundWorkingHours.ContractStartGr = found.ContractStart;
|
|
foundWorkingHours.ContractEndGr = found.ContractEnd;
|
|
foundWorkingHours.ContarctStart = found.ContractStart.ToFarsi();
|
|
foundWorkingHours.ContractEnd = found.ContractEnd.ToFarsi();
|
|
foundWorkingHours.GetWorkDate = foundContract.GetWorkDate;
|
|
foundWorkingHours.GetWorkDateHide = foundContract.GetWorkDate;
|
|
foundWorkingHours.WorkshopId = contract.WorkshopIds;
|
|
foundWorkingHours.EmployeeId = contract.EmployeeId;
|
|
|
|
bool foundHasRollCall = _rollCallEmployeeStatusApp.HasRollCallRecord(contract.EmployeeId,
|
|
contract.WorkshopIds,
|
|
found.ContractStart, found.ContractEnd);
|
|
if (workshop.IsStaticCheckout)
|
|
foundHasRollCall = false;
|
|
if (foundHasRollCall)
|
|
{
|
|
foundMandatoryCompute = _rollCallMandatoryApplication.MandatoryCompute(contract.EmployeeId,
|
|
contract.WorkshopIds,
|
|
found.ContractStart, found.ContractEnd, foundWorkingHours, workshop.WorkshopHolidayWorking, false, workshop.RotatingShiftCompute, dailyWageUnAffected, totalLeaveCompute);
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
foundMandatoryCompute = MandatoryHours(foundWorkingHours, workshop.WorkshopHolidayWorking, 0);
|
|
|
|
}
|
|
|
|
var MontlyYearsBunos =
|
|
_yearlySalaryRepository.GetMontlyBunosYears(foundMandatoryCompute.weeklyTime, found.ContractStart, found.ContractEnd,
|
|
foundMandatoryCompute.SalaryCompute.MoneyToDouble(), foundMandatoryCompute.SumTime44, foundMandatoryCompute.OfficialHoliday,
|
|
int.Parse(foundMandatoryCompute.NumberOfFriday), foundMandatoryCompute.TotalHolidayAndNotH, foundMandatoryCompute.TotalHolidayAndNotM,
|
|
foundMandatoryCompute.Basic, foundMandatoryCompute.FridayStartToEnd, foundMandatoryCompute.DayliFeeComplete, hasRollCall, workshop.WorkshopHolidayWorking, workingHours.ShiftWork);
|
|
double foundMontlySalary = MontlyYearsBunos.MontlyWage + MontlyYearsBunos.BasicYears;
|
|
int foundTotaldays = Convert.ToInt32(MontlyYearsBunos.SumOfWorkingDay);
|
|
double foundDayliWage = foundMontlySalary / foundTotaldays;
|
|
if (bunosesPay.NotCompleted)
|
|
{
|
|
double foundBonuses = ((foundDayliWage * 60) / 365) * foundTotaldays;
|
|
bunosesPay.Bunoses += foundBonuses;
|
|
bunosesPay.TotalDayCompute += foundTotaldays;
|
|
}
|
|
|
|
if (yearsPay.NotCompleted)
|
|
{
|
|
double foundBonuses = ((foundDayliWage * 30) / 365) * foundTotaldays;
|
|
yearsPay.YearsPay += foundBonuses;
|
|
yearsPay.TotalDayCompute += foundTotaldays;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
//مزد مرخصی جدید
|
|
var leavePayNew = _yearlySalaryRepository.LeavePay(separation.ContarctStart,
|
|
separation.LeftWorkDate, separation.ContractStartGr, separation.ContractEndGr,
|
|
dayliWage, computeOption, separation.HasLeft, separation.StartWorkDate,
|
|
contract.ContractStartGr,
|
|
contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, fridayStartToEnd,
|
|
officialHoliday, totalHoursH, totalHoursM, consumableItemDouble, housingAllowanceDouble,
|
|
familyAllowanceDouble, marriedAllowanceDouble, workshop.IsOldContract);
|
|
|
|
|
|
#region Insurance
|
|
|
|
double insuranceShare = 0;
|
|
var insuranceEmployeeDataItem =
|
|
insuranceEmployeeData.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId);
|
|
if (insuranceEmployeeDataItem != null && insuranceEmployeeDataItem.StartWorkDateGr <= separation.ContractEndGr)
|
|
{
|
|
var workingDays = Tools.GetEmployeeInsuranceWorkingDays(insuranceEmployeeDataItem.StartWorkDateGr, separation.LeftWorkDate, startDateGr, endDateGr, insuranceEmployeeDataItem.EmployeeId);
|
|
var leftWorkFa = workingDays.hasLeftWorkInMonth ? separation.LeftWorkDate.ToFarsi() : "";
|
|
|
|
//به دست آوردن دستمزد روزانه با توجه به اینکه کارگاه مشاغل مقطوع است یا خیر
|
|
|
|
double dailyWage = 0;
|
|
if (workshop.FixedSalary)
|
|
{
|
|
var res = _insuranceListApplication.GetDailyWageFixedSalary(ConvertYear, workshop.Id, insuranceEmployeeDataItem.EmployeeId, startDateGr,
|
|
endDateGr, insuranceEmployeeDataItem.JobId, workshop.Population, workshop.InsuranceJobId);
|
|
dailyWage = res ?? 0;
|
|
|
|
}
|
|
else
|
|
{
|
|
var res = _insuranceListApplication.ComputeDailyWage(yearlysaleries.DayliWage, insuranceEmployeeDataItem.EmployeeId, workshop.Id, ConvertYear);
|
|
dailyWage = res;
|
|
}
|
|
|
|
//بدست آوردن پایه سنوات
|
|
var baseYears = _insuranceListRepository.GetEmployeeInsuranceBaseYear(insuranceEmployeeDataItem.EmployeeId, workshop.Id,
|
|
workingDays.countWorkingDays, startDateGr, endDateGr, workingDays.startWork, workingDays.endWork, workingDays.hasLeftWorkInMonth);
|
|
|
|
//جمع مزد روزانه و پایه سنوات
|
|
var dailyWagePlusBaseYears = dailyWage + baseYears.baseYear;
|
|
|
|
|
|
//دستمزد ماهانه با محاسبه پایه سنوات
|
|
var monthlySalary = _insuranceListApplication.GetRoundValue(dailyWagePlusBaseYears * workingDays.countWorkingDays);
|
|
|
|
//حق تاهل
|
|
var marriedAllowance = employee.MaritalStatus == "متاهل" ? yearlysaleries.MarriedAllowance : 0;
|
|
|
|
//محاسبه مزایای ماهانه
|
|
var monthlyBenefits = _insuranceListApplication.GetMonthlyBenefits(endOfMonth, yearlysaleries.ConsumableItems, yearlysaleries.HousingAllowance, marriedAllowance, workingDays.countWorkingDays, workshop.TypeOfInsuranceSend, insuranceEmployeeDataItem.JobId, insuranceEmployeeDataItem.EmployeeId, insuranceEmployeeDataItem.IncludeStatus);
|
|
if (workshop.InsuranceCheckoutOvertime)
|
|
{
|
|
|
|
monthlyBenefits = _insuranceListApplication.GetRoundValue(monthlyBenefits += overTimeWorking);
|
|
}
|
|
|
|
//محاسبه جمع مزایای مشمول و دستمزد ماهانه
|
|
var benefitsIncludedContinuous = monthlyBenefits + monthlySalary;
|
|
|
|
//محاسبه حق بیمه سهم بیمه شده
|
|
insuranceShare = (benefitsIncludedContinuous * 7) / 100;
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
var command = new CreateCheckout
|
|
{
|
|
EmployeeFullName = employee.EmployeeFullName,
|
|
FathersName = employee.FatherName,
|
|
NationalCode = employee.NationalCode,
|
|
DateOfBirth = employee.DateOfBirth,
|
|
EmployeeId = employee.Id,
|
|
|
|
WorkshopName = workshop.WorkshopFullName,
|
|
WorkshopId = workshop.Id,
|
|
ArchiveCode = workshop.ArchiveCode,
|
|
|
|
ContractNo = contract.ContractNo,
|
|
ContractStartGr = separation.ContractStartGr,
|
|
ContractEndGr = separation.ContractEndGr,
|
|
ContractStart = separation.ContarctStart,
|
|
ContractEnd = separation.ContractEnd,
|
|
Month = ConvertMonth,
|
|
Year = ConvertYear,
|
|
ContractId = contract.Id,
|
|
PersonnelCode = contract.PersonnelCode.ToString(),
|
|
|
|
WorkingHoursId = workingHours.WorknigHoursId,
|
|
//فوق العاده اضافه کاری
|
|
OvertimePay = overTimeWorking,
|
|
//فوق العاده شب کاری
|
|
NightworkPay = overNightWorking,
|
|
//کمک هزینه اقلام
|
|
ConsumableItems = mandatoryCompute.ConsumableItems,
|
|
//کمک هزینه مسکن
|
|
HousingAllowance = mandatoryCompute.HousingAllowance,
|
|
// کمک هزینه عائله مندی
|
|
FamilyAllowance = mandatoryCompute.FamilyAllowance,
|
|
//دستمزد روزانه
|
|
DayliWage = mandatoryCompute.SalaryCompute,
|
|
//مزد مرخصی
|
|
LeavePay = leavePayNew.LeavPay,
|
|
//مدت طلب مرخصی
|
|
CreditLeaves = leavePayNew.CreditLeaves,
|
|
//حق تاهل
|
|
MarriedAllowance = mandatoryCompute.MarriedAllowance,
|
|
//سنوات
|
|
YearsPay = yearsPay.YearsPay,
|
|
//عیدی و پادادش
|
|
BonusesPay = bunosesPay.Bunoses,
|
|
//مدت غیبت
|
|
AbsencePeriod = leavePayNew.AbsencePeriod,
|
|
//کسری غیبت
|
|
AbsenceDeduction = abcenseDeduction ? leavePayNew.AbsenceDeduction : 0,
|
|
//وضعیت تصفیه مزد مرخصی
|
|
LeaveCheckout = leavePayNew.LeaveCheckout,
|
|
//میانگین ساعت کار در روز
|
|
AverageHoursPerDay = leavePayNew.AverageHoursPerDay,
|
|
WorkingWeeklyTime = mandatoryCompute.SumTime44,
|
|
officialholiday = officialHoliday,
|
|
friday = Friday,
|
|
totalHoursH = totalHoursH,
|
|
totalHorsM = totalHoursM,
|
|
WeeklyTime = mandatoryCompute.weeklyTime,
|
|
// فوق العاده نوبت کاری
|
|
//552 آدی کارگاه
|
|
ShiftPay = contract.WorkshopIds == 552 && hasRollCall ? 0 : mandatoryCompute.ShiftPay,
|
|
//سنوات-->
|
|
Basic = mandatoryCompute.Basic,
|
|
FridayStarttoEnd = fridayStartToEnd,
|
|
TotalHolidaysAndNotH = mandatoryCompute.TotalHolidayAndNotH,
|
|
TotalHolidaysAndNotM = mandatoryCompute.TotalHolidayAndNotM,
|
|
DailFeeComplete = mandatoryCompute.DayliFeeComplete,
|
|
HasRollCall = hasRollCall,
|
|
OverTimeWorkValue = $"{Convert.ToInt32(mandatoryCompute.OverTimeWorkH):00}:{Convert.ToInt32(mandatoryCompute.OverTimeWorkM):00}",
|
|
OverNightWorkValue = $"{Convert.ToInt32(mandatoryCompute.OverNightWorkH):00}:{Convert.ToInt32(mandatoryCompute.OverNightWorkM):00}",
|
|
FridayWorkValue = $"{Friday}",
|
|
RotatingShiftValue = mandatoryCompute.RotatingShiftValue,
|
|
AbsenceValue = "0",
|
|
TotalDayOfLeaveCompute = leavePayNew.TotalDayOfLeaveCompute,
|
|
TotalDayOfYearsCompute = yearsPay.YearsPay > 0 ? $"{yearsPay.TotalDayCompute}" : "0",
|
|
TotalDayOfBunosesCompute = bunosesPay.Bunoses > 0 ? $"{bunosesPay.TotalDayCompute}" : "0",
|
|
HolidayWorking = workshop.WorkshopHolidayWorking,
|
|
ShiftWork = workingHours.ShiftWork,
|
|
//کارکرد واقعی - محاسبات شامل مرخصی افزوده شده
|
|
TotalWorkingTimeSpan = mandatoryCompute.TotalWorkingTimeSpan,
|
|
//ساعت استراحت
|
|
TotalBreakTimeSpan = mandatoryCompute.TotalBreakTimeSpan,
|
|
// ساعت حضور - بدون مرخصی افزده شده
|
|
TotalPresentTimeSpan = mandatoryCompute.TotalPresentTimeSpan,
|
|
//مدت مرخصی استحقاقی
|
|
TotalPaidLeave = mandatoryCompute.TotalPaidLeave,
|
|
//مدت مرخصی استعلاجی
|
|
TotalSickLeave = mandatoryCompute.TotalSickLeave,
|
|
//لیست حضورغیاب جهت ذخیره سازی
|
|
GroupedRollCalls = mandatoryCompute.GroupedRollCalls,
|
|
|
|
// ساعت موظفی پرسنل برای این ماه
|
|
EmployeeMandatoryHours = mandatoryCompute.EmployeeMandatoryHours,
|
|
|
|
HasInsuranceChekoutOverTime = workshop.InsuranceCheckoutOvertime,
|
|
HasLeft = separation.HasLeft,
|
|
|
|
|
|
BaseYearAffected = mandatoryCompute.BaseYearAffected,
|
|
|
|
|
|
|
|
DailySalaryAffected = mandatoryCompute.DailySalaryAffected,
|
|
|
|
#region InsuranceShare
|
|
|
|
InsuranceDeduction = _insuranceListApplication.GetRoundValue(insuranceShare),
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
};
|
|
_checkoutApplication.Create(command);
|
|
|
|
//var workshopId = $"{contract.WorkshopIds}";
|
|
//var userId = $"{currntAcc}";
|
|
//var sumId = userId + workshopId;
|
|
//var groupId = Convert.ToInt64(sumId);
|
|
var percent = n / maxNumber * 100;
|
|
_hubContext.Clients.Group(CheckoutHub.GetGroupName(currntAcc))
|
|
.SendAsync("showStatus", (int)percent);
|
|
|
|
n += 1;
|
|
|
|
//progress.Report((i + 1) * 100 / ContractsId.Count);
|
|
//i += 1;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var noSelect = new OperationResult
|
|
{
|
|
IsSuccedded = false,
|
|
Message = "هیچ قراردادی برای تصفیه انتخاب نشده است"
|
|
};
|
|
return new JsonResult(noSelect);
|
|
}
|
|
|
|
var opration = new OperationResult
|
|
{
|
|
IsSuccedded = true,
|
|
Message = "عملیات با موفقیت انجام شد"
|
|
};
|
|
//Console.WriteLine(watch.Elapsed);
|
|
return new JsonResult(opration);
|
|
}
|
|
|
|
|
|
public IActionResult OnGetDetails(long id)
|
|
{
|
|
var res = _contractApplication.GetDetails(id);
|
|
//res.WorkshopEmployerList = _contractRepository.GetWorkshopEmployer();
|
|
//res.Employers = _employerApplication.GetEmployers();
|
|
//res.Employees = _employeeApplication.GetEmployee();
|
|
//res.Workshops = _workshopApplication.GetWorkshop();
|
|
return Partial("Details", res);
|
|
}
|
|
|
|
public IActionResult OnGetPrintOne(long id)
|
|
{
|
|
var res = _checkoutApplication.PrintAll([id]).FirstOrDefault();
|
|
|
|
//var res = _contractApplication.PrintAll(ids);
|
|
if (res.HasRollCall) return Partial("PrintDetailsRollCall", res);
|
|
|
|
return Partial("Details", res);
|
|
}
|
|
|
|
public IActionResult OnGetPrintLeave(long id)
|
|
{
|
|
var res = _checkoutApplication.LeavePrint(id);
|
|
return Partial("PrintLeave", res);
|
|
}
|
|
|
|
public IActionResult OnGetDeActive(long id)
|
|
{
|
|
var result = _checkoutApplication.DeActive(id);
|
|
|
|
if (result.IsSuccedded)
|
|
return RedirectToPage("./Index");
|
|
Message = result.Message;
|
|
return RedirectToPage("./Index");
|
|
}
|
|
|
|
public IActionResult OnGetIsActive(long id)
|
|
{
|
|
var result = _checkoutApplication.Active(id);
|
|
if (result.IsSuccedded)
|
|
return RedirectToPage("./Index");
|
|
Message = result.Message;
|
|
return RedirectToPage("./Index");
|
|
}
|
|
|
|
public IActionResult OnGetSign(string Id)
|
|
{
|
|
var id = Convert.ToInt64(Id);
|
|
var result = _checkoutApplication.Sign(id);
|
|
if (result.IsSuccedded)
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = true,
|
|
id
|
|
});
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = false,
|
|
id
|
|
});
|
|
}
|
|
|
|
public IActionResult OnGetUnSign(string Id)
|
|
{
|
|
var id = Convert.ToInt64(Id);
|
|
var permissions = _authHelper.GetPermissions();
|
|
var checkHasPermission = permissions.Any(n => n.Equals(20222));
|
|
if (checkHasPermission)
|
|
{
|
|
var result = _checkoutApplication.UnSign(id);
|
|
if (result.IsSuccedded)
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = true,
|
|
id
|
|
});
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = false,
|
|
id
|
|
});
|
|
}
|
|
|
|
return new JsonResult(new
|
|
{
|
|
IsSuccedded = false,
|
|
id
|
|
});
|
|
}
|
|
|
|
public IActionResult OnGetGroupDeActive(List<long> ids)
|
|
{
|
|
foreach (var item in ids)
|
|
{
|
|
var result = _checkoutApplication.DeActive(item);
|
|
}
|
|
|
|
return RedirectToPage("./Index");
|
|
}
|
|
|
|
|
|
public IActionResult OnGetGroupReActive(List<long> ids)
|
|
{
|
|
foreach (var item in ids)
|
|
{
|
|
var result = _checkoutApplication.Active(item);
|
|
}
|
|
|
|
|
|
//if (result.IsSuccedded)
|
|
// return RedirectToPage("./Index");
|
|
|
|
return RedirectToPage("./Index");
|
|
}
|
|
|
|
|
|
public IActionResult OnGetGroupSign(List<long> ids)
|
|
{
|
|
foreach (var item in ids)
|
|
{
|
|
var result = _checkoutApplication.Sign(item);
|
|
}
|
|
|
|
return RedirectToPage("./Index");
|
|
}
|
|
|
|
public IActionResult OnGetGroupUnSign(List<long> ids)
|
|
{
|
|
foreach (var item in ids)
|
|
{
|
|
var result = _checkoutApplication.UnSign(item);
|
|
}
|
|
|
|
return RedirectToPage("./Index");
|
|
}
|
|
|
|
public IActionResult OnGetRemoveOneCheckout(long id)
|
|
{
|
|
var result = _checkoutApplication.RemoveCheckout(id);
|
|
return RedirectToPage("./Index");
|
|
//if (result.IsSuccedded)
|
|
//{
|
|
// return new JsonResult(new
|
|
// {
|
|
// IsSuccedded = true,
|
|
// message = $"تصفیه حساب انتخاب شده حذف شد",
|
|
|
|
// });
|
|
//}
|
|
//else
|
|
//{
|
|
// return new JsonResult(new
|
|
// {
|
|
// IsSuccedded = false,
|
|
// message = $"خطایی رخ داده است",
|
|
|
|
// });
|
|
//}
|
|
}
|
|
|
|
public IActionResult OnGetMultiRemoveCheckout(List<long> ids)
|
|
{
|
|
foreach (var item in ids)
|
|
{
|
|
var result = _checkoutApplication.RemoveCheckout(item);
|
|
}
|
|
|
|
return RedirectToPage("./Index");
|
|
}
|
|
|
|
public IActionResult OnGetCustomSet(long id)
|
|
{
|
|
var checkout = _checkoutApplication.GetDetails(id);
|
|
var salaryAidDeduction = checkout.SalaryAidDeduction.ToMoney();
|
|
var rewardPay = checkout.RewardPay.ToMoneyNullable();
|
|
var command = new CheckoutViewModel
|
|
{
|
|
Id = id,
|
|
RewardPay = rewardPay,
|
|
SalaryAidDeduction = salaryAidDeduction,
|
|
Year = checkout.Year,
|
|
Month = checkout.Month,
|
|
EmployeeFullName = checkout.EmployeeFullName
|
|
};
|
|
return Partial("CustomSet", command);
|
|
}
|
|
|
|
public IActionResult OnPostCustomSet(CheckoutViewModel command)
|
|
{
|
|
var rewardPay = command.RewardPay.MoneyToDouble();
|
|
var salaryAidDeduction = command.SalaryAidDeduction.MoneyToDouble();
|
|
|
|
|
|
var checkout = _checkoutApplication.CustomSet(command.Id, rewardPay, salaryAidDeduction);
|
|
|
|
return new JsonResult(checkout);
|
|
}
|
|
|
|
|
|
///////////////Mandatory Compute//////////////////////
|
|
|
|
#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<RotatingShiftViewModel>();
|
|
|
|
|
|
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<LeftWorkViewModel>();
|
|
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<string>();
|
|
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
|
|
|
|
|
|
#region NewChangeByHeydari
|
|
|
|
public IActionResult OnPostDeleteAllCheckouts(List<long> ids, long workshopId)
|
|
{
|
|
var op = new OperationResult();
|
|
var workshop = _workshopApplication.GetDetails(workshopId);
|
|
var empId = workshop.EmployerIdList.FirstOrDefault();
|
|
var isBlock = _personalContractingPartyApp.IsBlockByEmployerId(empId);
|
|
if (isBlock == "true")
|
|
return new JsonResult(new
|
|
{
|
|
successDelete = false
|
|
});
|
|
|
|
var hasSignatureIds = _checkoutApplication.CheckHasSignature(ids);
|
|
if (hasSignatureIds == null || (hasSignatureIds != null && hasSignatureIds.Count == 0)) //امضا نداشته باشد
|
|
op = _checkoutApplication.DeleteAllCheckouts(ids);
|
|
|
|
|
|
return new JsonResult(new
|
|
{
|
|
hasSignature = hasSignatureIds != null && hasSignatureIds.Count() > 0 ? true : false,
|
|
signatureList = hasSignatureIds,
|
|
successDelete = op.IsSuccedded
|
|
});
|
|
}
|
|
|
|
public IActionResult OnPostDeleteCheckout(long id)
|
|
{
|
|
var ids = new List<long>();
|
|
ids.Add(id);
|
|
var op = new OperationResult();
|
|
|
|
var hasSignatureIds = _checkoutApplication.CheckHasSignature(ids);
|
|
if (hasSignatureIds == null ||
|
|
(hasSignatureIds != null && hasSignatureIds.Count == 0)) //امضا نداشته باشد
|
|
op = _checkoutApplication.DeleteCheckout(id);
|
|
|
|
|
|
return new JsonResult(new
|
|
{
|
|
hasSignature = hasSignatureIds != null && hasSignatureIds.Count() > 0 ? true : false,
|
|
signatureList = hasSignatureIds,
|
|
successDelete = op.IsSuccedded
|
|
});
|
|
}
|
|
|
|
public IActionResult OnPostSignatureAll(List<long> ids, long workshopId)
|
|
{
|
|
var result = new OperationResult();
|
|
var workshop = _workshopApplication.GetDetails(workshopId);
|
|
var empId = workshop.EmployerIdList.FirstOrDefault();
|
|
var isBlock = _personalContractingPartyApp.IsBlockByEmployerId(empId);
|
|
if (isBlock == "true")
|
|
return new JsonResult(new
|
|
{
|
|
isSuccedded = false
|
|
});
|
|
|
|
foreach (var item in ids)
|
|
{
|
|
result = _checkoutApplication.Sign(item);
|
|
if (!result.IsSuccedded)
|
|
break;
|
|
}
|
|
|
|
return new JsonResult(result);
|
|
}
|
|
|
|
public IActionResult OnPostDeleteAllSignature(List<long> ids, long workshopId)
|
|
{
|
|
var permissions = _authHelper.GetPermissions();
|
|
var checkHasPermission = permissions.Any(n => n.Equals(20222));
|
|
var result = new OperationResult();
|
|
var workshop = _workshopApplication.GetDetails(workshopId);
|
|
var empId = workshop.EmployerIdList.FirstOrDefault();
|
|
var isBlock = _personalContractingPartyApp.IsBlockByEmployerId(empId);
|
|
if (isBlock == "true" || !checkHasPermission)
|
|
return new JsonResult(new
|
|
{
|
|
isSuccedded = false
|
|
});
|
|
|
|
foreach (var item in ids)
|
|
{
|
|
result = _checkoutApplication.UnSign(item);
|
|
if (!result.IsSuccedded)
|
|
break;
|
|
}
|
|
|
|
return new JsonResult(result);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public class Person
|
|
{
|
|
public string FirstName { get; set; }
|
|
public string LastName { get; set; }
|
|
public int Age { get; set; }
|
|
} |