diff --git a/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/Entities/CustomizeWorkshopEmployeeSettings.cs b/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/Entities/CustomizeWorkshopEmployeeSettings.cs index d3db6404..105ace35 100644 --- a/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/Entities/CustomizeWorkshopEmployeeSettings.cs +++ b/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/Entities/CustomizeWorkshopEmployeeSettings.cs @@ -213,6 +213,7 @@ public class CustomizeWorkshopEmployeeSettings : BaseCustomizeEntity earlyExit.EarlyExitTimeFines.Select(x => new EarlyExitTimeFine(x.Minute, x.FineMoney)) .ToList(), earlyExit.Value); } + public void UpdateIsShiftChange() { var groupSetting = CustomizeWorkshopGroupSettings; @@ -269,4 +270,10 @@ public class CustomizeWorkshopEmployeeSettings : BaseCustomizeEntity IsShiftChanged = isShiftChange; } + + + public void SetSalary(double salary) + { + Salary = salary; + } } \ No newline at end of file diff --git a/Company.Domain/InsurancJobAgg/IInsuranceJobRepositpry.cs b/Company.Domain/InsurancJobAgg/IInsuranceJobRepositpry.cs index 0a88397f..27a906a7 100644 --- a/Company.Domain/InsurancJobAgg/IInsuranceJobRepositpry.cs +++ b/Company.Domain/InsurancJobAgg/IInsuranceJobRepositpry.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework.Domain; using CompanyManagment.App.Contracts.InsuranceJob; +using CompanyManagment.App.Contracts.InsuranceJobItem; namespace Company.Domain.InsurancJobAgg; @@ -13,10 +14,16 @@ public interface IInsuranceJobRepositpry:IRepository { //OperationResult Create(CreateInsurancJob command); // OperationResult Edit(EditInsurancJob command); - EditInsuranceJob GetDetails(long id); + EditInsuranceJob GetDetails(long id, string year, string month); List GetInsurancJob(); List Search(InsuranceJobSearchModel searchModel); OperationResult CreateInsuranceJob(CreateInsuranceJob command); + List<(long id, string date)> GetOldYersInsuranceItemIds(); + OperationResult CopyFromLastYear(CopyFromLastYearViewModel command); + OperationResult RecoveryOldData1403(); OperationResult Remove(long id); OperationResult EditInsuranceJob(EditInsuranceJob command); -} \ No newline at end of file + + +} + diff --git a/Company.Domain/InsuranceJobItemAgg/IInsuranceJobItemRepositpry.cs b/Company.Domain/InsuranceJobItemAgg/IInsuranceJobItemRepositpry.cs index 5df3d2e5..630d9070 100644 --- a/Company.Domain/InsuranceJobItemAgg/IInsuranceJobItemRepositpry.cs +++ b/Company.Domain/InsuranceJobItemAgg/IInsuranceJobItemRepositpry.cs @@ -14,8 +14,11 @@ public interface IInsuranceJobItemRepositpry : IRepository GetInsuranceJobItemByInsuranceJobId(long Id); + List GetInsuranceJobItemByInsuranceJobId(long Id, string year, string month); List Search(InsuranceJobItemSearchModel searchModel); - InsuranceJobItemViewModel GetInsuranceJobItemByInsuranceJobIdForFixedSalary(long insuranceJobId, long jobId); + InsuranceJobItemViewModel GetInsuranceJobItemByInsuranceJobIdForFixedSalary(long insuranceJobId, long jobId, + string year, string month); + + (List workshopList, bool hasAnyWorkshop) GetWorkshopUsedThisInsuranceJob(long insuranceJobId); } \ No newline at end of file diff --git a/Company.Domain/InsuranceJobItemAgg/InsuranceJobItem.cs b/Company.Domain/InsuranceJobItemAgg/InsuranceJobItem.cs index 38eae10d..7e9ad26c 100644 --- a/Company.Domain/InsuranceJobItemAgg/InsuranceJobItem.cs +++ b/Company.Domain/InsuranceJobItemAgg/InsuranceJobItem.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using _0_Framework.Domain; using Company.Domain.InsuranceJobAndJobsAgg; using Company.Domain.InsurancJobAgg; @@ -8,13 +9,15 @@ namespace Company.Domain.InsuranceJobItemAgg; public class InsuranceJobItem : EntityBase { - public InsuranceJobItem(double percentageLessThan, double salaeyLessThan, double percentageMoreThan, double salaryMoreThan, long insuranceJobId) + public InsuranceJobItem(double percentageLessThan, double salaeyLessThan, double percentageMoreThan, double salaryMoreThan, long insuranceJobId, DateTime? startDate, DateTime? endDate) { PercentageLessThan = percentageLessThan; SalaeyLessThan = salaeyLessThan; PercentageMoreThan = percentageMoreThan; SalaryMoreThan = salaryMoreThan; InsuranceJobId = insuranceJobId; + StartDate = startDate; + EndDate = endDate; } public double PercentageLessThan { get; private set; } @@ -22,6 +25,9 @@ public class InsuranceJobItem : EntityBase public double PercentageMoreThan { get; private set; } public double SalaryMoreThan { get; private set; } + public DateTime? StartDate { get; private set; } + public DateTime? EndDate { get; private set; } + public long InsuranceJobId { get; private set; } public InsuranceJob InsuranceJob { get; set; } public List InsuranceJobAndJobs { get; set; } @@ -31,12 +37,14 @@ public class InsuranceJobItem : EntityBase InsuranceJobAndJobs = new List(); } - public void Edit(double percentageLessThan, double salaeyLessThan, double percentageMoreThan, double salaryMoreThan, long insuranceJobId) + public void Edit(double percentageLessThan, double salaeyLessThan, double percentageMoreThan, double salaryMoreThan, long insuranceJobId, DateTime? startDate, DateTime? endDate) { PercentageLessThan = percentageLessThan; SalaeyLessThan = salaeyLessThan; PercentageMoreThan = percentageMoreThan; SalaryMoreThan = salaryMoreThan; InsuranceJobId = insuranceJobId; + StartDate = startDate; + EndDate = endDate; } } \ No newline at end of file diff --git a/Company.Domain/LeftWorkAgg/ILeftWorkRepository.cs b/Company.Domain/LeftWorkAgg/ILeftWorkRepository.cs index 4a32f49a..78c73415 100644 --- a/Company.Domain/LeftWorkAgg/ILeftWorkRepository.cs +++ b/Company.Domain/LeftWorkAgg/ILeftWorkRepository.cs @@ -45,4 +45,5 @@ public interface ILeftWorkRepository : IRepository #endregion Task GetLastLeftWork(long employeeId, long workshopId); + List SearchCreateContract(LeftWorkSearchModel searchModel); } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/CustomizeWorkshopSettings/CustomizeWorkshopGroupSettingsViewModel.cs b/CompanyManagment.App.Contracts/CustomizeWorkshopSettings/CustomizeWorkshopGroupSettingsViewModel.cs index a19afa21..f1405b2c 100644 --- a/CompanyManagment.App.Contracts/CustomizeWorkshopSettings/CustomizeWorkshopGroupSettingsViewModel.cs +++ b/CompanyManagment.App.Contracts/CustomizeWorkshopSettings/CustomizeWorkshopGroupSettingsViewModel.cs @@ -8,6 +8,7 @@ public class CustomizeWorkshopGroupSettingsViewModel { public long Id { get; set; } public double Salary { get; set; } + public string SalaryStr { get; set; } public string GroupName { get; set; } public bool MainGroup { get; set; } public List RollCallWorkshopShifts { get; set; } @@ -18,4 +19,5 @@ public class CustomizeWorkshopGroupSettingsViewModel public BreakTime BreakTime { get; set; } public FridayWork FridayWork { get; set; } public HolidayWork HolidayWork { get; set; } + public int LeavePermitted { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/DateSalary/DateSalaryViewModel.cs b/CompanyManagment.App.Contracts/DateSalary/DateSalaryViewModel.cs index 5bdb23a0..51633ba4 100644 --- a/CompanyManagment.App.Contracts/DateSalary/DateSalaryViewModel.cs +++ b/CompanyManagment.App.Contracts/DateSalary/DateSalaryViewModel.cs @@ -1,4 +1,6 @@ -namespace CompanyManagment.App.Contracts.DateSalary; +using System; + +namespace CompanyManagment.App.Contracts.DateSalary; public class DateSalaryViewModel { @@ -7,4 +9,6 @@ public class DateSalaryViewModel public string Month { get; set; } public string StartDateFa { get; set; } public string EndDateFa { get; set; } + public DateTime StartDateGr { get; set; } + public DateTime EndDateGr { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employee/CreateEmployeeByClient.cs b/CompanyManagment.App.Contracts/Employee/CreateEmployeeByClient.cs index 29f9346c..57303b8e 100644 --- a/CompanyManagment.App.Contracts/Employee/CreateEmployeeByClient.cs +++ b/CompanyManagment.App.Contracts/Employee/CreateEmployeeByClient.cs @@ -28,6 +28,10 @@ public class CreateEmployeeByClient public List EmployeeDocumentItems { get; set; } public bool HasEmployeeDocument { get; set; } public bool HasRollCallService { get; set; } + public bool HasCustomizeCheckoutService { get; set; } + + + } diff --git a/CompanyManagment.App.Contracts/InsuranceJob/CopyFromLastYearViewModel.cs b/CompanyManagment.App.Contracts/InsuranceJob/CopyFromLastYearViewModel.cs new file mode 100644 index 00000000..cf3cfd55 --- /dev/null +++ b/CompanyManagment.App.Contracts/InsuranceJob/CopyFromLastYearViewModel.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using CompanyManagment.App.Contracts.InsuranceJobItem; +using Microsoft.AspNetCore.Mvc.Rendering; + +namespace CompanyManagment.App.Contracts.InsuranceJob; + +public class CopyFromLastYearViewModel +{ + public string StartDate { get; set; } + public string EndDate { get; set; } + + public long InsuranceJobItemId { get; set; } + + public SelectList InsuranceJobItemViewModels { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InsuranceJob/CreateInsuranceJob.cs b/CompanyManagment.App.Contracts/InsuranceJob/CreateInsuranceJob.cs index 6a4d81c1..abd7d7f1 100644 --- a/CompanyManagment.App.Contracts/InsuranceJob/CreateInsuranceJob.cs +++ b/CompanyManagment.App.Contracts/InsuranceJob/CreateInsuranceJob.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using CompanyManagment.App.Contracts.InsuranceJobItem; using CompanyManagment.App.Contracts.Job; +using Microsoft.AspNetCore.Mvc.Rendering; namespace CompanyManagment.App.Contracts.InsuranceJob; @@ -14,7 +15,20 @@ public class CreateInsuranceJob public long YearlySalaryId { get; set; } public string EconomicCode { get; set; } public string Year { get; set; } + public string Month { get; set; } public long JobId { get; set; } + + public string StartDateFa { get; set; } + public string EndDateFa { get; set; } public List Jobs { get; set; } public List InsuranceJobItems { get; set; } + + public List WorkshopList { get; set; } + public bool HasAnyWorkshop { get; set; } + + public long InsuranceJobItemId { get; set; } + + public SelectList InsuranceJobItemViewModels { get; set; } + + } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InsuranceJob/IInsuranceJobApplication.cs b/CompanyManagment.App.Contracts/InsuranceJob/IInsuranceJobApplication.cs index 80e8ee98..5f1132d7 100644 --- a/CompanyManagment.App.Contracts/InsuranceJob/IInsuranceJobApplication.cs +++ b/CompanyManagment.App.Contracts/InsuranceJob/IInsuranceJobApplication.cs @@ -10,9 +10,12 @@ namespace CompanyManagment.App.Contracts.InsuranceJob; public interface IInsuranceJobApplication { + List<(long id, string date)> GetOldYersInsuranceItemIds(); + OperationResult CopyFromLastYear(CopyFromLastYearViewModel command); + OperationResult RecoveryOldData1403(); OperationResult Create(CreateInsuranceJob command); OperationResult Edit(EditInsuranceJob command); - EditInsuranceJob GetDetails(long id); + EditInsuranceJob GetDetails(long id,string year, string month); List GetInsurancJob(); List Search(InsuranceJobSearchModel searchModel); diff --git a/CompanyManagment.App.Contracts/InsuranceJob/InsuranceJobViewModel.cs b/CompanyManagment.App.Contracts/InsuranceJob/InsuranceJobViewModel.cs index 8fe42878..8ee6b852 100644 --- a/CompanyManagment.App.Contracts/InsuranceJob/InsuranceJobViewModel.cs +++ b/CompanyManagment.App.Contracts/InsuranceJob/InsuranceJobViewModel.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using CompanyManagment.App.Contracts.InsuranceJobItem; namespace CompanyManagment.App.Contracts.InsuranceJob; @@ -13,4 +14,7 @@ public class InsuranceJobViewModel //public long YearlySalaryId { get; set; } public string EconomicCode { get; set; } public string Year { get; set; } + public string Month { get; set; } + public List InsuranceJobItemViewModels { get; set; } + } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InsuranceJobItem/InsuranceJobItemViewModel.cs b/CompanyManagment.App.Contracts/InsuranceJobItem/InsuranceJobItemViewModel.cs index fe4692c1..e880ef8e 100644 --- a/CompanyManagment.App.Contracts/InsuranceJobItem/InsuranceJobItemViewModel.cs +++ b/CompanyManagment.App.Contracts/InsuranceJobItem/InsuranceJobItemViewModel.cs @@ -11,14 +11,32 @@ namespace CompanyManagment.App.Contracts.InsuranceJobItem; public class InsuranceJobItemViewModel { public long Id { get; set; } + + + + /// + /// آیای این درصد در لیست مبالغ مبلغ پر شده دارد + /// + public bool IsPercentageLessThanUse { get; set; } public double PercentageLessThan { get; set; } + + + + /// + /// آیای این درصد در لیست مبالغ مبلغ پر شده دارد + /// + public bool IsPercentageMoreThanUse { get; set; } public double PercentageMoreThan { get; set; } + public double SalaeyLessThan { get; set; } public double SalaryMoreThan { get; set; } public string SalaeyLessThanString { get; set; } public string SalaryMoreThanString { get; set; } public long InsuranceJobId { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public List JobIds { get; set; } public List JobList { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/LeftWork/ILeftWorkApplication.cs b/CompanyManagment.App.Contracts/LeftWork/ILeftWorkApplication.cs index ef9db641..8e5a19b6 100644 --- a/CompanyManagment.App.Contracts/LeftWork/ILeftWorkApplication.cs +++ b/CompanyManagment.App.Contracts/LeftWork/ILeftWorkApplication.cs @@ -16,6 +16,9 @@ public interface ILeftWorkApplication EditLeftWork GetDetails(long id); LeftWorkViewModel CheckoutleftWorkCheck(DateTime contractStart, long workshopId, long employeeId); List search(LeftWorkSearchModel searchModel); + + + List SearchCreateContract(LeftWorkSearchModel searchModel); Task> searchAsync(LeftWorkSearchModel searchModel); string StartWork(long employeeId, long workshopId, string leftWork); OperationResult RemoveLeftWork(long id); diff --git a/CompanyManagment.App.Contracts/RollCall/RollCallViewModel.cs b/CompanyManagment.App.Contracts/RollCall/RollCallViewModel.cs index 4bfd8968..5d19d833 100644 --- a/CompanyManagment.App.Contracts/RollCall/RollCallViewModel.cs +++ b/CompanyManagment.App.Contracts/RollCall/RollCallViewModel.cs @@ -65,4 +65,6 @@ public class RollCallViewModel /// مدت زمان استراحت /// public TimeSpan BreakTimeSpan { get; set; } + + public DateTime? ShiftEndWithoutRest { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.Application/CheckoutApplication.cs b/CompanyManagment.Application/CheckoutApplication.cs index 227aa0d4..bc742d0a 100644 --- a/CompanyManagment.Application/CheckoutApplication.cs +++ b/CompanyManagment.Application/CheckoutApplication.cs @@ -346,9 +346,21 @@ public class CheckoutApplication : ICheckoutApplication double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(yearFa, monthFa); int mandatoryWholeHours = (int)mandatoryHours; int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); - var totalWorking = new TimeSpan(result.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)); - var totalBreakTime = new TimeSpan(result.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); - var totalPresent = totalWorking + totalBreakTime; + TimeSpan totalWorking; + TimeSpan totalBreakTime; + TimeSpan totalPresent; + if (result.HasRollCall) + { + totalWorking = new TimeSpan(result.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)); + totalBreakTime = new TimeSpan(result.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); + totalPresent = totalWorking + totalBreakTime; + } + else + { + totalBreakTime = new TimeSpan(result.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); + totalPresent = new TimeSpan(result.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)); + totalWorking = totalPresent - totalBreakTime; + } result.TotalWorkingTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalWorking.TotalHours, totalWorking.Minutes, "-"); result.TotalBreakTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalBreakTime.TotalHours, totalBreakTime.Minutes, "-"); diff --git a/CompanyManagment.Application/CustomizeWorkshopSettingsApplication.cs b/CompanyManagment.Application/CustomizeWorkshopSettingsApplication.cs index cf4a3e61..3f5cea31 100644 --- a/CompanyManagment.Application/CustomizeWorkshopSettingsApplication.cs +++ b/CompanyManagment.Application/CustomizeWorkshopSettingsApplication.cs @@ -19,12 +19,13 @@ using System.IO; using System.Linq; using System.Threading.Tasks; using System.Transactions; -using CompanyManagment.App.Contracts.RollCall; -using Microsoft.EntityFrameworkCore.Query; using Company.Domain.CheckoutAgg; using Company.Domain.CustomizeCheckoutAgg; using Company.Domain.CustomizeCheckoutTempAgg; -using CompanyManagment.EFCore.Repository; +using CompanyManagment.App.Contracts.RollCall; +using Hangfire.States; +using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; +using Microsoft.EntityFrameworkCore.Query; namespace CompanyManagment.Application; @@ -372,10 +373,10 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo } if (customizeWorkshopGroupSettings.MainGroup) - { - var createDefaultEmployee = CreateEmployeeSettings(command); - return createDefaultEmployee; - } + { + var createDefaultEmployee = CreateEmployeeSettings(command); + return createDefaultEmployee; + } List shiftCollection = new List(); @@ -557,7 +558,13 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo _customizeWorkshopEmployeeSettingsRepository.Create(entity); - entity.SimpleEdit(shiftCollection, command.IrregularShift, command.WorkshopShiftStatus, command.BreakTime, isChanged, command.FridayWork, command.HolidayWork, rotatingShift); + entity.SimpleEdit(shiftCollection, command.IrregularShift, command.WorkshopShiftStatus, command.BreakTime, isChanged, command.FridayWork, command.HolidayWork, rotatingShift); + var employeeSalary = command.Salary?.MoneyToDouble() ?? 0; + + if (employeeSalary > 0) + { + entity.SetSalary(employeeSalary); + } _customizeWorkshopGroupSettingsRepository.SaveChanges(); return op.Succcedded(); @@ -681,7 +688,7 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo return op.Succcedded(); } public OperationResult EditSimpleRollCallGroupSetting(EditCustomizeWorkshopGroupSettings command, - List reCalculateCommand) + List reCalculateCommand) { OperationResult op = new(); @@ -712,15 +719,15 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo { groupSettingsShifts = command.ShiftViewModel.Select(x => - { - if (!TimeOnly.TryParseExact(x.StartTime, "HH:mm", out TimeOnly start)) - throw new InvalidDataException(); - if (!TimeOnly.TryParseExact(x.EndTime, "HH:mm", out TimeOnly end)) - throw new InvalidDataException(); + { + if (!TimeOnly.TryParseExact(x.StartTime, "HH:mm", out TimeOnly start)) + throw new InvalidDataException(); + if (!TimeOnly.TryParseExact(x.EndTime, "HH:mm", out TimeOnly end)) + throw new InvalidDataException(); - return new CustomizeWorkshopGroupSettingsShift(start, end, x.Placement); + return new CustomizeWorkshopGroupSettingsShift(start, end, x.Placement); - }).ToList(); + }).ToList(); if (groupSettingsShifts.All(x => workshopSettings.CustomizeWorkshopSettingsShifts.Any(y => x.Equals(y))) && command.WorkshopShiftStatus == workshopSettings.WorkshopShiftStatus && command.FridayWork == workshopSettings.FridayWork && @@ -1589,10 +1596,6 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo return _customizeWorkshopGroupSettingsRepository.GetEmployeesGroupSettingsByEmployeeId(employeeId, workshopId); } - public bool HasAnyEmployeeWithoutGroup(long workshopId) - { - return _customizeWorkshopGroupSettingsRepository.HasAnyEmployeeWithoutGroup(workshopId); - } public OperationResult> ValidateReCalculateValueForGroupEdit(List commands, long workshopId) { @@ -1623,10 +1626,16 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo employeeIdsHasCheckout = employeeIdsHasCheckout.Distinct().ToList(); return isSuccess ? - operationResult.Succcedded(employeeIdsHasCheckout) + operationResult.Succcedded(employeeIdsHasCheckout) : operationResult.Failed("پرسنل هایی دارای فیش هستند لطفا نسبت به تعیین تکلیف این ها اقدام نمایید", employeeIdsHasCheckout); } + + public bool HasAnyEmployeeWithoutGroup(long workshopId) + { + return _customizeWorkshopGroupSettingsRepository.HasAnyEmployeeWithoutGroup(workshopId); + } + public bool CheckEmployeeShiftHasChanged(EditCustomizeEmployeeSettings command) { return _customizeWorkshopEmployeeSettingsRepository.CheckEmployeeShiftHasChanged(command); diff --git a/CompanyManagment.Application/EmployeeAplication.cs b/CompanyManagment.Application/EmployeeAplication.cs index 4a683a38..a2daf0a4 100644 --- a/CompanyManagment.Application/EmployeeAplication.cs +++ b/CompanyManagment.Application/EmployeeAplication.cs @@ -1,35 +1,38 @@ -using System; -using System.IO; -using System.Collections.Generic; +using _0_Framework.Application; using _0_Framework.InfraStructure; using Company.Domain.EmployeeAgg; -using CompanyManagment.App.Contracts.Employee; -using CompanyManagment.EFCore; -using _0_Framework.Application; -using CompanyManagment.App.Contracts.EmployeeInsuranceRecord; -using Company.Domain.EmployeeInsuranceRecordAgg; +using Company.Domain.LeftWorkAgg; using Company.Domain.WorkshopAgg; +using CompanyManagment.App.Contracts.Employee; +using CompanyManagment.App.Contracts.EmployeeInsuranceRecord; +using CompanyManagment.EFCore; +using System; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using System.Transactions; +using Company.Domain.EmployeeClientTempAgg; using Company.Domain.PersonnelCodeAgg; +using EmployeeInsuranceRecord = Company.Domain.EmployeeInsuranceRecordAgg.EmployeeInsuranceRecord; +using Microsoft.AspNetCore.Hosting; +using System.IO; +using _0_Framework.Application.UID; +using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg; +using Company.Domain.CustomizeWorkshopGroupSettingsAgg; +using Company.Domain.EmployeeDocumentsAgg; +using Company.Domain.LeftWorkTempAgg; +using Company.Domain.RollCallEmployeeAgg; using CompanyManagment.App.Contracts.CustomizeWorkshopSettings; using CompanyManagment.App.Contracts.EmployeeBankInformation; using CompanyManagment.App.Contracts.EmployeeDocuments; using CompanyManagment.App.Contracts.RollCallEmployeeStatus; -using Microsoft.AspNetCore.Hosting; -using System.IO; -using System.Transactions; -using Company.Domain.EmployeeClientTempAgg; -using Company.Domain.LeftWorkTempAgg; -using CompanyManagment.App.Contracts.LeftWorkTemp; -using _0_Framework.Application.UID; -using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg; -using Company.Domain.EmployeeDocumentsAgg; -using Company.Domain.RollCallEmployeeAgg; -using Company.Domain.CustomizeWorkshopGroupSettingsAgg; -using Company.Domain.LeftWorkAgg; +using RollCallEmployee = Company.Domain.RollCallEmployeeAgg.RollCallEmployee; using CompanyManagment.App.Contracts.Employee.DTO; +using CompanyManagment.App.Contracts.LeftWorkTemp; +using System.Reflection; using Company.Domain.EmployeeAuthorizeTempAgg; +using Company.Domain.RollCallServiceAgg; +using Microsoft.Extensions.Configuration; namespace CompanyManagment.Application; @@ -37,6 +40,9 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli { private readonly IEmployeeRepository _EmployeeRepository; private readonly IWorkshopRepository _WorkShopRepository; + private readonly ILeftWorkRepository _leftWorkRepository; + private readonly IPersonnelCodeRepository _personnelCodeRepository; + private readonly IEmployeeClientTempRepository _employeeClientTempRepository; private readonly CompanyContext _context; public bool nationalCodValid = false; public bool idnumberIsOk = true; @@ -54,16 +60,25 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli private readonly ILeftWorkTempRepository _leftWorkTempRepository; private readonly IUidService _uidService; private readonly ICustomizeWorkshopEmployeeSettingsRepository _customizeWorkshopEmployeeSettingsRepository; - private readonly ILeftWorkRepository _leftWorkRepository; - private readonly IPersonnelCodeRepository _personnelCodeRepository; - private readonly IEmployeeClientTempRepository _employeeClientTempRepository; - private readonly ICustomizeWorkshopGroupSettingsRepository _customizeWorkshopGroupSettingsRepository; private readonly IEmployeeAuthorizeTempRepository _employeeAuthorizeTempRepository; + private readonly IRollCallServiceRepository _rollCallServiceRepository; - public EmployeeAplication(IEmployeeRepository employeeRepository, CompanyContext context, IWorkshopRepository workShopRepository, IWebHostEnvironment webHostEnvironment, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, IRollCallEmployeeRepository rollCallEmployeeRepository, ICustomizeWorkshopSettingsApplication customizeWorkshopSettingsApplication, IEmployeeDocumentsApplication employeeDocumentsApplication, IEmployeeDocumentsRepository employeeDocumentsRepository, IEmployeeBankInformationApplication employeeBankInformationApplication, ILeftWorkTempRepository leftWorkTempRepository, IUidService uidService, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, IPersonnelCodeRepository personnelCodeRepository, IEmployeeClientTempRepository employeeClientTempRepository, ICustomizeWorkshopGroupSettingsRepository customizeWorkshopGroupSettingsRepository, ILeftWorkRepository leftWorkRepository, IEmployeeAuthorizeTempRepository employeeAuthorizeTempRepository) : base(context) + public EmployeeAplication(IEmployeeRepository employeeRepository, CompanyContext context, IWorkshopRepository workShopRepository, + ILeftWorkRepository leftWorkRepository, IPersonnelCodeRepository personnelCodeRepository, + IEmployeeClientTempRepository employeeClientTempRepository, IWebHostEnvironment webHostEnvironment, + IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, IRollCallEmployeeRepository rollCallEmployeeRepository, + ICustomizeWorkshopGroupSettingsRepository customizeWorkshopGroupSettingsRepository, + ICustomizeWorkshopSettingsApplication customizeWorkshopSettingsApplication, IEmployeeDocumentsApplication employeeDocumentsApplication, + IEmployeeBankInformationApplication employeeBankInformationApplication, ILeftWorkTempRepository leftWorkTempRepository, + IUidService uidService, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, + IEmployeeAuthorizeTempRepository employeeAuthorizeTempRepository, IRollCallServiceRepository rollCallServiceRepository) : base(context) { _context = context; _WorkShopRepository = workShopRepository; + _EmployeeRepository = employeeRepository; + this._leftWorkRepository = leftWorkRepository; + _personnelCodeRepository = personnelCodeRepository; + _employeeClientTempRepository = employeeClientTempRepository; _webHostEnvironment = webHostEnvironment; _rollCallEmployeeStatusApplication = rollCallEmployeeStatusApplication; _rollCallEmployeeRepository = rollCallEmployeeRepository; @@ -73,18 +88,15 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli _leftWorkTempRepository = leftWorkTempRepository; _uidService = uidService; _customizeWorkshopEmployeeSettingsRepository = customizeWorkshopEmployeeSettingsRepository; - _personnelCodeRepository = personnelCodeRepository; - _employeeClientTempRepository = employeeClientTempRepository; - _leftWorkRepository = leftWorkRepository; _employeeAuthorizeTempRepository = employeeAuthorizeTempRepository; - _EmployeeRepository = employeeRepository; + _rollCallServiceRepository = rollCallServiceRepository; } public OperationResult Create(CreateEmployee command) { var opration = new OperationResult(); if (_EmployeeRepository.Exists(x => - x.LName == command.LName && x.NationalCode == command.NationalCode && !string.IsNullOrWhiteSpace(command.NationalCode) && x.NationalCode != null && x.IsActiveString == "true")) + x.LName == command.LName && x.NationalCode == command.NationalCode && !string.IsNullOrWhiteSpace(command.NationalCode) && x.NationalCode != null)) return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); //if (_EmployeeRepository.Exists(x => x.IdNumber == command.IdNumber && x.IdNumber !=null)) @@ -102,7 +114,7 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli //} - + if (command.Address != null && command.State == null) { @@ -141,8 +153,8 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli { case "0000000000": case "1111111111": - case "22222222222": - case "33333333333": + case "2222222222": + case "3333333333": case "4444444444": case "5555555555": case "6666666666": @@ -194,9 +206,9 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli return opration.Failed("کد ملی وارد شده تکراری است"); } } - - + + string initial = "1300/10/11"; var dateOfBirth = command.DateOfBirth != null ? command.DateOfBirth.ToGeorgianDateTime() : initial.ToGeorgianDateTime(); var dateOfIssue = command.DateOfIssue != null ? command.DateOfIssue.ToGeorgianDateTime() : initial.ToGeorgianDateTime(); @@ -221,9 +233,10 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli return opration.Succcedded(employeeData.id); - + } + public OperationResult Edit(EditEmployee command) { var opration = new OperationResult(); @@ -232,11 +245,11 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli return opration.Failed("رکورد مورد نظر یافت نشد"); if (_EmployeeRepository.Exists(x => - x.LName == command.LName && x.NationalCode == command.NationalCode && !string.IsNullOrWhiteSpace(command.NationalCode) && x.id != command.Id && x.IsActiveString == "true")) + x.LName == command.LName && x.NationalCode == command.NationalCode && !string.IsNullOrWhiteSpace(command.NationalCode) && x.id != command.Id)) return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); //if (_EmployeeRepository.Exists(x => x.IdNumber == command.IdNumber && x.IdNumber != null && x.id != command.Id)) // return opration.Failed("شماره شناسنامه وارد شده تکراری است"); - + if (command.Address != null && command.State == null) { StatCity = false; @@ -274,8 +287,8 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli { case "0000000000": case "1111111111": - case "22222222222": - case "33333333333": + case "2222222222": + case "3333333333": case "4444444444": case "5555555555": case "6666666666": @@ -328,7 +341,7 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli } } - + string initial = "1300/10/11"; var dateOfBirth = command.DateOfBirth != null ? command.DateOfBirth.ToGeorgianDateTime() : initial.ToGeorgianDateTime(); var dateOfIssue = command.DateOfIssue != null ? command.DateOfIssue.ToGeorgianDateTime() : initial.ToGeorgianDateTime(); @@ -336,7 +349,7 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli dateOfIssue, command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality, command.Phone, command.Address, - command.State,command.City, command.MaritalStatus, command.MilitaryService, command.LevelOfEducation, + command.State, command.City, command.MaritalStatus, command.MilitaryService, command.LevelOfEducation, command.FieldOfStudy, command.BankCardNumber, command.BankBranch, command.InsuranceCode, command.InsuranceHistoryByYear, command.InsuranceHistoryByMonth, command.NumberOfChildren, command.OfficePhone @@ -349,7 +362,7 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli return opration.Succcedded(); - + } public EditEmployee GetDetails(long id) @@ -357,6 +370,11 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli return _EmployeeRepository.GetDetails(id); } + public EditEmployee GetDetailsIgnoreQueryFilter(long id) + { + return _EmployeeRepository.GetDetails(id); + } + public OperationResult Active(long id) { var opration = new OperationResult(); @@ -395,8 +413,8 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli public async Task> Search(EmployeeSearchModel searchModel) { - var res=await _EmployeeRepository.Search(searchModel); - + var res = await _EmployeeRepository.Search(searchModel); + foreach (var item in res) { var children = _context.EmployeeChildrenSet.Count(x => x.EmployeeId == item.Id); @@ -687,8 +705,8 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli { case "0000000000": case "1111111111": - case "22222222222": - case "33333333333": + case "2222222222": + case "3333333333": case "4444444444": case "5555555555": case "6666666666": @@ -817,8 +835,8 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli { case "0000000000": case "1111111111": - case "22222222222": - case "33333333333": + case "2222222222": + case "3333333333": case "4444444444": case "5555555555": case "6666666666": @@ -898,11 +916,17 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli return res; } + #endregion - #region Pooya + + public List GetWorkingEmployeesByWorkshopId(long workshopId) + { + return _EmployeeRepository.GetWorkingEmployeesByWorkshopId(workshopId); + } + public EmployeeViewModel GetEmployeeByNationalCodeIfHasActiveLeftWork(string nationalCode, List workshopIds) { if (nationalCode.NationalCodeValid() != "valid") @@ -910,7 +934,6 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli var workshopEmployeesWithLeftWork = _EmployeeRepository.GetWorkingEmployeesByWorkshopIdsAndNationalCodeAndDate(workshopIds, nationalCode, DateTime.Now.Date); return workshopEmployeesWithLeftWork.FirstOrDefault(); } - public EmployeeViewModel GetEmployeeByNationalCodeIfHasLeftWork(string nationalCode, List workshopIds) { if (nationalCode.NationalCodeValid() != "valid") @@ -918,11 +941,8 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli var workshopEmployeesWithLeftWork = _EmployeeRepository.GetWorkedEmployeesByWorkshopIdsAndNationalCodeAndDate(workshopIds, nationalCode, DateTime.Now.Date); return workshopEmployeesWithLeftWork.FirstOrDefault(); } - public List GetWorkingEmployeesByWorkshopId(long workshopId) - { - return _EmployeeRepository.GetWorkingEmployeesByWorkshopId(workshopId); - } + public List GetRangeByIds(IEnumerable employeeIds) { @@ -958,6 +978,7 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli }).ToList(); } + #endregion #region Mahan @@ -1041,6 +1062,7 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli _personnelCodeRepository.SaveChanges(); } + var rollCallService = _rollCallServiceRepository.GetActiveServiceByWorkshopId(command.WorkshopId); if (string.IsNullOrWhiteSpace(command.RollCallUploadEmployeePicture?.Picture1) == false && string.IsNullOrWhiteSpace(command.RollCallUploadEmployeePicture?.Picture2) == false) @@ -1050,14 +1072,14 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli Directory.CreateDirectory(directoryPath); var filePath1 = Path.Combine(directoryPath) + $@"\1.jpg"; - - CreateImageFromBase64(command.RollCallUploadEmployeePicture.Picture1, filePath1); - + + CreateImageFromBase64(command.RollCallUploadEmployeePicture.Picture1, filePath1); + var filePath2 = Path.Combine(directoryPath) + $@"\2.jpg"; - - CreateImageFromBase64(command.RollCallUploadEmployeePicture.Picture2, filePath2); - + + CreateImageFromBase64(command.RollCallUploadEmployeePicture.Picture2, filePath2); + var rollCallEmployee = @@ -1090,6 +1112,16 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli if (command.CreateCustomizeEmployeeSettings.GroupId > 0) { + if (rollCallService?.HasCustomizeCheckoutService == "true") + { + var employeeSalary = command.CreateCustomizeEmployeeSettings.Salary?.MoneyToDouble() ?? 0; + + if (employeeSalary < 1) + { + return op.Failed("لطفا حقوق پرسنل را وارد کنید"); + } + + } if (_customizeWorkshopEmployeeSettingsRepository .Exists(x => x.WorkshopId == workshop.Id && x.EmployeeId == employee.id)) { @@ -1117,6 +1149,16 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli } else if (command.CreateCustomizeEmployeeSettings.GroupId > 0) { + if (rollCallService?.HasCustomizeCheckoutService == "true") + { + var employeeSalary = command.CreateCustomizeEmployeeSettings.Salary?.MoneyToDouble() ?? 0; + + if (employeeSalary < 1) + { + return op.Failed("لطفا حقوق پرسنل را وارد کنید"); + } + + } if (_customizeWorkshopEmployeeSettingsRepository .Exists(x => x.WorkshopId == workshop.Id && x.EmployeeId == employee.id)) { @@ -1210,6 +1252,7 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli byte[] bytes = Convert.FromBase64String(subBase64); System.IO.File.WriteAllBytes(filePath, bytes); } + public async Task> ValidateCreateEmployeeClientByNationalCodeAndWorkshopId(string nationalCode, string birthDate, long workshopId) { @@ -1499,9 +1542,9 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli { employee.EditAuthorizeEmployee(employee.DateOfIssue, employee.PlaceOfIssue, employee.Phone, employee.Address, employee.State, employee.City, command.MaritalStatus, - command.MilitaryService, employee.LevelOfEducation, employee.FieldOfStudy, + command.MilitaryService, employee.LevelOfEducation, employee.FieldOfStudy, employee.BankCardNumber, employee.BankBranch, employee.InsuranceCode, - employee.InsuranceHistoryByYear, employee.InsuranceHistoryByMonth, employee.NumberOfChildren, + employee.InsuranceHistoryByYear, employee.InsuranceHistoryByMonth, employee.NumberOfChildren, employee.OfficePhone, employee.MclsUserName, employee.MclsPassword, employee.EserviceUserName, employee.EservicePassword, employee.TaxOfficeUserName, employee.TaxOfficepassword, employee.SanaUserName, employee.SanaPassword); @@ -1615,6 +1658,5 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli } - #endregion } \ No newline at end of file diff --git a/CompanyManagment.Application/InsuranceJobApplication.cs b/CompanyManagment.Application/InsuranceJobApplication.cs index e9cf91fe..6bbbbadb 100644 --- a/CompanyManagment.Application/InsuranceJobApplication.cs +++ b/CompanyManagment.Application/InsuranceJobApplication.cs @@ -19,6 +19,21 @@ public class InsuranceJobApplication: IInsuranceJobApplication _insuranceJobItemRepositpry = insuranceJobItemRepositpry; } + public List<(long id, string date)> GetOldYersInsuranceItemIds() + { + return _insuranceJobRepositpry.GetOldYersInsuranceItemIds(); + } + + public OperationResult CopyFromLastYear(CopyFromLastYearViewModel command) + { + return _insuranceJobRepositpry.CopyFromLastYear(command); + } + + public OperationResult RecoveryOldData1403() + { + return _insuranceJobRepositpry.RecoveryOldData1403(); + } + public OperationResult Create(CreateInsuranceJob command) { var opration = new OperationResult(); @@ -32,6 +47,10 @@ public class InsuranceJobApplication: IInsuranceJobApplication if (_insuranceJobRepositpry.Exists(x => x.InsuranceJobTitle == command.InsuranceJobTitle)) return opration.Failed("عنوان صنف و درجه تکراری است"); + + if (command.InsuranceJobItemId == 0) + return opration.Failed("بازه را انتخاب کنید"); + //if (_insuranceJobRepositpry.Exists(x => x.EconomicCode == command.EconomicCode)) // return opration.Failed("کد اقتصادی تکراری است"); @@ -116,9 +135,9 @@ public class InsuranceJobApplication: IInsuranceJobApplication return opration.Failed("ویرایش با خطا مواجه شد."); } } - public EditInsuranceJob GetDetails(long id) + public EditInsuranceJob GetDetails(long id, string year, string month) { - return _insuranceJobRepositpry.GetDetails(id); + return _insuranceJobRepositpry.GetDetails(id, year,month); } public List GetInsurancJob() diff --git a/CompanyManagment.Application/InsuranceListApplication.cs b/CompanyManagment.Application/InsuranceListApplication.cs index e75d1c7d..95d3f118 100644 --- a/CompanyManagment.Application/InsuranceListApplication.cs +++ b/CompanyManagment.Application/InsuranceListApplication.cs @@ -1680,6 +1680,7 @@ public class InsuranceListApplication: IInsuranceListApplication { double? result = 0; + string month = $"{startDateGr.ToFarsi()}".Substring(5, 2); //اگر مشاغل مقطوع بود و شغلش کارفرما بود // در جدول لیست بیمه قبلی چک شود try @@ -1726,7 +1727,7 @@ public class InsuranceListApplication: IInsuranceListApplication { var inJob = _insuranceJobItemRepository - .GetInsuranceJobItemByInsuranceJobId((long)workshop.InsuranceJobId); + .GetInsuranceJobItemByInsuranceJobId((long)workshop.InsuranceJobId,year, month); if (workshop.Population == "MoreThan500") { var max = inJob.MaxBy(x => x.PercentageMoreThan); @@ -1775,9 +1776,9 @@ public class InsuranceListApplication: IInsuranceListApplication else { - var searchModel = new InsuranceJobItemSearchModel(); - searchModel.InsuranceJobId = (long)insuranceJobId; - var JobItem = _insuranceJobItemRepository.GetInsuranceJobItemByInsuranceJobIdForFixedSalary((long)insuranceJobId, jobId); + var searchModel = new InsuranceJobItemSearchModel(); + searchModel.InsuranceJobId = (long)insuranceJobId; + var JobItem = _insuranceJobItemRepository.GetInsuranceJobItemByInsuranceJobIdForFixedSalary((long)insuranceJobId, jobId, year, month); if (JobItem != null && JobItem.Id != 0) { diff --git a/CompanyManagment.Application/LeftWorkApplication.cs b/CompanyManagment.Application/LeftWorkApplication.cs index 0abe9603..83cf6825 100644 --- a/CompanyManagment.Application/LeftWorkApplication.cs +++ b/CompanyManagment.Application/LeftWorkApplication.cs @@ -211,6 +211,14 @@ public class LeftWorkApplication : ILeftWorkApplication return _leftWorkRepository.search(searchModel); } + public List SearchCreateContract(LeftWorkSearchModel searchModel) + { + + return _leftWorkRepository.SearchCreateContract(searchModel); + } + + + public async Task> searchAsync(LeftWorkSearchModel searchModel) { var res = search(searchModel); diff --git a/CompanyManagment.EFCore/Mapping/InsuranceJobeItemMapping.cs b/CompanyManagment.EFCore/Mapping/InsuranceJobeItemMapping.cs index 4ec88dd2..70eb2640 100644 --- a/CompanyManagment.EFCore/Mapping/InsuranceJobeItemMapping.cs +++ b/CompanyManagment.EFCore/Mapping/InsuranceJobeItemMapping.cs @@ -11,6 +11,9 @@ public class InsuranceJobeItemMapping : IEntityTypeConfiguration x.id); + builder.Property(x => x.StartDate).IsRequired(false); + builder.Property(x => x.EndDate).IsRequired(false); + builder.HasOne(x => x.InsuranceJob) .WithMany(x => x.InsuranceJobItemList) .HasForeignKey(x => x.InsuranceJobId); diff --git a/CompanyManagment.EFCore/Migrations/20250517165553_add startEndToInsuranceJobItems.Designer.cs b/CompanyManagment.EFCore/Migrations/20250517165553_add startEndToInsuranceJobItems.Designer.cs new file mode 100644 index 00000000..cda3e53c --- /dev/null +++ b/CompanyManagment.EFCore/Migrations/20250517165553_add startEndToInsuranceJobItems.Designer.cs @@ -0,0 +1,9539 @@ +// +using System; +using CompanyManagment.EFCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace CompanyManagment.EFCore.Migrations +{ + [DbContext(typeof(CompanyContext))] + [Migration("20250517165553_add startEndToInsuranceJobItems")] + partial class addstartEndToInsuranceJobItems + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.10") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Company.Domain.AndroidApkVersionAgg.AndroidApkVersion", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("IsActive") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Title") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("VersionCode") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("VersionName") + .HasMaxLength(35) + .HasColumnType("nvarchar(35)"); + + b.HasKey("id"); + + b.ToTable("AndroidApkVersions", (string)null); + }); + + modelBuilder.Entity("Company.Domain.BankAgg.Bank", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BankLogoMediaId") + .HasColumnType("bigint"); + + b.Property("BankName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.ToTable("Banks", (string)null); + }); + + modelBuilder.Entity("Company.Domain.BillAgg.EntityBill", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Appointed") + .HasColumnType("nvarchar(max)"); + + b.Property("Contact") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("IsActiveString") + .HasColumnType("nvarchar(max)"); + + b.Property("ProcessingStage") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectBill") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.HasKey("id"); + + b.ToTable("TextManager_Bill", (string)null); + }); + + modelBuilder.Entity("Company.Domain.Board.Board", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BoardChairman") + .HasColumnType("nvarchar(max)"); + + b.Property("BoardType_Id") + .HasColumnType("int"); + + b.Property("Branch") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DisputeResolutionPetitionDate") + .HasColumnType("datetime2"); + + b.Property("ExpertReport") + .HasColumnType("nvarchar(max)"); + + b.Property("File_Id") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("BoardType_Id"); + + b.HasIndex("File_Id"); + + b.ToTable("Boards", (string)null); + }); + + modelBuilder.Entity("Company.Domain.BoardType.BoardType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Title") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("BoardTypes", (string)null); + }); + + modelBuilder.Entity("Company.Domain.ChapterAgg.EntityChapter", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Chapter") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("IsActiveString") + .HasColumnType("nvarchar(max)"); + + b.Property("Subtitle_Id") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("Subtitle_Id"); + + b.ToTable("TextManager_Chapter", (string)null); + }); + + modelBuilder.Entity("Company.Domain.CheckoutAgg.Checkout", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AbsenceDeduction") + .HasColumnType("float"); + + b.Property("AbsencePeriod") + .HasColumnType("float"); + + b.Property("AbsenceValue") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("ArchiveCode") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("AverageHoursPerDay") + .HasColumnType("float"); + + b.Property("BaseYearsPay") + .HasColumnType("float"); + + b.Property("BonusesPay") + .HasColumnType("float"); + + b.Property("ConsumableItems") + .HasColumnType("float"); + + b.Property("ContractEnd") + .HasColumnType("datetime2"); + + b.Property("ContractId") + .HasColumnType("bigint"); + + b.Property("ContractNo") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ContractStart") + .HasColumnType("datetime2"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("CreditLeaves") + .HasColumnType("float"); + + b.Property("DateOfBirth") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("EmployeeFullName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("FamilyAllowance") + .HasColumnType("float"); + + b.Property("FathersName") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("FridayPay") + .HasColumnType("float"); + + b.Property("FridayWorkValue") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("HasRollCall") + .HasColumnType("bit"); + + b.Property("HousingAllowance") + .HasColumnType("float"); + + b.Property("InstallmentDeduction") + .HasColumnType("float"); + + b.Property("InsuranceDeduction") + .HasColumnType("float"); + + b.Property("IsActiveString") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("LeaveCheckout") + .HasColumnType("bit"); + + b.Property("LeavePay") + .HasColumnType("float"); + + b.Property("MarriedAllowance") + .HasColumnType("float"); + + b.Property("MissionPay") + .HasColumnType("float"); + + b.Property("Month") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("MonthlySalary") + .HasColumnType("float"); + + b.Property("NationalCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("NightworkPay") + .HasColumnType("float"); + + b.Property("OverNightWorkValue") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("OverTimeWorkValue") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("OvertimePay") + .HasColumnType("float"); + + b.Property("PersonnelCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("RewardPay") + .HasColumnType("float"); + + b.Property("RotatingShiftValue") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("SalaryAidDeduction") + .HasColumnType("float"); + + b.Property("ShiftPay") + .HasColumnType("float"); + + b.Property("Signature") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("SumOfWorkingDays") + .HasMaxLength(6) + .HasColumnType("nvarchar(6)"); + + b.Property("TaxDeducation") + .HasColumnType("float"); + + b.Property("TotalClaims") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("TotalDayOfBunosesCompute") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("TotalDayOfLeaveCompute") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("TotalDayOfYearsCompute") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("TotalDeductions") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("TotalPayment") + .HasColumnType("float"); + + b.Property("WorkingHoursId") + .HasColumnType("bigint"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopName") + .HasMaxLength(70) + .HasColumnType("nvarchar(70)"); + + b.Property("Year") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)"); + + b.Property("YearsPay") + .HasColumnType("float"); + + b.HasKey("id"); + + b.HasIndex("WorkshopId"); + + b.ToTable("Checkouts", (string)null); + }); + + modelBuilder.Entity("Company.Domain.ClassifiedSalaryAgg.ClassifiedSalary", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EndDate") + .HasColumnType("datetime2"); + + b.Property("Group1") + .HasColumnType("float"); + + b.Property("Group10") + .HasColumnType("float"); + + b.Property("Group11") + .HasColumnType("float"); + + b.Property("Group12") + .HasColumnType("float"); + + b.Property("Group13") + .HasColumnType("float"); + + b.Property("Group14") + .HasColumnType("float"); + + b.Property("Group15") + .HasColumnType("float"); + + b.Property("Group16") + .HasColumnType("float"); + + b.Property("Group17") + .HasColumnType("float"); + + b.Property("Group18") + .HasColumnType("float"); + + b.Property("Group19") + .HasColumnType("float"); + + b.Property("Group2") + .HasColumnType("float"); + + b.Property("Group20") + .HasColumnType("float"); + + b.Property("Group3") + .HasColumnType("float"); + + b.Property("Group4") + .HasColumnType("float"); + + b.Property("Group5") + .HasColumnType("float"); + + b.Property("Group6") + .HasColumnType("float"); + + b.Property("Group7") + .HasColumnType("float"); + + b.Property("Group8") + .HasColumnType("float"); + + b.Property("Group9") + .HasColumnType("float"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("ClassifiedSalaries", (string)null); + }); + + modelBuilder.Entity("Company.Domain.ClientEmployeeWorkshopAgg.ClientEmployeeWorkshop", b => + { + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.HasKey("WorkshopId", "EmployeeId"); + + b.HasIndex("EmployeeId"); + + b.ToTable("ClientWorkshopEmployee", (string)null); + }); + + modelBuilder.Entity("Company.Domain.Contact2Agg.EntityContact", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("IsActiveString") + .HasColumnType("nvarchar(max)"); + + b.Property("NameContact") + .HasColumnType("nvarchar(max)"); + + b.Property("Signature") + .HasColumnType("nvarchar(max)"); + + b.HasKey("id"); + + b.ToTable("TextManager_Contact", (string)null); + }); + + modelBuilder.Entity("Company.Domain.ContarctingPartyAgg.PersonalContractingParty", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Address") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("AgentPhone") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ArchiveCode") + .HasColumnType("int"); + + b.Property("BlockTimes") + .HasColumnType("int"); + + b.Property("City") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DateOfBirth") + .HasColumnType("datetime2"); + + b.Property("FName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("FatherName") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("Gender") + .IsRequired() + .HasMaxLength(6) + .HasColumnType("nvarchar(6)"); + + b.Property("IdNumber") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("IdNumberSeri") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("IdNumberSerial") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("IsActiveString") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("IsAuthenticated") + .HasColumnType("bit"); + + b.Property("IsBlock") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("IsLegal") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("LName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("NationalId") + .IsRequired() + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("Nationalcode") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("Phone") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("RegisterId") + .IsRequired() + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("RepresentativeFullName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("RepresentativeId") + .HasColumnType("bigint"); + + b.Property("State") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("SureName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Zone") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.HasIndex("RepresentativeId"); + + b.ToTable("PersonalContractingParties", (string)null); + }); + + modelBuilder.Entity("Company.Domain.ContractAgg.Contract", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AgreementSalary") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ArchiveCode") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("ConsumableItems") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ContarctStart") + .HasColumnType("datetime2"); + + b.Property("ContractEnd") + .HasColumnType("datetime2"); + + b.Property("ContractNo") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("ContractPeriod") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.Property("ContractType") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DayliWage") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("EmployerId") + .HasColumnType("bigint"); + + b.Property("FamilyAllowance") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("GetWorkDate") + .HasColumnType("datetime2"); + + b.Property("HousingAllowance") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IsActiveString") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("JobType") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("JobTypeId") + .HasColumnType("bigint"); + + b.Property("MandatoryHoursid") + .HasColumnType("bigint"); + + b.Property("PersonnelCode") + .HasColumnType("bigint"); + + b.Property("SetContractDate") + .HasColumnType("datetime2"); + + b.Property("Signature") + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("WorkingHoursWeekly") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("WorkshopAddress1") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("WorkshopAddress2") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("WorkshopIds") + .HasColumnType("bigint"); + + b.Property("YearlySalaryId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("EmployeeId"); + + b.HasIndex("EmployerId"); + + b.HasIndex("JobTypeId"); + + b.HasIndex("MandatoryHoursid"); + + b.HasIndex("WorkshopIds"); + + b.HasIndex("YearlySalaryId"); + + b.ToTable("Contracts", (string)null); + }); + + modelBuilder.Entity("Company.Domain.ContractingPartyAccountAgg.ContractingPartyAccount", b => + { + b.Property("PersonalContractingPartyId") + .HasColumnType("bigint"); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.HasKey("PersonalContractingPartyId", "AccountId"); + + b.ToTable("ContractingPartyAccount", (string)null); + }); + + modelBuilder.Entity("Company.Domain.CrossJobAgg.CrossJob", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("CrossJobGuildId") + .HasColumnType("bigint"); + + b.Property("EquivalentRialOver") + .HasColumnType("bigint"); + + b.Property("EquivalentRialUnder") + .HasColumnType("bigint"); + + b.Property("SalaryRatioOver") + .HasColumnType("float"); + + b.Property("SalaryRatioUnder") + .HasColumnType("float"); + + b.HasKey("id"); + + b.HasIndex("CrossJobGuildId"); + + b.ToTable("CrossJobs", (string)null); + }); + + modelBuilder.Entity("Company.Domain.CrossJobGuildAgg.CrossJobGuild", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EconomicCode") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Year") + .HasMaxLength(4) + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("CrossJobGuilds", (string)null); + }); + + modelBuilder.Entity("Company.Domain.CrossJobItemsAgg.CrossJobItems", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("CrossJobId") + .HasColumnType("bigint"); + + b.Property("JobId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("CrossJobId"); + + b.HasIndex("JobId"); + + b.ToTable("CrossJobItems", (string)null); + }); + + modelBuilder.Entity("Company.Domain.CustomizeCheckoutAgg.CustomizeCheckout", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BaseYearsPay") + .HasColumnType("float"); + + b.Property("BonusesPay") + .HasColumnType("float"); + + b.Property("ContractEnd") + .HasColumnType("datetime2"); + + b.Property("ContractId") + .HasColumnType("bigint"); + + b.Property("ContractNo") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("ContractStart") + .HasColumnType("datetime2"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DailyWage") + .HasColumnType("float"); + + b.Property("DateOfBirth") + .HasColumnType("datetime2"); + + b.Property("EarlyExitDeduction") + .HasColumnType("float"); + + b.Property("EmployeeFName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("EmployeeLName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("FamilyAllowance") + .HasColumnType("float"); + + b.Property("FineAbsenceDeduction") + .HasColumnType("float"); + + b.Property("FineDeduction") + .HasColumnType("float"); + + b.Property("FridayPay") + .HasColumnType("float"); + + b.Property("InstallmentDeduction") + .HasColumnType("float"); + + b.Property("InsuranceDeduction") + .HasColumnType("float"); + + b.Property("LateToWorkDeduction") + .HasColumnType("float"); + + b.Property("LateToWorkValue") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("LeavePay") + .HasColumnType("float"); + + b.Property("MarriedAllowance") + .HasColumnType("float"); + + b.Property("MonthInt") + .HasColumnType("int"); + + b.Property("MonthlySalary") + .HasColumnType("float"); + + b.Property("NationalCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("NightWorkPay") + .HasColumnType("float"); + + b.Property("OverTimePay") + .HasColumnType("float"); + + b.Property("RewardPay") + .HasColumnType("float"); + + b.Property("SalaryAidDeduction") + .HasColumnType("float"); + + b.Property("SettingSalary") + .HasColumnType("float"); + + b.Property("ShiftPay") + .HasColumnType("float"); + + b.Property("ShiftStatus") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("SumOfWorkingDays") + .HasColumnType("nvarchar(max)"); + + b.Property("TaxDeduction") + .HasColumnType("float"); + + b.Property("TotalClaims") + .HasColumnType("nvarchar(max)"); + + b.Property("TotalDeductions") + .HasColumnType("nvarchar(max)"); + + b.Property("TotalPayment") + .HasColumnType("float"); + + b.Property("WorkshopFullName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("YearInt") + .HasColumnType("int"); + + b.HasKey("id"); + + b.HasIndex("EmployeeId"); + + b.HasIndex("WorkshopId"); + + b.ToTable("CustomizeCheckouts", (string)null); + }); + + modelBuilder.Entity("Company.Domain.CustomizeCheckoutTempAgg.CustomizeCheckoutTemp", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BaseYearsPay") + .HasColumnType("float"); + + b.Property("BonusesPay") + .HasColumnType("float"); + + b.Property("ContractEnd") + .HasColumnType("datetime2"); + + b.Property("ContractId") + .HasColumnType("bigint"); + + b.Property("ContractNo") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("ContractStart") + .HasColumnType("datetime2"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DailyWage") + .HasColumnType("float"); + + b.Property("DateOfBirth") + .HasColumnType("datetime2"); + + b.Property("EarlyExitDeduction") + .HasColumnType("float"); + + b.Property("EmployeeFName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("EmployeeLName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("FamilyAllowance") + .HasColumnType("float"); + + b.Property("FineAbsenceDeduction") + .HasColumnType("float"); + + b.Property("FineDeduction") + .HasColumnType("float"); + + b.Property("FridayPay") + .HasColumnType("float"); + + b.Property("InstallmentDeduction") + .HasColumnType("float"); + + b.Property("InsuranceDeduction") + .HasColumnType("float"); + + b.Property("LateToWorkDeduction") + .HasColumnType("float"); + + b.Property("LateToWorkValue") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("LeavePay") + .HasColumnType("float"); + + b.Property("MarriedAllowance") + .HasColumnType("float"); + + b.Property("MonthInt") + .HasColumnType("int"); + + b.Property("MonthlySalary") + .HasColumnType("float"); + + b.Property("NationalCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("NightWorkPay") + .HasColumnType("float"); + + b.Property("OverTimePay") + .HasColumnType("float"); + + b.Property("RewardPay") + .HasColumnType("float"); + + b.Property("SalaryAidDeduction") + .HasColumnType("float"); + + b.Property("SettingSalary") + .HasColumnType("float"); + + b.Property("ShiftPay") + .HasColumnType("float"); + + b.Property("ShiftStatus") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("SumOfWorkingDays") + .HasColumnType("nvarchar(max)"); + + b.Property("TaxDeduction") + .HasColumnType("float"); + + b.Property("TotalClaims") + .HasColumnType("nvarchar(max)"); + + b.Property("TotalDeductions") + .HasColumnType("nvarchar(max)"); + + b.Property("TotalPayment") + .HasColumnType("float"); + + b.Property("WorkshopFullName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("YearInt") + .HasColumnType("int"); + + b.HasKey("id"); + + b.HasIndex("EmployeeId"); + + b.HasIndex("WorkshopId"); + + b.ToTable("CustomizeCheckoutTemps", (string)null); + }); + + modelBuilder.Entity("Company.Domain.CustomizeWorkshopEmployeeSettingsAgg.Entities.CustomizeWorkshopEmployeeSettings", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("CustomizeWorkshopGroupSettingId") + .HasColumnType("bigint"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("FridayWork") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("HolidayWork") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("IsSettingChanged") + .HasColumnType("bit"); + + b.Property("IsShiftChanged") + .HasColumnType("bit"); + + b.Property("LeavePermittedDays") + .HasColumnType("int"); + + b.Property("Salary") + .HasColumnType("float"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopShiftStatus") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.HasKey("id"); + + b.HasIndex("CustomizeWorkshopGroupSettingId"); + + b.ToTable("CustomizeWorkshopEmployeeSettings", (string)null); + }); + + modelBuilder.Entity("Company.Domain.CustomizeWorkshopGroupSettingsAgg.Entities.CustomizeWorkshopGroupSettings", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("CustomizeWorkshopSettingId") + .HasColumnType("bigint"); + + b.Property("FridayWork") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("GroupName") + .HasMaxLength(120) + .HasColumnType("nvarchar(120)"); + + b.Property("HolidayWork") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("IsSettingChange") + .HasColumnType("bit"); + + b.Property("IsShiftChange") + .HasColumnType("bit"); + + b.Property("LeavePermittedDays") + .HasColumnType("int"); + + b.Property("MainGroup") + .HasColumnType("bit"); + + b.Property("Salary") + .HasColumnType("float"); + + b.Property("WorkshopShiftStatus") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.HasKey("id"); + + b.HasIndex("CustomizeWorkshopSettingId"); + + b.ToTable("CustomizeWorkshopGroupSettings", (string)null); + }); + + modelBuilder.Entity("Company.Domain.CustomizeWorkshopSettingsAgg.Entities.CustomizeWorkshopSettings", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BaseYearsPayInEndOfYear") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("BonusesPaysInEndOfMonth") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Currency") + .HasColumnType("int"); + + b.Property("EndTimeOffSet") + .HasColumnType("time"); + + b.Property("FridayWork") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("HolidayWork") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("LeavePermittedDays") + .HasColumnType("int"); + + b.Property("MaxMonthDays") + .HasColumnType("int"); + + b.Property("OverTimeThresholdMinute") + .HasColumnType("int"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopShiftStatus") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.HasKey("id"); + + b.HasIndex("WorkshopId") + .IsUnique(); + + b.ToTable("CustomizeWorkshopSettings", (string)null); + }); + + modelBuilder.Entity("Company.Domain.DateSalaryAgg.DateSalary", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EndDateFa") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("EndDateGr") + .HasColumnType("datetime2"); + + b.Property("StartDateFa") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("StartDateGr") + .HasColumnType("datetime2"); + + b.Property("Year") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)"); + + b.HasKey("id"); + + b.ToTable("DateSalaries", (string)null); + }); + + modelBuilder.Entity("Company.Domain.DateSalaryItemAgg.DateSalaryItem", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DateSalaryId") + .HasColumnType("bigint"); + + b.Property("Percent") + .HasColumnType("float"); + + b.Property("PercentageId") + .HasColumnType("bigint"); + + b.Property("Salary") + .HasColumnType("float"); + + b.HasKey("id"); + + b.HasIndex("DateSalaryId"); + + b.HasIndex("PercentageId"); + + b.ToTable("DateSalaryItems", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EmployeeAccountAgg.EmployeeAccount", b => + { + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.HasKey("EmployeeId", "AccountId"); + + b.ToTable("EmployeeAccounts", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EmployeeAgg.Employee", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Address") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("BankBranch") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("BankCardNumber") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("City") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DateOfBirth") + .HasColumnType("datetime2"); + + b.Property("DateOfIssue") + .HasColumnType("datetime2"); + + b.Property("EservicePassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("EserviceUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("FName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("FatherName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("FieldOfStudy") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Gender") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("IdNumber") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("IdNumberSeri") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("IdNumberSerial") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("InsuranceCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("InsuranceHistoryByMonth") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("InsuranceHistoryByYear") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("IsActiveString") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("IsAuthorized") + .HasColumnType("bit"); + + b.Property("LName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("LevelOfEducation") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("MaritalStatus") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("MclsPassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("MclsUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("MilitaryService") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("NationalCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("Nationality") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("NumberOfChildren") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("OfficePhone") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Phone") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("PlaceOfIssue") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("SanaPassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("SanaUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("State") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("TaxOfficeUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("TaxOfficepassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.ToTable("Employees", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EmployeeAuthorizeTempAgg.EmployeeAuthorizeTemp", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BirthDate") + .HasColumnType("datetime2"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("FName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("FatherName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Gender") + .IsRequired() + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("IdNumber") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("IdNumberSeri") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("IdNumberSerial") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("LName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("NationalCode") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.HasKey("id"); + + b.HasIndex("NationalCode") + .IsUnique() + .HasFilter("[NationalCode] IS NOT NULL"); + + b.ToTable("EmployeeAuthorizeTemps", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EmployeeBankInformationAgg.EmployeeBankInformation", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BankAccountNumber") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("BankId") + .HasColumnType("bigint"); + + b.Property("CardNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("IsDefault") + .HasColumnType("bit"); + + b.Property("ShebaNumber") + .HasMaxLength(26) + .HasColumnType("nvarchar(26)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("BankId"); + + b.HasIndex("EmployeeId"); + + b.ToTable("EmployeeBankInformationSet", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EmployeeChildrenAgg.EmployeeChildren", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DateOfBirth") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("FName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("ParentNationalCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("id"); + + b.HasIndex("EmployeeId"); + + b.ToTable("EmployeeChildren", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EmployeeClientTempAgg.EmployeeClientTemp", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeFullName") + .HasColumnType("nvarchar(max)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("MaritalStatus") + .HasColumnType("nvarchar(max)"); + + b.Property("StartWorkDate") + .HasColumnType("datetime2"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("EmployeeClientTemps"); + }); + + modelBuilder.Entity("Company.Domain.EmployeeComputeOptionsAgg.EmployeeComputeOptions", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BonusesOptions") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ComputeOptions") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("YearsOptions") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.ToTable("EmployeeComputeOptions", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EmployeeDocumentItemAgg.EmployeeDocumentItem", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ConfirmationDateTime") + .HasColumnType("datetime2"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DocumentLabel") + .IsRequired() + .HasMaxLength(31) + .HasColumnType("nvarchar(31)"); + + b.Property("DocumentStatus") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("EmployeeDocumentId") + .HasColumnType("bigint"); + + b.Property("EmployeeDocumentsAdminViewId") + .HasColumnType("bigint"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("MediaId") + .HasColumnType("bigint"); + + b.Property("RejectionReason") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ReviewedById") + .HasMaxLength(120) + .HasColumnType("bigint"); + + b.Property("UploaderId") + .HasColumnType("bigint"); + + b.Property("UploaderRoleId") + .HasColumnType("bigint"); + + b.Property("UploaderType") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("EmployeeDocumentId"); + + b.HasIndex("EmployeeDocumentsAdminViewId"); + + b.ToTable("EmployeeDocumentItems", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EmployeeDocumentsAdminSelectionAgg.EmployeeDocumentsAdminSelection", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("EmployeeId") + .IsUnique(); + + b.ToTable("EmployeeDocumentsAdminSelection", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EmployeeDocumentsAgg.EmployeeDocuments", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("Gender") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("HasRejectedItems") + .HasColumnType("bit"); + + b.Property("IsConfirmed") + .HasColumnType("bit"); + + b.Property("IsSentToChecker") + .HasColumnType("bit"); + + b.Property("RequiredItemsSubmittedByClient") + .HasColumnType("bit"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("EmployeeId"); + + b.HasIndex("WorkshopId"); + + b.ToTable("EmployeeDocuments", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EmployeeInsurancListDataAgg.EmployeeInsurancListData", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BaseYears") + .HasColumnType("float"); + + b.Property("BenefitsIncludedContinuous") + .HasColumnType("float"); + + b.Property("BenefitsIncludedNonContinuous") + .HasColumnType("float"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DailyWage") + .HasColumnType("float"); + + b.Property("DailyWagePlusBaseYears") + .HasColumnType("float"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("FamilyAllowance") + .HasColumnType("float"); + + b.Property("IncludeStatus") + .HasColumnType("bit"); + + b.Property("InsuranceListId") + .HasColumnType("bigint"); + + b.Property("InsuranceShare") + .HasColumnType("float"); + + b.Property("JobId") + .HasColumnType("bigint"); + + b.Property("LeftWorkDate") + .HasColumnType("datetime2(7)"); + + b.Property("MarriedAllowance") + .HasColumnType("float"); + + b.Property("MonthlyBenefits") + .HasColumnType("float"); + + b.Property("MonthlyBenefitsIncluded") + .HasColumnType("float"); + + b.Property("MonthlySalary") + .HasColumnType("float"); + + b.Property("OverTimePay") + .HasColumnType("float"); + + b.Property("StartWorkDate") + .HasColumnType("datetime2"); + + b.Property("WorkingDays") + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("EmployeeInsurancListData", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EmployeeInsuranceRecordAgg.EmployeeInsuranceRecord", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DateOfEnd") + .HasColumnType("datetime2"); + + b.Property("DateOfStart") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("WorkShopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("EmployeeId"); + + b.HasIndex("WorkShopId"); + + b.ToTable("EmployeeInsuranceRecord", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EmployerAccountAgg.EmployerAccount", b => + { + b.Property("EmployerId") + .HasColumnType("bigint"); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.HasKey("EmployerId", "AccountId"); + + b.ToTable("EmployerAccounts", (string)null); + }); + + modelBuilder.Entity("Company.Domain.Evidence.Evidence", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BoardType_Id") + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("File_Id") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("BoardType_Id"); + + b.HasIndex("File_Id"); + + b.ToTable("Evidences", (string)null); + }); + + modelBuilder.Entity("Company.Domain.EvidenceDetail.EvidenceDetail", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Day") + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("Evidence_Id") + .HasColumnType("bigint"); + + b.Property("FromDate") + .HasColumnType("datetime2"); + + b.Property("Title") + .HasColumnType("nvarchar(max)"); + + b.Property("ToDate") + .HasColumnType("datetime2"); + + b.HasKey("id"); + + b.HasIndex("Evidence_Id"); + + b.ToTable("EvidenceDetails", (string)null); + }); + + modelBuilder.Entity("Company.Domain.File1.File1", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ArchiveNo") + .HasColumnType("bigint"); + + b.Property("Client") + .HasColumnType("int"); + + b.Property("ClientVisitDate") + .HasColumnType("datetime2"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("FileClass") + .HasColumnType("nvarchar(max)"); + + b.Property("HasMandate") + .HasColumnType("int"); + + b.Property("ProceederReference") + .HasColumnType("nvarchar(max)"); + + b.Property("Reqester") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("Summoned") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("Files", (string)null); + }); + + modelBuilder.Entity("Company.Domain.FileAlert.FileAlert", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AdditionalDeadline") + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("FileState_Id") + .HasColumnType("bigint"); + + b.Property("File_Id") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("FileState_Id"); + + b.HasIndex("File_Id"); + + b.ToTable("File_Alerts", (string)null); + }); + + modelBuilder.Entity("Company.Domain.FileAndFileEmployerAgg.FileAndFileEmployer", b => + { + b.Property("FileId") + .HasColumnType("bigint"); + + b.Property("FileEmployerId") + .HasColumnType("bigint"); + + b.HasKey("FileId", "FileEmployerId"); + + b.HasIndex("FileEmployerId"); + + b.ToTable("FileAndFileEmployers", (string)null); + }); + + modelBuilder.Entity("Company.Domain.FileEmployeeAgg.FileEmployee", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DateOfBirth") + .HasColumnType("datetime2"); + + b.Property("EservicePassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("EserviceUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("FName") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("FatherName") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("FieldOfStudy") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Gender") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("IdNumber") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("InsuranceCode") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("IsActive") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("LName") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("LevelOfEducation") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("MaritalStatus") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("MclsPassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("MclsUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("NationalCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("OfficePhone") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Phone") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("RepresentativeFullName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("RepresentativeId") + .HasColumnType("bigint"); + + b.Property("SanaPassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("SanaUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("TaxOfficeUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("TaxOfficepassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.HasIndex("RepresentativeId"); + + b.ToTable("FileEmployee", (string)null); + }); + + modelBuilder.Entity("Company.Domain.FileEmployerAgg.FileEmployer", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DateOfBirth") + .HasColumnType("datetime2"); + + b.Property("EservicePassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("EserviceUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("FName") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("FieldOfStudy") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("FullName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Gender") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("IdNumber") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("InsuranceWorkshopCode") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("IsActive") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("IsLegal") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("LName") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("LegalName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("LevelOfEducation") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("MaritalStatus") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("MclsPassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("MclsUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("NationalCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("NationalId") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("OfficePhone") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Phone") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("RegisterId") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("RepresentativeFullName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("RepresentativeId") + .HasColumnType("bigint"); + + b.Property("SanaPassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("SanaUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("TaxOfficeUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("TaxOfficepassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.HasIndex("RepresentativeId"); + + b.ToTable("FileEmployer", (string)null); + }); + + modelBuilder.Entity("Company.Domain.FileState.FileState", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("FileTiming_Id") + .HasColumnType("bigint"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("Title") + .HasColumnType("nvarchar(max)"); + + b.HasKey("id"); + + b.HasIndex("FileTiming_Id"); + + b.ToTable("File_States", (string)null); + }); + + modelBuilder.Entity("Company.Domain.FileTiming.FileTiming", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Deadline") + .HasColumnType("int"); + + b.Property("Tips") + .HasColumnType("nvarchar(max)"); + + b.Property("Title") + .HasColumnType("nvarchar(max)"); + + b.HasKey("id"); + + b.ToTable("File_Timings", (string)null); + }); + + modelBuilder.Entity("Company.Domain.FileTitle.FileTitle", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Title") + .HasColumnType("nvarchar(max)"); + + b.Property("Type") + .HasColumnType("nvarchar(max)"); + + b.HasKey("id"); + + b.ToTable("File_Titles", (string)null); + }); + + modelBuilder.Entity("Company.Domain.FinancialStatmentAgg.FinancialStatment", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ContractingPartyId") + .HasColumnType("bigint"); + + b.Property("ContractingPartyName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.HasKey("id"); + + b.ToTable("FinancialStatments", (string)null); + }); + + modelBuilder.Entity("Company.Domain.FinancialTransactionAgg.FinancialTransaction", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Balance") + .HasColumnType("float"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Creditor") + .HasColumnType("float"); + + b.Property("Deptor") + .HasColumnType("float"); + + b.Property("Description") + .HasMaxLength(600) + .HasColumnType("nvarchar(600)"); + + b.Property("DescriptionOption") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("FinancialStatementId") + .HasColumnType("bigint"); + + b.Property("MessageText") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("SentSms") + .HasColumnType("bit"); + + b.Property("SentSmsDateFa") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("TdateFa") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("TdateGr") + .HasColumnType("datetime2"); + + b.Property("TypeOfTransaction") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("id"); + + b.HasIndex("FinancialStatementId"); + + b.ToTable("FinancialTransactions", (string)null); + }); + + modelBuilder.Entity("Company.Domain.FineAgg.Fine", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Amount") + .HasColumnType("float"); + + b.Property("CreatedByAccountId") + .HasColumnType("bigint"); + + b.Property("CreatedByUserType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("FineDate") + .HasColumnType("datetime2"); + + b.Property("IsActive") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("LastModifiedByAccountId") + .HasColumnType("bigint"); + + b.Property("LastModifiedByUserType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Title") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("Fines", (string)null); + }); + + modelBuilder.Entity("Company.Domain.FineSubjectAgg.FineSubject", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Amount") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Title") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("FineSubjects", (string)null); + }); + + modelBuilder.Entity("Company.Domain.GroupPlanAgg.GroupPlan", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AnnualSalary") + .HasColumnType("float"); + + b.Property("BaseSalary") + .HasColumnType("float"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("GroupNo") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.Property("JobSalary") + .HasColumnType("float"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopPlanId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("WorkshopPlanId"); + + b.ToTable("GroupPlans", (string)null); + }); + + modelBuilder.Entity("Company.Domain.GroupPlanJobItemAgg.GroupPlanJobItem", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("GroupNo") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.Property("GroupPlanId") + .HasColumnType("bigint"); + + b.Property("JobId") + .HasColumnType("bigint"); + + b.Property("JobName") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopPlanId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("GroupPlanId"); + + b.ToTable("GroupPlanJobItems", (string)null); + }); + + modelBuilder.Entity("Company.Domain.HolidayAgg.Holiday", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Year") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)"); + + b.HasKey("id"); + + b.ToTable("Holidays", (string)null); + }); + + modelBuilder.Entity("Company.Domain.HolidayItemAgg.HolidayItem", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("HolidayId") + .HasColumnType("bigint"); + + b.Property("HolidayYear") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)"); + + b.Property("Holidaydate") + .HasColumnType("datetime2"); + + b.HasKey("id"); + + b.HasIndex("HolidayId"); + + b.ToTable("Holidayitems", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InstitutionContractAgg.InstitutionContract", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Address") + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("City") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("ContractAmount") + .HasColumnType("float"); + + b.Property("ContractDateFa") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("ContractDateGr") + .HasColumnType("datetime2"); + + b.Property("ContractEndFa") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("ContractEndGr") + .HasColumnType("datetime2"); + + b.Property("ContractNo") + .HasMaxLength(40) + .HasColumnType("nvarchar(40)"); + + b.Property("ContractStartFa") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("ContractStartGr") + .HasColumnType("datetime2"); + + b.Property("ContractingPartyId") + .HasColumnType("bigint"); + + b.Property("ContractingPartyName") + .HasMaxLength(80) + .HasColumnType("nvarchar(80)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DailyCompenseation") + .HasColumnType("float"); + + b.Property("Description") + .HasMaxLength(10000) + .HasColumnType("nvarchar(max)"); + + b.Property("EmployeeManualCount") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("ExtensionNo") + .HasColumnType("int"); + + b.Property("HasValueAddedTax") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("IsActiveString") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Obligation") + .HasColumnType("float"); + + b.Property("OfficialCompany") + .HasMaxLength(12) + .HasColumnType("nvarchar(12)"); + + b.Property("RepresentativeId") + .HasColumnType("bigint"); + + b.Property("RepresentativeName") + .HasMaxLength(80) + .HasColumnType("nvarchar(80)"); + + b.Property("Signature") + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("State") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("TotalAmount") + .HasColumnType("float"); + + b.Property("TypeOfContract") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("ValueAddedTax") + .HasColumnType("float"); + + b.Property("WorkshopManualCount") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.HasKey("id"); + + b.ToTable("InstitutionContracts", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InstitutionContractContactInfoAgg.InstitutionContractContactInfo", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("FnameLname") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("InstitutionContractId") + .HasColumnType("bigint"); + + b.Property("PhoneNumber") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("PhoneType") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("Position") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("SendSms") + .HasColumnType("bit"); + + b.HasKey("id"); + + b.HasIndex("InstitutionContractId"); + + b.ToTable("InstitutinContractContactInfo", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InstitutionPlanAgg.InstitutionPlan", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BaseContractAmont") + .HasColumnType("float"); + + b.Property("CountPerson") + .HasColumnType("int"); + + b.Property("FinalContractAmont") + .HasColumnType("float"); + + b.Property("IncreasePercentage") + .HasColumnType("float"); + + b.HasKey("id"); + + b.ToTable("InstitutionPlan", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InstitutionPlanAgg.PlanPercentage", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ContractAndCheckoutInPersonPercent") + .HasColumnType("int"); + + b.Property("ContractAndCheckoutPercent") + .HasColumnType("int"); + + b.Property("CustomizeCheckoutPercent") + .HasColumnType("int"); + + b.Property("InsuranceInPersonPercent") + .HasColumnType("int"); + + b.Property("InsurancePercent") + .HasColumnType("int"); + + b.Property("RollCallPercent") + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("PlanPercentage", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InsurancJobAgg.InsuranceJob", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EconomicCode") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("InsuranceJobTitle") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Year") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)"); + + b.Property("YearlySalaryId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("InsuranceJobs", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InsurancWorkshopInfoAgg.InsuranceWorkshopInfo", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Address") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("AgreementNumber") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployerName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("InsuranceCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("ListNumber") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.HasIndex("WorkshopId") + .IsUnique(); + + b.ToTable("InsuranceWorkshopInformation", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InsuranceAgg.Insurance", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Address") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployerStr") + .HasColumnType("nvarchar(max)"); + + b.Property("ListNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("Month") + .HasMaxLength(2) + .HasColumnType("int"); + + b.Property("WorkShopId") + .HasColumnType("bigint"); + + b.Property("WorkShopStr") + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasMaxLength(4) + .HasColumnType("int"); + + b.HasKey("id"); + + b.HasIndex("WorkShopId"); + + b.ToTable("Insurances", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InsuranceEmployeeInfoAgg.InsuranceEmployeeInfo", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DateOfBirth") + .HasColumnType("datetime2"); + + b.Property("DateOfIssue") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("FName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("FatherName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Gender") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("IdNumber") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("InsuranceCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("LName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("NationalCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("PlaceOfIssue") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.HasIndex("EmployeeId") + .IsUnique(); + + b.ToTable("InsuranceEmployeeInformation", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InsuranceJobAndJobsAgg.InsuranceJobAndJobs", b => + { + b.Property("JobId") + .HasColumnType("bigint"); + + b.Property("InsuranceJobItemId") + .HasColumnType("bigint"); + + b.HasKey("JobId", "InsuranceJobItemId"); + + b.HasIndex("InsuranceJobItemId"); + + b.ToTable("InsuranceJobAndJobs", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InsuranceJobItemAgg.InsuranceJobItem", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EndDate") + .HasColumnType("datetime2"); + + b.Property("InsuranceJobId") + .HasColumnType("bigint"); + + b.Property("PercentageLessThan") + .HasColumnType("float"); + + b.Property("PercentageMoreThan") + .HasColumnType("float"); + + b.Property("SalaeyLessThan") + .HasColumnType("float"); + + b.Property("SalaryMoreThan") + .HasColumnType("float"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.HasKey("id"); + + b.HasIndex("InsuranceJobId"); + + b.ToTable("InsuranceJobItems", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InsuranceListAgg.InsuranceList", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ConfirmSentlist") + .HasColumnType("bit"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DifficultJobsInsuranc") + .HasColumnType("float"); + + b.Property("EmployerShare") + .HasColumnType("float"); + + b.Property("EndDate") + .HasColumnType("datetime2"); + + b.Property("Included") + .HasColumnType("float"); + + b.Property("IncludedAndNotIncluded") + .HasColumnType("float"); + + b.Property("InsuredShare") + .HasColumnType("float"); + + b.Property("Month") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.Property("SumOfBaseYears") + .HasColumnType("float"); + + b.Property("SumOfBenefitsIncluded") + .HasColumnType("float"); + + b.Property("SumOfDailyWage") + .HasColumnType("float"); + + b.Property("SumOfDailyWagePlusBaseYears") + .HasColumnType("float"); + + b.Property("SumOfEmployees") + .HasColumnType("int"); + + b.Property("SumOfMarriedAllowance") + .HasColumnType("float"); + + b.Property("SumOfSalaries") + .HasColumnType("float"); + + b.Property("SumOfWorkingDays") + .HasColumnType("int"); + + b.Property("UnEmploymentInsurance") + .HasColumnType("float"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("Year") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)"); + + b.HasKey("id"); + + b.ToTable("InsuranceLists", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InsuranceWorkshopAgg.InsuranceListWorkshop", b => + { + b.Property("InsurancListId") + .HasColumnType("bigint"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("InsurancListId", "WorkshopId"); + + b.HasIndex("WorkshopId"); + + b.ToTable("InsuranceListWorkshops", (string)null); + }); + + modelBuilder.Entity("Company.Domain.InsuranceYearlySalaryAgg.InsuranceYearlySalary", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EndDate") + .HasColumnType("datetime2"); + + b.Property("Group1") + .HasColumnType("float"); + + b.Property("Group10") + .HasColumnType("float"); + + b.Property("Group11") + .HasColumnType("float"); + + b.Property("Group12") + .HasColumnType("float"); + + b.Property("Group13") + .HasColumnType("float"); + + b.Property("Group14") + .HasColumnType("float"); + + b.Property("Group15") + .HasColumnType("float"); + + b.Property("Group16") + .HasColumnType("float"); + + b.Property("Group17") + .HasColumnType("float"); + + b.Property("Group18") + .HasColumnType("float"); + + b.Property("Group19") + .HasColumnType("float"); + + b.Property("Group2") + .HasColumnType("float"); + + b.Property("Group20") + .HasColumnType("float"); + + b.Property("Group21") + .HasColumnType("float"); + + b.Property("Group22") + .HasColumnType("float"); + + b.Property("Group23") + .HasColumnType("float"); + + b.Property("Group24") + .HasColumnType("float"); + + b.Property("Group25") + .HasColumnType("float"); + + b.Property("Group26") + .HasColumnType("float"); + + b.Property("Group27") + .HasColumnType("float"); + + b.Property("Group28") + .HasColumnType("float"); + + b.Property("Group29") + .HasColumnType("float"); + + b.Property("Group3") + .HasColumnType("float"); + + b.Property("Group30") + .HasColumnType("float"); + + b.Property("Group4") + .HasColumnType("float"); + + b.Property("Group5") + .HasColumnType("float"); + + b.Property("Group6") + .HasColumnType("float"); + + b.Property("Group7") + .HasColumnType("float"); + + b.Property("Group8") + .HasColumnType("float"); + + b.Property("Group9") + .HasColumnType("float"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("InsuranceYearlySalaries", (string)null); + }); + + modelBuilder.Entity("Company.Domain.JobAgg.Job", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("JobCode") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("JobName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.HasKey("id"); + + b.ToTable("Jobs", (string)null); + }); + + modelBuilder.Entity("Company.Domain.LeaveAgg.Leave", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Decription") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("EmployeeFullName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("EndLeave") + .HasColumnType("datetime2"); + + b.Property("HasShiftDuration") + .HasColumnType("bit"); + + b.Property("IsAccepted") + .HasColumnType("bit"); + + b.Property("LeaveHourses") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("LeaveType") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("Month") + .HasColumnType("int"); + + b.Property("PaidLeaveType") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("ShiftDuration") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("StartLeave") + .HasColumnType("datetime2"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("Leave", (string)null); + }); + + modelBuilder.Entity("Company.Domain.LeftWorkAgg.LeftWork", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AddBonusesPay") + .HasColumnType("bit"); + + b.Property("AddLeavePay") + .HasColumnType("bit"); + + b.Property("AddYearsPay") + .HasColumnType("bit"); + + b.Property("BonusesOptions") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ComputeOptions") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeFullName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("IncludeStatus") + .HasColumnType("bit"); + + b.Property("JobId") + .HasColumnType("bigint"); + + b.Property("LeftWorkDate") + .HasColumnType("datetime2"); + + b.Property("StartWorkDate") + .HasColumnType("datetime2"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.HasKey("id"); + + b.HasIndex("EmployeeId"); + + b.HasIndex("WorkshopId"); + + b.ToTable("LeftWork", (string)null); + }); + + modelBuilder.Entity("Company.Domain.LeftWorkInsuranceAgg.LeftWorkInsurance", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeFullName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("IncludeStatus") + .HasColumnType("bit"); + + b.Property("JobId") + .HasColumnType("bigint"); + + b.Property("LeftWorkDate") + .HasColumnType("datetime2(7)"); + + b.Property("StartWorkDate") + .HasColumnType("datetime2"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.HasKey("id"); + + b.HasIndex("EmployeeId"); + + b.HasIndex("WorkshopId"); + + b.ToTable("LeftWorkInsurances", (string)null); + }); + + modelBuilder.Entity("Company.Domain.LeftWorkTempAgg.LeftWorkTemp", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("JobId") + .HasColumnType("bigint"); + + b.Property("LastDayStanding") + .HasColumnType("datetime2"); + + b.Property("LeftWork") + .HasColumnType("datetime2"); + + b.Property("LeftWorkId") + .HasColumnType("bigint"); + + b.Property("LeftWorkType") + .HasColumnType("int"); + + b.Property("StartWork") + .HasColumnType("datetime2"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("LeftWorkTemps"); + }); + + modelBuilder.Entity("Company.Domain.LoanAgg.Entities.Loan", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Amount") + .HasColumnType("float"); + + b.Property("AmountPerMonth") + .HasColumnType("float"); + + b.Property("Count") + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("CreatedByAccountId") + .HasColumnType("bigint"); + + b.Property("CreatedByUserType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("GetRounded") + .HasColumnType("bit"); + + b.Property("LoanGrantDate") + .HasColumnType("datetime2"); + + b.Property("StartInstallmentPayment") + .HasColumnType("datetime2"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("Loan", (string)null); + }); + + modelBuilder.Entity("Company.Domain.MandatoryHoursAgg.MandatoryHours", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Aban") + .HasColumnType("float"); + + b.Property("AbanFridays") + .HasColumnType("int"); + + b.Property("AbanHolidays") + .HasColumnType("int"); + + b.Property("AbanMonadatoryDays") + .HasColumnType("int"); + + b.Property("Azar") + .HasColumnType("float"); + + b.Property("AzarFridays") + .HasColumnType("int"); + + b.Property("AzarHolidays") + .HasColumnType("int"); + + b.Property("AzarMonadatoryDays") + .HasColumnType("int"); + + b.Property("Bahman") + .HasColumnType("float"); + + b.Property("BahmanFridays") + .HasColumnType("int"); + + b.Property("BahmanHolidays") + .HasColumnType("int"); + + b.Property("BahmanMonadatoryDays") + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Dey") + .HasColumnType("float"); + + b.Property("DeyFridays") + .HasColumnType("int"); + + b.Property("DeyHolidays") + .HasColumnType("int"); + + b.Property("DeyMonadatoryDays") + .HasColumnType("int"); + + b.Property("Esfand") + .HasColumnType("float"); + + b.Property("EsfandFridays") + .HasColumnType("int"); + + b.Property("EsfandHolidays") + .HasColumnType("int"); + + b.Property("EsfandMonadatoryDays") + .HasColumnType("int"); + + b.Property("Farvardin") + .HasColumnType("float"); + + b.Property("FarvardinFridays") + .HasColumnType("int"); + + b.Property("FarvardinHolidays") + .HasColumnType("int"); + + b.Property("FarvardinMonadatoryDays") + .HasColumnType("int"); + + b.Property("Khordad") + .HasColumnType("float"); + + b.Property("KhordadFridays") + .HasColumnType("int"); + + b.Property("KhordadHolidays") + .HasColumnType("int"); + + b.Property("KhordadMonadatoryDays") + .HasColumnType("int"); + + b.Property("Mehr") + .HasColumnType("float"); + + b.Property("MehrFridays") + .HasColumnType("int"); + + b.Property("MehrHolidays") + .HasColumnType("int"); + + b.Property("MehrMonadatoryDays") + .HasColumnType("int"); + + b.Property("Mordad") + .HasColumnType("float"); + + b.Property("MordadFridays") + .HasColumnType("int"); + + b.Property("MordadHolidays") + .HasColumnType("int"); + + b.Property("MordadMonadatoryDays") + .HasColumnType("int"); + + b.Property("Ordibehesht") + .HasColumnType("float"); + + b.Property("OrdibeheshtFridays") + .HasColumnType("int"); + + b.Property("OrdibeheshtHolidays") + .HasColumnType("int"); + + b.Property("OrdibeheshtMonadatoryDays") + .HasColumnType("int"); + + b.Property("Shahrivar") + .HasColumnType("float"); + + b.Property("ShahrivarFridays") + .HasColumnType("int"); + + b.Property("ShahrivarHolidays") + .HasColumnType("int"); + + b.Property("ShahrivarMonadatoryDays") + .HasColumnType("int"); + + b.Property("Tir") + .HasColumnType("float"); + + b.Property("TirFridays") + .HasColumnType("int"); + + b.Property("TirHolidays") + .HasColumnType("int"); + + b.Property("TirMonadatoryDays") + .HasColumnType("int"); + + b.Property("Year") + .HasMaxLength(4) + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("MandatoryHours", (string)null); + }); + + modelBuilder.Entity("Company.Domain.MasterPenaltyTitle.MasterPenaltyTitle", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Day") + .HasColumnType("nvarchar(max)"); + + b.Property("FromDate") + .HasColumnType("datetime2"); + + b.Property("MasterPetition_Id") + .HasColumnType("bigint"); + + b.Property("PaidAmount") + .HasColumnType("nvarchar(max)"); + + b.Property("RemainingAmount") + .HasColumnType("nvarchar(max)"); + + b.Property("Title") + .HasColumnType("nvarchar(max)"); + + b.Property("ToDate") + .HasColumnType("datetime2"); + + b.HasKey("id"); + + b.HasIndex("MasterPetition_Id"); + + b.ToTable("Master_PenaltyTitles", (string)null); + }); + + modelBuilder.Entity("Company.Domain.MasterPetition.MasterPetition", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BoardType_Id") + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("File_Id") + .HasColumnType("bigint"); + + b.Property("MasterName") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkHistoryDescreption") + .HasColumnType("nvarchar(max)"); + + b.HasKey("id"); + + b.HasIndex("BoardType_Id"); + + b.HasIndex("File_Id"); + + b.ToTable("Master_Petitions", (string)null); + }); + + modelBuilder.Entity("Company.Domain.MasterWorkHistory.MasterWorkHistory", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("FromDate") + .HasColumnType("datetime2"); + + b.Property("MasterPetition_Id") + .HasColumnType("bigint"); + + b.Property("ToDate") + .HasColumnType("datetime2"); + + b.Property("WorkingHoursPerDay") + .HasColumnType("int"); + + b.Property("WorkingHoursPerWeek") + .HasColumnType("int"); + + b.HasKey("id"); + + b.HasIndex("MasterPetition_Id"); + + b.ToTable("Master_WorkHistories", (string)null); + }); + + modelBuilder.Entity("Company.Domain.ModuleAgg.EntityModule", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("IsActiveString") + .HasColumnType("nvarchar(max)"); + + b.Property("NameSubModule") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("id"); + + b.ToTable("TextManager_Module", (string)null); + }); + + modelBuilder.Entity("Company.Domain.ModuleTextManagerAgg.EntityModuleTextManager", b => + { + b.Property("TextManagerId") + .HasColumnType("bigint"); + + b.Property("ModuleId") + .HasColumnType("bigint"); + + b.HasKey("TextManagerId", "ModuleId"); + + b.HasIndex("ModuleId"); + + b.ToTable("TextManager_ModuleTextManager", (string)null); + }); + + modelBuilder.Entity("Company.Domain.OriginalTitleAgg.EntityOriginalTitle", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("IsActiveString") + .HasColumnType("nvarchar(max)"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.HasKey("id"); + + b.ToTable("TextManager_OriginalTitle", (string)null); + }); + + modelBuilder.Entity("Company.Domain.PaymentToEmployeeAgg.PaymentToEmployee", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("Month") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("Year") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)"); + + b.HasKey("id"); + + b.ToTable("PaymentToEmployees", (string)null); + }); + + modelBuilder.Entity("Company.Domain.PaymentToEmployeeItemAgg.PaymentToEmployeeItem", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BankCheckNumber") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CashDescription") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DestinationBankAccountNumber") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("DestinationBankName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("PayDate") + .HasColumnType("datetime2"); + + b.Property("Payment") + .HasColumnType("float"); + + b.Property("PaymentMetod") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("PaymentTitle") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("PaymentToEmployeeId") + .HasColumnType("bigint"); + + b.Property("SourceBankAccountNumber") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("SourceBankName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TypeDestinationBankNumber") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TypeSourceBankNumber") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("PaymentToEmployeeId"); + + b.ToTable("PaymentToEmployeeItems", (string)null); + }); + + modelBuilder.Entity("Company.Domain.PenaltyTitle.PenaltyTitle", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Day") + .HasColumnType("nvarchar(max)"); + + b.Property("FromDate") + .HasColumnType("datetime2(7)"); + + b.Property("PaidAmount") + .HasColumnType("nvarchar(max)"); + + b.Property("Petition_Id") + .HasColumnType("bigint"); + + b.Property("RemainingAmount") + .HasColumnType("nvarchar(max)"); + + b.Property("Title") + .HasColumnType("nvarchar(max)"); + + b.Property("ToDate") + .HasColumnType("datetime2(7)"); + + b.HasKey("id"); + + b.HasIndex("Petition_Id"); + + b.ToTable("PenaltyTitles", (string)null); + }); + + modelBuilder.Entity("Company.Domain.PercentageAgg.Percentage", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Percent") + .HasColumnType("float"); + + b.HasKey("id"); + + b.ToTable("Percentages", (string)null); + }); + + modelBuilder.Entity("Company.Domain.PersonnelCodeAgg.PersonnelCodeDomain", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("PersonnelCode") + .HasColumnType("bigint"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("EmployeeId"); + + b.HasIndex("WorkshopId"); + + b.ToTable("PersonnelCodes", (string)null); + }); + + modelBuilder.Entity("Company.Domain.Petition.Petition", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BoardType_Id") + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("File_Id") + .HasColumnType("bigint"); + + b.Property("NotificationPetitionDate") + .HasColumnType("datetime2"); + + b.Property("PetitionIssuanceDate") + .HasColumnType("datetime2"); + + b.Property("PetitionNo") + .HasColumnType("nvarchar(max)"); + + b.Property("TotalPenalty") + .HasColumnType("nvarchar(max)"); + + b.Property("TotalPenaltyTitles") + .HasColumnType("nvarchar(max)"); + + b.Property("WorkHistoryDescreption") + .HasColumnType("nvarchar(max)"); + + b.HasKey("id"); + + b.HasIndex("BoardType_Id"); + + b.HasIndex("File_Id"); + + b.ToTable("Petitions", (string)null); + }); + + modelBuilder.Entity("Company.Domain.ProceedingSession.ProceedingSession", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Board_Id") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Date") + .HasColumnType("datetime2"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("Time") + .HasColumnType("nvarchar(max)"); + + b.HasKey("id"); + + b.HasIndex("Board_Id"); + + b.ToTable("ProceedingSessions", (string)null); + }); + + modelBuilder.Entity("Company.Domain.RepresentativeAgg.Representative", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Address") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("AgentPhone") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("FName") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("FullName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IdNumber") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("IsActive") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("IsLegal") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("LName") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("LegalName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("NationalId") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("Nationalcode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("Phone") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("RegisterId") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.HasKey("id"); + + b.ToTable("Representative", (string)null); + }); + + modelBuilder.Entity("Company.Domain.RewardAgg.Reward", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Amount") + .HasColumnType("float"); + + b.Property("CreatedByAccountId") + .HasColumnType("bigint"); + + b.Property("CreatedByUserType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("ntext"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("GrantDate") + .HasColumnType("datetime2"); + + b.Property("IsActive") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("LastModifiedByAccountId") + .HasColumnType("bigint"); + + b.Property("LastModifiedByUserType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("RewardType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Title") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("Rewards", (string)null); + }); + + modelBuilder.Entity("Company.Domain.RollCallAgg.RollCall", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BreakTimeSpan") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EarlyEntryDuration") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("EarlyExitDuration") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("EmployeeFullName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("EndDate") + .HasColumnType("datetime2"); + + b.Property("FridayWorkTimeSpan") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("LateEntryDuration") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("LateExitDuration") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Month") + .HasColumnType("int"); + + b.Property("NightWorkTimeSpan") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("RollCallModifyType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ShiftDate") + .HasColumnType("datetime2"); + + b.Property("ShiftDurationTimeSpan") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("ShiftType") + .IsRequired() + .HasMaxLength(22) + .HasColumnType("nvarchar(22)"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("RollCall", (string)null); + }); + + modelBuilder.Entity("Company.Domain.RollCallEmployeeAgg.RollCallEmployee", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("EmployeeFullName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("FName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("HasChangedName") + .HasColumnType("bit"); + + b.Property("HasUploadedImage") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("IsActiveString") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("LName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("RollCallEmployees", (string)null); + }); + + modelBuilder.Entity("Company.Domain.RollCallEmployeeStatusAgg.RollCallEmployeeStatus", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("EndDate") + .HasColumnType("datetime2"); + + b.Property("RollCallEmployeeId") + .HasColumnType("bigint"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.HasKey("id"); + + b.HasIndex("RollCallEmployeeId"); + + b.ToTable("RollCallEmployeesStatus"); + }); + + modelBuilder.Entity("Company.Domain.RollCallPlanAgg.RollCallPlan", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BaseAmont") + .HasColumnType("float"); + + b.Property("FinalAmont") + .HasColumnType("float"); + + b.Property("IncreasePercentage") + .HasColumnType("float"); + + b.Property("MaxPersonValid") + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("RollCallPlans", (string)null); + }); + + modelBuilder.Entity("Company.Domain.RollCallServiceAgg.RollCallService", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("Amount") + .HasColumnType("float"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("CustomizeCheckoutAmount") + .HasColumnType("float"); + + b.Property("CustomizeCheckoutServiceEnd") + .HasColumnType("datetime2"); + + b.Property("CustomizeCheckoutServiceStart") + .HasColumnType("datetime2"); + + b.Property("Duration") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.Property("EndService") + .HasColumnType("datetime2"); + + b.Property("HasCustomizeCheckoutService") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("IsActiveString") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("MaxPersonValid") + .HasColumnType("int"); + + b.Property("ServiceType") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("StartService") + .HasColumnType("datetime2"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("WorkshopId"); + + b.ToTable("RollCallServices", (string)null); + }); + + modelBuilder.Entity("Company.Domain.SalaryAidAgg.SalaryAid", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Amount") + .HasColumnType("float"); + + b.Property("CalculationDate") + .HasColumnType("datetime2"); + + b.Property("CalculationMonth") + .HasColumnType("int"); + + b.Property("CalculationYear") + .HasColumnType("int"); + + b.Property("CreatedByAccountId") + .HasColumnType("bigint"); + + b.Property("CreatedByUserType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("LastModifiedByAccountId") + .HasColumnType("bigint"); + + b.Property("LastModifiedByUserType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("SalaryAidDateTime") + .HasColumnType("datetime2"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("SalaryAids", (string)null); + }); + + modelBuilder.Entity("Company.Domain.SmsResultAgg.SmsResult", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ContractingPartyName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ContractingPatyId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("InstitutionContractId") + .HasColumnType("bigint"); + + b.Property("MessageId") + .HasColumnType("int"); + + b.Property("Mobile") + .HasMaxLength(12) + .HasColumnType("nvarchar(12)"); + + b.Property("Status") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("TypeOfSms") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.ToTable("SmsResults", (string)null); + }); + + modelBuilder.Entity("Company.Domain.SubtitleAgg.EntitySubtitle", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EntitySubtitleid") + .HasColumnType("bigint"); + + b.Property("IsActiveString") + .HasColumnType("nvarchar(max)"); + + b.Property("OriginalTitle_Id") + .HasColumnType("bigint"); + + b.Property("Subtitle") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.HasKey("id"); + + b.HasIndex("EntitySubtitleid"); + + b.HasIndex("OriginalTitle_Id"); + + b.ToTable("TextManager_Subtitle", (string)null); + }); + + modelBuilder.Entity("Company.Domain.TaxJobCategoryAgg.TaxJobCategory", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("JobCategoryCode") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("JobCategoryName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.ToTable("TaxJobCategory", (string)null); + }); + + modelBuilder.Entity("Company.Domain.TaxLeftWorkCategoryAgg.TaxLeftWorkCategory", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("BudgetLawExceptions") + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("Country") + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("CurrencyType") + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("EmployeeName") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EmploymentLocationStatus") + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("ExchangeRate") + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("InsuranceBranch") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("InsuranceName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("JobCategoryCode") + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("JobCategoryId") + .HasColumnType("bigint"); + + b.Property("JobTitle") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("PaymentType") + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("RetirementDate") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("TaxExempt") + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("TypeOfEmployment") + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("TypeOfInsurance") + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopName") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.HasKey("id"); + + b.HasIndex("WorkshopId"); + + b.ToTable("TaxLeftWorkCategory", (string)null); + }); + + modelBuilder.Entity("Company.Domain.TaxLeftWorkItemAgg.TaxLeftWorkItem", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("LeftWork") + .HasColumnType("datetime2"); + + b.Property("StartWork") + .HasColumnType("datetime2"); + + b.Property("TaxLeftWorkCategoryId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("TaxLeftWorkCategoryId"); + + b.ToTable("TaxLeftWorkItem", (string)null); + }); + + modelBuilder.Entity("Company.Domain.TemporaryClientRegistrationAgg.ContractingPartyTemp", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Address") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("City") + .HasMaxLength(35) + .HasColumnType("nvarchar(35)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DateOfBirth") + .HasColumnType("datetime2"); + + b.Property("FName") + .IsRequired() + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("FatherName") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("Gender") + .IsRequired() + .HasMaxLength(6) + .HasColumnType("nvarchar(6)"); + + b.Property("IdNumber") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("IdNumberSeri") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("IdNumberSerial") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("LName") + .IsRequired() + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("NationalCode") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("Phone") + .HasMaxLength(12) + .HasColumnType("nvarchar(12)"); + + b.Property("State") + .HasMaxLength(35) + .HasColumnType("nvarchar(35)"); + + b.HasKey("id"); + + b.ToTable("ContractingPartyTemp", (string)null); + }); + + modelBuilder.Entity("Company.Domain.TemporaryClientRegistrationAgg.InstitutionContractTemp", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ContractEndGr") + .HasColumnType("datetime2"); + + b.Property("ContractStartGr") + .HasColumnType("datetime2"); + + b.Property("ContractingPartyTempId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("MessageId") + .HasColumnType("int"); + + b.Property("OfficialCompany") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("PaymentModel") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("PeriodModel") + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("RegistrationStatus") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("SendVerifyCodeTime") + .HasColumnType("datetime2"); + + b.Property("TotalPayment") + .HasColumnType("float"); + + b.Property("ValueAddedTax") + .HasColumnType("float"); + + b.Property("VerifyCode") + .HasMaxLength(6) + .HasColumnType("nvarchar(6)"); + + b.Property("VerifyCodeEndTime") + .HasColumnType("datetime2"); + + b.HasKey("id"); + + b.ToTable("InstitutionContractTemps", (string)null); + }); + + modelBuilder.Entity("Company.Domain.TemporaryClientRegistrationAgg.WorkshopServicesTemp", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CountPerson") + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ServiceName") + .HasMaxLength(40) + .HasColumnType("nvarchar(40)"); + + b.Property("WorkshopTempId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("WorkshopTempId"); + + b.ToTable("WorkshopServicesTemps", (string)null); + }); + + modelBuilder.Entity("Company.Domain.TemporaryClientRegistrationAgg.WorkshopTemp", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ContractingPartyTempId") + .HasColumnType("bigint"); + + b.Property("CountPerson") + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("WorkshopName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("WorkshopServicesAmount") + .HasColumnType("float"); + + b.HasKey("id"); + + b.ToTable("WorkshopTemps", (string)null); + }); + + modelBuilder.Entity("Company.Domain.TextManagerAgg.EntityTextManager", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Chapter_Id") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DateTextManager") + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("IsActiveString") + .HasColumnType("nvarchar(max)"); + + b.Property("NoteNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("NumberTextManager") + .HasColumnType("nvarchar(max)"); + + b.Property("OriginalTitle_Id") + .HasColumnType("bigint"); + + b.Property("Paragraph") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectTextManager") + .HasColumnType("nvarchar(max)"); + + b.Property("Subtitle_Id") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("TextManager_TextManager", (string)null); + }); + + modelBuilder.Entity("Company.Domain.WorkHistory.WorkHistory", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("FromDate") + .HasColumnType("datetime2"); + + b.Property("Petition_Id") + .HasColumnType("bigint"); + + b.Property("ToDate") + .HasColumnType("datetime2"); + + b.Property("WorkingHoursPerDay") + .HasColumnType("int"); + + b.Property("WorkingHoursPerWeek") + .HasColumnType("int"); + + b.HasKey("id"); + + b.HasIndex("Petition_Id"); + + b.ToTable("WorkHistories", (string)null); + }); + + modelBuilder.Entity("Company.Domain.WorkingHoursAgg.WorkingHours", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ContractId") + .HasColumnType("bigint"); + + b.Property("ContractNo") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("NumberOfFriday") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("NumberOfWorkingDays") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("OverNightWorkH") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("OverNightWorkM") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.Property("OverTimeWorkH") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("OverTimeWorkM") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.Property("ShiftWork") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.Property("TotalHoursesH") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("TotalHoursesM") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.Property("WeeklyWorkingTime") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("id"); + + b.HasIndex("ContractId"); + + b.ToTable("WorkingHours", (string)null); + }); + + modelBuilder.Entity("Company.Domain.WorkingHoursItemsAgg.WorkingHoursItems", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ComplexEnd") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("ComplexStart") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DayOfWork") + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("End1") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("End2") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("End3") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("RestTime") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Start1") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Start2") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Start3") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("WeekNumber") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("WorkingHoursId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("WorkingHoursId"); + + b.ToTable("WorkingHoursItems", (string)null); + }); + + modelBuilder.Entity("Company.Domain.WorkingHoursTempAgg.WorkingHoursTemp", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("ShiftWork") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.Property("WorkShopAddress2") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("WorkingHoursTemp", (string)null); + }); + + modelBuilder.Entity("Company.Domain.WorkingHoursTempItemAgg.WorkingHoursTempItem", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ComplexEnd") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("ComplexStart") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DayOfWork") + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("End1") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("End2") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("RestTime") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Start1") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Start2") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("WeekNumber") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("WorkingHoursTempId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("WorkingHoursTempId"); + + b.ToTable("WorkingHoursTempItem", (string)null); + }); + + modelBuilder.Entity("Company.Domain.WorkshopAccountAgg.WorkshopAccount", b => + { + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("ContractAndCheckout") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Insurance") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("IsActiveSting") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Tax") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.HasKey("WorkshopId", "AccountId"); + + b.ToTable("WorkshopeAccounts", (string)null); + }); + + modelBuilder.Entity("Company.Domain.WorkshopAgg.Workshop", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AddBonusesPay") + .HasColumnType("bit"); + + b.Property("AddLeavePay") + .HasColumnType("bit"); + + b.Property("AddYearsPay") + .HasColumnType("bit"); + + b.Property("Address") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("AgentName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("AgentPhone") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("AgreementNumber") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("ArchiveCode") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("BonusesOptions") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("City") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("ComputeOptions") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ContractTerm") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("FixedSalary") + .HasColumnType("bit"); + + b.Property("HasRollCallFreeVip") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("InsuranceCheckoutFamilyAllowance") + .HasColumnType("bit"); + + b.Property("InsuranceCheckoutOvertime") + .HasColumnType("bit"); + + b.Property("InsuranceCode") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("InsuranceJobId") + .HasColumnType("bigint"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("IsActiveString") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("IsClassified") + .HasColumnType("bit"); + + b.Property("IsOldContract") + .HasColumnType("bit"); + + b.Property("Population") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("State") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("TotalPaymentHide") + .HasColumnType("bit"); + + b.Property("TypeOfContract") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("TypeOfInsuranceSend") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("TypeOfOwnership") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("WorkshopFullName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("WorkshopHolidayWorking") + .HasColumnType("bit"); + + b.Property("WorkshopName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("WorkshopSureName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("YearsOptions") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ZoneName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.ToTable("Workshops", (string)null); + }); + + modelBuilder.Entity("Company.Domain.WorkshopEmployerAgg.WorkshopEmployer", b => + { + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("EmployerId") + .HasColumnType("bigint"); + + b.HasKey("WorkshopId", "EmployerId"); + + b.HasIndex("EmployerId"); + + b.ToTable("WorkshopeEmployers", (string)null); + }); + + modelBuilder.Entity("Company.Domain.WorkshopPlanAgg.WorkshopPlan", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Designer") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("DesignerPhone") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("ExecutionDateFa") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("ExecutionDateGr") + .HasColumnType("datetime2"); + + b.Property("IncludingDateFa") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("IncludingDateGr") + .HasColumnType("datetime2"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("WorkshopPlan", (string)null); + }); + + modelBuilder.Entity("Company.Domain.WorkshopPlanEmployeeAgg.WorkshopPlanEmployee", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EmployeeFullName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopPlanId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("WorkshopPlanId"); + + b.ToTable("WorkshopPlanEmployees", (string)null); + }); + + modelBuilder.Entity("Company.Domain.WorkshopSubAccountAgg.WorkshopSubAccount", b => + { + b.Property("SubAccountId") + .HasColumnType("bigint"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("IsActive") + .HasMaxLength(5) + .HasColumnType("int"); + + b.HasKey("SubAccountId", "WorkshopId"); + + b.HasIndex("WorkshopId"); + + b.ToTable("WorkshopSubAccounts", (string)null); + }); + + modelBuilder.Entity("Company.Domain.YearlySalaryAgg.YearlySalary", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ConnectionId") + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("EndDate") + .HasColumnType("datetime2"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.Property("Year") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("id"); + + b.ToTable("YearlySalariess", (string)null); + }); + + modelBuilder.Entity("Company.Domain.YearlySalaryItemsAgg.YearlySalaryItem", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ItemName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("ItemValue") + .HasColumnType("float"); + + b.Property("ParentConnectionId") + .HasColumnType("int"); + + b.Property("ValueType") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("YearlySalaryId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("YearlySalaryId"); + + b.ToTable("YearlyItems", (string)null); + }); + + modelBuilder.Entity("Company.Domain.YearlysSalaryTitleAgg.YearlySalaryTitle", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Title1") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Title10") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Title2") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Title3") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Title4") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Title5") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Title6") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Title7") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Title8") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Title9") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.HasKey("id"); + + b.ToTable("YearlySalaryTitles", (string)null); + }); + + modelBuilder.Entity("Company.Domain.ZoneAgg.Zone", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CityId") + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ZoneName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.ToTable("Zones", (string)null); + }); + + modelBuilder.Entity("Company.Domain.empolyerAgg.Employer", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Address") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("AgentPhone") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ContractingPartyId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DateOfBirth") + .HasColumnType("datetime2"); + + b.Property("DateOfIssue") + .HasColumnType("datetime2"); + + b.Property("EmployerLName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("EmployerNo") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("EservicePassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("EserviceUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("FName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("FatherName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("FullName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Gender") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("IdNumber") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("IsLegal") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("LName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("MclsPassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("MclsUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("NationalId") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("Nationalcode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("Nationality") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Phone") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("PlaceOfIssue") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("RegisterId") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b.Property("SanaPassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("SanaUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("TaxOfficeUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("TaxOfficepassword") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.HasIndex("ContractingPartyId"); + + b.ToTable("Employers", (string)null); + }); + + modelBuilder.Entity("EmployerWorkshop", b => + { + b.Property("EmployersListid") + .HasColumnType("bigint"); + + b.Property("WorkshopsListid") + .HasColumnType("bigint"); + + b.HasKey("EmployersListid", "WorkshopsListid"); + + b.HasIndex("WorkshopsListid"); + + b.ToTable("EmployerWorkshop"); + }); + + modelBuilder.Entity("Company.Domain.Board.Board", b => + { + b.HasOne("Company.Domain.BoardType.BoardType", "BoardType") + .WithMany("BoardsList") + .HasForeignKey("BoardType_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.File1.File1", "File1") + .WithMany("BoardsList") + .HasForeignKey("File_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("BoardType"); + + b.Navigation("File1"); + }); + + modelBuilder.Entity("Company.Domain.ChapterAgg.EntityChapter", b => + { + b.HasOne("Company.Domain.SubtitleAgg.EntitySubtitle", "EntitySubtitle") + .WithMany("Chapters") + .HasForeignKey("Subtitle_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntitySubtitle"); + }); + + modelBuilder.Entity("Company.Domain.CheckoutAgg.Checkout", b => + { + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("Checkouts") + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.ClientEmployeeWorkshopAgg.ClientEmployeeWorkshop", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithMany("ClientEmployeeWorkshopList") + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("ClientEmployeeWorkshopList") + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.ContarctingPartyAgg.PersonalContractingParty", b => + { + b.HasOne("Company.Domain.RepresentativeAgg.Representative", "Representative") + .WithMany("ContractingParties") + .HasForeignKey("RepresentativeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Representative"); + }); + + modelBuilder.Entity("Company.Domain.ContractAgg.Contract", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithMany("Contracts") + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.empolyerAgg.Employer", "Employer") + .WithMany("Contracts") + .HasForeignKey("EmployerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.JobAgg.Job", "Job") + .WithMany("ContractsList") + .HasForeignKey("JobTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.MandatoryHoursAgg.MandatoryHours", null) + .WithMany("Contracts") + .HasForeignKey("MandatoryHoursid"); + + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("Contracts2") + .HasForeignKey("WorkshopIds") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("Company.Domain.YearlySalaryAgg.YearlySalary", "YearlySalary") + .WithMany("Contracts") + .HasForeignKey("YearlySalaryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + + b.Navigation("Employer"); + + b.Navigation("Job"); + + b.Navigation("Workshop"); + + b.Navigation("YearlySalary"); + }); + + modelBuilder.Entity("Company.Domain.ContractingPartyAccountAgg.ContractingPartyAccount", b => + { + b.HasOne("Company.Domain.ContarctingPartyAgg.PersonalContractingParty", "PersonalContractingParty") + .WithMany() + .HasForeignKey("PersonalContractingPartyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PersonalContractingParty"); + }); + + modelBuilder.Entity("Company.Domain.CrossJobAgg.CrossJob", b => + { + b.HasOne("Company.Domain.CrossJobGuildAgg.CrossJobGuild", "CrossJobGuild") + .WithMany("CrossJobList") + .HasForeignKey("CrossJobGuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CrossJobGuild"); + }); + + modelBuilder.Entity("Company.Domain.CrossJobItemsAgg.CrossJobItems", b => + { + b.HasOne("Company.Domain.CrossJobAgg.CrossJob", "CrossJob") + .WithMany("CrossJobItemsList") + .HasForeignKey("CrossJobId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.JobAgg.Job", "Job") + .WithMany("CrossJobItemsList") + .HasForeignKey("JobId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CrossJob"); + + b.Navigation("Job"); + }); + + modelBuilder.Entity("Company.Domain.CustomizeCheckoutAgg.CustomizeCheckout", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithMany("CustomizeCheckouts") + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("CustomizeCheckouts") + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.CustomizeRotatingShift", "CustomizeRotatingShifts", b1 => + { + b1.Property("CustomizeCheckoutid") + .HasColumnType("bigint"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.HasKey("CustomizeCheckoutid", "Id"); + + b1.ToTable("CustomizeCheckouts_CustomizeRotatingShifts"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.IrregularShift", "IrregularShift", b1 => + { + b1.Property("CustomizeCheckoutid") + .HasColumnType("bigint"); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.Property("WorkshopIrregularShifts") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b1.HasKey("CustomizeCheckoutid"); + + b1.ToTable("CustomizeCheckouts"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutid"); + }); + + b.OwnsMany("Company.Domain.CustomizeCheckoutAgg.ValueObjects.CustomizeCheckoutRegularShift", "RegularShifts", b1 => + { + b1.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("id")); + + b1.Property("CreationDate") + .HasColumnType("datetime2"); + + b1.Property("CustomizeCheckoutid") + .HasColumnType("bigint"); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("Placement") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.HasKey("id"); + + b1.HasIndex("CustomizeCheckoutid"); + + b1.ToTable("CustomizeCheckouts_RegularShifts"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutid"); + }); + + b.OwnsMany("Company.Domain.CustomizeCheckoutAgg.ValueObjects.CustomizeCheckoutFine", "CheckoutFines", b1 => + { + b1.Property("CustomizeCheckoutid") + .HasColumnType("bigint"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("Amount") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b1.Property("CreationDate") + .HasColumnType("datetime2"); + + b1.Property("EntityId") + .HasColumnType("bigint"); + + b1.Property("FineDateFa") + .HasMaxLength(12) + .HasColumnType("nvarchar(12)"); + + b1.Property("FineDateGr") + .HasColumnType("datetime2"); + + b1.Property("IsActive") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b1.Property("Title") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b1.HasKey("CustomizeCheckoutid", "Id"); + + b1.ToTable("CustomizeCheckoutFine"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutid"); + }); + + b.OwnsMany("Company.Domain.CustomizeCheckoutAgg.ValueObjects.CustomizeCheckoutLoanInstallments", "CustomizeCheckoutLoanInstallments", b1 => + { + b1.Property("CustomizeCheckoutid") + .HasColumnType("bigint"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("AmountForMonth") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b1.Property("EntityId") + .HasColumnType("bigint"); + + b1.Property("IsActive") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b1.Property("LoanAmount") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b1.Property("LoanRemaining") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b1.Property("Month") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b1.Property("Year") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)"); + + b1.HasKey("CustomizeCheckoutid", "Id"); + + b1.ToTable("CustomizeCheckoutLoanInstallments"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutid"); + }); + + b.OwnsMany("Company.Domain.CustomizeCheckoutAgg.ValueObjects.CustomizeCheckoutReward", "CustomizeCheckoutRewards", b1 => + { + b1.Property("CustomizeCheckoutid") + .HasColumnType("bigint"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("Amount") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b1.Property("Description") + .HasColumnType("ntext"); + + b1.Property("EntityId") + .HasColumnType("bigint"); + + b1.Property("GrantDate") + .HasColumnType("datetime2"); + + b1.Property("GrantDateFa") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b1.Property("IsActive") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b1.Property("Title") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b1.HasKey("CustomizeCheckoutid", "Id"); + + b1.ToTable("CustomizeCheckoutReward"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutid"); + }); + + b.OwnsMany("Company.Domain.CustomizeCheckoutAgg.ValueObjects.CustomizeCheckoutSalaryAid", "CustomizeCheckoutSalaryAids", b1 => + { + b1.Property("CustomizeCheckoutid") + .HasColumnType("bigint"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("Amount") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b1.Property("CalculationDateTime") + .HasColumnType("datetime2"); + + b1.Property("CalculationDateTimeFa") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b1.Property("EntityId") + .HasColumnType("bigint"); + + b1.Property("SalaryAidDateTime") + .HasColumnType("datetime2"); + + b1.Property("SalaryAidDateTimeFa") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b1.HasKey("CustomizeCheckoutid", "Id"); + + b1.ToTable("CustomizeCheckoutSalaryAid"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutid"); + }); + + b.Navigation("CheckoutFines"); + + b.Navigation("CustomizeCheckoutLoanInstallments"); + + b.Navigation("CustomizeCheckoutRewards"); + + b.Navigation("CustomizeCheckoutSalaryAids"); + + b.Navigation("CustomizeRotatingShifts"); + + b.Navigation("Employee"); + + b.Navigation("IrregularShift"); + + b.Navigation("RegularShifts"); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.CustomizeCheckoutTempAgg.CustomizeCheckoutTemp", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithMany() + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany() + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.CustomizeRotatingShift", "CustomizeRotatingShifts", b1 => + { + b1.Property("CustomizeCheckoutTempid") + .HasColumnType("bigint"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.HasKey("CustomizeCheckoutTempid", "Id"); + + b1.ToTable("CustomizeCheckoutTemps_CustomizeRotatingShifts"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutTempid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.IrregularShift", "IrregularShift", b1 => + { + b1.Property("CustomizeCheckoutTempid") + .HasColumnType("bigint"); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.Property("WorkshopIrregularShifts") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b1.HasKey("CustomizeCheckoutTempid"); + + b1.ToTable("CustomizeCheckoutTemps"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutTempid"); + }); + + b.OwnsMany("Company.Domain.CustomizeCheckoutAgg.ValueObjects.CustomizeCheckoutRegularShift", "RegularShifts", b1 => + { + b1.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("id")); + + b1.Property("CreationDate") + .HasColumnType("datetime2"); + + b1.Property("CustomizeCheckoutTempid") + .HasColumnType("bigint"); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("Placement") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.HasKey("id"); + + b1.HasIndex("CustomizeCheckoutTempid"); + + b1.ToTable("CustomizeCheckoutTemps_RegularShifts"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutTempid"); + }); + + b.OwnsMany("Company.Domain.CustomizeCheckoutTempAgg.ValueObjects.CustomizeCheckoutTempFine", "CheckoutFines", b1 => + { + b1.Property("CustomizeCheckoutTempid") + .HasColumnType("bigint"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("Amount") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b1.Property("CreationDate") + .HasColumnType("datetime2"); + + b1.Property("EntityId") + .HasColumnType("bigint"); + + b1.Property("FineDateFa") + .HasMaxLength(12) + .HasColumnType("nvarchar(12)"); + + b1.Property("FineDateGr") + .HasColumnType("datetime2"); + + b1.Property("IsActive") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b1.Property("Title") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b1.HasKey("CustomizeCheckoutTempid", "Id"); + + b1.ToTable("CustomizeCheckoutTempFine"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutTempid"); + }); + + b.OwnsMany("Company.Domain.CustomizeCheckoutTempAgg.ValueObjects.CustomizeCheckoutTempLoanInstallments", "CustomizeCheckoutLoanInstallments", b1 => + { + b1.Property("CustomizeCheckoutTempid") + .HasColumnType("bigint"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("AmountForMonth") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b1.Property("EntityId") + .HasColumnType("bigint"); + + b1.Property("IsActive") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b1.Property("LoanAmount") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b1.Property("LoanRemaining") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b1.Property("Month") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b1.Property("Year") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)"); + + b1.HasKey("CustomizeCheckoutTempid", "Id"); + + b1.ToTable("CustomizeCheckoutTempLoanInstallments"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutTempid"); + }); + + b.OwnsMany("Company.Domain.CustomizeCheckoutTempAgg.ValueObjects.CustomizeCheckoutTempReward", "CustomizeCheckoutRewards", b1 => + { + b1.Property("CustomizeCheckoutTempid") + .HasColumnType("bigint"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("Amount") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b1.Property("Description") + .HasColumnType("ntext"); + + b1.Property("EntityId") + .HasColumnType("bigint"); + + b1.Property("GrantDate") + .HasColumnType("datetime2"); + + b1.Property("GrantDateFa") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b1.Property("IsActive") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b1.Property("Title") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b1.HasKey("CustomizeCheckoutTempid", "Id"); + + b1.ToTable("CustomizeCheckoutTempReward"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutTempid"); + }); + + b.OwnsMany("Company.Domain.CustomizeCheckoutTempAgg.ValueObjects.CustomizeCheckoutTempSalaryAid", "CustomizeCheckoutSalaryAids", b1 => + { + b1.Property("CustomizeCheckoutTempid") + .HasColumnType("bigint"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("Amount") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b1.Property("CalculationDateTime") + .HasColumnType("datetime2"); + + b1.Property("CalculationDateTimeFa") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b1.Property("EntityId") + .HasColumnType("bigint"); + + b1.Property("SalaryAidDateTime") + .HasColumnType("datetime2"); + + b1.Property("SalaryAidDateTimeFa") + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b1.HasKey("CustomizeCheckoutTempid", "Id"); + + b1.ToTable("CustomizeCheckoutTempSalaryAid"); + + b1.WithOwner() + .HasForeignKey("CustomizeCheckoutTempid"); + }); + + b.Navigation("CheckoutFines"); + + b.Navigation("CustomizeCheckoutLoanInstallments"); + + b.Navigation("CustomizeCheckoutRewards"); + + b.Navigation("CustomizeCheckoutSalaryAids"); + + b.Navigation("CustomizeRotatingShifts"); + + b.Navigation("Employee"); + + b.Navigation("IrregularShift"); + + b.Navigation("RegularShifts"); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.CustomizeWorkshopEmployeeSettingsAgg.Entities.CustomizeWorkshopEmployeeSettings", b => + { + b.HasOne("Company.Domain.CustomizeWorkshopGroupSettingsAgg.Entities.CustomizeWorkshopGroupSettings", "CustomizeWorkshopGroupSettings") + .WithMany("CustomizeWorkshopEmployeeSettingsCollection") + .HasForeignKey("CustomizeWorkshopGroupSettingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsMany("Company.Domain.CustomizeWorkshopEmployeeSettingsAgg.Entities.CustomizeWorkshopEmployeeSettingsShift", "CustomizeWorkshopEmployeeSettingsShifts", b1 => + { + b1.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("id")); + + b1.Property("CreationDate") + .HasColumnType("datetime2"); + + b1.Property("CustomizeWorkshopEmployeeSettingsId") + .HasColumnType("bigint"); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("Placement") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b1.Property("PreviousShiftThreshold") + .HasColumnType("time"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.HasKey("id"); + + b1.HasIndex("CustomizeWorkshopEmployeeSettingsId"); + + b1.ToTable("CustomizeWorkshopEmployeeSettingsShifts", (string)null); + + b1.WithOwner("CustomizeWorkshopEmployeeSettings") + .HasForeignKey("CustomizeWorkshopEmployeeSettingsId"); + + b1.Navigation("CustomizeWorkshopEmployeeSettings"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.BaseYearsPay", "BaseYearsPay", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("BaseYearsPayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("BaseYearsPay_BaseYearsPayType"); + + b1.Property("PaymentType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("BaseYearsPay_PaymentType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("BaseYearsPay_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.BonusesPay", "BonusesPay", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("BonusesPayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("BonusesPay_BonusesPayType"); + + b1.Property("PaymentType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("BonusesPay_PaymentType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("BonusesPay_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.BreakTime", "BreakTime", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("BreakTimeType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b1.Property("BreakTimeValue") + .HasColumnType("time"); + + b1.Property("HasBreakTimeValue") + .HasColumnType("bit"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.CustomizeRotatingShift", "CustomizeRotatingShifts", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid", "Id"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings_CustomizeRotatingShifts"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.EarlyExit", "EarlyExit", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("EarlyExitType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("EarlyExit_EarlyExitType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("EarlyExitTimeFines_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.EarlyExitTimeFine", "EarlyExitTimeFines", b2 => + { + b2.Property("CustomizeWorkshopEmployeeSettingsId") + .HasColumnType("bigint"); + + b2.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b2.Property("Id")); + + b2.Property("FineMoney") + .HasColumnType("float") + .HasColumnName("EarlyExitTimeFines_FineMoney"); + + b2.Property("Minute") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)") + .HasColumnName("EarlyExitTimeFines_Minute"); + + b2.HasKey("CustomizeWorkshopEmployeeSettingsId", "Id"); + + b2.ToTable("CustomizeWorkshopEmployeeSettings_EarlyExitTimeFines"); + + b2.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsId"); + }); + + b1.Navigation("EarlyExitTimeFines"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.FamilyAllowance", "FamilyAllowance", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("FamilyAllowanceType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("FamilyAllowance_FamilyAllowanceType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("FamilyAllowance_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.FineAbsenceDeduction", "FineAbsenceDeduction", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("FineAbsenceDeductionType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("FineAbsenceDeduction_FineAbsenceDeductionType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("FineAbsenceDeduction_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.FineAbsenceDayOfWeek", "FineAbsenceDayOfWeekCollection", b2 => + { + b2.Property("CustomizeWorkshopEmployeeSettingsId") + .HasColumnType("bigint"); + + b2.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b2.Property("Id")); + + b2.Property("DayOfWeek") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("FineAbsenceDayOfWeekCollection_DayOfWeek"); + + b2.HasKey("CustomizeWorkshopEmployeeSettingsId", "Id"); + + b2.ToTable("CustomizeWorkshopEmployeeSettings_FineAbsenceDayOfWeekCollection"); + + b2.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsId"); + }); + + b1.Navigation("FineAbsenceDayOfWeekCollection"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.FridayPay", "FridayPay", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("FridayPayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("FridayPay_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.InsuranceDeduction", "InsuranceDeduction", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("InsuranceDeductionType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("InsuranceDeduction_InsuranceDeductionType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("InsuranceDeduction_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.IrregularShift", "IrregularShift", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.Property("WorkshopIrregularShifts") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.LateToWork", "LateToWork", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("LateToWorkType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("LateToWork_LateToWorkType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("LateToWork_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.LateToWorkTimeFine", "LateToWorkTimeFines", b2 => + { + b2.Property("CustomizeWorkshopEmployeeSettingsId") + .HasColumnType("bigint"); + + b2.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b2.Property("Id")); + + b2.Property("FineMoney") + .HasColumnType("float") + .HasColumnName("LateToWorkTimeFines_FineMoney"); + + b2.Property("Minute") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)") + .HasColumnName("LateToWorkTimeFines_Minute"); + + b2.HasKey("CustomizeWorkshopEmployeeSettingsId", "Id"); + + b2.ToTable("CustomizeWorkshopEmployeeSettings_LateToWorkTimeFines"); + + b2.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsId"); + }); + + b1.Navigation("LateToWorkTimeFines"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.LeavePay", "LeavePay", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("LeavePayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("LeavePay_LeavePayType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("LeavePay_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.MarriedAllowance", "MarriedAllowance", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("MarriedAllowanceType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("MarriedAllowance_MarriedAllowanceType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("MarriedAllowance_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.NightWorkPay", "NightWorkPay", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("NightWorkingType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("NightWorkPay_NightWorkingType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("NightWorkPay_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.OverTimePay", "OverTimePay", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("OverTimePayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("OverTimePay_OverTimePayType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("OverTimePay_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.ShiftPay", "ShiftPay", b1 => + { + b1.Property("CustomizeWorkshopEmployeeSettingsid") + .HasColumnType("bigint"); + + b1.Property("ShiftPayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("ShiftPay_ShiftPayType"); + + b1.Property("ShiftType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("ShiftPay_ShiftType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("ShiftPay_Value"); + + b1.HasKey("CustomizeWorkshopEmployeeSettingsid"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopEmployeeSettingsid"); + }); + + b.Navigation("BaseYearsPay"); + + b.Navigation("BonusesPay"); + + b.Navigation("BreakTime"); + + b.Navigation("CustomizeRotatingShifts"); + + b.Navigation("CustomizeWorkshopEmployeeSettingsShifts"); + + b.Navigation("CustomizeWorkshopGroupSettings"); + + b.Navigation("EarlyExit"); + + b.Navigation("FamilyAllowance"); + + b.Navigation("FineAbsenceDeduction"); + + b.Navigation("FridayPay"); + + b.Navigation("InsuranceDeduction"); + + b.Navigation("IrregularShift"); + + b.Navigation("LateToWork"); + + b.Navigation("LeavePay"); + + b.Navigation("MarriedAllowance"); + + b.Navigation("NightWorkPay"); + + b.Navigation("OverTimePay"); + + b.Navigation("ShiftPay"); + }); + + modelBuilder.Entity("Company.Domain.CustomizeWorkshopGroupSettingsAgg.Entities.CustomizeWorkshopGroupSettings", b => + { + b.HasOne("Company.Domain.CustomizeWorkshopSettingsAgg.Entities.CustomizeWorkshopSettings", "CustomizeWorkshopSettings") + .WithMany("CustomizeWorkshopGroupSettingsCollection") + .HasForeignKey("CustomizeWorkshopSettingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsMany("Company.Domain.CustomizeWorkshopGroupSettingsAgg.Entities.CustomizeWorkshopGroupSettingsShift", "CustomizeWorkshopGroupSettingsShifts", b1 => + { + b1.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("id")); + + b1.Property("CreationDate") + .HasColumnType("datetime2"); + + b1.Property("CustomizeWorkshopGroupSettingsId") + .HasColumnType("bigint"); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("Placement") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.HasKey("id"); + + b1.HasIndex("CustomizeWorkshopGroupSettingsId"); + + b1.ToTable("CustomizeWorkshopGroupSettingsShifts", (string)null); + + b1.WithOwner("CustomizeWorkshopGroupSettings") + .HasForeignKey("CustomizeWorkshopGroupSettingsId"); + + b1.Navigation("CustomizeWorkshopGroupSettings"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.BaseYearsPay", "BaseYearsPay", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("BaseYearsPayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("BaseYearsPay_BaseYearsPayType"); + + b1.Property("PaymentType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("BaseYearsPay_PaymentType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("BaseYearsPay_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.BonusesPay", "BonusesPay", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("BonusesPayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("BonusesPay_BonusesPayType"); + + b1.Property("PaymentType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("BonusesPay_PaymentType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("BonusesPay_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.BreakTime", "BreakTime", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("BreakTimeType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b1.Property("BreakTimeValue") + .HasColumnType("time"); + + b1.Property("HasBreakTimeValue") + .HasColumnType("bit"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.CustomizeRotatingShift", "CustomizeRotatingShifts", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid", "Id"); + + b1.ToTable("CustomizeWorkshopGroupSettings_CustomizeRotatingShifts"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.EarlyExit", "EarlyExit", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("EarlyExitType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("EarlyExit_EarlyExitType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("EarlyExitTimeFines_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + + b1.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.EarlyExitTimeFine", "EarlyExitTimeFines", b2 => + { + b2.Property("CustomizeWorkshopGroupSettingsId") + .HasColumnType("bigint"); + + b2.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b2.Property("Id")); + + b2.Property("FineMoney") + .HasColumnType("float") + .HasColumnName("EarlyExitTimeFines_FineMoney"); + + b2.Property("Minute") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)") + .HasColumnName("EarlyExitTimeFines_Minute"); + + b2.HasKey("CustomizeWorkshopGroupSettingsId", "Id"); + + b2.ToTable("CustomizeWorkshopGroupSettings_EarlyExitTimeFines"); + + b2.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsId"); + }); + + b1.Navigation("EarlyExitTimeFines"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.FamilyAllowance", "FamilyAllowance", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("FamilyAllowanceType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("FamilyAllowance_FamilyAllowanceType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("FamilyAllowance_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.FineAbsenceDeduction", "FineAbsenceDeduction", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("FineAbsenceDeductionType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("FineAbsenceDeduction_FineAbsenceDeductionType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("FineAbsenceDeduction_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + + b1.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.FineAbsenceDayOfWeek", "FineAbsenceDayOfWeekCollection", b2 => + { + b2.Property("CustomizeWorkshopGroupSettingsId") + .HasColumnType("bigint"); + + b2.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b2.Property("Id")); + + b2.Property("DayOfWeek") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("FineAbsenceDayOfWeekCollection_DayOfWeek"); + + b2.HasKey("CustomizeWorkshopGroupSettingsId", "Id"); + + b2.ToTable("CustomizeWorkshopGroupSettings_FineAbsenceDayOfWeekCollection"); + + b2.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsId"); + }); + + b1.Navigation("FineAbsenceDayOfWeekCollection"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.FridayPay", "FridayPay", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("FridayPayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("FridayPay_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.InsuranceDeduction", "InsuranceDeduction", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("InsuranceDeductionType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("InsuranceDeduction_InsuranceDeductionType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("InsuranceDeduction_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.IrregularShift", "IrregularShift", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.Property("WorkshopIrregularShifts") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.LateToWork", "LateToWork", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("LateToWorkType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("LateToWork_LateToWorkType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("LateToWork_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + + b1.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.LateToWorkTimeFine", "LateToWorkTimeFines", b2 => + { + b2.Property("CustomizeWorkshopGroupSettingsId") + .HasColumnType("bigint"); + + b2.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b2.Property("Id")); + + b2.Property("FineMoney") + .HasColumnType("float") + .HasColumnName("LateToWorkTimeFines_FineMoney"); + + b2.Property("Minute") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)") + .HasColumnName("LateToWorkTimeFines_Minute"); + + b2.HasKey("CustomizeWorkshopGroupSettingsId", "Id"); + + b2.ToTable("CustomizeWorkshopGroupSettings_LateToWorkTimeFines"); + + b2.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsId"); + }); + + b1.Navigation("LateToWorkTimeFines"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.LeavePay", "LeavePay", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("LeavePayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("LeavePay_LeavePayType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("LeavePay_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.MarriedAllowance", "MarriedAllowance", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("MarriedAllowanceType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("MarriedAllowance_MarriedAllowanceType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("MarriedAllowance_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.NightWorkPay", "NightWorkPay", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("NightWorkingType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("NightWorkPay_NightWorkingType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("NightWorkPay_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.OverTimePay", "OverTimePay", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("OverTimePayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("OverTimePay_OverTimePayType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("OverTimePay_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.ShiftPay", "ShiftPay", b1 => + { + b1.Property("CustomizeWorkshopGroupSettingsid") + .HasColumnType("bigint"); + + b1.Property("ShiftPayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("ShiftPay_ShiftPayType"); + + b1.Property("ShiftType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("ShiftPay_ShiftType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("ShiftPay_Value"); + + b1.HasKey("CustomizeWorkshopGroupSettingsid"); + + b1.ToTable("CustomizeWorkshopGroupSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopGroupSettingsid"); + }); + + b.Navigation("BaseYearsPay"); + + b.Navigation("BonusesPay"); + + b.Navigation("BreakTime"); + + b.Navigation("CustomizeRotatingShifts"); + + b.Navigation("CustomizeWorkshopGroupSettingsShifts"); + + b.Navigation("CustomizeWorkshopSettings"); + + b.Navigation("EarlyExit"); + + b.Navigation("FamilyAllowance"); + + b.Navigation("FineAbsenceDeduction"); + + b.Navigation("FridayPay"); + + b.Navigation("InsuranceDeduction"); + + b.Navigation("IrregularShift"); + + b.Navigation("LateToWork"); + + b.Navigation("LeavePay"); + + b.Navigation("MarriedAllowance"); + + b.Navigation("NightWorkPay"); + + b.Navigation("OverTimePay"); + + b.Navigation("ShiftPay"); + }); + + modelBuilder.Entity("Company.Domain.CustomizeWorkshopSettingsAgg.Entities.CustomizeWorkshopSettings", b => + { + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithOne("CustomizeWorkshopSettings") + .HasForeignKey("Company.Domain.CustomizeWorkshopSettingsAgg.Entities.CustomizeWorkshopSettings", "WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsMany("Company.Domain.CustomizeWorkshopSettingsAgg.Entities.CustomizeWorkshopSettingsShift", "CustomizeWorkshopSettingsShifts", b1 => + { + b1.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("id")); + + b1.Property("CreationDate") + .HasColumnType("datetime2"); + + b1.Property("CustomizeWorkshopSettingsId") + .HasColumnType("bigint"); + + b1.Property("EndTime") + .HasColumnType("time"); + + b1.Property("Placement") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b1.Property("StartTime") + .HasColumnType("time"); + + b1.HasKey("id"); + + b1.HasIndex("CustomizeWorkshopSettingsId"); + + b1.ToTable("CustomizeWorkshopSettingsShifts", (string)null); + + b1.WithOwner("CustomizeWorkshopSettings") + .HasForeignKey("CustomizeWorkshopSettingsId"); + + b1.Navigation("CustomizeWorkshopSettings"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.BaseYearsPay", "BaseYearsPay", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("BaseYearsPayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("BaseYearsPay_BaseYearsPayType"); + + b1.Property("PaymentType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("BaseYearsPay_PaymentType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("BaseYearsPay_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.BonusesPay", "BonusesPay", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("BonusesPayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("BonusesPay_BonusesPayType"); + + b1.Property("PaymentType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("BonusesPay_PaymentType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("BonusesPay_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.EarlyExit", "EarlyExit", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("EarlyExitType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("EarlyExit_EarlyExitType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("EarlyExitTimeFines_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + + b1.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.EarlyExitTimeFine", "EarlyExitTimeFines", b2 => + { + b2.Property("CustomizeWorkshopSettingsId") + .HasColumnType("bigint"); + + b2.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b2.Property("Id")); + + b2.Property("FineMoney") + .HasColumnType("float") + .HasColumnName("EarlyExitTimeFines_FineMoney"); + + b2.Property("Minute") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)") + .HasColumnName("EarlyExitTimeFines_Minute"); + + b2.HasKey("CustomizeWorkshopSettingsId", "Id"); + + b2.ToTable("CustomizeWorkshopSettings_EarlyExitTimeFines"); + + b2.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsId"); + }); + + b1.Navigation("EarlyExitTimeFines"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.FamilyAllowance", "FamilyAllowance", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("FamilyAllowanceType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("FamilyAllowance_FamilyAllowanceType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("FamilyAllowance_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.FineAbsenceDeduction", "FineAbsenceDeduction", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("FineAbsenceDeductionType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("FineAbsenceDeduction_FineAbsenceDeductionType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("FineAbsenceDeduction_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + + b1.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.FineAbsenceDayOfWeek", "FineAbsenceDayOfWeekCollection", b2 => + { + b2.Property("CustomizeWorkshopSettingsId") + .HasColumnType("bigint"); + + b2.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b2.Property("Id")); + + b2.Property("DayOfWeek") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("FineAbsenceDayOfWeekCollection_DayOfWeek"); + + b2.HasKey("CustomizeWorkshopSettingsId", "Id"); + + b2.ToTable("CustomizeWorkshopSettings_FineAbsenceDayOfWeekCollection"); + + b2.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsId"); + }); + + b1.Navigation("FineAbsenceDayOfWeekCollection"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.FridayPay", "FridayPay", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("FridayPayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("FridayPay_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.InsuranceDeduction", "InsuranceDeduction", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("InsuranceDeductionType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("InsuranceDeduction_InsuranceDeductionType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("InsuranceDeduction_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.LateToWork", "LateToWork", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("LateToWorkType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("LateToWork_LateToWorkType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("LateToWork_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + + b1.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.LateToWorkTimeFine", "LateToWorkTimeFines", b2 => + { + b2.Property("CustomizeWorkshopSettingsId") + .HasColumnType("bigint"); + + b2.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b2.Property("Id")); + + b2.Property("FineMoney") + .HasColumnType("float") + .HasColumnName("LateToWorkTimeFines_FineMoney"); + + b2.Property("Minute") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)") + .HasColumnName("LateToWorkTimeFines_Minute"); + + b2.HasKey("CustomizeWorkshopSettingsId", "Id"); + + b2.ToTable("CustomizeWorkshopSettings_LateToWorkTimeFines"); + + b2.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsId"); + }); + + b1.Navigation("LateToWorkTimeFines"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.LeavePay", "LeavePay", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("LeavePayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("LeavePay_LeavePayType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("LeavePay_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.MarriedAllowance", "MarriedAllowance", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("MarriedAllowanceType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("MarriedAllowance_MarriedAllowanceType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("MarriedAllowance_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.NightWorkPay", "NightWorkPay", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("NightWorkingType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("NightWorkPay_NightWorkingType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("NightWorkPay_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.OverTimePay", "OverTimePay", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("OverTimePayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("OverTimePay_OverTimePayType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("OverTimePay_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + }); + + b.OwnsOne("_0_Framework.Domain.CustomizeCheckoutShared.ValueObjects.ShiftPay", "ShiftPay", b1 => + { + b1.Property("CustomizeWorkshopSettingsid") + .HasColumnType("bigint"); + + b1.Property("ShiftPayType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("ShiftPay_ShiftPayType"); + + b1.Property("ShiftType") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)") + .HasColumnName("ShiftPay_ShiftType"); + + b1.Property("Value") + .HasColumnType("float") + .HasColumnName("ShiftPay_Value"); + + b1.HasKey("CustomizeWorkshopSettingsid"); + + b1.ToTable("CustomizeWorkshopSettings"); + + b1.WithOwner() + .HasForeignKey("CustomizeWorkshopSettingsid"); + }); + + b.Navigation("BaseYearsPay"); + + b.Navigation("BonusesPay"); + + b.Navigation("CustomizeWorkshopSettingsShifts"); + + b.Navigation("EarlyExit"); + + b.Navigation("FamilyAllowance"); + + b.Navigation("FineAbsenceDeduction"); + + b.Navigation("FridayPay"); + + b.Navigation("InsuranceDeduction"); + + b.Navigation("LateToWork"); + + b.Navigation("LeavePay"); + + b.Navigation("MarriedAllowance"); + + b.Navigation("NightWorkPay"); + + b.Navigation("OverTimePay"); + + b.Navigation("ShiftPay"); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.DateSalaryItemAgg.DateSalaryItem", b => + { + b.HasOne("Company.Domain.DateSalaryAgg.DateSalary", "DateSalary") + .WithMany("DateSalaryItemList") + .HasForeignKey("DateSalaryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.PercentageAgg.Percentage", "Percentage") + .WithMany("DateSalaryItemList") + .HasForeignKey("PercentageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DateSalary"); + + b.Navigation("Percentage"); + }); + + modelBuilder.Entity("Company.Domain.EmployeeAccountAgg.EmployeeAccount", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithMany() + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + }); + + modelBuilder.Entity("Company.Domain.EmployeeBankInformationAgg.EmployeeBankInformation", b => + { + b.HasOne("Company.Domain.BankAgg.Bank", "Bank") + .WithMany() + .HasForeignKey("BankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithMany("EmployeeBankInformationList") + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Bank"); + + b.Navigation("Employee"); + }); + + modelBuilder.Entity("Company.Domain.EmployeeChildrenAgg.EmployeeChildren", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithMany("EmployeeChildrenList") + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + }); + + modelBuilder.Entity("Company.Domain.EmployeeDocumentItemAgg.EmployeeDocumentItem", b => + { + b.HasOne("Company.Domain.EmployeeDocumentsAgg.EmployeeDocuments", "EmployeeDocuments") + .WithMany("EmployeeDocumentItemCollection") + .HasForeignKey("EmployeeDocumentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.EmployeeDocumentsAdminSelectionAgg.EmployeeDocumentsAdminSelection", "EmployeeDocumentsAdminSelection") + .WithMany("SelectedEmployeeDocumentItems") + .HasForeignKey("EmployeeDocumentsAdminViewId"); + + b.OwnsMany("Company.Domain.EmployeeDocumentItemAgg.EmployeeDocumentItemLog", "ItemLogs", b1 => + { + b1.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("id")); + + b1.Property("AdminMessage") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b1.Property("CreationDate") + .HasColumnType("datetime2"); + + b1.Property("EmployeeDocumentItemId") + .HasColumnType("bigint"); + + b1.Property("OperationType") + .IsRequired() + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b1.Property("OperatorId") + .HasColumnType("bigint"); + + b1.Property("OperatorType") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b1.HasKey("id"); + + b1.HasIndex("EmployeeDocumentItemId"); + + b1.ToTable("EmployeeDocumentItemLogs", (string)null); + + b1.WithOwner("EmployeeDocumentItem") + .HasForeignKey("EmployeeDocumentItemId"); + + b1.Navigation("EmployeeDocumentItem"); + }); + + b.Navigation("EmployeeDocuments"); + + b.Navigation("EmployeeDocumentsAdminSelection"); + + b.Navigation("ItemLogs"); + }); + + modelBuilder.Entity("Company.Domain.EmployeeDocumentsAdminSelectionAgg.EmployeeDocumentsAdminSelection", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithOne("EmployeeDocumentsAdminSelection") + .HasForeignKey("Company.Domain.EmployeeDocumentsAdminSelectionAgg.EmployeeDocumentsAdminSelection", "EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + }); + + modelBuilder.Entity("Company.Domain.EmployeeDocumentsAgg.EmployeeDocuments", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithMany("EmployeeDocuments") + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany() + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.EmployeeInsuranceRecordAgg.EmployeeInsuranceRecord", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithMany("EmployeeInsuranceRecords") + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("EmployeeInsuranceRecords") + .HasForeignKey("WorkShopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.EmployerAccountAgg.EmployerAccount", b => + { + b.HasOne("Company.Domain.empolyerAgg.Employer", "Employer") + .WithMany() + .HasForeignKey("EmployerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employer"); + }); + + modelBuilder.Entity("Company.Domain.Evidence.Evidence", b => + { + b.HasOne("Company.Domain.BoardType.BoardType", "BoardType") + .WithMany("EvidencesList") + .HasForeignKey("BoardType_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.File1.File1", "File1") + .WithMany("EvidencesList") + .HasForeignKey("File_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("BoardType"); + + b.Navigation("File1"); + }); + + modelBuilder.Entity("Company.Domain.EvidenceDetail.EvidenceDetail", b => + { + b.HasOne("Company.Domain.Evidence.Evidence", "Evidence") + .WithMany("EvidenceDetailsList") + .HasForeignKey("Evidence_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Evidence"); + }); + + modelBuilder.Entity("Company.Domain.FileAlert.FileAlert", b => + { + b.HasOne("Company.Domain.FileState.FileState", "FileState") + .WithMany("FileAlertsList") + .HasForeignKey("FileState_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.File1.File1", "File") + .WithMany("FileAlertsList") + .HasForeignKey("File_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("File"); + + b.Navigation("FileState"); + }); + + modelBuilder.Entity("Company.Domain.FileAndFileEmployerAgg.FileAndFileEmployer", b => + { + b.HasOne("Company.Domain.FileEmployerAgg.FileEmployer", "FileEmployer") + .WithMany("FileAndFileEmployers") + .HasForeignKey("FileEmployerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.File1.File1", "File1") + .WithMany("FileAndFileEmployers") + .HasForeignKey("FileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("File1"); + + b.Navigation("FileEmployer"); + }); + + modelBuilder.Entity("Company.Domain.FileEmployeeAgg.FileEmployee", b => + { + b.HasOne("Company.Domain.RepresentativeAgg.Representative", "Representative") + .WithMany("FileEmployeeList") + .HasForeignKey("RepresentativeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Representative"); + }); + + modelBuilder.Entity("Company.Domain.FileEmployerAgg.FileEmployer", b => + { + b.HasOne("Company.Domain.RepresentativeAgg.Representative", "Representative") + .WithMany("FileEmployerList") + .HasForeignKey("RepresentativeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Representative"); + }); + + modelBuilder.Entity("Company.Domain.FileState.FileState", b => + { + b.HasOne("Company.Domain.FileTiming.FileTiming", "FileTiming") + .WithMany("FileStates") + .HasForeignKey("FileTiming_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("FileTiming"); + }); + + modelBuilder.Entity("Company.Domain.FinancialTransactionAgg.FinancialTransaction", b => + { + b.HasOne("Company.Domain.FinancialStatmentAgg.FinancialStatment", "FinancialStatment") + .WithMany("FinancialTransactionList") + .HasForeignKey("FinancialStatementId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("FinancialStatment"); + }); + + modelBuilder.Entity("Company.Domain.GroupPlanAgg.GroupPlan", b => + { + b.HasOne("Company.Domain.WorkshopPlanAgg.WorkshopPlan", "WorkshopPlan") + .WithMany("GroupPlans") + .HasForeignKey("WorkshopPlanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("WorkshopPlan"); + }); + + modelBuilder.Entity("Company.Domain.GroupPlanJobItemAgg.GroupPlanJobItem", b => + { + b.HasOne("Company.Domain.GroupPlanAgg.GroupPlan", "GroupPlan") + .WithMany("GroupPlanJobItems") + .HasForeignKey("GroupPlanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("GroupPlan"); + }); + + modelBuilder.Entity("Company.Domain.HolidayItemAgg.HolidayItem", b => + { + b.HasOne("Company.Domain.HolidayAgg.Holiday", "Holidayss") + .WithMany("HolidayItems") + .HasForeignKey("HolidayId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Holidayss"); + }); + + modelBuilder.Entity("Company.Domain.InstitutionContractContactInfoAgg.InstitutionContractContactInfo", b => + { + b.HasOne("Company.Domain.InstitutionContractAgg.InstitutionContract", "InstitutionContracts") + .WithMany("ContactInfoList") + .HasForeignKey("InstitutionContractId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("InstitutionContracts"); + }); + + modelBuilder.Entity("Company.Domain.InsurancWorkshopInfoAgg.InsuranceWorkshopInfo", b => + { + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithOne("InsuranceWorkshopInfo") + .HasForeignKey("Company.Domain.InsurancWorkshopInfoAgg.InsuranceWorkshopInfo", "WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.InsuranceAgg.Insurance", b => + { + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("Insurances") + .HasForeignKey("WorkShopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.InsuranceEmployeeInfoAgg.InsuranceEmployeeInfo", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithOne("InsuranceEmployeeInfo") + .HasForeignKey("Company.Domain.InsuranceEmployeeInfoAgg.InsuranceEmployeeInfo", "EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + }); + + modelBuilder.Entity("Company.Domain.InsuranceJobAndJobsAgg.InsuranceJobAndJobs", b => + { + b.HasOne("Company.Domain.InsuranceJobItemAgg.InsuranceJobItem", "InsuranceJobItem") + .WithMany("InsuranceJobAndJobs") + .HasForeignKey("InsuranceJobItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.JobAgg.Job", "Jobs") + .WithMany("InsuranceJobAndJobs") + .HasForeignKey("JobId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("InsuranceJobItem"); + + b.Navigation("Jobs"); + }); + + modelBuilder.Entity("Company.Domain.InsuranceJobItemAgg.InsuranceJobItem", b => + { + b.HasOne("Company.Domain.InsurancJobAgg.InsuranceJob", "InsuranceJob") + .WithMany("InsuranceJobItemList") + .HasForeignKey("InsuranceJobId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("InsuranceJob"); + }); + + modelBuilder.Entity("Company.Domain.InsuranceWorkshopAgg.InsuranceListWorkshop", b => + { + b.HasOne("Company.Domain.InsuranceListAgg.InsuranceList", "InsuranceList") + .WithMany("InsuranceListWorkshops") + .HasForeignKey("InsurancListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("InsuranceListWorkshops") + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("InsuranceList"); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.LeftWorkAgg.LeftWork", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithMany("LeftWorks") + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("LeftWorks") + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.LeftWorkInsuranceAgg.LeftWorkInsurance", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithMany("LeftWorkInsurances") + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("LeftWorkInsurances") + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.LoanAgg.Entities.Loan", b => + { + b.OwnsMany("Company.Domain.LoanAgg.Entities.LoanInstallment", "LoanInstallments", b1 => + { + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("AmountForMonth") + .HasColumnType("float"); + + b1.Property("InstallmentDate") + .HasColumnType("datetime2"); + + b1.Property("IsActive") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b1.Property("LoanId") + .HasColumnType("bigint"); + + b1.Property("Month") + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b1.Property("Year") + .HasMaxLength(4) + .HasColumnType("nvarchar(4)"); + + b1.HasKey("Id"); + + b1.HasIndex("LoanId"); + + b1.ToTable("LoanInstallment"); + + b1.WithOwner() + .HasForeignKey("LoanId"); + }); + + b.Navigation("LoanInstallments"); + }); + + modelBuilder.Entity("Company.Domain.MasterPenaltyTitle.MasterPenaltyTitle", b => + { + b.HasOne("Company.Domain.MasterPetition.MasterPetition", "MasterPetition") + .WithMany("MasterPenaltyTitlesList") + .HasForeignKey("MasterPetition_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MasterPetition"); + }); + + modelBuilder.Entity("Company.Domain.MasterPetition.MasterPetition", b => + { + b.HasOne("Company.Domain.BoardType.BoardType", "BoardType") + .WithMany("MasterPetitionsList") + .HasForeignKey("BoardType_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.File1.File1", "File1") + .WithMany("MasterPetitionsList") + .HasForeignKey("File_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("BoardType"); + + b.Navigation("File1"); + }); + + modelBuilder.Entity("Company.Domain.MasterWorkHistory.MasterWorkHistory", b => + { + b.HasOne("Company.Domain.MasterPetition.MasterPetition", "MasterPetition") + .WithMany("MasterWorkHistoriesList") + .HasForeignKey("MasterPetition_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MasterPetition"); + }); + + modelBuilder.Entity("Company.Domain.ModuleTextManagerAgg.EntityModuleTextManager", b => + { + b.HasOne("Company.Domain.ModuleAgg.EntityModule", "Module") + .WithMany("EntityModuleTextManagers") + .HasForeignKey("ModuleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.TextManagerAgg.EntityTextManager", "TextManager") + .WithMany("EntityModuleTextManagers") + .HasForeignKey("TextManagerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Module"); + + b.Navigation("TextManager"); + }); + + modelBuilder.Entity("Company.Domain.PaymentToEmployeeItemAgg.PaymentToEmployeeItem", b => + { + b.HasOne("Company.Domain.PaymentToEmployeeAgg.PaymentToEmployee", "PaymentToEmployee") + .WithMany("PaymentToEmployeeItemList") + .HasForeignKey("PaymentToEmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PaymentToEmployee"); + }); + + modelBuilder.Entity("Company.Domain.PenaltyTitle.PenaltyTitle", b => + { + b.HasOne("Company.Domain.Petition.Petition", "Petition") + .WithMany("PenaltyTitlesList") + .HasForeignKey("Petition_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Petition"); + }); + + modelBuilder.Entity("Company.Domain.PersonnelCodeAgg.PersonnelCodeDomain", b => + { + b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee") + .WithMany("PersonnelCodeList") + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("PersonnelCodeList") + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.Petition.Petition", b => + { + b.HasOne("Company.Domain.BoardType.BoardType", "BoardType") + .WithMany("PetitionsList") + .HasForeignKey("BoardType_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.File1.File1", "File1") + .WithMany("PetitionsList") + .HasForeignKey("File_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("BoardType"); + + b.Navigation("File1"); + }); + + modelBuilder.Entity("Company.Domain.ProceedingSession.ProceedingSession", b => + { + b.HasOne("Company.Domain.Board.Board", "Board") + .WithMany("ProceedingSessionsList") + .HasForeignKey("Board_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Board"); + }); + + modelBuilder.Entity("Company.Domain.RollCallEmployeeStatusAgg.RollCallEmployeeStatus", b => + { + b.HasOne("Company.Domain.RollCallEmployeeAgg.RollCallEmployee", "RollCallEmployee") + .WithMany("EmployeesStatus") + .HasForeignKey("RollCallEmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("RollCallEmployee"); + }); + + modelBuilder.Entity("Company.Domain.RollCallServiceAgg.RollCallService", b => + { + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("RollCallServicesList") + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.SubtitleAgg.EntitySubtitle", b => + { + b.HasOne("Company.Domain.SubtitleAgg.EntitySubtitle", null) + .WithMany("Subtitles") + .HasForeignKey("EntitySubtitleid"); + + b.HasOne("Company.Domain.OriginalTitleAgg.EntityOriginalTitle", "EntityOriginalTitle") + .WithMany("Subtitles") + .HasForeignKey("OriginalTitle_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityOriginalTitle"); + }); + + modelBuilder.Entity("Company.Domain.TaxLeftWorkCategoryAgg.TaxLeftWorkCategory", b => + { + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("TaxLeftWorkCategoryList") + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.TaxLeftWorkItemAgg.TaxLeftWorkItem", b => + { + b.HasOne("Company.Domain.TaxLeftWorkCategoryAgg.TaxLeftWorkCategory", "TaxLeftWorkCategory") + .WithMany("TaxLeftWorkItemList") + .HasForeignKey("TaxLeftWorkCategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TaxLeftWorkCategory"); + }); + + modelBuilder.Entity("Company.Domain.TemporaryClientRegistrationAgg.WorkshopServicesTemp", b => + { + b.HasOne("Company.Domain.TemporaryClientRegistrationAgg.WorkshopTemp", "WorkshopTemp") + .WithMany("WorkshopServicesTemps") + .HasForeignKey("WorkshopTempId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("WorkshopTemp"); + }); + + modelBuilder.Entity("Company.Domain.WorkHistory.WorkHistory", b => + { + b.HasOne("Company.Domain.Petition.Petition", "Petition") + .WithMany("WorkHistoriesList") + .HasForeignKey("Petition_Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Petition"); + }); + + modelBuilder.Entity("Company.Domain.WorkingHoursAgg.WorkingHours", b => + { + b.HasOne("Company.Domain.ContractAgg.Contract", "Contracts") + .WithMany("WorkingHoursList") + .HasForeignKey("ContractId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Contracts"); + }); + + modelBuilder.Entity("Company.Domain.WorkingHoursItemsAgg.WorkingHoursItems", b => + { + b.HasOne("Company.Domain.WorkingHoursAgg.WorkingHours", "WorkingHourses") + .WithMany("WorkingHoursItemsList") + .HasForeignKey("WorkingHoursId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("WorkingHourses"); + }); + + modelBuilder.Entity("Company.Domain.WorkingHoursTempItemAgg.WorkingHoursTempItem", b => + { + b.HasOne("Company.Domain.WorkingHoursTempAgg.WorkingHoursTemp", "WorkingHoursTemp") + .WithMany("WorkingHoursTempItemList") + .HasForeignKey("WorkingHoursTempId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("WorkingHoursTemp"); + }); + + modelBuilder.Entity("Company.Domain.WorkshopAccountAgg.WorkshopAccount", b => + { + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany() + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.WorkshopEmployerAgg.WorkshopEmployer", b => + { + b.HasOne("Company.Domain.empolyerAgg.Employer", "Employer") + .WithMany("WorkshopEmployers") + .HasForeignKey("EmployerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("WorkshopEmployers") + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employer"); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.WorkshopPlanEmployeeAgg.WorkshopPlanEmployee", b => + { + b.HasOne("Company.Domain.WorkshopPlanAgg.WorkshopPlan", "WorkshopPlan") + .WithMany("WorkshopPlanEmployees") + .HasForeignKey("WorkshopPlanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("WorkshopPlan"); + }); + + modelBuilder.Entity("Company.Domain.WorkshopSubAccountAgg.WorkshopSubAccount", b => + { + b.HasOne("Company.Domain.WorkshopAgg.Workshop", "Workshop") + .WithMany("WorkshopSubAccounts") + .HasForeignKey("WorkshopId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Workshop"); + }); + + modelBuilder.Entity("Company.Domain.YearlySalaryItemsAgg.YearlySalaryItem", b => + { + b.HasOne("Company.Domain.YearlySalaryAgg.YearlySalary", "YearlySalary") + .WithMany("YearlySalaryItemsList") + .HasForeignKey("YearlySalaryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("YearlySalary"); + }); + + modelBuilder.Entity("Company.Domain.empolyerAgg.Employer", b => + { + b.HasOne("Company.Domain.ContarctingPartyAgg.PersonalContractingParty", "ContractingParty") + .WithMany("Employers") + .HasForeignKey("ContractingPartyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ContractingParty"); + }); + + modelBuilder.Entity("EmployerWorkshop", b => + { + b.HasOne("Company.Domain.empolyerAgg.Employer", null) + .WithMany() + .HasForeignKey("EmployersListid") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Company.Domain.WorkshopAgg.Workshop", null) + .WithMany() + .HasForeignKey("WorkshopsListid") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Company.Domain.Board.Board", b => + { + b.Navigation("ProceedingSessionsList"); + }); + + modelBuilder.Entity("Company.Domain.BoardType.BoardType", b => + { + b.Navigation("BoardsList"); + + b.Navigation("EvidencesList"); + + b.Navigation("MasterPetitionsList"); + + b.Navigation("PetitionsList"); + }); + + modelBuilder.Entity("Company.Domain.ContarctingPartyAgg.PersonalContractingParty", b => + { + b.Navigation("Employers"); + }); + + modelBuilder.Entity("Company.Domain.ContractAgg.Contract", b => + { + b.Navigation("WorkingHoursList"); + }); + + modelBuilder.Entity("Company.Domain.CrossJobAgg.CrossJob", b => + { + b.Navigation("CrossJobItemsList"); + }); + + modelBuilder.Entity("Company.Domain.CrossJobGuildAgg.CrossJobGuild", b => + { + b.Navigation("CrossJobList"); + }); + + modelBuilder.Entity("Company.Domain.CustomizeWorkshopGroupSettingsAgg.Entities.CustomizeWorkshopGroupSettings", b => + { + b.Navigation("CustomizeWorkshopEmployeeSettingsCollection"); + }); + + modelBuilder.Entity("Company.Domain.CustomizeWorkshopSettingsAgg.Entities.CustomizeWorkshopSettings", b => + { + b.Navigation("CustomizeWorkshopGroupSettingsCollection"); + }); + + modelBuilder.Entity("Company.Domain.DateSalaryAgg.DateSalary", b => + { + b.Navigation("DateSalaryItemList"); + }); + + modelBuilder.Entity("Company.Domain.EmployeeAgg.Employee", b => + { + b.Navigation("ClientEmployeeWorkshopList"); + + b.Navigation("Contracts"); + + b.Navigation("CustomizeCheckouts"); + + b.Navigation("EmployeeBankInformationList"); + + b.Navigation("EmployeeChildrenList"); + + b.Navigation("EmployeeDocuments"); + + b.Navigation("EmployeeDocumentsAdminSelection"); + + b.Navigation("EmployeeInsuranceRecords"); + + b.Navigation("InsuranceEmployeeInfo"); + + b.Navigation("LeftWorkInsurances"); + + b.Navigation("LeftWorks"); + + b.Navigation("PersonnelCodeList"); + }); + + modelBuilder.Entity("Company.Domain.EmployeeDocumentsAdminSelectionAgg.EmployeeDocumentsAdminSelection", b => + { + b.Navigation("SelectedEmployeeDocumentItems"); + }); + + modelBuilder.Entity("Company.Domain.EmployeeDocumentsAgg.EmployeeDocuments", b => + { + b.Navigation("EmployeeDocumentItemCollection"); + }); + + modelBuilder.Entity("Company.Domain.Evidence.Evidence", b => + { + b.Navigation("EvidenceDetailsList"); + }); + + modelBuilder.Entity("Company.Domain.File1.File1", b => + { + b.Navigation("BoardsList"); + + b.Navigation("EvidencesList"); + + b.Navigation("FileAlertsList"); + + b.Navigation("FileAndFileEmployers"); + + b.Navigation("MasterPetitionsList"); + + b.Navigation("PetitionsList"); + }); + + modelBuilder.Entity("Company.Domain.FileEmployerAgg.FileEmployer", b => + { + b.Navigation("FileAndFileEmployers"); + }); + + modelBuilder.Entity("Company.Domain.FileState.FileState", b => + { + b.Navigation("FileAlertsList"); + }); + + modelBuilder.Entity("Company.Domain.FileTiming.FileTiming", b => + { + b.Navigation("FileStates"); + }); + + modelBuilder.Entity("Company.Domain.FinancialStatmentAgg.FinancialStatment", b => + { + b.Navigation("FinancialTransactionList"); + }); + + modelBuilder.Entity("Company.Domain.GroupPlanAgg.GroupPlan", b => + { + b.Navigation("GroupPlanJobItems"); + }); + + modelBuilder.Entity("Company.Domain.HolidayAgg.Holiday", b => + { + b.Navigation("HolidayItems"); + }); + + modelBuilder.Entity("Company.Domain.InstitutionContractAgg.InstitutionContract", b => + { + b.Navigation("ContactInfoList"); + }); + + modelBuilder.Entity("Company.Domain.InsurancJobAgg.InsuranceJob", b => + { + b.Navigation("InsuranceJobItemList"); + }); + + modelBuilder.Entity("Company.Domain.InsuranceJobItemAgg.InsuranceJobItem", b => + { + b.Navigation("InsuranceJobAndJobs"); + }); + + modelBuilder.Entity("Company.Domain.InsuranceListAgg.InsuranceList", b => + { + b.Navigation("InsuranceListWorkshops"); + }); + + modelBuilder.Entity("Company.Domain.JobAgg.Job", b => + { + b.Navigation("ContractsList"); + + b.Navigation("CrossJobItemsList"); + + b.Navigation("InsuranceJobAndJobs"); + }); + + modelBuilder.Entity("Company.Domain.MandatoryHoursAgg.MandatoryHours", b => + { + b.Navigation("Contracts"); + }); + + modelBuilder.Entity("Company.Domain.MasterPetition.MasterPetition", b => + { + b.Navigation("MasterPenaltyTitlesList"); + + b.Navigation("MasterWorkHistoriesList"); + }); + + modelBuilder.Entity("Company.Domain.ModuleAgg.EntityModule", b => + { + b.Navigation("EntityModuleTextManagers"); + }); + + modelBuilder.Entity("Company.Domain.OriginalTitleAgg.EntityOriginalTitle", b => + { + b.Navigation("Subtitles"); + }); + + modelBuilder.Entity("Company.Domain.PaymentToEmployeeAgg.PaymentToEmployee", b => + { + b.Navigation("PaymentToEmployeeItemList"); + }); + + modelBuilder.Entity("Company.Domain.PercentageAgg.Percentage", b => + { + b.Navigation("DateSalaryItemList"); + }); + + modelBuilder.Entity("Company.Domain.Petition.Petition", b => + { + b.Navigation("PenaltyTitlesList"); + + b.Navigation("WorkHistoriesList"); + }); + + modelBuilder.Entity("Company.Domain.RepresentativeAgg.Representative", b => + { + b.Navigation("ContractingParties"); + + b.Navigation("FileEmployeeList"); + + b.Navigation("FileEmployerList"); + }); + + modelBuilder.Entity("Company.Domain.RollCallEmployeeAgg.RollCallEmployee", b => + { + b.Navigation("EmployeesStatus"); + }); + + modelBuilder.Entity("Company.Domain.SubtitleAgg.EntitySubtitle", b => + { + b.Navigation("Chapters"); + + b.Navigation("Subtitles"); + }); + + modelBuilder.Entity("Company.Domain.TaxLeftWorkCategoryAgg.TaxLeftWorkCategory", b => + { + b.Navigation("TaxLeftWorkItemList"); + }); + + modelBuilder.Entity("Company.Domain.TemporaryClientRegistrationAgg.WorkshopTemp", b => + { + b.Navigation("WorkshopServicesTemps"); + }); + + modelBuilder.Entity("Company.Domain.TextManagerAgg.EntityTextManager", b => + { + b.Navigation("EntityModuleTextManagers"); + }); + + modelBuilder.Entity("Company.Domain.WorkingHoursAgg.WorkingHours", b => + { + b.Navigation("WorkingHoursItemsList"); + }); + + modelBuilder.Entity("Company.Domain.WorkingHoursTempAgg.WorkingHoursTemp", b => + { + b.Navigation("WorkingHoursTempItemList"); + }); + + modelBuilder.Entity("Company.Domain.WorkshopAgg.Workshop", b => + { + b.Navigation("Checkouts"); + + b.Navigation("ClientEmployeeWorkshopList"); + + b.Navigation("Contracts2"); + + b.Navigation("CustomizeCheckouts"); + + b.Navigation("CustomizeWorkshopSettings"); + + b.Navigation("EmployeeInsuranceRecords"); + + b.Navigation("InsuranceListWorkshops"); + + b.Navigation("InsuranceWorkshopInfo"); + + b.Navigation("Insurances"); + + b.Navigation("LeftWorkInsurances"); + + b.Navigation("LeftWorks"); + + b.Navigation("PersonnelCodeList"); + + b.Navigation("RollCallServicesList"); + + b.Navigation("TaxLeftWorkCategoryList"); + + b.Navigation("WorkshopEmployers"); + + b.Navigation("WorkshopSubAccounts"); + }); + + modelBuilder.Entity("Company.Domain.WorkshopPlanAgg.WorkshopPlan", b => + { + b.Navigation("GroupPlans"); + + b.Navigation("WorkshopPlanEmployees"); + }); + + modelBuilder.Entity("Company.Domain.YearlySalaryAgg.YearlySalary", b => + { + b.Navigation("Contracts"); + + b.Navigation("YearlySalaryItemsList"); + }); + + modelBuilder.Entity("Company.Domain.empolyerAgg.Employer", b => + { + b.Navigation("Contracts"); + + b.Navigation("WorkshopEmployers"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/CompanyManagment.EFCore/Migrations/20250517165553_add startEndToInsuranceJobItems.cs b/CompanyManagment.EFCore/Migrations/20250517165553_add startEndToInsuranceJobItems.cs new file mode 100644 index 00000000..9903de5e --- /dev/null +++ b/CompanyManagment.EFCore/Migrations/20250517165553_add startEndToInsuranceJobItems.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace CompanyManagment.EFCore.Migrations +{ + /// + public partial class addstartEndToInsuranceJobItems : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "EndDate", + table: "InsuranceJobItems", + type: "datetime2", + nullable: true); + + migrationBuilder.AddColumn( + name: "StartDate", + table: "InsuranceJobItems", + type: "datetime2", + nullable: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "EndDate", + table: "InsuranceJobItems"); + + migrationBuilder.DropColumn( + name: "StartDate", + table: "InsuranceJobItems"); + } + } +} diff --git a/CompanyManagment.EFCore/Migrations/CompanyContextModelSnapshot.cs b/CompanyManagment.EFCore/Migrations/CompanyContextModelSnapshot.cs index 3ce0daa0..b89f2ebb 100644 --- a/CompanyManagment.EFCore/Migrations/CompanyContextModelSnapshot.cs +++ b/CompanyManagment.EFCore/Migrations/CompanyContextModelSnapshot.cs @@ -3293,6 +3293,9 @@ namespace CompanyManagment.EFCore.Migrations b.Property("CreationDate") .HasColumnType("datetime2"); + b.Property("EndDate") + .HasColumnType("datetime2"); + b.Property("InsuranceJobId") .HasColumnType("bigint"); @@ -3308,6 +3311,9 @@ namespace CompanyManagment.EFCore.Migrations b.Property("SalaryMoreThan") .HasColumnType("float"); + b.Property("StartDate") + .HasColumnType("datetime2"); + b.HasKey("id"); b.HasIndex("InsuranceJobId"); diff --git a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs index e4117180..c3034a1b 100644 --- a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs @@ -546,16 +546,16 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos LastDayOfWork = "", MarriedAllowance = x.MarriedAllowance.ToMoney(), HasRollCall = x.HasRollCall, - SumOfWorkingDays = x.SumOfWorkingDays, + SumOfWorkingDays = "-", OverTimeWorkValue = x.OverTimeWorkValue, OverNightWorkValue = x.OverNightWorkValue, FridayWorkValue = x.FridayWorkValue, RotatingShiftValue = x.RotatingShiftValue, AbsenceValue = x.AbsenceValue, MaritalStatus = "", - TotalDayOfLeaveCompute = x.TotalDayOfLeaveCompute, - TotalDayOfYearsCompute = x.TotalDayOfYearsCompute, - TotalDayOfBunosesCompute = x.TotalDayOfBunosesCompute, + TotalDayOfLeaveCompute = "-", + TotalDayOfYearsCompute = "-", + TotalDayOfBunosesCompute = "-", InstallmentViewModels = x.LoanInstallments.Select(i => new LoanInstallmentViewModel() { Amount = i.AmountForMonth, @@ -661,6 +661,49 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos // ch.TotalDeductions = ""; // ch.TotalPayment = ""; //} + + #region Leave + + var leavesQuery = _context.LeaveList + .Where(x => x.EmployeeId == ch.EmployeeId && x.WorkshopId == ch.WorkshopId && + x.StartLeave <= ch.ContractEndGr && x.EndLeave >= ch.ContractStartGr) + .AsNoTracking(); + + var paidLeave = leavesQuery.Where(x => x.LeaveType == "استحقاقی"); + var sickLeave = leavesQuery.Where(x => x.LeaveType == "استعلاجی").ToList(); + + + var dailyPaidLeave = paidLeave.Where(x => x.PaidLeaveType == "روزانه").ToList(); + var hourlyPaidLeave = paidLeave.Where(x => x.PaidLeaveType == "ساعتی").ToList(); + + var sickLeaveTimeSpans = sickLeave.Select(x => + { + var startLeave = ch.ContractStartGr > x.StartLeave ? ch.ContractStartGr : x.StartLeave; + var endLeave = ch.ContractEndGr < x.EndLeave ? ch.ContractEndGr : x.EndLeave; + + return (endLeave - startLeave).Add(TimeSpan.FromDays(1)); + }); + + ch.TotalSickLeave = new TimeSpan(sickLeaveTimeSpans.Sum(x => x.Ticks)).ToFarsiDaysAndHoursAndMinutes("-"); + + var hourlyPaidLeaveTimeSpans = hourlyPaidLeave.Select(x => TimeOnly.Parse(x.LeaveHourses).ToTimeSpan()); + + var dailyPaidLeaveTimeSpans = dailyPaidLeave.Select(x => + { + var startLeave = ch.ContractStartGr > x.StartLeave ? ch.ContractStartGr : x.StartLeave; + var endLeave = ch.ContractEndGr < x.EndLeave ? ch.ContractEndGr : x.EndLeave; + return (endLeave - startLeave).Add(TimeSpan.FromDays(1)); + }); + + var totalPaidLeaveTimeSpans = hourlyPaidLeaveTimeSpans.Concat(dailyPaidLeaveTimeSpans); + + ch.TotalPaidLeave = new TimeSpan(totalPaidLeaveTimeSpans.Sum(x => x.Ticks)).ToFarsiDaysAndHoursAndMinutes("-"); + + + + #endregion + + if (ch.TotalPaymentHide == false) { ch.TotalClaims = ""; @@ -841,16 +884,16 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos LastDayOfWork = "", MarriedAllowance = x.MarriedAllowance.ToMoney(), HasRollCall = x.HasRollCall, - SumOfWorkingDays = x.SumOfWorkingDays, + SumOfWorkingDays = "-", OverTimeWorkValue = x.OverTimeWorkValue, OverNightWorkValue = x.OverNightWorkValue, FridayWorkValue = x.FridayWorkValue, RotatingShiftValue = x.RotatingShiftValue, AbsenceValue = x.AbsenceValue, MaritalStatus = "", - TotalDayOfLeaveCompute = x.TotalDayOfLeaveCompute, - TotalDayOfYearsCompute = x.TotalDayOfYearsCompute, - TotalDayOfBunosesCompute = x.TotalDayOfBunosesCompute, + TotalDayOfLeaveCompute = "-", + TotalDayOfYearsCompute = "-", + TotalDayOfBunosesCompute = "-", InstallmentViewModels = x.LoanInstallments.Select(i => new LoanInstallmentViewModel() { Amount = i.AmountForMonth, @@ -1098,21 +1141,24 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos var orderedRollcalls = x.OrderBy(y => y.ShiftDate).ToList(); var rollCallTimeSpanPerDay = - new TimeSpan(x.Where(y => y.EndDate != null).Sum(y => (y.EndDate - y.StartDate)!.Value.Ticks)); + new TimeSpan(x.Where(y => y.EndDate != null).Sum(y => y.ShiftEndWithoutRest == null ? (y.EndDate - y.StartDate).Value!.Ticks : (y.ShiftEndWithoutRest - y.StartDate)!.Value.Ticks)); var breakTimePerDay = new TimeSpan(x.Sum(r => r.BreakTimeSpan.Ticks)); var firstRollCall = orderedRollcalls.FirstOrDefault(); - var secondRollCall = orderedRollcalls.FirstOrDefault(); + var secondRollCall = orderedRollcalls.Skip(1).FirstOrDefault(); + + var firstRCEndDate = firstRollCall.ShiftEndWithoutRest ?? firstRollCall.EndDate; + var secondRCEndDate = secondRollCall.ShiftEndWithoutRest ?? secondRollCall.EndDate; return new CheckoutDailyRollCallViewModel() { StartDate1 = firstRollCall?.StartDate?.ToString("HH:mm") ?? "", - EndDate1 = firstRollCall?.EndDate?.ToString("HH:mm") ?? "", + EndDate1 =firstRCEndDate?.ToString("HH:mm") ?? "", StartDate2 = secondRollCall?.StartDate?.ToString("HH:mm") ?? "", - EndDate2 = secondRollCall?.EndDate?.ToString("HH:mm") ?? "", + EndDate2 = secondRCEndDate?.ToString("HH:mm") ?? "", - TotalhourseSpan = rollCallTimeSpanPerDay - breakTimePerDay, + TotalhourseSpan = rollCallTimeSpanPerDay, BreakTimeTimeSpan = breakTimePerDay, diff --git a/CompanyManagment.EFCore/Repository/CustomizeCheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CustomizeCheckoutRepository.cs index d126c5b8..0e068ac1 100644 --- a/CompanyManagment.EFCore/Repository/CustomizeCheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CustomizeCheckoutRepository.cs @@ -395,7 +395,7 @@ namespace CompanyManagment.EFCore.Repository } - if (searchModel.Year > 0 && searchModel.Month > 0 && searchModel.Month < 12) + if (searchModel.Year > 0 && searchModel.Month > 0 && searchModel.Month < 13) { var queryStartDate = $"{searchModel.Year:0000}/{searchModel.Month:00}/01".ToGeorgianDateTime(); queryStartDate.FindFirstDayOfNextMonth(out var queryEndDate); diff --git a/CompanyManagment.EFCore/Repository/CustomizeWorkshopSettingsRepository.cs b/CompanyManagment.EFCore/Repository/CustomizeWorkshopSettingsRepository.cs index 5652d774..1af8c78a 100644 --- a/CompanyManagment.EFCore/Repository/CustomizeWorkshopSettingsRepository.cs +++ b/CompanyManagment.EFCore/Repository/CustomizeWorkshopSettingsRepository.cs @@ -8,364 +8,351 @@ using CompanyManagment.App.Contracts.CustomizeWorkshopSettings.ValueObjectsViewM using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Linq; +using Microsoft.EntityFrameworkCore.Infrastructure; -namespace CompanyManagment.EFCore.Repository; - -public class CustomizeWorkshopSettingsRepository(CompanyContext companyContext, IAuthHelper authHelper, IEmployeeRepository employeeRepository) - : RepositoryBase(companyContext), ICustomizeWorkshopSettingsRepository +namespace CompanyManagment.EFCore.Repository { - private readonly CompanyContext _companyContext = companyContext; - private readonly IAuthHelper _authHelper = authHelper; - private readonly IEmployeeRepository _employeeRepository = employeeRepository; - - public CustomizeWorkshopSettingsViewModel GetWorkshopSettingsByWorkshopId(long workshopId, AuthViewModel auth) + public class CustomizeWorkshopSettingsRepository(CompanyContext companyContext, IAuthHelper authHelper, IEmployeeRepository employeeRepository) + : RepositoryBase(companyContext), ICustomizeWorkshopSettingsRepository { - var entity = _companyContext.CustomizeWorkshopSettings.AsSplitQuery().Where(x => x.WorkshopId == workshopId) - .Include(x => x.CustomizeWorkshopGroupSettingsCollection) - .ThenInclude(x => x.CustomizeWorkshopEmployeeSettingsCollection).AsSplitQuery() - .FirstOrDefault(); - if (entity == null) - return new(); + private readonly CompanyContext _companyContext = companyContext; + private readonly IAuthHelper _authHelper = authHelper; + private readonly IEmployeeRepository _employeeRepository = employeeRepository; - var employeeIds = entity.CustomizeWorkshopGroupSettingsCollection - .SelectMany(x => x.CustomizeWorkshopEmployeeSettingsCollection) - .Select(y => y.EmployeeId) - .ToList(); - var employees = _employeeRepository.GetBy(employeeIds); - return new CustomizeWorkshopSettingsViewModel() + public CustomizeWorkshopSettingsViewModel GetWorkshopSettingsByWorkshopId(long workshopId, AuthViewModel auth) { - Id = entity.id, - Name = auth.WorkshopList.FirstOrDefault(w => w.Id == entity.WorkshopId)?.Name, - GroupSettings = entity.CustomizeWorkshopGroupSettingsCollection.Where(x => !x.MainGroup).Select(x => - new CustomizeWorkshopGroupSettingsViewModel() - { - Id = x.id, - GroupName = x.GroupName, - RollCallWorkshopEmployeesSettings = x.CustomizeWorkshopEmployeeSettingsCollection.Select(y => - { - var employee = employees.First(e => e.Id == y.EmployeeId); - return new CustomizeWorkshopEmployeeSettingsViewModel() - { - Id = y.id, - EmployeeId = y.EmployeeId, - IsSettingChanged = y.IsSettingChanged, - IsShiftChanged = y.IsShiftChanged, - Name = $"{employee}", - RollCallWorkshopShifts = y.CustomizeWorkshopEmployeeSettingsShifts.Select(s => - new CustomizeWorkshopShiftViewModel() - { - EndTime = s.EndTime.ToString("HH:mm"), - Placement = s.Placement, - StartTime = s.StartTime.ToString("HH:mm") - }).ToList(), - Salary = y.Salary, + var entity = _companyContext.CustomizeWorkshopSettings.AsSplitQuery().Where(x => x.WorkshopId == workshopId) + .Include(x => x.CustomizeWorkshopGroupSettingsCollection) + .ThenInclude(x => x.CustomizeWorkshopEmployeeSettingsCollection).AsSplitQuery() + .FirstOrDefault(); + if (entity == null) + return new(); - }; - }).ToList(), - WorkshopShiftStatus = x.WorkshopShiftStatus, - IrregularShift = x.IrregularShift, - Salary = x.Salary, - RollCallWorkshopShifts = x.CustomizeWorkshopGroupSettingsShifts.Select(s => - new CustomizeWorkshopShiftViewModel() - { - EndTime = s.EndTime.ToString("HH:mm"), - Placement = s.Placement, - StartTime = s.StartTime.ToString("HH:mm") - - }).ToList(), - MainGroup = x.MainGroup, - CustomizeRotatingShiftsViewModels = x.CustomizeRotatingShifts. - Select(r=>new CustomizeRotatingShiftsViewModel(){StartTime = r.StartTime.ToString("HH:mm"), EndTime = r.EndTime.ToString("HH:mm")}).ToList() - }).ToList(), - - }; - } - public CustomizeWorkshopSettingsViewModel GetWorkshopSettingsByWorkshopIdForAdmin(long workshopId) - { - var entity = _companyContext.CustomizeWorkshopSettings.AsSplitQuery().Where(x => x.WorkshopId == workshopId) - .Include(x => x.CustomizeWorkshopGroupSettingsCollection) - .ThenInclude(x => x.CustomizeWorkshopEmployeeSettingsCollection).AsSplitQuery() - .FirstOrDefault(); - if (entity == null) - return new(); - - return new CustomizeWorkshopSettingsViewModel() - { - Id = entity.id, - Offset = entity.EndTimeOffSet, - GroupSettings = entity.CustomizeWorkshopGroupSettingsCollection.Where(x => !x.MainGroup).Select(x => - new CustomizeWorkshopGroupSettingsViewModel() - { - Id = x.id, - GroupName = x.GroupName, - RollCallWorkshopEmployeesSettings = x.CustomizeWorkshopEmployeeSettingsCollection.Select(y => - { - var employee = _employeeRepository.Get(y.EmployeeId); - return new CustomizeWorkshopEmployeeSettingsViewModel() - { - Id = y.id, - EmployeeId = y.EmployeeId, - IsSettingChanged = y.IsSettingChanged, - IsShiftChanged = y.IsShiftChanged, - Name = $"{employee?.FName} {employee?.LName}", - RollCallWorkshopShifts = y.CustomizeWorkshopEmployeeSettingsShifts.Select(s => - new CustomizeWorkshopShiftViewModel() - { - EndTime = s.EndTime.ToString("HH:mm"), - Placement = s.Placement, - StartTime = s.StartTime.ToString("HH:mm") - }).ToList(), - Salary = y.Salary, - CustomizeRotatingShiftsViewModels = y.CustomizeRotatingShifts.Select(r => new CustomizeRotatingShiftsViewModel - { - StartTime = r.StartTime.ToString("HH:mm"), - EndTime = r.EndTime.ToString("HH:mm") - }).ToList(), - LeavePermittedDays = y.LeavePermittedDays, - IrregularShift = y.IrregularShift, - WorkshopShiftStatus = y.WorkshopShiftStatus - }; - }).ToList(), - Salary = x.Salary, - RollCallWorkshopShifts = x.CustomizeWorkshopGroupSettingsShifts.Select(s => - new CustomizeWorkshopShiftViewModel() - { - EndTime = s.EndTime.ToString("HH:mm"), - Placement = s.Placement, - StartTime = s.StartTime.ToString("HH:mm") - - }).ToList(), - MainGroup = x.MainGroup, - WorkshopShiftStatus = x.WorkshopShiftStatus, - CustomizeRotatingShiftsViewModels = x.CustomizeRotatingShifts.Select(r => new CustomizeRotatingShiftsViewModel - { - StartTime = r.StartTime.ToString("HH:mm"), - EndTime = r.EndTime.ToString("HH:mm") - }).ToList(), - IrregularShift = x.IrregularShift - - - - }).ToList(), - }; - } - - - public EditCustomizeWorkshopSettings GetWorkshopSettingsDetails(long workshopId) - { - - var entity = _companyContext.CustomizeWorkshopSettings.AsSplitQuery().FirstOrDefault(x => x.WorkshopId == workshopId); - if (entity == null) - return new(); - var viewModel = new EditCustomizeWorkshopSettings() - { - FridayWork = entity.FridayWork, - FridayPay = new() { FridayPayType = entity.FridayPay.FridayPayType, Value = entity.FridayPay.Value }, - LateToWork = new() + var employeeIds = entity.CustomizeWorkshopGroupSettingsCollection + .SelectMany(x => x.CustomizeWorkshopEmployeeSettingsCollection) + .Select(y => y.EmployeeId) + .ToList(); + var employees = _employeeRepository.GetBy(employeeIds); + return new CustomizeWorkshopSettingsViewModel() { - LateToWorkTimeFinesVewModels = entity.LateToWork.LateToWorkTimeFines.Select(x => - new LateToWorkTimeFineVewModel() { FineMoney = x.FineMoney, Minute = x.Minute }).ToList(), - Value = entity.LateToWork.Value, - LateToWorkType = entity.LateToWork.LateToWorkType - }, - HolidayWork = entity.HolidayWork, - FineAbsenceDeduction = new() - { - Value = entity.FineAbsenceDeduction.Value, - FineAbsenceDayOfWeekViewModels = entity.FineAbsenceDeduction.FineAbsenceDayOfWeekCollection - .Select(x => new FineAbsenceDayOfWeekViewModel() { DayOfWeek = x.DayOfWeek }).ToList(), - FineAbsenceDeductionType = entity.FineAbsenceDeduction.FineAbsenceDeductionType - }, - EarlyExit = new() - { - EarlyExitTimeFinesViewModels = entity.EarlyExit.EarlyExitTimeFines.Select(x => - new EarlyExitTimeFineViewModel() { FineMoney = x.FineMoney, Minute = x.Minute }).ToList(), - Value = entity.EarlyExit.Value, - EarlyExitType = entity.EarlyExit.EarlyExitType - }, - BonusesPay = new() - { - Value = entity.BonusesPay.Value, - BonusesPayType = entity.BonusesPay.BonusesPayType, - PaymentType = entity.BonusesPay.PaymentType - }, - ShiftPay = new() - { - Value = entity.ShiftPay.Value, - ShiftPayType = entity.ShiftPay.ShiftPayType, - ShiftType = entity.ShiftPay.ShiftType - }, - InsuranceDeduction = new() - { - Value = entity.InsuranceDeduction.Value, - InsuranceDeductionType = entity.InsuranceDeduction.InsuranceDeductionType - }, - OverTimePay = new() - { OverTimePayType = entity.OverTimePay.OverTimePayType, Value = entity.OverTimePay.Value }, - BaseYearsPay = new() - { - BaseYearsPayType = entity.BaseYearsPay.BaseYearsPayType, - Value = entity.BaseYearsPay.Value, - PaymentType = entity.BaseYearsPay.PaymentType - }, - NightWorkPay = new() - { NightWorkingType = entity.NightWorkPay.NightWorkingType, Value = entity.NightWorkPay.Value }, - LeavePay = new() - { - Value = entity.LeavePay.Value, - LeavePayType = entity.LeavePay.LeavePayType - }, - MarriedAllowance = new() - { - Value = entity.MarriedAllowance.Value, - MarriedAllowanceType = entity.MarriedAllowance.MarriedAllowanceType - }, - FamilyAllowance = new() - { - FamilyAllowanceType = entity.FamilyAllowance.FamilyAllowanceType, - Value = entity.FamilyAllowance.Value - }, - Currency = entity.Currency, - MaxMonthDays = entity.MaxMonthDays, - Id = entity.id, - ShiftsList = entity.CustomizeWorkshopSettingsShifts.Select(x => new CustomizeWorkshopShiftViewModel() - { EndTime = x.EndTime.ToString("HH:mm"), Placement = x.Placement, StartTime = x.StartTime.ToString("HH:mm") }).ToList(), - BonusesPaysInEndOfMonth = entity.BonusesPaysInEndOfMonth, - LeavePermittedDays = entity.LeavePermittedDays, - BaseYearsPayInEndOfYear = entity.BaseYearsPayInEndOfYear, - WorkshopId = entity.WorkshopId, - WorkshopShiftStatus = entity.WorkshopShiftStatus - - }; - return viewModel; - - } - - - public EditCustomizeWorkshopSettings GetSimpleWorkshopSettings(long workshopId) - { - var entity = _companyContext.CustomizeWorkshopSettings.AsSplitQuery().FirstOrDefault(x => x.WorkshopId == workshopId); - if (entity == null) - { - return new(); - } - - return new() - { - ShiftsList = entity.CustomizeWorkshopSettingsShifts.Select(x => new CustomizeWorkshopShiftViewModel() - { - EndTime = x.EndTime.ToString("HH:mm"), - StartTime = x.StartTime.ToString("HH:mm"), - Placement = x.Placement - }).ToList(), - Id = entity.id, - WorkshopId = entity.WorkshopId, - WorkshopShiftStatus = entity.WorkshopShiftStatus, - FridayWork = entity.FridayWork, - HolidayWork = entity.HolidayWork - - }; - } - - public List GetShiftChangesGroupAndEmployees(long customizeWorkshopSettingsId) - { - - - var result = from groupSetting in _companyContext.CustomizeWorkshopGroupSettings.AsSplitQuery() - where groupSetting.IsShiftChange // Filter parent tables where isChange is true - join employeeSettings in _companyContext.CustomizeWorkshopEmployeeSettings on groupSetting.id equals employeeSettings.CustomizeWorkshopGroupSettingId - where employeeSettings.IsShiftChanged// Filter child tables where isChange is true - join employee in _companyContext.Employees on employeeSettings.EmployeeId equals employee.id - group new { employee.FullName, groupSetting.GroupName } by groupSetting.id into grouped - select new ChangedGroupedViewModel - { - GroupName = grouped.First().GroupName, - EmployeeName = grouped.Select(e => e.FullName).ToList() - }; - - return result.ToList(); - - } - - public CustomizeWorkshopSettingsViewModel GetWorkshopIncludeGroupsByWorkshopId(long workshopId) - { - var customizeWorkshopSettings = _companyContext.CustomizeWorkshopSettings - .AsNoTracking().AsSplitQuery().Where(x => x.WorkshopId == workshopId) - .Include(x => x.CustomizeWorkshopGroupSettingsCollection) - .Select(x => new CustomizeWorkshopSettingsViewModel() - { - Id = x.id, - WorkshopShiftStatus = x.WorkshopShiftStatus, - GroupSettings = x.CustomizeWorkshopGroupSettingsCollection.Select(g => + Id = entity.id, + Name = auth.WorkshopList.FirstOrDefault(w => w.Id == entity.WorkshopId)?.Name, + GroupSettings = entity.CustomizeWorkshopGroupSettingsCollection.Where(x => !x.MainGroup).Select(x => new CustomizeWorkshopGroupSettingsViewModel() { - Id = g.id, - IrregularShift = g.IrregularShift, - WorkshopShiftStatus = g.WorkshopShiftStatus, - GroupName = g.GroupName, - MainGroup = g.MainGroup, - RollCallWorkshopShifts = g.CustomizeWorkshopGroupSettingsShifts.Select(s => + Id = x.id, + GroupName = x.GroupName, + WorkshopShiftStatus = x.WorkshopShiftStatus, + IrregularShift = x.IrregularShift, + Salary = x.Salary, + RollCallWorkshopShifts = x.CustomizeWorkshopGroupSettingsShifts.Select(s => new CustomizeWorkshopShiftViewModel() { - StartTime = s.StartTime.ToString("HH:mm"), EndTime = s.EndTime.ToString("HH:mm"), Placement = s.Placement, - }).ToList(), - BreakTime = g.BreakTime, - HolidayWork = g.HolidayWork, - FridayWork = g.FridayWork, - CustomizeRotatingShiftsViewModels = g.CustomizeRotatingShifts.Select(r => new CustomizeRotatingShiftsViewModel() - { - EndTime = r.EndTime.ToString("HH:mm"), - StartTime = r.StartTime.ToString("HH:mm") - }).ToList() + StartTime = s.StartTime.ToString("HH:mm") + }).ToList(), + MainGroup = x.MainGroup, + CustomizeRotatingShiftsViewModels = x.CustomizeRotatingShifts. + Select(r=>new CustomizeRotatingShiftsViewModel(){StartTime = r.StartTime.ToString("HH:mm"), EndTime = r.EndTime.ToString("HH:mm")}).ToList() }).ToList(), - - }).FirstOrDefault(); - - return customizeWorkshopSettings; - } - - public CustomizeWorkshopEmployeeSettingsViewModel GetEmployeeSettingsByWorkshopIdEmployeeId(long workshopId, long employeeId) - { - var employee = _companyContext.CustomizeWorkshopSettings - .AsSplitQuery().Include(x => x.CustomizeWorkshopGroupSettingsCollection) - .ThenInclude(x => x.CustomizeWorkshopEmployeeSettingsCollection) - .FirstOrDefault(x => x.WorkshopId == workshopId)?.CustomizeWorkshopGroupSettingsCollection.SelectMany(x => x.CustomizeWorkshopEmployeeSettingsCollection) - .FirstOrDefault(x => x.EmployeeId == employeeId); - - if (employee == null) - return new(); - - var employeeName = _companyContext.Employees.Select(x => new { x.FullName, x.id }) - .FirstOrDefault(x => x.id == employee.EmployeeId); - return new CustomizeWorkshopEmployeeSettingsViewModel() + }; + } + public CustomizeWorkshopSettingsViewModel GetWorkshopSettingsByWorkshopIdForAdmin(long workshopId) { - Id = employee.id, - EmployeeId = employee.EmployeeId, - IsSettingChanged = employee.IsSettingChanged, - IsShiftChanged = employee.IsShiftChanged, - Name = employeeName?.FullName, - RollCallWorkshopShifts = employee.CustomizeWorkshopEmployeeSettingsShifts.Select(x => - new CustomizeWorkshopShiftViewModel() + var entity = _companyContext.CustomizeWorkshopSettings.AsSplitQuery().Where(x => x.WorkshopId == workshopId) + .Include(x => x.CustomizeWorkshopGroupSettingsCollection) + .ThenInclude(x => x.CustomizeWorkshopEmployeeSettingsCollection).AsSplitQuery() + .FirstOrDefault(); + if (entity == null) + return new(); + + return new CustomizeWorkshopSettingsViewModel() + { + Id = entity.id, + Offset = entity.EndTimeOffSet, + GroupSettings = entity.CustomizeWorkshopGroupSettingsCollection.Where(x => !x.MainGroup).Select(x => + new CustomizeWorkshopGroupSettingsViewModel() + { + Id = x.id, + GroupName = x.GroupName, + RollCallWorkshopEmployeesSettings = x.CustomizeWorkshopEmployeeSettingsCollection.Select(y => + { + var employee = _employeeRepository.Get(y.EmployeeId); + return new CustomizeWorkshopEmployeeSettingsViewModel() + { + Id = y.id, + EmployeeId = y.EmployeeId, + IsSettingChanged = y.IsSettingChanged, + IsShiftChanged = y.IsShiftChanged, + Name = $"{employee?.FName} {employee?.LName}", + RollCallWorkshopShifts = y.CustomizeWorkshopEmployeeSettingsShifts.Select(s => + new CustomizeWorkshopShiftViewModel() + { + EndTime = s.EndTime.ToString("HH:mm"), + Placement = s.Placement, + StartTime = s.StartTime.ToString("HH:mm") + }).ToList(), + Salary = y.Salary, + CustomizeRotatingShiftsViewModels = y.CustomizeRotatingShifts.Select(r => new CustomizeRotatingShiftsViewModel + { + StartTime = r.StartTime.ToString("HH:mm"), + EndTime = r.EndTime.ToString("HH:mm") + }).ToList(), + LeavePermittedDays = y.LeavePermittedDays, + IrregularShift = y.IrregularShift, + WorkshopShiftStatus = y.WorkshopShiftStatus + }; + }).ToList(), + Salary = x.Salary, + RollCallWorkshopShifts = x.CustomizeWorkshopGroupSettingsShifts.Select(s => + new CustomizeWorkshopShiftViewModel() + { + EndTime = s.EndTime.ToString("HH:mm"), + Placement = s.Placement, + StartTime = s.StartTime.ToString("HH:mm") + + }).ToList(), + MainGroup = x.MainGroup, + WorkshopShiftStatus = x.WorkshopShiftStatus, + CustomizeRotatingShiftsViewModels = x.CustomizeRotatingShifts.Select(r=>new CustomizeRotatingShiftsViewModel + { + StartTime = r.StartTime.ToString("HH:mm"), + EndTime = r.EndTime.ToString("HH:mm") + }).ToList(), + IrregularShift = x.IrregularShift + + + + }).ToList(), + }; + } + + + public EditCustomizeWorkshopSettings GetWorkshopSettingsDetails(long workshopId) + { + + var entity = _companyContext.CustomizeWorkshopSettings.AsSplitQuery().FirstOrDefault(x => x.WorkshopId == workshopId); + if (entity == null) + return new(); + var viewModel = new EditCustomizeWorkshopSettings() + { + FridayWork = entity.FridayWork, + FridayPay = new() { FridayPayType = entity.FridayPay.FridayPayType, Value = entity.FridayPay.Value }, + LateToWork = new() + { + LateToWorkTimeFinesVewModels = entity.LateToWork.LateToWorkTimeFines.Select(x => + new LateToWorkTimeFineVewModel() { FineMoney = x.FineMoney, Minute = x.Minute }).ToList(), + Value = entity.LateToWork.Value, + LateToWorkType = entity.LateToWork.LateToWorkType + }, + HolidayWork = entity.HolidayWork, + FineAbsenceDeduction = new() + { + Value = entity.FineAbsenceDeduction.Value, + FineAbsenceDayOfWeekViewModels = entity.FineAbsenceDeduction.FineAbsenceDayOfWeekCollection + .Select(x => new FineAbsenceDayOfWeekViewModel() { DayOfWeek = x.DayOfWeek }).ToList(), + FineAbsenceDeductionType = entity.FineAbsenceDeduction.FineAbsenceDeductionType + }, + EarlyExit = new() + { + EarlyExitTimeFinesViewModels = entity.EarlyExit.EarlyExitTimeFines.Select(x => + new EarlyExitTimeFineViewModel() { FineMoney = x.FineMoney, Minute = x.Minute }).ToList(), + Value = entity.EarlyExit.Value, + EarlyExitType = entity.EarlyExit.EarlyExitType + }, + BonusesPay = new() + { + Value = entity.BonusesPay.Value, + BonusesPayType = entity.BonusesPay.BonusesPayType, + PaymentType = entity.BonusesPay.PaymentType + }, + ShiftPay = new() + { + Value = entity.ShiftPay.Value, + ShiftPayType = entity.ShiftPay.ShiftPayType, + ShiftType = entity.ShiftPay.ShiftType + }, + InsuranceDeduction = new() + { + Value = entity.InsuranceDeduction.Value, + InsuranceDeductionType = entity.InsuranceDeduction.InsuranceDeductionType + }, + OverTimePay = new() + { OverTimePayType = entity.OverTimePay.OverTimePayType, Value = entity.OverTimePay.Value }, + BaseYearsPay = new() + { + BaseYearsPayType = entity.BaseYearsPay.BaseYearsPayType, + Value = entity.BaseYearsPay.Value, + PaymentType = entity.BaseYearsPay.PaymentType + }, + NightWorkPay = new() + { NightWorkingType = entity.NightWorkPay.NightWorkingType, Value = entity.NightWorkPay.Value }, + LeavePay = new() + { + Value = entity.LeavePay.Value, + LeavePayType = entity.LeavePay.LeavePayType + }, + MarriedAllowance = new() + { + Value = entity.MarriedAllowance.Value, + MarriedAllowanceType = entity.MarriedAllowance.MarriedAllowanceType + }, + FamilyAllowance = new() + { + FamilyAllowanceType = entity.FamilyAllowance.FamilyAllowanceType, + Value = entity.FamilyAllowance.Value + }, + Currency = entity.Currency, + MaxMonthDays = entity.MaxMonthDays, + Id = entity.id, + ShiftsList = entity.CustomizeWorkshopSettingsShifts.Select(x => new CustomizeWorkshopShiftViewModel() + { EndTime = x.EndTime.ToString("HH:mm"), Placement = x.Placement, StartTime = x.StartTime.ToString("HH:mm") }).ToList(), + BonusesPaysInEndOfMonth = entity.BonusesPaysInEndOfMonth, + LeavePermittedDays = entity.LeavePermittedDays, + BaseYearsPayInEndOfYear = entity.BaseYearsPayInEndOfYear, + WorkshopId = entity.WorkshopId, + WorkshopShiftStatus = entity.WorkshopShiftStatus + + }; + return viewModel; + + } + + public CustomizeWorkshopSettings GetBy(long workshopId) + { + return _companyContext.CustomizeWorkshopSettings.FirstOrDefault(x => x.WorkshopId == workshopId); + } + + public EditCustomizeWorkshopSettings GetSimpleWorkshopSettings(long workshopId) + { + var entity = _companyContext.CustomizeWorkshopSettings.AsSplitQuery().FirstOrDefault(x => x.WorkshopId == workshopId); + if (entity == null) + { + return new(); + } + + return new() + { + ShiftsList = entity.CustomizeWorkshopSettingsShifts.Select(x => new CustomizeWorkshopShiftViewModel() { EndTime = x.EndTime.ToString("HH:mm"), - Placement = x.Placement, - StartTime = x.StartTime.ToString("HH:mm") + StartTime = x.StartTime.ToString("HH:mm"), + Placement = x.Placement }).ToList(), - Salary = employee.Salary - }; - } + Id = entity.id, + WorkshopId = entity.WorkshopId, + WorkshopShiftStatus = entity.WorkshopShiftStatus, + FridayWork = entity.FridayWork, + HolidayWork = entity.HolidayWork - #region Pooya - public List GetEmployeeSettingsWithMonthlySalary(long workshopId) - { - var query = _companyContext.CustomizeWorkshopGroupSettings.Where(x => x.MainGroup == false).Include(x => x) - .Include(x => x.CustomizeWorkshopEmployeeSettingsCollection).Where(x => x.CustomizeWorkshopEmployeeSettingsCollection.Any(y => + }; + } + + public List GetShiftChangesGroupAndEmployees(long customizeWorkshopSettingsId) + { + + + var result = from groupSetting in _companyContext.CustomizeWorkshopGroupSettings.AsSplitQuery() + where groupSetting.IsShiftChange // Filter parent tables where isChange is true + join employeeSettings in _companyContext.CustomizeWorkshopEmployeeSettings on groupSetting.id equals employeeSettings.CustomizeWorkshopGroupSettingId + where employeeSettings.IsShiftChanged// Filter child tables where isChange is true + join employee in _companyContext.Employees on employeeSettings.EmployeeId equals employee.id + group new { employee.FullName, groupSetting.GroupName } by groupSetting.id into grouped + select new ChangedGroupedViewModel + { + GroupName = grouped.First().GroupName, + EmployeeName = grouped.Select(e => e.FullName).ToList() + }; + + return result.ToList(); + + } + + public CustomizeWorkshopSettingsViewModel GetWorkshopIncludeGroupsByWorkshopId(long workshopId) + { + var customizeWorkshopSettings = _companyContext.CustomizeWorkshopSettings + .AsNoTracking().AsSplitQuery().Where(x => x.WorkshopId == workshopId) + .Include(x => x.CustomizeWorkshopGroupSettingsCollection) + .Select(x => new CustomizeWorkshopSettingsViewModel() + { + Id = x.id, + WorkshopShiftStatus = x.WorkshopShiftStatus, + GroupSettings = x.CustomizeWorkshopGroupSettingsCollection.Select(g => + new CustomizeWorkshopGroupSettingsViewModel() + { + Id = g.id, + IrregularShift = g.IrregularShift, + WorkshopShiftStatus = g.WorkshopShiftStatus, + GroupName = g.GroupName, + MainGroup = g.MainGroup, + Salary = g.Salary, + SalaryStr = g.Salary.ToMoney(), + LeavePermitted = g.LeavePermittedDays, + RollCallWorkshopShifts = g.CustomizeWorkshopGroupSettingsShifts.Select(s => + new CustomizeWorkshopShiftViewModel() + { + StartTime = s.StartTime.ToString("HH:mm"), + EndTime = s.EndTime.ToString("HH:mm"), + Placement = s.Placement, + }).ToList(), + BreakTime = g.BreakTime, + HolidayWork = g.HolidayWork, + FridayWork = g.FridayWork, + CustomizeRotatingShiftsViewModels = g.CustomizeRotatingShifts.Select(r=>new CustomizeRotatingShiftsViewModel() + { + EndTime = r.EndTime.ToString("HH:mm"), + StartTime= r.StartTime.ToString("HH:mm") + }).ToList() + + }).ToList(), + + + }).FirstOrDefault(); + + return customizeWorkshopSettings; + } + + public CustomizeWorkshopEmployeeSettingsViewModel GetEmployeeSettingsByWorkshopIdEmployeeId(long workshopId, long employeeId) + { + var employee = _companyContext.CustomizeWorkshopSettings + .AsSplitQuery().Include(x => x.CustomizeWorkshopGroupSettingsCollection) + .ThenInclude(x => x.CustomizeWorkshopEmployeeSettingsCollection) + .FirstOrDefault(x => x.WorkshopId == workshopId)?.CustomizeWorkshopGroupSettingsCollection.SelectMany(x => x.CustomizeWorkshopEmployeeSettingsCollection) + .FirstOrDefault(x => x.EmployeeId == employeeId); + + if (employee == null) + return new(); + + var employeeName = _companyContext.Employees.Select(x => new { x.FullName, x.id }) + .FirstOrDefault(x => x.id == employee.EmployeeId); + return new CustomizeWorkshopEmployeeSettingsViewModel() + { + Id = employee.id, + EmployeeId = employee.EmployeeId, + IsSettingChanged = employee.IsSettingChanged, + IsShiftChanged = employee.IsShiftChanged, + Name = employeeName?.FullName, + RollCallWorkshopShifts = employee.CustomizeWorkshopEmployeeSettingsShifts.Select(x => + new CustomizeWorkshopShiftViewModel() + { + EndTime = x.EndTime.ToString("HH:mm"), + Placement = x.Placement, + StartTime = x.StartTime.ToString("HH:mm") + }).ToList(), + Salary = employee.Salary + }; + } + + #region Pooya + public List GetEmployeeSettingsWithMonthlySalary(long workshopId) + { + var query = _companyContext.CustomizeWorkshopGroupSettings.Where(x => x.MainGroup == false).Include(x => x) + .Include(x => x.CustomizeWorkshopEmployeeSettingsCollection).Where(x => x.CustomizeWorkshopEmployeeSettingsCollection.Any(y => y.WorkshopId == workshopId)).SelectMany(x => x.CustomizeWorkshopEmployeeSettingsCollection) - .Where(x => x.Salary > 0).Select(x => + .Where(x => x.Salary > 0).Select(x => new CustomizeWorkshopEmployeeSettingsViewModel() { WorkshopShiftStatus = x.WorkshopShiftStatus, @@ -374,31 +361,26 @@ public class CustomizeWorkshopSettingsRepository(CompanyContext companyContext, EmployeeId = x.EmployeeId, BreakTime = x.BreakTime }); - return query.ToList(); - } + return query.ToList(); + } - public List GetEmployeeSettingsByWorkshopId(long workshopId) - { - return _companyContext.CustomizeWorkshopSettings.AsNoTracking().Where(x => x.WorkshopId == workshopId).Include(x => x.CustomizeWorkshopGroupSettingsCollection) - .ThenInclude(x => x.CustomizeWorkshopEmployeeSettingsCollection).SelectMany(x => x.CustomizeWorkshopGroupSettingsCollection + public List GetEmployeeSettingsByWorkshopId(long workshopId) + { + return _companyContext.CustomizeWorkshopSettings.AsNoTracking().Where(x => x.WorkshopId == workshopId).Include(x => x.CustomizeWorkshopGroupSettingsCollection) + .ThenInclude(x => x.CustomizeWorkshopEmployeeSettingsCollection).SelectMany(x => x.CustomizeWorkshopGroupSettingsCollection .SelectMany(y => y.CustomizeWorkshopEmployeeSettingsCollection)) - .Select(x => new CustomizeWorkshopEmployeeSettingsViewModel - { - BreakTime = x.BreakTime, - IsShiftChanged = x.IsShiftChanged, - IsSettingChanged = x.IsSettingChanged, - EmployeeId = x.EmployeeId, - Id = x.id, - Salary = x.Salary, - GroupSettingsId = x.CustomizeWorkshopGroupSettingId - }).ToList(); - } + .Select(x => new CustomizeWorkshopEmployeeSettingsViewModel + { + BreakTime = x.BreakTime, + IsShiftChanged = x.IsShiftChanged, + IsSettingChanged = x.IsSettingChanged, + EmployeeId = x.EmployeeId, + Id = x.id, + Salary = x.Salary, + GroupSettingsId = x.CustomizeWorkshopGroupSettingId + }).ToList(); + } - public CustomizeWorkshopSettings GetBy(long workshopId) - { - return _companyContext.CustomizeWorkshopSettings.AsSplitQuery() - .FirstOrDefault(x => x.WorkshopId == workshopId); + #endregion } - - #endregion } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/DateSalaryRepository.cs b/CompanyManagment.EFCore/Repository/DateSalaryRepository.cs index e7112dac..e0ff2fa6 100644 --- a/CompanyManagment.EFCore/Repository/DateSalaryRepository.cs +++ b/CompanyManagment.EFCore/Repository/DateSalaryRepository.cs @@ -43,6 +43,9 @@ public class DateSalaryRepository : RepositoryBase, IDateSalar Year = x.Year, StartDateFa = x.StartDateFa, EndDateFa = x.EndDateFa, + StartDateGr = x.StartDateGr, + EndDateGr = x.EndDateGr + }); var list = query.OrderByDescending(x => x.Id).ToList(); @@ -51,7 +54,7 @@ public class DateSalaryRepository : RepositoryBase, IDateSalar if (!string.IsNullOrWhiteSpace(searchModel.Month)) list = list.Where(x => x.Year == searchModel.Month).OrderByDescending(x => x.Year).ToList(); - return list; + return list.OrderByDescending(x=>x.StartDateGr).ToList(); } public DateSalaryViewModel GetDateSalaryViewModel(DateSalarySearchModel searchModel) { @@ -106,7 +109,7 @@ public class DateSalaryRepository : RepositoryBase, IDateSalar var dateSalary = Get(command.Id); dateSalary.Edit(command.StartDateFa, command.EndDateFa); SaveChanges(); - command.DateSalaryItems = command.DateSalaryItems.Where(x => x.Salary > 0).ToList(); + //command.DateSalaryItems = command.DateSalaryItems.Where(x => x.Salary > 0).ToList(); foreach (var item in command.DateSalaryItems) { if (item.Id == 0) diff --git a/CompanyManagment.EFCore/Repository/InsuranceJobItemRepository.cs b/CompanyManagment.EFCore/Repository/InsuranceJobItemRepository.cs index a4cb88cb..0c246f03 100644 --- a/CompanyManagment.EFCore/Repository/InsuranceJobItemRepository.cs +++ b/CompanyManagment.EFCore/Repository/InsuranceJobItemRepository.cs @@ -6,8 +6,10 @@ using _0_Framework.InfraStructure; using Company.Domain.InsuranceJobAndJobsAgg; using Company.Domain.InsuranceJobItemAgg; +using CompanyManagment.App.Contracts.DateSalaryItem; using CompanyManagment.App.Contracts.InsuranceJobItem; using CompanyManagment.App.Contracts.Job; +using Microsoft.EntityFrameworkCore; namespace CompanyManagment.EFCore.Repository; @@ -22,8 +24,8 @@ public class InsuranceJobItemRepository : RepositoryBase public void CreateInsuranceJobItem(InsuranceJobItemViewModel model) { - InsuranceJobItem incuranceJobItemObj = new InsuranceJobItem(model.PercentageLessThan, model.SalaeyLessThan, - model.PercentageMoreThan, model.SalaryMoreThan, model.InsuranceJobId); + InsuranceJobItem incuranceJobItemObj = new InsuranceJobItem(0, 0, + 0, 0, model.InsuranceJobId, model.StartDate,model.EndDate); _context.InsuranceJobItems.Add(incuranceJobItemObj); _context.SaveChanges(); List insuranceJobAndJobsList = new List(); @@ -44,7 +46,7 @@ public class InsuranceJobItemRepository : RepositoryBase throw new NotImplementedException(); } - public List GetInsuranceJobItemByInsuranceJobId(long Id) + public List GetInsuranceJobItemByInsuranceJobId(long Id, string year, string month) { //var list = _context.InsuranceJobItems.Where(x => x.InsuranceJobId == Id).ToList().Select(x=>new InsuranceJobItemViewModel() @@ -91,21 +93,37 @@ public class InsuranceJobItemRepository : RepositoryBase // list.Add(obj); //} - - var insuranceJobItems = _context.InsuranceJobItems.Where(x => x.InsuranceJobId == Id).ToList(); + var searcheDate = ($"{year}/{month}/01").ToGeorgianDateTime(); + var insuranceJobItems = _context.InsuranceJobItems.Where(i => i.InsuranceJobId == Id && i.StartDate <= searcheDate && i.EndDate >= searcheDate).ToList(); var list = new List(); + var usedParcentsInDateSalaryItems = _context.DateSalaries + .Where(x => x.StartDateGr <= searcheDate && x.EndDateGr >= searcheDate) + .Include(x => x.DateSalaryItemList) + .SelectMany(x => x.DateSalaryItemList) + .ToList(); foreach (var item in insuranceJobItems) { + double lessThan = usedParcentsInDateSalaryItems.Any(x => x.Percent == item.PercentageLessThan && x.Salary > 0) + ? usedParcentsInDateSalaryItems.FirstOrDefault(x => x.Percent == item.PercentageLessThan).Salary + : 0; + + double moreThan = usedParcentsInDateSalaryItems.Any(x => x.Percent == item.PercentageMoreThan && x.Salary > 0) + ? usedParcentsInDateSalaryItems.FirstOrDefault(x => x.Percent == item.PercentageMoreThan).Salary + : 0; var obj = new InsuranceJobItemViewModel(); obj.Id = item.id; obj.PercentageLessThan = item.PercentageLessThan; + obj.IsPercentageLessThanUse = lessThan > 0 ; obj.PercentageMoreThan = item.PercentageMoreThan; + obj.IsPercentageMoreThanUse = moreThan > 0; obj.SalaeyLessThan = item.SalaeyLessThan; obj.SalaryMoreThan = item.SalaryMoreThan; - obj.SalaeyLessThanString = item.SalaryMoreThan.ToMoney(); - obj.SalaryMoreThanString = item.SalaryMoreThan.ToMoney(); + obj.SalaeyLessThanString = lessThan > 0 ? lessThan.ToMoney() : "0"; + obj.SalaryMoreThanString = moreThan > 0 ? moreThan.ToMoney() : "0"; obj.InsuranceJobId = item.InsuranceJobId; + obj.StartDate = item.StartDate; + obj.EndDate = item.EndDate; obj.JobIds = _context.InsuranceJobAndJobsSet.Where(p => p.InsuranceJobItemId == item.id) .Select(p => p.JobId).ToList(); obj.JobList = _context.Jobs.Where(x => obj.JobIds.Contains(x.id)).ToList().Select(x => @@ -122,10 +140,11 @@ public class InsuranceJobItemRepository : RepositoryBase } - public InsuranceJobItemViewModel GetInsuranceJobItemByInsuranceJobIdForFixedSalary(long insuranceJobId, long jobId) + public InsuranceJobItemViewModel GetInsuranceJobItemByInsuranceJobIdForFixedSalary(long insuranceJobId, long jobId, string year, string month) { + var searcheDate = ($"{year}/{month}/01").ToGeorgianDateTime(); var insuranceJobItemViewModel = new InsuranceJobItemViewModel(); - var insuranceJobItems = _context.InsuranceJobItems.Where(x => x.InsuranceJobId == insuranceJobId).ToList(); + var insuranceJobItems = _context.InsuranceJobItems.Where(i => i.InsuranceJobId == insuranceJobId && i.StartDate <= searcheDate && i.EndDate >= searcheDate).ToList(); var insuranceJobItemIds = insuranceJobItems.Select(x => x.id).ToList(); var jobAndJob = _context.InsuranceJobAndJobsSet .Where(x => insuranceJobItemIds.Contains(x.InsuranceJobItemId) && x.JobId == jobId).FirstOrDefault(); @@ -146,6 +165,17 @@ public class InsuranceJobItemRepository : RepositoryBase return insuranceJobItemViewModel; } + public (List workshopList, bool hasAnyWorkshop) GetWorkshopUsedThisInsuranceJob(long insuranceJobId) + { + var workshops = _context.Workshops.Where(x => x.InsuranceJobId == insuranceJobId); + if (!workshops.Any()) + { + return (new List(), false); + } + + return (workshops.Select(x => x.WorkshopFullName).ToList(), true); + } + public List Search(InsuranceJobItemSearchModel searchModel) { throw new NotImplementedException(); diff --git a/CompanyManagment.EFCore/Repository/InsuranceJobRepository.cs b/CompanyManagment.EFCore/Repository/InsuranceJobRepository.cs index 11b24ad1..d9834a1f 100644 --- a/CompanyManagment.EFCore/Repository/InsuranceJobRepository.cs +++ b/CompanyManagment.EFCore/Repository/InsuranceJobRepository.cs @@ -3,11 +3,17 @@ using System.Collections.Generic; using System.Linq; using _0_Framework.Application; using _0_Framework.InfraStructure; +using Company.Domain.DateSalaryAgg; +using Company.Domain.DateSalaryItemAgg; using Company.Domain.InsuranceJobAndJobsAgg; using Company.Domain.InsuranceJobItemAgg; using Company.Domain.InsurancJobAgg; using Company.Domain.PercentageAgg; using CompanyManagment.App.Contracts.InsuranceJob; +using CompanyManagment.App.Contracts.InsuranceJobItem; +using CompanyManagment.App.Contracts.Percentage; +using Microsoft.EntityFrameworkCore; +using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; namespace CompanyManagment.EFCore.Repository; @@ -15,16 +21,21 @@ namespace CompanyManagment.EFCore.Repository; public class InsuranceJobRepository : RepositoryBase, IInsuranceJobRepositpry { private readonly CompanyContext _context; + private readonly TestDbContext _testDbContext; private readonly IInsuranceJobItemRepositpry _insuranceJobItemRepositpry; private readonly IPercentageRepository _percentageRepository; - public InsuranceJobRepository(CompanyContext context, IInsuranceJobItemRepositpry insuranceJobItemRepositpry , IPercentageRepository percentageRepository) : base(context) + private readonly IDateSalaryItemRepository _dateSalaryItemRepository; + + public InsuranceJobRepository(CompanyContext context, IInsuranceJobItemRepositpry insuranceJobItemRepositpry, IPercentageRepository percentageRepository, TestDbContext testDbContext, IDateSalaryItemRepository dateSalaryItemRepository) : base(context) { _context = context; _insuranceJobItemRepositpry = insuranceJobItemRepositpry; _percentageRepository = percentageRepository; + _testDbContext = testDbContext; + _dateSalaryItemRepository = dateSalaryItemRepository; } - public EditInsuranceJob GetDetails(long id) + public EditInsuranceJob GetDetails(long id, string year, string month) { var insuranceJob = new EditInsuranceJob(); var details = Get(id); @@ -32,7 +43,13 @@ public class InsuranceJobRepository : RepositoryBase, IInsur insuranceJob.Year = details.Year; insuranceJob.EconomicCode = details.EconomicCode; insuranceJob.InsuranceJobTitle = details.InsuranceJobTitle; - insuranceJob.InsuranceJobItems = _insuranceJobItemRepositpry.GetInsuranceJobItemByInsuranceJobId(id); + insuranceJob.InsuranceJobItems = _insuranceJobItemRepositpry.GetInsuranceJobItemByInsuranceJobId(id, year, month); + var workshopsUsedThis = _insuranceJobItemRepositpry.GetWorkshopUsedThisInsuranceJob(id); + var item = insuranceJob.InsuranceJobItems.FirstOrDefault(); + insuranceJob.StartDateFa = item != null ? $"{item.StartDate.ToFarsi()}" : "-"; + insuranceJob.EndDateFa = item != null ? $"{item.EndDate.ToFarsi()}" : "-"; + insuranceJob.WorkshopList = workshopsUsedThis.workshopList; + insuranceJob.HasAnyWorkshop = workshopsUsedThis.hasAnyWorkshop; return insuranceJob; } @@ -49,16 +66,33 @@ public class InsuranceJobRepository : RepositoryBase, IInsur public List Search(InsuranceJobSearchModel searchModel) { - var query = _context.InsuranceJobs.Select(x => new InsuranceJobViewModel - { - Id = x.id, - InsuranceJobTitle = x.InsuranceJobTitle, - EconomicCode = x.EconomicCode - }); + + string now = Tools.ToFarsi(DateTime.Now); + string year = now.Substring(0, 4); + string month = now.Substring(5, 2); + if (!string.IsNullOrWhiteSpace(searchModel.Year)) + year = searchModel.Year; + if (!string.IsNullOrWhiteSpace(searchModel.Month)) + month = searchModel.Month; + + + var searcheDate = ($"{year}/{month}/01").ToGeorgianDateTime(); + var query = _context.InsuranceJobs + .Include(x => x.InsuranceJobItemList).Where(x => x.InsuranceJobItemList.Any(i => i.StartDate <= searcheDate && i.EndDate >= searcheDate)) + .Select(x => new InsuranceJobViewModel + { + Id = x.id, + InsuranceJobTitle = x.InsuranceJobTitle, + EconomicCode = x.EconomicCode, + Year = year, + Month = month, + + + }); if (!string.IsNullOrWhiteSpace(searchModel.EconomicCode)) - query = query.Where(x => x.EconomicCode.Contains(searchModel.EconomicCode)); - + query = query.Where(x => x.EconomicCode.Contains(searchModel.EconomicCode)); + if (!string.IsNullOrWhiteSpace(searchModel.InsuranceJobTitle)) query = query.Where(x => x.InsuranceJobTitle.Contains(searchModel.InsuranceJobTitle)); @@ -67,7 +101,21 @@ public class InsuranceJobRepository : RepositoryBase, IInsur public OperationResult CreateInsuranceJob(CreateInsuranceJob command) { - OperationResult result = new OperationResult(); + OperationResult result = new OperationResult(); + var insuranceJobItemObj = _insuranceJobItemRepositpry.Get(command.InsuranceJobItemId); + if (insuranceJobItemObj == null) + return result.Failed("آیتم شغلی انتخاب شده وجود ندارد"); + + List percentaegJoin = new List(); + var percentageLessThan = command.InsuranceJobItems.Select(x => x.PercentageLessThan).ToList(); + var percentageMoreThan = command.InsuranceJobItems.Select(x => x.PercentageMoreThan).ToList(); + if (percentageMoreThan != null) + { + percentaegJoin = percentageLessThan + .Concat(percentageMoreThan) + .Distinct() + .ToList(); + } using (var transaction = _context.Database.BeginTransaction()) { try @@ -80,6 +128,8 @@ public class InsuranceJobRepository : RepositoryBase, IInsur item.PercentageLessThan = item.PercentageLessThan; item.PercentageMoreThan = item.PercentageMoreThan; item.InsuranceJobId = insuranceJobObj.id; + item.StartDate = insuranceJobItemObj.StartDate; + item.EndDate = insuranceJobItemObj.EndDate; _insuranceJobItemRepositpry.CreateInsuranceJobItem(item); if (!_percentageRepository.Exists(x => x.Percent == item.PercentageLessThan)) @@ -93,16 +143,39 @@ public class InsuranceJobRepository : RepositoryBase, IInsur var percentage2 = new Percentage(item.PercentageMoreThan); _percentageRepository.Create(percentage2); } - + _percentageRepository.SaveChanges(); } + + var dateSalary = _context.DateSalaries.FirstOrDefault(x => + x.StartDateGr == insuranceJobItemObj.StartDate && x.EndDateGr == insuranceJobItemObj.EndDate); + var percentages = _context.Percentages.Select(x => new { x.id, x.Percent }).ToList(); + var dateSalaryItemList = new List(); + foreach (var percent in percentaegJoin) + { + var percentageId = percentages.FirstOrDefault(x => x.Percent == percent); + if (percentageId != null) + { + + var dateSalaryItem = new DateSalaryItem(percent, percentageId.id, 0, dateSalary.id); + dateSalaryItemList.Add(dateSalaryItem); + } + + + } + + if (dateSalaryItemList.Count > 0) + { + _context.DateSalaryItems.AddRange(dateSalaryItemList); + _context.SaveChanges(); + } // SaveChanges(); transaction.Commit(); result.IsSuccedded = true; result.Message = "ثبت اطلاعات با موفقیت انجام شد"; } catch (Exception ex) - { + { transaction.Rollback(); result.Failed("ثبت اطلاعات با خطا مواجه شد"); } @@ -110,19 +183,240 @@ public class InsuranceJobRepository : RepositoryBase, IInsur return result; } - public OperationResult Remove(long id) + public List<(long id, string date)> GetOldYersInsuranceItemIds() { + var res = _context.InsuranceJobItems.Where(x=>x.StartDate != null && x.EndDate != null) + .GroupBy(x => x.StartDate) + .Select(g => g.First()) + .ToList().Select(x => new InsuranceJobItemViewModel() + { + Id = x.id, + StartDate = x.StartDate, + EndDate = x.EndDate, + + + }).OrderByDescending(x=>x.StartDate); + + return res.Select(x => (x.Id, $"{(x.StartDate.HasValue ? x.StartDate.Value.ToFarsi() : "نامشخص")} - {(x.EndDate.HasValue ? x.EndDate.Value.ToFarsi() : "نامشخص")}")).ToList(); + + } + + public OperationResult CopyFromLastYear(CopyFromLastYearViewModel command) + { + var op = new OperationResult(); + if (command.InsuranceJobItemId == 0) + return op.Failed("بازه را انتخاب کنید"); + DateTime startDateGr = new DateTime(); + DateTime endDateGr = new DateTime(); + try + { + startDateGr = command.StartDate.ToGeorgianDateTime(); + endDateGr = command.EndDate.ToGeorgianDateTime(); + + } + catch (Exception e) + { + return op.Failed("تاریخ به درستی وارد نشده است"); + + } + + + var chekExist = _insuranceJobItemRepositpry.Exists(x => x.StartDate < endDateGr && x.EndDate > startDateGr); + if (chekExist) + return op.Failed("بازه تاریخ وارد شده با بازه های قبلی تداخل دارد"); + + var insuranceJobItemObj = _insuranceJobItemRepositpry.Get(command.InsuranceJobItemId); + if (insuranceJobItemObj == null) + return op.Failed("آیتم شغلی انتخاب شده وجود ندارد"); + var insuranceJobItemList = _context.InsuranceJobItems + .Include(jobs => jobs.InsuranceJobAndJobs) + .Where(x => x.StartDate == insuranceJobItemObj.StartDate).Select(x => new InsuranceJobItemViewModel() + { + PercentageLessThan = x.PercentageLessThan, + PercentageMoreThan = x.PercentageMoreThan, + InsuranceJobId = x.InsuranceJobId, + StartDate = startDateGr, + EndDate = endDateGr, + JobIds = x.InsuranceJobAndJobs.Select(j => j.JobId).ToList() + }).ToList(); + + if (!insuranceJobItemList.Any()) + return op.Failed("خطا"); + List percentaegJoin = new List(); + var percentageLessThan = insuranceJobItemList.Select(x => x.PercentageLessThan).ToList(); + var percentageMoreThan = insuranceJobItemList.Select(x => x.PercentageMoreThan).ToList(); + if (percentageMoreThan != null) + { + percentaegJoin = percentageLessThan + .Concat(percentageMoreThan) + .Distinct() + .ToList(); + } + + using (var transaction = _context.Database.BeginTransaction()) + { + try + { + + foreach (var item in insuranceJobItemList) + { + + _insuranceJobItemRepositpry.CreateInsuranceJobItem(item); + + + if (!_percentageRepository.Exists(x => x.Percent == item.PercentageLessThan)) + { + var percentage = new Percentage(item.PercentageLessThan); + _percentageRepository.Create(percentage); + } + + if (!_percentageRepository.Exists(x => x.Percent == item.PercentageMoreThan)) + { + var percentage2 = new Percentage(item.PercentageMoreThan); + _percentageRepository.Create(percentage2); + } + + _percentageRepository.SaveChanges(); + } + + var dateSalary = new DateSalary(command.StartDate, command.EndDate); + _context.DateSalaries.Add(dateSalary); + _context.SaveChanges(); + var percentages = _context.Percentages.Select(x=> new{x.id, x.Percent}).ToList(); + var dateSalaryItemList = new List(); + foreach (var percent in percentaegJoin) + { + var percentageId = percentages.FirstOrDefault(x => x.Percent == percent); + if (percentageId != null) + { + + var dateSalaryItem = new DateSalaryItem(percent, percentageId.id, 0, dateSalary.id); + dateSalaryItemList.Add(dateSalaryItem); + } + + + } + + if (dateSalaryItemList.Count > 0) + { + _context.DateSalaryItems.AddRange(dateSalaryItemList); + _context.SaveChanges(); + } + + + + // SaveChanges(); + transaction.Commit(); + op.IsSuccedded = true; + op.Message = "ثبت اطلاعات با موفقیت انجام شد"; + return op; + } + catch (Exception ex) + { + transaction.Rollback(); + return op.Failed("ثبت اطلاعات با خطا مواجه شد"); + } + } + + } + + public OperationResult RecoveryOldData1403() + { + OperationResult result = new OperationResult(); using (var transaction = _context.Database.BeginTransaction()) { try { - var insuranceJobItems = _context.InsuranceJobItems.Where(x=>x.InsuranceJobId==id).ToList(); + var res = _testDbContext.InsuranceJobItems.Include(x => x.InsuranceJobAndJobs).ToList(); + foreach (var item in res) + { + var createItem = new InsuranceJobItem(item.PercentageLessThan, 0, item.PercentageMoreThan, 0, + item.InsuranceJobId, item.StartDate, item.EndDate); + _context.InsuranceJobItems.Add(createItem); + _context.SaveChanges(); + Console.WriteLine(createItem.InsuranceJobId + " " + createItem.PercentageLessThan); + List insuranceJobAndJobsList = new List(); + foreach (var jobItem in item.InsuranceJobAndJobs) + { + var insuranceJobAndJobsObj = new InsuranceJobAndJobs(); + insuranceJobAndJobsObj.JobId = jobItem.JobId; + insuranceJobAndJobsObj.InsuranceJobItemId = createItem.id; + insuranceJobAndJobsList.Add(insuranceJobAndJobsObj); + } + _context.InsuranceJobAndJobsSet.AddRange(insuranceJobAndJobsList); + _context.SaveChanges(); + + + if (!_percentageRepository.Exists(x => x.Percent == item.PercentageLessThan)) + { + var percentage = new Percentage(item.PercentageLessThan); + _percentageRepository.Create(percentage); + } + + if (!_percentageRepository.Exists(x => x.Percent == item.PercentageMoreThan)) + { + var percentage2 = new Percentage(item.PercentageMoreThan); + _percentageRepository.Create(percentage2); + } + + _percentageRepository.SaveChanges(); + + } + + transaction.Commit(); + result.IsSuccedded = true; + result.Message = "حذف اطلاعات با موفقیت انجام شد"; + } + catch (Exception ex) + { + transaction.Rollback(); + result.Failed("ثبت اطلاعات با خطا مواجه شد"); + } + } + + return result; + + + } + public OperationResult Remove(long id) + { + OperationResult result = new OperationResult(); + var insuranceJobItems = _context.InsuranceJobItems.Where(x => x.InsuranceJobId == id).ToList(); + var start = insuranceJobItems.FirstOrDefault()!.StartDate; + var end = insuranceJobItems.FirstOrDefault()!.StartDate; + var usedParcentsInDateSalaryItems = _context.DateSalaries + .Where(x => x.StartDateGr == start && x.EndDateGr >= end) + .Include(x => x.DateSalaryItemList) + .SelectMany(x => x.DateSalaryItemList) + .ToList(); + var itemsLessThan = insuranceJobItems.Select(x => x.PercentageLessThan).ToList(); + var itemsMoreThan = insuranceJobItems.Select(x => x.PercentageMoreThan).ToList(); + bool lessThan = usedParcentsInDateSalaryItems.Any(x => itemsLessThan.Contains(x.Percent) && x.Salary > 0); + bool moreThan = usedParcentsInDateSalaryItems.Any(x => itemsMoreThan.Contains(x.Percent) && x.Salary > 0); + if (lessThan || moreThan) + return result.Failed("درصد های این صنف دارای مبلغ می باشند"); + + var percentaegJoin = itemsLessThan + .Concat(itemsMoreThan) + .Distinct() + .ToList(); + using (var transaction = _context.Database.BeginTransaction()) + { + try + { + _context.InsuranceJobItems.RemoveRange(insuranceJobItems); var insuranceJobObj = Get(id); _context.InsuranceJobs.Remove(insuranceJobObj); + + + var toBeRemove = usedParcentsInDateSalaryItems.Where(x => percentaegJoin.Contains(x.Percent)).Select(x=>x.id); + var dateSalaryItemToBeRemovde = _context.DateSalaryItems.Where(x => toBeRemove.Contains(x.id)); + _context.DateSalaryItems.RemoveRange(dateSalaryItemToBeRemovde); + _context.SaveChanges(); transaction.Commit(); result.IsSuccedded = true; @@ -147,33 +441,54 @@ public class InsuranceJobRepository : RepositoryBase, IInsur { var insuranceJob = Get(command.Id); insuranceJob.Edit(command.InsuranceJobTitle, command.YearlySalaryId, command.EconomicCode, command.Year); - - var insuranceJobItemsIds = _context.InsuranceJobItems.Where(x => x.InsuranceJobId == command.Id).Select(x=>x.id).ToList(); - //List deleteIds = new List(); + var searcheDate = ($"{command.Year}/{command.Month}/01").ToGeorgianDateTime(); + var insuranceJobItems = _context.InsuranceJobItems + .Include(x=>x.InsuranceJobAndJobs) + .Where(i => i.InsuranceJobId == command.Id && i.StartDate <= searcheDate && i.EndDate >= searcheDate); + + DateTime? startDate = insuranceJobItems.Select(x => x.StartDate).FirstOrDefault(); + DateTime? endDate = insuranceJobItems.Select(x => x.EndDate).FirstOrDefault(); + var insuranceJobItemsIds = insuranceJobItems.Select(x => x.id).ToList(); + var usedParcentsInDateSalaryItems = _context.DateSalaries + .Where(x => x.StartDateGr <= searcheDate && x.EndDateGr >= searcheDate) + .Include(x => x.DateSalaryItemList) + .SelectMany(x => x.DateSalaryItemList) + .ToList(); + //var editedJobItems = command.InsuranceJobItems.Where(x => x.Id != 0).ToList(); + //var newAdedJobItems = command.InsuranceJobItems.Where(x => x.Id == 0).ToList(); + + //foreach (var item in insuranceJobItems) + //{ + + //} foreach (var item in command.InsuranceJobItems) { - long deleteId = insuranceJobItemsIds.Where(x => x==item.Id).FirstOrDefault(); - if (deleteId !=0) - { insuranceJobItemsIds.Remove(deleteId);} + long deleteId = insuranceJobItemsIds.Where(x => x == item.Id).FirstOrDefault(); + if (deleteId != 0) + { + insuranceJobItemsIds.Remove(deleteId); + } if (item.Id == 0) { item.PercentageLessThan = item.PercentageLessThan; item.PercentageMoreThan = item.PercentageMoreThan; item.InsuranceJobId = command.Id; + item.StartDate = startDate; + item.EndDate = endDate; _insuranceJobItemRepositpry.CreateInsuranceJobItem(item); } else { var insuranceJobItem = _insuranceJobItemRepositpry.Get(item.Id); - insuranceJobItem.Edit(item.PercentageLessThan, item.SalaeyLessThan, item.PercentageMoreThan, item.SalaryMoreThan, command.Id); + insuranceJobItem.Edit(item.PercentageLessThan, item.SalaeyLessThan, item.PercentageMoreThan, item.SalaryMoreThan, command.Id, startDate, endDate); #region JobAndJob - var jobAndJobList = _context.InsuranceJobAndJobsSet .Where(x => x.InsuranceJobItemId == item.Id).ToList(); + var jobAndJobList = _context.InsuranceJobAndJobsSet.Where(x => x.InsuranceJobItemId == item.Id).ToList(); _context.InsuranceJobAndJobsSet.RemoveRange(jobAndJobList); - List insuranceJobAndJobsList = new List(); + List insuranceJobAndJobsList = new List(); foreach (var item2 in item.JobIds) { var insuranceJobAndJobsObj = new InsuranceJobAndJobs(); @@ -186,25 +501,59 @@ public class InsuranceJobRepository : RepositoryBase, IInsur } #region Percentage + var percentage = new Percentage(item.PercentageLessThan); if (!_percentageRepository.Exists(x => x.Percent == item.PercentageLessThan)) { - var percentage = new Percentage(item.PercentageLessThan); + _percentageRepository.Create(percentage); } + var percentage2 = new Percentage(item.PercentageMoreThan); if (!_percentageRepository.Exists(x => x.Percent == item.PercentageMoreThan)) { - var percentage2 = new Percentage(item.PercentageMoreThan); + _percentageRepository.Create(percentage2); } - _percentageRepository.SaveChanges(); + _percentageRepository.SaveChanges(); + #endregion + + + #region DateSalaryItems + + var checkExitLeesThan = usedParcentsInDateSalaryItems.Any(x => x.Percent == item.PercentageLessThan); + if (!checkExitLeesThan && usedParcentsInDateSalaryItems.Any()) + { + + if(percentage.id == 0) + percentage.id = _percentageRepository.Search(new PercentageSearchModel(){Percent = item.PercentageLessThan }).FirstOrDefault()!.Id; + + var dateSalaryId =usedParcentsInDateSalaryItems.FirstOrDefault()!.DateSalaryId; + var dateSalaryItem = new DateSalaryItem(item.PercentageLessThan, percentage.id, 0, dateSalaryId); + _dateSalaryItemRepository.Create(dateSalaryItem); + + } + + var checkExitMoreThan = usedParcentsInDateSalaryItems.Any(x => x.Percent == item.PercentageMoreThan); + if (!checkExitMoreThan && usedParcentsInDateSalaryItems.Any()) + { + if (percentage2.id == 0) + percentage2.id = _percentageRepository.Search(new PercentageSearchModel() { Percent = item.PercentageMoreThan }).FirstOrDefault()!.Id; + + var dateSalaryId = usedParcentsInDateSalaryItems.FirstOrDefault()!.DateSalaryId; + var dateSalaryItem = new DateSalaryItem(item.PercentageMoreThan, percentage2.id, 0, dateSalaryId); + _dateSalaryItemRepository.Create(dateSalaryItem); + + } + + _dateSalaryItemRepository.SaveChanges(); + #endregion } - + #region removeJobItems var deleteList = _context.InsuranceJobItems.Where(x => insuranceJobItemsIds.Contains(x.id)).ToList(); _context.InsuranceJobItems.RemoveRange(deleteList); #endregion - + _context.SaveChanges(); transaction.Commit(); diff --git a/CompanyManagment.EFCore/Repository/LeaveRepository.cs b/CompanyManagment.EFCore/Repository/LeaveRepository.cs index 58881bcd..7245d774 100644 --- a/CompanyManagment.EFCore/Repository/LeaveRepository.cs +++ b/CompanyManagment.EFCore/Repository/LeaveRepository.cs @@ -410,8 +410,7 @@ public class LeaveRepository : RepositoryBase, ILeaveRepository // (startLeav >= x.ContractStart && endLeav <= x.ContractEnd) || // (startLeav < x.ContractStart && endLeav <= x.ContractEnd && endLeav >= x.ContractStart) || // (startLeav < x.ContractStart && endLeav > x.ContractEnd)).ToList(); - var checkoutExist = _context.CheckoutSet.Where(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId) - .Where(x => startLeav <= x.ContractEnd).ToList(); + var checkoutExist = _context.CheckoutSet.Where(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId && startLeav <= x.ContractEnd).ToList(); if (checkoutExist.Count > 0) { res.HasChekout = true; diff --git a/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs b/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs index 3ab929d8..08caa664 100644 --- a/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs +++ b/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs @@ -173,7 +173,7 @@ public class LeftWorkRepository : RepositoryBase, ILeftWorkRepos } - + _context.SaveChanges(); return op.Succcedded(); } @@ -649,6 +649,38 @@ public class LeftWorkRepository : RepositoryBase, ILeftWorkRepos return leftWork; } + public List SearchCreateContract(LeftWorkSearchModel searchModel) + { + var vipGroup = _context.CustomizeWorkshopEmployeeSettings.Where(x => x.CustomizeWorkshopGroupSettingId == 117) + .Select(x => x.EmployeeId).ToList(); + var query = _context.LeftWorkList.Select(x => new LeftWorkViewModel() + { + Id = x.id, + LeftWorkDate = x.LeftWorkDate.ToFarsi(), + StartWorkDate = x.StartWorkDate.ToFarsi(), + LeftWorkDateGr = x.LeftWorkDate, + StartWorkDateGr = x.StartWorkDate, + EmployeeFullName = x.EmployeeFullName, + WorkshopName = x.WorkshopName, + WorkshopId = x.WorkshopId, + EmployeeId = x.EmployeeId, + AddBonusesPay = x.AddBonusesPay, + AddYearsPay = x.AddYearsPay, + AddLeavePay = x.AddLeavePay, + JobId = x.JobId, + JobName = _context.Jobs.FirstOrDefault(j => j.id == x.JobId).JobName + + + }).Where(x=> !vipGroup.Contains(x.EmployeeId)); + if (searchModel.WorkshopId != 0 && searchModel.EmployeeId != 0) + query = query.Where(x => x.WorkshopId == searchModel.WorkshopId && x.EmployeeId == searchModel.EmployeeId); + if (searchModel.EmployeeId != 0 && searchModel.WorkshopId == 0) + query = query.Where(x => x.EmployeeId == searchModel.EmployeeId); + if (searchModel.WorkshopId != 0 && searchModel.EmployeeId == 0) + query = query.Where(x => x.WorkshopId == searchModel.WorkshopId); + return query.OrderByDescending(x => x.StartWorkDateGr).ToList(); + } + private bool HasActiveRollCallStatus(long workshopId, long employeeId) { var now = DateTime.Today; diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index ad1cae73..e8ba94f1 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -41,2009 +41,2013 @@ namespace CompanyManagment.EFCore.Repository; public class RollCallMandatoryRepository : RepositoryBase, IRollCallMandatoryRepository { - private readonly CompanyContext _context; - private readonly IYearlySalaryRepository _yearlySalaryRepository; - private readonly ILeftWorkRepository _leftWorkRepository; - private readonly ILeaveRepository _leaveRepository; - private readonly IHolidayItemRepository _holidayItemRepository; - - - public RollCallMandatoryRepository(CompanyContext context, IYearlySalaryRepository yearlySalaryRepository, - ILeftWorkRepository leftWorkRepository, ILeaveRepository leaveRepository, IHolidayItemRepository holidayItemRepository) : base(context) - { - _context = context; - _yearlySalaryRepository = yearlySalaryRepository; - _leftWorkRepository = leftWorkRepository; - _leaveRepository = leaveRepository; - _holidayItemRepository = holidayItemRepository; - } - - #region OfficialChckout - public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, - DateTime contractEnd, - CreateWorkingHoursTemp command, bool holidayWorking,bool isStaticCheckout) - { - #region Entities - - string SumWorkeTime = string.Empty; - var weeklyTime = new TimeSpan(); - string shift1Hourse = "0"; - string overMandatoryHours = "0"; - string overMandatoryMinuts = "0"; - string shiftOver22Hours = "0"; - string shiftOver22Minuts = "0"; - double ShiftPayResult = 0; - int numberOfFridays = 0; - #endregion - - int TotalContractDays = (int)(contractEnd - contractStart).TotalDays + 1; - int fridays = 0; - int holiday = _context.HolidayItems.Count(x => x.Holidaydate >= contractStart && x.Holidaydate <= contractEnd); - ; - for (var gDate = contractStart; gDate <= contractEnd; gDate = gDate.AddDays(1)) - { - if (gDate.DayOfWeek == DayOfWeek.Friday) - { - fridays += 1; - } - } - int TotalDaysNoFriday = TotalContractDays - fridays; - int mandatorDays = TotalContractDays - (fridays + holiday); - if (command.ShiftWork != "4" && isStaticCheckout) - mandatorDays = TotalDaysNoFriday; - //if (holidayWorking) - // mandatorDays = TotalContractDays - fridays; - //***********************************// - //This Time Mandatory Hourse - double mandatoryHours = Math.Round((mandatorDays * 7.33), 2); - - //گرفتن ساعت استراحت پرسنل از تنظیمات - #region breakTime - BaseCustomizeEntity settings = _context.CustomizeWorkshopEmployeeSettings.AsSplitQuery() - .Include(x => x.CustomizeWorkshopGroupSettings).FirstOrDefault(x => - x.WorkshopId == workshopId && x.EmployeeId == employeeId); - //اگر ساعت استراحت پرسنل وجود نداشت صفر است - var breakTime = settings == null ? new BreakTime(false, new TimeOnly()) : settings.BreakTime; - - - #endregion - - List rollCallResult; - List groupedRollCall; - if (isStaticCheckout) - { - command.WorkshopId = workshopId; - command.EmployeeId = employeeId; - command.ContractStartGr = contractStart; - command.ContractEndGr = contractEnd; - rollCallResult = ConvertStaticHoursToRollCall(command, holidayWorking); - groupedRollCall = rollCallResult.GroupBy(x => x.ShiftDate.Date).Select(x => new GroupedRollCalls() - { - CreationDate = x.Key, - ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value }).ToList(), - HasFriday = x.Any(s => s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)), - - SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - - }).OrderBy(x => x.CreationDate).ToList(); - } - else - { - rollCallResult = _context.RollCalls.Where(x => - x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date && - x.StartDate.Value.Date <= contractEnd.Date && x.EndDate != null).Select(x => new RollCallViewModel() - { - StartDate = x.StartDate, - EndDate = x.EndDate, - ShiftSpan = (x.EndDate.Value - x.StartDate.Value), - CreationDate = x.ShiftDate, - BreakTimeSpan = x.BreakTimeSpan - }).ToList(); - - groupedRollCall = rollCallResult.GroupBy(x => x.CreationDate.Date).Select(x => new GroupedRollCalls() - { - CreationDate = x.Key, - ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value }).ToList(), - HasFriday = x.Any(s => s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)), - SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - CalculateBreakTime(x.First().BreakTimeSpan, - new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))), - - BreakTime = CalculateBreakTime(x.First().BreakTimeSpan, new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))), - - }).OrderBy(x => x.CreationDate).ToList(); - } - - - numberOfFridays = groupedRollCall.Count(x => x.HasFriday); - - ////*****کسر ساعاعت استراحت پرسنل از ساعت کار - //List rollCallSubtractSpan = groupedRollCall.Select(x => new GroupedRollCalls() - //{ - // CreationDate = x.CreationDate, - // AfterSubtractRestSpan = AfterSubtract(command, x.SumOneDaySpan, x.CreationDate), - //}).ToList(); - - - - - TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); - TimeSpan sumSpansWhitOutleaves = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); - - - //بدست آوردن مرخصی ساعتی - LeaveSearchModel hoursleaveSearch = new LeaveSearchModel() - { - EmployeeId = employeeId, - WorkshopId = workshopId, - LeaveType = "استحقاقی", - PaidLeaveType = "ساعتی", - StartLeaveGr = contractStart, - EndLeaveGr = contractEnd, - IsAccepted = true, - }; - var hoursesleave = _leaveRepository.search(hoursleaveSearch); - var hoursesleaveTimeSpansList = hoursesleave.Count > 0 - ? hoursesleave.Select(x => TimeSpan.Parse(x.LeaveHourses)).ToList() - : new List(); - - // مجموع مرخصی ساعتی - var hoursesleaveTimeSpans = new TimeSpan(hoursesleaveTimeSpansList.Sum(x => x.Ticks)); - //کسر مرخصی ساعتی از فیش استاتیک - if (isStaticCheckout && command.ShiftWork != "4") - { - // کم کردن از مجموع ساعت کار پرسنل - sumSpans = sumSpans.Subtract(hoursesleaveTimeSpans); - - } - - - - //****افزودن مرخصی پرسنل به مجموع ساعات کار*** - #region AddEmployeeLeavs - - - LeaveSearchModel leaveSearch = new LeaveSearchModel() - { - EmployeeId = employeeId, - WorkshopId = workshopId, - LeaveType = "استحقاقی", - PaidLeaveType = "روزانه", - StartLeaveGr = contractStart, - EndLeaveGr = contractEnd, - IsAccepted = true, - }; - var leaveSearchResult = _leaveRepository.search(leaveSearch); - // {مقدار ساعت مجاز مرخصی در برای یک روز{کامل - var leaveHoursesPerDay = 190.58 / 365; - - // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل - var starndardHoursesPerTotalDays = leaveHoursesPerDay * TotalContractDays; - // جدا کردن ساعت و دقیقه - int hours = (int)starndardHoursesPerTotalDays; - double minutesDecimal = (starndardHoursesPerTotalDays - hours) * 60; - int minutes = (int)minutesDecimal; - - - TimeSpan starndardHoursesPerTotalDaysSapn = new TimeSpan(hours, minutes, 0); - if (leaveSearchResult.Count > 0) - { - if (leaveSearchResult.Any(x => x.HasShiftDuration)) - { - var sumSpansDouble = (sumSpans.TotalMinutes) / 60; - if (sumSpansDouble < mandatoryHours) - { - starndardHoursesPerTotalDays = (sumSpansDouble * starndardHoursesPerTotalDays) / mandatoryHours; - // جدا کردن ساعت و دقیقه - hours = (int)starndardHoursesPerTotalDays; - minutesDecimal = (starndardHoursesPerTotalDays - hours) * 60; - minutes = (int)minutesDecimal; - - - starndardHoursesPerTotalDaysSapn = new TimeSpan(hours, minutes, 0); - } - - TimeSpan totalLeave = new TimeSpan(leaveSearchResult.Sum(x => x.ShiftDuration.Ticks)); - totalLeave = totalLeave.Add(hoursesleaveTimeSpans); - var totalLeaveDouble = (totalLeave.TotalMinutes) / 60; - if (totalLeaveDouble > starndardHoursesPerTotalDays) - { - - sumSpans = sumSpans.Add(starndardHoursesPerTotalDaysSapn); - } - else - { - sumSpans = sumSpans.Add(totalLeave); - } - - - - } - else - { - int leavingDayCout = 0; - //مرخصی های مابین - List beatweenCheckout = leaveSearchResult.Where(x => x.StartLeaveGr >= contractStart && x.EndLeaveGr <= contractEnd).Select(x => new LeaveViewModel() - { - DayCounter = Convert.ToInt32(x.LeaveHourses), - - }).ToList(); - leavingDayCout += beatweenCheckout.Sum(x => x.DayCounter); - // مرخصی که شروعش قبل از شروع تصفیه حساب است - List beforeCheckout = leaveSearchResult.Where(x => x.StartLeaveGr < contractStart).Select(x => new LeaveViewModel() - { - DayCounter = (int)(contractStart - x.EndLeaveGr).TotalDays + 1, - - }).ToList(); - leavingDayCout += beforeCheckout.Sum(x => x.DayCounter); - // مرخصی که پایانش بعد از پایان تصفیه حساب است - List afterCheckout = leaveSearchResult.Where(x => x.EndLeaveGr > contractEnd).Select(x => new LeaveViewModel() - { - DayCounter = (int)(x.StartLeaveGr - contractEnd).TotalDays + 1, - - }).ToList(); - leavingDayCout += afterCheckout.Sum(x => x.DayCounter); - Console.WriteLine(leavingDayCout); - - - TimeSpan workingPerDayAve = sumSpans / groupedRollCall.Count;//میانگین ساعت کار در روز - TimeSpan sumLeave = new TimeSpan(); - if (workingPerDayAve <= new TimeSpan(7, 20, 0)) - { - sumLeave = leavingDayCout * workingPerDayAve; - sumLeave = sumLeave.Add(hoursesleaveTimeSpans); - } - else - { - sumLeave = leavingDayCout * new TimeSpan(7, 20, 0); - } - - - if (sumLeave > starndardHoursesPerTotalDaysSapn) - { - sumSpans = sumSpans.Add(starndardHoursesPerTotalDaysSapn); - } - else - { - sumSpans = sumSpans.Add(sumLeave); - } - } - - - } - //اگر مرخصی روزانه نداشت و فقط مرخصی ساعتی داشت - if (leaveSearchResult.Count == 0 && hoursesleave.Count > 0) - { - if (hoursesleaveTimeSpans > starndardHoursesPerTotalDaysSapn) - { - sumSpans = sumSpans.Add(starndardHoursesPerTotalDaysSapn); - } - else - { - sumSpans = sumSpans.Add(hoursesleaveTimeSpans); - } - } - Console.WriteLine(sumSpans); - #endregion - //***********************************// - //ToTalHourse Employe eWorked - double totalHourses = (sumSpans.TotalMinutes) / 60; - int totalHolidaysAndNotH = (int)sumSpans.TotalHours; - int totalHolidaysAndNotM = (int)(sumSpans.TotalMinutes % 60); - //***********************************// - - - //********** محاسبه مدت اضافه کاری ***********// - #region ComputeMandatoryAtThisTime - - - - //***********************************// - var dailyFix = TimeSpan.Parse("07:20"); - TimeSpan mandatoryHoursTimeSpan = new TimeSpan(7, 20, 0).Multiply(mandatorDays); - TimeSpan Mandatory = sumSpansWhitOutleaves.Subtract(mandatoryHoursTimeSpan); - - double mandatoryWorkWithOutleaves = (sumSpansWhitOutleaves.TotalMinutes) / 60; - double overTimeWork = 0; - if (mandatoryWorkWithOutleaves > mandatoryHours) - { - overTimeWork = mandatoryWorkWithOutleaves - mandatoryHours; - - } - - - #endregion - - //******* دستمزد روزانه *******// - #region DailyFeeCompute - - var searchModel = new LeftWorkSearchModel() - { - EmployeeId = command.EmployeeId, - WorkshopId = command.WorkshopId, - - }; - - var leftworkList = _leftWorkRepository.search(searchModel); - var basic = "0"; - double dayliFeeComplete = 0; - var GetWorkStartDate = command.GetWorkDateHide.ToEnglishNumber(); - var styear = Convert.ToInt32(GetWorkStartDate.Substring(0, 4)); - var startDate = command.GetWorkDateHide.ToGeorgianDateTime(); - var dayliFee = "خطای تاریخ"; - double dayliFeeDouble = 0; - if (styear >= 1370) - { - - if (leftworkList == null) - leftworkList = new List(); - - var dayliFeeResult = _yearlySalaryRepository.DayliFeeComputing(startDate, contractStart, contractEnd, - command.EmployeeId, command.WorkshopId, leftworkList); - dayliFee = dayliFeeResult.DayliFee; - dayliFeeDouble = dayliFeeResult.DayliFeeDouble; - dayliFeeComplete = dayliFeeResult.DayliFee.MoneyToDouble(); - basic = dayliFeeResult.Basic; - } - - #endregion - - #region ConsumableItemsAndHousingAndFamily - - var ConsumableItems = _yearlySalaryRepository.ConsumableItems(contractEnd); - var HousingAllowance = _yearlySalaryRepository.HousingAllowance(contractEnd); - - var familyAllowance = _yearlySalaryRepository.FamilyAllowance(command.EmployeeId, contractStart, contractEnd); - var MarriedAllowance = _yearlySalaryRepository.MarriedAllowance(contractEnd, command.EmployeeId); - // حق تاهل - string MarriedAllowanceStr = MarriedAllowance > 0 ? MarriedAllowance.ToMoney() : "0"; - #endregion - - var totalWeek = (int)(TotalContractDays / 6); - - #region Fix44Compute - int TotalContractdaysUnder30 = TotalContractDays > 30 ? 30 : TotalContractDays; - if (totalHourses < mandatoryHours) - { - if (!string.IsNullOrWhiteSpace(command.ShiftWork)) - { - var workedHoursePerDay = totalHourses / mandatorDays; - var result = (dayliFeeDouble / 7.33) * workedHoursePerDay; - - - dayliFee = result.ToMoney(); - - var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble(); - var HousingStep1 = HousingAllowonceNumberType / 30; - var HousingStep2 = HousingStep1 / 7.33; - var HousingStep3 = HousingStep2 * workedHoursePerDay; - var HousingStep4 = HousingStep3 * TotalContractdaysUnder30; - HousingAllowance = HousingStep4.ToMoney(); - - var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble(); - var consumableItemsStep1 = ConsumableItemsNumberType / 30; - var consumableItemsStep2 = consumableItemsStep1 / 7.33; - var consumableItemsStep3 = consumableItemsStep2 * workedHoursePerDay; - var consumableItemsStep4 = consumableItemsStep3 * TotalContractdaysUnder30; - ConsumableItems = consumableItemsStep4.ToMoney(); - - - - //حق تاهل - if (MarriedAllowance > 0) - { - var MarriedStep1 = MarriedAllowance / 30; - var MarriedStep2 = MarriedStep1 / 7.33; - var MarriedStep3 = MarriedStep2 * workedHoursePerDay; - var MarriedStep4 = MarriedStep3 * TotalContractdaysUnder30; - MarriedAllowanceStr = MarriedStep4.ToMoney(); - } - - if (familyAllowance != "0") - { - - var familyAllowanceNumberType = familyAllowance.MoneyToDouble(); - var familyAllowanceStep1 = familyAllowanceNumberType / 30; - var familyAllowanceStep2 = familyAllowanceStep1 / 7.33; - var familyAllowanceStep3 = familyAllowanceStep2 * workedHoursePerDay; - var familyAllowanceStep4 = familyAllowanceStep3 * TotalContractdaysUnder30; - 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 = sumSpans; - } - - } - else // اگر بیشتر از 44 بود - { - - var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble(); - var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble(); - var familyAllowanceNumberType = familyAllowance.MoneyToDouble(); - - var HousingStep1 = HousingAllowonceNumberType / 30; - var HousingStep4 = HousingStep1 * TotalContractdaysUnder30; - HousingAllowance = HousingStep4.ToMoney(); - - - var consumableItemsStep1 = ConsumableItemsNumberType / 30; - var consumableItemsStep4 = consumableItemsStep1 * TotalContractdaysUnder30; - ConsumableItems = consumableItemsStep4.ToMoney(); - - //حق تاهل - if (MarriedAllowance > 0) - { - var MarriedStep1 = MarriedAllowance / 30; - var MarriedStep4 = MarriedStep1 * TotalContractdaysUnder30; - MarriedAllowanceStr = MarriedStep4.ToMoney(); - } - - if (familyAllowance != "0") - { - var familyAllowanceStep1 = familyAllowanceNumberType / 30; - var familyAllowanceStep4 = familyAllowanceStep1 * TotalContractdaysUnder30; - familyAllowance = familyAllowanceStep4.ToMoney(); - } - - SumWorkeTime = $"{44}"; - - //اضافه کار - if (overTimeWork > 0) - { - - //int mandatoryH = (int)Mandatory.TotalHours; - //int mandatoryM = (int)(Mandatory.TotalMinutes % 60); - int mandatoryH = (int)overTimeWork; - int mandatoryM = (int)Math.Round((overTimeWork - mandatoryH) * 60); - overMandatoryHours = mandatoryH.ToString(); - overMandatoryMinuts = mandatoryM.ToString(); - } - - } - #endregion - - //****** نوبت کاری و شب کاری **** - #region RotatingShiftCheckAndNightWorkOver22 - - string shiftPayValue = "0"; - List rotatingResultList = RotatingShiftCheck(groupedRollCall); - - // شبکاری - TimeSpan over22 = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks)); - var RotatingfaName = new List(); - //if (command.ShiftWork != "1" && command.ShiftWork != "2" && command.ShiftWork != "4")//اگر چرخشی بود و منظم نبود - //{ - // if (moriningCount > 0) - // RotatingfaName.Add("صبح"); - // if (eveningCount > 0) - // RotatingfaName.Add("عصر"); - // if (nightCount > 0) - // RotatingfaName.Add("شب"); - //} - //else// اگر منظم و شیفتی بود - //{ - // var totalDays = (int)(command.ContractEndGr - command.ContractStartGr).TotalDays + 1; - // int validCount = 0; - // if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد - // { - // validCount = 2; - // } - // else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت - // { - // validCount = 8; - // } - // else - // { - // // تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است - // validCount = (int)((totalDays * 8) / 28); - // } - - // if (moriningCount >= validCount) - // RotatingfaName.Add("صبح"); - // if (eveningCount >= validCount) - // RotatingfaName.Add("عصر"); - // if (nightCount >= validCount) - // RotatingfaName.Add("شب"); - - //} - - int moriningCount = 0; - int eveningCount = 0; - int nightCount = 0; - - int moriningWinRate = rotatingResultList.Where(x => x.IsMorningShift).Sum(x => x.WinRate); - int eveningWinRate = rotatingResultList.Where(x => x.IsEveningShift).Sum(x => x.WinRate); - int nightWinRate = rotatingResultList.Where(x => x.IsNightShift).Sum(x => x.WinRate); - - - if (moriningWinRate > eveningWinRate && moriningWinRate > nightWinRate) - { - moriningCount = rotatingResultList.Count(x => x.IsMorningShift); - eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); - nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55); - } - - if (eveningWinRate > moriningWinRate && eveningWinRate > nightWinRate) - { - moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55); - eveningCount = rotatingResultList.Count(x => x.IsEveningShift); - nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55); - } - - if (nightWinRate > moriningWinRate && nightWinRate > eveningWinRate) - { - moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55); - eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); - nightCount = rotatingResultList.Count(x => x.IsNightShift); - } - - var totalDays = (int)(command.ContractEndGr - command.ContractStartGr).TotalDays + 1; - int validCount = 0; - if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد - { - validCount = 2; - } - else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت - { - validCount = 8; - } - else - { - // تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است - validCount = (int)((totalDays * 8) / 28); - } - - 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 = "نوبت کاری ندارد"; - - var over22Hours = (int)over22.TotalHours; - var over22Minuts = (int)(over22.TotalMinutes % 60); - shiftOver22Hours = over22Hours.ToString(); - shiftOver22Minuts = over22Minuts.ToString(); - - } - #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 Result - - var res = new ComputingViewModel() - { - - NumberOfWorkingDays = $"{groupedRollCall.Count}", - NumberOfFriday = $"{numberOfFridays}", - TotalHoursesH = totalHolidaysAndNotH.ToString(), - TotalHoursesM = totalHolidaysAndNotM.ToString(), - OverTimeWorkH = overMandatoryHours, - OverTimeWorkM = overMandatoryMinuts, - OverNightWorkH = shiftOver22Hours, - OverNightWorkM = shiftOver22Minuts, - ComplexNumberOfWorkingDays = $"{groupedRollCall.Count}", - SalaryCompute = dayliFee, - SumTime44 = SumWorkeTime, - ConsumableItems = ConsumableItems, - HousingAllowance = HousingAllowance, - FamilyAllowance = familyAllowance, - OfficialHoliday = holiday, - weeklyTime = weeklyTime, - RotatingResultList = rotatingResultList, - RotatingStatus = rotatingFaResult, - ShiftPay = ShiftPayResult, - Basic = basic, - FridayStartToEnd = fridays, - TotalHolidayAndNotH = totalHolidaysAndNotH.ToString(), - TotalHolidayAndNotM = totalHolidaysAndNotM.ToString(), - DayliFeeComplete = dayliFeeComplete, - MarriedAllowance = MarriedAllowanceStr, - RotatingShiftValue = shiftPayValue, - }; - - #endregion - return res; - } - - public async Task RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart, DateTime contractEnd, string shiftwork, bool hasRollCall, CreateWorkingHoursTemp command, bool holidayWorking) - { - List rollCallResult = new List(); - List groupedRollCall = new List(); - if (hasRollCall) - { - rollCallResult = await _context.RollCalls.Where(x => - x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date && - x.StartDate.Value.Date <= contractEnd.Date && x.EndDate != null).Select(x => new RollCallViewModel() - { - StartDate = x.StartDate, - EndDate = x.EndDate, - ShiftSpan = (x.EndDate.Value - x.StartDate.Value), - CreationDate = x.ShiftDate, - }).ToListAsync(); - groupedRollCall = rollCallResult.GroupBy(x => x.CreationDate.Date).Select(x => new GroupedRollCalls() - { - CreationDate = x.Key, - ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value }).ToList(), - HasFriday = x.Any(s => s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)), - - - - }).OrderBy(x => x.CreationDate).ToList(); - } - else - { - command.WorkshopId = workshopId; - command.EmployeeId = employeeId; - command.ContractStartGr = contractStart; - command.ContractEndGr = contractEnd; - rollCallResult = ConvertStaticHoursToRollCall(command, holidayWorking); - groupedRollCall = rollCallResult.GroupBy(x => x.ShiftDate.Date).Select(x => new GroupedRollCalls() - { - CreationDate = x.Key, - ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value }).ToList(), - HasFriday = x.Any(s => s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)), - - SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - - }).OrderBy(x => x.CreationDate).ToList(); - } - - - - //****** نوبت کاری و شب کاری **** - #region RotatingShiftCheckAndNightWorkOver22 - - string shiftPayValue = "0"; - List rotatingResultList = RotatingShiftCheck(groupedRollCall); - int moriningCount = 0; - int eveningCount = 0; - int nightCount = 0; - - int moriningWinRate = rotatingResultList.Where(x => x.IsMorningShift).Sum(x => x.WinRate); - int eveningWinRate = rotatingResultList.Where(x => x.IsEveningShift).Sum(x => x.WinRate); - int nightWinRate = rotatingResultList.Where(x => x.IsNightShift).Sum(x => x.WinRate); - - - if (moriningWinRate > eveningWinRate && moriningWinRate > nightWinRate) - { - moriningCount = rotatingResultList.Count(x => x.IsMorningShift); - eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); - nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55); - } - - if (eveningWinRate > moriningWinRate && eveningWinRate > nightWinRate) - { - moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55); - eveningCount = rotatingResultList.Count(x => x.IsEveningShift); - nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55); - } - - if (nightWinRate > moriningWinRate && nightWinRate > eveningWinRate) - { - moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55); - eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); - nightCount = rotatingResultList.Count(x => x.IsNightShift); - } - - - - - - - // شبکاری - TimeSpan over22 = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks)); - var RotatingfaName = new List(); - //if (shiftwork != "1" && shiftwork != "2" && shiftwork != "4")//اگر چرخشی بود و منظم نبود - //{ - // if (moriningCount > 0) - // RotatingfaName.Add("صبح"); - // if (eveningCount > 0) - // RotatingfaName.Add("عصر"); - // if (nightCount > 0) - // RotatingfaName.Add("شب"); - //} - //else// اگر منظم و شیفتی بود - //{ - - - //} - var totalDays = (int)(contractEnd - contractStart).TotalDays + 1; - 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)// اگر تعداد شیفت های محاسبه شده بیش از یک بود - { - - 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 = "نوبت کاری ندارد"; - - - - } - - return new ComputingViewModel - { - RotatingStatus = rotatingFaResult, - RotatingResultList = rotatingResultList - - }; - - #endregion - } - - - - - //public static TimeSpan CalculateBreakTime(BreakTime breakTime, TimeSpan sumOneDaySpan) - //{ - // if (breakTime.BreakTimeType != BreakTimeType.WithTime) - // return new TimeSpan(); - - // var breakTimeSpan = breakTime.BreakTimeValue.ToTimeSpan(); - - // if (breakTimeSpan * 2 >= sumOneDaySpan) - // return new TimeSpan(); - - // return breakTimeSpan; ; - - //} - public static TimeSpan CalculateBreakTime(TimeSpan breakTimeSpan, TimeSpan sumOneDaySpan) - { - if (breakTimeSpan * 2 >= sumOneDaySpan) - return new TimeSpan(); - return breakTimeSpan; ; - } - - public TimeSpan AfterSubtract(CreateWorkingHoursTemp command, TimeSpan sumOneDaySpan, DateTime creationDate) - { - #region RestTimes - - 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(); - 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}"); - rest1 = TimeSpan.Parse($"{command.RestTimeYekshanbeh}:{command.RestTimeYekshanbehMin}"); - rest2 = TimeSpan.Parse($"{command.RestTimeDoshanbeh}:{command.RestTimeDoshanbehMin}"); - rest3 = TimeSpan.Parse($"{command.RestTimeSeshanbeh}:{command.RestTimeSeshanbehMin}"); - rest4 = TimeSpan.Parse($"{command.RestTimeCheharshanbeh}:{command.RestTimeCheharshanbehMin}"); - rest5 = TimeSpan.Parse($"{command.RestTimePanjshanbeh}:{command.RestTimePanjshanbehMin}"); - rest6 = TimeSpan.Parse($"{command.RestTimeJomeh}:{command.RestTimeJomehMin}"); - break; - case "4": - 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; - - // sumrest week1 - rest0 = TimeSpan.Parse($"{command.RestTimeShanbe1}:{command.RestTimeShanbe1Min}"); - rest1 = TimeSpan.Parse($"{command.RestTimeYekShanbe1}:{command.RestTimeYekShanbe1Min}"); - rest2 = TimeSpan.Parse($"{command.RestTimeDoShanbe1}:{command.RestTimeDoShanbe1Min}"); - rest3 = TimeSpan.Parse($"{command.RestTimeSeShanbe1}:{command.RestTimeSeShanbe1Min}"); - rest4 = TimeSpan.Parse($"{command.RestTimeCheharShanbe1}:{command.RestTimeCheharShanbe1Min}"); - rest5 = TimeSpan.Parse($"{command.RestTimePanjShanbe1}:{command.RestTimePanjShanbe1Min}"); - rest6 = TimeSpan.Parse($"{command.RestTimeJome1}:{command.RestTimeJome1Min}"); - break; - } - //week1 - - - #endregion - - var result = new TimeSpan(); - switch (creationDate.DayOfWeek) - { - case DayOfWeek.Saturday: - if (sumOneDaySpan >= rest0) - result = sumOneDaySpan.Subtract(rest0); - break; - case DayOfWeek.Sunday: - if (sumOneDaySpan >= rest1) - result = sumOneDaySpan.Subtract(rest1); - break; - case DayOfWeek.Monday: - if (sumOneDaySpan >= rest2) - result = sumOneDaySpan.Subtract(rest2); - break; - case DayOfWeek.Tuesday: - if (sumOneDaySpan >= rest3) - result = sumOneDaySpan.Subtract(rest3); - break; - case DayOfWeek.Wednesday: - if (sumOneDaySpan >= rest4) - result = sumOneDaySpan.Subtract(rest4); - break; - case DayOfWeek.Thursday: - if (sumOneDaySpan >= rest5) - result = sumOneDaySpan.Subtract(rest5); - break; - case DayOfWeek.Friday: - if (sumOneDaySpan >= rest6) - result = sumOneDaySpan.Subtract(rest6); - break; - } - - return result; - } - - public List RotatingShiftCheck(List rollCallList) - { - List finalResult = new List(); - var nullDateTme = new DateTime(0001, 01, 01); - foreach (var item in rollCallList) - { - #region Entityes - - var morningWorkingTime = new TimeSpan(); - var eveningWorkingTime = new TimeSpan(); - var nightWorkingTime = new TimeSpan(); - - #endregion - - foreach (var shift in item.ShiftList) - { - #region DatePeriod - - var shiftDate = item.CreationDate; - if (shift.Start.Date < shiftDate.Date) - shiftDate = shiftDate.AddDays(-1); - - DateTime midNight24 = new DateTime(shiftDate.Year, shiftDate.Month, shiftDate.Day, 0, 0, 0); - DateTime morningStart = new DateTime(shiftDate.Year, shiftDate.Month, shiftDate.Day, 6, 0, 0); - DateTime morningEnd = new DateTime(shiftDate.Year, shiftDate.Month, shiftDate.Day, 14, 0, 0); - DateTime eveningStart = morningEnd; - DateTime eveningEnd = new DateTime(shiftDate.Year, shiftDate.Month, shiftDate.Day, 22, 0, 0); - DateTime nightStart = eveningEnd; - DateTime nightEnd = morningStart; - DateTime nightEndNextday = nightEnd.AddDays(1); - DateTime morningEndNextday = morningEnd.AddDays(1); - DateTime eveningEndNextday = eveningEnd.AddDays(1); - - #endregion - - #region MidNight Enter 00:00 ---> 6 - - if (shift.Start >= midNight24 // 00:00 >---> 6 - && shift.End <= morningStart) - { - nightWorkingTime = nightWorkingTime.Add(shift.End - shift.Start); - } - else if (shift.Start >= midNight24 && shift.Start < morningStart // 00:00---6--->14 - && shift.End > morningStart && shift.End <= morningEnd) - { - nightWorkingTime = nightWorkingTime.Add(morningStart - shift.Start); - morningWorkingTime = morningWorkingTime.Add(shift.End - morningStart); - } - else if (shift.Start >= midNight24 && shift.Start < morningStart// 00:00---6---14--->22 - && shift.End > morningEnd && shift.End <= eveningEnd) - { - nightWorkingTime = nightWorkingTime.Add(morningStart - shift.Start); - morningWorkingTime = morningWorkingTime.Add(new TimeSpan(8, 0, 0)); - eveningWorkingTime = eveningWorkingTime.Add(shift.End - eveningStart); - - } - else if (shift.Start >= midNight24 // 00:00---6---14----22---->6 - && shift.Start < morningStart - && shift.End > eveningEnd && shift.End <= nightEndNextday) - { - nightWorkingTime = nightWorkingTime.Add(morningStart - shift.Start); - morningWorkingTime = morningWorkingTime.Add(new TimeSpan(8, 0, 0)); - eveningWorkingTime = eveningWorkingTime.Add(new TimeSpan(8, 0, 0)); - nightWorkingTime = nightWorkingTime.Add(shift.End - eveningEnd); - - } - - #endregion - - #region morning enter 14 <- 6 - if (shift.Start >= morningStart // 14<---<6 - && shift.End <= morningEnd) - { - morningWorkingTime = morningWorkingTime.Add(shift.End - shift.Start); - } - else if (shift.Start >= morningStart && shift.Start < morningEnd // 22<---14---6 - && shift.End > eveningStart && shift.End <= eveningEnd) - { - morningWorkingTime = morningWorkingTime.Add(morningEnd - shift.Start); - eveningWorkingTime = eveningWorkingTime.Add(shift.End - eveningStart); - - } - else if (shift.Start >= morningStart && shift.Start < morningEnd// // 6<---22---14---6 - && shift.End > eveningEnd && shift.End <= nightEndNextday) - { - morningWorkingTime = morningWorkingTime.Add(morningEnd - shift.Start); - eveningWorkingTime = eveningWorkingTime.Add(new TimeSpan(8, 0, 0)); - nightWorkingTime = nightWorkingTime.Add(shift.End - eveningEnd); - } - else if (shift.Start >= morningStart // 14<---6<---22---14---6 - && shift.Start < morningEnd - && shift.End > nightEndNextday && shift.End <= morningEndNextday) - { - morningWorkingTime = morningWorkingTime.Add(morningEnd - shift.Start); - eveningWorkingTime = eveningWorkingTime.Add(new TimeSpan(8, 0, 0)); - nightWorkingTime = nightWorkingTime.Add(new TimeSpan(8, 0, 0)); - TimeSpan nextDayMorningSpan = (shift.End - nightEndNextday); - morningWorkingTime = morningWorkingTime.Add(nextDayMorningSpan); - } - else if (shift.Start >= morningStart // 22<---14<---6<---22---14---6 - && shift.Start < morningEnd - && shift.End > morningEndNextday && shift.End <= eveningEndNextday) - { - morningWorkingTime = morningWorkingTime.Add(morningEnd - shift.Start); - eveningWorkingTime = eveningWorkingTime.Add(new TimeSpan(8, 0, 0)); - nightWorkingTime = nightWorkingTime.Add(new TimeSpan(8, 0, 0)); - morningWorkingTime = morningWorkingTime.Add(new TimeSpan(8, 0, 0)); - TimeSpan nextDayEveningSpan = (shift.End - morningEndNextday); - eveningWorkingTime = eveningWorkingTime.Add(nextDayEveningSpan); - - } - - - #endregion - - #region evening enter 22 <- 14 - - if (shift.Start >= eveningStart // 22<---<14 - && shift.End <= eveningEnd) - { - eveningWorkingTime = eveningWorkingTime.Add(shift.End - shift.Start); - } - else if (shift.Start >= eveningStart && shift.Start < eveningEnd // 6<---22---14 - && shift.End > nightStart && shift.End <= nightEndNextday) - { - eveningWorkingTime = eveningWorkingTime.Add(eveningEnd - shift.Start); - nightWorkingTime = nightWorkingTime.Add(shift.End - eveningEnd); - - } - else if (shift.Start >= eveningStart && shift.Start < eveningEnd// // 14<---6---22---14 - && shift.End > nightEndNextday && shift.End <= morningEndNextday) - { - eveningWorkingTime = eveningWorkingTime.Add(eveningEnd - shift.Start); - nightWorkingTime = nightWorkingTime.Add(new TimeSpan(8, 0, 0)); - morningWorkingTime = morningWorkingTime.Add(shift.End - nightEndNextday); - } - else if (shift.Start >= eveningStart // 22<---14<---6---22---14 - && shift.Start < eveningEnd - && shift.End > morningEndNextday && shift.End <= eveningEndNextday) - { - eveningWorkingTime = eveningWorkingTime.Add(morningEnd - shift.Start); - nightWorkingTime = nightWorkingTime.Add(new TimeSpan(8, 0, 0)); - morningWorkingTime = morningWorkingTime.Add(new TimeSpan(8, 0, 0)); - TimeSpan nextDayEveningSpan = (shift.End - morningEndNextday); - eveningWorkingTime = eveningWorkingTime.Add(nextDayEveningSpan); - } - - #endregion - - #region night enter 6 <- 22 - if (shift.Start >= nightStart // 6<---<22 - && shift.End <= nightEndNextday) - { - nightWorkingTime = nightWorkingTime.Add(shift.End - shift.Start); - } - else if (shift.Start >= nightStart && shift.Start < nightEndNextday // 14<---6---22 - && shift.End > nightEndNextday && shift.End <= morningEndNextday) - { - nightWorkingTime = nightWorkingTime.Add(nightEndNextday - shift.Start); - morningWorkingTime = morningWorkingTime.Add(shift.End - nightEndNextday); - - } - else if (shift.Start >= nightStart && shift.Start < nightEndNextday// // 22<---14---6---22 - && shift.End > morningEndNextday && shift.End <= eveningEndNextday) - { - nightWorkingTime = nightWorkingTime.Add(nightEndNextday - shift.Start); ; - morningWorkingTime = morningWorkingTime.Add(new TimeSpan(8, 0, 0)); - eveningWorkingTime = eveningWorkingTime.Add(shift.End - morningEndNextday); - } - else if (shift.Start >= nightStart // 6<---22<---14---6---22 - && shift.Start < nightEndNextday - && shift.End > eveningEndNextday) - { - - nightWorkingTime = nightWorkingTime.Add(nightEndNextday - shift.Start); - morningWorkingTime = morningWorkingTime.Add(new TimeSpan(8, 0, 0)); - eveningWorkingTime = eveningWorkingTime.Add(new TimeSpan(8, 0, 0)); - TimeSpan nextDayNightSpan = (shift.End - eveningEndNextday); - nightWorkingTime = nightWorkingTime.Add(nextDayNightSpan); - } - #endregion - - - - } - #region Result - - var result = new RotatingShiftViewModel(); - result.RotatingDate = item.CreationDate.ToFarsi(); - result.MorningWorkSpan = morningWorkingTime; - result.EveningWorkSpan = eveningWorkingTime; - result.NightWorkSpan = nightWorkingTime; - 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) - { - var sumSpan = result.MorningWorkSpan.Add(result.EveningWorkSpan); - var sumSpanDouble = sumSpan.TotalMinutes; - var winRate = (result.MorningWorkSpan.TotalMinutes * 100) / sumSpanDouble; - result.WinRate = Convert.ToInt32(winRate); - 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) - { - var sumSpan = result.MorningWorkSpan.Add(result.NightWorkSpan); - var sumSpanDouble = sumSpan.TotalMinutes; - var winRate = (result.NightWorkSpan.TotalMinutes * 100) / sumSpanDouble; - result.WinRate = Convert.ToInt32(winRate); - 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) - { - var sumSpan = result.MorningWorkSpan.Add(result.EveningWorkSpan); - var sumSpanDouble = sumSpan.TotalMinutes; - var winRate = (result.EveningWorkSpan.TotalMinutes * 100) / sumSpanDouble; - result.WinRate = Convert.ToInt32(winRate); - 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) - { - var sumSpan = result.EveningWorkSpan.Add(result.NightWorkSpan); - var sumSpanDouble = sumSpan.TotalMinutes; - var winRate = (result.NightWorkSpan.TotalMinutes * 100) / sumSpanDouble; - result.WinRate = Convert.ToInt32(winRate); - result.IsMorningShift = false; - result.IsEveningShift = false; - result.IsNightShift = true; - result.RotatingShiftStatus = "شب"; - } - } - - finalResult.Add(result); - #endregion - } - - return finalResult; - - } - - - public List ConvertStaticHoursToRollCall(CreateWorkingHoursTemp command, bool workshopHolidyWorking) - { - var rollCallList = new List(); - #region Entities - - var sdate = command.ContarctStart.ToEnglishNumber(); - var edate = command.ContractEnd.ToEnglishNumber(); - var syear = Convert.ToInt32(sdate.Substring(0, 4)); - var smonth = Convert.ToInt32(sdate.Substring(5, 2)); - var sday = Convert.ToInt32(sdate.Substring(8, 2)); - - var eyear = Convert.ToInt32(edate.Substring(0, 4)); - var emonth = Convert.ToInt32(edate.Substring(5, 2)); - var eday = Convert.ToInt32(edate.Substring(8, 2)); - - var d1 = new PersianDateTime(syear, smonth, sday); - var d2 = new PersianDateTime(eyear, emonth, eday); - - //بدست آوردن مرخصی - LeaveSearchModel leaveSearch = new LeaveSearchModel() - { - EmployeeId = command.EmployeeId, - WorkshopId = command.WorkshopId, - - StartLeaveGr = command.ContractStartGr, - EndLeaveGr = command.ContractEndGr, - IsAccepted = true, - }; - var leaveSearchResult = _leaveRepository.search(leaveSearch); - //بدس آوردن تعطیلات رسمی - var holidayList = _holidayItemRepository.GetHolidayItem(sdate.Substring(0, 4)); - bool isHoliday = false; - - #endregion - - - - #region SumRestTimesOneShift - - var rest0 = new TimeSpan(); - var rest1 = new TimeSpan(); - var rest2 = new TimeSpan(); - var rest3 = new TimeSpan(); - var rest4 = new TimeSpan(); - var rest5 = new TimeSpan(); - var rest6 = new TimeSpan(); - - var rest0w1 = new TimeSpan(); - var rest1w1 = new TimeSpan(); - var rest2w1 = new TimeSpan(); - var rest3w1 = new TimeSpan(); - var rest4w1 = new TimeSpan(); - var rest5w1 = new TimeSpan(); - var rest6w1 = new TimeSpan(); - - var rest0w2 = new TimeSpan(); - var rest1w2 = new TimeSpan(); - var rest2w2 = new TimeSpan(); - var rest3w2 = new TimeSpan(); - var rest4w2 = new TimeSpan(); - var rest5w2 = new TimeSpan(); - var rest6w2 = new TimeSpan(); - - var rest0w3 = new TimeSpan(); - var rest1w3 = new TimeSpan(); - var rest2w3 = new TimeSpan(); - var rest3w3 = new TimeSpan(); - var rest4w3 = new TimeSpan(); - var rest5w3 = new TimeSpan(); - var rest6w3 = new TimeSpan(); - - var rest0w4 = new TimeSpan(); - var rest1w4 = new TimeSpan(); - var rest2w4 = new TimeSpan(); - var rest3w4 = new TimeSpan(); - var rest4w4 = new TimeSpan(); - var rest5w4 = new TimeSpan(); - var rest6w4 = new TimeSpan(); - if (command.ShiftWork == "4") - { - - //week1 - command.RestTimeShanbe1 = command.RestTimeShanbe1 == "0" ? "00" : command.RestTimeShanbe1; - command.RestTimeShanbe1Min = command.RestTimeShanbe1Min == "0" ? "00" : command.RestTimeShanbe1Min; - command.RestTimeYekShanbe1 = command.RestTimeYekShanbe1 == "0" ? "00" : command.RestTimeYekShanbe1; - command.RestTimeYekShanbe1Min = - command.RestTimeYekShanbe1Min == "0" ? "00" : command.RestTimeYekShanbe1Min; - command.RestTimeDoShanbe1 = command.RestTimeDoShanbe1 == "0" ? "00" : command.RestTimeDoShanbe1; - command.RestTimeDoShanbe1Min = - command.RestTimeDoShanbe1Min == "0" ? "00" : command.RestTimeDoShanbe1Min; - command.RestTimeSeShanbe1 = command.RestTimeSeShanbe1 == "0" ? "00" : command.RestTimeSeShanbe1; - command.RestTimeSeShanbe1Min = - command.RestTimeSeShanbe1Min == "0" ? "00" : command.RestTimeSeShanbe1Min; - command.RestTimeCheharShanbe1 = - command.RestTimeCheharShanbe1 == "0" ? "00" : command.RestTimeCheharShanbe1; - command.RestTimeCheharShanbe1Min = - command.RestTimeCheharShanbe1Min == "0" ? "00" : command.RestTimeCheharShanbe1Min; - command.RestTimePanjShanbe1 = command.RestTimePanjShanbe1 == "0" ? "00" : command.RestTimePanjShanbe1; - command.RestTimePanjShanbe1Min = - command.RestTimePanjShanbe1Min == "0" ? "00" : command.RestTimePanjShanbe1Min; - command.RestTimeJome1 = command.RestTimeJome1 == "0" ? "00" : command.RestTimeJome1; - command.RestTimeJome1Min = command.RestTimeJome1Min == "0" ? "00" : command.RestTimeJome1Min; - - //week2 - command.RestTimeShanbe2 = command.RestTimeShanbe2 == "0" ? "00" : command.RestTimeShanbe2; - command.RestTimeShanbe2Min = command.RestTimeShanbe2Min == "0" ? "00" : command.RestTimeShanbe2Min; - command.RestTimeYekShanbe2 = command.RestTimeYekShanbe2 == "0" ? "00" : command.RestTimeYekShanbe2; - command.RestTimeYekShanbe2Min = - command.RestTimeYekShanbe2Min == "0" ? "00" : command.RestTimeYekShanbe2Min; - command.RestTimeDoShanbe2 = command.RestTimeDoShanbe2 == "0" ? "00" : command.RestTimeDoShanbe2; - command.RestTimeDoShanbe2Min = - command.RestTimeDoShanbe2Min == "0" ? "00" : command.RestTimeDoShanbe2Min; - command.RestTimeSeShanbe2 = command.RestTimeSeShanbe2 == "0" ? "00" : command.RestTimeSeShanbe2; - command.RestTimeSeShanbe2Min = - command.RestTimeSeShanbe2Min == "0" ? "00" : command.RestTimeSeShanbe2Min; - command.RestTimeCheharShanbe2 = - command.RestTimeCheharShanbe2 == "0" ? "00" : command.RestTimeCheharShanbe2; - command.RestTimeCheharShanbe2Min = - command.RestTimeCheharShanbe2Min == "0" ? "00" : command.RestTimeCheharShanbe2Min; - command.RestTimePanjShanbe2 = command.RestTimePanjShanbe2 == "0" ? "00" : command.RestTimePanjShanbe2; - command.RestTimePanjShanbe2Min = - command.RestTimePanjShanbe2Min == "0" ? "00" : command.RestTimePanjShanbe2Min; - command.RestTimeJome2 = command.RestTimeJome2 == "0" ? "00" : command.RestTimeJome2; - command.RestTimeJome2Min = command.RestTimeJome2Min == "0" ? "00" : command.RestTimeJome2Min; - - //week3 - command.RestTimeShanbe3 = command.RestTimeShanbe3 == "0" ? "00" : command.RestTimeShanbe3; - command.RestTimeShanbe3Min = command.RestTimeShanbe3Min == "0" ? "00" : command.RestTimeShanbe3Min; - command.RestTimeYekShanbe3 = command.RestTimeYekShanbe3 == "0" ? "00" : command.RestTimeYekShanbe3; - command.RestTimeYekShanbe3Min = - command.RestTimeYekShanbe3Min == "0" ? "00" : command.RestTimeYekShanbe3Min; - command.RestTimeDoShanbe3 = command.RestTimeDoShanbe3 == "0" ? "00" : command.RestTimeDoShanbe3; - command.RestTimeDoShanbe3Min = - command.RestTimeDoShanbe3Min == "0" ? "00" : command.RestTimeDoShanbe3Min; - command.RestTimeSeShanbe3 = command.RestTimeSeShanbe3 == "0" ? "00" : command.RestTimeSeShanbe3; - command.RestTimeSeShanbe3Min = - command.RestTimeSeShanbe3Min == "0" ? "00" : command.RestTimeSeShanbe3Min; - command.RestTimeCheharShanbe3 = - command.RestTimeCheharShanbe3 == "0" ? "00" : command.RestTimeCheharShanbe3; - command.RestTimeCheharShanbe3Min = - command.RestTimeCheharShanbe3Min == "0" ? "00" : command.RestTimeCheharShanbe3Min; - command.RestTimePanjShanbe3 = command.RestTimePanjShanbe3 == "0" ? "00" : command.RestTimePanjShanbe3; - command.RestTimePanjShanbe3Min = - command.RestTimePanjShanbe3Min == "0" ? "00" : command.RestTimePanjShanbe3Min; - command.RestTimeJome3 = command.RestTimeJome3 == "0" ? "00" : command.RestTimeJome3; - command.RestTimeJome3Min = command.RestTimeJome3Min == "0" ? "00" : command.RestTimeJome3Min; - - //week4 - command.RestTimeShanbe4 = command.RestTimeShanbe4 == "0" ? "00" : command.RestTimeShanbe4; - command.RestTimeShanbe4Min = command.RestTimeShanbe4Min == "0" ? "00" : command.RestTimeShanbe4Min; - command.RestTimeYekShanbe4 = command.RestTimeYekShanbe4 == "0" ? "00" : command.RestTimeYekShanbe4; - command.RestTimeYekShanbe4Min = - command.RestTimeYekShanbe4Min == "0" ? "00" : command.RestTimeYekShanbe4Min; - command.RestTimeDoShanbe4 = command.RestTimeDoShanbe4 == "0" ? "00" : command.RestTimeDoShanbe4; - command.RestTimeDoShanbe4Min = - command.RestTimeDoShanbe4Min == "0" ? "00" : command.RestTimeDoShanbe4Min; - command.RestTimeSeShanbe4 = command.RestTimeSeShanbe4 == "0" ? "00" : command.RestTimeSeShanbe4; - command.RestTimeSeShanbe4Min = - command.RestTimeSeShanbe4Min == "0" ? "00" : command.RestTimeSeShanbe4Min; - command.RestTimeCheharShanbe4 = - command.RestTimeCheharShanbe4 == "0" ? "00" : command.RestTimeCheharShanbe4; - command.RestTimeCheharShanbe4Min = - command.RestTimeCheharShanbe4Min == "0" ? "00" : command.RestTimeCheharShanbe4Min; - command.RestTimePanjShanbe4 = command.RestTimePanjShanbe4 == "0" ? "00" : command.RestTimePanjShanbe4; - command.RestTimePanjShanbe4Min = - command.RestTimePanjShanbe4Min == "0" ? "00" : command.RestTimePanjShanbe4Min; - command.RestTimeJome4 = command.RestTimeJome4 == "0" ? "00" : command.RestTimeJome4; - command.RestTimeJome4Min = command.RestTimeJome4Min == "0" ? "00" : command.RestTimeJome4Min; - - // sumrest week1 - rest0w1 = TimeSpan.Parse($"{command.RestTimeShanbe1}:{command.RestTimeShanbe1Min}"); - rest1w1 = TimeSpan.Parse($"{command.RestTimeYekShanbe1}:{command.RestTimeYekShanbe1Min}"); - rest2w1 = TimeSpan.Parse($"{command.RestTimeDoShanbe1}:{command.RestTimeDoShanbe1Min}"); - rest3w1 = TimeSpan.Parse($"{command.RestTimeSeShanbe1}:{command.RestTimeSeShanbe1Min}"); - rest4w1 = TimeSpan.Parse($"{command.RestTimeCheharShanbe1}:{command.RestTimeCheharShanbe1Min}"); - rest5w1 = TimeSpan.Parse($"{command.RestTimePanjShanbe1}:{command.RestTimePanjShanbe1Min}"); - rest6w1 = TimeSpan.Parse($"{command.RestTimeJome1}:{command.RestTimeJome1Min}"); - - // sumrest week2 - rest0w2 = TimeSpan.Parse($"{command.RestTimeShanbe2}:{command.RestTimeShanbe2Min}"); - rest1w2 = TimeSpan.Parse($"{command.RestTimeYekShanbe2}:{command.RestTimeYekShanbe2Min}"); - rest2w2 = TimeSpan.Parse($"{command.RestTimeDoShanbe2}:{command.RestTimeDoShanbe2Min}"); - rest3w2 = TimeSpan.Parse($"{command.RestTimeSeShanbe2}:{command.RestTimeSeShanbe2Min}"); - rest4w2 = TimeSpan.Parse($"{command.RestTimeCheharShanbe2}:{command.RestTimeCheharShanbe2Min}"); - rest5w2 = TimeSpan.Parse($"{command.RestTimePanjShanbe2}:{command.RestTimePanjShanbe2Min}"); - rest6w2 = TimeSpan.Parse($"{command.RestTimeJome2}:{command.RestTimeJome2Min}"); - - // sumrest week3 - rest0w3 = TimeSpan.Parse($"{command.RestTimeShanbe3}:{command.RestTimeShanbe3Min}"); - rest1w3 = TimeSpan.Parse($"{command.RestTimeYekShanbe3}:{command.RestTimeYekShanbe3Min}"); - rest2w3 = TimeSpan.Parse($"{command.RestTimeDoShanbe3}:{command.RestTimeDoShanbe3Min}"); - rest3w3 = TimeSpan.Parse($"{command.RestTimeSeShanbe3}:{command.RestTimeSeShanbe3Min}"); - rest4w3 = TimeSpan.Parse($"{command.RestTimeCheharShanbe3}:{command.RestTimeCheharShanbe3Min}"); - rest5w3 = TimeSpan.Parse($"{command.RestTimePanjShanbe3}:{command.RestTimePanjShanbe3Min}"); - rest6w3 = TimeSpan.Parse($"{command.RestTimeJome3}:{command.RestTimeJome3Min}"); - - // sumrest week4 - rest0w4 = TimeSpan.Parse($"{command.RestTimeShanbe4}:{command.RestTimeShanbe4Min}"); - rest1w4 = TimeSpan.Parse($"{command.RestTimeYekShanbe4}:{command.RestTimeYekShanbe4Min}"); - rest2w4 = TimeSpan.Parse($"{command.RestTimeDoShanbe4}:{command.RestTimeDoShanbe4Min}"); - rest3w4 = TimeSpan.Parse($"{command.RestTimeSeShanbe4}:{command.RestTimeSeShanbe4Min}"); - rest4w4 = TimeSpan.Parse($"{command.RestTimeCheharShanbe4}:{command.RestTimeCheharShanbe4Min}"); - rest5w4 = TimeSpan.Parse($"{command.RestTimePanjShanbe4}:{command.RestTimePanjShanbe4Min}"); - rest6w4 = TimeSpan.Parse($"{command.RestTimeJome4}:{command.RestTimeJome4Min}"); - - } - - - #endregion - - #region Complex - //[12-24 : 5] [24-24 : 6] [12-36 : 7] [24-48 : 8] - if (command.ShiftWork is "5" or "6" or "7" or "8") - { - int addHours = command.ShiftWork switch - { - "5" => 36, - "6" => 48, - "7" => 48, - "8" => 72, - _ => 0 - }; - var start = Convert.ToDateTime(command.StartComplex); - var end = Convert.ToDateTime(command.EndComplex); - - var startDateAndTime = new PersianDateTime(syear, smonth, sday, start.Hour, start.Minute); - var startContract = new PersianDateTime(syear, smonth, sday, start.Hour, start.Minute); - var endContract = new PersianDateTime(eyear, emonth, eday, 23, 59); - for (var da = startDateAndTime; da <= endContract; da = da.AddHours(addHours)) - { - - - var currentDateFa = $"{da}"; - var currentDateGr = da.ToGregorianDateTime(); - if (da == startContract) - { - start = new DateTime(currentDateGr.Year, currentDateGr.Month, currentDateGr.Day, start.Hour, start.Minute, 0); - end = new DateTime(currentDateGr.Year, currentDateGr.Month, currentDateGr.Day, end.Hour, end.Minute, 0); - if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay) - end = end.AddDays(1); - if ((command.ShiftWork is "6" or "8") && start == end) - end = end.AddDays(1); - - } - - var startComplex = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, - start.Second); - var endComplex = new DateTime(end.Year, end.Month, end.Day, end.Hour, end.Minute, - end.Second); - Console.WriteLine($"{currentDateFa} - {currentDateGr.Date} - start : {startComplex} end : {endComplex}"); - - rollCallList.Add(new RollCallViewModel() - { - StartDate = startComplex, - EndDate = endComplex, - ShiftSpan = (endComplex - startComplex), - ShiftDate = currentDateGr, - }); - - - var endCal = end - start; - start = startComplex.AddHours(addHours); - end = start.Add(endCal); - - } - - var countLeves = leaveSearchResult.Where(x => x.PaidLeaveType == "روزانه").ToList(); - if (countLeves.Count > 0) - { - int totalDays = countLeves.Sum(x => int.Parse(x.LeaveHourses)); - - - int countRollCall = rollCallList.Count(); - int takRollCall = totalDays < countRollCall ? (countRollCall - totalDays) : 0; - rollCallList = rollCallList.Take(takRollCall).ToList(); - } - - } - - #endregion - - - - #region ShiftWork4Compute - - if (command.ShiftWork == "4") - { - //DateTime currentDay = ($"{da}").ToGeorgianDateTime(); - var hasSickLeave = false; - for (var da = d1; da <= d2; da.AddDays(1)) - { - var FirstDayOfMonth = new PersianDateTime(da.Year, da.Month, 1); - var w1 = 0; - var w2 = 0; - var w3 = 0; - var w4 = 0; - var w5 = 0; - var w6 = 0; - var currentDateFa = $"{da}"; - DateTime currntDateGr = currentDateFa.ToGeorgianDateTime(); - if (!workshopHolidyWorking) - { - isHoliday = holidayList.Any(x => x == currentDateFa); - } - 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) || (da.Day > w4 && da.Day <= w5)) && command.Shanbe1 && isHoliday == false) - { - - var res = FindStaticShiftsStatus( - command.SingleShift1Shanbe1, - command.SingleShift2Shanbe1, - command.TowShifts1Shanbe1, - command.TowShifts2Shanbe1, currntDateGr, rest0w1,leaveSearchResult); - if (res.Count> 0) - rollCallList.AddRange(res); - - } - else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.Shanbe2 && isHoliday == false) - { - - var res = FindStaticShiftsStatus( - command.SingleShift1Shanbe2, - command.SingleShift2Shanbe2, - command.TowShifts1Shanbe2, - command.TowShifts2Shanbe2, currntDateGr, rest0w2, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - - } - else if (da.Day > w2 && da.Day <= w3 && command.Shanbe3 && isHoliday == false) - { - - var res = FindStaticShiftsStatus( - command.SingleShift1Shanbe3, - command.SingleShift2Shanbe3, - command.TowShifts1Shanbe3, - command.TowShifts2Shanbe3, currntDateGr, rest0w3, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - - } - else if (da.Day > w3 && da.Day <= w4 && command.Shanbe4 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1Shanbe4, - command.SingleShift2Shanbe4, - command.TowShifts1Shanbe4, - command.TowShifts2Shanbe4, currntDateGr, rest0w3, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - - } - break; - case "یکشنبه": - if (((da.Day <= w1) || (da.Day > w4 && da.Day <= w5)) && command.YekShanbe1 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1YekShanbe1, - command.SingleShift2YekShanbe1, - command.TowShifts1YekShanbe1, - command.TowShifts2YekShanbe1, currntDateGr, rest1w1, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.YekShanbe2 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1YekShanbe2, - command.SingleShift2YekShanbe2, - command.TowShifts1YekShanbe2, - command.TowShifts2YekShanbe2, currntDateGr, rest1w2, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (da.Day > w2 && da.Day <= w3 && command.YekShanbe3 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1YekShanbe3, - command.SingleShift2YekShanbe3, - command.TowShifts1YekShanbe3, - command.TowShifts2YekShanbe3, currntDateGr, rest1w3, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (da.Day > w3 && da.Day <= w4 && command.YekShanbe4 && isHoliday == false) - { - - var res = FindStaticShiftsStatus( - command.SingleShift1YekShanbe4, - command.SingleShift2YekShanbe4, - command.TowShifts1YekShanbe4, - command.TowShifts2YekShanbe4, currntDateGr, rest1w4, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - break; - case "دوشنبه": - if (((da.Day <= w1) || (da.Day > w4 && da.Day <= w5)) && command.DoShanbe1 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1DoShanbe1, - command.SingleShift2DoShanbe1, - command.TowShifts1DoShanbe1, - command.TowShifts2DoShanbe1, currntDateGr, rest2w1, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.DoShanbe2 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1DoShanbe2, - command.SingleShift2DoShanbe2, - command.TowShifts1DoShanbe2, - command.TowShifts2DoShanbe2, currntDateGr, rest2w2, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (da.Day > w2 && da.Day <= w3 && command.DoShanbe3 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1DoShanbe3, - command.SingleShift2DoShanbe3, - command.TowShifts1DoShanbe3, - command.TowShifts2DoShanbe3, currntDateGr, rest2w3, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - - } - else if (da.Day > w3 && da.Day <= w4 && command.DoShanbe4 && isHoliday == false) - { - - var res = FindStaticShiftsStatus( - command.SingleShift1DoShanbe4, - command.SingleShift2DoShanbe4, - command.TowShifts1DoShanbe4, - command.TowShifts2DoShanbe4, currntDateGr, rest2w4, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - - - break; - case "سه شنبه": - if (((da.Day <= w1) || (da.Day > w4 && da.Day <= w5)) && command.SeShanbe1 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1SeShanbe1, - command.SingleShift2SeShanbe1, - command.TowShifts1SeShanbe1, - command.TowShifts2SeShanbe1, currntDateGr, rest3w1, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.SeShanbe2 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1SeShanbe2, - command.SingleShift2SeShanbe2, - command.TowShifts1SeShanbe2, - command.TowShifts2SeShanbe2, currntDateGr, rest3w2, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (da.Day > w2 && da.Day <= w3 && command.SeShanbe3 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1SeShanbe3, - command.SingleShift2SeShanbe3, - command.TowShifts1SeShanbe3, - command.TowShifts2SeShanbe3, currntDateGr, rest3w3, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (da.Day > w3 && da.Day <= w4 && command.SeShanbe4 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1SeShanbe4, - command.SingleShift2SeShanbe4, - command.TowShifts1SeShanbe4, - command.TowShifts2SeShanbe4, currntDateGr, rest3w4, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - break; - case "چهارشنبه": - if (((da.Day <= w1) || (da.Day > w4 && da.Day <= w5)) && command.CheharShanbe1 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1CheharShanbe1, - command.SingleShift2CheharShanbe1, - command.TowShifts1CheharShanbe1, - command.TowShifts2CheharShanbe1, currntDateGr, rest4w1, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.CheharShanbe2 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1CheharShanbe2, - command.SingleShift2CheharShanbe2, - command.TowShifts1CheharShanbe2, - command.TowShifts2CheharShanbe2, currntDateGr, rest4w2, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (da.Day > w2 && da.Day <= w3 && command.CheharShanbe3 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1CheharShanbe3, - command.SingleShift2CheharShanbe3, - command.TowShifts1CheharShanbe3, - command.TowShifts2CheharShanbe3, currntDateGr, rest4w3, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (da.Day > w3 && da.Day <= w4 && command.CheharShanbe4 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1CheharShanbe4, - command.SingleShift2CheharShanbe4, - command.TowShifts1CheharShanbe4, - command.TowShifts2CheharShanbe4, currntDateGr, rest4w4, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - break; - case "پنج شنبه": - if (((da.Day <= w1) || (da.Day > w4 && da.Day <= w5)) && command.PanjShanbe2 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1PanjShanbe1, - command.SingleShift2PanjShanbe1, - command.TowShifts1PanjShanbe1, - command.TowShifts2PanjShanbe1, currntDateGr, rest5w1, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.PanjShanbe2 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1PanjShanbe2, - command.SingleShift2PanjShanbe2, - command.TowShifts1PanjShanbe2, - command.TowShifts2PanjShanbe2, currntDateGr, rest5w2, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (da.Day > w2 && da.Day <= w3 && command.PanjShanbe3 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1PanjShanbe3, - command.SingleShift2PanjShanbe3, - command.TowShifts1PanjShanbe3, - command.TowShifts2PanjShanbe3, currntDateGr, rest5w3, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (da.Day > w3 && da.Day <= w4 && command.PanjShanbe4 && isHoliday == false) - { - var res = FindStaticShiftsStatus( - command.SingleShift1PanjShanbe4, - command.SingleShift2PanjShanbe4, - command.TowShifts1PanjShanbe4, - command.TowShifts2PanjShanbe4, currntDateGr, rest5w4, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - break; - case "جمعه": - if (((da.Day <= w1) || (da.Day > w4 && da.Day <= w5)) && command.Jome1) - { - var res = FindStaticShiftsStatus( - command.SingleShift1Jome1, - command.SingleShift2Jome1, - command.TowShifts1Jome1, - command.TowShifts2Jome1, currntDateGr, rest6w1, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.Jome2) - { - var res = FindStaticShiftsStatus( - command.SingleShift1Jome2, - command.SingleShift2Jome2, - command.TowShifts1Jome2, - command.TowShifts2Jome2, currntDateGr, rest6w2, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (da.Day > w2 && da.Day <= w3 && command.Jome3) - { - var res = FindStaticShiftsStatus( - command.SingleShift1Jome3, - command.SingleShift2Jome3, - command.TowShifts1Jome3, - command.TowShifts2Jome3, currntDateGr, rest6w3, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - else if (da.Day > w3 && da.Day <= w4 && command.Jome4) - { - var res = FindStaticShiftsStatus( - command.SingleShift1Jome4, - command.SingleShift2Jome4, - command.TowShifts1Jome4, - command.TowShifts2Jome4, currntDateGr, rest6w4, leaveSearchResult); - if (res.Count > 0) - rollCallList.AddRange(res); - } - break; - } - - } - } - - #endregion - - return rollCallList; - } - - /// - /// جاگذاری شیفت های استاتیک در بازه تاریخ - /// - /// - private List FindStaticShiftsStatus(string shift1Start, string shift1End, string shift2Start, - string shift2End, DateTime cuurentDate, TimeSpan restTime, List leaveSearchResult) - { - var result = new List(); - - var shift1StartGr = new DateTime(); - var shift1EndGr = new DateTime(); - - var shift2StartGr = new DateTime(); - var shift2EndGr = new DateTime(); - if (leaveSearchResult.Count > 0) - { - - leaveSearchResult = leaveSearchResult.Select(x => new LeaveViewModel() - { - LeaveHourses = x.LeaveHourses, - LeaveType = x.LeaveType, - PaidLeaveType = x.PaidLeaveType, - StartLeaveGr = x.StartLeaveGr, - EndLeaveGr = x.PaidLeaveType == "روزانه" ? new DateTime(x.EndLeaveGr.Year, x.EndLeaveGr.Month, x.EndLeaveGr.Day, 23,59,59) : x.EndLeaveGr, - }).ToList(); - } - - - #region Shift1 - - - - - - if (!string.IsNullOrWhiteSpace(shift1Start) && !string.IsNullOrWhiteSpace(shift1End)) - { - try - { - var starTimeSingel1 = Convert.ToDateTime(shift1Start); - var endTimeSingel2 = Convert.ToDateTime(shift1End); + private readonly CompanyContext _context; + private readonly IYearlySalaryRepository _yearlySalaryRepository; + private readonly ILeftWorkRepository _leftWorkRepository; + private readonly ILeaveRepository _leaveRepository; + private readonly IHolidayItemRepository _holidayItemRepository; + private readonly TestDbContext _testDbContext; + + + public RollCallMandatoryRepository(CompanyContext context, IYearlySalaryRepository yearlySalaryRepository, + ILeftWorkRepository leftWorkRepository, ILeaveRepository leaveRepository, IHolidayItemRepository holidayItemRepository, TestDbContext testDbContext) : base(context) + { + _context = context; + _yearlySalaryRepository = yearlySalaryRepository; + _leftWorkRepository = leftWorkRepository; + _leaveRepository = leaveRepository; + _holidayItemRepository = holidayItemRepository; + _testDbContext = testDbContext; + } + + #region OfficialChckout + public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, + DateTime contractEnd, + CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout) + { + #region Entities + + string SumWorkeTime = string.Empty; + var weeklyTime = new TimeSpan(); + string shift1Hourse = "0"; + string overMandatoryHours = "0"; + string overMandatoryMinuts = "0"; + string shiftOver22Hours = "0"; + string shiftOver22Minuts = "0"; + double ShiftPayResult = 0; + int numberOfFridays = 0; + #endregion + + int TotalContractDays = (int)(contractEnd - contractStart).TotalDays + 1; + int fridays = 0; + int holiday = _context.HolidayItems.Count(x => x.Holidaydate >= contractStart && x.Holidaydate <= contractEnd); + ; + for (var gDate = contractStart; gDate <= contractEnd; gDate = gDate.AddDays(1)) + { + if (gDate.DayOfWeek == DayOfWeek.Friday) + { + fridays += 1; + } + } + int TotalDaysNoFriday = TotalContractDays - fridays; + int mandatorDays = TotalContractDays - (fridays + holiday); + if (command.ShiftWork != "4" && isStaticCheckout) + mandatorDays = TotalDaysNoFriday; + //if (holidayWorking) + // mandatorDays = TotalContractDays - fridays; + //***********************************// + //This Time Mandatory Hourse + double mandatoryHours = Math.Round((mandatorDays * 7.33), 2); + + //گرفتن ساعت استراحت پرسنل از تنظیمات + #region breakTime + BaseCustomizeEntity settings = _context.CustomizeWorkshopEmployeeSettings.AsSplitQuery() + .Include(x => x.CustomizeWorkshopGroupSettings).FirstOrDefault(x => + x.WorkshopId == workshopId && x.EmployeeId == employeeId); + //اگر ساعت استراحت پرسنل وجود نداشت صفر است + var breakTime = settings == null ? new BreakTime(false, new TimeOnly()) : settings.BreakTime; + + + #endregion + + List rollCallResult; + List groupedRollCall; + if (isStaticCheckout) + { + command.WorkshopId = workshopId; + command.EmployeeId = employeeId; + command.ContractStartGr = contractStart; + command.ContractEndGr = contractEnd; + rollCallResult = ConvertStaticHoursToRollCall(command, holidayWorking); + groupedRollCall = rollCallResult.GroupBy(x => x.ShiftDate.Date).Select(x => new GroupedRollCalls() + { + CreationDate = x.Key, + ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value }).ToList(), + HasFriday = x.Any(s => s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)), + + SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) + + }).OrderBy(x => x.CreationDate).ToList(); + } + else + { + rollCallResult = _context.RollCalls.Where(x => + x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date && + x.StartDate.Value.Date <= contractEnd.Date && x.EndDate != null).Select(x => new RollCallViewModel() + { + StartDate = x.StartDate, + EndDate = x.EndDate, + ShiftSpan = (x.EndDate.Value - x.StartDate.Value), + CreationDate = x.ShiftDate, + BreakTimeSpan = x.BreakTimeSpan + }).ToList(); + + groupedRollCall = rollCallResult.GroupBy(x => x.CreationDate.Date).Select(x => new GroupedRollCalls() + { + CreationDate = x.Key, + ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value }).ToList(), + HasFriday = x.Any(s => s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)), + SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - CalculateBreakTime(x.First().BreakTimeSpan, + new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))), + + BreakTime = CalculateBreakTime(x.First().BreakTimeSpan, new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))), + + }).OrderBy(x => x.CreationDate).ToList(); + } + + + numberOfFridays = groupedRollCall.Count(x => x.HasFriday); + + ////*****کسر ساعاعت استراحت پرسنل از ساعت کار + //List rollCallSubtractSpan = groupedRollCall.Select(x => new GroupedRollCalls() + //{ + // CreationDate = x.CreationDate, + // AfterSubtractRestSpan = AfterSubtract(command, x.SumOneDaySpan, x.CreationDate), + //}).ToList(); + + + + + TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); + TimeSpan sumSpansWhitOutleaves = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); + + + //بدست آوردن مرخصی ساعتی + LeaveSearchModel hoursleaveSearch = new LeaveSearchModel() + { + EmployeeId = employeeId, + WorkshopId = workshopId, + LeaveType = "استحقاقی", + PaidLeaveType = "ساعتی", + StartLeaveGr = contractStart, + EndLeaveGr = contractEnd, + IsAccepted = true, + }; + var hoursesleave = _leaveRepository.search(hoursleaveSearch); + var hoursesleaveTimeSpansList = hoursesleave.Count > 0 + ? hoursesleave.Select(x => TimeSpan.Parse(x.LeaveHourses)).ToList() + : new List(); + + // مجموع مرخصی ساعتی + var hoursesleaveTimeSpans = new TimeSpan(hoursesleaveTimeSpansList.Sum(x => x.Ticks)); + //کسر مرخصی ساعتی از فیش استاتیک + if (isStaticCheckout && command.ShiftWork != "4") + { + // کم کردن از مجموع ساعت کار پرسنل + sumSpans = sumSpans.Subtract(hoursesleaveTimeSpans); + + } + + + + //****افزودن مرخصی پرسنل به مجموع ساعات کار*** + #region AddEmployeeLeavs + + + LeaveSearchModel leaveSearch = new LeaveSearchModel() + { + EmployeeId = employeeId, + WorkshopId = workshopId, + LeaveType = "استحقاقی", + PaidLeaveType = "روزانه", + StartLeaveGr = contractStart, + EndLeaveGr = contractEnd, + IsAccepted = true, + }; + var leaveSearchResult = _leaveRepository.search(leaveSearch); + // {مقدار ساعت مجاز مرخصی در برای یک روز{کامل + var leaveHoursesPerDay = 190.58 / 365; + + // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل + var starndardHoursesPerTotalDays = leaveHoursesPerDay * TotalContractDays; + // جدا کردن ساعت و دقیقه + int hours = (int)starndardHoursesPerTotalDays; + double minutesDecimal = (starndardHoursesPerTotalDays - hours) * 60; + int minutes = (int)minutesDecimal; + + + TimeSpan starndardHoursesPerTotalDaysSapn = new TimeSpan(hours, minutes, 0); + if (leaveSearchResult.Count > 0) + { + if (leaveSearchResult.Any(x => x.HasShiftDuration)) + { + var sumSpansDouble = (sumSpans.TotalMinutes) / 60; + if (sumSpansDouble < mandatoryHours) + { + starndardHoursesPerTotalDays = (sumSpansDouble * starndardHoursesPerTotalDays) / mandatoryHours; + // جدا کردن ساعت و دقیقه + hours = (int)starndardHoursesPerTotalDays; + minutesDecimal = (starndardHoursesPerTotalDays - hours) * 60; + minutes = (int)minutesDecimal; + + + starndardHoursesPerTotalDaysSapn = new TimeSpan(hours, minutes, 0); + } + + TimeSpan totalLeave = new TimeSpan(leaveSearchResult.Sum(x => x.ShiftDuration.Ticks)); + totalLeave = totalLeave.Add(hoursesleaveTimeSpans); + var totalLeaveDouble = (totalLeave.TotalMinutes) / 60; + if (totalLeaveDouble > starndardHoursesPerTotalDays) + { + + sumSpans = sumSpans.Add(starndardHoursesPerTotalDaysSapn); + } + else + { + sumSpans = sumSpans.Add(totalLeave); + } + + + + } + else + { + int leavingDayCout = 0; + //مرخصی های مابین + List beatweenCheckout = leaveSearchResult.Where(x => x.StartLeaveGr >= contractStart && x.EndLeaveGr <= contractEnd).Select(x => new LeaveViewModel() + { + DayCounter = Convert.ToInt32(x.LeaveHourses), + + }).ToList(); + leavingDayCout += beatweenCheckout.Sum(x => x.DayCounter); + // مرخصی که شروعش قبل از شروع تصفیه حساب است + List beforeCheckout = leaveSearchResult.Where(x => x.StartLeaveGr < contractStart).Select(x => new LeaveViewModel() + { + DayCounter = (int)(contractStart - x.EndLeaveGr).TotalDays + 1, + + }).ToList(); + leavingDayCout += beforeCheckout.Sum(x => x.DayCounter); + // مرخصی که پایانش بعد از پایان تصفیه حساب است + List afterCheckout = leaveSearchResult.Where(x => x.EndLeaveGr > contractEnd).Select(x => new LeaveViewModel() + { + DayCounter = (int)(x.StartLeaveGr - contractEnd).TotalDays + 1, + + }).ToList(); + leavingDayCout += afterCheckout.Sum(x => x.DayCounter); + Console.WriteLine(leavingDayCout); + + + TimeSpan workingPerDayAve = sumSpans / groupedRollCall.Count;//میانگین ساعت کار در روز + TimeSpan sumLeave = new TimeSpan(); + if (workingPerDayAve <= new TimeSpan(7, 20, 0)) + { + sumLeave = leavingDayCout * workingPerDayAve; + sumLeave = sumLeave.Add(hoursesleaveTimeSpans); + } + else + { + sumLeave = leavingDayCout * new TimeSpan(7, 20, 0); + } + + + if (sumLeave > starndardHoursesPerTotalDaysSapn) + { + sumSpans = sumSpans.Add(starndardHoursesPerTotalDaysSapn); + } + else + { + sumSpans = sumSpans.Add(sumLeave); + } + } + + + } + //اگر مرخصی روزانه نداشت و فقط مرخصی ساعتی داشت + if (leaveSearchResult.Count == 0 && hoursesleave.Count > 0) + { + if (hoursesleaveTimeSpans > starndardHoursesPerTotalDaysSapn) + { + sumSpans = sumSpans.Add(starndardHoursesPerTotalDaysSapn); + } + else + { + sumSpans = sumSpans.Add(hoursesleaveTimeSpans); + } + } + Console.WriteLine(sumSpans); + #endregion + //***********************************// + //ToTalHourse Employe eWorked + double totalHourses = (sumSpans.TotalMinutes) / 60; + int totalHolidaysAndNotH = (int)sumSpans.TotalHours; + int totalHolidaysAndNotM = (int)(sumSpans.TotalMinutes % 60); + //***********************************// + + + //********** محاسبه مدت اضافه کاری ***********// + #region ComputeMandatoryAtThisTime + + + + //***********************************// + var dailyFix = TimeSpan.Parse("07:20"); + TimeSpan mandatoryHoursTimeSpan = new TimeSpan(7, 20, 0).Multiply(mandatorDays); + TimeSpan Mandatory = sumSpansWhitOutleaves.Subtract(mandatoryHoursTimeSpan); + + double mandatoryWorkWithOutleaves = (sumSpansWhitOutleaves.TotalMinutes) / 60; + double overTimeWork = 0; + if (mandatoryWorkWithOutleaves > mandatoryHours) + { + overTimeWork = mandatoryWorkWithOutleaves - mandatoryHours; + + } + + + #endregion + + //******* دستمزد روزانه *******// + #region DailyFeeCompute + + var searchModel = new LeftWorkSearchModel() + { + EmployeeId = command.EmployeeId, + WorkshopId = command.WorkshopId, + + }; + + var leftworkList = _leftWorkRepository.search(searchModel); + var basic = "0"; + double dayliFeeComplete = 0; + var GetWorkStartDate = command.GetWorkDateHide.ToEnglishNumber(); + var styear = Convert.ToInt32(GetWorkStartDate.Substring(0, 4)); + var startDate = command.GetWorkDateHide.ToGeorgianDateTime(); + var dayliFee = "خطای تاریخ"; + double dayliFeeDouble = 0; + if (styear >= 1370) + { + + if (leftworkList == null) + leftworkList = new List(); + + var dayliFeeResult = _yearlySalaryRepository.DayliFeeComputing(startDate, contractStart, contractEnd, + command.EmployeeId, command.WorkshopId, leftworkList); + dayliFee = dayliFeeResult.DayliFee; + dayliFeeDouble = dayliFeeResult.DayliFeeDouble; + dayliFeeComplete = dayliFeeResult.DayliFee.MoneyToDouble(); + basic = dayliFeeResult.Basic; + } + + #endregion + + #region ConsumableItemsAndHousingAndFamily + + var ConsumableItems = _yearlySalaryRepository.ConsumableItems(contractEnd); + var HousingAllowance = _yearlySalaryRepository.HousingAllowance(contractEnd); + + var familyAllowance = _yearlySalaryRepository.FamilyAllowance(command.EmployeeId, contractStart, contractEnd); + var MarriedAllowance = _yearlySalaryRepository.MarriedAllowance(contractEnd, command.EmployeeId); + // حق تاهل + string MarriedAllowanceStr = MarriedAllowance > 0 ? MarriedAllowance.ToMoney() : "0"; + #endregion + + var totalWeek = (int)(TotalContractDays / 6); + + #region Fix44Compute + int TotalContractdaysUnder30 = TotalContractDays > 30 ? 30 : TotalContractDays; + if (totalHourses < mandatoryHours) + { + if (!string.IsNullOrWhiteSpace(command.ShiftWork)) + { + var workedHoursePerDay = totalHourses / mandatorDays; + var result = (dayliFeeDouble / 7.33) * workedHoursePerDay; + + + dayliFee = result.ToMoney(); + + var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble(); + var HousingStep1 = HousingAllowonceNumberType / 30; + var HousingStep2 = HousingStep1 / 7.33; + var HousingStep3 = HousingStep2 * workedHoursePerDay; + var HousingStep4 = HousingStep3 * TotalContractdaysUnder30; + HousingAllowance = HousingStep4.ToMoney(); + + var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble(); + var consumableItemsStep1 = ConsumableItemsNumberType / 30; + var consumableItemsStep2 = consumableItemsStep1 / 7.33; + var consumableItemsStep3 = consumableItemsStep2 * workedHoursePerDay; + var consumableItemsStep4 = consumableItemsStep3 * TotalContractdaysUnder30; + ConsumableItems = consumableItemsStep4.ToMoney(); + + + + //حق تاهل + if (MarriedAllowance > 0) + { + var MarriedStep1 = MarriedAllowance / 30; + var MarriedStep2 = MarriedStep1 / 7.33; + var MarriedStep3 = MarriedStep2 * workedHoursePerDay; + var MarriedStep4 = MarriedStep3 * TotalContractdaysUnder30; + MarriedAllowanceStr = MarriedStep4.ToMoney(); + } + + if (familyAllowance != "0") + { + + var familyAllowanceNumberType = familyAllowance.MoneyToDouble(); + var familyAllowanceStep1 = familyAllowanceNumberType / 30; + var familyAllowanceStep2 = familyAllowanceStep1 / 7.33; + var familyAllowanceStep3 = familyAllowanceStep2 * workedHoursePerDay; + var familyAllowanceStep4 = familyAllowanceStep3 * TotalContractdaysUnder30; + 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 = sumSpans; + } + + } + else // اگر بیشتر از 44 بود + { + + var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble(); + var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble(); + var familyAllowanceNumberType = familyAllowance.MoneyToDouble(); + + var HousingStep1 = HousingAllowonceNumberType / 30; + var HousingStep4 = HousingStep1 * TotalContractdaysUnder30; + HousingAllowance = HousingStep4.ToMoney(); + + + var consumableItemsStep1 = ConsumableItemsNumberType / 30; + var consumableItemsStep4 = consumableItemsStep1 * TotalContractdaysUnder30; + ConsumableItems = consumableItemsStep4.ToMoney(); + + //حق تاهل + if (MarriedAllowance > 0) + { + var MarriedStep1 = MarriedAllowance / 30; + var MarriedStep4 = MarriedStep1 * TotalContractdaysUnder30; + MarriedAllowanceStr = MarriedStep4.ToMoney(); + } + + if (familyAllowance != "0") + { + var familyAllowanceStep1 = familyAllowanceNumberType / 30; + var familyAllowanceStep4 = familyAllowanceStep1 * TotalContractdaysUnder30; + familyAllowance = familyAllowanceStep4.ToMoney(); + } + + SumWorkeTime = $"{44}"; + + //اضافه کار + if (overTimeWork > 0) + { + + //int mandatoryH = (int)Mandatory.TotalHours; + //int mandatoryM = (int)(Mandatory.TotalMinutes % 60); + int mandatoryH = (int)overTimeWork; + int mandatoryM = (int)Math.Round((overTimeWork - mandatoryH) * 60); + overMandatoryHours = mandatoryH.ToString(); + overMandatoryMinuts = mandatoryM.ToString(); + } + + } + #endregion + + //****** نوبت کاری و شب کاری **** + #region RotatingShiftCheckAndNightWorkOver22 + + string shiftPayValue = "0"; + List rotatingResultList = RotatingShiftCheck(groupedRollCall); + + // شبکاری + TimeSpan over22 = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks)); + var RotatingfaName = new List(); + //if (command.ShiftWork != "1" && command.ShiftWork != "2" && command.ShiftWork != "4")//اگر چرخشی بود و منظم نبود + //{ + // if (moriningCount > 0) + // RotatingfaName.Add("صبح"); + // if (eveningCount > 0) + // RotatingfaName.Add("عصر"); + // if (nightCount > 0) + // RotatingfaName.Add("شب"); + //} + //else// اگر منظم و شیفتی بود + //{ + // var totalDays = (int)(command.ContractEndGr - command.ContractStartGr).TotalDays + 1; + // int validCount = 0; + // if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد + // { + // validCount = 2; + // } + // else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت + // { + // validCount = 8; + // } + // else + // { + // // تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است + // validCount = (int)((totalDays * 8) / 28); + // } + + // if (moriningCount >= validCount) + // RotatingfaName.Add("صبح"); + // if (eveningCount >= validCount) + // RotatingfaName.Add("عصر"); + // if (nightCount >= validCount) + // RotatingfaName.Add("شب"); + + //} + + int moriningCount = 0; + int eveningCount = 0; + int nightCount = 0; + + int moriningWinRate = rotatingResultList.Where(x => x.IsMorningShift).Sum(x => x.WinRate); + int eveningWinRate = rotatingResultList.Where(x => x.IsEveningShift).Sum(x => x.WinRate); + int nightWinRate = rotatingResultList.Where(x => x.IsNightShift).Sum(x => x.WinRate); + + + if (moriningWinRate > eveningWinRate && moriningWinRate > nightWinRate) + { + moriningCount = rotatingResultList.Count(x => x.IsMorningShift); + eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); + nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55); + } + + if (eveningWinRate > moriningWinRate && eveningWinRate > nightWinRate) + { + moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55); + eveningCount = rotatingResultList.Count(x => x.IsEveningShift); + nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55); + } + + if (nightWinRate > moriningWinRate && nightWinRate > eveningWinRate) + { + moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55); + eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); + nightCount = rotatingResultList.Count(x => x.IsNightShift); + } + + var totalDays = (int)(command.ContractEndGr - command.ContractStartGr).TotalDays + 1; + int validCount = 0; + if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد + { + validCount = 2; + } + else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت + { + validCount = 8; + } + else + { + // تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است + validCount = (int)((totalDays * 8) / 28); + } + + 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 = "نوبت کاری ندارد"; + + var over22Hours = (int)over22.TotalHours; + var over22Minuts = (int)(over22.TotalMinutes % 60); + shiftOver22Hours = over22Hours.ToString(); + shiftOver22Minuts = over22Minuts.ToString(); + + } + #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 Result + + var res = new ComputingViewModel() + { + + NumberOfWorkingDays = $"{groupedRollCall.Count}", + NumberOfFriday = $"{numberOfFridays}", + TotalHoursesH = totalHolidaysAndNotH.ToString(), + TotalHoursesM = totalHolidaysAndNotM.ToString(), + OverTimeWorkH = overMandatoryHours, + OverTimeWorkM = overMandatoryMinuts, + OverNightWorkH = shiftOver22Hours, + OverNightWorkM = shiftOver22Minuts, + ComplexNumberOfWorkingDays = $"{groupedRollCall.Count}", + SalaryCompute = dayliFee, + SumTime44 = SumWorkeTime, + ConsumableItems = ConsumableItems, + HousingAllowance = HousingAllowance, + FamilyAllowance = familyAllowance, + OfficialHoliday = holiday, + weeklyTime = weeklyTime, + RotatingResultList = rotatingResultList, + RotatingStatus = rotatingFaResult, + ShiftPay = ShiftPayResult, + Basic = basic, + FridayStartToEnd = fridays, + TotalHolidayAndNotH = totalHolidaysAndNotH.ToString(), + TotalHolidayAndNotM = totalHolidaysAndNotM.ToString(), + DayliFeeComplete = dayliFeeComplete, + MarriedAllowance = MarriedAllowanceStr, + RotatingShiftValue = shiftPayValue + }; + + #endregion + return res; + } + + public async Task RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart, DateTime contractEnd, string shiftwork, bool hasRollCall, CreateWorkingHoursTemp command, bool holidayWorking) + { + List rollCallResult = new List(); + List groupedRollCall = new List(); + if (hasRollCall) + { + rollCallResult = await _context.RollCalls.Where(x => + x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date && + x.StartDate.Value.Date <= contractEnd.Date && x.EndDate != null).Select(x => new RollCallViewModel() + { + StartDate = x.StartDate, + EndDate = x.EndDate, + ShiftSpan = (x.EndDate.Value - x.StartDate.Value), + CreationDate = x.ShiftDate, + }).ToListAsync(); + groupedRollCall = rollCallResult.GroupBy(x => x.CreationDate.Date).Select(x => new GroupedRollCalls() + { + CreationDate = x.Key, + ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value }).ToList(), + HasFriday = x.Any(s => s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)), + + + + }).OrderBy(x => x.CreationDate).ToList(); + } + else + { + command.WorkshopId = workshopId; + command.EmployeeId = employeeId; + command.ContractStartGr = contractStart; + command.ContractEndGr = contractEnd; + rollCallResult = ConvertStaticHoursToRollCall(command, holidayWorking); + groupedRollCall = rollCallResult.GroupBy(x => x.ShiftDate.Date).Select(x => new GroupedRollCalls() + { + CreationDate = x.Key, + ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value }).ToList(), + HasFriday = x.Any(s => s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)), + + SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) + + }).OrderBy(x => x.CreationDate).ToList(); + } + + + + //****** نوبت کاری و شب کاری **** + #region RotatingShiftCheckAndNightWorkOver22 + + string shiftPayValue = "0"; + List rotatingResultList = RotatingShiftCheck(groupedRollCall); + int moriningCount = 0; + int eveningCount = 0; + int nightCount = 0; + + int moriningWinRate = rotatingResultList.Where(x => x.IsMorningShift).Sum(x => x.WinRate); + int eveningWinRate = rotatingResultList.Where(x => x.IsEveningShift).Sum(x => x.WinRate); + int nightWinRate = rotatingResultList.Where(x => x.IsNightShift).Sum(x => x.WinRate); + + + if (moriningWinRate > eveningWinRate && moriningWinRate > nightWinRate) + { + moriningCount = rotatingResultList.Count(x => x.IsMorningShift); + eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); + nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55); + } + + if (eveningWinRate > moriningWinRate && eveningWinRate > nightWinRate) + { + moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55); + eveningCount = rotatingResultList.Count(x => x.IsEveningShift); + nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55); + } + + if (nightWinRate > moriningWinRate && nightWinRate > eveningWinRate) + { + moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55); + eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); + nightCount = rotatingResultList.Count(x => x.IsNightShift); + } + + + + + + + // شبکاری + TimeSpan over22 = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks)); + var RotatingfaName = new List(); + //if (shiftwork != "1" && shiftwork != "2" && shiftwork != "4")//اگر چرخشی بود و منظم نبود + //{ + // if (moriningCount > 0) + // RotatingfaName.Add("صبح"); + // if (eveningCount > 0) + // RotatingfaName.Add("عصر"); + // if (nightCount > 0) + // RotatingfaName.Add("شب"); + //} + //else// اگر منظم و شیفتی بود + //{ + + + //} + var totalDays = (int)(contractEnd - contractStart).TotalDays + 1; + 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)// اگر تعداد شیفت های محاسبه شده بیش از یک بود + { + + 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 = "نوبت کاری ندارد"; + + + + } + + return new ComputingViewModel + { + RotatingStatus = rotatingFaResult, + RotatingResultList = rotatingResultList + + }; + + #endregion + } + + + + + //public static TimeSpan CalculateBreakTime(BreakTime breakTime, TimeSpan sumOneDaySpan) + //{ + // if (breakTime.BreakTimeType != BreakTimeType.WithTime) + // return new TimeSpan(); + + // var breakTimeSpan = breakTime.BreakTimeValue.ToTimeSpan(); + + // if (breakTimeSpan * 2 >= sumOneDaySpan) + // return new TimeSpan(); + + // return breakTimeSpan; ; + + //} + public static TimeSpan CalculateBreakTime(TimeSpan breakTimeSpan, TimeSpan sumOneDaySpan) + { + if (breakTimeSpan * 2 >= sumOneDaySpan) + return new TimeSpan(); + return breakTimeSpan; ; + } + + public TimeSpan AfterSubtract(CreateWorkingHoursTemp command, TimeSpan sumOneDaySpan, DateTime creationDate) + { + #region RestTimes + + 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(); + 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}"); + rest1 = TimeSpan.Parse($"{command.RestTimeYekshanbeh}:{command.RestTimeYekshanbehMin}"); + rest2 = TimeSpan.Parse($"{command.RestTimeDoshanbeh}:{command.RestTimeDoshanbehMin}"); + rest3 = TimeSpan.Parse($"{command.RestTimeSeshanbeh}:{command.RestTimeSeshanbehMin}"); + rest4 = TimeSpan.Parse($"{command.RestTimeCheharshanbeh}:{command.RestTimeCheharshanbehMin}"); + rest5 = TimeSpan.Parse($"{command.RestTimePanjshanbeh}:{command.RestTimePanjshanbehMin}"); + rest6 = TimeSpan.Parse($"{command.RestTimeJomeh}:{command.RestTimeJomehMin}"); + break; + case "4": + 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; + + // sumrest week1 + rest0 = TimeSpan.Parse($"{command.RestTimeShanbe1}:{command.RestTimeShanbe1Min}"); + rest1 = TimeSpan.Parse($"{command.RestTimeYekShanbe1}:{command.RestTimeYekShanbe1Min}"); + rest2 = TimeSpan.Parse($"{command.RestTimeDoShanbe1}:{command.RestTimeDoShanbe1Min}"); + rest3 = TimeSpan.Parse($"{command.RestTimeSeShanbe1}:{command.RestTimeSeShanbe1Min}"); + rest4 = TimeSpan.Parse($"{command.RestTimeCheharShanbe1}:{command.RestTimeCheharShanbe1Min}"); + rest5 = TimeSpan.Parse($"{command.RestTimePanjShanbe1}:{command.RestTimePanjShanbe1Min}"); + rest6 = TimeSpan.Parse($"{command.RestTimeJome1}:{command.RestTimeJome1Min}"); + break; + } + //week1 + + + #endregion + + var result = new TimeSpan(); + switch (creationDate.DayOfWeek) + { + case DayOfWeek.Saturday: + if (sumOneDaySpan >= rest0) + result = sumOneDaySpan.Subtract(rest0); + break; + case DayOfWeek.Sunday: + if (sumOneDaySpan >= rest1) + result = sumOneDaySpan.Subtract(rest1); + break; + case DayOfWeek.Monday: + if (sumOneDaySpan >= rest2) + result = sumOneDaySpan.Subtract(rest2); + break; + case DayOfWeek.Tuesday: + if (sumOneDaySpan >= rest3) + result = sumOneDaySpan.Subtract(rest3); + break; + case DayOfWeek.Wednesday: + if (sumOneDaySpan >= rest4) + result = sumOneDaySpan.Subtract(rest4); + break; + case DayOfWeek.Thursday: + if (sumOneDaySpan >= rest5) + result = sumOneDaySpan.Subtract(rest5); + break; + case DayOfWeek.Friday: + if (sumOneDaySpan >= rest6) + result = sumOneDaySpan.Subtract(rest6); + break; + } + + return result; + } + + public List RotatingShiftCheck(List rollCallList) + { + List finalResult = new List(); + var nullDateTme = new DateTime(0001, 01, 01); + foreach (var item in rollCallList) + { + #region Entityes + + var morningWorkingTime = new TimeSpan(); + var eveningWorkingTime = new TimeSpan(); + var nightWorkingTime = new TimeSpan(); + + #endregion + + foreach (var shift in item.ShiftList) + { + #region DatePeriod + + var shiftDate = item.CreationDate; + if (shift.Start.Date < shiftDate.Date) + shiftDate = shiftDate.AddDays(-1); + + DateTime midNight24 = new DateTime(shiftDate.Year, shiftDate.Month, shiftDate.Day, 0, 0, 0); + DateTime morningStart = new DateTime(shiftDate.Year, shiftDate.Month, shiftDate.Day, 6, 0, 0); + DateTime morningEnd = new DateTime(shiftDate.Year, shiftDate.Month, shiftDate.Day, 14, 0, 0); + DateTime eveningStart = morningEnd; + DateTime eveningEnd = new DateTime(shiftDate.Year, shiftDate.Month, shiftDate.Day, 22, 0, 0); + DateTime nightStart = eveningEnd; + DateTime nightEnd = morningStart; + DateTime nightEndNextday = nightEnd.AddDays(1); + DateTime morningEndNextday = morningEnd.AddDays(1); + DateTime eveningEndNextday = eveningEnd.AddDays(1); + + #endregion + + #region MidNight Enter 00:00 ---> 6 + + if (shift.Start >= midNight24 // 00:00 >---> 6 + && shift.End <= morningStart) + { + nightWorkingTime = nightWorkingTime.Add(shift.End - shift.Start); + } + else if (shift.Start >= midNight24 && shift.Start < morningStart // 00:00---6--->14 + && shift.End > morningStart && shift.End <= morningEnd) + { + nightWorkingTime = nightWorkingTime.Add(morningStart - shift.Start); + morningWorkingTime = morningWorkingTime.Add(shift.End - morningStart); + } + else if (shift.Start >= midNight24 && shift.Start < morningStart// 00:00---6---14--->22 + && shift.End > morningEnd && shift.End <= eveningEnd) + { + nightWorkingTime = nightWorkingTime.Add(morningStart - shift.Start); + morningWorkingTime = morningWorkingTime.Add(new TimeSpan(8, 0, 0)); + eveningWorkingTime = eveningWorkingTime.Add(shift.End - eveningStart); + + } + else if (shift.Start >= midNight24 // 00:00---6---14----22---->6 + && shift.Start < morningStart + && shift.End > eveningEnd && shift.End <= nightEndNextday) + { + nightWorkingTime = nightWorkingTime.Add(morningStart - shift.Start); + morningWorkingTime = morningWorkingTime.Add(new TimeSpan(8, 0, 0)); + eveningWorkingTime = eveningWorkingTime.Add(new TimeSpan(8, 0, 0)); + nightWorkingTime = nightWorkingTime.Add(shift.End - eveningEnd); + + } + + #endregion + + #region morning enter 14 <- 6 + if (shift.Start >= morningStart // 14<---<6 + && shift.End <= morningEnd) + { + morningWorkingTime = morningWorkingTime.Add(shift.End - shift.Start); + } + else if (shift.Start >= morningStart && shift.Start < morningEnd // 22<---14---6 + && shift.End > eveningStart && shift.End <= eveningEnd) + { + morningWorkingTime = morningWorkingTime.Add(morningEnd - shift.Start); + eveningWorkingTime = eveningWorkingTime.Add(shift.End - eveningStart); + + } + else if (shift.Start >= morningStart && shift.Start < morningEnd// // 6<---22---14---6 + && shift.End > eveningEnd && shift.End <= nightEndNextday) + { + morningWorkingTime = morningWorkingTime.Add(morningEnd - shift.Start); + eveningWorkingTime = eveningWorkingTime.Add(new TimeSpan(8, 0, 0)); + nightWorkingTime = nightWorkingTime.Add(shift.End - eveningEnd); + } + else if (shift.Start >= morningStart // 14<---6<---22---14---6 + && shift.Start < morningEnd + && shift.End > nightEndNextday && shift.End <= morningEndNextday) + { + morningWorkingTime = morningWorkingTime.Add(morningEnd - shift.Start); + eveningWorkingTime = eveningWorkingTime.Add(new TimeSpan(8, 0, 0)); + nightWorkingTime = nightWorkingTime.Add(new TimeSpan(8, 0, 0)); + TimeSpan nextDayMorningSpan = (shift.End - nightEndNextday); + morningWorkingTime = morningWorkingTime.Add(nextDayMorningSpan); + } + else if (shift.Start >= morningStart // 22<---14<---6<---22---14---6 + && shift.Start < morningEnd + && shift.End > morningEndNextday && shift.End <= eveningEndNextday) + { + morningWorkingTime = morningWorkingTime.Add(morningEnd - shift.Start); + eveningWorkingTime = eveningWorkingTime.Add(new TimeSpan(8, 0, 0)); + nightWorkingTime = nightWorkingTime.Add(new TimeSpan(8, 0, 0)); + morningWorkingTime = morningWorkingTime.Add(new TimeSpan(8, 0, 0)); + TimeSpan nextDayEveningSpan = (shift.End - morningEndNextday); + eveningWorkingTime = eveningWorkingTime.Add(nextDayEveningSpan); + + } + + + #endregion + + #region evening enter 22 <- 14 + + if (shift.Start >= eveningStart // 22<---<14 + && shift.End <= eveningEnd) + { + eveningWorkingTime = eveningWorkingTime.Add(shift.End - shift.Start); + } + else if (shift.Start >= eveningStart && shift.Start < eveningEnd // 6<---22---14 + && shift.End > nightStart && shift.End <= nightEndNextday) + { + eveningWorkingTime = eveningWorkingTime.Add(eveningEnd - shift.Start); + nightWorkingTime = nightWorkingTime.Add(shift.End - eveningEnd); + + } + else if (shift.Start >= eveningStart && shift.Start < eveningEnd// // 14<---6---22---14 + && shift.End > nightEndNextday && shift.End <= morningEndNextday) + { + eveningWorkingTime = eveningWorkingTime.Add(eveningEnd - shift.Start); + nightWorkingTime = nightWorkingTime.Add(new TimeSpan(8, 0, 0)); + morningWorkingTime = morningWorkingTime.Add(shift.End - nightEndNextday); + } + else if (shift.Start >= eveningStart // 22<---14<---6---22---14 + && shift.Start < eveningEnd + && shift.End > morningEndNextday && shift.End <= eveningEndNextday) + { + eveningWorkingTime = eveningWorkingTime.Add(morningEnd - shift.Start); + nightWorkingTime = nightWorkingTime.Add(new TimeSpan(8, 0, 0)); + morningWorkingTime = morningWorkingTime.Add(new TimeSpan(8, 0, 0)); + TimeSpan nextDayEveningSpan = (shift.End - morningEndNextday); + eveningWorkingTime = eveningWorkingTime.Add(nextDayEveningSpan); + } + + #endregion + + #region night enter 6 <- 22 + if (shift.Start >= nightStart // 6<---<22 + && shift.End <= nightEndNextday) + { + nightWorkingTime = nightWorkingTime.Add(shift.End - shift.Start); + } + else if (shift.Start >= nightStart && shift.Start < nightEndNextday // 14<---6---22 + && shift.End > nightEndNextday && shift.End <= morningEndNextday) + { + nightWorkingTime = nightWorkingTime.Add(nightEndNextday - shift.Start); + morningWorkingTime = morningWorkingTime.Add(shift.End - nightEndNextday); + + } + else if (shift.Start >= nightStart && shift.Start < nightEndNextday// // 22<---14---6---22 + && shift.End > morningEndNextday && shift.End <= eveningEndNextday) + { + nightWorkingTime = nightWorkingTime.Add(nightEndNextday - shift.Start); ; + morningWorkingTime = morningWorkingTime.Add(new TimeSpan(8, 0, 0)); + eveningWorkingTime = eveningWorkingTime.Add(shift.End - morningEndNextday); + } + else if (shift.Start >= nightStart // 6<---22<---14---6---22 + && shift.Start < nightEndNextday + && shift.End > eveningEndNextday) + { + + nightWorkingTime = nightWorkingTime.Add(nightEndNextday - shift.Start); + morningWorkingTime = morningWorkingTime.Add(new TimeSpan(8, 0, 0)); + eveningWorkingTime = eveningWorkingTime.Add(new TimeSpan(8, 0, 0)); + TimeSpan nextDayNightSpan = (shift.End - eveningEndNextday); + nightWorkingTime = nightWorkingTime.Add(nextDayNightSpan); + } + #endregion + + + + } + #region Result + + var result = new RotatingShiftViewModel(); + result.RotatingDate = item.CreationDate.ToFarsi(); + result.MorningWorkSpan = morningWorkingTime; + result.EveningWorkSpan = eveningWorkingTime; + result.NightWorkSpan = nightWorkingTime; + 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) + { + var sumSpan = result.MorningWorkSpan.Add(result.EveningWorkSpan); + var sumSpanDouble = sumSpan.TotalMinutes; + var winRate = (result.MorningWorkSpan.TotalMinutes * 100) / sumSpanDouble; + result.WinRate = Convert.ToInt32(winRate); + 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) + { + var sumSpan = result.MorningWorkSpan.Add(result.NightWorkSpan); + var sumSpanDouble = sumSpan.TotalMinutes; + var winRate = (result.NightWorkSpan.TotalMinutes * 100) / sumSpanDouble; + result.WinRate = Convert.ToInt32(winRate); + 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) + { + var sumSpan = result.MorningWorkSpan.Add(result.EveningWorkSpan); + var sumSpanDouble = sumSpan.TotalMinutes; + var winRate = (result.EveningWorkSpan.TotalMinutes * 100) / sumSpanDouble; + result.WinRate = Convert.ToInt32(winRate); + 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) + { + var sumSpan = result.EveningWorkSpan.Add(result.NightWorkSpan); + var sumSpanDouble = sumSpan.TotalMinutes; + var winRate = (result.NightWorkSpan.TotalMinutes * 100) / sumSpanDouble; + result.WinRate = Convert.ToInt32(winRate); + result.IsMorningShift = false; + result.IsEveningShift = false; + result.IsNightShift = true; + result.RotatingShiftStatus = "شب"; + } + } + + finalResult.Add(result); + #endregion + } + + return finalResult; + + } + + + public List ConvertStaticHoursToRollCall(CreateWorkingHoursTemp command, bool workshopHolidyWorking) + { + var rollCallList = new List(); + #region Entities + + var sdate = command.ContarctStart.ToEnglishNumber(); + var edate = command.ContractEnd.ToEnglishNumber(); + var syear = Convert.ToInt32(sdate.Substring(0, 4)); + var smonth = Convert.ToInt32(sdate.Substring(5, 2)); + var sday = Convert.ToInt32(sdate.Substring(8, 2)); + + var eyear = Convert.ToInt32(edate.Substring(0, 4)); + var emonth = Convert.ToInt32(edate.Substring(5, 2)); + var eday = Convert.ToInt32(edate.Substring(8, 2)); + + var d1 = new PersianDateTime(syear, smonth, sday); + var d2 = new PersianDateTime(eyear, emonth, eday); + + //بدست آوردن مرخصی + LeaveSearchModel leaveSearch = new LeaveSearchModel() + { + EmployeeId = command.EmployeeId, + WorkshopId = command.WorkshopId, + + StartLeaveGr = command.ContractStartGr, + EndLeaveGr = command.ContractEndGr, + IsAccepted = true, + }; + var leaveSearchResult = _leaveRepository.search(leaveSearch); + //بدس آوردن تعطیلات رسمی + var holidayList = _holidayItemRepository.GetHolidayItem(sdate.Substring(0, 4)); + bool isHoliday = false; + + #endregion + + + + #region SumRestTimesOneShift + + var rest0 = new TimeSpan(); + var rest1 = new TimeSpan(); + var rest2 = new TimeSpan(); + var rest3 = new TimeSpan(); + var rest4 = new TimeSpan(); + var rest5 = new TimeSpan(); + var rest6 = new TimeSpan(); + + var rest0w1 = new TimeSpan(); + var rest1w1 = new TimeSpan(); + var rest2w1 = new TimeSpan(); + var rest3w1 = new TimeSpan(); + var rest4w1 = new TimeSpan(); + var rest5w1 = new TimeSpan(); + var rest6w1 = new TimeSpan(); + + var rest0w2 = new TimeSpan(); + var rest1w2 = new TimeSpan(); + var rest2w2 = new TimeSpan(); + var rest3w2 = new TimeSpan(); + var rest4w2 = new TimeSpan(); + var rest5w2 = new TimeSpan(); + var rest6w2 = new TimeSpan(); + + var rest0w3 = new TimeSpan(); + var rest1w3 = new TimeSpan(); + var rest2w3 = new TimeSpan(); + var rest3w3 = new TimeSpan(); + var rest4w3 = new TimeSpan(); + var rest5w3 = new TimeSpan(); + var rest6w3 = new TimeSpan(); + + var rest0w4 = new TimeSpan(); + var rest1w4 = new TimeSpan(); + var rest2w4 = new TimeSpan(); + var rest3w4 = new TimeSpan(); + var rest4w4 = new TimeSpan(); + var rest5w4 = new TimeSpan(); + var rest6w4 = new TimeSpan(); + if (command.ShiftWork == "4") + { + + //week1 + command.RestTimeShanbe1 = command.RestTimeShanbe1 == "0" ? "00" : command.RestTimeShanbe1; + command.RestTimeShanbe1Min = command.RestTimeShanbe1Min == "0" ? "00" : command.RestTimeShanbe1Min; + command.RestTimeYekShanbe1 = command.RestTimeYekShanbe1 == "0" ? "00" : command.RestTimeYekShanbe1; + command.RestTimeYekShanbe1Min = + command.RestTimeYekShanbe1Min == "0" ? "00" : command.RestTimeYekShanbe1Min; + command.RestTimeDoShanbe1 = command.RestTimeDoShanbe1 == "0" ? "00" : command.RestTimeDoShanbe1; + command.RestTimeDoShanbe1Min = + command.RestTimeDoShanbe1Min == "0" ? "00" : command.RestTimeDoShanbe1Min; + command.RestTimeSeShanbe1 = command.RestTimeSeShanbe1 == "0" ? "00" : command.RestTimeSeShanbe1; + command.RestTimeSeShanbe1Min = + command.RestTimeSeShanbe1Min == "0" ? "00" : command.RestTimeSeShanbe1Min; + command.RestTimeCheharShanbe1 = + command.RestTimeCheharShanbe1 == "0" ? "00" : command.RestTimeCheharShanbe1; + command.RestTimeCheharShanbe1Min = + command.RestTimeCheharShanbe1Min == "0" ? "00" : command.RestTimeCheharShanbe1Min; + command.RestTimePanjShanbe1 = command.RestTimePanjShanbe1 == "0" ? "00" : command.RestTimePanjShanbe1; + command.RestTimePanjShanbe1Min = + command.RestTimePanjShanbe1Min == "0" ? "00" : command.RestTimePanjShanbe1Min; + command.RestTimeJome1 = command.RestTimeJome1 == "0" ? "00" : command.RestTimeJome1; + command.RestTimeJome1Min = command.RestTimeJome1Min == "0" ? "00" : command.RestTimeJome1Min; + + //week2 + command.RestTimeShanbe2 = command.RestTimeShanbe2 == "0" ? "00" : command.RestTimeShanbe2; + command.RestTimeShanbe2Min = command.RestTimeShanbe2Min == "0" ? "00" : command.RestTimeShanbe2Min; + command.RestTimeYekShanbe2 = command.RestTimeYekShanbe2 == "0" ? "00" : command.RestTimeYekShanbe2; + command.RestTimeYekShanbe2Min = + command.RestTimeYekShanbe2Min == "0" ? "00" : command.RestTimeYekShanbe2Min; + command.RestTimeDoShanbe2 = command.RestTimeDoShanbe2 == "0" ? "00" : command.RestTimeDoShanbe2; + command.RestTimeDoShanbe2Min = + command.RestTimeDoShanbe2Min == "0" ? "00" : command.RestTimeDoShanbe2Min; + command.RestTimeSeShanbe2 = command.RestTimeSeShanbe2 == "0" ? "00" : command.RestTimeSeShanbe2; + command.RestTimeSeShanbe2Min = + command.RestTimeSeShanbe2Min == "0" ? "00" : command.RestTimeSeShanbe2Min; + command.RestTimeCheharShanbe2 = + command.RestTimeCheharShanbe2 == "0" ? "00" : command.RestTimeCheharShanbe2; + command.RestTimeCheharShanbe2Min = + command.RestTimeCheharShanbe2Min == "0" ? "00" : command.RestTimeCheharShanbe2Min; + command.RestTimePanjShanbe2 = command.RestTimePanjShanbe2 == "0" ? "00" : command.RestTimePanjShanbe2; + command.RestTimePanjShanbe2Min = + command.RestTimePanjShanbe2Min == "0" ? "00" : command.RestTimePanjShanbe2Min; + command.RestTimeJome2 = command.RestTimeJome2 == "0" ? "00" : command.RestTimeJome2; + command.RestTimeJome2Min = command.RestTimeJome2Min == "0" ? "00" : command.RestTimeJome2Min; + + //week3 + command.RestTimeShanbe3 = command.RestTimeShanbe3 == "0" ? "00" : command.RestTimeShanbe3; + command.RestTimeShanbe3Min = command.RestTimeShanbe3Min == "0" ? "00" : command.RestTimeShanbe3Min; + command.RestTimeYekShanbe3 = command.RestTimeYekShanbe3 == "0" ? "00" : command.RestTimeYekShanbe3; + command.RestTimeYekShanbe3Min = + command.RestTimeYekShanbe3Min == "0" ? "00" : command.RestTimeYekShanbe3Min; + command.RestTimeDoShanbe3 = command.RestTimeDoShanbe3 == "0" ? "00" : command.RestTimeDoShanbe3; + command.RestTimeDoShanbe3Min = + command.RestTimeDoShanbe3Min == "0" ? "00" : command.RestTimeDoShanbe3Min; + command.RestTimeSeShanbe3 = command.RestTimeSeShanbe3 == "0" ? "00" : command.RestTimeSeShanbe3; + command.RestTimeSeShanbe3Min = + command.RestTimeSeShanbe3Min == "0" ? "00" : command.RestTimeSeShanbe3Min; + command.RestTimeCheharShanbe3 = + command.RestTimeCheharShanbe3 == "0" ? "00" : command.RestTimeCheharShanbe3; + command.RestTimeCheharShanbe3Min = + command.RestTimeCheharShanbe3Min == "0" ? "00" : command.RestTimeCheharShanbe3Min; + command.RestTimePanjShanbe3 = command.RestTimePanjShanbe3 == "0" ? "00" : command.RestTimePanjShanbe3; + command.RestTimePanjShanbe3Min = + command.RestTimePanjShanbe3Min == "0" ? "00" : command.RestTimePanjShanbe3Min; + command.RestTimeJome3 = command.RestTimeJome3 == "0" ? "00" : command.RestTimeJome3; + command.RestTimeJome3Min = command.RestTimeJome3Min == "0" ? "00" : command.RestTimeJome3Min; + + //week4 + command.RestTimeShanbe4 = command.RestTimeShanbe4 == "0" ? "00" : command.RestTimeShanbe4; + command.RestTimeShanbe4Min = command.RestTimeShanbe4Min == "0" ? "00" : command.RestTimeShanbe4Min; + command.RestTimeYekShanbe4 = command.RestTimeYekShanbe4 == "0" ? "00" : command.RestTimeYekShanbe4; + command.RestTimeYekShanbe4Min = + command.RestTimeYekShanbe4Min == "0" ? "00" : command.RestTimeYekShanbe4Min; + command.RestTimeDoShanbe4 = command.RestTimeDoShanbe4 == "0" ? "00" : command.RestTimeDoShanbe4; + command.RestTimeDoShanbe4Min = + command.RestTimeDoShanbe4Min == "0" ? "00" : command.RestTimeDoShanbe4Min; + command.RestTimeSeShanbe4 = command.RestTimeSeShanbe4 == "0" ? "00" : command.RestTimeSeShanbe4; + command.RestTimeSeShanbe4Min = + command.RestTimeSeShanbe4Min == "0" ? "00" : command.RestTimeSeShanbe4Min; + command.RestTimeCheharShanbe4 = + command.RestTimeCheharShanbe4 == "0" ? "00" : command.RestTimeCheharShanbe4; + command.RestTimeCheharShanbe4Min = + command.RestTimeCheharShanbe4Min == "0" ? "00" : command.RestTimeCheharShanbe4Min; + command.RestTimePanjShanbe4 = command.RestTimePanjShanbe4 == "0" ? "00" : command.RestTimePanjShanbe4; + command.RestTimePanjShanbe4Min = + command.RestTimePanjShanbe4Min == "0" ? "00" : command.RestTimePanjShanbe4Min; + command.RestTimeJome4 = command.RestTimeJome4 == "0" ? "00" : command.RestTimeJome4; + command.RestTimeJome4Min = command.RestTimeJome4Min == "0" ? "00" : command.RestTimeJome4Min; + + // sumrest week1 + rest0w1 = TimeSpan.Parse($"{command.RestTimeShanbe1}:{command.RestTimeShanbe1Min}"); + rest1w1 = TimeSpan.Parse($"{command.RestTimeYekShanbe1}:{command.RestTimeYekShanbe1Min}"); + rest2w1 = TimeSpan.Parse($"{command.RestTimeDoShanbe1}:{command.RestTimeDoShanbe1Min}"); + rest3w1 = TimeSpan.Parse($"{command.RestTimeSeShanbe1}:{command.RestTimeSeShanbe1Min}"); + rest4w1 = TimeSpan.Parse($"{command.RestTimeCheharShanbe1}:{command.RestTimeCheharShanbe1Min}"); + rest5w1 = TimeSpan.Parse($"{command.RestTimePanjShanbe1}:{command.RestTimePanjShanbe1Min}"); + rest6w1 = TimeSpan.Parse($"{command.RestTimeJome1}:{command.RestTimeJome1Min}"); + + // sumrest week2 + rest0w2 = TimeSpan.Parse($"{command.RestTimeShanbe2}:{command.RestTimeShanbe2Min}"); + rest1w2 = TimeSpan.Parse($"{command.RestTimeYekShanbe2}:{command.RestTimeYekShanbe2Min}"); + rest2w2 = TimeSpan.Parse($"{command.RestTimeDoShanbe2}:{command.RestTimeDoShanbe2Min}"); + rest3w2 = TimeSpan.Parse($"{command.RestTimeSeShanbe2}:{command.RestTimeSeShanbe2Min}"); + rest4w2 = TimeSpan.Parse($"{command.RestTimeCheharShanbe2}:{command.RestTimeCheharShanbe2Min}"); + rest5w2 = TimeSpan.Parse($"{command.RestTimePanjShanbe2}:{command.RestTimePanjShanbe2Min}"); + rest6w2 = TimeSpan.Parse($"{command.RestTimeJome2}:{command.RestTimeJome2Min}"); + + // sumrest week3 + rest0w3 = TimeSpan.Parse($"{command.RestTimeShanbe3}:{command.RestTimeShanbe3Min}"); + rest1w3 = TimeSpan.Parse($"{command.RestTimeYekShanbe3}:{command.RestTimeYekShanbe3Min}"); + rest2w3 = TimeSpan.Parse($"{command.RestTimeDoShanbe3}:{command.RestTimeDoShanbe3Min}"); + rest3w3 = TimeSpan.Parse($"{command.RestTimeSeShanbe3}:{command.RestTimeSeShanbe3Min}"); + rest4w3 = TimeSpan.Parse($"{command.RestTimeCheharShanbe3}:{command.RestTimeCheharShanbe3Min}"); + rest5w3 = TimeSpan.Parse($"{command.RestTimePanjShanbe3}:{command.RestTimePanjShanbe3Min}"); + rest6w3 = TimeSpan.Parse($"{command.RestTimeJome3}:{command.RestTimeJome3Min}"); + + // sumrest week4 + rest0w4 = TimeSpan.Parse($"{command.RestTimeShanbe4}:{command.RestTimeShanbe4Min}"); + rest1w4 = TimeSpan.Parse($"{command.RestTimeYekShanbe4}:{command.RestTimeYekShanbe4Min}"); + rest2w4 = TimeSpan.Parse($"{command.RestTimeDoShanbe4}:{command.RestTimeDoShanbe4Min}"); + rest3w4 = TimeSpan.Parse($"{command.RestTimeSeShanbe4}:{command.RestTimeSeShanbe4Min}"); + rest4w4 = TimeSpan.Parse($"{command.RestTimeCheharShanbe4}:{command.RestTimeCheharShanbe4Min}"); + rest5w4 = TimeSpan.Parse($"{command.RestTimePanjShanbe4}:{command.RestTimePanjShanbe4Min}"); + rest6w4 = TimeSpan.Parse($"{command.RestTimeJome4}:{command.RestTimeJome4Min}"); + + } + + + #endregion + + #region Complex + //[12-24 : 5] [24-24 : 6] [12-36 : 7] [24-48 : 8] + if (command.ShiftWork is "5" or "6" or "7" or "8") + { + int addHours = command.ShiftWork switch + { + "5" => 36, + "6" => 48, + "7" => 48, + "8" => 72, + _ => 0 + }; + var start = Convert.ToDateTime(command.StartComplex); + var end = Convert.ToDateTime(command.EndComplex); + + var startDateAndTime = new PersianDateTime(syear, smonth, sday, start.Hour, start.Minute); + var startContract = new PersianDateTime(syear, smonth, sday, start.Hour, start.Minute); + var endContract = new PersianDateTime(eyear, emonth, eday, 23, 59); + for (var da = startDateAndTime; da <= endContract; da = da.AddHours(addHours)) + { + + + var currentDateFa = $"{da}"; + var currentDateGr = da.ToGregorianDateTime(); + if (da == startContract) + { + start = new DateTime(currentDateGr.Year, currentDateGr.Month, currentDateGr.Day, start.Hour, start.Minute, 0); + end = new DateTime(currentDateGr.Year, currentDateGr.Month, currentDateGr.Day, end.Hour, end.Minute, 0); + if (start.Date == end.Date && start.TimeOfDay > end.TimeOfDay) + end = end.AddDays(1); + if ((command.ShiftWork is "6" or "8") && start == end) + end = end.AddDays(1); + + } + + var startComplex = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, + start.Second); + var endComplex = new DateTime(end.Year, end.Month, end.Day, end.Hour, end.Minute, + end.Second); + Console.WriteLine($"{currentDateFa} - {currentDateGr.Date} - start : {startComplex} end : {endComplex}"); + + rollCallList.Add(new RollCallViewModel() + { + StartDate = startComplex, + EndDate = endComplex, + ShiftSpan = (endComplex - startComplex), + ShiftDate = currentDateGr, + }); + + + var endCal = end - start; + start = startComplex.AddHours(addHours); + end = start.Add(endCal); + + } + + var countLeves = leaveSearchResult.Where(x => x.PaidLeaveType == "روزانه").ToList(); + if (countLeves.Count > 0) + { + int totalDays = countLeves.Sum(x => int.Parse(x.LeaveHourses)); + + + int countRollCall = rollCallList.Count(); + int takRollCall = totalDays < countRollCall ? (countRollCall - totalDays) : 0; + rollCallList = rollCallList.Take(takRollCall).ToList(); + } + + } + + #endregion + + + + #region ShiftWork4Compute + + if (command.ShiftWork == "4") + { + //DateTime currentDay = ($"{da}").ToGeorgianDateTime(); + var hasSickLeave = false; + for (var da = d1; da <= d2; da.AddDays(1)) + { + var FirstDayOfMonth = new PersianDateTime(da.Year, da.Month, 1); + var w1 = 0; + var w2 = 0; + var w3 = 0; + var w4 = 0; + var w5 = 0; + var w6 = 0; + var currentDateFa = $"{da}"; + DateTime currntDateGr = currentDateFa.ToGeorgianDateTime(); + if (!workshopHolidyWorking) + { + isHoliday = holidayList.Any(x => x == currentDateFa); + } + 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) || (da.Day > w4 && da.Day <= w5)) && command.Shanbe1 && isHoliday == false) + { + + var res = FindStaticShiftsStatus( + command.SingleShift1Shanbe1, + command.SingleShift2Shanbe1, + command.TowShifts1Shanbe1, + command.TowShifts2Shanbe1, currntDateGr, rest0w1, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + + } + else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.Shanbe2 && isHoliday == false) + { + + var res = FindStaticShiftsStatus( + command.SingleShift1Shanbe2, + command.SingleShift2Shanbe2, + command.TowShifts1Shanbe2, + command.TowShifts2Shanbe2, currntDateGr, rest0w2, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + + } + else if (da.Day > w2 && da.Day <= w3 && command.Shanbe3 && isHoliday == false) + { + + var res = FindStaticShiftsStatus( + command.SingleShift1Shanbe3, + command.SingleShift2Shanbe3, + command.TowShifts1Shanbe3, + command.TowShifts2Shanbe3, currntDateGr, rest0w3, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + + } + else if (da.Day > w3 && da.Day <= w4 && command.Shanbe4 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1Shanbe4, + command.SingleShift2Shanbe4, + command.TowShifts1Shanbe4, + command.TowShifts2Shanbe4, currntDateGr, rest0w3, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + + } + break; + case "یکشنبه": + if (((da.Day <= w1) || (da.Day > w4 && da.Day <= w5)) && command.YekShanbe1 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1YekShanbe1, + command.SingleShift2YekShanbe1, + command.TowShifts1YekShanbe1, + command.TowShifts2YekShanbe1, currntDateGr, rest1w1, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.YekShanbe2 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1YekShanbe2, + command.SingleShift2YekShanbe2, + command.TowShifts1YekShanbe2, + command.TowShifts2YekShanbe2, currntDateGr, rest1w2, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (da.Day > w2 && da.Day <= w3 && command.YekShanbe3 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1YekShanbe3, + command.SingleShift2YekShanbe3, + command.TowShifts1YekShanbe3, + command.TowShifts2YekShanbe3, currntDateGr, rest1w3, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (da.Day > w3 && da.Day <= w4 && command.YekShanbe4 && isHoliday == false) + { + + var res = FindStaticShiftsStatus( + command.SingleShift1YekShanbe4, + command.SingleShift2YekShanbe4, + command.TowShifts1YekShanbe4, + command.TowShifts2YekShanbe4, currntDateGr, rest1w4, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + break; + case "دوشنبه": + if (((da.Day <= w1) || (da.Day > w4 && da.Day <= w5)) && command.DoShanbe1 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1DoShanbe1, + command.SingleShift2DoShanbe1, + command.TowShifts1DoShanbe1, + command.TowShifts2DoShanbe1, currntDateGr, rest2w1, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.DoShanbe2 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1DoShanbe2, + command.SingleShift2DoShanbe2, + command.TowShifts1DoShanbe2, + command.TowShifts2DoShanbe2, currntDateGr, rest2w2, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (da.Day > w2 && da.Day <= w3 && command.DoShanbe3 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1DoShanbe3, + command.SingleShift2DoShanbe3, + command.TowShifts1DoShanbe3, + command.TowShifts2DoShanbe3, currntDateGr, rest2w3, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + + } + else if (da.Day > w3 && da.Day <= w4 && command.DoShanbe4 && isHoliday == false) + { + + var res = FindStaticShiftsStatus( + command.SingleShift1DoShanbe4, + command.SingleShift2DoShanbe4, + command.TowShifts1DoShanbe4, + command.TowShifts2DoShanbe4, currntDateGr, rest2w4, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + + + break; + case "سه شنبه": + if (((da.Day <= w1) || (da.Day > w4 && da.Day <= w5)) && command.SeShanbe1 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1SeShanbe1, + command.SingleShift2SeShanbe1, + command.TowShifts1SeShanbe1, + command.TowShifts2SeShanbe1, currntDateGr, rest3w1, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.SeShanbe2 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1SeShanbe2, + command.SingleShift2SeShanbe2, + command.TowShifts1SeShanbe2, + command.TowShifts2SeShanbe2, currntDateGr, rest3w2, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (da.Day > w2 && da.Day <= w3 && command.SeShanbe3 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1SeShanbe3, + command.SingleShift2SeShanbe3, + command.TowShifts1SeShanbe3, + command.TowShifts2SeShanbe3, currntDateGr, rest3w3, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (da.Day > w3 && da.Day <= w4 && command.SeShanbe4 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1SeShanbe4, + command.SingleShift2SeShanbe4, + command.TowShifts1SeShanbe4, + command.TowShifts2SeShanbe4, currntDateGr, rest3w4, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + break; + case "چهارشنبه": + if (((da.Day <= w1) || (da.Day > w4 && da.Day <= w5)) && command.CheharShanbe1 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1CheharShanbe1, + command.SingleShift2CheharShanbe1, + command.TowShifts1CheharShanbe1, + command.TowShifts2CheharShanbe1, currntDateGr, rest4w1, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.CheharShanbe2 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1CheharShanbe2, + command.SingleShift2CheharShanbe2, + command.TowShifts1CheharShanbe2, + command.TowShifts2CheharShanbe2, currntDateGr, rest4w2, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (da.Day > w2 && da.Day <= w3 && command.CheharShanbe3 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1CheharShanbe3, + command.SingleShift2CheharShanbe3, + command.TowShifts1CheharShanbe3, + command.TowShifts2CheharShanbe3, currntDateGr, rest4w3, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (da.Day > w3 && da.Day <= w4 && command.CheharShanbe4 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1CheharShanbe4, + command.SingleShift2CheharShanbe4, + command.TowShifts1CheharShanbe4, + command.TowShifts2CheharShanbe4, currntDateGr, rest4w4, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + break; + case "پنج شنبه": + if (((da.Day <= w1) || (da.Day > w4 && da.Day <= w5)) && command.PanjShanbe2 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1PanjShanbe1, + command.SingleShift2PanjShanbe1, + command.TowShifts1PanjShanbe1, + command.TowShifts2PanjShanbe1, currntDateGr, rest5w1, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.PanjShanbe2 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1PanjShanbe2, + command.SingleShift2PanjShanbe2, + command.TowShifts1PanjShanbe2, + command.TowShifts2PanjShanbe2, currntDateGr, rest5w2, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (da.Day > w2 && da.Day <= w3 && command.PanjShanbe3 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1PanjShanbe3, + command.SingleShift2PanjShanbe3, + command.TowShifts1PanjShanbe3, + command.TowShifts2PanjShanbe3, currntDateGr, rest5w3, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (da.Day > w3 && da.Day <= w4 && command.PanjShanbe4 && isHoliday == false) + { + var res = FindStaticShiftsStatus( + command.SingleShift1PanjShanbe4, + command.SingleShift2PanjShanbe4, + command.TowShifts1PanjShanbe4, + command.TowShifts2PanjShanbe4, currntDateGr, rest5w4, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + break; + case "جمعه": + if (((da.Day <= w1) || (da.Day > w4 && da.Day <= w5)) && command.Jome1) + { + var res = FindStaticShiftsStatus( + command.SingleShift1Jome1, + command.SingleShift2Jome1, + command.TowShifts1Jome1, + command.TowShifts2Jome1, currntDateGr, rest6w1, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (((da.Day > w1 && da.Day <= w2) || (da.Day > w5 && da.Day <= w6)) && command.Jome2) + { + var res = FindStaticShiftsStatus( + command.SingleShift1Jome2, + command.SingleShift2Jome2, + command.TowShifts1Jome2, + command.TowShifts2Jome2, currntDateGr, rest6w2, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (da.Day > w2 && da.Day <= w3 && command.Jome3) + { + var res = FindStaticShiftsStatus( + command.SingleShift1Jome3, + command.SingleShift2Jome3, + command.TowShifts1Jome3, + command.TowShifts2Jome3, currntDateGr, rest6w3, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + else if (da.Day > w3 && da.Day <= w4 && command.Jome4) + { + var res = FindStaticShiftsStatus( + command.SingleShift1Jome4, + command.SingleShift2Jome4, + command.TowShifts1Jome4, + command.TowShifts2Jome4, currntDateGr, rest6w4, leaveSearchResult); + if (res.Count > 0) + rollCallList.AddRange(res); + } + break; + } + + } + } + + #endregion + + return rollCallList; + } + + /// + /// جاگذاری شیفت های استاتیک در بازه تاریخ + /// + /// + private List FindStaticShiftsStatus(string shift1Start, string shift1End, string shift2Start, + string shift2End, DateTime cuurentDate, TimeSpan restTime, List leaveSearchResult) + { + var result = new List(); + + var shift1StartGr = new DateTime(); + var shift1EndGr = new DateTime(); + + var shift2StartGr = new DateTime(); + var shift2EndGr = new DateTime(); + if (leaveSearchResult.Count > 0) + { + + leaveSearchResult = leaveSearchResult.Select(x => new LeaveViewModel() + { + LeaveHourses = x.LeaveHourses, + LeaveType = x.LeaveType, + PaidLeaveType = x.PaidLeaveType, + StartLeaveGr = x.StartLeaveGr, + EndLeaveGr = x.PaidLeaveType == "روزانه" ? new DateTime(x.EndLeaveGr.Year, x.EndLeaveGr.Month, x.EndLeaveGr.Day, 23, 59, 59) : x.EndLeaveGr, + }).ToList(); + } + + + #region Shift1 + + + + + + if (!string.IsNullOrWhiteSpace(shift1Start) && !string.IsNullOrWhiteSpace(shift1End)) + { + try + { + var starTimeSingel1 = Convert.ToDateTime(shift1Start); + var endTimeSingel2 = Convert.ToDateTime(shift1End); bool hasRestTime = false; - shift1StartGr = new DateTime(cuurentDate.Year, cuurentDate.Month, cuurentDate.Day, starTimeSingel1.Hour, starTimeSingel1.Minute,0); - shift1EndGr = new DateTime(cuurentDate.Year, cuurentDate.Month, cuurentDate.Day, endTimeSingel2.Hour, endTimeSingel2.Minute, 0); - if (shift1EndGr.TimeOfDay < shift1StartGr.TimeOfDay) - shift1EndGr = shift1EndGr.AddDays(1); + shift1StartGr = new DateTime(cuurentDate.Year, cuurentDate.Month, cuurentDate.Day, starTimeSingel1.Hour, starTimeSingel1.Minute, 0); + shift1EndGr = new DateTime(cuurentDate.Year, cuurentDate.Month, cuurentDate.Day, endTimeSingel2.Hour, endTimeSingel2.Minute, 0); + + if (shift1EndGr.TimeOfDay < shift1StartGr.TimeOfDay) + shift1EndGr = shift1EndGr.AddDays(1); + + var shiftEndWithoutRest = shift1EndGr; var shiftSpan = (shift1EndGr - shift1StartGr); if (restTime > TimeSpan.Zero && shiftSpan >= restTime) @@ -2051,6 +2055,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll hasRestTime = true; shift1EndGr = shift1EndGr.Subtract(restTime); shiftSpan = (shift1EndGr - shift1StartGr); + } if (!leaveSearchResult.Any(x => x.StartLeaveGr < shift1EndGr && x.EndLeaveGr > shift1StartGr && x.PaidLeaveType =="روزانه")) @@ -2066,6 +2071,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll EndDate = shift1EndGr, ShiftSpan = shiftSpan, ShiftDate = shift1StartGr, + ShiftEndWithoutRest = shiftEndWithoutRest }); } else @@ -2082,6 +2088,8 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll EndDate = shift1EndGr, ShiftSpan = (shift1EndGr - hourseLeaveTypeResult.EndLeaveGr), ShiftDate = shift1StartGr, + ShiftEndWithoutRest = shiftEndWithoutRest + }); } else if (hourseLeaveTypeResult.StartLeaveGr > shift1StartGr && hourseLeaveTypeResult.EndLeaveGr < shift1EndGr) @@ -2095,6 +2103,8 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll EndDate = hourseLeaveTypeResult.StartLeaveGr, ShiftSpan = (hourseLeaveTypeResult.StartLeaveGr - shift1StartGr), ShiftDate = shift1StartGr, + ShiftEndWithoutRest = hourseLeaveTypeResult.StartLeaveGr + }); result.Add(new RollCallViewModel() @@ -2104,6 +2114,8 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll EndDate = shift1EndGr, ShiftSpan = (shift1EndGr - hourseLeaveTypeResult.EndLeaveGr), ShiftDate = shift1StartGr, + ShiftEndWithoutRest = shiftEndWithoutRest + }); } else if (hourseLeaveTypeResult.StartLeaveGr > shift1StartGr && hourseLeaveTypeResult.EndLeaveGr >= shift1EndGr) @@ -2118,1766 +2130,1804 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll EndDate = hourseLeaveTypeResult.StartLeaveGr, ShiftSpan = (hourseLeaveTypeResult.StartLeaveGr - shift1StartGr), ShiftDate = shift1StartGr, + ShiftEndWithoutRest = hourseLeaveTypeResult.StartLeaveGr + }); - } - - - } - - } - - } - catch (Exception e) - { - // ignored - } - } - - #endregion - - #region Shift2 - - if (!string.IsNullOrWhiteSpace(shift2Start) && !string.IsNullOrWhiteSpace(shift2End)) - { - try - { - - - var startTimeTowSh1 = Convert.ToDateTime(shift2Start); - var endTimeTowSh2 = Convert.ToDateTime(shift2End); - - //اگر شیفت 1 وجود داشت تاریخ جاری را از شیف 1 میگیریم - //زیرا ممکن پایان شیف 1 در روز بعد باشد - var shift1 = result.MaxBy(x=>x.EndDate); - if (shift1 != null) - if (shift1.EndDate != null) - cuurentDate = shift1.EndDate.Value; - - - shift2StartGr = new DateTime(cuurentDate.Year, cuurentDate.Month, cuurentDate.Day, startTimeTowSh1.Hour, startTimeTowSh1.Minute,0); - shift2EndGr = new DateTime(cuurentDate.Year, cuurentDate.Month, cuurentDate.Day, endTimeTowSh2.Hour, endTimeTowSh2.Minute,0); - - if (shift2EndGr.TimeOfDay < shift2StartGr.TimeOfDay) - shift2EndGr = shift2EndGr.AddDays(1); - - if (!leaveSearchResult.Any(x => x.StartLeaveGr < shift2EndGr && x.EndLeaveGr > shift2StartGr && x.PaidLeaveType == "روزانه")) - { - var hourseLeaveTypeResult = leaveSearchResult.FirstOrDefault(x => - x.StartLeaveGr < shift2EndGr && x.EndLeaveGr > shift2StartGr && x.PaidLeaveType == "ساعتی"); - if (hourseLeaveTypeResult == null) - { - - - result.Add(new RollCallViewModel() - { - StartDate = shift2StartGr, - EndDate = shift2EndGr, - ShiftSpan = (shift2EndGr - shift2StartGr), - ShiftDate = shift1?.ShiftDate ?? shift2EndGr, - }); - } - else - { - - if (hourseLeaveTypeResult.StartLeaveGr <= shift2StartGr && hourseLeaveTypeResult.EndLeaveGr < shift2EndGr) - { - //leave <--------------------> - //shift <----------------------------------> - result.Add(new RollCallViewModel() - { - StartDate = hourseLeaveTypeResult.EndLeaveGr, - EndDate = shift2EndGr, - ShiftSpan = (shift2EndGr - hourseLeaveTypeResult.EndLeaveGr), - ShiftDate = shift1?.EndDate ?? shift2EndGr, - }); - } - else if (hourseLeaveTypeResult.StartLeaveGr > shift2StartGr && hourseLeaveTypeResult.EndLeaveGr < shift2EndGr) - { - //leave <--------------------> - //shift <----------------------------------> - result.Add(new RollCallViewModel() - { - StartDate = shift2StartGr, - EndDate = hourseLeaveTypeResult.StartLeaveGr, - ShiftSpan = (hourseLeaveTypeResult.StartLeaveGr - shift2StartGr), - ShiftDate = shift1?.EndDate ?? shift2EndGr, - }); - - result.Add(new RollCallViewModel() - { - StartDate = hourseLeaveTypeResult.EndLeaveGr, - EndDate = shift2EndGr, - ShiftSpan = (shift2EndGr - hourseLeaveTypeResult.EndLeaveGr), - ShiftDate = shift1?.EndDate ?? shift2EndGr, - }); - } - else if (hourseLeaveTypeResult.StartLeaveGr > shift2StartGr && hourseLeaveTypeResult.EndLeaveGr >= shift2EndGr) - { - //leave <--------------------> - //shift <----------------------------------> - - result.Add(new RollCallViewModel() - { - StartDate = shift2StartGr, - EndDate = hourseLeaveTypeResult.StartLeaveGr, - ShiftSpan = (hourseLeaveTypeResult.StartLeaveGr - shift2StartGr), - ShiftDate = shift1?.EndDate ?? shift2EndGr, - }); - - } - - - } - - } - - } - catch (Exception e) - { - // ignored - } - } - - #endregion - - - return result; - - } - - - #endregion - - #region CustomizeCheckout - - /// - /// متد محاسبه فیش حقوقی دلخواه - /// - /// - /// - /// - /// - /// - public CustomizeCheckoutMandatoryViewModel CustomizeCheckoutMandatoryCompute(long employeeId, long workshopId, DateTime contractStart, - DateTime contractEnd) - { - var checkoutEnd = contractEnd; - var checkoutStart = contractStart; - if (workshopId == 170) - return CustomizeCheckoutMandatoryComputeForKebabMahdi(employeeId, workshopId, contractStart, contractEnd); - - var firstDayOfMonth = $"{(contractStart.ToFarsi())[..8]}/01".ToGeorgianDateTime(); - - #region LeftWork - - var leftWork = _leftWorkRepository.GetByWorkshopIdEmployeeIdInDates(workshopId, employeeId, contractStart, contractEnd); - - if (leftWork.StartWorkDateGr > contractStart) - { - contractStart = leftWork.StartWorkDateGr; - } - - if (leftWork.LeftWorkDateGr.AddDays(-1) < contractEnd) - { - contractEnd = leftWork.LeftWorkDateGr.AddDays(-1); - } - - TimeSpan leftWorkDurationTimeSpan = leftWork.HasLeft ? leftWork.LeftWorkDateGr.AddDays(-1) - leftWork.StartWorkDateGr : contractEnd - leftWork.StartWorkDateGr; - - - #endregion - - - #region Entities - - int numberOfFridays = 0; - double monthySalary = 0; - int monthDays = 0; - double dailyWage = 0; - int numberOfWorkingDay = 0; - string endPersianDate = contractEnd.ToFarsi(); - int monthOfCheckout = Convert.ToInt32(endPersianDate.Substring(5, 2)); - int yearOfCheckout = Convert.ToInt32(endPersianDate.Substring(0, 4)); - //روز هایی که پرسنل موظف بوده کار کند - var mandatoryDays = 0; + } + + + } + + } + + } + catch (Exception e) + { + // ignored + } + } + + #endregion + + #region Shift2 + + if (!string.IsNullOrWhiteSpace(shift2Start) && !string.IsNullOrWhiteSpace(shift2End)) + { + try + { + + + var startTimeTowSh1 = Convert.ToDateTime(shift2Start); + var endTimeTowSh2 = Convert.ToDateTime(shift2End); + + //اگر شیفت 1 وجود داشت تاریخ جاری را از شیف 1 میگیریم + //زیرا ممکن پایان شیف 1 در روز بعد باشد + var shift1 = result.MaxBy(x => x.EndDate); + if (shift1 != null) + if (shift1.EndDate != null) + cuurentDate = shift1.EndDate.Value; + + + shift2StartGr = new DateTime(cuurentDate.Year, cuurentDate.Month, cuurentDate.Day, startTimeTowSh1.Hour, startTimeTowSh1.Minute, 0); + shift2EndGr = new DateTime(cuurentDate.Year, cuurentDate.Month, cuurentDate.Day, endTimeTowSh2.Hour, endTimeTowSh2.Minute, 0); + + if (shift2EndGr.TimeOfDay < shift2StartGr.TimeOfDay) + shift2EndGr = shift2EndGr.AddDays(1); + + if (!leaveSearchResult.Any(x => x.StartLeaveGr < shift2EndGr && x.EndLeaveGr > shift2StartGr && x.PaidLeaveType == "روزانه")) + { + var hourseLeaveTypeResult = leaveSearchResult.FirstOrDefault(x => + x.StartLeaveGr < shift2EndGr && x.EndLeaveGr > shift2StartGr && x.PaidLeaveType == "ساعتی"); + if (hourseLeaveTypeResult == null) + { + + + result.Add(new RollCallViewModel() + { + StartDate = shift2StartGr, + EndDate = shift2EndGr, + ShiftSpan = (shift2EndGr - shift2StartGr), + ShiftDate = shift1?.ShiftDate ?? shift2EndGr, + }); + } + else + { + + if (hourseLeaveTypeResult.StartLeaveGr <= shift2StartGr && hourseLeaveTypeResult.EndLeaveGr < shift2EndGr) + { + //leave <--------------------> + //shift <----------------------------------> + result.Add(new RollCallViewModel() + { + StartDate = hourseLeaveTypeResult.EndLeaveGr, + EndDate = shift2EndGr, + ShiftSpan = (shift2EndGr - hourseLeaveTypeResult.EndLeaveGr), + ShiftDate = shift1?.EndDate ?? shift2EndGr, + }); + } + else if (hourseLeaveTypeResult.StartLeaveGr > shift2StartGr && hourseLeaveTypeResult.EndLeaveGr < shift2EndGr) + { + //leave <--------------------> + //shift <----------------------------------> + result.Add(new RollCallViewModel() + { + StartDate = shift2StartGr, + EndDate = hourseLeaveTypeResult.StartLeaveGr, + ShiftSpan = (hourseLeaveTypeResult.StartLeaveGr - shift2StartGr), + ShiftDate = shift1?.EndDate ?? shift2EndGr, + }); + + result.Add(new RollCallViewModel() + { + StartDate = hourseLeaveTypeResult.EndLeaveGr, + EndDate = shift2EndGr, + ShiftSpan = (shift2EndGr - hourseLeaveTypeResult.EndLeaveGr), + ShiftDate = shift1?.EndDate ?? shift2EndGr, + }); + } + else if (hourseLeaveTypeResult.StartLeaveGr > shift2StartGr && hourseLeaveTypeResult.EndLeaveGr >= shift2EndGr) + { + //leave <--------------------> + //shift <----------------------------------> + + result.Add(new RollCallViewModel() + { + StartDate = shift2StartGr, + EndDate = hourseLeaveTypeResult.StartLeaveGr, + ShiftSpan = (hourseLeaveTypeResult.StartLeaveGr - shift2StartGr), + ShiftDate = shift1?.EndDate ?? shift2EndGr, + }); + + } + + + } + + } + + } + catch (Exception e) + { + // ignored + } + } + + #endregion + + + return result; + + } + + + #endregion + + #region CustomizeCheckout + + /// + /// متد محاسبه فیش حقوقی دلخواه + /// + /// + /// + /// + /// + /// + public CustomizeCheckoutMandatoryViewModel CustomizeCheckoutMandatoryCompute(long employeeId, long workshopId, DateTime contractStart, + DateTime contractEnd) + { + var checkoutEnd = contractEnd; + var checkoutStart = contractStart; + if (workshopId == 170) + return CustomizeCheckoutMandatoryComputeForKebabMahdi(employeeId, workshopId, contractStart, contractEnd); + + var firstDayOfMonth = $"{(contractStart.ToFarsi())[..8]}/01".ToGeorgianDateTime(); + + #region LeftWork + + var leftWork = _leftWorkRepository.GetByWorkshopIdEmployeeIdInDates(workshopId, employeeId, contractStart, contractEnd); + + if (leftWork.StartWorkDateGr > contractStart) + { + contractStart = leftWork.StartWorkDateGr; + } + + if (leftWork.LeftWorkDateGr.AddDays(-1) < contractEnd) + { + contractEnd = leftWork.LeftWorkDateGr.AddDays(-1); + } + + TimeSpan leftWorkDurationTimeSpan = leftWork.HasLeft ? leftWork.LeftWorkDateGr.AddDays(-1) - leftWork.StartWorkDateGr : contractEnd - leftWork.StartWorkDateGr; + + + #endregion + + + #region Entities - TimeSpan contractDuration = contractEnd - contractStart; - var employee = _context.Employees.FirstOrDefault(x => x.id == employeeId); - var personnelCode = - _context.PersonnelCodeSet.FirstOrDefault(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId)?.PersonnelCode ?? 0; - var contract = _context.Contracts.Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && - x.ContractEnd.Date >= contractStart.Date && - x.ContarctStart.Date <= contractEnd.Date).ToList()?.MaxBy(x => x.ContarctStart); - var totalDays = (int)(contractEnd - contractStart).TotalDays + 1; - mandatoryDays = totalDays; - #endregion + int numberOfFridays = 0; + double monthySalary = 0; + int monthDays = 0; + double dailyWage = 0; + int numberOfWorkingDay = 0; + string endPersianDate = contractEnd.ToFarsi(); + int monthOfCheckout = Convert.ToInt32(endPersianDate.Substring(5, 2)); + int yearOfCheckout = Convert.ToInt32(endPersianDate.Substring(0, 4)); + //روز هایی که پرسنل موظف بوده کار کند + var mandatoryDays = 0; + TimeSpan contractDuration = contractEnd - contractStart; + var employee = _context.Employees.FirstOrDefault(x => x.id == employeeId); + var personnelCode = + _context.PersonnelCodeSet.FirstOrDefault(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId)?.PersonnelCode ?? 0; + var contract = _context.Contracts.Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && + x.ContractEnd.Date >= contractStart.Date && + x.ContarctStart.Date <= contractEnd.Date).ToList()?.MaxBy(x => x.ContarctStart); + var totalDays = (int)(contractEnd - contractStart).TotalDays + 1; + mandatoryDays = totalDays; + #endregion - #region CustomizeSettings - CustomizeWorkshopEmployeeSettings customizeWorkshopEmployeeSettings = _context.CustomizeWorkshopEmployeeSettings.AsSplitQuery().FirstOrDefault(x => - x.WorkshopId == workshopId && x.EmployeeId == employeeId); - CustomizeWorkshopSettings customizeWorkshopSettings = - _context.CustomizeWorkshopSettings.FirstOrDefault(x => x.WorkshopId == workshopId); - //ToDo handel exception if is null - monthySalary = customizeWorkshopEmployeeSettings?.Salary ?? 0; - monthDays = customizeWorkshopSettings.MaxMonthDays == MaxMonthDays.ThirtyDaysForAllMonth - ? 30 - : firstDayOfMonth.CountMonthDays(); + #region CustomizeSettings + CustomizeWorkshopEmployeeSettings customizeWorkshopEmployeeSettings = _context.CustomizeWorkshopEmployeeSettings.AsSplitQuery().FirstOrDefault(x => + x.WorkshopId == workshopId && x.EmployeeId == employeeId); + CustomizeWorkshopSettings customizeWorkshopSettings = + _context.CustomizeWorkshopSettings.FirstOrDefault(x => x.WorkshopId == workshopId); + //ToDo handel exception if is null + monthySalary = customizeWorkshopEmployeeSettings?.Salary ?? 0; + monthDays = customizeWorkshopSettings.MaxMonthDays == MaxMonthDays.ThirtyDaysForAllMonth + ? 30 + : firstDayOfMonth.CountMonthDays(); - var shiftSettings = customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts; - var employeeShiftsSpans = shiftSettings.Select(x => - { - var start = new DateTime(new DateOnly(), x.StartTime); - var end = new DateTime(new DateOnly(), x.EndTime); - if (x.EndTime < x.StartTime) - end = end.AddDays(1); - var span = end - start; - return new EmployeeShiftResult - { - Placement = x.Placement, - ShiftSpan = span - }; + var shiftSettings = customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts; - }); + var employeeShiftsSpans = shiftSettings.Select(x => + { + var start = new DateTime(new DateOnly(), x.StartTime); + var end = new DateTime(new DateOnly(), x.EndTime); + if (x.EndTime < x.StartTime) + end = end.AddDays(1); + var span = end - start; + return new EmployeeShiftResult + { + Placement = x.Placement, + ShiftSpan = span + }; - var sumOfEmployeeShiftSpan = new TimeSpan(employeeShiftsSpans.Sum(x => x.ShiftSpan.Ticks)); + }); - if (customizeWorkshopEmployeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Irregular) - { - sumOfEmployeeShiftSpan = CalculateIrregularShift(customizeWorkshopEmployeeSettings.IrregularShift); - } + var sumOfEmployeeShiftSpan = new TimeSpan(employeeShiftsSpans.Sum(x => x.ShiftSpan.Ticks)); - if (customizeWorkshopEmployeeSettings.BreakTime.BreakTimeType == BreakTimeType.WithTime) - { - sumOfEmployeeShiftSpan -= customizeWorkshopEmployeeSettings.BreakTime.BreakTimeValue.ToTimeSpan(); - } - #endregion + if (customizeWorkshopEmployeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Irregular) + { + sumOfEmployeeShiftSpan = CalculateIrregularShift(customizeWorkshopEmployeeSettings.IrregularShift); + } - List rollCallResult = _context.RollCalls.Where(x => - x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date && - x.StartDate.Value.Date <= contractEnd.Date && x.EndDate != null) - .Select(x => new RollCallViewModel() - { - StartDate = x.StartDate, - EndDate = x.EndDate, - ShiftSpan = (x.EndDate.Value - x.StartDate.Value), - CreationDate = x.CreationDate, - BreakTimeSpan = x.BreakTimeSpan - }).ToList(); + if (customizeWorkshopEmployeeSettings.BreakTime.BreakTimeType == BreakTimeType.WithTime) + { + sumOfEmployeeShiftSpan -= customizeWorkshopEmployeeSettings.BreakTime.BreakTimeValue.ToTimeSpan(); + } + #endregion + List rollCallResult = _context.RollCalls.Where(x => + x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date && + x.StartDate.Value.Date <= contractEnd.Date && x.EndDate != null) + .Select(x => new RollCallViewModel() + { + StartDate = x.StartDate, + EndDate = x.EndDate, + ShiftSpan = (x.EndDate.Value - x.StartDate.Value), + CreationDate = x.CreationDate, + BreakTimeSpan = x.BreakTimeSpan + }).ToList(); - List groupedRollCall = rollCallResult.GroupBy(x => x.StartDate!.Value.Date).Select(x => new GroupedRollCalls() - { - CreationDate = x.Key, - ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value }).ToList(), - HasFriday = x.Any(s => s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value.DayOfWeek == DayOfWeek.Friday), - SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - CalculateBreakTime(x.First().BreakTimeSpan, - new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))), + List groupedRollCall = rollCallResult.GroupBy(x => x.StartDate!.Value.Date).Select(x => new GroupedRollCalls() + { + CreationDate = x.Key, + ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value }).ToList(), + HasFriday = x.Any(s => s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value.DayOfWeek == DayOfWeek.Friday), - BreakTime = CalculateBreakTime(x.First().BreakTimeSpan, new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))) - }).ToList(); + SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - CalculateBreakTime(x.First().BreakTimeSpan, + new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))), + BreakTime = CalculateBreakTime(x.First().BreakTimeSpan, new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))) + }).ToList(); - TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); - numberOfFridays = groupedRollCall.Count(x => x.HasFriday); + TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); - numberOfWorkingDay = groupedRollCall.Count(); - //تعداد روز های قرارداد - int contractDays = (int)contractDuration.TotalDays + 1; + numberOfFridays = groupedRollCall.Count(x => x.HasFriday); - //روز های غیبت + numberOfWorkingDay = groupedRollCall.Count(); + //تعداد روز های قرارداد + int contractDays = (int)contractDuration.TotalDays + 1; + //روز های غیبت - int fridays = 0; - int holiday = _context.HolidayItems.Count(x => x.Holidaydate >= contractStart && x.Holidaydate <= contractEnd); + int fridays = 0; + int holiday = _context.HolidayItems.Count(x => x.Holidaydate >= contractStart && x.Holidaydate <= contractEnd); - for (var gDate = contractStart; gDate <= contractEnd; gDate = gDate.AddDays(1)) - { - if (gDate.DayOfWeek == DayOfWeek.Friday) - { - fridays += 1; - } - } - if (customizeWorkshopEmployeeSettings.FridayWork == FridayWork.Default) - { - var fridayWorkingTotalDays = CalculateFridayWorkingTotalDays(rollCallResult); - fridays = fridays - fridayWorkingTotalDays; + for (var gDate = contractStart; gDate <= contractEnd; gDate = gDate.AddDays(1)) + { + if (gDate.DayOfWeek == DayOfWeek.Friday) + { + fridays += 1; + } + } - mandatoryDays -= fridays; + if (customizeWorkshopEmployeeSettings.FridayWork == FridayWork.Default) + { + var fridayWorkingTotalDays = CalculateFridayWorkingTotalDays(rollCallResult); + fridays = fridays - fridayWorkingTotalDays; - } + mandatoryDays -= fridays; - if (customizeWorkshopEmployeeSettings.HolidayWork == HolidayWork.Default) - { - var groupStartDaysDates = groupedRollCall.Select(x => x.CreationDate.Date).ToList(); - var holidayWorkingDays = _context.HolidayItems.Count(x => - groupStartDaysDates.Any(r => r == x.Holidaydate.Date)); - holiday = holiday - holidayWorkingDays; + } - mandatoryDays -= holiday; + if (customizeWorkshopEmployeeSettings.HolidayWork == HolidayWork.Default) + { + var groupStartDaysDates = groupedRollCall.Select(x => x.CreationDate.Date).ToList(); + var holidayWorkingDays = _context.HolidayItems.Count(x => + groupStartDaysDates.Any(r => r == x.Holidaydate.Date)); + holiday = holiday - holidayWorkingDays; - } - TimeSpan absentTimeSpans = new(); + mandatoryDays -= holiday; - if ((mandatoryDays * sumOfEmployeeShiftSpan) > sumSpans) - { - absentTimeSpans = (mandatoryDays * sumOfEmployeeShiftSpan) - sumSpans; - } + } + TimeSpan absentTimeSpans = new(); - dailyWage = monthySalary / monthDays; + if ((mandatoryDays * sumOfEmployeeShiftSpan) > sumSpans) + { + absentTimeSpans = (mandatoryDays * sumOfEmployeeShiftSpan) - sumSpans; + } - var minuteWage = sumOfEmployeeShiftSpan.TotalMinutes == 0 ? 0 : (dailyWage / sumOfEmployeeShiftSpan.TotalMinutes); + dailyWage = monthySalary / monthDays; + var minuteWage = sumOfEmployeeShiftSpan.TotalMinutes == 0 ? 0 : (dailyWage / sumOfEmployeeShiftSpan.TotalMinutes); - // یافتن مرخصی ساعتی - #region LeavHourse - LeaveSearchModel leaveHourseSearch = new LeaveSearchModel() - { - EmployeeId = employeeId, - WorkshopId = workshopId, - LeaveType = "استحقاقی", + // یافتن مرخصی ساعتی + #region LeavHourse - StartLeaveGr = contractStart, - EndLeaveGr = contractEnd, - IsAccepted = true, - }; - List leaveList = _leaveRepository.search(leaveHourseSearch); + LeaveSearchModel leaveHourseSearch = new LeaveSearchModel() + { + EmployeeId = employeeId, + WorkshopId = workshopId, + LeaveType = "استحقاقی", - #endregion + StartLeaveGr = contractStart, + EndLeaveGr = contractEnd, + IsAccepted = true, + }; + List leaveList = _leaveRepository.search(leaveHourseSearch); - //****افزودن مرخصی پرسنل به مجموع ساعات کار*** - #region AddEmployeeLeaves + #endregion - //TimeSpan workingPerDayAve = sumSpans / numberOfWorkingDay;//میانگین ساعت کار در روز + //****افزودن مرخصی پرسنل به مجموع ساعات کار*** + #region AddEmployeeLeaves + //TimeSpan workingPerDayAve = sumSpans / numberOfWorkingDay;//میانگین ساعت کار در روز - //if (workingPerDayAve <= new TimeSpan(7, 20, 0)) - //{ - // sumLeave = leavingDayCout * workingPerDayAve; - //} - //else - //{ - // sumLeave = leavingDayCout * new TimeSpan(7, 20, 0); - //} + //if (workingPerDayAve <= new TimeSpan(7, 20, 0)) + //{ + // sumLeave = leavingDayCout * workingPerDayAve; + //} + //else + //{ + // sumLeave = leavingDayCout * new TimeSpan(7, 20, 0); + //} - double leavePayAmount = 0; - double absentsDeductionAmount = 0; - if (customizeWorkshopEmployeeSettings.LeavePay.LeavePayType != LeavePayType.None) - { - int permittedDays = customizeWorkshopEmployeeSettings.LeavePermittedDays; - double leaveValue = customizeWorkshopEmployeeSettings.LeavePay.Value; - sumSpans = CalculateLeavePay(sumOfEmployeeShiftSpan, absentTimeSpans, permittedDays, monthDays, contractDays, sumSpans - , leaveValue, minuteWage, contractStart, contractEnd, out leavePayAmount, out absentsDeductionAmount); - } - else - { - absentsDeductionAmount = absentTimeSpans.TotalMinutes * minuteWage; - } + double leavePayAmount = 0; + double absentsDeductionAmount = 0; + if (customizeWorkshopEmployeeSettings.LeavePay.LeavePayType != LeavePayType.None) + { + int permittedDays = customizeWorkshopEmployeeSettings.LeavePermittedDays; + double leaveValue = customizeWorkshopEmployeeSettings.LeavePay.Value; + sumSpans = CalculateLeavePay(sumOfEmployeeShiftSpan, absentTimeSpans, permittedDays, monthDays, contractDays, sumSpans + , leaveValue, minuteWage, contractStart, contractEnd, out leavePayAmount, out absentsDeductionAmount); + } + else + { + absentsDeductionAmount = absentTimeSpans.TotalMinutes * minuteWage; + } - Console.WriteLine(sumSpans); - #endregion - //***********************************// - //ToTal Hours Employee Worked - double totalHours = (sumSpans.TotalMinutes) / 60; - int totalHolidaysAndNotH = (int)sumSpans.TotalHours; - int totalHolidaysAndNotM = (int)(sumSpans.TotalMinutes % 60); - //***********************************// + Console.WriteLine(sumSpans); + #endregion + //***********************************// + //ToTal Hours Employee Worked + double totalHours = (sumSpans.TotalMinutes) / 60; + int totalHolidaysAndNotH = (int)sumSpans.TotalHours; + int totalHolidaysAndNotM = (int)(sumSpans.TotalMinutes % 60); + //***********************************// - #region Deductions - //غیبت + #region Deductions - //تاخیر و تعجیل + //غیبت + //تاخیر و تعجیل - //حق بیمه - #region InsurancePay - InsuranceDeduction insuranceDeduction = customizeWorkshopEmployeeSettings.InsuranceDeduction; - //farokhiChange - double insuranceDeductionAmount = InsurancePayCalculation(employeeId, contractStart, contractEnd, insuranceDeduction, monthySalary); - #endregion - #region SalaryAidDeduction + //حق بیمه + #region InsurancePay - var salaryAidViewModel = SalaryAidsForCheckout(employeeId, workshopId, checkoutStart, checkoutEnd); - double salaryAidDeduction = salaryAidViewModel.Sum(x => x.AmountDouble); + InsuranceDeduction insuranceDeduction = customizeWorkshopEmployeeSettings.InsuranceDeduction; + //farokhiChange + double insuranceDeductionAmount = InsurancePayCalculation(employeeId, contractStart, contractEnd, insuranceDeduction, monthySalary); + #endregion + #region SalaryAidDeduction - #endregion + var salaryAidViewModel = SalaryAidsForCheckout(employeeId, workshopId, checkoutStart, checkoutEnd); + double salaryAidDeduction = salaryAidViewModel.Sum(x => x.AmountDouble); - #region Loan + #endregion - var loanInstallments = LoanInstallmentForCheckout(employeeId, workshopId, contractStart, contractEnd); + #region Loan - double loanDeduction = loanInstallments.Sum(x => x.AmountDouble); + var loanInstallments = LoanInstallmentForCheckout(employeeId, workshopId, contractStart, contractEnd); - #endregion + double loanDeduction = loanInstallments.Sum(x => x.AmountDouble); - #region Fine + #endregion - var fineViewModels = FinesForCheckout(employeeId, workshopId, contractStart, contractEnd); - double fineDeduction = fineViewModels.Sum(x => x.Amount.MoneyToDouble()); + #region Fine - #endregion + var fineViewModels = FinesForCheckout(employeeId, workshopId, contractStart, contractEnd); + double fineDeduction = fineViewModels.Sum(x => x.Amount.MoneyToDouble()); + #endregion - #endregion + #endregion - #region Payments - //اضافه کاری - #region OvertimePay - double overtimePayAmount = 0; + #region Payments + //اضافه کاری + #region OvertimePay + double overtimePayAmount = 0; - TimeSpan overtimeTimeSpan; - if (customizeWorkshopSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular && customizeWorkshopEmployeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) - { - TimeOnly employeeOffSet = customizeWorkshopSettings.EndTimeOffSet; - overtimeTimeSpan = CalculateOvertimeTimeSpan(rollCallResult, shiftSettings, employeeOffSet); - } - else if (customizeWorkshopEmployeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) - { - var date = new DateOnly(); - var firstStartShift = new DateTime(date, customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MinBy(x => x.Placement).StartTime); - var lastEndShift = new DateTime(date, customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MaxBy(x => x.Placement).EndTime); - if (lastEndShift > firstStartShift) - firstStartShift = firstStartShift.AddDays(1); - var offSet = (firstStartShift - lastEndShift).Divide(2); - var employeeOffSet = TimeOnly.FromDateTime(lastEndShift.Add(offSet)); + TimeSpan overtimeTimeSpan; - overtimeTimeSpan = CalculateOvertimeTimeSpan(rollCallResult, shiftSettings, employeeOffSet); - } - else - { - var irregularShifts = customizeWorkshopEmployeeSettings.IrregularShift.WorkshopIrregularShifts; - overtimeTimeSpan = CalculateIrregularOverTime(rollCallResult, sumOfEmployeeShiftSpan, irregularShifts, mandatoryDays); - //Todo: fix for irregular and rotating shifts - } - overtimePayAmount = CalculateOvertimePay(overtimeTimeSpan, customizeWorkshopEmployeeSettings.OverTimePay, dailyWage); - if (overtimePayAmount >= absentsDeductionAmount) - { - overtimePayAmount = overtimePayAmount - absentsDeductionAmount; - absentsDeductionAmount = 0; - } - else - { - absentsDeductionAmount = absentsDeductionAmount - overtimePayAmount; - overtimePayAmount = 0; - } - #endregion + if (customizeWorkshopSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular && customizeWorkshopEmployeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) + { + TimeOnly employeeOffSet = customizeWorkshopSettings.EndTimeOffSet; + overtimeTimeSpan = CalculateOvertimeTimeSpan(rollCallResult, shiftSettings, employeeOffSet); + } + else if (customizeWorkshopEmployeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) + { + var date = new DateOnly(); + var firstStartShift = new DateTime(date, customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MinBy(x => x.Placement).StartTime); + var lastEndShift = new DateTime(date, customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MaxBy(x => x.Placement).EndTime); + if (lastEndShift > firstStartShift) + firstStartShift = firstStartShift.AddDays(1); + var offSet = (firstStartShift - lastEndShift).Divide(2); + var employeeOffSet = TimeOnly.FromDateTime(lastEndShift.Add(offSet)); - #region FridayPay - double fridayPayAmount = 0; + overtimeTimeSpan = CalculateOvertimeTimeSpan(rollCallResult, shiftSettings, employeeOffSet); + } + else + { + var irregularShifts = customizeWorkshopEmployeeSettings.IrregularShift.WorkshopIrregularShifts; + overtimeTimeSpan = CalculateIrregularOverTime(rollCallResult, sumOfEmployeeShiftSpan, irregularShifts, mandatoryDays); + //Todo: fix for irregular and rotating shifts + } + overtimePayAmount = CalculateOvertimePay(overtimeTimeSpan, customizeWorkshopEmployeeSettings.OverTimePay, dailyWage); + if (overtimePayAmount >= absentsDeductionAmount) + { + overtimePayAmount = overtimePayAmount - absentsDeductionAmount; + absentsDeductionAmount = 0; + } + else + { + absentsDeductionAmount = absentsDeductionAmount - overtimePayAmount; + overtimePayAmount = 0; + } + #endregion - fridayPayAmount = FridayPayCalculation(customizeWorkshopEmployeeSettings, rollCallResult, dailyWage, shiftSettings, overtimePayAmount); + #region FridayPay + double fridayPayAmount = 0; + fridayPayAmount = FridayPayCalculation(customizeWorkshopEmployeeSettings, rollCallResult, dailyWage, shiftSettings, overtimePayAmount); - #endregion - //حق تاهل - #region MaritalAllownace - double maritalAllowancePay = 0; - if (employee.MaritalStatus == "متاهل") - { - switch (customizeWorkshopEmployeeSettings.MarriedAllowance.MarriedAllowanceType) - { - case MarriedAllowanceType.Money: - { - maritalAllowancePay = customizeWorkshopEmployeeSettings.MarriedAllowance.Value; - break; - } - //case MarriedAllowanceType.PercentageFromSalary: - - // { - // double multiplier = customizeWorkshopEmployeeSettings.MarriedAllowance.Value / 100; - // maritalAllowance = dailyWage * multiplier; - // break; - // } - } - } - #endregion - - //شب کاری - #region NightWorkPay - double nightworkPayAmount = 0; - List rotatingResultList = RotatingShiftCheck(groupedRollCall); - - // شبکاری - TimeSpan nightWorks = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks)); - - if (nightWorks > new TimeSpan()) - { - switch (customizeWorkshopEmployeeSettings.NightWorkPay.NightWorkingType) - { - case NightWorkType.MoneyPerHour: - { - var baseAmount = customizeWorkshopEmployeeSettings.NightWorkPay.Value; - var nightWorkMinutes = (int)(nightWorks).TotalMinutes; - nightworkPayAmount += nightWorkMinutes * (baseAmount / 60); - break; - } - case NightWorkType.PercentageFromSalary: - { - double multiplier = customizeWorkshopEmployeeSettings.NightWorkPay.Value / 100; - var nightWorkMinutes = (int)(nightWorks).TotalMinutes; - nightworkPayAmount += ((dailyWage * multiplier) / 60) * nightWorkMinutes; - break; - } - - - } - } - #endregion - - //سنوات - #region BaseYearsPay - double baseYearsPayAmount = CalculateYearsPayAmount(employeeId, workshopId, monthySalary, contractStart, contractEnd - , customizeWorkshopEmployeeSettings.BaseYearsPay, customizeWorkshopSettings.BaseYearsPayInEndOfYear, customizeWorkshopSettings.MaxMonthDays); - - #endregion - //حق اولاد - - #region FamilyAllowancePay - double familyAllowancePay = 0; - switch (customizeWorkshopEmployeeSettings.FamilyAllowance.FamilyAllowanceType) - { - case FamilyAllowanceType.Money: - { - double baseAmount = customizeWorkshopEmployeeSettings.FamilyAllowance.Value; - familyAllowancePay = CalculateFamilyAllowancePayAmount(employeeId, baseAmount, contractEnd); - break; - } - - case FamilyAllowanceType.Percentage: - { - double multiplier = customizeWorkshopEmployeeSettings.FamilyAllowance.Value / 100; - familyAllowancePay = CalculateFamilyAllowancePayAmount(employeeId, multiplier * monthySalary, contractEnd); - break; - } - } - #endregion - #region Reward - - var rewardViewModels = RewardForCheckout(employeeId, workshopId, checkoutEnd, checkoutStart); - - double rewardPay = rewardViewModels.Sum(x => x.AmountDouble); - #endregion - - #region LeavePay - - - - #endregion - - #region BonusesPay - - double bonusesPayAmount = 0; - - - if (customizeWorkshopEmployeeSettings.BonusesPay.BonusesPayType != BonusesType.None) - { - switch (customizeWorkshopEmployeeSettings.BonusesPay.BonusesPayType) - { - case BonusesType.OneTimeOfSalary: - bonusesPayAmount = monthySalary; - break; - case BonusesType.TwoTimeOfSalary: - bonusesPayAmount = monthySalary * 2; - break; - case BonusesType.Money: - bonusesPayAmount = customizeWorkshopEmployeeSettings.BonusesPay.Value; - break; - case BonusesType.PercentageOfSalary: - bonusesPayAmount = (monthySalary * customizeWorkshopEmployeeSettings.BonusesPay.Value) / 100; - break; - } - double bonusesPerMonth = bonusesPayAmount / 12; - - if (customizeWorkshopEmployeeSettings.BonusesPay.PaymentType == BonusesPaymentType.YearlyPay) - { - var contractEndFarsi = Tools.FindeEndOfMonth(contractEnd.ToFarsi()); - if (monthOfCheckout == 12 && (contractEndFarsi.EndsWith("29")) || contractEndFarsi.EndsWith("30")) - { - } - else if (customizeWorkshopSettings.BonusesPaysInEndOfMonth == BonusesPaysInEndOfYear.WhenEverEmployeeLeftWork && leftWork.HasLeft) - { - TimeSpan bonusDuration; - DateTime startOfYear = new PersianCalendar().ToDateTime(yearOfCheckout, 1, 1, 0, 0, 0, 0); - if (startOfYear < leftWork.StartWorkDateGr) - bonusDuration = leftWorkDurationTimeSpan; - else - bonusDuration = leftWork.LeftWorkDateGr - startOfYear; - //ToDo: Check if should be absolute 365! - bonusesPayAmount = (bonusesPayAmount / 365) * bonusDuration.TotalDays; - } - else - { - bonusesPayAmount = 0; - } - } - else if (customizeWorkshopEmployeeSettings.BonusesPay.PaymentType == BonusesPaymentType.MonthlyPay) - { - - - if (customizeWorkshopSettings.BonusesPaysInEndOfMonth == - BonusesPaysInEndOfYear.WhenEverEmployeeLeftWork && leftWork.HasLeft && contractDays < monthDays) - bonusesPayAmount = (bonusesPerMonth / contractEnd.CountPersianMonthDays()) * contractDuration.TotalDays + 1; - - - bonusesPayAmount = bonusesPerMonth; - } - else - { - throw new InvalidDataException(); - } - } - - #endregion - - - #endregion - - #region LateToWork & EarlyExit - - var lateToWorkEarlyExit = LateToWorkEarlyExit(groupedRollCall, shiftSettings, leaveList); - foreach (var i in lateToWorkEarlyExit) - { - Console.WriteLine(" start : " + i.StartSpan + " end : " + i.EndSpan + " spaning : " + i.Spanning + " Type : " + i.TypeOfSapn); - } - - var lateToWoks = lateToWorkEarlyExit.Where(x => x.TypeOfSapn == "LateToWork"); - var earlyExits = lateToWorkEarlyExit.Where(x => x.TypeOfSapn == "EarlyExist"); - - var lateToWork = new TimeSpan(lateToWoks.Sum(x => x.Spanning.Ticks)); - var earlyExist = new TimeSpan(earlyExits.Sum(x => x.Spanning.Ticks)); - var totalSpaning = new TimeSpan(lateToWorkEarlyExit.Sum(x => x.Spanning.Ticks)); - Console.ForegroundColor = ConsoleColor.Yellow; - Console.WriteLine(" LateToWork H : " + (int)lateToWork.TotalHours + " M : " + (int)(lateToWork.TotalMinutes % 60)); - Console.WriteLine(" EarlyExist H : " + (int)earlyExist.TotalHours + " M : " + (int)(earlyExist.TotalMinutes % 60)); - Console.WriteLine(" TotalSpaning H : " + (int)totalSpaning.TotalHours + " M : " + (int)(totalSpaning.TotalMinutes % 60)); - Console.ResetColor(); - - double earlyExitDeduction = 0; - double lateToWorkDeduction = 0; - - ////محاسبه مزد روزانه به ازای هر دقیقه - //double dailyWagePerMinute = - // (customizeWorkshopEmployeeSettings.Salary / monthDays) / sumOfEmployeeShiftSpan.TotalMinutes; - - if (customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitType != EarlyExitType.None && earlyExist > new TimeSpan()) - { - earlyExitDeduction = customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitType switch - { - EarlyExitType.Default => earlyExist.TotalMinutes * minuteWage, - - EarlyExitType.MoneyPerMinute => earlyExist.TotalMinutes * customizeWorkshopEmployeeSettings.EarlyExit.Value, - - _ => 0 - }; - - } - - - if (customizeWorkshopEmployeeSettings.LateToWork.LateToWorkType != LateToWorkType.None && lateToWork > new TimeSpan()) - { - lateToWorkDeduction = customizeWorkshopEmployeeSettings.LateToWork.LateToWorkType switch - { - LateToWorkType.Default => lateToWork.TotalMinutes * minuteWage, - - LateToWorkType.MoneyPerMinute => lateToWork.TotalMinutes * customizeWorkshopEmployeeSettings.LateToWork.Value, - - _ => 0 - }; - - } - - if (customizeWorkshopEmployeeSettings.LateToWork.LateToWorkTimeFines.Any()) - { - lateToWorkDeduction += - (from lateToWorkTimeFine in customizeWorkshopEmployeeSettings.LateToWork.LateToWorkTimeFines - let stepFine = lateToWoks.Count(x => x.Spanning.TotalMinutes >= Convert.ToInt32(lateToWorkTimeFine.Minute)) - select stepFine * lateToWorkTimeFine.FineMoney).Sum(); - } - if (customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitTimeFines.Any()) - { - earlyExitDeduction += - (from earlyExitFine in customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitTimeFines - let stepFine = earlyExits.Count(x => x.Spanning.TotalMinutes >= Convert.ToInt32(earlyExitFine.Minute)) - select stepFine * earlyExitFine.FineMoney).Sum(); - } - - - - #endregion - - return new CustomizeCheckoutMandatoryViewModel - { - InsuranceDeduction = insuranceDeductionAmount, - FridayPay = fridayPayAmount, - OverTimePay = overtimePayAmount, - BaseYearsPay = baseYearsPayAmount, - NightWorkPay = nightworkPayAmount, - MarriedAllowance = maritalAllowancePay, - FamilyAllowance = familyAllowancePay, - LeavePay = leavePayAmount, - FineAbsenceDeduction = absentsDeductionAmount, - BonusesPay = bonusesPayAmount, - ContractEndFa = contractEnd.ToFarsi(), - ContractStartFa = contractStart.ToFarsi(), - EmployeeName = employee.FullName, - InstallmentDeduction = loanDeduction, - SalaryAidDeduction = salaryAidDeduction, - FineDeduction = fineDeduction, - RewardPay = rewardPay, - Month = monthOfCheckout, - Year = yearOfCheckout, - LateToWorkDeduction = lateToWorkDeduction, - EarlyExitDeduction = earlyExitDeduction, - ShiftPay = 0, - TaxDeduction = 0, - EmployeeId = employeeId, - SumOfWorkingDays = totalDays.ToString(), - ContractNo = contract?.ContractNo ?? "-", - MonthlySalary = dailyWage * mandatoryDays, - PersonnelCode = personnelCode, - FineViewModels = fineViewModels, - InstallmentViewModels = loanInstallments, - SalaryAidViewModels = salaryAidViewModel, - RewardViewModels = rewardViewModels - }; - } - - - - public CustomizeCheckoutMandatoryViewModel CustomizeCheckoutMandatoryComputeForKebabMahdi(long employeeId, - long workshopId, - DateTime contractStart, DateTime contractEnd) - { - var checkoutEnd = contractEnd; - var checkoutStart = contractStart; - - var exceptionEmployees = _context.CustomizeWorkshopGroupSettings.Where(x => x.id == 117) - .Include(x => x.CustomizeWorkshopEmployeeSettingsCollection).AsSplitQuery().FirstOrDefault()?.CustomizeWorkshopEmployeeSettingsCollection.Select(x => x.EmployeeId).ToList() ?? []; - - if (exceptionEmployees.Contains(employeeId)) - { - return CheckoutWithoutCalculationForKebabMahdi(workshopId, employeeId, contractStart, contractEnd); - } - - var firstDayOfMonth = $"{(contractStart.ToFarsi())[..8]}/01".ToGeorgianDateTime(); - - #region LeftWork - - var leftWork = - _leftWorkRepository.GetByWorkshopIdEmployeeIdInDates(workshopId, employeeId, contractStart, contractEnd); - - if (leftWork.StartWorkDateGr > contractStart) - { - contractStart = leftWork.StartWorkDateGr; - } - - if (leftWork.LeftWorkDateGr.AddDays(-1) < contractEnd) - { - contractEnd = leftWork.LeftWorkDateGr.AddDays(-1); - } - - TimeSpan leftWorkDurationTimeSpan = leftWork.HasLeft - ? leftWork.LeftWorkDateGr.AddDays(-1) - leftWork.StartWorkDateGr - : contractEnd - leftWork.StartWorkDateGr; - - - #endregion - - - #region Entities - - int numberOfFridays = 0; - double monthySalary = 0; - int monthDays = 0; - double dailyWage = 0; - int numberOfWorkingDay = 0; - string endPersianDate = contractEnd.ToFarsi(); - int monthOfCheckout = Convert.ToInt32(endPersianDate.Substring(5, 2)); - int yearOfCheckout = Convert.ToInt32(endPersianDate.Substring(0, 4)); - //روز هایی که پرسنل موظف بوده کار کند - var mandatoryDays = 0; - - TimeSpan contractDuration = contractEnd - contractStart; - var employee = _context.Employees.FirstOrDefault(x => x.id == employeeId); - var personnelCode = - _context.PersonnelCodeSet.FirstOrDefault(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId) - ?.PersonnelCode ?? 0; - var contract = _context.Contracts.Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && - x.ContractEnd.Date >= contractStart.Date && - x.ContarctStart.Date <= contractEnd.Date).ToList() - ?.MaxBy(x => x.ContarctStart); - var totalDays = (int)(contractEnd - contractStart).TotalDays + 1; - mandatoryDays = totalDays; - - - #endregion - - - - #region CustomizeSettings - - CustomizeWorkshopEmployeeSettings customizeWorkshopEmployeeSettings = _context.CustomizeWorkshopEmployeeSettings - .AsSplitQuery().AsNoTracking().FirstOrDefault(x => - x.WorkshopId == workshopId && x.EmployeeId == employeeId); - CustomizeWorkshopSettings customizeWorkshopSettings = - _context.CustomizeWorkshopSettings.AsNoTracking().FirstOrDefault(x => x.WorkshopId == workshopId); - //ToDo handel exception if is null - monthySalary = customizeWorkshopEmployeeSettings?.Salary ?? 0; - monthDays = customizeWorkshopSettings.MaxMonthDays == MaxMonthDays.ThirtyDaysForAllMonth - ? 30 - : firstDayOfMonth.CountMonthDays(); - - - var shiftSettings = customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts; - - var employeeShiftsSpans = shiftSettings.Select(x => - { - var start = new DateTime(new DateOnly(), x.StartTime); - var end = new DateTime(new DateOnly(), x.EndTime); - if (x.EndTime < x.StartTime) - end = end.AddDays(1); - var span = end - start; - return new EmployeeShiftResult - { - Placement = x.Placement, - ShiftSpan = span - }; + #endregion - }); - - - #endregion + //حق تاهل + #region MaritalAllownace + double maritalAllowancePay = 0; + if (employee.MaritalStatus == "متاهل") + { + switch (customizeWorkshopEmployeeSettings.MarriedAllowance.MarriedAllowanceType) + { + case MarriedAllowanceType.Money: + { + maritalAllowancePay = customizeWorkshopEmployeeSettings.MarriedAllowance.Value; + break; + } + //case MarriedAllowanceType.PercentageFromSalary: + + // { + // double multiplier = customizeWorkshopEmployeeSettings.MarriedAllowance.Value / 100; + // maritalAllowance = dailyWage * multiplier; + // break; + // } + } + } + #endregion + + //شب کاری + #region NightWorkPay + double nightworkPayAmount = 0; + List rotatingResultList = RotatingShiftCheck(groupedRollCall); + + // شبکاری + TimeSpan nightWorks = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks)); + + if (nightWorks > new TimeSpan()) + { + switch (customizeWorkshopEmployeeSettings.NightWorkPay.NightWorkingType) + { + case NightWorkType.MoneyPerHour: + { + var baseAmount = customizeWorkshopEmployeeSettings.NightWorkPay.Value; + var nightWorkMinutes = (int)(nightWorks).TotalMinutes; + nightworkPayAmount += nightWorkMinutes * (baseAmount / 60); + break; + } + case NightWorkType.PercentageFromSalary: + { + double multiplier = customizeWorkshopEmployeeSettings.NightWorkPay.Value / 100; + var nightWorkMinutes = (int)(nightWorks).TotalMinutes; + nightworkPayAmount += ((dailyWage * multiplier) / 60) * nightWorkMinutes; + break; + } + + + } + } + #endregion + + //سنوات + #region BaseYearsPay + double baseYearsPayAmount = CalculateYearsPayAmount(employeeId, workshopId, monthySalary, contractStart, contractEnd + , customizeWorkshopEmployeeSettings.BaseYearsPay, customizeWorkshopSettings.BaseYearsPayInEndOfYear, customizeWorkshopSettings.MaxMonthDays); + + #endregion + //حق اولاد + + #region FamilyAllowancePay + double familyAllowancePay = 0; + switch (customizeWorkshopEmployeeSettings.FamilyAllowance.FamilyAllowanceType) + { + case FamilyAllowanceType.Money: + { + double baseAmount = customizeWorkshopEmployeeSettings.FamilyAllowance.Value; + familyAllowancePay = CalculateFamilyAllowancePayAmount(employeeId, baseAmount, contractEnd); + break; + } + + case FamilyAllowanceType.Percentage: + { + double multiplier = customizeWorkshopEmployeeSettings.FamilyAllowance.Value / 100; + familyAllowancePay = CalculateFamilyAllowancePayAmount(employeeId, multiplier * monthySalary, contractEnd); + break; + } + } + #endregion + #region Reward + + var rewardViewModels = RewardForCheckout(employeeId, workshopId, checkoutEnd, checkoutStart); + + double rewardPay = rewardViewModels.Sum(x => x.AmountDouble); + #endregion + + #region LeavePay + + + + #endregion + + #region BonusesPay + + double bonusesPayAmount = 0; + + + if (customizeWorkshopEmployeeSettings.BonusesPay.BonusesPayType != BonusesType.None) + { + switch (customizeWorkshopEmployeeSettings.BonusesPay.BonusesPayType) + { + case BonusesType.OneTimeOfSalary: + bonusesPayAmount = monthySalary; + break; + case BonusesType.TwoTimeOfSalary: + bonusesPayAmount = monthySalary * 2; + break; + case BonusesType.Money: + bonusesPayAmount = customizeWorkshopEmployeeSettings.BonusesPay.Value; + break; + case BonusesType.PercentageOfSalary: + bonusesPayAmount = (monthySalary * customizeWorkshopEmployeeSettings.BonusesPay.Value) / 100; + break; + } + double bonusesPerMonth = bonusesPayAmount / 12; + + if (customizeWorkshopEmployeeSettings.BonusesPay.PaymentType == BonusesPaymentType.YearlyPay) + { + var contractEndFarsi = Tools.FindeEndOfMonth(contractEnd.ToFarsi()); + if (monthOfCheckout == 12 && (contractEndFarsi.EndsWith("29")) || contractEndFarsi.EndsWith("30")) + { + } + else if (customizeWorkshopSettings.BonusesPaysInEndOfMonth == BonusesPaysInEndOfYear.WhenEverEmployeeLeftWork && leftWork.HasLeft) + { + TimeSpan bonusDuration; + DateTime startOfYear = new PersianCalendar().ToDateTime(yearOfCheckout, 1, 1, 0, 0, 0, 0); + if (startOfYear < leftWork.StartWorkDateGr) + bonusDuration = leftWorkDurationTimeSpan; + else + bonusDuration = leftWork.LeftWorkDateGr - startOfYear; + //ToDo: Check if should be absolute 365! + bonusesPayAmount = (bonusesPayAmount / 365) * bonusDuration.TotalDays; + } + else + { + bonusesPayAmount = 0; + } + } + else if (customizeWorkshopEmployeeSettings.BonusesPay.PaymentType == BonusesPaymentType.MonthlyPay) + { + + + if (customizeWorkshopSettings.BonusesPaysInEndOfMonth == + BonusesPaysInEndOfYear.WhenEverEmployeeLeftWork && leftWork.HasLeft && contractDays < monthDays) + bonusesPayAmount = (bonusesPerMonth / contractEnd.CountPersianMonthDays()) * contractDuration.TotalDays + 1; + + + bonusesPayAmount = bonusesPerMonth; + } + else + { + throw new InvalidDataException(); + } + } + + #endregion + + + #endregion + + #region LateToWork & EarlyExit + + var lateToWorkEarlyExit = LateToWorkEarlyExit(groupedRollCall, shiftSettings, leaveList); + foreach (var i in lateToWorkEarlyExit) + { + Console.WriteLine(" start : " + i.StartSpan + " end : " + i.EndSpan + " spaning : " + i.Spanning + " Type : " + i.TypeOfSapn); + } + + var lateToWoks = lateToWorkEarlyExit.Where(x => x.TypeOfSapn == "LateToWork"); + var earlyExits = lateToWorkEarlyExit.Where(x => x.TypeOfSapn == "EarlyExist"); + + var lateToWork = new TimeSpan(lateToWoks.Sum(x => x.Spanning.Ticks)); + var earlyExist = new TimeSpan(earlyExits.Sum(x => x.Spanning.Ticks)); + var totalSpaning = new TimeSpan(lateToWorkEarlyExit.Sum(x => x.Spanning.Ticks)); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(" LateToWork H : " + (int)lateToWork.TotalHours + " M : " + (int)(lateToWork.TotalMinutes % 60)); + Console.WriteLine(" EarlyExist H : " + (int)earlyExist.TotalHours + " M : " + (int)(earlyExist.TotalMinutes % 60)); + Console.WriteLine(" TotalSpaning H : " + (int)totalSpaning.TotalHours + " M : " + (int)(totalSpaning.TotalMinutes % 60)); + Console.ResetColor(); + + double earlyExitDeduction = 0; + double lateToWorkDeduction = 0; + + ////محاسبه مزد روزانه به ازای هر دقیقه + //double dailyWagePerMinute = + // (customizeWorkshopEmployeeSettings.Salary / monthDays) / sumOfEmployeeShiftSpan.TotalMinutes; + + if (customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitType != EarlyExitType.None && earlyExist > new TimeSpan()) + { + earlyExitDeduction = customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitType switch + { + EarlyExitType.Default => earlyExist.TotalMinutes * minuteWage, + + EarlyExitType.MoneyPerMinute => earlyExist.TotalMinutes * customizeWorkshopEmployeeSettings.EarlyExit.Value, + + _ => 0 + }; + + } + + + if (customizeWorkshopEmployeeSettings.LateToWork.LateToWorkType != LateToWorkType.None && lateToWork > new TimeSpan()) + { + lateToWorkDeduction = customizeWorkshopEmployeeSettings.LateToWork.LateToWorkType switch + { + LateToWorkType.Default => lateToWork.TotalMinutes * minuteWage, + + LateToWorkType.MoneyPerMinute => lateToWork.TotalMinutes * customizeWorkshopEmployeeSettings.LateToWork.Value, + + _ => 0 + }; + + } + + if (customizeWorkshopEmployeeSettings.LateToWork.LateToWorkTimeFines.Any()) + { + lateToWorkDeduction += + (from lateToWorkTimeFine in customizeWorkshopEmployeeSettings.LateToWork.LateToWorkTimeFines + let stepFine = lateToWoks.Count(x => x.Spanning.TotalMinutes >= Convert.ToInt32(lateToWorkTimeFine.Minute)) + select stepFine * lateToWorkTimeFine.FineMoney).Sum(); + } + if (customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitTimeFines.Any()) + { + earlyExitDeduction += + (from earlyExitFine in customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitTimeFines + let stepFine = earlyExits.Count(x => x.Spanning.TotalMinutes >= Convert.ToInt32(earlyExitFine.Minute)) + select stepFine * earlyExitFine.FineMoney).Sum(); + } + + + + #endregion + + return new CustomizeCheckoutMandatoryViewModel + { + InsuranceDeduction = insuranceDeductionAmount, + FridayPay = fridayPayAmount, + OverTimePay = overtimePayAmount, + BaseYearsPay = baseYearsPayAmount, + NightWorkPay = nightworkPayAmount, + MarriedAllowance = maritalAllowancePay, + FamilyAllowance = familyAllowancePay, + LeavePay = leavePayAmount, + FineAbsenceDeduction = absentsDeductionAmount, + BonusesPay = bonusesPayAmount, + ContractEndFa = contractEnd.ToFarsi(), + ContractStartFa = contractStart.ToFarsi(), + EmployeeName = employee.FullName, + InstallmentDeduction = loanDeduction, + SalaryAidDeduction = salaryAidDeduction, + FineDeduction = fineDeduction, + RewardPay = rewardPay, + Month = monthOfCheckout, + Year = yearOfCheckout, + LateToWorkDeduction = lateToWorkDeduction, + EarlyExitDeduction = earlyExitDeduction, + ShiftPay = 0, + TaxDeduction = 0, + EmployeeId = employeeId, + SumOfWorkingDays = totalDays.ToString(), + ContractNo = contract?.ContractNo ?? "-", + MonthlySalary = dailyWage * mandatoryDays, + PersonnelCode = personnelCode, + FineViewModels = fineViewModels, + InstallmentViewModels = loanInstallments, + SalaryAidViewModels = salaryAidViewModel, + RewardViewModels = rewardViewModels + }; + } + + + + public CustomizeCheckoutMandatoryViewModel CustomizeCheckoutMandatoryComputeForKebabMahdi(long employeeId, + long workshopId, + DateTime contractStart, DateTime contractEnd) + { + var checkoutEnd = contractEnd; + var checkoutStart = contractStart; + + var exceptionEmployees = _context.CustomizeWorkshopGroupSettings.Where(x => x.id == 117) + .Include(x => x.CustomizeWorkshopEmployeeSettingsCollection).AsSplitQuery().FirstOrDefault()?.CustomizeWorkshopEmployeeSettingsCollection.Select(x => x.EmployeeId).ToList() ?? []; + + if (exceptionEmployees.Contains(employeeId)) + { + return CheckoutWithoutCalculationForKebabMahdi(workshopId, employeeId, contractStart, contractEnd); + } + + var firstDayOfMonth = $"{(contractStart.ToFarsi())[..8]}/01".ToGeorgianDateTime(); + + #region LeftWork + + var leftWork = + _leftWorkRepository.GetByWorkshopIdEmployeeIdInDates(workshopId, employeeId, contractStart, contractEnd); + + if (leftWork.StartWorkDateGr > contractStart) + { + contractStart = leftWork.StartWorkDateGr; + } + + if (leftWork.LeftWorkDateGr.AddDays(-1) < contractEnd) + { + contractEnd = leftWork.LeftWorkDateGr.AddDays(-1); + } + + TimeSpan leftWorkDurationTimeSpan = leftWork.HasLeft + ? leftWork.LeftWorkDateGr.AddDays(-1) - leftWork.StartWorkDateGr + : contractEnd - leftWork.StartWorkDateGr; + + + #endregion + + + #region Entities + + int numberOfFridays = 0; + double monthySalary = 0; + int monthDays = 0; + double dailyWage = 0; + int numberOfWorkingDay = 0; + string endPersianDate = contractEnd.ToFarsi(); + int monthOfCheckout = Convert.ToInt32(endPersianDate.Substring(5, 2)); + int yearOfCheckout = Convert.ToInt32(endPersianDate.Substring(0, 4)); + //روز هایی که پرسنل موظف بوده کار کند + var mandatoryDays = 0; + + TimeSpan contractDuration = contractEnd - contractStart; + var employee = _context.Employees.FirstOrDefault(x => x.id == employeeId); + var personnelCode = + _context.PersonnelCodeSet.FirstOrDefault(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId) + ?.PersonnelCode ?? 0; + var contract = _context.Contracts.Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && + x.ContractEnd.Date >= contractStart.Date && + x.ContarctStart.Date <= contractEnd.Date).ToList() + ?.MaxBy(x => x.ContarctStart); + var totalDays = (int)(contractEnd - contractStart).TotalDays + 1; + mandatoryDays = totalDays; + + + #endregion + + + + #region CustomizeSettings + + CustomizeWorkshopEmployeeSettings customizeWorkshopEmployeeSettings; + CustomizeWorkshopSettings customizeWorkshopSettings; + + + var endFarvarding = new DateTime(2025, 4, 20); + if (contractStart>endFarvarding) + { + customizeWorkshopEmployeeSettings=_context.CustomizeWorkshopEmployeeSettings + .AsSplitQuery().AsNoTracking().FirstOrDefault(x => + x.WorkshopId == workshopId && x.EmployeeId == employeeId); + + customizeWorkshopSettings =_context.CustomizeWorkshopSettings.AsNoTracking().FirstOrDefault(x => x.WorkshopId == workshopId); + } + + else + { + customizeWorkshopEmployeeSettings = _testDbContext.CustomizeWorkshopEmployeeSettings + .AsSplitQuery().AsNoTracking().FirstOrDefault(x => + x.WorkshopId == workshopId && x.EmployeeId == employeeId); - List rollCallResult = _context.RollCalls.AsNoTracking().Where(x => - x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.ShiftDate.Date >= contractStart.Date && - x.ShiftDate.Date <= contractEnd.Date && x.EndDate != null) - .Select(x => new RollCallViewModel() - { - StartDate = x.StartDate, - EndDate = x.EndDate, - ShiftSpan = (x.EndDate.Value - x.StartDate.Value), - CreationDate = x.CreationDate, - ShiftDate = x.ShiftDate, - EarlyEntryDuration = x.EarlyEntryDuration, - LateEntryDuration = x.LateEntryDuration, - EarlyExitDuration = x.EarlyExitDuration, - LateExitDuration = x.LateExitDuration, - ShiftDurationTimeSpan = x.ShiftDurationTimeSpan, - BreakTimeSpan = x.BreakTimeSpan - - }).ToList(); + customizeWorkshopSettings = _testDbContext.CustomizeWorkshopSettings.AsNoTracking().FirstOrDefault(x => x.WorkshopId == workshopId); + } + //ToDo handel exception if is null + monthySalary = customizeWorkshopEmployeeSettings?.Salary ?? 0; + monthDays = customizeWorkshopSettings.MaxMonthDays == MaxMonthDays.ThirtyDaysForAllMonth + ? 30 + : firstDayOfMonth.CountMonthDays(); - List groupedRollCall = rollCallResult.GroupBy(x => x.ShiftDate.Date).Select(x => - new GroupedRollCalls() - { - CreationDate = x.Key, - ShiftList = x.Select(s => new ShiftList() - { - Start = s.StartDate!.Value, - End = s.EndDate!.Value, - EarlyEntryDuration = s.EarlyEntryDuration, - EarlyExitDuration = s.EarlyExitDuration, - LateEntryDuration = s.LateEntryDuration, - LateExitDuration = s.LateExitDuration, - }).ToList(), - HasFriday = x.Any(s => - s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value.DayOfWeek == DayOfWeek.Friday), + var shiftSettings = customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts; - SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - CalculateBreakTime( - x.First().BreakTimeSpan, - new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))), + var employeeShiftsSpans = shiftSettings.Select(x => + { + var start = new DateTime(new DateOnly(), x.StartTime); + var end = new DateTime(new DateOnly(), x.EndTime); + if (x.EndTime < x.StartTime) + end = end.AddDays(1); + var span = end - start; + return new EmployeeShiftResult + { + Placement = x.Placement, + ShiftSpan = span + }; - BreakTime = CalculateBreakTime(x.First().BreakTimeSpan, - new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))), - ShiftDate = x.Key, - TotalEarlyEntryDuration = new TimeSpan(x.Sum(rollCall => rollCall.EarlyEntryDuration.Ticks)), - TotalLateEntryDuration = new TimeSpan(x.Sum(rollCall => rollCall.LateEntryDuration.Ticks)), - TotalEarlyExitDuration = new TimeSpan(x.Sum(rollCall => rollCall.EarlyExitDuration.Ticks)), - TotalLateExitDuration = new TimeSpan(x.Sum(rollCall => rollCall.LateExitDuration.Ticks)), - TotalShiftDurationTimeSpan = - x.FirstOrDefault() == null ? TimeSpan.Zero : x.First().ShiftDurationTimeSpan - }).ToList(); + }); - var sumOfEmployeeShiftSpan = - groupedRollCall.Any() ? groupedRollCall.First().TotalShiftDurationTimeSpan : TimeSpan.Zero; + #endregion - if (customizeWorkshopEmployeeSettings.BreakTime.BreakTimeType == BreakTimeType.WithTime && - sumOfEmployeeShiftSpan != TimeSpan.Zero) - { - sumOfEmployeeShiftSpan -= customizeWorkshopEmployeeSettings.BreakTime.BreakTimeValue.ToTimeSpan(); - } + List rollCallResult = _context.RollCalls.AsNoTracking().Where(x => + x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.ShiftDate.Date >= contractStart.Date && + x.ShiftDate.Date <= contractEnd.Date && x.EndDate != null) + .Select(x => new RollCallViewModel() + { + StartDate = x.StartDate, + EndDate = x.EndDate, + ShiftSpan = (x.EndDate.Value - x.StartDate.Value), + CreationDate = x.CreationDate, + ShiftDate = x.ShiftDate, + EarlyEntryDuration = x.EarlyEntryDuration, + LateEntryDuration = x.LateEntryDuration, + EarlyExitDuration = x.EarlyExitDuration, + LateExitDuration = x.LateExitDuration, + ShiftDurationTimeSpan = x.ShiftDurationTimeSpan, + BreakTimeSpan = x.BreakTimeSpan + }).ToList(); - // ساخت لیست همه تاریخ‌ها در بازه - List allDates = Enumerable.Range(0, (contractEnd - contractStart).Days + 1) - .Select(offset => contractStart.AddDays(offset)) - .ToList(); - // فیلتر تاریخ‌هایی که در لیست حضور نیستند - List absentDates = allDates - .Where(date => !groupedRollCall.Any(g => g.ShiftDate.Date == date.Date)) - .ToList(); + List groupedRollCall = rollCallResult.GroupBy(x => x.ShiftDate.Date).Select(x => + new GroupedRollCalls() + { + CreationDate = x.Key, + ShiftList = x.Select(s => new ShiftList() + { + Start = s.StartDate!.Value, + End = s.EndDate!.Value, + EarlyEntryDuration = s.EarlyEntryDuration, + EarlyExitDuration = s.EarlyExitDuration, + LateEntryDuration = s.LateEntryDuration, + LateExitDuration = s.LateExitDuration, + }).ToList(), + HasFriday = x.Any(s => + s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value.DayOfWeek == DayOfWeek.Friday), - TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); + SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - CalculateBreakTime( + x.First().BreakTimeSpan, + new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))), - numberOfFridays = groupedRollCall.Count(x => x.HasFriday); + BreakTime = CalculateBreakTime(x.First().BreakTimeSpan, + new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))), + ShiftDate = x.Key, + TotalEarlyEntryDuration = new TimeSpan(x.Sum(rollCall => rollCall.EarlyEntryDuration.Ticks)), + TotalLateEntryDuration = new TimeSpan(x.Sum(rollCall => rollCall.LateEntryDuration.Ticks)), + TotalEarlyExitDuration = new TimeSpan(x.Sum(rollCall => rollCall.EarlyExitDuration.Ticks)), + TotalLateExitDuration = new TimeSpan(x.Sum(rollCall => rollCall.LateExitDuration.Ticks)), + TotalShiftDurationTimeSpan = + x.FirstOrDefault() == null ? TimeSpan.Zero : x.First().ShiftDurationTimeSpan + }).ToList(); - numberOfWorkingDay = groupedRollCall.Count(); - //تعداد روز های قرارداد - int contractDays = (int)contractDuration.TotalDays + 1; + var sumOfEmployeeShiftSpan = + groupedRollCall.Any() ? groupedRollCall.First().TotalShiftDurationTimeSpan : TimeSpan.Zero; - //روز های غیبت - var absenceDays = mandatoryDays - groupedRollCall.Count; - int fridays = 0; + if (customizeWorkshopEmployeeSettings.BreakTime.BreakTimeType == BreakTimeType.WithTime && + sumOfEmployeeShiftSpan != TimeSpan.Zero) + { + sumOfEmployeeShiftSpan -= customizeWorkshopEmployeeSettings.BreakTime.BreakTimeValue.ToTimeSpan(); + } - int holiday = _context.HolidayItems.Count(x => x.Holidaydate >= contractStart && x.Holidaydate <= contractEnd); - for (var gDate = contractStart; gDate <= contractEnd; gDate = gDate.AddDays(1)) - { - if (gDate.DayOfWeek == DayOfWeek.Friday) - { - fridays += 1; - } - } + // ساخت لیست همه تاریخ‌ها در بازه + List allDates = Enumerable.Range(0, (contractEnd - contractStart).Days + 1) + .Select(offset => contractStart.AddDays(offset)) + .ToList(); - if (customizeWorkshopEmployeeSettings.FridayWork == FridayWork.Default) - { - var fridayWorkingTotalDays = groupedRollCall.Count(x => x.ShiftDate.DayOfWeek == DayOfWeek.Friday); - var fridayWorking = fridays - fridayWorkingTotalDays; + // فیلتر تاریخ‌هایی که در لیست حضور نیستند + List absentDates = allDates + .Where(date => !groupedRollCall.Any(g => g.ShiftDate.Date == date.Date)) + .ToList(); - //mandatoryDays -= fridayWorking; + TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); - } + numberOfFridays = groupedRollCall.Count(x => x.HasFriday); - if (customizeWorkshopEmployeeSettings.HolidayWork == HolidayWork.Default) - { - var groupStartDaysDates = groupedRollCall.Select(x => x.CreationDate.Date).ToList(); - var holidayWorkingDays = _context.HolidayItems.Count(x => - groupStartDaysDates.Any(r => r == x.Holidaydate.Date)); - holiday = holiday - holidayWorkingDays; + numberOfWorkingDay = groupedRollCall.Count(); + //تعداد روز های قرارداد + int contractDays = (int)contractDuration.TotalDays + 1; - mandatoryDays -= holiday; + //روز های غیبت + var absenceDays = mandatoryDays - groupedRollCall.Count; - } + int fridays = 0; - TimeSpan absentTimeSpans = new(); + int holiday = _context.HolidayItems.Count(x => x.Holidaydate >= contractStart && x.Holidaydate <= contractEnd); - if ((mandatoryDays * sumOfEmployeeShiftSpan) > sumSpans) - { - absentTimeSpans = (mandatoryDays * sumOfEmployeeShiftSpan) - sumSpans; - } + for (var gDate = contractStart; gDate <= contractEnd; gDate = gDate.AddDays(1)) + { + if (gDate.DayOfWeek == DayOfWeek.Friday) + { + fridays += 1; + } + } - dailyWage = monthySalary / monthDays; + if (customizeWorkshopEmployeeSettings.FridayWork == FridayWork.Default) + { + var fridayWorkingTotalDays = groupedRollCall.Count(x => x.ShiftDate.DayOfWeek == DayOfWeek.Friday); + var fridayWorking = fridays - fridayWorkingTotalDays; - var minuteWage = sumOfEmployeeShiftSpan.TotalMinutes == 0 - ? 0 - : (dailyWage / sumOfEmployeeShiftSpan.TotalMinutes); + //mandatoryDays -= fridayWorking; + } - // یافتن مرخصی ساعتی + if (customizeWorkshopEmployeeSettings.HolidayWork == HolidayWork.Default) + { + var groupStartDaysDates = groupedRollCall.Select(x => x.CreationDate.Date).ToList(); + var holidayWorkingDays = _context.HolidayItems.Count(x => + groupStartDaysDates.Any(r => r == x.Holidaydate.Date)); + holiday = holiday - holidayWorkingDays; - #region LeavHourse + mandatoryDays -= holiday; - LeaveSearchModel leaveHourseSearch = new LeaveSearchModel() - { - EmployeeId = employeeId, - WorkshopId = workshopId, - LeaveType = "استحقاقی", + } - StartLeaveGr = contractStart, - EndLeaveGr = contractEnd, - IsAccepted = true, - }; - List leaveList = _leaveRepository.search(leaveHourseSearch); + TimeSpan absentTimeSpans = new(); - #endregion + if ((mandatoryDays * sumOfEmployeeShiftSpan) > sumSpans) + { + absentTimeSpans = (mandatoryDays * sumOfEmployeeShiftSpan) - sumSpans; + } - //****افزودن مرخصی پرسنل به مجموع ساعات کار*** - #region AddEmployeeLeaves + dailyWage = monthySalary / monthDays; - //TimeSpan workingPerDayAve = sumSpans / numberOfWorkingDay;//میانگین ساعت کار در روز + var minuteWage = sumOfEmployeeShiftSpan.TotalMinutes == 0 + ? 0 + : (dailyWage / sumOfEmployeeShiftSpan.TotalMinutes); - //if (workingPerDayAve <= new TimeSpan(7, 20, 0)) - //{ - // sumLeave = leavingDayCout * workingPerDayAve; - //} - //else - //{ - // sumLeave = leavingDayCout * new TimeSpan(7, 20, 0); - //} + // یافتن مرخصی ساعتی + #region LeavHourse + LeaveSearchModel leaveHourseSearch = new LeaveSearchModel() + { + EmployeeId = employeeId, + WorkshopId = workshopId, + LeaveType = "استحقاقی", - double leavePayAmount = 0; - double absentsDeductionAmount = 0; + StartLeaveGr = contractStart, + EndLeaveGr = contractEnd, + IsAccepted = true, + }; + List leaveList = _leaveRepository.search(leaveHourseSearch); - int leavePermittedDays = customizeWorkshopEmployeeSettings.LeavePermittedDays; - double leaveValue = customizeWorkshopEmployeeSettings.LeavePay.Value; + #endregion + //****افزودن مرخصی پرسنل به مجموع ساعات کار*** + #region AddEmployeeLeaves - if (customizeWorkshopEmployeeSettings.CustomizeWorkshopGroupSettingId == 77) - { - var startMonth = contractStart; - var endMonth = contractStart.ToFarsi().FindeEndOfMonth().ToGeorgianDateTime(); + //TimeSpan workingPerDayAve = sumSpans / numberOfWorkingDay;//میانگین ساعت کار در روز - int fridayInMonth = 0; - // Ensure the dates are in the correct order - if (startMonth > endMonth) - { - var temp = startMonth; - startMonth = endMonth; - endMonth = temp; - } - // Find the first Friday in the range - int daysUntilFriday = ((int)DayOfWeek.Friday - (int)startMonth.DayOfWeek + 7) % 7; - DateTime firstFriday = startMonth.AddDays(daysUntilFriday); + //if (workingPerDayAve <= new TimeSpan(7, 20, 0)) + //{ + // sumLeave = leavingDayCout * workingPerDayAve; + //} + //else + //{ + // sumLeave = leavingDayCout * new TimeSpan(7, 20, 0); + //} - // If the first Friday is outside the range, there are no Fridays - if (firstFriday > endMonth) - { - fridayInMonth = 0; - } - // Calculate the total number of days between the first Friday and the end date - int totalFridayPeriod = (endMonth - firstFriday).Days; - // Count the Fridays by dividing the total days by 7 and adding 1 for the first Friday - fridayInMonth = totalFridayPeriod / 7 + 1; + double leavePayAmount = 0; + double absentsDeductionAmount = 0; + int leavePermittedDays = customizeWorkshopEmployeeSettings.LeavePermittedDays; + double leaveValue = customizeWorkshopEmployeeSettings.LeavePay.Value; - leavePermittedDays = fridayInMonth; - } + if (customizeWorkshopEmployeeSettings.CustomizeWorkshopGroupSettingId == 77) + { + var startMonth = contractStart; + var endMonth = contractStart.ToFarsi().FindeEndOfMonth().ToGeorgianDateTime(); + int fridayInMonth = 0; + // Ensure the dates are in the correct order + if (startMonth > endMonth) + { + var temp = startMonth; + startMonth = endMonth; + endMonth = temp; + } + // Find the first Friday in the range + int daysUntilFriday = ((int)DayOfWeek.Friday - (int)startMonth.DayOfWeek + 7) % 7; + DateTime firstFriday = startMonth.AddDays(daysUntilFriday); + // If the first Friday is outside the range, there are no Fridays + if (firstFriday > endMonth) + { + fridayInMonth = 0; + } - sumSpans = CalculateLeavePay(sumOfEmployeeShiftSpan, absentTimeSpans, leavePermittedDays, monthDays, - contractDays, sumSpans - , leaveValue, minuteWage, contractStart, contractEnd, out leavePayAmount, out absentsDeductionAmount); + // Calculate the total number of days between the first Friday and the end date + int totalFridayPeriod = (endMonth - firstFriday).Days; - if (customizeWorkshopEmployeeSettings.LeavePay.LeavePayType != LeavePayType.None) - { + // Count the Fridays by dividing the total days by 7 and adding 1 for the first Friday + fridayInMonth = totalFridayPeriod / 7 + 1; - } - else - { - absentsDeductionAmount = absentTimeSpans.TotalMinutes * minuteWage; - } - leavePayAmount = 0; + leavePermittedDays = fridayInMonth; + } - absenceDays = (absenceDays - leavePermittedDays) < 0 ? 0 : (absenceDays - leavePermittedDays); - //اگر روز تولدش تاریخ فیش وجود داشت - var monthOfBirthDay = employee!.DateOfBirth.ToFarsi().Substring(5, 2); - var pc = new PersianCalendar(); - var birthdayMonth = pc.GetMonth(employee.DateOfBirth); - var birthdayDay = pc.GetDayOfMonth(employee.DateOfBirth); - if (birthdayMonth == 12 && birthdayDay == 30) - { - //چک کن که آیا سال قرارداد کبیسه هست یا نه - var leap = - pc.IsLeapYear(pc.GetYear(contractStart)); - if (!leap) - { - birthdayDay = 29; - } - } + sumSpans = CalculateLeavePay(sumOfEmployeeShiftSpan, absentTimeSpans, leavePermittedDays, monthDays, + contractDays, sumSpans + , leaveValue, minuteWage, contractStart, contractEnd, out leavePayAmount, out absentsDeductionAmount); + if (customizeWorkshopEmployeeSettings.LeavePay.LeavePayType != LeavePayType.None) + { + } + else + { + absentsDeductionAmount = absentTimeSpans.TotalMinutes * minuteWage; + } - var employeeBirthDay = $"{yearOfCheckout:0000}/{birthdayMonth:00}/{birthdayDay:00}".ToGeorgianDateTime(); + leavePayAmount = 0; - if (employeeBirthDay >= contractStart && employeeBirthDay <= contractEnd && absenceDays > 0) - { - CreateRewardForBirthDay(employeeId, workshopId, dailyWage, monthOfCheckout, yearOfCheckout, contractStart); - } + absenceDays = (absenceDays - leavePermittedDays) < 0 ? 0 : (absenceDays - leavePermittedDays); + //اگر روز تولدش تاریخ فیش وجود داشت + var monthOfBirthDay = employee!.DateOfBirth.ToFarsi().Substring(5, 2); + var pc = new PersianCalendar(); + var birthdayMonth = pc.GetMonth(employee.DateOfBirth); + var birthdayDay = pc.GetDayOfMonth(employee.DateOfBirth); + if (birthdayMonth == 12 && birthdayDay == 30) + { + //چک کن که آیا سال قرارداد کبیسه هست یا نه + var leap = + pc.IsLeapYear(pc.GetYear(contractStart)); + if (!leap) + { + birthdayDay = 29; + } + } - Console.WriteLine(sumSpans); - #endregion - //***********************************// - //ToTal Hours Employee Worked - double totalHours = (sumSpans.TotalMinutes) / 60; - int totalHolidaysAndNotH = (int)sumSpans.TotalHours; - int totalHolidaysAndNotM = (int)(sumSpans.TotalMinutes % 60); - //***********************************// + var employeeBirthDay = $"{yearOfCheckout:0000}/{birthdayMonth:00}/{birthdayDay:00}".ToGeorgianDateTime(); + if (employeeBirthDay >= contractStart && employeeBirthDay <= contractEnd && absenceDays > 0) + { - #region Deductions + CreateRewardForBirthDay(employeeId, workshopId, dailyWage, monthOfCheckout, yearOfCheckout, contractStart); + } - //غیبت - //تاخیر و تعجیل - //حق بیمه - #region InsurancePay + Console.WriteLine(sumSpans); - InsuranceDeduction insuranceDeduction = customizeWorkshopEmployeeSettings.InsuranceDeduction; - //farokhiChange - double insuranceDeductionAmount = - InsurancePayCalculation(employeeId, contractStart, contractEnd, insuranceDeduction, monthySalary); + #endregion - #endregion + //***********************************// + //ToTal Hours Employee Worked + double totalHours = (sumSpans.TotalMinutes) / 60; + int totalHolidaysAndNotH = (int)sumSpans.TotalHours; + int totalHolidaysAndNotM = (int)(sumSpans.TotalMinutes % 60); + //***********************************// - #region SalaryAidDeduction - var salaryAidViewModel = SalaryAidsForCheckout(employeeId, workshopId, checkoutStart, checkoutEnd); - double salaryAidDeduction = salaryAidViewModel.Sum(x => x.AmountDouble); - #endregion + #region Deductions - #region Loan + //غیبت - var loanInstallments = LoanInstallmentForCheckout(employeeId, workshopId, contractStart, contractEnd); + //تاخیر و تعجیل - double loanDeduction = loanInstallments.Sum(x => x.AmountDouble); - #endregion + //حق بیمه - #region Fine + #region InsurancePay - var fineViewModels = FinesForCheckout(employeeId, workshopId, contractStart, contractEnd); - double fineDeduction = fineViewModels.Sum(x => x.Amount.MoneyToDouble()); + InsuranceDeduction insuranceDeduction = customizeWorkshopEmployeeSettings.InsuranceDeduction; + //farokhiChange + double insuranceDeductionAmount = + InsurancePayCalculation(employeeId, contractStart, contractEnd, insuranceDeduction, monthySalary); - #endregion + #endregion + #region SalaryAidDeduction - #endregion + var salaryAidViewModel = SalaryAidsForCheckout(employeeId, workshopId, checkoutStart, checkoutEnd); + double salaryAidDeduction = salaryAidViewModel.Sum(x => x.AmountDouble); + #endregion - #region Payments + #region Loan - //اضافه کاری + var loanInstallments = LoanInstallmentForCheckout(employeeId, workshopId, contractStart, contractEnd); - #region OvertimePay + double loanDeduction = loanInstallments.Sum(x => x.AmountDouble); - double overtimePayAmount = 0; + #endregion + #region Fine + var fineViewModels = FinesForCheckout(employeeId, workshopId, contractStart, contractEnd); + double fineDeduction = fineViewModels.Sum(x => x.Amount.MoneyToDouble()); - TimeSpan overtimeTimeSpan; + #endregion - if (customizeWorkshopSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular && - customizeWorkshopEmployeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) - { - overtimeTimeSpan = CalculateOvertimeSpanWithSumSpan(sumSpans, mandatoryDays, shiftSettings); - } - else if (customizeWorkshopEmployeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) - { - //var date = new DateOnly(); - //var firstStartShift = new DateTime(date, customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MinBy(x => x.Placement).StartTime); - //var lastEndShift = new DateTime(date, customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MaxBy(x => x.Placement).EndTime); - //if (lastEndShift > firstStartShift) - // firstStartShift = firstStartShift.AddDays(1); - //var offSet = (firstStartShift - lastEndShift).Divide(2); - //var employeeOffSet = TimeOnly.FromDateTime(lastEndShift.Add(offSet)); - overtimeTimeSpan = CalculateOvertimeSpanWithSumSpan(sumSpans, mandatoryDays, shiftSettings); + #endregion - } - else - { - var irregularShifts = customizeWorkshopEmployeeSettings.IrregularShift.WorkshopIrregularShifts; - overtimeTimeSpan = CalculateRotatingOvertime(customizeWorkshopEmployeeSettings.CustomizeRotatingShifts, - groupedRollCall, mandatoryDays, sumSpans); - } - overtimePayAmount = - CalculateOvertimePay(overtimeTimeSpan, customizeWorkshopEmployeeSettings.OverTimePay, dailyWage); + #region Payments - if (overtimePayAmount >= absentsDeductionAmount) - { - overtimePayAmount = overtimePayAmount - absentsDeductionAmount; - absentsDeductionAmount = 0; - } - else - { - absentsDeductionAmount = absentsDeductionAmount - overtimePayAmount; - overtimePayAmount = 0; - } + //اضافه کاری - overtimePayAmount = 0; + #region OvertimePay + double overtimePayAmount = 0; + TimeSpan overtimeTimeSpan; - #endregion + if (customizeWorkshopSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular && + customizeWorkshopEmployeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) + { + overtimeTimeSpan = CalculateOvertimeSpanWithSumSpan(sumSpans, mandatoryDays, shiftSettings); + } + else if (customizeWorkshopEmployeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular) + { + //var date = new DateOnly(); + //var firstStartShift = new DateTime(date, customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MinBy(x => x.Placement).StartTime); + //var lastEndShift = new DateTime(date, customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MaxBy(x => x.Placement).EndTime); + //if (lastEndShift > firstStartShift) + // firstStartShift = firstStartShift.AddDays(1); + //var offSet = (firstStartShift - lastEndShift).Divide(2); + //var employeeOffSet = TimeOnly.FromDateTime(lastEndShift.Add(offSet)); - #region KebabMahdiAbsentsCaclculation + overtimeTimeSpan = CalculateOvertimeSpanWithSumSpan(sumSpans, mandatoryDays, shiftSettings); - var rollCallDays = groupedRollCall.Count > mandatoryDays ? mandatoryDays : groupedRollCall.Count; + } + else + { + var irregularShifts = customizeWorkshopEmployeeSettings.IrregularShift.WorkshopIrregularShifts; + overtimeTimeSpan = CalculateRotatingOvertime(customizeWorkshopEmployeeSettings.CustomizeRotatingShifts, + groupedRollCall, mandatoryDays, sumSpans); + } - absenceDays = mandatoryDays - rollCallDays; - absenceDays = absenceDays - leavePermittedDays < 0 ? 0 : absenceDays - leavePermittedDays; - absentsDeductionAmount = absenceDays * dailyWage; + overtimePayAmount = + CalculateOvertimePay(overtimeTimeSpan, customizeWorkshopEmployeeSettings.OverTimePay, dailyWage); + if (overtimePayAmount >= absentsDeductionAmount) + { + overtimePayAmount = overtimePayAmount - absentsDeductionAmount; + absentsDeductionAmount = 0; + } + else + { + absentsDeductionAmount = absentsDeductionAmount - overtimePayAmount; + overtimePayAmount = 0; + } - #endregion + overtimePayAmount = 0; - var createReward = absenceDays; - if (monthOfCheckout == 1 && yearOfCheckout == 1404) - { - bool hasAbsents = _context.CustomizeCheckouts.Any(x => - x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.MonthInt == 12 && x.YearInt == 1403 && - x.FineAbsenceDeduction > 0); - bool absentInEid = !_context.RollCalls.Any(x => - x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.ShiftDate == new DateTime(2025, 3, 20)); - if (hasAbsents && absentInEid) - { - CreateReward(employeeId, workshopId, dailyWage, monthOfCheckout, yearOfCheckout, - new DateTime(2025, 3, 21), RewardType.Eid, "بابت تعطیلی آخر سال"); - } - if (absentDates.Any(x => x == new DateTime(2025, 4, 2) && createReward > 0)) - { - CreateReward(employeeId, workshopId, dailyWage, monthOfCheckout, yearOfCheckout, - new DateTime(2025, 4, 2), RewardType.SinzdahBedar, "بابت تعطیلی روز 13 فروردین"); - createReward--; - } - if (absentDates.Any(x => x == new DateTime(2025, 4, 3) && createReward > 0)) - { - CreateReward(employeeId, workshopId, dailyWage, monthOfCheckout, yearOfCheckout, - new DateTime(2025, 4, 3), RewardType.ChahardahFarvardin, "بابت تعطیلی روز 14 فروردین"); - createReward--; - } - } - #region FridayPay + #endregion - double fridayPayAmount = 0; + #region KebabMahdiAbsentsCaclculation - fridayPayAmount = FridayPayCalculation(customizeWorkshopEmployeeSettings, rollCallResult, dailyWage, - shiftSettings, overtimePayAmount); + var rollCallDays = groupedRollCall.Count > mandatoryDays ? mandatoryDays : groupedRollCall.Count; + absenceDays = mandatoryDays - rollCallDays; + absenceDays = absenceDays - leavePermittedDays < 0 ? 0 : absenceDays - leavePermittedDays; + absentsDeductionAmount = absenceDays * dailyWage; - #endregion - //حق تاهل + #endregion - #region MaritalAllownace + var createReward = absenceDays; + if (monthOfCheckout == 1 && yearOfCheckout == 1404) + { + bool hasAbsents = _context.CustomizeCheckouts.Any(x => + x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.MonthInt == 12 && x.YearInt == 1403 && + x.FineAbsenceDeduction > 0); + bool absentInEid = !_context.RollCalls.Any(x => + x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.ShiftDate == new DateTime(2025, 3, 20)); + if (hasAbsents && absentInEid) + { + CreateReward(employeeId, workshopId, dailyWage, monthOfCheckout, yearOfCheckout, + new DateTime(2025, 3, 21), RewardType.Eid, "بابت تعطیلی آخر سال"); + } - double maritalAllowancePay = 0; - if (employee.MaritalStatus == "متاهل") - { - switch (customizeWorkshopEmployeeSettings.MarriedAllowance.MarriedAllowanceType) - { - case MarriedAllowanceType.Money: - { - maritalAllowancePay = customizeWorkshopEmployeeSettings.MarriedAllowance.Value; - break; - } - //case MarriedAllowanceType.PercentageFromSalary: + if (absentDates.Any(x => x == new DateTime(2025, 4, 2) && createReward > 0)) + { + CreateReward(employeeId, workshopId, dailyWage, monthOfCheckout, yearOfCheckout, + new DateTime(2025, 4, 2), RewardType.SinzdahBedar, "بابت تعطیلی روز 13 فروردین"); + createReward--; + } - // { - // double multiplier = customizeWorkshopEmployeeSettings.MarriedAllowance.Value / 100; - // maritalAllowance = dailyWage * multiplier; - // break; - // } - } - } + if (absentDates.Any(x => x == new DateTime(2025, 4, 3) && createReward > 0)) + { + CreateReward(employeeId, workshopId, dailyWage, monthOfCheckout, yearOfCheckout, + new DateTime(2025, 4, 3), RewardType.ChahardahFarvardin, "بابت تعطیلی روز 14 فروردین"); + createReward--; + } + } - #endregion - //شب کاری + #region FridayPay - #region NightWorkPay + double fridayPayAmount = 0; - double nightworkPayAmount = 0; - List rotatingResultList = RotatingShiftCheck(groupedRollCall); + fridayPayAmount = FridayPayCalculation(customizeWorkshopEmployeeSettings, rollCallResult, dailyWage, + shiftSettings, overtimePayAmount); - // شبکاری - TimeSpan nightWorks = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks)); - if (nightWorks > new TimeSpan()) - { - switch (customizeWorkshopEmployeeSettings.NightWorkPay.NightWorkingType) - { - case NightWorkType.MoneyPerHour: - { - var baseAmount = customizeWorkshopEmployeeSettings.NightWorkPay.Value; - var nightWorkMinutes = (int)(nightWorks).TotalMinutes; - nightworkPayAmount += nightWorkMinutes * (baseAmount / 60); - break; - } - case NightWorkType.PercentageFromSalary: - { - double multiplier = customizeWorkshopEmployeeSettings.NightWorkPay.Value / 100; - var nightWorkMinutes = (int)(nightWorks).TotalMinutes; - nightworkPayAmount += ((dailyWage * multiplier) / 60) * nightWorkMinutes; - break; - } - - - } - } - - #endregion - - //سنوات - - #region BaseYearsPay - - double baseYearsPayAmount = CalculateYearsPayAmount(employeeId, workshopId, monthySalary, contractStart, - contractEnd - , customizeWorkshopEmployeeSettings.BaseYearsPay, customizeWorkshopSettings.BaseYearsPayInEndOfYear, - customizeWorkshopSettings.MaxMonthDays); - - #endregion - - //حق اولاد - - #region FamilyAllowancePay - - double familyAllowancePay = 0; - switch (customizeWorkshopEmployeeSettings.FamilyAllowance.FamilyAllowanceType) - { - case FamilyAllowanceType.Money: - { - double baseAmount = customizeWorkshopEmployeeSettings.FamilyAllowance.Value; - familyAllowancePay = CalculateFamilyAllowancePayAmount(employeeId, baseAmount, contractEnd); - break; - } + #endregion - case FamilyAllowanceType.Percentage: - { - double multiplier = customizeWorkshopEmployeeSettings.FamilyAllowance.Value / 100; - familyAllowancePay = - CalculateFamilyAllowancePayAmount(employeeId, multiplier * monthySalary, contractEnd); - break; - } - } - - #endregion - - #region Reward - - var rewardViewModels = RewardForCheckout(employeeId, workshopId, checkoutEnd, checkoutStart); - - double rewardPay = rewardViewModels.Sum(x => x.AmountDouble); - - #endregion - - #region LeavePay - - - - #endregion - - #region BonusesPay - - double bonusesPayAmount = 0; - - - if (customizeWorkshopEmployeeSettings.BonusesPay.BonusesPayType != BonusesType.None) - { - switch (customizeWorkshopEmployeeSettings.BonusesPay.BonusesPayType) - { - case BonusesType.OneTimeOfSalary: - bonusesPayAmount = monthySalary; - break; - case BonusesType.TwoTimeOfSalary: - bonusesPayAmount = monthySalary * 2; - break; - case BonusesType.Money: - bonusesPayAmount = customizeWorkshopEmployeeSettings.BonusesPay.Value; - break; - case BonusesType.PercentageOfSalary: - bonusesPayAmount = (monthySalary * customizeWorkshopEmployeeSettings.BonusesPay.Value) / 100; - break; - } - - double bonusesPerMonth = bonusesPayAmount / 12; + //حق تاهل - if (customizeWorkshopEmployeeSettings.BonusesPay.PaymentType == BonusesPaymentType.YearlyPay) - { - var contractEndFarsi = Tools.FindeEndOfMonth(contractEnd.ToFarsi()); - if (monthOfCheckout == 12 && (contractEndFarsi.EndsWith("29")) || contractEndFarsi.EndsWith("30")) - { - } - else if (customizeWorkshopSettings.BonusesPaysInEndOfMonth == - BonusesPaysInEndOfYear.WhenEverEmployeeLeftWork && leftWork.HasLeft) - { - TimeSpan bonusDuration; - DateTime startOfYear = new PersianCalendar().ToDateTime(yearOfCheckout, 1, 1, 0, 0, 0, 0); - if (startOfYear < leftWork.StartWorkDateGr) - bonusDuration = leftWorkDurationTimeSpan; - else - bonusDuration = leftWork.LeftWorkDateGr - startOfYear; - //ToDo: Check if should be absolute 365! - bonusesPayAmount = (bonusesPayAmount / 365) * bonusDuration.TotalDays; - } - else - { - bonusesPayAmount = 0; - } - } - else if (customizeWorkshopEmployeeSettings.BonusesPay.PaymentType == BonusesPaymentType.MonthlyPay) - { + #region MaritalAllownace + double maritalAllowancePay = 0; + if (employee.MaritalStatus == "متاهل") + { + switch (customizeWorkshopEmployeeSettings.MarriedAllowance.MarriedAllowanceType) + { + case MarriedAllowanceType.Money: + { + maritalAllowancePay = customizeWorkshopEmployeeSettings.MarriedAllowance.Value; + break; + } + //case MarriedAllowanceType.PercentageFromSalary: - if (customizeWorkshopSettings.BonusesPaysInEndOfMonth == - BonusesPaysInEndOfYear.WhenEverEmployeeLeftWork && leftWork.HasLeft && contractDays < monthDays) - bonusesPayAmount = (bonusesPerMonth / contractEnd.CountPersianMonthDays()) * - contractDuration.TotalDays + 1; - - - bonusesPayAmount = bonusesPerMonth; - } - else - { - throw new InvalidDataException(); - } - } - - #endregion - - - #endregion - - #region LateToWork & EarlyExit - - //var lateToWorkEarlyExit = LateToWorkEarlyExit(groupedRollCall, shiftSettings, leaveList); - //foreach (var i in lateToWorkEarlyExit) - //{ - // Console.WriteLine(" start : " + i.StartSpan + " end : " + i.EndSpan + " spaning : " + i.Spanning + " Type : " + i.TypeOfSapn); - //} - - //var lateToWoks = lateToWorkEarlyExit.Where(x => x.TypeOfSapn == "LateToWork"); - //var earlyExits = lateToWorkEarlyExit.Where(x => x.TypeOfSapn == "EarlyExist"); - - //var lateToWork = new TimeSpan(lateToWoks.Sum(x => x.Spanning.Ticks)); - //var earlyExist = new TimeSpan(earlyExits.Sum(x => x.Spanning.Ticks)); - //var totalSpaning = new TimeSpan(lateToWorkEarlyExit.Sum(x => x.Spanning.Ticks)); - //Console.ForegroundColor = ConsoleColor.Yellow; - //Console.WriteLine(" LateToWork H : " + (int)lateToWork.TotalHours + " M : " + (int)(lateToWork.TotalMinutes % 60)); - //Console.WriteLine(" EarlyExist H : " + (int)earlyExist.TotalHours + " M : " + (int)(earlyExist.TotalMinutes % 60)); - //Console.WriteLine(" TotalSpaning H : " + (int)totalSpaning.TotalHours + " M : " + (int)(totalSpaning.TotalMinutes % 60)); - //Console.ResetColor(); - - //double earlyExitDeduction = 0; - //double lateToWorkDeduction = 0; - - //////محاسبه مزد روزانه به ازای هر دقیقه - ////double dailyWagePerMinute = - //// (customizeWorkshopEmployeeSettings.Salary / monthDays) / sumOfEmployeeShiftSpan.TotalMinutes; - - //if (customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitType != EarlyExitType.None && earlyExist > new TimeSpan()) - //{ - // earlyExitDeduction = customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitType switch - // { - // EarlyExitType.Default => earlyExist.TotalMinutes * minuteWage, - - // EarlyExitType.MoneyPerMinute => earlyExist.TotalMinutes * customizeWorkshopEmployeeSettings.EarlyExit.Value, - - // _ => 0 - // }; - - //} - - - //if (customizeWorkshopEmployeeSettings.LateToWork.LateToWorkType != LateToWorkType.None && lateToWork > new TimeSpan()) - //{ - // lateToWorkDeduction = customizeWorkshopEmployeeSettings.LateToWork.LateToWorkType switch - // { - // LateToWorkType.Default => lateToWork.TotalMinutes * minuteWage, - - // LateToWorkType.MoneyPerMinute => lateToWork.TotalMinutes * customizeWorkshopEmployeeSettings.LateToWork.Value, - - // _ => 0 - // }; - - //} - - //if (customizeWorkshopEmployeeSettings.LateToWork.LateToWorkTimeFines.Any()) - //{ - // lateToWorkDeduction += - // (from lateToWorkTimeFine in customizeWorkshopEmployeeSettings.LateToWork.LateToWorkTimeFines - // let stepFine = lateToWoks.Count(x => x.Spanning.TotalMinutes >= Convert.ToInt32(lateToWorkTimeFine.Minute)) - // select stepFine * lateToWorkTimeFine.FineMoney).Sum(); - //} - //if (customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitTimeFines.Any()) - //{ - // earlyExitDeduction += - // (from earlyExitFine in customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitTimeFines - // let stepFine = earlyExits.Count(x => x.Spanning.TotalMinutes >= Convert.ToInt32(earlyExitFine.Minute)) - // select stepFine * earlyExitFine.FineMoney).Sum(); - //} - - double lateToWorkDeduction = 0; - TimeSpan totalLateToWorkSpan = TimeSpan.Zero; - - - - if (customizeWorkshopEmployeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating) - { - foreach (var rollCall in groupedRollCall) - { - - var rollCallShift = rollCall.TotalShiftDurationTimeSpan; - var dayMinuteWage = rollCallShift.TotalMinutes == 0 ? 0 : (dailyWage / rollCallShift.TotalMinutes); - (DateTime start, DateTime end)? firstShift = null; - foreach (var rc in rollCall.ShiftList.OrderBy(x => x.Start)) - { - double minutes = 0; - var shift = FindRotatingShift(rc.Start, rc.End, customizeWorkshopEmployeeSettings.CustomizeRotatingShifts); - if (firstShift == null) - { - firstShift = shift; - } - - - if (shift.start == firstShift.Value.start && shift.end == firstShift.Value.end) - { - minutes += rc.LateEntryDuration.TotalMinutes; - totalLateToWorkSpan = totalLateToWorkSpan.Add(rc.LateEntryDuration); - } - lateToWorkDeduction += dayMinuteWage * minutes; - } - - } - - - } - else - { - foreach (var rollCall in groupedRollCall) - { - - var rollCallShift = rollCall.TotalShiftDurationTimeSpan; - var dayMinuteWage = rollCallShift.TotalMinutes == 0 ? 0 : (dailyWage / rollCallShift.TotalMinutes); - var minutes = rollCall.TotalLateEntryDuration.TotalMinutes; - lateToWorkDeduction += dayMinuteWage * minutes; - totalLateToWorkSpan = totalLateToWorkSpan.Add(rollCall.TotalLateEntryDuration); - - } - } - - if (mandatoryDays == 31) - { - mandatoryDays = 30; - } - - - #endregion - - return new CustomizeCheckoutMandatoryViewModel - { - InsuranceDeduction = Math.Truncate(insuranceDeductionAmount), - FridayPay = Math.Truncate(fridayPayAmount), - OverTimePay = Math.Truncate(overtimePayAmount), - BaseYearsPay = Math.Truncate(baseYearsPayAmount), - NightWorkPay = Math.Truncate(nightworkPayAmount), - MarriedAllowance = Math.Truncate(maritalAllowancePay), - FamilyAllowance = Math.Truncate(familyAllowancePay), - LeavePay = Math.Truncate(leavePayAmount), - FineAbsenceDeduction = Math.Truncate(absentsDeductionAmount), - BonusesPay = Math.Truncate(bonusesPayAmount), - ContractEndFa = contractEnd.ToFarsi(), - ContractStartFa = contractStart.ToFarsi(), - EmployeeName = employee.FullName, - InstallmentDeduction = Math.Truncate(loanDeduction), - SalaryAidDeduction = Math.Truncate(salaryAidDeduction), - FineDeduction = Math.Truncate(fineDeduction), - RewardPay = Math.Truncate(rewardPay), - Month = monthOfCheckout, - Year = yearOfCheckout, - LateToWorkDeduction = Math.Truncate(lateToWorkDeduction), - EarlyExitDeduction = 0, - ShiftPay = 0, - TaxDeduction = 0, - EmployeeId = employeeId, - SumOfWorkingDays = totalDays.ToString(), - ContractNo = contract?.ContractNo ?? "-", - MonthlySalary = dailyWage * mandatoryDays, - PersonnelCode = personnelCode, - FineViewModels = fineViewModels, - InstallmentViewModels = loanInstallments, - SalaryAidViewModels = salaryAidViewModel, - RewardViewModels = rewardViewModels, - LateToWorkValue = totalLateToWorkSpan, - SettingSalary = customizeWorkshopEmployeeSettings.Salary, - DailyWage = dailyWage, - ShiftStatus = customizeWorkshopEmployeeSettings.WorkshopShiftStatus, - IrregularShift = customizeWorkshopEmployeeSettings.IrregularShift, - CustomizeRotatingShifts = customizeWorkshopEmployeeSettings.CustomizeRotatingShifts, - EmployeeSettingsShifts = customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts - .Select(x => (CustomizeSifts)x).ToList(), - }; - } - - - private CustomizeCheckoutMandatoryViewModel CheckoutWithoutCalculationForKebabMahdi(long workshopId, long employeeId, DateTime contractStart, DateTime contractEnd) - { - var firstDayOfMonth = $"{(contractStart.ToFarsi())[..8]}/01".ToGeorgianDateTime(); - - CustomizeWorkshopEmployeeSettings customizeWorkshopEmployeeSettings = _context.CustomizeWorkshopEmployeeSettings.AsSplitQuery().FirstOrDefault(x => - x.WorkshopId == workshopId && x.EmployeeId == employeeId); - CustomizeWorkshopSettings customizeWorkshopSettings = - _context.CustomizeWorkshopSettings.FirstOrDefault(x => x.WorkshopId == workshopId); - //ToDo handel exception if is null - var monthySalary = customizeWorkshopEmployeeSettings?.Salary ?? 0; - var monthDays = customizeWorkshopSettings.MaxMonthDays == MaxMonthDays.ThirtyDaysForAllMonth - ? 30 - : firstDayOfMonth.CountMonthDays(); - double dailyWage = 0; - dailyWage = monthySalary / monthDays; - - var totalDays = (int)(contractEnd - contractStart).TotalDays + 1; - var mandatoryDays = totalDays; - - - #region SalaryAidDeduction - - var salaryAidViewModel = SalaryAidsForCheckout(employeeId, workshopId, contractEnd, contractEnd); - double salaryAidDeduction = salaryAidViewModel.Sum(x => x.AmountDouble); - - #endregion - - #region Loan - - var loanInstallments = LoanInstallmentForCheckout(employeeId, workshopId, contractStart, contractEnd); - - double loanDeduction = loanInstallments.Sum(x => x.AmountDouble); - - #endregion - - #region Fine - - var fineViewModels = FinesForCheckout(employeeId, workshopId, contractStart, contractEnd); - double fineDeduction = fineViewModels.Sum(x => x.Amount.MoneyToDouble()); - - #endregion - #region Reward - - var rewardViewModels = RewardForCheckout(employeeId, workshopId, contractStart, contractEnd); - - double rewardPay = rewardViewModels.Sum(x => x.AmountDouble); - #endregion - - - if (mandatoryDays == 31) - { - mandatoryDays = 30; - } - return new CustomizeCheckoutMandatoryViewModel() - { - MonthlySalary = dailyWage * mandatoryDays, - RewardPay = rewardPay, - RewardViewModels = rewardViewModels, - SalaryAidDeduction = salaryAidDeduction, - SalaryAidViewModels = salaryAidViewModel, - InstallmentDeduction = loanDeduction, - InstallmentViewModels = loanInstallments, - FineDeduction = fineDeduction, - FineViewModels = fineViewModels - }; - } - - - private List RewardForCheckout(long employeeId, long workshopId, DateTime checkoutEnd, DateTime checkoutStart) - { - return _context.Rewards.Where(x => - x.WorkshopId == workshopId && x.EmployeeId == employeeId && x.GrantDate <= checkoutEnd && - x.GrantDate >= checkoutStart).Select(x => new RewardViewModel - { - Title = x.Title, - Amount = x.Amount.ToMoney(), - AmountDouble = x.Amount, - Description = x.Description, - GrantDateGr = x.GrantDate, - GrantDateFa = x.GrantDate.ToFarsi(), - IsActive = x.IsActive, - Id = x.id - }).ToList(); - } - - private List FinesForCheckout(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd) - { - return _context.Fines.Where(x => - x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.FineDate >= contractStart && - x.FineDate <= contractEnd && x.IsActive == IsActive.True).Select(x => new FineViewModel() - { - IsActive = x.IsActive, - Amount = x.Amount.ToMoney(), - FineDate = x.FineDate.ToFarsi(), - Id = x.id, - Title = x.Title, - EmployeeId = x.EmployeeId, - CreationDate = x.CreationDate.ToFarsi() - }).ToList(); - } + // { + // double multiplier = customizeWorkshopEmployeeSettings.MarriedAllowance.Value / 100; + // maritalAllowance = dailyWage * multiplier; + // break; + // } + } + } + + #endregion + + //شب کاری + + #region NightWorkPay + + double nightworkPayAmount = 0; + List rotatingResultList = RotatingShiftCheck(groupedRollCall); + + // شبکاری + TimeSpan nightWorks = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks)); + + if (nightWorks > new TimeSpan()) + { + switch (customizeWorkshopEmployeeSettings.NightWorkPay.NightWorkingType) + { + case NightWorkType.MoneyPerHour: + { + var baseAmount = customizeWorkshopEmployeeSettings.NightWorkPay.Value; + var nightWorkMinutes = (int)(nightWorks).TotalMinutes; + nightworkPayAmount += nightWorkMinutes * (baseAmount / 60); + break; + } + case NightWorkType.PercentageFromSalary: + { + double multiplier = customizeWorkshopEmployeeSettings.NightWorkPay.Value / 100; + var nightWorkMinutes = (int)(nightWorks).TotalMinutes; + nightworkPayAmount += ((dailyWage * multiplier) / 60) * nightWorkMinutes; + break; + } + + + } + } + + #endregion + + //سنوات + + #region BaseYearsPay + + double baseYearsPayAmount = CalculateYearsPayAmount(employeeId, workshopId, monthySalary, contractStart, + contractEnd + , customizeWorkshopEmployeeSettings.BaseYearsPay, customizeWorkshopSettings.BaseYearsPayInEndOfYear, + customizeWorkshopSettings.MaxMonthDays); + + #endregion + + //حق اولاد + + #region FamilyAllowancePay + + double familyAllowancePay = 0; + switch (customizeWorkshopEmployeeSettings.FamilyAllowance.FamilyAllowanceType) + { + case FamilyAllowanceType.Money: + { + double baseAmount = customizeWorkshopEmployeeSettings.FamilyAllowance.Value; + familyAllowancePay = CalculateFamilyAllowancePayAmount(employeeId, baseAmount, contractEnd); + break; + } + + case FamilyAllowanceType.Percentage: + { + double multiplier = customizeWorkshopEmployeeSettings.FamilyAllowance.Value / 100; + familyAllowancePay = + CalculateFamilyAllowancePayAmount(employeeId, multiplier * monthySalary, contractEnd); + break; + } + } + + #endregion + + #region Reward + + var rewardViewModels = RewardForCheckout(employeeId, workshopId, checkoutEnd, checkoutStart); + + double rewardPay = rewardViewModels.Sum(x => x.AmountDouble); + + #endregion + + #region LeavePay + + + + #endregion + + #region BonusesPay + + double bonusesPayAmount = 0; + + + if (customizeWorkshopEmployeeSettings.BonusesPay.BonusesPayType != BonusesType.None) + { + switch (customizeWorkshopEmployeeSettings.BonusesPay.BonusesPayType) + { + case BonusesType.OneTimeOfSalary: + bonusesPayAmount = monthySalary; + break; + case BonusesType.TwoTimeOfSalary: + bonusesPayAmount = monthySalary * 2; + break; + case BonusesType.Money: + bonusesPayAmount = customizeWorkshopEmployeeSettings.BonusesPay.Value; + break; + case BonusesType.PercentageOfSalary: + bonusesPayAmount = (monthySalary * customizeWorkshopEmployeeSettings.BonusesPay.Value) / 100; + break; + } + + double bonusesPerMonth = bonusesPayAmount / 12; + + if (customizeWorkshopEmployeeSettings.BonusesPay.PaymentType == BonusesPaymentType.YearlyPay) + { + var contractEndFarsi = Tools.FindeEndOfMonth(contractEnd.ToFarsi()); + if (monthOfCheckout == 12 && (contractEndFarsi.EndsWith("29")) || contractEndFarsi.EndsWith("30")) + { + } + else if (customizeWorkshopSettings.BonusesPaysInEndOfMonth == + BonusesPaysInEndOfYear.WhenEverEmployeeLeftWork && leftWork.HasLeft) + { + TimeSpan bonusDuration; + DateTime startOfYear = new PersianCalendar().ToDateTime(yearOfCheckout, 1, 1, 0, 0, 0, 0); + if (startOfYear < leftWork.StartWorkDateGr) + bonusDuration = leftWorkDurationTimeSpan; + else + bonusDuration = leftWork.LeftWorkDateGr - startOfYear; + //ToDo: Check if should be absolute 365! + bonusesPayAmount = (bonusesPayAmount / 365) * bonusDuration.TotalDays; + } + else + { + bonusesPayAmount = 0; + } + } + else if (customizeWorkshopEmployeeSettings.BonusesPay.PaymentType == BonusesPaymentType.MonthlyPay) + { + + + if (customizeWorkshopSettings.BonusesPaysInEndOfMonth == + BonusesPaysInEndOfYear.WhenEverEmployeeLeftWork && leftWork.HasLeft && contractDays < monthDays) + bonusesPayAmount = (bonusesPerMonth / contractEnd.CountPersianMonthDays()) * + contractDuration.TotalDays + 1; + + + bonusesPayAmount = bonusesPerMonth; + } + else + { + throw new InvalidDataException(); + } + } + + #endregion + + + #endregion + + #region LateToWork & EarlyExit + + //var lateToWorkEarlyExit = LateToWorkEarlyExit(groupedRollCall, shiftSettings, leaveList); + //foreach (var i in lateToWorkEarlyExit) + //{ + // Console.WriteLine(" start : " + i.StartSpan + " end : " + i.EndSpan + " spaning : " + i.Spanning + " Type : " + i.TypeOfSapn); + //} + + //var lateToWoks = lateToWorkEarlyExit.Where(x => x.TypeOfSapn == "LateToWork"); + //var earlyExits = lateToWorkEarlyExit.Where(x => x.TypeOfSapn == "EarlyExist"); + + //var lateToWork = new TimeSpan(lateToWoks.Sum(x => x.Spanning.Ticks)); + //var earlyExist = new TimeSpan(earlyExits.Sum(x => x.Spanning.Ticks)); + //var totalSpaning = new TimeSpan(lateToWorkEarlyExit.Sum(x => x.Spanning.Ticks)); + //Console.ForegroundColor = ConsoleColor.Yellow; + //Console.WriteLine(" LateToWork H : " + (int)lateToWork.TotalHours + " M : " + (int)(lateToWork.TotalMinutes % 60)); + //Console.WriteLine(" EarlyExist H : " + (int)earlyExist.TotalHours + " M : " + (int)(earlyExist.TotalMinutes % 60)); + //Console.WriteLine(" TotalSpaning H : " + (int)totalSpaning.TotalHours + " M : " + (int)(totalSpaning.TotalMinutes % 60)); + //Console.ResetColor(); + + //double earlyExitDeduction = 0; + //double lateToWorkDeduction = 0; + + //////محاسبه مزد روزانه به ازای هر دقیقه + ////double dailyWagePerMinute = + //// (customizeWorkshopEmployeeSettings.Salary / monthDays) / sumOfEmployeeShiftSpan.TotalMinutes; + + //if (customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitType != EarlyExitType.None && earlyExist > new TimeSpan()) + //{ + // earlyExitDeduction = customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitType switch + // { + // EarlyExitType.Default => earlyExist.TotalMinutes * minuteWage, + + // EarlyExitType.MoneyPerMinute => earlyExist.TotalMinutes * customizeWorkshopEmployeeSettings.EarlyExit.Value, + + // _ => 0 + // }; + + //} + + + //if (customizeWorkshopEmployeeSettings.LateToWork.LateToWorkType != LateToWorkType.None && lateToWork > new TimeSpan()) + //{ + // lateToWorkDeduction = customizeWorkshopEmployeeSettings.LateToWork.LateToWorkType switch + // { + // LateToWorkType.Default => lateToWork.TotalMinutes * minuteWage, + + // LateToWorkType.MoneyPerMinute => lateToWork.TotalMinutes * customizeWorkshopEmployeeSettings.LateToWork.Value, + + // _ => 0 + // }; + + //} + + //if (customizeWorkshopEmployeeSettings.LateToWork.LateToWorkTimeFines.Any()) + //{ + // lateToWorkDeduction += + // (from lateToWorkTimeFine in customizeWorkshopEmployeeSettings.LateToWork.LateToWorkTimeFines + // let stepFine = lateToWoks.Count(x => x.Spanning.TotalMinutes >= Convert.ToInt32(lateToWorkTimeFine.Minute)) + // select stepFine * lateToWorkTimeFine.FineMoney).Sum(); + //} + //if (customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitTimeFines.Any()) + //{ + // earlyExitDeduction += + // (from earlyExitFine in customizeWorkshopEmployeeSettings.EarlyExit.EarlyExitTimeFines + // let stepFine = earlyExits.Count(x => x.Spanning.TotalMinutes >= Convert.ToInt32(earlyExitFine.Minute)) + // select stepFine * earlyExitFine.FineMoney).Sum(); + //} + + double lateToWorkDeduction = 0; + TimeSpan totalLateToWorkSpan = TimeSpan.Zero; + + + + if (customizeWorkshopEmployeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating) + { + foreach (var rollCall in groupedRollCall) + { + + var rollCallShift = rollCall.TotalShiftDurationTimeSpan; + var dayMinuteWage = rollCallShift.TotalMinutes == 0 ? 0 : (dailyWage / rollCallShift.TotalMinutes); + (DateTime start, DateTime end)? firstShift = null; + foreach (var rc in rollCall.ShiftList.OrderBy(x => x.Start)) + { + double minutes = 0; + var shift = FindRotatingShift(rc.Start, rc.End, customizeWorkshopEmployeeSettings.CustomizeRotatingShifts); + if (firstShift == null) + { + firstShift = shift; + } + + + if (shift.start == firstShift.Value.start && shift.end == firstShift.Value.end) + { + minutes += rc.LateEntryDuration.TotalMinutes; + totalLateToWorkSpan = totalLateToWorkSpan.Add(rc.LateEntryDuration); + } + lateToWorkDeduction += dayMinuteWage * minutes; + } + + } + + + } + else + { + foreach (var rollCall in groupedRollCall) + { + + var rollCallShift = rollCall.TotalShiftDurationTimeSpan; + var dayMinuteWage = rollCallShift.TotalMinutes == 0 ? 0 : (dailyWage / rollCallShift.TotalMinutes); + var minutes = rollCall.TotalLateEntryDuration.TotalMinutes; + lateToWorkDeduction += dayMinuteWage * minutes; + totalLateToWorkSpan = totalLateToWorkSpan.Add(rollCall.TotalLateEntryDuration); + + } + } + + if (mandatoryDays == 31) + { + mandatoryDays = 30; + } + + + #endregion + + return new CustomizeCheckoutMandatoryViewModel + { + InsuranceDeduction = Math.Truncate(insuranceDeductionAmount), + FridayPay = Math.Truncate(fridayPayAmount), + OverTimePay = Math.Truncate(overtimePayAmount), + BaseYearsPay = Math.Truncate(baseYearsPayAmount), + NightWorkPay = Math.Truncate(nightworkPayAmount), + MarriedAllowance = Math.Truncate(maritalAllowancePay), + FamilyAllowance = Math.Truncate(familyAllowancePay), + LeavePay = Math.Truncate(leavePayAmount), + FineAbsenceDeduction = Math.Truncate(absentsDeductionAmount), + BonusesPay = Math.Truncate(bonusesPayAmount), + ContractEndFa = contractEnd.ToFarsi(), + ContractStartFa = contractStart.ToFarsi(), + EmployeeName = employee.FullName, + InstallmentDeduction = Math.Truncate(loanDeduction), + SalaryAidDeduction = Math.Truncate(salaryAidDeduction), + FineDeduction = Math.Truncate(fineDeduction), + RewardPay = Math.Truncate(rewardPay), + Month = monthOfCheckout, + Year = yearOfCheckout, + LateToWorkDeduction = Math.Truncate(lateToWorkDeduction), + EarlyExitDeduction = 0, + ShiftPay = 0, + TaxDeduction = 0, + EmployeeId = employeeId, + SumOfWorkingDays = totalDays.ToString(), + ContractNo = contract?.ContractNo ?? "-", + MonthlySalary = dailyWage * mandatoryDays, + PersonnelCode = personnelCode, + FineViewModels = fineViewModels, + InstallmentViewModels = loanInstallments, + SalaryAidViewModels = salaryAidViewModel, + RewardViewModels = rewardViewModels, + LateToWorkValue = totalLateToWorkSpan, + SettingSalary = customizeWorkshopEmployeeSettings.Salary, + DailyWage = dailyWage, + ShiftStatus = customizeWorkshopEmployeeSettings.WorkshopShiftStatus, + IrregularShift = customizeWorkshopEmployeeSettings.IrregularShift, + CustomizeRotatingShifts = customizeWorkshopEmployeeSettings.CustomizeRotatingShifts, + EmployeeSettingsShifts = customizeWorkshopEmployeeSettings.CustomizeWorkshopEmployeeSettingsShifts + .Select(x => (CustomizeSifts)x).ToList(), + }; + } + + private CustomizeCheckoutMandatoryViewModel CheckoutWithoutCalculationForKebabMahdi(long workshopId, long employeeId, DateTime contractStart, DateTime contractEnd) + { + var firstDayOfMonth = $"{(contractStart.ToFarsi())[..8]}/01".ToGeorgianDateTime(); + + CustomizeWorkshopEmployeeSettings customizeWorkshopEmployeeSettings; + CustomizeWorkshopSettings customizeWorkshopSettings; + + var endFarvarding = new DateTime(2025, 4, 20); + if (contractStart > endFarvarding) + { + customizeWorkshopEmployeeSettings = _context.CustomizeWorkshopEmployeeSettings + .AsSplitQuery().AsNoTracking().FirstOrDefault(x => + x.WorkshopId == workshopId && x.EmployeeId == employeeId); + + customizeWorkshopSettings = _context.CustomizeWorkshopSettings.AsNoTracking().FirstOrDefault(x => x.WorkshopId == workshopId); + } + + else + { + customizeWorkshopEmployeeSettings = _testDbContext.CustomizeWorkshopEmployeeSettings + .AsSplitQuery().AsNoTracking().FirstOrDefault(x => + x.WorkshopId == workshopId && x.EmployeeId == employeeId); + + customizeWorkshopSettings = _testDbContext.CustomizeWorkshopSettings.AsNoTracking().FirstOrDefault(x => x.WorkshopId == workshopId); + + } + //ToDo handel exception if is null + var monthySalary = customizeWorkshopEmployeeSettings?.Salary ?? 0; + var monthDays = customizeWorkshopSettings.MaxMonthDays == MaxMonthDays.ThirtyDaysForAllMonth + ? 30 + : firstDayOfMonth.CountMonthDays(); + double dailyWage = 0; + dailyWage = monthySalary / monthDays; + + var totalDays = (int)(contractEnd - contractStart).TotalDays + 1; + var mandatoryDays = totalDays; + + + #region SalaryAidDeduction + + var salaryAidViewModel = SalaryAidsForCheckout(employeeId, workshopId, contractStart, contractEnd); + double salaryAidDeduction = salaryAidViewModel.Sum(x => x.AmountDouble); + + #endregion + + #region Loan + + var loanInstallments = LoanInstallmentForCheckout(employeeId, workshopId, contractStart, contractEnd); + + double loanDeduction = loanInstallments.Sum(x => x.AmountDouble); + + #endregion + + #region Fine + + var fineViewModels = FinesForCheckout(employeeId, workshopId, contractStart, contractEnd); + double fineDeduction = fineViewModels.Sum(x => x.Amount.MoneyToDouble()); + + #endregion + #region Reward + + var rewardViewModels = RewardForCheckout(employeeId, workshopId, contractEnd, contractStart); + + double rewardPay = rewardViewModels.Sum(x => x.AmountDouble); + #endregion + + + if (mandatoryDays == 31) + { + mandatoryDays = 30; + } + return new CustomizeCheckoutMandatoryViewModel() + { + MonthlySalary = dailyWage * mandatoryDays, + RewardPay = rewardPay, + RewardViewModels = rewardViewModels, + SalaryAidDeduction = salaryAidDeduction, + SalaryAidViewModels = salaryAidViewModel, + InstallmentDeduction = loanDeduction, + InstallmentViewModels = loanInstallments, + FineDeduction = fineDeduction, + FineViewModels = fineViewModels + }; + } + + + private List RewardForCheckout(long employeeId, long workshopId, DateTime checkoutEnd, DateTime checkoutStart) + { + return _context.Rewards.Where(x => + x.WorkshopId == workshopId && x.EmployeeId == employeeId && x.GrantDate <= checkoutEnd && + x.GrantDate >= checkoutStart).Select(x => new RewardViewModel + { + Title = x.Title, + Amount = x.Amount.ToMoney(), + AmountDouble = x.Amount, + Description = x.Description, + GrantDateGr = x.GrantDate, + GrantDateFa = x.GrantDate.ToFarsi(), + IsActive = x.IsActive, + Id = x.id + }).ToList(); + } + + private List FinesForCheckout(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd) + { + return _context.Fines.Where(x => + x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.FineDate >= contractStart && + x.FineDate <= contractEnd && x.IsActive == IsActive.True).Select(x => new FineViewModel() + { + IsActive = x.IsActive, + Amount = x.Amount.ToMoney(), + FineDate = x.FineDate.ToFarsi(), + Id = x.id, + Title = x.Title, + EmployeeId = x.EmployeeId, + CreationDate = x.CreationDate.ToFarsi() + }).ToList(); + } public List LoanInstallmentForCheckout(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd) { @@ -3914,1015 +3964,1015 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll }).ToList(); } - private void CreateRewardForBirthDay(long employeeId, long workshopId, double amount, int month, int year, - DateTime contractStart) - { - var start = $"{year}/{month:00}/01".ToGeorgianDateTime(); - var end = $"{year}/{month:00}/01".FindeEndOfMonth().ToGeorgianDateTime(); - if (_context.Rewards.Any(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId - && x.GrantDate >= start && x.GrantDate <= end - && x.RewardType == RewardType.CreatedByCheckoutForBirthDay) == false) - { - var reward = new Reward(employeeId, workshopId, amount, "", 0, UserType.System, contractStart, "هدیه تولد", - RewardType.CreatedByCheckoutForBirthDay); - _context.Rewards.Add(reward); - _context.SaveChanges(); - } - } - - private void CreateReward(long employeeId, long workshopId, double amount, int month, int year, - DateTime contractStart, RewardType type, string title) - { - var start = $"{year}/{month:00}/01".ToGeorgianDateTime(); - var end = $"{year}/{month:00}/01".FindeEndOfMonth().ToGeorgianDateTime(); - if (_context.Rewards.Any(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId - && x.GrantDate >= start && x.GrantDate <= end - && x.RewardType == type) == false) - { - var reward = new Reward(employeeId, workshopId, amount, "", 0, UserType.System, contractStart, title, type); - _context.Rewards.Add(reward); - _context.SaveChanges(); - } - } - //private void CreateRewardForChahardah(long employeeId, long workshopId, double amount, int month, int year, - // DateTime contractStart) - //{ - // var start = $"{year}/{month:00}/01".ToGeorgianDateTime(); - // var end = $"{year}/{month:00}/01".FindeEndOfMonth().ToGeorgianDateTime(); - // if (_context.Rewards.Any(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId - // && x.GrantDate >= start && x.GrantDate <= end - // && x.RewardType == RewardType.ChahardahFarvardin) == false) - // { - // var reward = new Reward(employeeId, workshopId, amount, "", 0, contractStart, "بابت تعطیلی روز 14 فروردین", - // RewardType.ChahardahFarvardin); - // _context.Rewards.Add(reward); - // _context.SaveChanges(); - // } - //} - - - - - private TimeSpan CalculateIrregularOverTime(List rollCalls, TimeSpan employeeShiftSpan, WorkshopIrregularShifts irregularShifts, int mandatoryDays) - { - var sumOfRollCallTicks = rollCalls.Sum(x => (x.EndDate.Value - x.StartDate.Value).Ticks); - - var sumRollCall = new TimeSpan(sumOfRollCallTicks); - var sumOfShift = employeeShiftSpan * mandatoryDays; - - if (sumOfShift > sumRollCall) - return TimeSpan.Zero; - - return sumRollCall - sumOfShift; - } - - - - public static TimeSpan CalculateIrregularShiftSpans(int totalDays, IrregularShift irregularShift) - { - //مبنای تقسیم که بر اساس جمع مقدار ساعت استراحت و ساعت کاری بدست میاد - double baseDivideTime = 0; - - //مقدار ساعت کارکرد در هر شیفت - double workTime = 0; - switch (irregularShift.WorkshopIrregularShifts) - { - case WorkshopIrregularShifts.TwelveThirtySix: - baseDivideTime = 48; - workTime = 12; - break; - case WorkshopIrregularShifts.TwelveTwentyFour: - baseDivideTime = 36; - workTime = 12; - break; - case WorkshopIrregularShifts.TwentyFourFortyEight: - baseDivideTime = 72; - workTime = 24; - break; - case WorkshopIrregularShifts.TwentyFourTwentyFour: - baseDivideTime = 48; - workTime = 24; - break; - } - //کل ساعاتی داخلش ممکنه کار کرده باشه - var workingHour = totalDays * 24; - - //مقدار تعداد خالصی که سر شیفت بوده است - int countOfWorking = (int)(workingHour / baseDivideTime); - - //باقی مونده تعدادی که سر شیفت بوده است - double fractionalPart = (workingHour / baseDivideTime) - countOfWorking; - - //مقدار ساعت خالصی که سر کار بوده است - TimeSpan sumOfEmployeeWorkingHours = TimeSpan.FromHours(countOfWorking * workTime); - - //مقدار احتمال سر کار بودن بر حسب باقی مونده تقسیم - var workingTimesDiff = fractionalPart * workTime; - - - workingTimesDiff = workingTimesDiff >= workTime ? workTime : workingTimesDiff; - - //جمع ساعات خالصی و احتمالی - sumOfEmployeeWorkingHours = sumOfEmployeeWorkingHours.Add(TimeSpan.FromHours(workingTimesDiff)); - - return sumOfEmployeeWorkingHours; - } - - public static TimeSpan CalculateIrregularShift(IrregularShift irregularShift) - { - var workingTime = irregularShift.WorkshopIrregularShifts switch - { - WorkshopIrregularShifts.TwelveThirtySix => TimeSpan.FromHours(6), - WorkshopIrregularShifts.TwelveTwentyFour => TimeSpan.FromHours(8), - WorkshopIrregularShifts.TwentyFourFortyEight => TimeSpan.FromHours(8), - WorkshopIrregularShifts.TwentyFourTwentyFour => TimeSpan.FromHours(12), - _ => new TimeSpan() - }; - return workingTime; - } - - - public static TimeSpan CalculateRotatingOvertime(ICollection rotatingShifts, - List rollCalls, int mandatoryDays, TimeSpan sumSpan) - { - TimeSpan mandatorySpan = TimeSpan.Zero; - foreach (var groupedRollCall in rollCalls) - { - var findRotatingShift = FindRotatingShift(groupedRollCall.ShiftList.Min(x => x.Start), - groupedRollCall.ShiftList.Max(x => x.End), rotatingShifts); - var span = findRotatingShift.end - findRotatingShift.start; - mandatorySpan += span; - } - - var leftDays = mandatoryDays - rollCalls.Count; - if (leftDays > 0) - { - - TimeSpan totalDuration = new TimeSpan(rotatingShifts.Sum(shift => Math.Abs(shift.EndTime.Ticks - shift.StartTime.Ticks))); - var averageDuration = totalDuration / rotatingShifts.Count; - mandatorySpan += averageDuration * leftDays; - } - - if (mandatorySpan < sumSpan) - { - return sumSpan - mandatorySpan; - } - return TimeSpan.Zero; - - } - - - #region CustomizeCheckoutCalculation - - public static double FridayPayCalculation(CustomizeWorkshopEmployeeSettings customizeWorkshopEmployeeSettings, - List rollCallResult, double dailyWage, ICollection shiftSettings, double overtimePayAmount) - { - double fridayPayAmount = 0; - switch (customizeWorkshopEmployeeSettings.FridayPay.FridayPayType) - { - case (FridayPayType.MoneyPerFridayForDay): - { - int workedFridaysCount = CalculateFridayWorkingTotalDays(rollCallResult); - double baseAmount = customizeWorkshopEmployeeSettings.FridayPay.Value; - fridayPayAmount = baseAmount * workedFridaysCount; - break; - } - case (FridayPayType.MoneyPerFridayPerHour): - { - int workedFridaysMinutes = (int)CalculateFridayWorkingTimeSpan(rollCallResult).TotalMinutes; - double baseAmount = customizeWorkshopEmployeeSettings.FridayPay.Value; - fridayPayAmount = (baseAmount / 60) * workedFridaysMinutes; - break; - } - case (FridayPayType.PercentageFromSalaryPerHour): - { - int workedFridaysMinutes = (int)CalculateFridayWorkingTimeSpan(rollCallResult).TotalMinutes; - double percentageAmount = (customizeWorkshopEmployeeSettings.FridayPay.Value / 100 * dailyWage); - fridayPayAmount = (percentageAmount / 60) * workedFridaysMinutes; - break; - } - //case (FridayPayType.ExtraWorking): - // { - // var fridayOvertimeTimeSpan = CalculateFridayWorkingTimeSpanWithoutOvertime(rollCallResult, shiftSettings); - // overtimePayAmount += CalculateOvertimePay(fridayOvertimeTimeSpan, customizeWorkshopEmployeeSettings.OverTimePay, dailyWage); - // return overtimePayAmount; - // break; - // } - default: - break; - } - - return fridayPayAmount; - } - - public double InsurancePayCalculation(long employeeId, DateTime contractStart, DateTime contractEnd, - InsuranceDeduction insuranceDeduction, double monthySalary) - { - double insurancePayAmount = 0; - switch (insuranceDeduction.InsuranceDeductionType) - { - case InsuranceDeductionType.BasedOnLaborLaw: - - //farokhiChange - double familyAllowance = _yearlySalaryRepository.FamilyAllowance(employeeId, contractStart, contractEnd).MoneyToDouble(); - - double housingAllowance = _yearlySalaryRepository.HousingAllowance(contractEnd).MoneyToDouble(); - - double consumableItemsAllowance = _yearlySalaryRepository.ConsumableItems(contractEnd).MoneyToDouble(); - - double wage = _context.YearlySalaries.Include(x => x.YearlySalaryItemsList) - .FirstOrDefault(x => x.StartDate <= contractEnd && x.EndDate <= contractEnd).YearlySalaryItemsList - .FirstOrDefault(x => x.ItemName == "مزد روزانه").ItemValue; - - insurancePayAmount = (familyAllowance + housingAllowance + consumableItemsAllowance + wage) * 7 / 100; - break; - - case InsuranceDeductionType.PercentageOfSalary: - - double multiplier = insuranceDeduction.Value / 100; - - insurancePayAmount = monthySalary * multiplier; - break; - - case InsuranceDeductionType.Money: - - double baseAmount = insuranceDeduction.Value; - - insurancePayAmount = baseAmount; - break; - - case InsuranceDeductionType.None: - break; - - default: - insurancePayAmount = 0; - break; - } - - return insurancePayAmount; - } - - public static TimeSpan CalculateLeavePay(TimeSpan sumOfEmployeeShiftSpan, TimeSpan absentsTimeSpan, - int permittedLeaveDay, int monthDays, int contractDays, TimeSpan sumSpans, - double leaveValue, double minuteWage, DateTime startDate, DateTime endDate, out double leavePayAmount, out double absentsDeduction) - { - - - - - // زمان مجاز مرخصی - TimeSpan permittedLeaveTimeSpan = sumOfEmployeeShiftSpan * permittedLeaveDay; - - // زمان مرخصی مجاز برای یک روز - TimeSpan leaveTimePerDay = (permittedLeaveTimeSpan / monthDays); - - - //اگر ترک کار کرده بود - if (contractDays < monthDays) - { - permittedLeaveTimeSpan = leaveTimePerDay * contractDays; - } + private void CreateRewardForBirthDay(long employeeId, long workshopId, double amount, int month, int year, + DateTime contractStart) + { + var start = $"{year}/{month:00}/01".ToGeorgianDateTime(); + var end = $"{year}/{month:00}/01".FindeEndOfMonth().ToGeorgianDateTime(); + if (_context.Rewards.Any(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId + && x.GrantDate >= start && x.GrantDate <= end + && x.RewardType == RewardType.CreatedByCheckoutForBirthDay) == false) + { + var reward = new Reward(employeeId, workshopId, amount, "", 0, UserType.System, contractStart, "هدیه تولد", + RewardType.CreatedByCheckoutForBirthDay); + _context.Rewards.Add(reward); + _context.SaveChanges(); + } + } + + private void CreateReward(long employeeId, long workshopId, double amount, int month, int year, + DateTime contractStart, RewardType type, string title) + { + var start = $"{year}/{month:00}/01".ToGeorgianDateTime(); + var end = $"{year}/{month:00}/01".FindeEndOfMonth().ToGeorgianDateTime(); + if (_context.Rewards.Any(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId + && x.GrantDate >= start && x.GrantDate <= end + && x.RewardType == type) == false) + { + var reward = new Reward(employeeId, workshopId, amount, "", 0, UserType.System, contractStart, title, type); + _context.Rewards.Add(reward); + _context.SaveChanges(); + } + } + //private void CreateRewardForChahardah(long employeeId, long workshopId, double amount, int month, int year, + // DateTime contractStart) + //{ + // var start = $"{year}/{month:00}/01".ToGeorgianDateTime(); + // var end = $"{year}/{month:00}/01".FindeEndOfMonth().ToGeorgianDateTime(); + // if (_context.Rewards.Any(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId + // && x.GrantDate >= start && x.GrantDate <= end + // && x.RewardType == RewardType.ChahardahFarvardin) == false) + // { + // var reward = new Reward(employeeId, workshopId, amount, "", 0, contractStart, "بابت تعطیلی روز 14 فروردین", + // RewardType.ChahardahFarvardin); + // _context.Rewards.Add(reward); + // _context.SaveChanges(); + // } + //} + + + + + private TimeSpan CalculateIrregularOverTime(List rollCalls, TimeSpan employeeShiftSpan, WorkshopIrregularShifts irregularShifts, int mandatoryDays) + { + var sumOfRollCallTicks = rollCalls.Sum(x => (x.EndDate.Value - x.StartDate.Value).Ticks); + + var sumRollCall = new TimeSpan(sumOfRollCallTicks); + var sumOfShift = employeeShiftSpan * mandatoryDays; + + if (sumOfShift > sumRollCall) + return TimeSpan.Zero; + + return sumRollCall - sumOfShift; + } + + + + public static TimeSpan CalculateIrregularShiftSpans(int totalDays, IrregularShift irregularShift) + { + //مبنای تقسیم که بر اساس جمع مقدار ساعت استراحت و ساعت کاری بدست میاد + double baseDivideTime = 0; + + //مقدار ساعت کارکرد در هر شیفت + double workTime = 0; + switch (irregularShift.WorkshopIrregularShifts) + { + case WorkshopIrregularShifts.TwelveThirtySix: + baseDivideTime = 48; + workTime = 12; + break; + case WorkshopIrregularShifts.TwelveTwentyFour: + baseDivideTime = 36; + workTime = 12; + break; + case WorkshopIrregularShifts.TwentyFourFortyEight: + baseDivideTime = 72; + workTime = 24; + break; + case WorkshopIrregularShifts.TwentyFourTwentyFour: + baseDivideTime = 48; + workTime = 24; + break; + } + //کل ساعاتی داخلش ممکنه کار کرده باشه + var workingHour = totalDays * 24; + + //مقدار تعداد خالصی که سر شیفت بوده است + int countOfWorking = (int)(workingHour / baseDivideTime); + + //باقی مونده تعدادی که سر شیفت بوده است + double fractionalPart = (workingHour / baseDivideTime) - countOfWorking; + + //مقدار ساعت خالصی که سر کار بوده است + TimeSpan sumOfEmployeeWorkingHours = TimeSpan.FromHours(countOfWorking * workTime); + + //مقدار احتمال سر کار بودن بر حسب باقی مونده تقسیم + var workingTimesDiff = fractionalPart * workTime; + + + workingTimesDiff = workingTimesDiff >= workTime ? workTime : workingTimesDiff; + + //جمع ساعات خالصی و احتمالی + sumOfEmployeeWorkingHours = sumOfEmployeeWorkingHours.Add(TimeSpan.FromHours(workingTimesDiff)); + + return sumOfEmployeeWorkingHours; + } + + public static TimeSpan CalculateIrregularShift(IrregularShift irregularShift) + { + var workingTime = irregularShift.WorkshopIrregularShifts switch + { + WorkshopIrregularShifts.TwelveThirtySix => TimeSpan.FromHours(6), + WorkshopIrregularShifts.TwelveTwentyFour => TimeSpan.FromHours(8), + WorkshopIrregularShifts.TwentyFourFortyEight => TimeSpan.FromHours(8), + WorkshopIrregularShifts.TwentyFourTwentyFour => TimeSpan.FromHours(12), + _ => new TimeSpan() + }; + return workingTime; + } + + + public static TimeSpan CalculateRotatingOvertime(ICollection rotatingShifts, + List rollCalls, int mandatoryDays, TimeSpan sumSpan) + { + TimeSpan mandatorySpan = TimeSpan.Zero; + foreach (var groupedRollCall in rollCalls) + { + var findRotatingShift = FindRotatingShift(groupedRollCall.ShiftList.Min(x => x.Start), + groupedRollCall.ShiftList.Max(x => x.End), rotatingShifts); + var span = findRotatingShift.end - findRotatingShift.start; + mandatorySpan += span; + } + + var leftDays = mandatoryDays - rollCalls.Count; + if (leftDays > 0) + { + + TimeSpan totalDuration = new TimeSpan(rotatingShifts.Sum(shift => Math.Abs(shift.EndTime.Ticks - shift.StartTime.Ticks))); + var averageDuration = totalDuration / rotatingShifts.Count; + mandatorySpan += averageDuration * leftDays; + } + + if (mandatorySpan < sumSpan) + { + return sumSpan - mandatorySpan; + } + return TimeSpan.Zero; + + } + + + #region CustomizeCheckoutCalculation + + public static double FridayPayCalculation(CustomizeWorkshopEmployeeSettings customizeWorkshopEmployeeSettings, + List rollCallResult, double dailyWage, ICollection shiftSettings, double overtimePayAmount) + { + double fridayPayAmount = 0; + switch (customizeWorkshopEmployeeSettings.FridayPay.FridayPayType) + { + case (FridayPayType.MoneyPerFridayForDay): + { + int workedFridaysCount = CalculateFridayWorkingTotalDays(rollCallResult); + double baseAmount = customizeWorkshopEmployeeSettings.FridayPay.Value; + fridayPayAmount = baseAmount * workedFridaysCount; + break; + } + case (FridayPayType.MoneyPerFridayPerHour): + { + int workedFridaysMinutes = (int)CalculateFridayWorkingTimeSpan(rollCallResult).TotalMinutes; + double baseAmount = customizeWorkshopEmployeeSettings.FridayPay.Value; + fridayPayAmount = (baseAmount / 60) * workedFridaysMinutes; + break; + } + case (FridayPayType.PercentageFromSalaryPerHour): + { + int workedFridaysMinutes = (int)CalculateFridayWorkingTimeSpan(rollCallResult).TotalMinutes; + double percentageAmount = (customizeWorkshopEmployeeSettings.FridayPay.Value / 100 * dailyWage); + fridayPayAmount = (percentageAmount / 60) * workedFridaysMinutes; + break; + } + //case (FridayPayType.ExtraWorking): + // { + // var fridayOvertimeTimeSpan = CalculateFridayWorkingTimeSpanWithoutOvertime(rollCallResult, shiftSettings); + // overtimePayAmount += CalculateOvertimePay(fridayOvertimeTimeSpan, customizeWorkshopEmployeeSettings.OverTimePay, dailyWage); + // return overtimePayAmount; + // break; + // } + default: + break; + } + + return fridayPayAmount; + } + + public double InsurancePayCalculation(long employeeId, DateTime contractStart, DateTime contractEnd, + InsuranceDeduction insuranceDeduction, double monthySalary) + { + double insurancePayAmount = 0; + switch (insuranceDeduction.InsuranceDeductionType) + { + case InsuranceDeductionType.BasedOnLaborLaw: + + //farokhiChange + double familyAllowance = _yearlySalaryRepository.FamilyAllowance(employeeId, contractStart, contractEnd).MoneyToDouble(); + + double housingAllowance = _yearlySalaryRepository.HousingAllowance(contractEnd).MoneyToDouble(); + + double consumableItemsAllowance = _yearlySalaryRepository.ConsumableItems(contractEnd).MoneyToDouble(); + + double wage = _context.YearlySalaries.Include(x => x.YearlySalaryItemsList) + .FirstOrDefault(x => x.StartDate <= contractEnd && x.EndDate <= contractEnd).YearlySalaryItemsList + .FirstOrDefault(x => x.ItemName == "مزد روزانه").ItemValue; + + insurancePayAmount = (familyAllowance + housingAllowance + consumableItemsAllowance + wage) * 7 / 100; + break; + + case InsuranceDeductionType.PercentageOfSalary: + + double multiplier = insuranceDeduction.Value / 100; + + insurancePayAmount = monthySalary * multiplier; + break; + + case InsuranceDeductionType.Money: + + double baseAmount = insuranceDeduction.Value; + + insurancePayAmount = baseAmount; + break; + + case InsuranceDeductionType.None: + break; + + default: + insurancePayAmount = 0; + break; + } + + return insurancePayAmount; + } + + public static TimeSpan CalculateLeavePay(TimeSpan sumOfEmployeeShiftSpan, TimeSpan absentsTimeSpan, + int permittedLeaveDay, int monthDays, int contractDays, TimeSpan sumSpans, + double leaveValue, double minuteWage, DateTime startDate, DateTime endDate, out double leavePayAmount, out double absentsDeduction) + { + + + + + // زمان مجاز مرخصی + TimeSpan permittedLeaveTimeSpan = sumOfEmployeeShiftSpan * permittedLeaveDay; + + // زمان مرخصی مجاز برای یک روز + TimeSpan leaveTimePerDay = (permittedLeaveTimeSpan / monthDays); + + + //اگر ترک کار کرده بود + if (contractDays < monthDays) + { + permittedLeaveTimeSpan = leaveTimePerDay * contractDays; + } - //اگر قراردادش کامل بود - else - { + //اگر قراردادش کامل بود + else + { - } + } - //اختلاف غیبت و مرخصی - (TimeSpan Diffrence, AbsentOrLeave absentOrLeave) absentAndLeaveDifference; + //اختلاف غیبت و مرخصی + (TimeSpan Diffrence, AbsentOrLeave absentOrLeave) absentAndLeaveDifference; - //مقدار مبلغ مرخصی - leavePayAmount = 0; + //مقدار مبلغ مرخصی + leavePayAmount = 0; - //مقدار مبلغ غیبت - absentsDeduction = 0; + //مقدار مبلغ غیبت + absentsDeduction = 0; - //#region SumLeaves + //#region SumLeaves - //var usedLeavesCheckout = new TimeSpan(); - //foreach (var item in leaveList) - //{ - // var start = new DateTime(); - // var end = new DateTime(); - // start = item.StartLeaveGr < startDate ? startDate : item.StartLeaveGr; - // end = item.EndLeaveGr > endDate ? endDate : item.EndLeaveGr; - // if (item.PaidLeaveType == "روزانه") - // { - // var leaveSpan = (end - start); + //var usedLeavesCheckout = new TimeSpan(); + //foreach (var item in leaveList) + //{ + // var start = new DateTime(); + // var end = new DateTime(); + // start = item.StartLeaveGr < startDate ? startDate : item.StartLeaveGr; + // end = item.EndLeaveGr > endDate ? endDate : item.EndLeaveGr; + // if (item.PaidLeaveType == "روزانه") + // { + // var leaveSpan = (end - start); - // usedLeavesCheckout = usedLeavesCheckout.Add(leaveSpan); - // } - // else - // { - // var leavingHourses = TimeSpan.Parse(item.LeaveHourses); - // usedLeavesCheckout = usedLeavesCheckout.Add(leavingHourses); - // } + // usedLeavesCheckout = usedLeavesCheckout.Add(leaveSpan); + // } + // else + // { + // var leavingHourses = TimeSpan.Parse(item.LeaveHourses); + // usedLeavesCheckout = usedLeavesCheckout.Add(leavingHourses); + // } - //} + //} - //#endregion + //#endregion - //if (permittedLeaveTimeSpan >= usedLeavesCheckout) - //{ - // permittedLeaveTimeSpan = permittedLeaveTimeSpan - usedLeavesCheckout; - // sumSpans += usedLeavesCheckout; - // usedLeavesCheckout = new TimeSpan(); - //} - //else - //{ - // sumSpans += permittedLeaveTimeSpan; - // absentsTimeSpan = (absentsTimeSpan - usedLeavesCheckout) - permittedLeaveTimeSpan; - // permittedLeaveTimeSpan = new TimeSpan(); - //} - - - - //اگر مقدار مجاز مرخصی بیشتر از غیبت یا مساوی باشد - if (permittedLeaveTimeSpan >= absentsTimeSpan) - { - //محاسبه مقدار باقی مانده مزد مرخصی - absentAndLeaveDifference.Diffrence = permittedLeaveTimeSpan - absentsTimeSpan; - absentAndLeaveDifference.absentOrLeave = AbsentOrLeave.LeavePay; - - //صفر کردن مقدار غیبت - absentsTimeSpan = new TimeSpan(0); - - ////برگرداندن ساعت کاری باقی مونده از مزد مرخصی به ساعت کاری - //sumSpans += absentAndLeaveDifference.Diffrence; - - //مقدار مزد مرخصی برای هرروز استفاده نشده - double leavePayPerDayWage = (leaveValue * (minuteWage * sumOfEmployeeShiftSpan.TotalMinutes)); - - if (permittedLeaveTimeSpan.TotalHours == 0) - return sumSpans; - - leavePayAmount = (leavePayPerDayWage / permittedLeaveTimeSpan.TotalMinutes) * absentAndLeaveDifference.Diffrence.TotalMinutes; - - } - //اگر مقدار غیبت بیشتر از مرخصی باشد - else - { - //محاسبه مقدار باقی مانده از غیبت - absentAndLeaveDifference.Diffrence = absentsTimeSpan - permittedLeaveTimeSpan; - absentAndLeaveDifference.absentOrLeave = AbsentOrLeave.AbsentDeduction; - - //صفر کردن مقدار مزد مرخصی - permittedLeaveTimeSpan = new TimeSpan(0); - permittedLeaveDay = 0; - - ////برگرداندن ساعت کاری باقی مونده از مزد مرخصی به ساعت کاری - //sumSpans += permittedLeaveTimeSpan; - - absentsDeduction = absentsTimeSpan.TotalMinutes * minuteWage; - - } - - return sumSpans; - } - - /// - /// محاسبه تاخیر در ورورد و تعجیل در خروج - /// - /// - /// - /// - public List LateToWorkEarlyExit(List groupedRollCall, ICollection shiftSettings, List leavList) - { - List lateToWorkEarlyExistSpannig = new List(); - - foreach (var day in groupedRollCall) - { - - foreach (var shift in shiftSettings) - { - //DateTime start = DateTime.Parse(shift.StartTime); - //DateTime end = DateTime.Parse(shift.EndTime); - DateTime startShift = new DateTime(day.CreationDate.Year, day.CreationDate.Month, day.CreationDate.Day, shift.StartTime.Hour, shift.StartTime.Minute, 0); - DateTime endShift = new DateTime(day.CreationDate.Year, day.CreationDate.Month, day.CreationDate.Day, shift.EndTime.Hour, shift.EndTime.Minute, 0); - if (shift.StartTime > shift.EndTime) - endShift = endShift.AddDays(1); - - //اگر در بازه شیف تعیین شده حضور غیاب داشت - - var hasRollCall = day.ShiftList.Where(x => - (x.Start <= startShift && x.End > startShift) || - (x.Start >= startShift && x.End <= endShift) || - (x.Start > startShift && x.End > endShift)).ToList(); - - if (!hasRollCall.Any())// اگر در بازه شیفت هیچ حضور غیابی نداشت - { - lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() - { - StartSpan = startShift, - EndSpan = endShift, - Spanning = (endShift - startShift), - TypeOfSapn = shift.Placement == ShiftPlacement.First ? "LateToWork" : "EarlyExist" - }); - } - else if (hasRollCall.Count() == 1) - { - var singleHasRollCall = hasRollCall.FirstOrDefault(); - if (singleHasRollCall != null && singleHasRollCall.Start > startShift && - singleHasRollCall.End >= endShift) - { - lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() - { - StartSpan = startShift, - EndSpan = singleHasRollCall.Start, - Spanning = (singleHasRollCall.Start - startShift), - TypeOfSapn = "LateToWork" - }); - } - else if (singleHasRollCall != null && singleHasRollCall.Start <= startShift && - singleHasRollCall.End < endShift) - { - lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() - { - StartSpan = singleHasRollCall.End, - EndSpan = endShift, - Spanning = (endShift - singleHasRollCall.End), - TypeOfSapn = "EarlyExist" - }); - } - else if (singleHasRollCall != null && singleHasRollCall.Start > startShift && - singleHasRollCall.End < endShift) - { - lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() - { - StartSpan = startShift, - EndSpan = singleHasRollCall.Start, - Spanning = (singleHasRollCall.Start - startShift), - TypeOfSapn = "LateToWork" - }); - - lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() - { - StartSpan = singleHasRollCall.End, - EndSpan = endShift, - Spanning = (endShift - singleHasRollCall.End), - TypeOfSapn = "EarlyExist" - }); - } - } - else if (hasRollCall.Count() > 1) - { - var multiHasRollCall = hasRollCall.OrderBy(x => x.Start); - var firstRollcall = multiHasRollCall.First(); - var lastRollCall = multiHasRollCall.Last(); - - if (firstRollcall.Start > startShift && - firstRollcall.End >= endShift) - { - lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() - { - StartSpan = startShift, - EndSpan = firstRollcall.Start, - Spanning = (firstRollcall.Start - startShift), - TypeOfSapn = "LateToWork" - }); - } - - if (lastRollCall.Start <= startShift && - lastRollCall.End < endShift) - { - lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() - { - StartSpan = lastRollCall.End, - EndSpan = endShift, - Spanning = (endShift - lastRollCall.End), - TypeOfSapn = "EarlyExist" - }); - } - } - } - } - - leavList = leavList.Where(x => x.PaidLeaveType == "ساعتی").ToList(); - // اگر تاخیر یا تعجیل به دلیل مرخصی ساعتی بود حساب نشود - if (leavList.Count > 0 && lateToWorkEarlyExistSpannig.Count > 0) - { - foreach (var el in lateToWorkEarlyExistSpannig.ToList()) - { - var hasLeve = leavList.Any(x => - (x.StartLeaveGr <= el.StartSpan && x.EndLeaveGr > el.StartSpan) || - (x.StartLeaveGr >= el.StartSpan && x.EndLeaveGr <= el.EndSpan) || - (x.StartLeaveGr > el.StartSpan && x.EndLeaveGr > el.EndSpan)); - if (hasLeve) - lateToWorkEarlyExistSpannig.Remove(el); - } - - } - - - return lateToWorkEarlyExistSpannig; - } - - #region Pooya - - public double CalculateFamilyAllowancePayAmount(long employeeId, double basePay, DateTime contractEnd) - { - int underageChildrenCount = _context.EmployeeChildrenSet.Where(x => x.EmployeeId == employeeId && - x.DateOfBirth.AddYears(18) > contractEnd).Count(); - return basePay * underageChildrenCount; - } - - //Deprecated - private TimeSpan CalculateOvertimeTimeSpanWithThreshold(List rollCalls, - ICollection shiftSettings, int overtimeThresholdMinutes) - { - - var mandatoryTotalTimeSpan = new TimeSpan(shiftSettings.Sum(x => (x.EndTime - x.StartTime).Ticks)); - mandatoryTotalTimeSpan += new TimeSpan(0, overtimeThresholdMinutes, 0); - - var rollCallsTimeSpans = rollCalls.Select(x => x.EndDate.Value - x.StartDate.Value).Where(x => x > mandatoryTotalTimeSpan).ToList(); - var rollCallTotalTimeSpan = new TimeSpan(rollCallsTimeSpans.Sum(x => x.Ticks)); - - if (rollCallTotalTimeSpan < mandatoryTotalTimeSpan) - return TimeSpan.Zero; - return rollCallTotalTimeSpan - mandatoryTotalTimeSpan; - } - - #region سنوات - - /// - /// فرمول اصلی محاسبه سنوات برای پرسنل در بازه زمانی با تنظیمات پیشرفته - /// - /// حقوق ماهیانه پرسنل - /// تنظیمات سنوات - /// تنظیم مربوط به پرداخت هنگام ترک کار - public double CalculateYearsPayAmount(long employeeId, long workshopId, double monthlySalary, DateTime contractStart, DateTime contractEnd, - BaseYearsPay baseYearsSettings, BaseYearsPayInEndOfYear payOnLeave, MaxMonthDays maxMonthDays) - { - double baseYearPayAmount = 0; - - - var leftWorks = _context.LeftWorkList - .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && - x.LeftWorkDate.Date.AddDays(-1) >= contractStart && x.StartWorkDate.Date <= contractEnd).ToList(); - - if (!leftWorks.Any()) - return 0; - - int daysWorked = (int)new TimeSpan(leftWorks.Select(x => new - { - Start = x.StartWorkDate < contractStart ? contractStart : x.StartWorkDate - , - End = x.LeftWorkDate.AddDays(-1) > contractEnd ? contractEnd : x.LeftWorkDate.AddDays(-1) - }).Sum(x => (x.End - x.Start).Ticks)).TotalDays + 1; - - bool hasLeftWork = leftWorks.MaxBy(x => x.LeftWorkDate).LeftWorkDate.AddDays(-1) < contractEnd; - - //محاسبه سنوات سالیانه - switch (baseYearsSettings.BaseYearsPayType) - { - case BaseYearsPayType.PercentageOfSalary: - { - baseYearPayAmount = monthlySalary * baseYearsSettings.Value / 100; - break; - } - case BaseYearsPayType.Money: - { - baseYearPayAmount = baseYearsSettings.Value; - break; - } - case BaseYearsPayType.None: - { - return 0; - } - } - - //در صورت ترک کار - if (hasLeftWork) - - { - switch (payOnLeave) - { - //اگر سنوات در آخر سال تعلق می گیرد ترک کار قبل از پایان دوره موجب صفر شدن آن میشود - case BaseYearsPayInEndOfYear.EndOfYear: - return 0; - - //اگر هنگام ترک کار سنوات تعلق می گیرد - case BaseYearsPayInEndOfYear.WhenEverEmployeeLeftWork: - { - - //بر اساس نوع پرداخت سالیانه یا ماهیانه سنوات محاسبه می گردد - switch (baseYearsSettings.PaymentType) - { - case BaseYearsPaymentType.MonthlyPay: - { - return CalculateYearsPayMonthlyByDays(baseYearPayAmount, daysWorked, contractStart.CountPersianMonthDays(), maxMonthDays); - } - case BaseYearsPaymentType.YearlyPay: - { - - return CalculateYearsPayYearlyByDays(baseYearPayAmount, daysWorked); - } - default: - return 0; - } - } - } - } - - //در صورت عدم ترک کار - switch (baseYearsSettings.PaymentType) - { - case BaseYearsPaymentType.MonthlyPay: - { - return CalculateYearsPayMonthlyByDays(baseYearPayAmount, daysWorked, contractStart.CountPersianMonthDays(), maxMonthDays); - } - case BaseYearsPaymentType.YearlyPay: - { - string contractEndFa = contractEnd.ToFarsi(); - bool isCheckoutForEsfand = contractEndFa.Substring(5, 2) == "12"; - bool isContractEndOfMonth = contractEndFa.FindeEndOfMonth() == contractEndFa; - - //اگر آخر ماه نبود یا اسفند نبود سنوات سالیانه محاسبه نمی گردد - if (isContractEndOfMonth == false || isCheckoutForEsfand == false) - return 0; - - return CalculateYearsPayYearlyByDays(baseYearPayAmount, daysWorked); - } - default: - return 0; - } - - } - - /// - /// محاسبه سنوات ماهیانه بر اساس روز های کارکرد - /// - /// سنوات در کل سال - /// روز های کارکرد - /// تعداد روز های ماه - public static double CalculateYearsPayMonthlyByDays(double baseYears, int daysWorked, int totalDaysInMonth, MaxMonthDays maxMonthDays) - { - daysWorked = maxMonthDays == MaxMonthDays.ThirtyDaysForAllMonth && daysWorked > 30 ? 30 : daysWorked; - totalDaysInMonth = maxMonthDays == MaxMonthDays.ThirtyDaysForAllMonth ? 30 : totalDaysInMonth; - return baseYears / 12 / totalDaysInMonth * daysWorked; - } - - /// - /// محاسبه سنوات سالیانه بر اساس روز های کارکرد - /// - /// سنوات در کل سال - /// روز های کارکرد - /// - /// - public static double CalculateYearsPayYearlyByDays(double baseYears, int daysWorked) - { - return baseYears / 365 * daysWorked; - } - #endregion - - - - //TODO: this must be updated with Mahan's method for leaves - /// - /// محاسبه مدت اضافه کاری - /// - public static TimeSpan CalculateOvertimeTimeSpan(List rollCalls, - ICollection shiftSettings, TimeOnly employeeOffSet) - { - - //for (DateTime offset = start; offset <= end; offset.AddDays(1)) - //{ - // DayOfWeek dayOfWeek = offset.DayOfWeek; - // switch (dayOfWeek) - // { - // case DayOfWeek.Thursday: - // shifts.Add(new ShiftViewModel { Start = offset.AddHours(9), End = offset.AddHours(14) }); - // break; - // case DayOfWeek.Friday: - // break; - // default: - // shifts.Add(new ShiftViewModel { Start = offset.AddHours(8), End = offset.AddHours(16) }); - // break; - // } - //} - - //if (!rollCalls.Any()) - // return TimeSpan.Zero; - //var startRollCall = rollCalls.MinBy(x => x.StartDate!.Value).StartDate!.Value; - //var endRollCall = rollCalls.Max(x => x.EndDate)!.Value; - - //DateTime startDateTime = new DateTime(DateOnly.FromDateTime(startRollCall), employeeOffSet); - //DateTime endDateTime = new DateTime(DateOnly.FromDateTime(endRollCall), employeeOffSet); - //endDateTime = endDateTime == startDateTime ? endDateTime.AddDays(1) : endDateTime; - - - var mandatoryPerDayTimeSpan = new TimeSpan(shiftSettings.Sum(x => (x.EndTime - x.StartTime).Ticks)); - - //bool isFirst = true; - - //var sumOfOverTime = TimeSpan.Zero; - - //for (var startDateOffset = startDateTime; startDateOffset <= endDateTime; startDateOffset = startDateOffset.AddDays(1)) - //{ - // IEnumerable rollCallViewModels; - // var startPeriod = startDateOffset; - // var endPeriod = startDateOffset.AddDays(1); - - // if (isFirst) - // { - // rollCallViewModels = rollCalls - // .Where(x => x.StartDate.Value > startPeriod.Date && x.EndDate.Value <= endPeriod); - // isFirst = false; - // } - // else - // { - // rollCallViewModels = rollCalls - // .Where(x => x.StartDate.Value > startPeriod && x.EndDate.Value <= endPeriod); - // } - - // var sum = rollCallViewModels.Sum(x => (x.EndDate.Value - x.StartDate.Value).Ticks); - // var rollCallTimeSpan = new TimeSpan(sum); - // if (rollCallTimeSpan > mandatoryPerDayTimeSpan) - // { - // var overTime = rollCallTimeSpan - mandatoryPerDayTimeSpan; - // sumOfOverTime = sumOfOverTime.Add(overTime); - // } - //} - - - //return sumOfOverTime; - - - var groupedRollCalls = rollCalls.GroupBy(x => x.StartDate!.Value.Date); - - - var rollCallsTimeSpans = groupedRollCalls.Where(x => - x.Sum(y => (y.EndDate!.Value - y.StartDate!.Value).Ticks) > mandatoryPerDayTimeSpan.Ticks) - .Select(x => x.Sum(y => (y.EndDate!.Value - y.StartDate!.Value).Ticks)).ToList(); - - var daysCount = rollCallsTimeSpans.Count(); - - var totalMandatoryTotalTimeSpan = mandatoryPerDayTimeSpan * daysCount; - var rollCallTotalTimeSpan = new TimeSpan(rollCallsTimeSpans.Sum(x => x)); - - if (rollCallTotalTimeSpan < totalMandatoryTotalTimeSpan) - return TimeSpan.Zero; - return rollCallTotalTimeSpan - totalMandatoryTotalTimeSpan; - } - - - public static TimeSpan CalculateOvertimeSpanWithSumSpan(TimeSpan sumSpan, int mandatoryDays, - ICollection shiftSettings) - { - var mandatoryPerDayTimeSpan = new TimeSpan(shiftSettings.Sum(x => (x.EndTime - x.StartTime).Ticks)); - var mandatoryWorkingTimeSpan = mandatoryPerDayTimeSpan * mandatoryDays; - if (mandatoryWorkingTimeSpan > sumSpan) - return TimeSpan.Zero; - - return sumSpan - mandatoryWorkingTimeSpan; - - } - - /// - /// محاسبه مبلغ اضافه کاری با استفاده از تنظیمات - /// - /// مدت اضافه کاری - /// تنظیمات اضافه کاری - /// مزد روزانه - /// - public static double CalculateOvertimePay(TimeSpan overtimeTimeSpan, OverTimePay overTimePaySettings, double dailyWage) - { - double baseAmount = overTimePaySettings.Value; - double result = 0; - switch (overTimePaySettings.OverTimePayType) - { - - case OverTimePayType.None: - break; - - - case OverTimePayType.MoneyPerHour: - { - int totalMinutes = (int)overtimeTimeSpan.TotalMinutes; - result = totalMinutes * (baseAmount / 60); - break; - } - - - case OverTimePayType.PercentagePerHourOfSalary: - { - int totalMinutes = (int)overtimeTimeSpan.TotalMinutes; - double multiplier = overTimePaySettings.Value / 100; - result = ((dailyWage * multiplier) / 60) * totalMinutes; - break; - } - - } - return result; - } - - /// - /// محاسبه مدت جمعه کاری بدون در نظر گرفتن اضافه کاری - /// - public static TimeSpan CalculateFridayWorkingTimeSpanWithoutOvertime(List rollCallsList, ICollection shiftSettings) - { - var _rollCallsList = rollCallsList; - _rollCallsList = _rollCallsList.Where(x => x.StartDate.Value.DayOfWeek == DayOfWeek.Friday || - x.EndDate.Value.DayOfWeek == DayOfWeek.Friday || - (x.StartDate.Value.DayOfWeek == DayOfWeek.Thursday && x.EndDate.Value.DayOfWeek == DayOfWeek.Saturday)).ToList(); - - var preprocessedRollCalls = _rollCallsList.Select(x => - new RollCallViewModel - { - StartDate = x.StartDate.Value.DayOfWeek == DayOfWeek.Thursday ? x.StartDate.Value.AddDays(1).Date : x.StartDate.Value - , - EndDate = x.EndDate.Value.DayOfWeek == DayOfWeek.Saturday ? x.EndDate.Value.Date : x.EndDate.Value - }).ToList(); - - //var timeSpan = new TimeSpan(preprocessedRollCalls.Sum(x => (x.EndDate.Value - x.StartDate.Value).Ticks)); - - var extraWorkingTimeSpan = CalculateOvertimeTimeSpan(preprocessedRollCalls, shiftSettings, new TimeOnly()); - var rollCallTimeSpan = CalculateFridayWorkingTimeSpan(preprocessedRollCalls); - - if (rollCallTimeSpan <= extraWorkingTimeSpan) - return TimeSpan.Zero; - return rollCallTimeSpan - extraWorkingTimeSpan; - - - } - - /// - /// محاسبه مدت جمعه کاری - /// - public static TimeSpan CalculateFridayWorkingTimeSpan(List rollCallsList) - { - var _rollCallsList = rollCallsList; - _rollCallsList = _rollCallsList.Where(x => x.StartDate.Value.DayOfWeek == DayOfWeek.Friday || - x.EndDate.Value.DayOfWeek == DayOfWeek.Friday || - (x.StartDate.Value.DayOfWeek == DayOfWeek.Thursday && x.EndDate.Value.DayOfWeek == DayOfWeek.Saturday)).ToList(); - - var preprocessedRollCalls = _rollCallsList.Select(x => - new - { - Start = x.StartDate.Value.DayOfWeek == DayOfWeek.Thursday ? x.StartDate.Value.AddDays(1).Date : x.StartDate.Value - , - End = x.EndDate.Value.DayOfWeek == DayOfWeek.Saturday ? x.EndDate.Value.Date : x.EndDate.Value - }).ToList(); - - var timeSpan = new TimeSpan(preprocessedRollCalls.Sum(x => (x.End - x.Start).Ticks)); - return timeSpan; - } - - /// - /// محاسبه روز های جمعه کاری - /// - public static int CalculateFridayWorkingTotalDays(List rollCallsList) - { - var _rollCallsList = rollCallsList; - _rollCallsList = _rollCallsList.Where(x => x.StartDate.Value.DayOfWeek == DayOfWeek.Friday || - x.EndDate.Value.DayOfWeek == DayOfWeek.Friday || - (x.StartDate.Value.DayOfWeek == DayOfWeek.Thursday && x.EndDate.Value.DayOfWeek == DayOfWeek.Saturday)).ToList(); - - var preprocessedRollCalls = _rollCallsList.Select(x => - new - { - Start = x.StartDate.Value.DayOfWeek == DayOfWeek.Thursday ? x.StartDate.Value.AddDays(1).Date : x.StartDate.Value - , - End = x.EndDate.Value.DayOfWeek == DayOfWeek.Saturday ? x.StartDate.Value.Date : x.EndDate.Value, - ShiftDate = x.ShiftDate - }).ToList(); - - int fridaysCount = preprocessedRollCalls.GroupBy(x => x.ShiftDate).Count(); - return fridaysCount; - } - - #endregion - - #endregion - - - public static (DateTime start, DateTime end) FindRotatingShift(DateTime startRollCall, DateTime endRollCall, - ICollection rotatingShifts) - { - DateTime startDate = startRollCall.Date; - DateTime endDate = endRollCall.Date; - - - - DateTime startEntryWithDate = startDate.Add(startRollCall.TimeOfDay); - DateTime endEntryWithDate = endDate.Add(endRollCall.TimeOfDay); - - DateTime twoHourBeforeStart = startEntryWithDate.AddHours(-2); - DateTime twoHourAfterStart = startEntryWithDate.AddHours(2); - DateTime twoHourBeforeEnd = endEntryWithDate.AddHours(-2); - DateTime twoHourAfterEnd = endEntryWithDate.AddHours(2); - - - var shiftDateTimes = rotatingShifts.SelectMany(shift => - { - var shifts = new List<(DateTime Start, DateTime End)>(); - for (int i = -1; i <= 1; i++) - { - var shiftStart = startDate.AddDays(i).Date; - shiftStart = shiftStart.Add(shift.StartTime.ToTimeSpan()); - var shiftEnd = shift.StartTime < shift.EndTime - ? startDate.AddDays(i).Date.Add(shift.EndTime.ToTimeSpan()) - : startDate.AddDays(i + 1).Date.Add(shift.EndTime.ToTimeSpan()); - shifts.Add((shiftStart, shiftEnd)); - } - - return shifts; - }).ToList(); - - #region مقایسه شروع حضور غیاب با شیفت - - //var startFilteredTimes = shiftDateTimes.Where(shift => - // (twoHourBeforeStart <= shift.Start && twoHourAfterStart >= shift.Start) || - // (twoHourBeforeStart <= shift.End && twoHourAfterStart >= shift.End)).ToList(); - - //if (startFilteredTimes.Count == 0) - //{ - // startFilteredTimes = shiftDateTimes; - //} - //else if (startFilteredTimes.Count == 1) - //{ - // var startChosenShift = startFilteredTimes.First(); - - // if (startChosenShift.End < startChosenShift.Start) - // startChosenShift.End = startChosenShift.End.AddDays(1); - - // return startChosenShift; - //} - - - //#endregion - - //#region مقایسه پایان حضورغیاب با شیفت - - //var endFilteredTimes = shiftDateTimes.Where(shift => - // (twoHourBeforeEnd <= shift.Start && twoHourAfterEnd >= shift.Start) || - // (twoHourBeforeEnd <= shift.End && twoHourAfterEnd >= shift.End)).ToList(); - //if (endFilteredTimes.Count == 0) - //{ - // endFilteredTimes = startFilteredTimes; - //} - //else if (endFilteredTimes.Count == 1) - //{ - // var endChosenShift = endFilteredTimes.First(); - // return endChosenShift; - //} - - #endregion - - #region اشتراک حضور غیاب و شیفت - - var overlapShifts = shiftDateTimes - .Select(shift => new - { - Shift = shift, - Overlap = new TimeSpan(Math.Max(0, - Math.Min(shift.End.Ticks, endRollCall.Ticks) - - Math.Max(shift.Start.Ticks, startRollCall.Ticks))), - // زمان حضور فرد در شیفت (مجموع Overlap با شیفت) - TotalTimeInShift = new TimeSpan(Math.Max(0, - Math.Min(shift.End.Ticks, endRollCall.Ticks) - - Math.Max(shift.Start.Ticks, startRollCall.Ticks))), - StartDistance = Math.Abs((shift.Start - startRollCall).Ticks), - EndDistance = Math.Abs((shift.End - endRollCall).Ticks), - TotalDistance = Math.Abs((shift.Start - startRollCall).Ticks) + Math.Abs((shift.End - endRollCall).Ticks) - }) - .OrderByDescending(s => s.TotalTimeInShift) // 1. بیشترین زمان حضور فرد - .ThenByDescending(s => s.Overlap) // 2. بیشترین Overlap - .ThenBy(s => s.TotalDistance) - .ThenBy(s => s.StartDistance) - .ThenBy(x => x.EndDistance); // 3. اگر برابر بود، Start نزدیک‌تر - - var overlapChosenShift = overlapShifts.First(); - var end = overlapChosenShift.Shift.End; - if (overlapChosenShift.Shift.End < overlapChosenShift.Shift.Start) - end = overlapChosenShift.Shift.End.AddDays(1); - - - return (overlapChosenShift.Shift.Start, end); - - #endregion - } - #endregion + //if (permittedLeaveTimeSpan >= usedLeavesCheckout) + //{ + // permittedLeaveTimeSpan = permittedLeaveTimeSpan - usedLeavesCheckout; + // sumSpans += usedLeavesCheckout; + // usedLeavesCheckout = new TimeSpan(); + //} + //else + //{ + // sumSpans += permittedLeaveTimeSpan; + // absentsTimeSpan = (absentsTimeSpan - usedLeavesCheckout) - permittedLeaveTimeSpan; + // permittedLeaveTimeSpan = new TimeSpan(); + //} + + + + //اگر مقدار مجاز مرخصی بیشتر از غیبت یا مساوی باشد + if (permittedLeaveTimeSpan >= absentsTimeSpan) + { + //محاسبه مقدار باقی مانده مزد مرخصی + absentAndLeaveDifference.Diffrence = permittedLeaveTimeSpan - absentsTimeSpan; + absentAndLeaveDifference.absentOrLeave = AbsentOrLeave.LeavePay; + + //صفر کردن مقدار غیبت + absentsTimeSpan = new TimeSpan(0); + + ////برگرداندن ساعت کاری باقی مونده از مزد مرخصی به ساعت کاری + //sumSpans += absentAndLeaveDifference.Diffrence; + + //مقدار مزد مرخصی برای هرروز استفاده نشده + double leavePayPerDayWage = (leaveValue * (minuteWage * sumOfEmployeeShiftSpan.TotalMinutes)); + + if (permittedLeaveTimeSpan.TotalHours == 0) + return sumSpans; + + leavePayAmount = (leavePayPerDayWage / permittedLeaveTimeSpan.TotalMinutes) * absentAndLeaveDifference.Diffrence.TotalMinutes; + + } + //اگر مقدار غیبت بیشتر از مرخصی باشد + else + { + //محاسبه مقدار باقی مانده از غیبت + absentAndLeaveDifference.Diffrence = absentsTimeSpan - permittedLeaveTimeSpan; + absentAndLeaveDifference.absentOrLeave = AbsentOrLeave.AbsentDeduction; + + //صفر کردن مقدار مزد مرخصی + permittedLeaveTimeSpan = new TimeSpan(0); + permittedLeaveDay = 0; + + ////برگرداندن ساعت کاری باقی مونده از مزد مرخصی به ساعت کاری + //sumSpans += permittedLeaveTimeSpan; + + absentsDeduction = absentsTimeSpan.TotalMinutes * minuteWage; + + } + + return sumSpans; + } + + /// + /// محاسبه تاخیر در ورورد و تعجیل در خروج + /// + /// + /// + /// + public List LateToWorkEarlyExit(List groupedRollCall, ICollection shiftSettings, List leavList) + { + List lateToWorkEarlyExistSpannig = new List(); + + foreach (var day in groupedRollCall) + { + + foreach (var shift in shiftSettings) + { + //DateTime start = DateTime.Parse(shift.StartTime); + //DateTime end = DateTime.Parse(shift.EndTime); + DateTime startShift = new DateTime(day.CreationDate.Year, day.CreationDate.Month, day.CreationDate.Day, shift.StartTime.Hour, shift.StartTime.Minute, 0); + DateTime endShift = new DateTime(day.CreationDate.Year, day.CreationDate.Month, day.CreationDate.Day, shift.EndTime.Hour, shift.EndTime.Minute, 0); + if (shift.StartTime > shift.EndTime) + endShift = endShift.AddDays(1); + + //اگر در بازه شیف تعیین شده حضور غیاب داشت + + var hasRollCall = day.ShiftList.Where(x => + (x.Start <= startShift && x.End > startShift) || + (x.Start >= startShift && x.End <= endShift) || + (x.Start > startShift && x.End > endShift)).ToList(); + + if (!hasRollCall.Any())// اگر در بازه شیفت هیچ حضور غیابی نداشت + { + lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() + { + StartSpan = startShift, + EndSpan = endShift, + Spanning = (endShift - startShift), + TypeOfSapn = shift.Placement == ShiftPlacement.First ? "LateToWork" : "EarlyExist" + }); + } + else if (hasRollCall.Count() == 1) + { + var singleHasRollCall = hasRollCall.FirstOrDefault(); + if (singleHasRollCall != null && singleHasRollCall.Start > startShift && + singleHasRollCall.End >= endShift) + { + lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() + { + StartSpan = startShift, + EndSpan = singleHasRollCall.Start, + Spanning = (singleHasRollCall.Start - startShift), + TypeOfSapn = "LateToWork" + }); + } + else if (singleHasRollCall != null && singleHasRollCall.Start <= startShift && + singleHasRollCall.End < endShift) + { + lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() + { + StartSpan = singleHasRollCall.End, + EndSpan = endShift, + Spanning = (endShift - singleHasRollCall.End), + TypeOfSapn = "EarlyExist" + }); + } + else if (singleHasRollCall != null && singleHasRollCall.Start > startShift && + singleHasRollCall.End < endShift) + { + lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() + { + StartSpan = startShift, + EndSpan = singleHasRollCall.Start, + Spanning = (singleHasRollCall.Start - startShift), + TypeOfSapn = "LateToWork" + }); + + lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() + { + StartSpan = singleHasRollCall.End, + EndSpan = endShift, + Spanning = (endShift - singleHasRollCall.End), + TypeOfSapn = "EarlyExist" + }); + } + } + else if (hasRollCall.Count() > 1) + { + var multiHasRollCall = hasRollCall.OrderBy(x => x.Start); + var firstRollcall = multiHasRollCall.First(); + var lastRollCall = multiHasRollCall.Last(); + + if (firstRollcall.Start > startShift && + firstRollcall.End >= endShift) + { + lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() + { + StartSpan = startShift, + EndSpan = firstRollcall.Start, + Spanning = (firstRollcall.Start - startShift), + TypeOfSapn = "LateToWork" + }); + } + + if (lastRollCall.Start <= startShift && + lastRollCall.End < endShift) + { + lateToWorkEarlyExistSpannig.Add(new LateToWorkEarlyExistSpannig() + { + StartSpan = lastRollCall.End, + EndSpan = endShift, + Spanning = (endShift - lastRollCall.End), + TypeOfSapn = "EarlyExist" + }); + } + } + } + } + + leavList = leavList.Where(x => x.PaidLeaveType == "ساعتی").ToList(); + // اگر تاخیر یا تعجیل به دلیل مرخصی ساعتی بود حساب نشود + if (leavList.Count > 0 && lateToWorkEarlyExistSpannig.Count > 0) + { + foreach (var el in lateToWorkEarlyExistSpannig.ToList()) + { + var hasLeve = leavList.Any(x => + (x.StartLeaveGr <= el.StartSpan && x.EndLeaveGr > el.StartSpan) || + (x.StartLeaveGr >= el.StartSpan && x.EndLeaveGr <= el.EndSpan) || + (x.StartLeaveGr > el.StartSpan && x.EndLeaveGr > el.EndSpan)); + if (hasLeve) + lateToWorkEarlyExistSpannig.Remove(el); + } + + } + + + return lateToWorkEarlyExistSpannig; + } + + #region Pooya + + public double CalculateFamilyAllowancePayAmount(long employeeId, double basePay, DateTime contractEnd) + { + int underageChildrenCount = _context.EmployeeChildrenSet.Where(x => x.EmployeeId == employeeId && + x.DateOfBirth.AddYears(18) > contractEnd).Count(); + return basePay * underageChildrenCount; + } + + //Deprecated + private TimeSpan CalculateOvertimeTimeSpanWithThreshold(List rollCalls, + ICollection shiftSettings, int overtimeThresholdMinutes) + { + + var mandatoryTotalTimeSpan = new TimeSpan(shiftSettings.Sum(x => (x.EndTime - x.StartTime).Ticks)); + mandatoryTotalTimeSpan += new TimeSpan(0, overtimeThresholdMinutes, 0); + + var rollCallsTimeSpans = rollCalls.Select(x => x.EndDate.Value - x.StartDate.Value).Where(x => x > mandatoryTotalTimeSpan).ToList(); + var rollCallTotalTimeSpan = new TimeSpan(rollCallsTimeSpans.Sum(x => x.Ticks)); + + if (rollCallTotalTimeSpan < mandatoryTotalTimeSpan) + return TimeSpan.Zero; + return rollCallTotalTimeSpan - mandatoryTotalTimeSpan; + } + + #region سنوات + + /// + /// فرمول اصلی محاسبه سنوات برای پرسنل در بازه زمانی با تنظیمات پیشرفته + /// + /// حقوق ماهیانه پرسنل + /// تنظیمات سنوات + /// تنظیم مربوط به پرداخت هنگام ترک کار + public double CalculateYearsPayAmount(long employeeId, long workshopId, double monthlySalary, DateTime contractStart, DateTime contractEnd, + BaseYearsPay baseYearsSettings, BaseYearsPayInEndOfYear payOnLeave, MaxMonthDays maxMonthDays) + { + double baseYearPayAmount = 0; + + + var leftWorks = _context.LeftWorkList + .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && + x.LeftWorkDate.Date.AddDays(-1) >= contractStart && x.StartWorkDate.Date <= contractEnd).ToList(); + + if (!leftWorks.Any()) + return 0; + + int daysWorked = (int)new TimeSpan(leftWorks.Select(x => new + { + Start = x.StartWorkDate < contractStart ? contractStart : x.StartWorkDate + , + End = x.LeftWorkDate.AddDays(-1) > contractEnd ? contractEnd : x.LeftWorkDate.AddDays(-1) + }).Sum(x => (x.End - x.Start).Ticks)).TotalDays + 1; + + bool hasLeftWork = leftWorks.MaxBy(x => x.LeftWorkDate).LeftWorkDate.AddDays(-1) < contractEnd; + + //محاسبه سنوات سالیانه + switch (baseYearsSettings.BaseYearsPayType) + { + case BaseYearsPayType.PercentageOfSalary: + { + baseYearPayAmount = monthlySalary * baseYearsSettings.Value / 100; + break; + } + case BaseYearsPayType.Money: + { + baseYearPayAmount = baseYearsSettings.Value; + break; + } + case BaseYearsPayType.None: + { + return 0; + } + } + + //در صورت ترک کار + if (hasLeftWork) + + { + switch (payOnLeave) + { + //اگر سنوات در آخر سال تعلق می گیرد ترک کار قبل از پایان دوره موجب صفر شدن آن میشود + case BaseYearsPayInEndOfYear.EndOfYear: + return 0; + + //اگر هنگام ترک کار سنوات تعلق می گیرد + case BaseYearsPayInEndOfYear.WhenEverEmployeeLeftWork: + { + + //بر اساس نوع پرداخت سالیانه یا ماهیانه سنوات محاسبه می گردد + switch (baseYearsSettings.PaymentType) + { + case BaseYearsPaymentType.MonthlyPay: + { + return CalculateYearsPayMonthlyByDays(baseYearPayAmount, daysWorked, contractStart.CountPersianMonthDays(), maxMonthDays); + } + case BaseYearsPaymentType.YearlyPay: + { + + return CalculateYearsPayYearlyByDays(baseYearPayAmount, daysWorked); + } + default: + return 0; + } + } + } + } + + //در صورت عدم ترک کار + switch (baseYearsSettings.PaymentType) + { + case BaseYearsPaymentType.MonthlyPay: + { + return CalculateYearsPayMonthlyByDays(baseYearPayAmount, daysWorked, contractStart.CountPersianMonthDays(), maxMonthDays); + } + case BaseYearsPaymentType.YearlyPay: + { + string contractEndFa = contractEnd.ToFarsi(); + bool isCheckoutForEsfand = contractEndFa.Substring(5, 2) == "12"; + bool isContractEndOfMonth = contractEndFa.FindeEndOfMonth() == contractEndFa; + + //اگر آخر ماه نبود یا اسفند نبود سنوات سالیانه محاسبه نمی گردد + if (isContractEndOfMonth == false || isCheckoutForEsfand == false) + return 0; + + return CalculateYearsPayYearlyByDays(baseYearPayAmount, daysWorked); + } + default: + return 0; + } + + } + + /// + /// محاسبه سنوات ماهیانه بر اساس روز های کارکرد + /// + /// سنوات در کل سال + /// روز های کارکرد + /// تعداد روز های ماه + public static double CalculateYearsPayMonthlyByDays(double baseYears, int daysWorked, int totalDaysInMonth, MaxMonthDays maxMonthDays) + { + daysWorked = maxMonthDays == MaxMonthDays.ThirtyDaysForAllMonth && daysWorked > 30 ? 30 : daysWorked; + totalDaysInMonth = maxMonthDays == MaxMonthDays.ThirtyDaysForAllMonth ? 30 : totalDaysInMonth; + return baseYears / 12 / totalDaysInMonth * daysWorked; + } + + /// + /// محاسبه سنوات سالیانه بر اساس روز های کارکرد + /// + /// سنوات در کل سال + /// روز های کارکرد + /// + /// + public static double CalculateYearsPayYearlyByDays(double baseYears, int daysWorked) + { + return baseYears / 365 * daysWorked; + } + #endregion + + + + //TODO: this must be updated with Mahan's method for leaves + /// + /// محاسبه مدت اضافه کاری + /// + public static TimeSpan CalculateOvertimeTimeSpan(List rollCalls, + ICollection shiftSettings, TimeOnly employeeOffSet) + { + + //for (DateTime offset = start; offset <= end; offset.AddDays(1)) + //{ + // DayOfWeek dayOfWeek = offset.DayOfWeek; + // switch (dayOfWeek) + // { + // case DayOfWeek.Thursday: + // shifts.Add(new ShiftViewModel { Start = offset.AddHours(9), End = offset.AddHours(14) }); + // break; + // case DayOfWeek.Friday: + // break; + // default: + // shifts.Add(new ShiftViewModel { Start = offset.AddHours(8), End = offset.AddHours(16) }); + // break; + // } + //} + + //if (!rollCalls.Any()) + // return TimeSpan.Zero; + //var startRollCall = rollCalls.MinBy(x => x.StartDate!.Value).StartDate!.Value; + //var endRollCall = rollCalls.Max(x => x.EndDate)!.Value; + + //DateTime startDateTime = new DateTime(DateOnly.FromDateTime(startRollCall), employeeOffSet); + //DateTime endDateTime = new DateTime(DateOnly.FromDateTime(endRollCall), employeeOffSet); + //endDateTime = endDateTime == startDateTime ? endDateTime.AddDays(1) : endDateTime; + + + var mandatoryPerDayTimeSpan = new TimeSpan(shiftSettings.Sum(x => (x.EndTime - x.StartTime).Ticks)); + + //bool isFirst = true; + + //var sumOfOverTime = TimeSpan.Zero; + + //for (var startDateOffset = startDateTime; startDateOffset <= endDateTime; startDateOffset = startDateOffset.AddDays(1)) + //{ + // IEnumerable rollCallViewModels; + // var startPeriod = startDateOffset; + // var endPeriod = startDateOffset.AddDays(1); + + // if (isFirst) + // { + // rollCallViewModels = rollCalls + // .Where(x => x.StartDate.Value > startPeriod.Date && x.EndDate.Value <= endPeriod); + // isFirst = false; + // } + // else + // { + // rollCallViewModels = rollCalls + // .Where(x => x.StartDate.Value > startPeriod && x.EndDate.Value <= endPeriod); + // } + + // var sum = rollCallViewModels.Sum(x => (x.EndDate.Value - x.StartDate.Value).Ticks); + // var rollCallTimeSpan = new TimeSpan(sum); + // if (rollCallTimeSpan > mandatoryPerDayTimeSpan) + // { + // var overTime = rollCallTimeSpan - mandatoryPerDayTimeSpan; + // sumOfOverTime = sumOfOverTime.Add(overTime); + // } + //} + + + //return sumOfOverTime; + + + var groupedRollCalls = rollCalls.GroupBy(x => x.StartDate!.Value.Date); + + + var rollCallsTimeSpans = groupedRollCalls.Where(x => + x.Sum(y => (y.EndDate!.Value - y.StartDate!.Value).Ticks) > mandatoryPerDayTimeSpan.Ticks) + .Select(x => x.Sum(y => (y.EndDate!.Value - y.StartDate!.Value).Ticks)).ToList(); + + var daysCount = rollCallsTimeSpans.Count(); + + var totalMandatoryTotalTimeSpan = mandatoryPerDayTimeSpan * daysCount; + var rollCallTotalTimeSpan = new TimeSpan(rollCallsTimeSpans.Sum(x => x)); + + if (rollCallTotalTimeSpan < totalMandatoryTotalTimeSpan) + return TimeSpan.Zero; + return rollCallTotalTimeSpan - totalMandatoryTotalTimeSpan; + } + + + public static TimeSpan CalculateOvertimeSpanWithSumSpan(TimeSpan sumSpan, int mandatoryDays, + ICollection shiftSettings) + { + var mandatoryPerDayTimeSpan = new TimeSpan(shiftSettings.Sum(x => (x.EndTime - x.StartTime).Ticks)); + var mandatoryWorkingTimeSpan = mandatoryPerDayTimeSpan * mandatoryDays; + if (mandatoryWorkingTimeSpan > sumSpan) + return TimeSpan.Zero; + + return sumSpan - mandatoryWorkingTimeSpan; + + } + + /// + /// محاسبه مبلغ اضافه کاری با استفاده از تنظیمات + /// + /// مدت اضافه کاری + /// تنظیمات اضافه کاری + /// مزد روزانه + /// + public static double CalculateOvertimePay(TimeSpan overtimeTimeSpan, OverTimePay overTimePaySettings, double dailyWage) + { + double baseAmount = overTimePaySettings.Value; + double result = 0; + switch (overTimePaySettings.OverTimePayType) + { + + case OverTimePayType.None: + break; + + + case OverTimePayType.MoneyPerHour: + { + int totalMinutes = (int)overtimeTimeSpan.TotalMinutes; + result = totalMinutes * (baseAmount / 60); + break; + } + + + case OverTimePayType.PercentagePerHourOfSalary: + { + int totalMinutes = (int)overtimeTimeSpan.TotalMinutes; + double multiplier = overTimePaySettings.Value / 100; + result = ((dailyWage * multiplier) / 60) * totalMinutes; + break; + } + + } + return result; + } + + /// + /// محاسبه مدت جمعه کاری بدون در نظر گرفتن اضافه کاری + /// + public static TimeSpan CalculateFridayWorkingTimeSpanWithoutOvertime(List rollCallsList, ICollection shiftSettings) + { + var _rollCallsList = rollCallsList; + _rollCallsList = _rollCallsList.Where(x => x.StartDate.Value.DayOfWeek == DayOfWeek.Friday || + x.EndDate.Value.DayOfWeek == DayOfWeek.Friday || + (x.StartDate.Value.DayOfWeek == DayOfWeek.Thursday && x.EndDate.Value.DayOfWeek == DayOfWeek.Saturday)).ToList(); + + var preprocessedRollCalls = _rollCallsList.Select(x => + new RollCallViewModel + { + StartDate = x.StartDate.Value.DayOfWeek == DayOfWeek.Thursday ? x.StartDate.Value.AddDays(1).Date : x.StartDate.Value + , + EndDate = x.EndDate.Value.DayOfWeek == DayOfWeek.Saturday ? x.EndDate.Value.Date : x.EndDate.Value + }).ToList(); + + //var timeSpan = new TimeSpan(preprocessedRollCalls.Sum(x => (x.EndDate.Value - x.StartDate.Value).Ticks)); + + var extraWorkingTimeSpan = CalculateOvertimeTimeSpan(preprocessedRollCalls, shiftSettings, new TimeOnly()); + var rollCallTimeSpan = CalculateFridayWorkingTimeSpan(preprocessedRollCalls); + + if (rollCallTimeSpan <= extraWorkingTimeSpan) + return TimeSpan.Zero; + return rollCallTimeSpan - extraWorkingTimeSpan; + + + } + + /// + /// محاسبه مدت جمعه کاری + /// + public static TimeSpan CalculateFridayWorkingTimeSpan(List rollCallsList) + { + var _rollCallsList = rollCallsList; + _rollCallsList = _rollCallsList.Where(x => x.StartDate.Value.DayOfWeek == DayOfWeek.Friday || + x.EndDate.Value.DayOfWeek == DayOfWeek.Friday || + (x.StartDate.Value.DayOfWeek == DayOfWeek.Thursday && x.EndDate.Value.DayOfWeek == DayOfWeek.Saturday)).ToList(); + + var preprocessedRollCalls = _rollCallsList.Select(x => + new + { + Start = x.StartDate.Value.DayOfWeek == DayOfWeek.Thursday ? x.StartDate.Value.AddDays(1).Date : x.StartDate.Value + , + End = x.EndDate.Value.DayOfWeek == DayOfWeek.Saturday ? x.EndDate.Value.Date : x.EndDate.Value + }).ToList(); + + var timeSpan = new TimeSpan(preprocessedRollCalls.Sum(x => (x.End - x.Start).Ticks)); + return timeSpan; + } + + /// + /// محاسبه روز های جمعه کاری + /// + public static int CalculateFridayWorkingTotalDays(List rollCallsList) + { + var _rollCallsList = rollCallsList; + _rollCallsList = _rollCallsList.Where(x => x.StartDate.Value.DayOfWeek == DayOfWeek.Friday || + x.EndDate.Value.DayOfWeek == DayOfWeek.Friday || + (x.StartDate.Value.DayOfWeek == DayOfWeek.Thursday && x.EndDate.Value.DayOfWeek == DayOfWeek.Saturday)).ToList(); + + var preprocessedRollCalls = _rollCallsList.Select(x => + new + { + Start = x.StartDate.Value.DayOfWeek == DayOfWeek.Thursday ? x.StartDate.Value.AddDays(1).Date : x.StartDate.Value + , + End = x.EndDate.Value.DayOfWeek == DayOfWeek.Saturday ? x.StartDate.Value.Date : x.EndDate.Value, + ShiftDate = x.ShiftDate + }).ToList(); + + int fridaysCount = preprocessedRollCalls.GroupBy(x => x.ShiftDate).Count(); + return fridaysCount; + } + + #endregion + + #endregion + + + public static (DateTime start, DateTime end) FindRotatingShift(DateTime startRollCall, DateTime endRollCall, + ICollection rotatingShifts) + { + DateTime startDate = startRollCall.Date; + DateTime endDate = endRollCall.Date; + + + + DateTime startEntryWithDate = startDate.Add(startRollCall.TimeOfDay); + DateTime endEntryWithDate = endDate.Add(endRollCall.TimeOfDay); + + DateTime twoHourBeforeStart = startEntryWithDate.AddHours(-2); + DateTime twoHourAfterStart = startEntryWithDate.AddHours(2); + DateTime twoHourBeforeEnd = endEntryWithDate.AddHours(-2); + DateTime twoHourAfterEnd = endEntryWithDate.AddHours(2); + + + var shiftDateTimes = rotatingShifts.SelectMany(shift => + { + var shifts = new List<(DateTime Start, DateTime End)>(); + for (int i = -1; i <= 1; i++) + { + var shiftStart = startDate.AddDays(i).Date; + shiftStart = shiftStart.Add(shift.StartTime.ToTimeSpan()); + var shiftEnd = shift.StartTime < shift.EndTime + ? startDate.AddDays(i).Date.Add(shift.EndTime.ToTimeSpan()) + : startDate.AddDays(i + 1).Date.Add(shift.EndTime.ToTimeSpan()); + shifts.Add((shiftStart, shiftEnd)); + } + + return shifts; + }).ToList(); + + #region مقایسه شروع حضور غیاب با شیفت + + //var startFilteredTimes = shiftDateTimes.Where(shift => + // (twoHourBeforeStart <= shift.Start && twoHourAfterStart >= shift.Start) || + // (twoHourBeforeStart <= shift.End && twoHourAfterStart >= shift.End)).ToList(); + + //if (startFilteredTimes.Count == 0) + //{ + // startFilteredTimes = shiftDateTimes; + //} + //else if (startFilteredTimes.Count == 1) + //{ + // var startChosenShift = startFilteredTimes.First(); + + // if (startChosenShift.End < startChosenShift.Start) + // startChosenShift.End = startChosenShift.End.AddDays(1); + + // return startChosenShift; + //} + + + //#endregion + + //#region مقایسه پایان حضورغیاب با شیفت + + //var endFilteredTimes = shiftDateTimes.Where(shift => + // (twoHourBeforeEnd <= shift.Start && twoHourAfterEnd >= shift.Start) || + // (twoHourBeforeEnd <= shift.End && twoHourAfterEnd >= shift.End)).ToList(); + //if (endFilteredTimes.Count == 0) + //{ + // endFilteredTimes = startFilteredTimes; + //} + //else if (endFilteredTimes.Count == 1) + //{ + // var endChosenShift = endFilteredTimes.First(); + // return endChosenShift; + //} + + #endregion + + #region اشتراک حضور غیاب و شیفت + + var overlapShifts = shiftDateTimes + .Select(shift => new + { + Shift = shift, + Overlap = new TimeSpan(Math.Max(0, + Math.Min(shift.End.Ticks, endRollCall.Ticks) - + Math.Max(shift.Start.Ticks, startRollCall.Ticks))), + // زمان حضور فرد در شیفت (مجموع Overlap با شیفت) + TotalTimeInShift = new TimeSpan(Math.Max(0, + Math.Min(shift.End.Ticks, endRollCall.Ticks) - + Math.Max(shift.Start.Ticks, startRollCall.Ticks))), + StartDistance = Math.Abs((shift.Start - startRollCall).Ticks), + EndDistance = Math.Abs((shift.End - endRollCall).Ticks), + TotalDistance = Math.Abs((shift.Start - startRollCall).Ticks) + Math.Abs((shift.End - endRollCall).Ticks) + }) + .OrderByDescending(s => s.TotalTimeInShift) // 1. بیشترین زمان حضور فرد + .ThenByDescending(s => s.Overlap) // 2. بیشترین Overlap + .ThenBy(s => s.TotalDistance) + .ThenBy(s => s.StartDistance) + .ThenBy(x => x.EndDistance); // 3. اگر برابر بود، Start نزدیک‌تر + + var overlapChosenShift = overlapShifts.First(); + var end = overlapChosenShift.Shift.End; + if (overlapChosenShift.Shift.End < overlapChosenShift.Shift.Start) + end = overlapChosenShift.Shift.End.AddDays(1); + + + return (overlapChosenShift.Shift.Start, end); + + #endregion + } + #endregion } enum AbsentOrLeave { - LeavePay, - AbsentDeduction + LeavePay, + AbsentDeduction } internal class EmployeeShiftResult { - public ShiftPlacement Placement { get; set; } - public TimeSpan ShiftSpan { get; set; } + public ShiftPlacement Placement { get; set; } + public TimeSpan ShiftSpan { get; set; } } internal class StaticShiftStartEnd { - public DateTime StartShift { get; set; } - public DateTime EndShift { get; set; } - public TimeSpan ShiftSpanning { get; set; } - public bool HasValue { get; set; } - public string ShiftType { get; set; } + public DateTime StartShift { get; set; } + public DateTime EndShift { get; set; } + public TimeSpan ShiftSpanning { get; set; } + public bool HasValue { get; set; } + public string ShiftType { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/RollCallRepository.cs b/CompanyManagment.EFCore/Repository/RollCallRepository.cs index 2f384a23..a54f063c 100644 --- a/CompanyManagment.EFCore/Repository/RollCallRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallRepository.cs @@ -151,6 +151,7 @@ public class RollCallRepository : RepositoryBase, IRollCallRepos //حضور غیاب در پرینت فیش حقوقی رسمی public List GetEmployeeRollCallsForMonth(long employeeId, long workshopId, DateTime startMonthDay, DateTime endMonthDay) { + var firstDayOfMonth = $"{startMonthDay.ToFarsi().Substring(0,8)}01".ToGeorgianDateTime(); //گرفتن ساعت استراحت پرسنل از تنظیمات #region breakTime @@ -169,8 +170,8 @@ public class RollCallRepository : RepositoryBase, IRollCallRepos x.WorkshopId == workshopId && x.EmployeeId == employeeId && x.EndLeave.Date >= startMonthDay.Date && x.StartLeave.Date <= endMonthDay.Date).ToList(); - var year = Convert.ToInt32(startMonthDay.ToFarsi().Substring(0, 4)); - var month = Convert.ToInt32(startMonthDay.ToFarsi().Substring(5, 2)); + var year = Convert.ToInt32(firstDayOfMonth.ToFarsi().Substring(0, 4)); + var month = Convert.ToInt32(firstDayOfMonth.ToFarsi().Substring(5, 2)); var firstDayOfCurrentMonth = new DateTime(year, month, 1, new PersianCalendar()); @@ -193,7 +194,7 @@ public class RollCallRepository : RepositoryBase, IRollCallRepos HolidayYear = startMonthDay.ToFarsiYear() }); //all the dates from start to end, to be compared with present days to get absent dates - var completeDaysList = Enumerable.Range(0, dateRange).Select(offset => startMonthDay.AddDays(offset).Date).ToList(); + var completeDaysList = Enumerable.Range(0, dateRange).Select(offset => firstDayOfCurrentMonth.AddDays(offset).Date).ToList(); var absentRecords = completeDaysList .ExceptBy(rollCalls.Select(x => x.ShiftDate.Date), y => y.Date) diff --git a/CompanyManagment.EFCore/TestDbContext.cs b/CompanyManagment.EFCore/TestDbContext.cs new file mode 100644 index 00000000..273b36bd --- /dev/null +++ b/CompanyManagment.EFCore/TestDbContext.cs @@ -0,0 +1,44 @@ +using Company.Domain.InsuranceJobItemAgg; +using Company.Domain.InsurancJobAgg; +using Company.Domain.RollCallAgg; +using CompanyManagment.EFCore.Mapping; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg.Entities; +using Company.Domain.CustomizeWorkshopSettingsAgg.Entities; +using CompanyManagment.EFCore.Migrations; + +namespace CompanyManagment.EFCore +{ + public class TestDbContext : DbContext + { + public DbSet InsuranceJobItems { get; set; } + public DbSet InsuranceJobs { get; set; } + public DbSet CustomizeWorkshopEmployeeSettings { get; set; } + public DbSet CustomizeWorkshopSettings { get; set; } + + public TestDbContext(DbContextOptions options) : base(options) + { + + } + + + public TestDbContext() + { + + } + + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + var assembly = typeof(PersonalContractingpartyMapping).Assembly; + modelBuilder.ApplyConfigurationsFromAssembly(assembly); + base.OnModelCreating(modelBuilder); + + } + } +} diff --git a/PersonalContractingParty.Config/TestDbBootStrapper.cs b/PersonalContractingParty.Config/TestDbBootStrapper.cs new file mode 100644 index 00000000..a326df20 --- /dev/null +++ b/PersonalContractingParty.Config/TestDbBootStrapper.cs @@ -0,0 +1,21 @@ +using Company.Domain.InsuranceJobItemAgg; +using Company.Domain.InsurancJobAgg; +using CompanyManagment.App.Contracts.InsuranceJob; +using CompanyManagment.Application; +using CompanyManagment.EFCore; +using CompanyManagment.EFCore.Repository; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; + +namespace PersonalContractingParty.Config; + +public class TestDbBootStrapper +{ + public static void Configure(IServiceCollection services, string connectionString) + { + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddDbContext(x => x.UseSqlServer(connectionString)); + } +} \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml index 355fd8fb..d117d737 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml @@ -381,8 +381,7 @@ method="get" data-ajax="true" data-ajax-method="get" - data-ajax-update="#mainPanel" - data-ajax-mode="replace" + data-ajax-update="#mainPanel"data-ajax-mode="replace" data-ajax-url="@Url.Page("./CheckoutPrintAll", "PrintAll")"> @for (var j = 0; j < btn.CheckoutIdList.Count; j++) { diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/PrintDetailsRollCall.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/PrintDetailsRollCall.cshtml index ad54784b..4e9378ab 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/PrintDetailsRollCall.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/PrintDetailsRollCall.cshtml @@ -412,7 +412,7 @@ {
- غیبت + غیبت
@@ -434,7 +434,7 @@ {
- + @Model.MonthlyRollCall[i].LeaveType
@@ -499,7 +499,7 @@ {
- غیبت + غیبت
@@ -521,7 +521,7 @@ {
- + @day.LeaveType
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/_Partials/PrintDetailsRollCallRaw.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/_Partials/PrintDetailsRollCallRaw.cshtml index d8a3ccab..d85c27f1 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/_Partials/PrintDetailsRollCallRaw.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/_Partials/PrintDetailsRollCallRaw.cshtml @@ -394,7 +394,7 @@ {
- غیبت + غیبت
@@ -481,7 +481,7 @@ {
- غیبت + غیبت
diff --git a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/CopyFromLastYear.cshtml b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/CopyFromLastYear.cshtml new file mode 100644 index 00000000..aa425437 --- /dev/null +++ b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/CopyFromLastYear.cshtml @@ -0,0 +1,95 @@ +@model CompanyManagment.App.Contracts.InsuranceJob.CopyFromLastYearViewModel +@{ + +} + + +
+ + @**@ + + +
+ \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/Create.cshtml b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/Create.cshtml index 25f843fc..4cb367fc 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/Create.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/Create.cshtml @@ -25,12 +25,31 @@ -
- - -
+
+ + +
+ + @*
+ +
+
+ +
*@ +
+
+
-
+ + +
+ +
+
+ +
@@ -97,7 +116,8 @@ - + + // } - - - - - - - // + + + + + + + + // } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/Index.cshtml index 5d919a26..005b46a9 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/Index.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/Index.cshtml @@ -5,11 +5,26 @@
@@ -96,9 +111,11 @@
- + + - + + @@ -109,19 +126,26 @@ @foreach (var item in Model.InsuranceJobList) { - + + - + + @@ -175,8 +199,13 @@ headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() }, data: { "id": id }, success: function(response) { - $.Notification.autoHideNotify('success', 'top center', 'پیام سیستم ', response.message); - $('.btn-success').click(); + if(response.isSuccedded){ + $.Notification.autoHideNotify('success', 'top center', 'پیام سیستم ', response.message); + window.location.reload(); + }else{ + $.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', response.message); + } + }, failure: function(response) { $.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', response.message); diff --git a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/Index.cshtml.cs index b7581bf7..783016d3 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJob/Index.cshtml.cs @@ -6,6 +6,7 @@ using CompanyManagment.App.Contracts.YearlySalary; using MD.PersianDateTime.Standard; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.AspNetCore.Mvc.Rendering; namespace ServiceHost.Areas.Admin.Pages.Company.InsuranceJob; @@ -36,7 +37,11 @@ public class IndexModel : PageModel public void OnGet(InsuranceJobSearchModel searchModel) { - YearlyList = _yearlySalaryApplication.GetYears(); + if(!string.IsNullOrWhiteSpace(searchModel.Year)) + Console.WriteLine(searchModel.Year); + if (!string.IsNullOrWhiteSpace(searchModel.Month)) + Console.WriteLine(searchModel.Month); + YearlyList = _yearlySalaryApplication.GetYears(); var insuranceJobs = _insuranceJobApplication.Search(searchModel); InsuranceJobList = insuranceJobs; @@ -44,10 +49,14 @@ public class IndexModel : PageModel public IActionResult OnGetCreate() { - var model = new CreateInsuranceJob + var dats = _insuranceJobApplication.GetOldYersInsuranceItemIds() + .Select(x => new { Id = x.id, Date = x.date }) + .ToList(); + var model = new CreateInsuranceJob { // Jobs = _jobApplication.GetJob() }; + model.InsuranceJobItemViewModels = new SelectList(dats, "Id", "Date"); return Partial("./Create", model); } @@ -57,17 +66,43 @@ public class IndexModel : PageModel return new JsonResult(result); } - //public async Task OnPostJobListByText(string textSearch) - //{ - // var jobs = _jobApplication.GetJobListByText(textSearch); - // return new JsonResult(new - // { - // IsSuccedded = true, - // mylist = jobs, - // }); - //} + public IActionResult OnGetCopyFromLastYear() + { + var dats = _insuranceJobApplication.GetOldYersInsuranceItemIds() + .Select(x => new { Id = x.id, Date = x.date }) + .ToList(); + var model = new CopyFromLastYearViewModel() + { + InsuranceJobItemId = 0, + StartDate = "", + EndDate = "", + InsuranceJobItemViewModels = new SelectList(dats,"Id", "Date"), + }; + return Partial("./CopyFromLastYear", model); + } + public IActionResult OnPostCopyFromLastYear(CopyFromLastYearViewModel commnad) + { + var res = _insuranceJobApplication.CopyFromLastYear(commnad); + return new JsonResult(res); + } - public IActionResult OnPostJobListByText(string textSearch) + public IActionResult OnGetOldDataRecovery1403() + { + var res = _insuranceJobApplication.RecoveryOldData1403(); + + return new JsonResult(res); + } + //public async Task OnPostJobListByText(string textSearch) + //{ + // var jobs = _jobApplication.GetJobListByText(textSearch); + // return new JsonResult(new + // { + // IsSuccedded = true, + // mylist = jobs, + // }); + //} + + public IActionResult OnPostJobListByText(string textSearch) { var jobs = _jobApplication.GetJobListByText(textSearch); @@ -99,9 +134,9 @@ public class IndexModel : PageModel }); } - public IActionResult OnGetDetails(long id) + public IActionResult OnGetDetails(long id, string year, string month) { - var details = _insuranceJobApplication.GetDetails(id); + var details = _insuranceJobApplication.GetDetails(id, year, month); return Partial("Details", details); } @@ -157,15 +192,18 @@ public class IndexModel : PageModel return new JsonResult(result); } - public IActionResult OnGetEdit(long id) + public IActionResult OnGetEdit(long id,string year, string month) { var model = new EditInsuranceJob(); - model = _insuranceJobApplication.GetDetails(id); + model = _insuranceJobApplication.GetDetails(id, year, month); + model.Year = year; + model.Month = month; return Partial("./Edit", model); } public IActionResult OnPostEdit(EditInsuranceJob command) { + var result = _insuranceJobApplication.Edit(command); return new JsonResult(result); } diff --git a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJobItem/Edit.cshtml b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJobItem/Edit.cshtml index b0d97249..fc9c5bc6 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJobItem/Edit.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJobItem/Edit.cshtml @@ -1,5 +1,14 @@ @model CompanyManagment.App.Contracts.DateSalary.CreateDateSalaryForInsuranceJob - +@{ + +} @Html.AntiForgeryToken()
@@ -9,10 +18,10 @@
- +
- +
## سال عنوان صنف و درجه کد اقتصادی کد اقتصادی عملیات
@index @index + + + @item.Year + +

@item.InsuranceJobTitle

@item.InsuranceJobTitle
-
-

@item.EconomicCode

- @item.EconomicCode -
-
+
+

@item.EconomicCode

+ @item.EconomicCode +
+
@@ -131,7 +155,7 @@ + href="#showmodal=@Url.Page("./Index", "Edit", new { item.Id, item.Year, item.Month })">
diff --git a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJobItem/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJobItem/Index.cshtml index b23e5ce0..b80be8d7 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJobItem/Index.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJobItem/Index.cshtml @@ -5,9 +5,9 @@
@@ -118,9 +118,9 @@
@item.StartDateFa @item.EndDateFa - + @* - + *@ diff --git a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJobItem/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJobItem/Index.cshtml.cs index bb569b99..059cf6f1 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/InsuranceJobItem/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/InsuranceJobItem/Index.cshtml.cs @@ -65,20 +65,20 @@ public class IndexModel : PageModel var searchModelPercentage = new PercentageSearchModel(); var percentageList = _percentageApplication.Search(searchModelPercentage); - var percentagIds = dateSalaryItems.Select(x => x.PercentageId).ToList(); - var percentages = percentageList.Where(x => !percentagIds.Contains(x.Id)).ToList(); + //var percentagIds = dateSalaryItems.Select(x => x.PercentageId).ToList(); + //var percentages = percentageList.Where(x => !percentagIds.Contains(x.Id)).ToList(); - foreach (var item in percentages) - { - var obj = new DateSalaryItemViewModel(); - obj.Percent = item.Percent; - obj.PercentageId = item.Id; - obj.Salary = null; - obj.DateSalaryId = id; - obj.Id = 0; - obj.StrSalary = ""; - dateSalaryItems.Add(obj); - } + //foreach (var item in percentages) + //{ + // var obj = new DateSalaryItemViewModel(); + // obj.Percent = item.Percent; + // obj.PercentageId = item.Id; + // obj.Salary = null; + // obj.DateSalaryId = id; + // obj.Id = 0; + // obj.StrSalary = ""; + // dateSalaryItems.Add(obj); + //} var list = new CreateDateSalaryForInsuranceJob(); list.EndDateFa = dateSalary.EndDateFa; diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs index 68fef39a..5dd119ce 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs @@ -109,7 +109,7 @@ public class AutoExtensionModel : PageModel { WorkshopId = id }; - var LeftWorkList = _leftWorkApplication.search(LeftWorkSerchModel); + var LeftWorkList = _leftWorkApplication.SearchCreateContract(LeftWorkSerchModel); var personnelCodeSearch = new PersonnelCodeSearchModel { WorkshopId = id diff --git a/ServiceHost/Areas/Client/Pages/Company/Checkouts/PrintOneRollCall.cshtml b/ServiceHost/Areas/Client/Pages/Company/Checkouts/PrintOneRollCall.cshtml index 48ac68cc..95808c9c 100644 --- a/ServiceHost/Areas/Client/Pages/Company/Checkouts/PrintOneRollCall.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/Checkouts/PrintOneRollCall.cshtml @@ -166,7 +166,7 @@
-
+
diff --git a/ServiceHost/Areas/Client/Pages/Company/Employees/CreateEmployeeModal.cshtml b/ServiceHost/Areas/Client/Pages/Company/Employees/CreateEmployeeModal.cshtml index 316a5378..3af32b06 100644 --- a/ServiceHost/Areas/Client/Pages/Company/Employees/CreateEmployeeModal.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/Employees/CreateEmployeeModal.cshtml @@ -44,14 +44,20 @@
+ @if (Model.HasCustomizeCheckoutService) + { +
+ +
+ }
- +
- +
- +
@@ -146,20 +152,53 @@ -
-
+ + @if (Model.HasCustomizeCheckoutService) + { +
+
+
+
+
+ +
+
+
+
+
+
+ + +
+
+ + +
+
+
+ } + + + +
+
- + @if (rollCallPath == "/Client/Company/RollCall/EmployeeUploadPicture") { } else { - + }
@@ -176,7 +215,7 @@ @if (rollCallPath != "/Client/Company/RollCall/EmployeeUploadPicture") { -
+
@@ -188,8 +227,8 @@
- - + +
@@ -203,8 +242,8 @@
-
-
+
+
@@ -215,8 +254,8 @@
- - + +
@@ -284,6 +323,8 @@ var workshopSettingListAjax = `@Url.Page("/Company/Employees/EmployeeList", "WorkshopSettingList")`; // EmployeeList Handler var workshopSettingListAjaxRollCall = `@Url.Page("/Company/RollCall/EmployeeUploadPicture", "WorkshopSettingList")`; // RollCall Handler var workshopSettingListAjaxHome = `@Url.Page("/Index", "WorkshopSettingList")`; // Home Handler + + var hasCustomizeCheckoutService = `@Model.HasCustomizeCheckoutService`; // @* var workshopSettingEmployeeSelecting = @Html.Raw(Json.Serialize(Model.EmployeeSettings)); *@ diff --git a/ServiceHost/Areas/Client/Pages/Company/Employees/EmployeeList.cshtml.cs b/ServiceHost/Areas/Client/Pages/Company/Employees/EmployeeList.cshtml.cs index 88c84993..3beef4f3 100644 --- a/ServiceHost/Areas/Client/Pages/Company/Employees/EmployeeList.cshtml.cs +++ b/ServiceHost/Areas/Client/Pages/Company/Employees/EmployeeList.cshtml.cs @@ -24,257 +24,260 @@ namespace ServiceHost.Areas.Client.Pages.Company.Employees [Authorize] [NeedsPermission(SubAccountPermissionHelper.PersonnelListPermissionCode)] public class EmployeeListModel : PageModel - { - private readonly IPasswordHasher _passwordHasher; - private readonly IWorkshopApplication _workshopApplication; - private readonly IEmployeeApplication _employeeApplication; - private readonly ICustomizeWorkshopSettingsApplication _customizeWorkshopSettingsApplication; - private readonly IPersonnelCodeApplication _personnelCodeApplication; - private readonly IHttpContextAccessor _contextAccessor; - private readonly IBankApplication _bankApplication; - private readonly IEmployeeBankInformationApplication _employeeBankInformationApplication; - private readonly IEmployeeDocumentsApplication _employeeDocumentsApplication; - private readonly IAuthHelper _authHelper; - private readonly IJobApplication _jobApplication; + { + private readonly IPasswordHasher _passwordHasher; + private readonly IWorkshopApplication _workshopApplication; + private readonly IEmployeeApplication _employeeApplication; + private readonly ICustomizeWorkshopSettingsApplication _customizeWorkshopSettingsApplication; + private readonly IPersonnelCodeApplication _personnelCodeApplication; + private readonly IHttpContextAccessor _contextAccessor; + private readonly IBankApplication _bankApplication; + private readonly IEmployeeBankInformationApplication _employeeBankInformationApplication; + private readonly IEmployeeDocumentsApplication _employeeDocumentsApplication; + private readonly IAuthHelper _authHelper; + private readonly IJobApplication _jobApplication; private readonly ILeftWorkTempApplication _leftWorkTempApplication; private readonly IRollCallServiceApplication _rollCallServiceApplication; private readonly long _workshopId; public PersonnelInfoViewModel Employees; - public bool HasEmployees; - public long WorkshopId; - public string WorkshopFullName; - public EmployeeSearchModel SearchModel; + public bool HasEmployees; + public long WorkshopId; + public string WorkshopFullName; + public EmployeeSearchModel SearchModel; - public EmployeeListModel(IBankApplication bankApplication,IEmployeeBankInformationApplication employeeBankInformationApplication,IEmployeeDocumentsApplication employeeDocumentsApplication,IAuthHelper authHelper,IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, IEmployeeApplication employeeApplication, IHttpContextAccessor contextAccessor, ICustomizeWorkshopSettingsApplication customizeWorkshopSettingsApplication, IPersonnelCodeApplication personnelCodeApplication, IJobApplication jobApplication, ILeftWorkTempApplication leftWorkTempApplication, IRollCallServiceApplication rollCallServiceApplication) - { - _passwordHasher = passwordHasher; - _workshopApplication = workshopApplication; - _employeeApplication = employeeApplication; - _contextAccessor = contextAccessor; - _customizeWorkshopSettingsApplication = customizeWorkshopSettingsApplication; - _personnelCodeApplication = personnelCodeApplication; - _jobApplication = jobApplication; - _leftWorkTempApplication = leftWorkTempApplication; - _rollCallServiceApplication = rollCallServiceApplication; - _authHelper = authHelper; - _employeeDocumentsApplication = employeeDocumentsApplication; - _employeeBankInformationApplication = employeeBankInformationApplication; - _bankApplication = bankApplication; + public EmployeeListModel(IBankApplication bankApplication, IEmployeeBankInformationApplication employeeBankInformationApplication, IEmployeeDocumentsApplication employeeDocumentsApplication, IAuthHelper authHelper, IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, IEmployeeApplication employeeApplication, IHttpContextAccessor contextAccessor, ICustomizeWorkshopSettingsApplication customizeWorkshopSettingsApplication, IPersonnelCodeApplication personnelCodeApplication, IJobApplication jobApplication, ILeftWorkTempApplication leftWorkTempApplication, IRollCallServiceApplication rollCallServiceApplication) + { + _passwordHasher = passwordHasher; + _workshopApplication = workshopApplication; + _employeeApplication = employeeApplication; + _contextAccessor = contextAccessor; + _customizeWorkshopSettingsApplication = customizeWorkshopSettingsApplication; + _personnelCodeApplication = personnelCodeApplication; + _jobApplication = jobApplication; + _leftWorkTempApplication = leftWorkTempApplication; + _rollCallServiceApplication = rollCallServiceApplication; + _authHelper = authHelper; + _employeeDocumentsApplication = employeeDocumentsApplication; + _employeeBankInformationApplication = employeeBankInformationApplication; + _bankApplication = bankApplication; - var workshopHash = _contextAccessor.HttpContext?.User.FindFirstValue("WorkshopSlug"); - _workshopId = _passwordHasher.SlugDecrypt(workshopHash); + var workshopHash = _contextAccessor.HttpContext?.User.FindFirstValue("WorkshopSlug"); + _workshopId = _passwordHasher.SlugDecrypt(workshopHash); - if (_workshopId < 1) - throw new InvalidDataException("اختلال در کارگاه"); + if (_workshopId < 1) + throw new InvalidDataException("اختلال در کارگاه"); } - public void OnGet() - { - var workshop = _workshopApplication.GetWorkshopInfo(_workshopId); - WorkshopFullName = workshop.WorkshopFullName; - WorkshopId = workshop.Id; + public void OnGet() + { + var workshop = _workshopApplication.GetWorkshopInfo(_workshopId); + WorkshopFullName = workshop.WorkshopFullName; + WorkshopId = workshop.Id; } - public IActionResult OnGetEmployeeListAjax(EmployeeSearchModel searchModel) - { - var personnelSearchModel = new PersonnelInfoSearchModel() - { - WorkshopId = _workshopId, - }; + public IActionResult OnGetEmployeeListAjax(EmployeeSearchModel searchModel) + { + var personnelSearchModel = new PersonnelInfoSearchModel() + { + WorkshopId = _workshopId, + }; - var result = _workshopApplication.GetPersonnelInfoRemastered(personnelSearchModel); + var result = _workshopApplication.GetPersonnelInfoRemastered(personnelSearchModel); - if (!string.IsNullOrWhiteSpace(searchModel.EmployeeFullName)) - result = result.Where(x => x.FullName.Contains(searchModel.EmployeeFullName)).ToList(); + if (!string.IsNullOrWhiteSpace(searchModel.EmployeeFullName)) + result = result.Where(x => x.FullName.Contains(searchModel.EmployeeFullName)).ToList(); - if (!string.IsNullOrWhiteSpace(searchModel.NationalCode)) - result = result.Where(x => x.NationalCode.Contains(searchModel.NationalCode)).ToList(); + if (!string.IsNullOrWhiteSpace(searchModel.NationalCode)) + result = result.Where(x => x.NationalCode.Contains(searchModel.NationalCode)).ToList(); - var resultData = new PersonnelInfoViewModel() - { - PersonnelInfoViewModels = result.OrderByDescending(x => x.CreatedByClient).ThenByDescending(x => x.LefWorkTemp).ThenBy(x => x.Black ? 1 : 0).ThenBy(x => x.PersonnelCode).ToList(), - }; + var resultData = new PersonnelInfoViewModel() + { + PersonnelInfoViewModels = result.OrderByDescending(x => x.CreatedByClient).ThenByDescending(x => x.LefWorkTemp).ThenBy(x => x.Black ? 1 : 0).ThenBy(x => x.PersonnelCode).ToList(), + }; - return new JsonResult(new - { - success = true, - data = resultData, - }); - } + return new JsonResult(new + { + success = true, + data = resultData, + }); + } - public IActionResult OnGetPrintOnePersonnelInfo(long employeeId) - { - var result = _employeeApplication.GetDetails(employeeId); - return Partial("PrintOnePersonnelInfo", result); - } + public IActionResult OnGetPrintOnePersonnelInfo(long employeeId) + { + var result = _employeeApplication.GetDetails(employeeId); + return Partial("PrintOnePersonnelInfo", result); + } - public IActionResult OnGetEmployeeDataByNationalCode(string nationalCode) - { - var workshopIds = _workshopApplication.GetWorkshopAccount().Select(workshop => workshop.Id).ToList(); + public IActionResult OnGetEmployeeDataByNationalCode(string nationalCode) + { + var workshopIds = _workshopApplication.GetWorkshopAccount().Select(workshop => workshop.Id).ToList(); var resultData = _employeeApplication.GetEmployeeByNationalCodeIfHasLeftWork(nationalCode, workshopIds); - return new JsonResult(new - { - success = true, - data = resultData, - }); + return new JsonResult(new + { + success = true, + data = resultData, + }); } - public IActionResult OnGetWorkshopSettingList() - { - var resultData = _customizeWorkshopSettingsApplication.GetWorkshopIncludeGroupsByWorkshopId(_workshopId); - if (resultData != null) - { - resultData.GroupSettings = resultData?.GroupSettings.Where(x => !x.MainGroup).ToList(); + public IActionResult OnGetWorkshopSettingList() + { + var resultData = _customizeWorkshopSettingsApplication.GetWorkshopIncludeGroupsByWorkshopId(_workshopId); + if (resultData != null) + { + resultData.GroupSettings = resultData?.GroupSettings.Where(x => !x.MainGroup).ToList(); } return new JsonResult(new - { - success = true, - data = resultData, - }); - } + { + success = true, + data = resultData, + }); + } public IActionResult OnGetCreateEmployee() { var command = new CreateEmployeeByClient(); command.PersonnelCode = (_personnelCodeApplication.GetLastPersonnelCodeByWorkshop(_workshopId) + 1).ToString(); - command.HasRollCallService = _rollCallServiceApplication.IsExistActiveServiceByWorkshopId(_workshopId); + var activeServiceByWorkshopId = _rollCallServiceApplication.GetActiveServiceByWorkshopId(_workshopId); + command.HasRollCallService = activeServiceByWorkshopId is { Id: > 0 }; + if (command.HasRollCallService) + command.HasCustomizeCheckoutService = activeServiceByWorkshopId.HasCustomizeCheckoutService == "true"; return Partial("CreateEmployeeModal", command); } public IActionResult OnPostCreateEmployee(CreateEmployeeByClient command) - { - command.WorkshopId = _workshopId; + { + command.WorkshopId = _workshopId; var result = _employeeApplication.CreateEmployeeByClient(command); - return new JsonResult(new - { - success = result.IsSuccedded, - message = result.Message, - }); - } + return new JsonResult(new + { + success = result.IsSuccedded, + message = result.Message, + }); + } - public async Task OnGetEmployeeDetailsWithNationalCode(string nationalCode,string birthDate) - { + public async Task OnGetEmployeeDetailsWithNationalCode(string nationalCode, string birthDate) + { var result = await _employeeApplication.ValidateCreateEmployeeClientByNationalCodeAndWorkshopId(nationalCode, birthDate, _workshopId); return new JsonResult(result); - } + } - public IActionResult OnGetJobSearch(string jobName) - { - var jobViewModels = _jobApplication.GetJobListByText(jobName); + public IActionResult OnGetJobSearch(string jobName) + { + var jobViewModels = _jobApplication.GetJobListByText(jobName); - return new JsonResult(jobViewModels); - } + return new JsonResult(jobViewModels); + } - //step 4 - public IActionResult OnGetDetailsAjax(long employeeId) - { - var resultData = _employeeBankInformationApplication.GetByEmployeeId(_workshopId, employeeId); - return new JsonResult(new - { - success = true, - data = resultData - }); - } - //public IActionResult OnPostCreate(CreateEmployeeInformation command) - //{ - // command.WorkshopId = _workshopId; - // if (!string.IsNullOrWhiteSpace(command.CardNumber)) - // command.CardNumber = command.CardNumber.Replace("-", ""); + //step 4 + public IActionResult OnGetDetailsAjax(long employeeId) + { + var resultData = _employeeBankInformationApplication.GetByEmployeeId(_workshopId, employeeId); + return new JsonResult(new + { + success = true, + data = resultData + }); + } + //public IActionResult OnPostCreate(CreateEmployeeInformation command) + //{ + // command.WorkshopId = _workshopId; + // if (!string.IsNullOrWhiteSpace(command.CardNumber)) + // command.CardNumber = command.CardNumber.Replace("-", ""); - // if (!string.IsNullOrWhiteSpace(command.ShebaNumber)) - // command.ShebaNumber = command.ShebaNumber.Replace("-", ""); + // if (!string.IsNullOrWhiteSpace(command.ShebaNumber)) + // command.ShebaNumber = command.ShebaNumber.Replace("-", ""); - // var result = _employeeBankInformationApplication.Create(command); - // return new JsonResult(new - // { - // success = result.IsSuccedded, - // message = result.Message, - // id = result.SendId - // }); - //} - //public IActionResult OnPostDelete(long id) - //{ - // var result = _employeeBankInformationApplication.Remove(id); - // return new JsonResult(new - // { - // success = result.IsSuccedded, - // message = result.Message, - // }); - //} + // var result = _employeeBankInformationApplication.Create(command); + // return new JsonResult(new + // { + // success = result.IsSuccedded, + // message = result.Message, + // id = result.SendId + // }); + //} + //public IActionResult OnPostDelete(long id) + //{ + // var result = _employeeBankInformationApplication.Remove(id); + // return new JsonResult(new + // { + // success = result.IsSuccedded, + // message = result.Message, + // }); + //} - public IActionResult OnGetBankListAjax() - { - var resultData = _bankApplication.Search(""); - return new JsonResult(new - { - success = true, - data = resultData, - }); - } + public IActionResult OnGetBankListAjax() + { + var resultData = _bankApplication.Search(""); + return new JsonResult(new + { + success = true, + data = resultData, + }); + } - //public IActionResult OnPostGroupCreate(List command) - //{ - // var result = _employeeBankInformationApplication.GroupCreate(_workshopId, command); - // return new JsonResult(new - // { - // success = result.IsSuccedded, - // message = result.Message, - // id = result.SendId - // }); - //} + //public IActionResult OnPostGroupCreate(List command) + //{ + // var result = _employeeBankInformationApplication.GroupCreate(_workshopId, command); + // return new JsonResult(new + // { + // success = result.IsSuccedded, + // message = result.Message, + // id = result.SendId + // }); + //} - //step 5 - public IActionResult OnPostCreateUploadDocument(AddEmployeeDocumentItem command) - { - var workshopHash = User.FindFirstValue("WorkshopSlug"); - var workshopId = _passwordHasher.SlugDecrypt(workshopHash); - if (workshopId <= 0) - return new JsonResult(new - { - IsSuccedded = false, - message = "کارگاهی یافت نشد", - }); - command.WorkshopId = workshopId; + //step 5 + public IActionResult OnPostCreateUploadDocument(AddEmployeeDocumentItem command) + { + var workshopHash = User.FindFirstValue("WorkshopSlug"); + var workshopId = _passwordHasher.SlugDecrypt(workshopHash); + if (workshopId <= 0) + return new JsonResult(new + { + IsSuccedded = false, + message = "کارگاهی یافت نشد", + }); + command.WorkshopId = workshopId; - var result = _employeeDocumentsApplication.AddEmployeeDocumentItemForClient(command); - var employeeDocument = _employeeDocumentsApplication.GetDetailsForClient(command.EmployeeId, workshopId); - return new JsonResult(new - { - isSuccedded = result.IsSuccedded, - message = result.Message, - imageSrc = employeeDocument - }); - } - - //public IActionResult OnPostSaveSubmit(SubmitEmployeeDocuments cmd) - //{ - // var result = _employeeDocumentsApplication.SubmitDocumentItemsByClient(cmd); + var result = _employeeDocumentsApplication.AddEmployeeDocumentItemForClient(command); + var employeeDocument = _employeeDocumentsApplication.GetDetailsForClient(command.EmployeeId, workshopId); + return new JsonResult(new + { + isSuccedded = result.IsSuccedded, + message = result.Message, + imageSrc = employeeDocument + }); + } - // return new JsonResult(new - // { - // isSuccedded = result.IsSuccedded, - // message = result.Message, - // }); - //} + //public IActionResult OnPostSaveSubmit(SubmitEmployeeDocuments cmd) + //{ + // var result = _employeeDocumentsApplication.SubmitDocumentItemsByClient(cmd); - //public IActionResult OnPostRemoveEmployeeDocumentByLabel(long employeeId, DocumentItemLabel label) - //{ - // var workshopId = _passwordHasher.SlugDecrypt(_authHelper.GetWorkshopSlug()); + // return new JsonResult(new + // { + // isSuccedded = result.IsSuccedded, + // message = result.Message, + // }); + //} - // var result = _employeeDocumentsApplication.DeleteEmployeeMultipleUnsubmittedDocumentsByLabel(workshopId, employeeId, - // label); - // return new JsonResult(new - // { - // isSuccedded = result.IsSuccedded, - // message = result.Message - // }); - //} + //public IActionResult OnPostRemoveEmployeeDocumentByLabel(long employeeId, DocumentItemLabel label) + //{ + // var workshopId = _passwordHasher.SlugDecrypt(_authHelper.GetWorkshopSlug()); + + // var result = _employeeDocumentsApplication.DeleteEmployeeMultipleUnsubmittedDocumentsByLabel(workshopId, employeeId, + // label); + // return new JsonResult(new + // { + // isSuccedded = result.IsSuccedded, + // message = result.Message + // }); + //} #region Left Work public IActionResult OnGetCreateLeftWorkEmployee() @@ -282,7 +285,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.Employees var command = new CreateLeftWorkTemp(); return Partial("ModalCreateLeftWorkEmployee", command); } - + public async Task OnGetEmployeeList() { var employees = await _employeeApplication.WorkedEmployeesInWorkshopSelectList(_workshopId); @@ -293,13 +296,12 @@ namespace ServiceHost.Areas.Client.Pages.Company.Employees data = employees }); } - public async Task OnGetEmployeeListLeftWorkTemp() { var exists = _leftWorkTempApplication.GetLeftWorksByWorkshopId(_workshopId); var employees = (await _employeeApplication.WorkedEmployeesInWorkshopSelectList(_workshopId)) - .Where(x=> exists.All(a => a.EmployeeId != x.Id)).ToList(); + .Where(x => exists.All(a => a.EmployeeId != x.Id)).ToList(); return new JsonResult(new { diff --git a/ServiceHost/Areas/Client/Pages/Company/Employees/_Partials/TempCheckout.cshtml b/ServiceHost/Areas/Client/Pages/Company/Employees/_Partials/TempCheckout.cshtml new file mode 100644 index 00000000..5234dbdc --- /dev/null +++ b/ServiceHost/Areas/Client/Pages/Company/Employees/_Partials/TempCheckout.cshtml @@ -0,0 +1,69 @@ +@model CompanyManagment.App.Contracts.Employee.CreateEmployeeByClient + + +@{ + string clientVersion = _0_Framework.Application.Version.StyleVersion; + + + + +} +@* +
+
+

ایجاد شماره حساب پرسنل

+
+
*@ + +
+
+ +
+ نام گروه + +
+ +
+ حقوق تعیین شده در این گروه + +
+ +
+ مرخصی مجاز تعیین شده در این گروه + +
+ +
+ حقوق پرسنل + +
+
+ مجاز مرخصی + +
+ +
+
+ به دلیل عدم انتخاب گروهبندی حضور و غیاب، امکان ثبت حقوق برای پرسنل وجود ندارد. +
+
+
+
+ + + diff --git a/ServiceHost/Areas/Client/Pages/Company/RollCall/EmployeeUploadPicture.cshtml.cs b/ServiceHost/Areas/Client/Pages/Company/RollCall/EmployeeUploadPicture.cshtml.cs index 2a707653..1627d993 100644 --- a/ServiceHost/Areas/Client/Pages/Company/RollCall/EmployeeUploadPicture.cshtml.cs +++ b/ServiceHost/Areas/Client/Pages/Company/RollCall/EmployeeUploadPicture.cshtml.cs @@ -732,6 +732,10 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall var command = new CreateEmployeeByClient(); command.PersonnelCode = (_personnelCodeApplication.GetLastPersonnelCodeByWorkshop(_workshopId) + 1).ToString(); command.HasRollCallService = _rollCallServiceApplication.IsExistActiveServiceByWorkshopId(_workshopId); + var activeServiceByWorkshopId = _rollCallServiceApplication.GetActiveServiceByWorkshopId(_workshopId); + command.HasRollCallService = activeServiceByWorkshopId is { Id: > 0 }; + if (command.HasRollCallService) + command.HasCustomizeCheckoutService = activeServiceByWorkshopId.HasCustomizeCheckoutService == "true"; return Partial("../Employees/CreateEmployeeModal", command); } diff --git a/ServiceHost/Areas/Client/Pages/Index.cshtml.cs b/ServiceHost/Areas/Client/Pages/Index.cshtml.cs index e0ed3c12..f74ce55e 100644 --- a/ServiceHost/Areas/Client/Pages/Index.cshtml.cs +++ b/ServiceHost/Areas/Client/Pages/Index.cshtml.cs @@ -558,7 +558,10 @@ namespace ServiceHost.Areas.Client.Pages long workshopIDecrypt = _passwordHasher.SlugDecrypt(workshopSlug); var command = new CreateEmployeeByClient(); command.PersonnelCode = (_personnelCodeApplication.GetLastPersonnelCodeByWorkshop(workshopIDecrypt) + 1).ToString(); - command.HasRollCallService = _rollCallServiceApplication.IsExistActiveServiceByWorkshopId(workshopIDecrypt); + var activeServiceByWorkshopId = _rollCallServiceApplication.GetActiveServiceByWorkshopId(workshopIDecrypt); + command.HasRollCallService = activeServiceByWorkshopId is { Id: > 0 }; + if (command.HasRollCallService) + command.HasCustomizeCheckoutService = activeServiceByWorkshopId.HasCustomizeCheckoutService == "true"; return Partial("./Company/Employees/CreateEmployeeModal", command); } diff --git a/ServiceHost/Program.cs b/ServiceHost/Program.cs index 1fb91c13..d2dada1e 100644 --- a/ServiceHost/Program.cs +++ b/ServiceHost/Program.cs @@ -35,7 +35,9 @@ builder.Services.AddRazorPages() builder.Services.AddHttpContextAccessor(); builder.Services.AddHttpClient("holidayApi", c => c.BaseAddress = new System.Uri("https://api.github.com")); var connectionString = builder.Configuration.GetConnectionString("MesbahDb"); +var connectionStringTestDb = builder.Configuration.GetConnectionString("TestDb"); PersonalBootstrapper.Configure(builder.Services, connectionString); +TestDbBootStrapper.Configure(builder.Services, connectionStringTestDb); AccountManagementBootstrapper.Configure(builder.Services, connectionString); WorkFlowBootstrapper.Configure(builder.Services, connectionString); QueryBootstrapper.Configure(builder.Services); diff --git a/ServiceHost/appsettings.Development.json b/ServiceHost/appsettings.Development.json index 3e31959e..df354fd1 100644 --- a/ServiceHost/appsettings.Development.json +++ b/ServiceHost/appsettings.Development.json @@ -12,14 +12,18 @@ //"MesbahDb": "Data Source=DESKTOP-NUE119G\\MSNEW;Initial Catalog=Mesbah_db;Integrated Security=True" //server - //"MesbahDb": "Data Source=171.22.24.15;Initial Catalog=mesbah_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]is[3019]#@ATt;TrustServerCertificate=true;" + //"MesbahDb": "Data Source=171.22.24.15;Initial Catalog=mesbah_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]is[3019]#@ATt;TrustServerCertificate=true;", + //local - "MesbahDb": "Data Source=.;Initial Catalog=mesbah_db;Integrated Security=True;TrustServerCertificate=true;" + "MesbahDb": "Data Source=.;Initial Catalog=mesbah_db;Integrated Security=True;TrustServerCertificate=true;", + + "TestDb": "Data Source=.;Initial Catalog=TestDb;Integrated Security=True;TrustServerCertificate=true;" //mahan Docker //"MesbahDb": "Data Source=localhost,5069;Initial Catalog=mesbah_db;User ID=sa;Password=YourPassword123;TrustServerCertificate=True;" }, + "GoogleRecaptchaV3": { "SiteKey": "6Lfhp_AnAAAAAB79WkrMoHd1k8ir4m8VvfjE7FTH", "SecretKey": "6Lfhp_AnAAAAANjDDY6DPrbbUQS7k6ZCRmrVP5Lb" diff --git a/ServiceHost/appsettings.json b/ServiceHost/appsettings.json index 370e2d3c..b5c17e38 100644 --- a/ServiceHost/appsettings.json +++ b/ServiceHost/appsettings.json @@ -8,7 +8,10 @@ }, "ConnectionStrings": { //"MesbahDb": "Data Source=.\\MSSQLSERVER2019;Initial Catalog=mesbah_db;Persist Security Info=False;User ID=mesbah_db;Password=sa142857$@;" - "MesbahDb": "Data Source=.;Initial Catalog=mesbah_db;Integrated Security=True;TrustServerCertificate=true;" + "MesbahDb": "Data Source=.;Initial Catalog=mesbah_db;Integrated Security=True;TrustServerCertificate=true;", + + //testDb + "TestDb": "Data Source=.;Initial Catalog=TestDb;Integrated Security=True;TrustServerCertificate=true;" }, "BackupOptions": { "DbName": "mesbah_db", diff --git a/ServiceHost/wwwroot/AdminTheme/css/create-insurance-jobs.css b/ServiceHost/wwwroot/AdminTheme/css/create-insurance-jobs.css index cef471e6..c6434e6d 100644 --- a/ServiceHost/wwwroot/AdminTheme/css/create-insurance-jobs.css +++ b/ServiceHost/wwwroot/AdminTheme/css/create-insurance-jobs.css @@ -37,7 +37,7 @@ .main-title { position: absolute; - width: 434px; + width: 469px; font-size: 20px; background-color: inherit; left: 50%; @@ -180,9 +180,9 @@ input.no-spinner { border: 1px solid #9393938a; } #worksTable th { - background-color: #aaecf9; - text-align: center; - color: #010838; + background-color: #a5cfd7 !important; + text-align: center; + color: #010838; } #worksTable thead { diff --git a/ServiceHost/wwwroot/AssetsClient/pages/Employees/js/CreateEmployeeModal.js b/ServiceHost/wwwroot/AssetsClient/pages/Employees/js/CreateEmployeeModal.js index 13b7bb96..ac7c3295 100644 --- a/ServiceHost/wwwroot/AssetsClient/pages/Employees/js/CreateEmployeeModal.js +++ b/ServiceHost/wwwroot/AssetsClient/pages/Employees/js/CreateEmployeeModal.js @@ -232,9 +232,18 @@ $(document).ready(function () { }); } } + + // This should be checked the hasCustomizeCheckoutService for step4 / TempCheckout - if (allowToNextStep3) { - this.modal.setState(this.modal.step4); + if (hasCustomizeCheckoutService==='True') { + console.log(hasCustomizeCheckoutService); + if (allowToNextStep3) { + this.modal.setState(this.modal.step4); + } + } else { + if (allowToNextStep3) { + this.modal.setState(this.modal.step5); + } } } @@ -281,46 +290,58 @@ $(document).ready(function () { } } - class Step4 extends ModalState { + class Step4 extends ModalState { render() { - $(".step").hide(); - $("#step4").show(); + $(".step").hide(); + $("#step4").show(); - $(".stepStatus").removeClass("active"); - $("#step-4").addClass("active"); + $(".stepStatus").removeClass("active"); + $("#step-4").addClass("active"); checkStepStatus(); - checkPicture(); } + next() { - if (checkPicture()) { - this.modal.setState(this.modal.step5); - } - } + if (checkStepTempCheckout()) { + this.modal.setState(this.modal.step5); + } + } prev() { - if (checkPicture()) { + //if (checkStepTempCheckout()) { this.modal.setState(this.modal.step3); - } - } + //} + } } class Step5 extends ModalState { - render() { + render() { $(".step").hide(); $("#step5").show(); $(".stepStatus").removeClass("active"); $("#step-5").addClass("active"); checkStepStatus(); - } + checkPicture(); + } next() { - this.modal.setState(this.modal.step6); + if (checkPicture()) { + this.modal.setState(this.modal.step6); + } } prev() { - this.modal.setState(this.modal.step4); + // This should be checked the hasCustomizeCheckoutService for step4 / TempCheckout + if (hasCustomizeCheckoutService === 'True') { + if (checkPicture()) { + this.modal.setState(this.modal.step4); + } + } else { + if (checkPicture()) { + this.modal.setState(this.modal.step3); + } + } } } @@ -332,12 +353,31 @@ $(document).ready(function () { $(".stepStatus").removeClass("active"); $("#step-6").addClass("active"); checkStepStatus(); + } + + next() { + this.modal.setState(this.modal.step7); + } + + prev() { + this.modal.setState(this.modal.step5); + } + } + + class Step7 extends ModalState { + render() { + $(".step").hide(); + $("#step7").show(); + + $(".stepStatus").removeClass("active"); + $("#step-7").addClass("active"); + checkStepStatus(); checkStep5(); } prev() { - this.modal.setState(this.modal.step5); + this.modal.setState(this.modal.step6); } } @@ -349,6 +389,7 @@ $(document).ready(function () { this.step4 = new Step4(this); this.step5 = new Step5(this); this.step6 = new Step6(this); + this.step7 = new Step7(this); this.currentState = this.step1; this.formData = {}; @@ -420,7 +461,10 @@ function saveFullData() { formData.append("Command.CreateCustomizeEmployeeSettings.BreakTime.BreakTimeValue", $("#TimeOnly").val()); formData.append("Command.CreateCustomizeEmployeeSettings.FridayWork", $('#Friday1').prop('checked') ? "Default" : "WorkInFriday"); - formData.append("Command.CreateCustomizeEmployeeSettings.HolidayWork", $('#HolidayWork1').prop('checked') ? "Default" : "WorkInHolidays"); + formData.append("Command.CreateCustomizeEmployeeSettings.HolidayWork", $('#HolidayWork1').prop('checked') ? "Default" : "WorkInHolidays"); + + formData.append("Command.CreateCustomizeEmployeeSettings.Salary", $('#personnelSalary').val()); + formData.append("Command.CreateCustomizeEmployeeSettings.LeavePermittedDays", $('#leavePermittedDays').val()); let pic1 = $("#pic1").attr('src'); let pic2 = $("#pic2").attr('src'); diff --git a/ServiceHost/wwwroot/AssetsClient/pages/Employees/js/TempCheckout.js b/ServiceHost/wwwroot/AssetsClient/pages/Employees/js/TempCheckout.js new file mode 100644 index 00000000..abd1a919 --- /dev/null +++ b/ServiceHost/wwwroot/AssetsClient/pages/Employees/js/TempCheckout.js @@ -0,0 +1,45 @@ +$(document).ready(function() { + $("#personnelSalary").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + + new Cleave(this, { + numeral: true, + numeralThousandsGroupStyle: 'thousand' + }); + }); + + $("#leavePermittedDays").each(function () { + let element = $(this); + element.on('input', function () { + let value = convertPersianNumbersToEnglish(element.val()); + element.val(value); + }); + + element.mask("000"); + }); +}); + + +function checkStepTempCheckout() { + var workshopSettingSelect = $('#workshopSettingSelect').val(); + if (workshopSettingSelect === "0") { + return true; + } else { + if ($("#personnelSalary").val() === "") { + showAlert('لطفا حقوق پرسنل را وارد نمائید.', $("#personnelSalary")); + return false; + } + if ($("#leavePermittedDays").val() === "") { + showAlert('لطفا تعداد روز مجاز مرخصی را وارد نمائید.', $("#leavePermittedDays")); + return false; + } + if ($("#personnelSalary").val() !== "" && $("#leavePermittedDays").val() !== "") { + return true; + } + return false; + } +} \ No newline at end of file diff --git a/ServiceHost/wwwroot/AssetsClient/pages/Employees/js/WorkshopSettingGrouping.js b/ServiceHost/wwwroot/AssetsClient/pages/Employees/js/WorkshopSettingGrouping.js index 45fd14d1..ca97e45e 100644 --- a/ServiceHost/wwwroot/AssetsClient/pages/Employees/js/WorkshopSettingGrouping.js +++ b/ServiceHost/wwwroot/AssetsClient/pages/Employees/js/WorkshopSettingGrouping.js @@ -771,6 +771,14 @@ $('#workshopSettingSelect').on('change', function () { if (id === 0) { $('#GroupId').val(0); $('#footer-section').hide(); + + //Step (TempCheckout) + $("#groupNameTemp").val("-"); + $("#priceTemp").val("-"); + $("#leavePermitted").val("-"); + $("#personnelSalary").val("-").addClass("disable").addClass("disableColor"); + $("#leavePermittedDays").val("-").addClass("disable").addClass("disableColor"); + $("#has-group").show(); } if ($("#workshopSettingSelect").val() === "0") { @@ -803,7 +811,7 @@ $('#workshopSettingSelect').on('change', function () { headers: { "RequestVerificationToken": antiForgeryToken }, success: function (response) { const workshopSettingGroupSelecting = response.data; - + console.log(workshopSettingGroupSelecting); var regularShiftsIndex = 0; var rotatingShiftsIndex = 0; @@ -811,7 +819,19 @@ $('#workshopSettingSelect').on('change', function () { workshopSettingGroupSelecting.groupSettings.forEach(function (itemGroupSettings) { if (itemGroupSettings.id === id) { - if ($('#workshopSettingSelect').find(':selected').data('name-group') === "بدون گروه") { + + if (id !== 0) { + //Step (TempCheckout) + $("#groupNameTemp").val(itemGroupSettings.groupName); + $("#priceTemp").val(itemGroupSettings.salaryStr); + $("#leavePermitted").val(itemGroupSettings.leavePermitted); + $("#personnelSalary").val('').removeClass("disable").removeClass("disableColor"); + $("#leavePermittedDays").val('').removeClass("disable").removeClass("disableColor"); + $("#has-group").hide(); + } + + + if ($('#workshopSettingSelect').find(':selected').data('name-group') === "بدون گروه") { $('#stepWorkTimeOptionRadio').hide(); $('#step_workTimeOptionNull').hide(); $('#step_workTimeOption').hide(); @@ -819,6 +839,7 @@ $('#workshopSettingSelect').on('change', function () { $('#step_workTimeOptionIrregular').hide(); $('#step_workTimeOptionWithoutGroup').show(); $('#footer-section').hide(); + } else { if (itemGroupSettings.workshopShiftStatus === 0) { @@ -927,8 +948,7 @@ $('#workshopSettingSelect').on('change', function () { $('#step_workTimeOptionIrregular').hide(); $('#step_workTimeOptionIrregular').html(loadIrregularHtml()); - - + updateAddButtonText(regularShiftsIndex); if ((regularShiftsIndex) === 3) { $(".btnAddTimeWork").hide(); @@ -938,8 +958,7 @@ $('#workshopSettingSelect').on('change', function () { // Update Remove button enable/disable state updateRemoveButtons(); loadCleaveClasses(); - - } else if (itemGroupSettings.workshopShiftStatus === 1) { + } else if (itemGroupSettings.workshopShiftStatus === 1) { //radio btn $("#organized").prop('checked', false); diff --git a/ServiceHost/wwwroot/AssetsClient/pages/EmployeesDocument/js/ModalUploadDocument.js b/ServiceHost/wwwroot/AssetsClient/pages/EmployeesDocument/js/ModalUploadDocument.js index ac2019f0..d3212336 100644 --- a/ServiceHost/wwwroot/AssetsClient/pages/EmployeesDocument/js/ModalUploadDocument.js +++ b/ServiceHost/wwwroot/AssetsClient/pages/EmployeesDocument/js/ModalUploadDocument.js @@ -89,7 +89,7 @@ $(document).ready(function () { // بررسی فرمت‌های تصویر (jpeg, jpg, png) if (validExtensions.includes(extension)) { - if (fileInputFile.size > 5000000) { + if (fileInputFile.size > 10000000) { showAlertMessage('.alert-msg', 'لطفا فایل حجم کمتر از 5 مگابایت را آپلود کنید.', 3500); $(this).val(''); return;