From 7e3f7d1dcf5e7601147752bf004cbf6fa42dce9c Mon Sep 17 00:00:00 2001 From: SamSys Date: Thu, 28 Aug 2025 06:09:02 +0330 Subject: [PATCH] Completed DailYWage and BaseYear report For Contract --- Company.Domain/ContractAgg/Contract.cs | 9 +- .../ContractAgg/IContractRepository.cs | 10 + .../IYearlySalaryRepository.cs | 3 +- .../ContractDailyWageAndBaseYearReport.cs | 70 + .../Contract/CreateContract.cs | 5 + .../Contract/UpgradeManualDailyWageModel.cs | 36 + .../Workshop/createContractModel.cs | 5 + .../YearlySalary/BaseYearDataViewModel.cs | 30 + .../YearlySalary/IYearlySalaryApplication.cs | 22 + .../ContractApplication.cs | 4 +- .../YearlySalaryApplication.cs | 35 + .../Mapping/ContractMapping.cs | 3 +- ...7230053_DailyWageTypeoContract.Designer.cs | 10231 ++++++++++++++++ .../20250827230053_DailyWageTypeoContract.cs | 29 + .../Migrations/CompanyContextModelSnapshot.cs | 4 + .../Repository/ContractRepository.cs | 38 +- .../Repository/YearlySalaryRepository.cs | 7764 ++++++------ .../DailyWageAndBaseYearReport.cshtml | 375 + .../Pages/Company/Contracts/Index.cshtml | 13 +- .../Pages/Company/Contracts/Index.cshtml.cs | 63 + .../Company/Workshops/AutoExtension.cshtml.cs | 15 +- .../page/Workshop/js/AutoExtension.js | 1 + 22 files changed, 14901 insertions(+), 3864 deletions(-) create mode 100644 CompanyManagment.App.Contracts/Contract/ContractDailyWageAndBaseYearReport.cs create mode 100644 CompanyManagment.App.Contracts/Contract/UpgradeManualDailyWageModel.cs create mode 100644 CompanyManagment.EFCore/Migrations/20250827230053_DailyWageTypeoContract.Designer.cs create mode 100644 CompanyManagment.EFCore/Migrations/20250827230053_DailyWageTypeoContract.cs create mode 100644 ServiceHost/Areas/Admin/Pages/Company/Contracts/DailyWageAndBaseYearReport.cshtml diff --git a/Company.Domain/ContractAgg/Contract.cs b/Company.Domain/ContractAgg/Contract.cs index 92d1c585..5ad80d1f 100644 --- a/Company.Domain/ContractAgg/Contract.cs +++ b/Company.Domain/ContractAgg/Contract.cs @@ -17,7 +17,7 @@ public class Contract : EntityBase public Contract(long personnelCode, long employeeId, long employerId, long workshopIds, long yearlySalaryId, DateTime contarctStart, DateTime contractEnd, string dayliWage, string archiveCode, DateTime getWorkDate, DateTime setContractDate, string jobType, - string contractType, string workshopAddress1, string workshopAddress2, string consumableItems, long jobTypeId, string housingAllowance, string agreementSalary, string workingHoursWeekly, string familyAllowance, string contractPeriod, double dailySalaryAffected, double baseYearAffected, double dailySalaryUnAffected, double baseYearUnAffected, bool hasManualDailyWage) + string contractType, string workshopAddress1, string workshopAddress2, string consumableItems, long jobTypeId, string housingAllowance, string agreementSalary, string workingHoursWeekly, string familyAllowance, string contractPeriod, double dailySalaryAffected, double baseYearAffected, double dailySalaryUnAffected, double baseYearUnAffected, bool hasManualDailyWage, string dailyWageType) { PersonnelCode = personnelCode; EmployeeId = employeeId; @@ -53,6 +53,8 @@ public class Contract : EntityBase DailySalaryUnAffected = dailySalaryUnAffected; BaseYearUnAffected = baseYearUnAffected; HasManualDailyWage = hasManualDailyWage; + DailyWageType = dailyWageType; + #endregion @@ -107,6 +109,10 @@ public class Contract : EntityBase /// public bool HasManualDailyWage { get; set; } + /// + /// نوع دستمزد انتخاب شده + /// + public string DailyWageType { get; set; } public string IsActiveString { get; private set; } public string ArchiveCode { get; private set; } @@ -131,6 +137,7 @@ public class Contract : EntityBase public Contract() { + WorkingHoursList = new List(); } public void Edit(long pesrsonnelCode, long employeeId, long employerId, long workshopId, long yearlySalaryId, diff --git a/Company.Domain/ContractAgg/IContractRepository.cs b/Company.Domain/ContractAgg/IContractRepository.cs index 132d0348..3d6ea269 100644 --- a/Company.Domain/ContractAgg/IContractRepository.cs +++ b/Company.Domain/ContractAgg/IContractRepository.cs @@ -18,6 +18,16 @@ public interface IContractRepository : IRepository /// /// Task GetManualDailWage(long workshopId, long employeeId, long yearlySalaryId, DateTime contractStart); + + /// + /// دریافت لیست مزد ارتقاء یافته + /// + /// + /// + /// + /// + Task GetManualDailWageList(long workshopId, long employeeId, + DateTime contractStart); EditContract GetDetails(long id); EditContract GetContractByStartEnd(DateTime start, DateTime end, long workshopId, long employeeId); diff --git a/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs b/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs index 6a89a33d..7c2c71e1 100644 --- a/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs +++ b/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs @@ -6,6 +6,7 @@ using CompanyManagment.App.Contracts.YearlySalary; using System.Threading.Tasks; using CompanyManagment.App.Contracts.Checkout; using CompanyManagment.App.Contracts.Holiday; +using CompanyManagment.App.Contracts.Contract; namespace Company.Domain.YearlySalaryAgg; @@ -38,7 +39,7 @@ public interface IYearlySalaryRepository : IRepository /// /// /// - Task UpgradeManualDailyWage(DateTime newContractStart, DateTime lastContractStart, + Task UpgradeManualDailyWage(DateTime newContractStart, DateTime lastContractStart, double lastContractManualDailyWage); /// diff --git a/CompanyManagment.App.Contracts/Contract/ContractDailyWageAndBaseYearReport.cs b/CompanyManagment.App.Contracts/Contract/ContractDailyWageAndBaseYearReport.cs new file mode 100644 index 00000000..69cd1dfc --- /dev/null +++ b/CompanyManagment.App.Contracts/Contract/ContractDailyWageAndBaseYearReport.cs @@ -0,0 +1,70 @@ +using CompanyManagment.App.Contracts.YearlySalary; +using System.Collections.Generic; + +namespace CompanyManagment.App.Contracts.Contract; +/// +/// نمایش نحوه محاسبه پایه سنوات و دستمزد روزانه +/// +public class ContractDailyWageAndBaseYearReport +{ + /// + /// لیست داده های محاسبه پایه سنوات + /// + public BaseYearDataViewModel BaseYearDataViewModel { get; set; } + + /// + /// پایه سنوات متاثر از ساعت کار + /// + public string BaseYearAffected { get; set; } + + /// + /// دستمزد روزانه متاثر از ساعت کار + /// + public string DailySalaryAffected { get; set; } + + /// + /// دستمزد روزانه بدون تاثیر ساعت کار + /// + public string DailySalaryUnAffected { get; set; } + + /// + /// دستمزد روزانه تجمیعی + /// + public string DailyWage { get; set; } + + /// + /// تاریخ قراداد + /// + public string ContractDate { get; set; } + + + /// + /// نوع دستمزد انتخاب شده + /// + public string DailyWageType { get; set; } + + /// + /// لیست ارتقاء + /// + public List UpgradeManualDailyWageLists { get; set; } + + /// + /// نام پرسنل + /// + public string EmployeeName { get; set; } + + /// + /// نام کارگاه + /// + public string WorkshopName { get; set; } + + /// + /// آیا با متد جدید محاسبه شده + /// + public bool OldComputeMethod { get; set; } + + /// + /// آیا محاسبات با مقادیر ذخیره شده مغایرت دارد + /// + public bool Contradiction { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Contract/CreateContract.cs b/CompanyManagment.App.Contracts/Contract/CreateContract.cs index 1db4d264..728ddd55 100644 --- a/CompanyManagment.App.Contracts/Contract/CreateContract.cs +++ b/CompanyManagment.App.Contracts/Contract/CreateContract.cs @@ -165,6 +165,11 @@ public class CreateContract /// آیا دستمزد روزانه دستی وارد شده است؟ /// public bool HasManualDailyWage { get; set; } + + /// + /// نوع دستمزد انتخاب شده + /// + public string DailyWageType { get; set; } public List Contracts { get; set; } public List Workshops { get; set; } public List Employers { get; set; } diff --git a/CompanyManagment.App.Contracts/Contract/UpgradeManualDailyWageModel.cs b/CompanyManagment.App.Contracts/Contract/UpgradeManualDailyWageModel.cs new file mode 100644 index 00000000..3a3958da --- /dev/null +++ b/CompanyManagment.App.Contracts/Contract/UpgradeManualDailyWageModel.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; + +namespace CompanyManagment.App.Contracts.Contract; + +/// +/// ویو مدل رتقاء دستمزد روزانه و لیست ارتقاء +/// +public class UpgradeManualDailyWageModel +{ + /// + /// دستمزد روزانه + /// + public double DailyWage{ get; set; } + + + /// + /// لیست ارتقاء + /// + public List UpgradeManualDailyWageLists { get; set; } +} + +/// +/// لیست ارتقاء +/// +public class UpgradeManualDailyWageList +{ + /// + /// تاریخ شروع و پایان بازه ارتقاء + /// + public string StartEndDate { get; set; } + + /// + /// دستمزد روزانه + /// + public string DailyWage { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Workshop/createContractModel.cs b/CompanyManagment.App.Contracts/Workshop/createContractModel.cs index 1a8eb7d2..678af61e 100644 --- a/CompanyManagment.App.Contracts/Workshop/createContractModel.cs +++ b/CompanyManagment.App.Contracts/Workshop/createContractModel.cs @@ -75,4 +75,9 @@ public class createContractModel /// public bool HasManualDailyWage { get; set; } + /// + /// نوع دستمزد انتخاب شده + /// + public string DailyWageType { get; set; } + } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/YearlySalary/BaseYearDataViewModel.cs b/CompanyManagment.App.Contracts/YearlySalary/BaseYearDataViewModel.cs index 76e749ee..058e3dc2 100644 --- a/CompanyManagment.App.Contracts/YearlySalary/BaseYearDataViewModel.cs +++ b/CompanyManagment.App.Contracts/YearlySalary/BaseYearDataViewModel.cs @@ -24,6 +24,11 @@ public class BaseYearDataViewModel /// public double BaseYearResult { get; set; } + /// + /// اولین روز شروع بکار + /// + public string FirstWorkDayInLeftWork { get; set; } + /// /// لیست تمام پایه سنوات های محاسبه شده /// @@ -64,4 +69,29 @@ public class BaseYearDataList /// سالی که در آن پایه سنوات تعلق گرفته /// public string Year { get; set; } + + /// + ///روزی که پایه سنوات تعلق گرفته + ///یا شروع بکار. ترک کار + /// شمسی + /// + public string BaseYearPayDay { get; set; } + + /// + /// روزی که پایه سنوات تعلق گرفته + ///یا شروع بکار. ترک کار + /// میلادی + /// + public DateTime BaseYearPayDayGr { get; set; } + + + + /// + /// آیا تاریخ شروع بکار دارد + /// + public bool HasStartWork { get; set; } + /// + /// آیا تاریخ پایان کار دارد + /// + public bool HasLeftWork { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/YearlySalary/IYearlySalaryApplication.cs b/CompanyManagment.App.Contracts/YearlySalary/IYearlySalaryApplication.cs index cd4331bb..1ed7d4c5 100644 --- a/CompanyManagment.App.Contracts/YearlySalary/IYearlySalaryApplication.cs +++ b/CompanyManagment.App.Contracts/YearlySalary/IYearlySalaryApplication.cs @@ -2,7 +2,9 @@ using System.Collections.Generic; using System.Threading.Tasks; using _0_Framework.Application; +using CompanyManagment.App.Contracts.Contract; using CompanyManagment.App.Contracts.Holiday; +using CompanyManagment.App.Contracts.LeftWork; namespace CompanyManagment.App.Contracts.YearlySalary; @@ -15,6 +17,26 @@ public interface IYearlySalaryApplication EditYearlySalary GetDetails(long id); List GetYearlySalary(); + /// + /// متد ارتقاء مزد دلخواه + /// + /// + /// + /// + /// + Task UpgradeManualDailyWage(DateTime newContractStart, DateTime lastContractStart, + double lastContractManualDailyWage); + + /// + /// متد محاسبه پایه سنوات و لیست پایه سنوات های پرسنل + /// + /// + /// + /// + /// + /// + /// + Task BaseYearComputeByContractId(long contractId); /// /// دریافت مزد روزانه بر اساس تاریخ شروع و پایان /// diff --git a/CompanyManagment.Application/ContractApplication.cs b/CompanyManagment.Application/ContractApplication.cs index bca7cf32..085616ea 100644 --- a/CompanyManagment.Application/ContractApplication.cs +++ b/CompanyManagment.Application/ContractApplication.cs @@ -149,7 +149,7 @@ public class ContractApplication : IContractApplication command.JobType, command.ContractType, command.WorkshopAddress1, command.WorkshopAddress2, command.ConsumableItems, command.JobTypeId, command.HousingAllowance, command.AgreementSalary, command.WorkingHoursWeekly, command.FamilyAllowance, command.ContractPeriod,command.DailySalaryAffected, - command.BaseYearAffected, command.DailySalaryUnAffected,command.BaseYearUnAffected, command.HasManualDailyWage); + command.BaseYearAffected, command.DailySalaryUnAffected,command.BaseYearUnAffected, command.HasManualDailyWage, command.DailyWageType); _contractRepository.Create(makeContract); _contractRepository.SaveChanges(); @@ -365,7 +365,7 @@ public class ContractApplication : IContractApplication command.JobName, command.ContractType, command.WorkshopAddress1, command.WorkshopAddress2, command.ConsumableItems, command.JobId, command.HousingAllowance, "0", command.WorkingHoursWeekly, command.FamilyAllowance, command.ContractPeriod, command.DailySalaryAffected, - command.BaseYearAffected, command.DailySalaryUnAffected, command.BaseYearUnAffected, command.HasManualDailyWage); + command.BaseYearAffected, command.DailySalaryUnAffected, command.BaseYearUnAffected, command.HasManualDailyWage, command.DailyWageType); _contractRepository.Create(makeContract); _contractRepository.SaveChanges(); diff --git a/CompanyManagment.Application/YearlySalaryApplication.cs b/CompanyManagment.Application/YearlySalaryApplication.cs index 4e9b4522..82a5198a 100644 --- a/CompanyManagment.Application/YearlySalaryApplication.cs +++ b/CompanyManagment.Application/YearlySalaryApplication.cs @@ -1,12 +1,17 @@ using System; using System.Collections.Generic; using System.Globalization; +using System.Linq; using System.Threading.Tasks; using _0_Framework.Application; using Company.Domain.YearlySalaryAgg; +using CompanyManagment.App.Contracts.Contract; using CompanyManagment.App.Contracts.Holiday; +using CompanyManagment.App.Contracts.LeftWork; using CompanyManagment.App.Contracts.YearlySalary; using CompanyManagment.EFCore; +using Microsoft.EntityFrameworkCore; +using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; namespace CompanyManagment.Application; @@ -128,6 +133,36 @@ public class YearlySalaryApplication : IYearlySalaryApplication return _yearlySalaryRepository.GetYearlySalary(); } + public Task UpgradeManualDailyWage(DateTime newContractStart, DateTime lastContractStart, double lastContractManualDailyWage) + { + return _yearlySalaryRepository.UpgradeManualDailyWage(newContractStart, lastContractStart, + lastContractManualDailyWage); + } + + public async Task BaseYearComputeByContractId(long contractId) + { + var contract = await _context.Contracts.FirstOrDefaultAsync(x => x.id == contractId); + + var leftWorkList = await _context.LeftWorkList.Where(x=>x.EmployeeId ==contract.EmployeeId && x.WorkshopId == contract.WorkshopIds).Select(x => new LeftWorkViewModel() + { + Id = x.id, + LeftWorkDate = x.LeftWorkDate.ToFarsi(), + StartWorkDate = x.StartWorkDate.ToFarsi(), + LeftWorkDateGr = x.LeftWorkDate, + StartWorkDateGr = x.StartWorkDate, + WorkshopId = x.WorkshopId, + EmployeeId = x.EmployeeId, + HasLeft = x.HasLeft, + }).ToListAsync(); + + var baseYearResult = await _yearlySalaryRepository.BaseYearCompute(contract.ContarctStart, contract.ContractEnd, + contract.EmployeeId, contract.WorkshopIds, leftWorkList); + + return baseYearResult; + + } + + public async Task<(double dailyWage, long yearlySalaryId)> GetDailyWageByStartEnd(DateTime start, DateTime end) { return await _yearlySalaryRepository.GetDailyWageByStartEnd(start, end); diff --git a/CompanyManagment.EFCore/Mapping/ContractMapping.cs b/CompanyManagment.EFCore/Mapping/ContractMapping.cs index 8ab37bbe..f8185968 100644 --- a/CompanyManagment.EFCore/Mapping/ContractMapping.cs +++ b/CompanyManagment.EFCore/Mapping/ContractMapping.cs @@ -26,7 +26,8 @@ public class ContractMapping : IEntityTypeConfiguration builder.Property(x => x.ContractPeriod).HasMaxLength(2).IsRequired(false); builder.Property(x => x.AgreementSalary).HasMaxLength(50).IsRequired(false); builder.Property(x => x.Signature).HasMaxLength(1).IsRequired(false); - + builder.Property(x=>x.DailyWageType).HasMaxLength(30).IsRequired(false); + diff --git a/CompanyManagment.EFCore/Migrations/20250827230053_DailyWageTypeoContract.Designer.cs b/CompanyManagment.EFCore/Migrations/20250827230053_DailyWageTypeoContract.Designer.cs new file mode 100644 index 00000000..e52d78cd --- /dev/null +++ b/CompanyManagment.EFCore/Migrations/20250827230053_DailyWageTypeoContract.Designer.cs @@ -0,0 +1,10231 @@ +// +using System; +using System.Collections.Generic; +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("20250827230053_DailyWageTypeoContract")] + partial class DailyWageTypeoContract + { + /// + 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.AdminMonthlyOverviewAgg.AdminMonthlyOverview", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Month") + .HasColumnType("int"); + + b.Property("Status") + .IsRequired() + .HasMaxLength(155) + .HasColumnType("nvarchar(155)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("AdminMonthlyOverviews"); + }); + + 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("HasAmountConflict") + .HasColumnType("bit"); + + 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.ContactUsAgg.ContactUs", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Email") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("FirstName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("FullName") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("LastName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Message") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("PhoneNumber") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("Title") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.HasKey("id"); + + b.ToTable("ContactUs"); + }); + + 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("BaseYearAffected") + .HasColumnType("float"); + + b.Property("BaseYearUnAffected") + .HasColumnType("float"); + + 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("DailySalaryAffected") + .HasColumnType("float"); + + b.Property("DailySalaryUnAffected") + .HasColumnType("float"); + + b.Property("DailyWageType") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + 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("HasManualDailyWage") + .HasColumnType("bit"); + + 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.ContractingPartyBankAccountsAgg.ContractingPartyBankAccount", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountHolderName") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("AccountNumber") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CardNumber") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ContractingPartyId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("IBan") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IsAuth") + .HasColumnType("bit"); + + b.HasKey("id"); + + b.HasIndex("ContractingPartyId"); + + b.ToTable("ContractingPartyBankAccounts", (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("HasAmountConflict") + .HasColumnType("bit"); + + 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("HasAmountConflict") + .HasColumnType("bit"); + + 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("ContractTerm") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("CreateCheckout") + .HasColumnType("bit"); + + b.Property("CreateContract") + .HasColumnType("bit"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("CutContractEndOfYear") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("EmployeeId") + .HasColumnType("bigint"); + + b.Property("SignCheckout") + .HasColumnType("bit"); + + b.Property("SignContract") + .HasColumnType("bit"); + + 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.Property("PublicId") + .HasColumnType("uniqueidentifier"); + + 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.ComplexProperty>("Debt", "Company.Domain.InsuranceListAgg.InsuranceList.Debt#InsuranceListDebt", b1 => + { + b1.IsRequired(); + + b1.Property("Amount") + .HasColumnType("float"); + + b1.Property("DebtDate") + .HasColumnType("datetime2"); + + b1.Property("IsDone") + .HasColumnType("bit"); + + b1.Property("MediaId") + .HasColumnType("bigint"); + + b1.Property("Type") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + }); + + b.ComplexProperty>("EmployerApproval", "Company.Domain.InsuranceListAgg.InsuranceList.EmployerApproval#InsuranceListEmployerApproval", b1 => + { + b1.IsRequired(); + + b1.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b1.Property("IsDone") + .HasColumnType("bit"); + + b1.Property("Status") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + }); + + b.ComplexProperty>("Inspection", "Company.Domain.InsuranceListAgg.InsuranceList.Inspection#InsuranceListInspection", b1 => + { + b1.IsRequired(); + + b1.Property("IsDone") + .HasColumnType("bit"); + + b1.Property("LastInspectionDateTime") + .HasColumnType("datetime2"); + + b1.Property("MediaId") + .HasColumnType("bigint"); + + b1.Property("Type") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + }); + + 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.PaymentInstrumentAgg.PaymentInstrument", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountHolderName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("AccountNumber") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("CardNumber") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("IBan") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IsAuth") + .HasColumnType("bit"); + + b.Property("PaymentInstrumentGroupId") + .HasColumnType("bigint"); + + b.Property("PosTerminalId") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.HasIndex("PaymentInstrumentGroupId"); + + b.ToTable("PaymentInstruments"); + }); + + modelBuilder.Entity("Company.Domain.PaymentInstrumentAgg.PaymentInstrumentGroup", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("IsActive") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(120) + .HasColumnType("nvarchar(120)"); + + b.HasKey("id"); + + b.ToTable("PaymentInstrumentGroups"); + }); + + 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.PaymentTransactionAgg.PaymentTransaction", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Amount") + .HasColumnType("float"); + + b.Property("BankName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CallBackUrl") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("CardNumber") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("ContractingPartyId") + .HasColumnType("bigint"); + + b.Property("ContractingPartyName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Status") + .IsRequired() + .HasMaxLength(35) + .HasColumnType("nvarchar(35)"); + + b.Property("TransactionDate") + .HasColumnType("datetime2"); + + b.Property("TransactionId") + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.HasKey("id"); + + b.ToTable("PaymentTransactions", (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("CreateCheckout") + .HasColumnType("bit"); + + b.Property("CreateContract") + .HasColumnType("bit"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("CutContractEndOfYear") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + 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("IsStaticCheckout") + .HasColumnType("bit"); + + b.Property("Population") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("RotatingShiftCompute") + .HasColumnType("bit"); + + b.Property("SignCheckout") + .HasColumnType("bit"); + + b.Property("SignContract") + .HasColumnType("bit"); + + 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.OwnsOne("Company.Domain.CheckoutAgg.CheckoutRollCall", "CheckoutRollCall", b1 => + { + b1.Property("Checkoutid") + .HasColumnType("bigint"); + + b1.Property("TotalBreakTimeSpan") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b1.Property("TotalMandatoryTimeSpan") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b1.Property("TotalPaidLeaveTmeSpan") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b1.Property("TotalPresentTimeSpan") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b1.Property("TotalSickLeaveTimeSpan") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b1.Property("TotalWorkingTimeSpan") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b1.HasKey("Checkoutid"); + + b1.ToTable("Checkouts"); + + b1.WithOwner() + .HasForeignKey("Checkoutid"); + + b1.OwnsMany("Company.Domain.CheckoutAgg.CheckoutRollCallDay", "RollCallDaysCollection", b2 => + { + b2.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b2.Property("Id")); + + b2.Property("BreakTimeSpan") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b2.Property("CheckoutId") + .HasColumnType("bigint"); + + b2.Property("Date") + .HasColumnType("datetime2"); + + b2.Property("FirstEndDate") + .HasMaxLength(18) + .HasColumnType("nvarchar(18)"); + + b2.Property("FirstStartDate") + .HasMaxLength(18) + .HasColumnType("nvarchar(18)"); + + b2.Property("IsAbsent") + .HasColumnType("bit"); + + b2.Property("IsFriday") + .HasColumnType("bit"); + + b2.Property("IsHoliday") + .HasColumnType("bit"); + + b2.Property("IsSliced") + .HasColumnType("bit"); + + b2.Property("LeaveType") + .HasMaxLength(18) + .HasColumnType("nvarchar(18)"); + + b2.Property("SecondEndDate") + .HasMaxLength(18) + .HasColumnType("nvarchar(18)"); + + b2.Property("SecondStartDate") + .HasMaxLength(18) + .HasColumnType("nvarchar(18)"); + + b2.Property("WorkingTimeSpan") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b2.HasKey("Id"); + + b2.HasIndex("CheckoutId"); + + b2.ToTable("CheckoutRollCallDay"); + + b2.WithOwner() + .HasForeignKey("CheckoutId"); + }); + + b1.Navigation("RollCallDaysCollection"); + }); + + b.OwnsMany("Company.Domain.CheckoutAgg.ValueObjects.CheckoutLoanInstallment", "LoanInstallments", b1 => + { + b1.Property("Checkoutid") + .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("Checkoutid", "Id"); + + b1.ToTable("CheckoutLoanInstallment"); + + b1.WithOwner() + .HasForeignKey("Checkoutid"); + }); + + b.OwnsMany("Company.Domain.CheckoutAgg.ValueObjects.CheckoutSalaryAid", "SalaryAids", b1 => + { + b1.Property("Checkoutid") + .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("Checkoutid", "Id"); + + b1.ToTable("CheckoutSalaryAid"); + + b1.WithOwner() + .HasForeignKey("Checkoutid"); + }); + + b.Navigation("CheckoutRollCall"); + + b.Navigation("LoanInstallments"); + + b.Navigation("SalaryAids"); + + 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.ContractingPartyBankAccountsAgg.ContractingPartyBankAccount", b => + { + b.HasOne("Company.Domain.ContarctingPartyAgg.PersonalContractingParty", "ContractingParty") + .WithMany("ContractingPartyBankAccounts") + .HasForeignKey("ContractingPartyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ContractingParty"); + }); + + 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.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.Base.WeeklyOffDay", "WeeklyOffDays", b1 => + { + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("DayOfWeek") + .IsRequired() + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b1.Property("ParentId") + .HasColumnType("bigint"); + + b1.HasKey("Id"); + + b1.HasIndex("ParentId"); + + b1.ToTable("CustomizeWorkshopEmployeeSettings_WeeklyOffDays"); + + b1.WithOwner() + .HasForeignKey("ParentId"); + }); + + 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"); + + b.Navigation("WeeklyOffDays"); + }); + + 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.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.Base.WeeklyOffDay", "WeeklyOffDays", b1 => + { + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("DayOfWeek") + .IsRequired() + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b1.Property("ParentId") + .HasColumnType("bigint"); + + b1.HasKey("Id"); + + b1.HasIndex("ParentId"); + + b1.ToTable("CustomizeWorkshopGroupSettings_WeeklyOffDays"); + + b1.WithOwner() + .HasForeignKey("ParentId"); + }); + + 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"); + + b.Navigation("WeeklyOffDays"); + }); + + 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.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.Base.WeeklyOffDay", "WeeklyOffDays", b1 => + { + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("DayOfWeek") + .IsRequired() + .HasMaxLength(15) + .HasColumnType("nvarchar(15)"); + + b1.Property("ParentId") + .HasColumnType("bigint"); + + b1.HasKey("Id"); + + b1.HasIndex("ParentId"); + + b1.ToTable("CustomizeWorkshopSettings_WeeklyOffDays"); + + b1.WithOwner() + .HasForeignKey("ParentId"); + }); + + 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("WeeklyOffDays"); + + 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.PaymentInstrumentAgg.PaymentInstrument", b => + { + b.HasOne("Company.Domain.PaymentInstrumentAgg.PaymentInstrumentGroup", "PaymentInstrumentGroup") + .WithMany("PaymentInstruments") + .HasForeignKey("PaymentInstrumentGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PaymentInstrumentGroup"); + }); + + 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("ContractingPartyBankAccounts"); + + 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.PaymentInstrumentAgg.PaymentInstrumentGroup", b => + { + b.Navigation("PaymentInstruments"); + }); + + 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/20250827230053_DailyWageTypeoContract.cs b/CompanyManagment.EFCore/Migrations/20250827230053_DailyWageTypeoContract.cs new file mode 100644 index 00000000..10287188 --- /dev/null +++ b/CompanyManagment.EFCore/Migrations/20250827230053_DailyWageTypeoContract.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace CompanyManagment.EFCore.Migrations +{ + /// + public partial class DailyWageTypeoContract : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "DailyWageType", + table: "Contracts", + type: "nvarchar(30)", + maxLength: 30, + nullable: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "DailyWageType", + table: "Contracts"); + } + } +} diff --git a/CompanyManagment.EFCore/Migrations/CompanyContextModelSnapshot.cs b/CompanyManagment.EFCore/Migrations/CompanyContextModelSnapshot.cs index 7e11123f..aed4edf1 100644 --- a/CompanyManagment.EFCore/Migrations/CompanyContextModelSnapshot.cs +++ b/CompanyManagment.EFCore/Migrations/CompanyContextModelSnapshot.cs @@ -788,6 +788,10 @@ namespace CompanyManagment.EFCore.Migrations b.Property("DailySalaryUnAffected") .HasColumnType("float"); + b.Property("DailyWageType") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + b.Property("DayliWage") .IsRequired() .HasMaxLength(50) diff --git a/CompanyManagment.EFCore/Repository/ContractRepository.cs b/CompanyManagment.EFCore/Repository/ContractRepository.cs index 1b10a33e..c9d82f10 100644 --- a/CompanyManagment.EFCore/Repository/ContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/ContractRepository.cs @@ -66,17 +66,33 @@ public class ContractRepository : RepositoryBase, IContractRepos return lastContract.DailySalaryUnAffected; - double dailyWage = _yearlySalaryRepository.UpgradeManualDailyWage(contractStart, + var dailyWageResult = _yearlySalaryRepository.UpgradeManualDailyWage(contractStart, lastContractYearlySalary.StartDate, lastContract.DailySalaryUnAffected).GetAwaiter().GetResult(); - - - - - - return dailyWage; + return dailyWageResult.DailyWage; } + public async Task GetManualDailWageList(long workshopId, long employeeId, + DateTime contractStart) + { + var oldContracts = await _context.Contracts + .Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && x.IsActiveString == "true" && x.DailyWageType == "ManualDailyWage" && x.ContarctStart < contractStart) + .OrderByDescending(x => x.ContarctStart) + .FirstOrDefaultAsync(); + if (oldContracts == null) + return new UpgradeManualDailyWageModel(); + + //var endOfMonthFromStart = ($"{contractStart.ToFarsi().FindeEndOfMonth()}").ToGeorgianDateTime(); + + + var result =await _yearlySalaryRepository.UpgradeManualDailyWage(contractStart, oldContracts.ContarctStart, + oldContracts.DailySalaryUnAffected); + + return result; + } + + + public EditContract GetDetails(long id) { return _context.Contracts.Select(x => new EditContract @@ -107,8 +123,12 @@ public class ContractRepository : RepositoryBase, IContractRepos ContractPeriod = x.ContractPeriod, AgreementSalary = x.AgreementSalary, ArchiveCode = x.ArchiveCode, - - + BaseYearAffected = x.BaseYearAffected, + BaseYearUnAffected = x.BaseYearUnAffected, + DailySalaryAffected = x.DailySalaryAffected, + DailySalaryUnAffected = x.DailySalaryUnAffected, + HasManualDailyWage = x.HasManualDailyWage, + DailyWageType = x.DailyWageType, diff --git a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs index 57ede850..bb06a7e8 100644 --- a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs +++ b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs @@ -15,6 +15,7 @@ using Company.Domain.RollCallAgg; using Company.Domain.RollCallEmployeeAgg; using Company.Domain.YearlySalaryAgg; using CompanyManagment.App.Contracts.Checkout; +using CompanyManagment.App.Contracts.Contract; using CompanyManagment.App.Contracts.Holiday; using CompanyManagment.App.Contracts.LeftWork; using CompanyManagment.App.Contracts.RollCall; @@ -30,62 +31,62 @@ namespace CompanyManagment.EFCore.Repository; public class YearlySalaryRepository : RepositoryBase, IYearlySalaryRepository { - private readonly CompanyContext _context; - private readonly ILeftWorkRepository _leftWorkRepository; - private readonly IMandatoryHoursRepository _mandatoryHoursRepository; - private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository; + private readonly CompanyContext _context; + private readonly ILeftWorkRepository _leftWorkRepository; + private readonly IMandatoryHoursRepository _mandatoryHoursRepository; + private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository; - public YearlySalaryRepository(CompanyContext context, ILeftWorkRepository leftWorkRepository, IMandatoryHoursRepository mandatoryHoursRepository, IRollCallEmployeeRepository rollCallEmployeeRepository) : base(context) - { - _context = context; - _leftWorkRepository = leftWorkRepository; - _mandatoryHoursRepository = mandatoryHoursRepository; - _rollCallEmployeeRepository = rollCallEmployeeRepository; - } - // لیست سال های برای دراپ دان - #region GetYearsToDropDown - public List GetYears() - { - List yearlist = new List(); - PersianDateTime startDate = new PersianDateTime(1370, 1, 1); - DateTime endDateNow = DateTime.Now; + public YearlySalaryRepository(CompanyContext context, ILeftWorkRepository leftWorkRepository, IMandatoryHoursRepository mandatoryHoursRepository, IRollCallEmployeeRepository rollCallEmployeeRepository) : base(context) + { + _context = context; + _leftWorkRepository = leftWorkRepository; + _mandatoryHoursRepository = mandatoryHoursRepository; + _rollCallEmployeeRepository = rollCallEmployeeRepository; + } + // لیست سال های برای دراپ دان + #region GetYearsToDropDown + public List GetYears() + { + List yearlist = new List(); + PersianDateTime startDate = new PersianDateTime(1370, 1, 1); + DateTime endDateNow = DateTime.Now; - var endDateNowFa = endDateNow.ToFarsi(); - var y = Convert.ToInt32(endDateNowFa.Substring(0, 4)); - var m = Convert.ToInt32(endDateNowFa.Substring(5, 2)); - var d = Convert.ToInt32(endDateNowFa.Substring(8, 2)); + var endDateNowFa = endDateNow.ToFarsi(); + var y = Convert.ToInt32(endDateNowFa.Substring(0, 4)); + var m = Convert.ToInt32(endDateNowFa.Substring(5, 2)); + var d = Convert.ToInt32(endDateNowFa.Substring(8, 2)); - PersianDateTime endDate = new PersianDateTime(y, m, d); + PersianDateTime endDate = new PersianDateTime(y, m, d); - if (m == 12) - endDate.AddYears(1); - for (PersianDateTime date = endDate; date >= startDate; date = date.AddYears(-1)) - { - yearlist.Add(date.ToString("yyyy")); - } + if (m == 12) + endDate.AddYears(1); + for (PersianDateTime date = endDate; date >= startDate; date = date.AddYears(-1)) + { + yearlist.Add(date.ToString("yyyy")); + } - return yearlist; - } + return yearlist; + } - #endregion + #endregion - //دریافت مقادیر یک سال بر اساس سال انتخاب شده - #region YearlySalaryByYear + //دریافت مقادیر یک سال بر اساس سال انتخاب شده + #region YearlySalaryByYear - public List GetYearlySalary() - { - return _context.YearlySalaries.Select(x => new YearlySalaryViewModel - { - Id = x.id, - StartDate = x.StartDate.ToFarsi(), - Year = x.Year + public List GetYearlySalary() + { + return _context.YearlySalaries.Select(x => new YearlySalaryViewModel + { + Id = x.id, + StartDate = x.StartDate.ToFarsi(), + Year = x.Year - }) - .OrderByDescending(x => x.Year).ToList(); - } + }) + .OrderByDescending(x => x.Year).ToList(); + } #endregion @@ -109,195 +110,195 @@ public class YearlySalaryRepository : RepositoryBase, IYearl return (dailyWage, 0); } - //محاسبه حقوق ماهیانه عیدی و پاداش ، سنوات - #region GetMontlyBunosYears - public MontlywageBunosYearsViewModel GetMontlyBunosYears(TimeSpan weeklyTime, DateTime contractStart, DateTime contractEnd, double daylyWage, - string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM, string basic, int fridayStartToEnd, double dayliFeeComplete, bool hasRollCall, bool holidaysWorking, string shiftWork) - { - double basicDouble = basic.MoneyToDouble(); - double sub = 0; - double bacicMontlyResult = 0; - double montlyResult = 0; - - double montlySalaryResult = 0; - double basicYearResult = 0; - var salary = _context.YearlySalaries.OrderByDescending(x => x.EndDate).Include(x => x.YearlySalaryItemsList).ToList(); - - var SalaryItems = - salary.FirstOrDefault(x => x.StartDate <= contractStart && x.EndDate >= contractStart); - var BasicDayliFee = SalaryItems - .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); - var contractEndFa = contractEnd.ToFarsi(); - var TotalDays = (contractEnd - contractStart).TotalDays + 1; - //var DayCounter = Convert.ToInt32(TotalDays); - //var EndOfM = Convert.ToInt32(contractEndFa.Substring(8, 2)); - //if (EndOfM == 31) - //{ - // TotalDays = 30; - //} - - // یدست آوردن کل ساعت کار پرسنل در ماه - var totalHoursHDouble = Convert.ToDouble(totalHoursH); - var totalHoursMDouble = Convert.ToDouble(totalHorsM); - if (totalHoursMDouble > 0) - { - //تبیدل دقیه به اعشار - totalHoursMDouble = totalHoursMDouble / 60; - } - //کل ساعت کار پرسنل در این ماه - var totalHours = totalHoursHDouble + totalHoursMDouble;// ساعت کارکرد پرسنل در این ماه - - //var MandatoryDays = TotalDays - friday - officialholiday; - //var MandatoryDays = TotalDays - fridayStartToEnd; - ////اگر حضورغیاب داشت - //if (hasRollCall) - var MandatoryDays = TotalDays - fridayStartToEnd - officialholiday; - - if (!hasRollCall && shiftWork != "4") - MandatoryDays = TotalDays - fridayStartToEnd; - //بدست آوردن ساعت موظفی این ماه - var TotalMandatoryHours = MandatoryDays * 7.33;//ساعت موظفی این ماه - - - //محاسبه سنوات - var yearsResult = (daylyWage * 30) / 365 * TotalDays; - - //محاسبه عیدی و پاداش - var bunosResult = (daylyWage * 60) / 365 * TotalDays; - - - if (weeklyWorkingTime == "24 - 12" || weeklyWorkingTime == "24 - 24" - || weeklyWorkingTime == "36 - 12" || - weeklyWorkingTime == "48 - 24") - { - - if (totalHours < TotalMandatoryHours)//weeklyTimeDouble < 44.00اگر کمتر از 44 ساعت کار کرد - { - - var b = (BasicDayliFee * totalHours) / TotalMandatoryHours; - var dayli = (dayliFeeComplete * totalHours) / TotalMandatoryHours; - - if (basicDouble > 0)//اگر پایه سنوات داشت - { - //حقوق ماهیانه - montlySalaryResult = b * TotalDays; - //پایه سنوات - basicYearResult = (dayli - b) * TotalDays; - } - else// اگر پایه سنوات نداشت - { - //حقوق ماهانه - montlySalaryResult = daylyWage * TotalDays; - //پایه سنوات - basicYearResult = 0; - - } - - } - else - { - - - daylyWage = basicDouble > 0 ? (daylyWage + basicDouble) : daylyWage; - montlyResult = daylyWage * TotalDays;// مزد ماهانه با پایه سنوات - bacicMontlyResult = BasicDayliFee * TotalDays;// مزد ماهانه بدون پایه سنوات - - if (montlyResult > bacicMontlyResult) - { - - montlySalaryResult = bacicMontlyResult; - basicYearResult = montlyResult - bacicMontlyResult; - } - else - { - montlySalaryResult = montlyResult; - } - } - - - } - else - { - //double weeklyTimeDouble = 0; - //try - //{ - // weeklyTimeDouble = double.Parse(weeklyWorkingTime, CultureInfo.InvariantCulture); - //} - //catch (Exception e) - //{ - // weeklyTimeDouble = double.Parse(weeklyWorkingTime); - //} - - - if (totalHours < TotalMandatoryHours)//weeklyTimeDouble < 44.00اگر کمتر از 44 ساعت کار کرد - { - //var divideNum = TimeSpan.Parse("06:00"); - //// مجموع ساعت کار هفته تقسیم بر 6 ساعت - //var dividTo6Days = 34.57 / 6; + //محاسبه حقوق ماهیانه عیدی و پاداش ، سنوات + #region GetMontlyBunosYears + public MontlywageBunosYearsViewModel GetMontlyBunosYears(TimeSpan weeklyTime, DateTime contractStart, DateTime contractEnd, double daylyWage, + string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM, string basic, int fridayStartToEnd, double dayliFeeComplete, bool hasRollCall, bool holidaysWorking, string shiftWork) + { + double basicDouble = basic.MoneyToDouble(); + double sub = 0; + double bacicMontlyResult = 0; + double montlyResult = 0; + + double montlySalaryResult = 0; + double basicYearResult = 0; + var salary = _context.YearlySalaries.OrderByDescending(x => x.EndDate).Include(x => x.YearlySalaryItemsList).ToList(); + + var SalaryItems = + salary.FirstOrDefault(x => x.StartDate <= contractStart && x.EndDate >= contractStart); + var BasicDayliFee = SalaryItems + .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); + var contractEndFa = contractEnd.ToFarsi(); + var TotalDays = (contractEnd - contractStart).TotalDays + 1; + //var DayCounter = Convert.ToInt32(TotalDays); + //var EndOfM = Convert.ToInt32(contractEndFa.Substring(8, 2)); + //if (EndOfM == 31) + //{ + // TotalDays = 30; + //} + + // یدست آوردن کل ساعت کار پرسنل در ماه + var totalHoursHDouble = Convert.ToDouble(totalHoursH); + var totalHoursMDouble = Convert.ToDouble(totalHorsM); + if (totalHoursMDouble > 0) + { + //تبیدل دقیه به اعشار + totalHoursMDouble = totalHoursMDouble / 60; + } + //کل ساعت کار پرسنل در این ماه + var totalHours = totalHoursHDouble + totalHoursMDouble;// ساعت کارکرد پرسنل در این ماه + + //var MandatoryDays = TotalDays - friday - officialholiday; + //var MandatoryDays = TotalDays - fridayStartToEnd; + ////اگر حضورغیاب داشت + //if (hasRollCall) + var MandatoryDays = TotalDays - fridayStartToEnd - officialholiday; + + if (!hasRollCall && shiftWork != "4") + MandatoryDays = TotalDays - fridayStartToEnd; + //بدست آوردن ساعت موظفی این ماه + var TotalMandatoryHours = MandatoryDays * 7.33;//ساعت موظفی این ماه + + + //محاسبه سنوات + var yearsResult = (daylyWage * 30) / 365 * TotalDays; + + //محاسبه عیدی و پاداش + var bunosResult = (daylyWage * 60) / 365 * TotalDays; + + + if (weeklyWorkingTime == "24 - 12" || weeklyWorkingTime == "24 - 24" + || weeklyWorkingTime == "36 - 12" || + weeklyWorkingTime == "48 - 24") + { + + if (totalHours < TotalMandatoryHours)//weeklyTimeDouble < 44.00اگر کمتر از 44 ساعت کار کرد + { + + var b = (BasicDayliFee * totalHours) / TotalMandatoryHours; + var dayli = (dayliFeeComplete * totalHours) / TotalMandatoryHours; + + if (basicDouble > 0)//اگر پایه سنوات داشت + { + //حقوق ماهیانه + montlySalaryResult = b * TotalDays; + //پایه سنوات + basicYearResult = (dayli - b) * TotalDays; + } + else// اگر پایه سنوات نداشت + { + //حقوق ماهانه + montlySalaryResult = daylyWage * TotalDays; + //پایه سنوات + basicYearResult = 0; + + } + + } + else + { + + + daylyWage = basicDouble > 0 ? (daylyWage + basicDouble) : daylyWage; + montlyResult = daylyWage * TotalDays;// مزد ماهانه با پایه سنوات + bacicMontlyResult = BasicDayliFee * TotalDays;// مزد ماهانه بدون پایه سنوات + + if (montlyResult > bacicMontlyResult) + { + + montlySalaryResult = bacicMontlyResult; + basicYearResult = montlyResult - bacicMontlyResult; + } + else + { + montlySalaryResult = montlyResult; + } + } + + + } + else + { + //double weeklyTimeDouble = 0; + //try + //{ + // weeklyTimeDouble = double.Parse(weeklyWorkingTime, CultureInfo.InvariantCulture); + //} + //catch (Exception e) + //{ + // weeklyTimeDouble = double.Parse(weeklyWorkingTime); + //} + + + if (totalHours < TotalMandatoryHours)//weeklyTimeDouble < 44.00اگر کمتر از 44 ساعت کار کرد + { + //var divideNum = TimeSpan.Parse("06:00"); + //// مجموع ساعت کار هفته تقسیم بر 6 ساعت + //var dividTo6Days = 34.57 / 6; - //// مزد روزانه تقسیم بر 7.33 - //var dailyStep1 = BasicDayliFee / 7.33; - ////نتیجه ضربدر جواب مجموع ساعت تقسیم بر 6 روز هفته - //var dailyStep2 = dailyStep1 * dividTo6Days; - //var dailyFeeString = dailyStep2.ToMoney(); - //var dayilyFee = dailyFeeString.MoneyToDouble(); + //// مزد روزانه تقسیم بر 7.33 + //var dailyStep1 = BasicDayliFee / 7.33; + ////نتیجه ضربدر جواب مجموع ساعت تقسیم بر 6 روز هفته + //var dailyStep2 = dailyStep1 * dividTo6Days; + //var dailyFeeString = dailyStep2.ToMoney(); + //var dayilyFee = dailyFeeString.MoneyToDouble(); - //var a = (daylyWage * totalHours) / TotalMandatoryHours; - var b = (BasicDayliFee * totalHours) / TotalMandatoryHours; - var dayli = (dayliFeeComplete * totalHours) / TotalMandatoryHours; - if (basicDouble > 0)//اگر پایه سنوات داشت - { - //حقوق ماهیانه - montlySalaryResult = b * TotalDays; - //پایه سنوات - basicYearResult = (dayli - b) * TotalDays; - } - else// اگر پایه سنوات نداشت - { - //حقوق ماهانه - montlySalaryResult = daylyWage * TotalDays; - //پایه سنوات - basicYearResult = 0; - - } - - //if (sub >= 0) - //{ - // basicYearResult = sub * TotalDays; - // montlySalaryResult = dayilyFee * TotalDays; - //} - //else - //{ - // basicYearResult = 0; - // montlySalaryResult = daylyWage * TotalDays; - - //} + //var a = (daylyWage * totalHours) / TotalMandatoryHours; + var b = (BasicDayliFee * totalHours) / TotalMandatoryHours; + var dayli = (dayliFeeComplete * totalHours) / TotalMandatoryHours; + if (basicDouble > 0)//اگر پایه سنوات داشت + { + //حقوق ماهیانه + montlySalaryResult = b * TotalDays; + //پایه سنوات + basicYearResult = (dayli - b) * TotalDays; + } + else// اگر پایه سنوات نداشت + { + //حقوق ماهانه + montlySalaryResult = daylyWage * TotalDays; + //پایه سنوات + basicYearResult = 0; + + } + + //if (sub >= 0) + //{ + // basicYearResult = sub * TotalDays; + // montlySalaryResult = dayilyFee * TotalDays; + //} + //else + //{ + // basicYearResult = 0; + // montlySalaryResult = daylyWage * TotalDays; + + //} - } - else//اگر بیشتر از 44 ساعت کار کرد - { - //محاسبه حقوق ماهانه - - montlyResult = daylyWage * TotalDays;// مزد ماهانه با پایه سنوات - bacicMontlyResult = BasicDayliFee * TotalDays;// مزد ماهانه بدون پایه سنوات - if (montlyResult > bacicMontlyResult) - { - - montlySalaryResult = bacicMontlyResult; - basicYearResult = montlyResult - bacicMontlyResult; - } - else - { - montlySalaryResult = montlyResult; - } - } - } - + } + else//اگر بیشتر از 44 ساعت کار کرد + { + //محاسبه حقوق ماهانه + + montlyResult = daylyWage * TotalDays;// مزد ماهانه با پایه سنوات + bacicMontlyResult = BasicDayliFee * TotalDays;// مزد ماهانه بدون پایه سنوات + if (montlyResult > bacicMontlyResult) + { + + montlySalaryResult = bacicMontlyResult; + basicYearResult = montlyResult - bacicMontlyResult; + } + else + { + montlySalaryResult = montlyResult; + } + } + } + @@ -308,524 +309,524 @@ public class YearlySalaryRepository : RepositoryBase, IYearl - var result = new MontlywageBunosYearsViewModel() - { - MontlyWage = montlySalaryResult,// حقوق ماهانه بدون پایه سنوات - Years = yearsResult,// سنوات - Bunos = bunosResult,//عیدی پاداش - - BasicYears = basicYearResult,//پایه سنوات - SumOfWorkingDay = $"{TotalDays}", - }; - return result; - } - - #endregion - - //مزد مرخصی - #region GetLeavePay - - public double GetLeavePay(DateTime contractStart, DateTime contractEnd, double daylyWage, double consumableItem, - double housingAllowance, double familyAllowance, string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM) - { - double result = 0; - var TotalDays = (contractEnd - contractStart).TotalDays + 1; - - - // {مقدار ساعت مجاز مرخصی در برای یک روز{کامل - var leaveHoursesPerDay = 190.58 / 365; - // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل - var leaveHoursesPerContractDays = leaveHoursesPerDay * TotalDays; + var result = new MontlywageBunosYearsViewModel() + { + MontlyWage = montlySalaryResult,// حقوق ماهانه بدون پایه سنوات + Years = yearsResult,// سنوات + Bunos = bunosResult,//عیدی پاداش + + BasicYears = basicYearResult,//پایه سنوات + SumOfWorkingDay = $"{TotalDays}", + }; + return result; + } + + #endregion + + //مزد مرخصی + #region GetLeavePay + + public double GetLeavePay(DateTime contractStart, DateTime contractEnd, double daylyWage, double consumableItem, + double housingAllowance, double familyAllowance, string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM) + { + double result = 0; + var TotalDays = (contractEnd - contractStart).TotalDays + 1; + + + // {مقدار ساعت مجاز مرخصی در برای یک روز{کامل + var leaveHoursesPerDay = 190.58 / 365; + // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل + var leaveHoursesPerContractDays = leaveHoursesPerDay * TotalDays; - if (weeklyWorkingTime == "24 - 12" || weeklyWorkingTime == "24 - 24" - || weeklyWorkingTime == "36 - 12" || - weeklyWorkingTime == "48 - 24") - { - var MandatoryDays = TotalDays - friday - officialholiday; - //بدست آوردن ساعت موظفی این ماه - var TotalMandatoryHours = MandatoryDays * 7.33; - //تبدیل ساعت به عدد - var totalHoursHDouble = Convert.ToDouble(totalHoursH); - var totalHoursMDouble = Convert.ToDouble(totalHorsM); - if (totalHoursMDouble > 0) - { - //تبیدل دقیه به اعشار - totalHoursMDouble = totalHoursMDouble / 60; - } - //کل ساعت کار پرسنل در این ماه - var totalHours = totalHoursHDouble + totalHoursMDouble; + if (weeklyWorkingTime == "24 - 12" || weeklyWorkingTime == "24 - 24" + || weeklyWorkingTime == "36 - 12" || + weeklyWorkingTime == "48 - 24") + { + var MandatoryDays = TotalDays - friday - officialholiday; + //بدست آوردن ساعت موظفی این ماه + var TotalMandatoryHours = MandatoryDays * 7.33; + //تبدیل ساعت به عدد + var totalHoursHDouble = Convert.ToDouble(totalHoursH); + var totalHoursMDouble = Convert.ToDouble(totalHorsM); + if (totalHoursMDouble > 0) + { + //تبیدل دقیه به اعشار + totalHoursMDouble = totalHoursMDouble / 60; + } + //کل ساعت کار پرسنل در این ماه + var totalHours = totalHoursHDouble + totalHoursMDouble; - var employeeWorkingDay = TotalDays - friday; + var employeeWorkingDay = TotalDays - friday; - if (totalHours < TotalMandatoryHours)// اگر کمتر از 44 ساعت کار کرد - { - var dayliHours = totalHours / employeeWorkingDay; + if (totalHours < TotalMandatoryHours)// اگر کمتر از 44 ساعت کار کرد + { + var dayliHours = totalHours / employeeWorkingDay; - //مقدار مزد روزانه برای یک ساعت - var dayliFee = daylyWage / dayliHours; + //مقدار مزد روزانه برای یک ساعت + var dayliFee = daylyWage / dayliHours; - //اقلام مصرفی برای یک ساعت - var ConoumableItemsStep1 = consumableItem / 30; - var ConsumableItems = ConoumableItemsStep1 / dayliHours; + //اقلام مصرفی برای یک ساعت + var ConoumableItemsStep1 = consumableItem / 30; + var ConsumableItems = ConoumableItemsStep1 / dayliHours; - //کمک هزینه مسکن برای یک ساعت - var housingAllowanceStep1 = housingAllowance / 30; - var HousingAllowance = housingAllowanceStep1 / dayliHours; + //کمک هزینه مسکن برای یک ساعت + var housingAllowanceStep1 = housingAllowance / 30; + var HousingAllowance = housingAllowanceStep1 / dayliHours; - //حق عائله مندی برای یک ساعت - var familyAllowanceStep1 = familyAllowance / 30; - var FamilyAllowance = familyAllowanceStep1 / dayliHours; + //حق عائله مندی برای یک ساعت + var familyAllowanceStep1 = familyAllowance / 30; + var FamilyAllowance = familyAllowanceStep1 / dayliHours; - var Step1Result1 = dayliFee + ConsumableItems + HousingAllowance + FamilyAllowance; + var Step1Result1 = dayliFee + ConsumableItems + HousingAllowance + FamilyAllowance; - // تناسب مجدد به نسبت ساعات کمتر از 7/33 - var res = (leaveHoursesPerContractDays * dayliHours) / 7.33; - result = Step1Result1 * res; - } - else - { - //مقدار مزد روزانه برای یک ساعت - var dayliFee = daylyWage / 7.33; + // تناسب مجدد به نسبت ساعات کمتر از 7/33 + var res = (leaveHoursesPerContractDays * dayliHours) / 7.33; + result = Step1Result1 * res; + } + else + { + //مقدار مزد روزانه برای یک ساعت + var dayliFee = daylyWage / 7.33; - //اقلام مصرفی برای یک ساعت - var ConoumableItemsStep1 = consumableItem / 30; - var ConsumableItems = ConoumableItemsStep1 / 7.33; + //اقلام مصرفی برای یک ساعت + var ConoumableItemsStep1 = consumableItem / 30; + var ConsumableItems = ConoumableItemsStep1 / 7.33; - //کمک هزینه مسکن برای یک ساعت - var housingAllowanceStep1 = housingAllowance / 30; - var HousingAllowance = housingAllowanceStep1 / 7.33; + //کمک هزینه مسکن برای یک ساعت + var housingAllowanceStep1 = housingAllowance / 30; + var HousingAllowance = housingAllowanceStep1 / 7.33; - //حق عائله مندی برای یک ساعت - var familyAllowanceStep1 = familyAllowance / 30; - var FamilyAllowance = familyAllowanceStep1 / 7.33; + //حق عائله مندی برای یک ساعت + var familyAllowanceStep1 = familyAllowance / 30; + var FamilyAllowance = familyAllowanceStep1 / 7.33; - var Step1Result2 = dayliFee + ConsumableItems + HousingAllowance + FamilyAllowance; - result = Step1Result2 * leaveHoursesPerContractDays; - } + var Step1Result2 = dayliFee + ConsumableItems + HousingAllowance + FamilyAllowance; + result = Step1Result2 * leaveHoursesPerContractDays; + } - } - else - { - double weeklyTime = 0; - try - { - weeklyTime = double.Parse(weeklyWorkingTime, CultureInfo.InvariantCulture); - } - catch (Exception e) - { - weeklyTime = double.Parse(weeklyWorkingTime); - } + } + else + { + double weeklyTime = 0; + try + { + weeklyTime = double.Parse(weeklyWorkingTime, CultureInfo.InvariantCulture); + } + catch (Exception e) + { + weeklyTime = double.Parse(weeklyWorkingTime); + } - if (weeklyTime < 44.00) - { - //بدست آوردن میانگین ساعت کار پرسنل در روز - var personelDayliHours = weeklyTime / 6; - - - //مقدار مزد روزانه برای یک ساعت - var dayliFee = daylyWage / personelDayliHours; - - //اقلام مصرفی برای یک ساعت - var ConoumableItemsStep1 = consumableItem / 30; - var ConsumableItems = ConoumableItemsStep1 / personelDayliHours; - - //کمک هزینه مسکن برای یک ساعت - var housingAllowanceStep1 = housingAllowance / 30; - var HousingAllowance = housingAllowanceStep1 / personelDayliHours; - - //حق عائله مندی برای یک ساعت - var familyAllowanceStep1 = familyAllowance / 30; - var FamilyAllowance = familyAllowanceStep1 / personelDayliHours; - - //مزد مرخصی این پرسنل به ازای یک ساعت - var leavPayPerHours = dayliFee + ConsumableItems + HousingAllowance + FamilyAllowance; - - // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل - var res = (leaveHoursesPerContractDays * personelDayliHours) / 7.33; - result = leavPayPerHours * res; - - } - else - { - //مقدار مزد روزانه برای یک ساعت - var dayliFee = daylyWage / 7.33; - - //اقلام مصرفی برای یک ساعت - var ConoumableItemsStep1 = consumableItem / 30; - var ConsumableItems = ConoumableItemsStep1 / 7.33; + if (weeklyTime < 44.00) + { + //بدست آوردن میانگین ساعت کار پرسنل در روز + var personelDayliHours = weeklyTime / 6; + + + //مقدار مزد روزانه برای یک ساعت + var dayliFee = daylyWage / personelDayliHours; + + //اقلام مصرفی برای یک ساعت + var ConoumableItemsStep1 = consumableItem / 30; + var ConsumableItems = ConoumableItemsStep1 / personelDayliHours; + + //کمک هزینه مسکن برای یک ساعت + var housingAllowanceStep1 = housingAllowance / 30; + var HousingAllowance = housingAllowanceStep1 / personelDayliHours; + + //حق عائله مندی برای یک ساعت + var familyAllowanceStep1 = familyAllowance / 30; + var FamilyAllowance = familyAllowanceStep1 / personelDayliHours; + + //مزد مرخصی این پرسنل به ازای یک ساعت + var leavPayPerHours = dayliFee + ConsumableItems + HousingAllowance + FamilyAllowance; + + // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل + var res = (leaveHoursesPerContractDays * personelDayliHours) / 7.33; + result = leavPayPerHours * res; + + } + else + { + //مقدار مزد روزانه برای یک ساعت + var dayliFee = daylyWage / 7.33; + + //اقلام مصرفی برای یک ساعت + var ConoumableItemsStep1 = consumableItem / 30; + var ConsumableItems = ConoumableItemsStep1 / 7.33; - //کمک هزینه مسکن برای یک ساعت - var housingAllowanceStep1 = housingAllowance / 30; - var HousingAllowance = housingAllowanceStep1 / 7.33; - - //حق عائله مندی برای یک ساعت - var familyAllowanceStep1 = familyAllowance / 30; - var FamilyAllowance = familyAllowanceStep1 / 7.33; - - var leavPayPerHours = dayliFee + ConsumableItems + HousingAllowance + FamilyAllowance; - result = leavPayPerHours * leaveHoursesPerContractDays; - } - - } - - - return result; - } - - #endregion - - //اضافه کاری - #region OverTimeWorking - public double GetOverTimeWorking(double dayliWage, string overTimeWorkH, string overTimeWorkM) - { - double result = 0; - - - // اگر اضافه کاری داشت - if (overTimeWorkH != "0" || overTimeWorkM != "0") - { - var overtimeH = Convert.ToDouble(overTimeWorkH); - var overtimeM = Convert.ToDouble(overTimeWorkM); - if (overtimeM > 0) - { - //تبیدل دقیه به اعشار - overtimeM = overtimeM / 60; - } - - var overTime = overtimeH + overtimeM; - - // محاسبه اضافه کاری برای یک ساعت - var oneHouerOverTime = dayliWage / 7.33 * 1.4; - result = oneHouerOverTime * overTime; - - } - - return result; - - - } - #endregion - - //شب کاری - #region OverNightWorking - - public double GetOverNightWorking(double dayliWage, string overNightWorkH, string overNightWorkM, string weeklyWorkingTime, int officialholiday, int friday, DateTime contractStart, DateTime contractEnd, string totalHoursH, string totalHorsM) - { - double result = 0; - double computeResult = 0; - //تعداد روزهای قرارداد + //کمک هزینه مسکن برای یک ساعت + var housingAllowanceStep1 = housingAllowance / 30; + var HousingAllowance = housingAllowanceStep1 / 7.33; + + //حق عائله مندی برای یک ساعت + var familyAllowanceStep1 = familyAllowance / 30; + var FamilyAllowance = familyAllowanceStep1 / 7.33; + + var leavPayPerHours = dayliFee + ConsumableItems + HousingAllowance + FamilyAllowance; + result = leavPayPerHours * leaveHoursesPerContractDays; + } + + } + + + return result; + } + + #endregion + + //اضافه کاری + #region OverTimeWorking + public double GetOverTimeWorking(double dayliWage, string overTimeWorkH, string overTimeWorkM) + { + double result = 0; + + + // اگر اضافه کاری داشت + if (overTimeWorkH != "0" || overTimeWorkM != "0") + { + var overtimeH = Convert.ToDouble(overTimeWorkH); + var overtimeM = Convert.ToDouble(overTimeWorkM); + if (overtimeM > 0) + { + //تبیدل دقیه به اعشار + overtimeM = overtimeM / 60; + } + + var overTime = overtimeH + overtimeM; + + // محاسبه اضافه کاری برای یک ساعت + var oneHouerOverTime = dayliWage / 7.33 * 1.4; + result = oneHouerOverTime * overTime; + + } + + return result; + + + } + #endregion + + //شب کاری + #region OverNightWorking + + public double GetOverNightWorking(double dayliWage, string overNightWorkH, string overNightWorkM, string weeklyWorkingTime, int officialholiday, int friday, DateTime contractStart, DateTime contractEnd, string totalHoursH, string totalHorsM) + { + double result = 0; + double computeResult = 0; + //تعداد روزهای قرارداد - if (weeklyWorkingTime == "24 - 12" || weeklyWorkingTime == "24 - 24" - || weeklyWorkingTime == "36 - 12" || - weeklyWorkingTime == "48 - 24") - { - var TotalDays = (contractEnd - contractStart).TotalDays + 1; - //روزهای قرارداد منهای جمعه ها و تعطیلات رسمی - var MandatoryDays = TotalDays - friday - officialholiday; - //بدست آوردن ساعت موظفی این ماه - var TotalMandatoryHours = MandatoryDays * 7.33; - //تبدیل ساعت به عدد - var totalHoursHDouble = Convert.ToDouble(totalHoursH); - var totalHoursMDouble = Convert.ToDouble(totalHorsM); - if (totalHoursMDouble > 0) - { - //تبیدل دقیه به اعشار - totalHoursMDouble = totalHoursMDouble / 60; - } - //کل ساعت کار پرسنل در این ماه - var totalHours = totalHoursHDouble + totalHoursMDouble; - - var employeeWorkingDay = TotalDays - friday; - - - if (overNightWorkH != "0" || overNightWorkM != "0") - { - var overtimeNightH = Convert.ToDouble(overNightWorkH); - var overtimeNightM = Convert.ToDouble(overNightWorkM); - if (overtimeNightM > 0) - { - //تبیدل دقیه به اعشار - overtimeNightM = overtimeNightM / 60; - } - - var overNightTime = overtimeNightH + overtimeNightM; - - //به دست آوردن ساعات کارکرد - - - // محاسبه اضافه کاری برای یک ساعت - if (totalHours < TotalMandatoryHours)// اگر کمتر از 44 ساعت کار کرد - { - //بدست آوردن میانگین ساعت کار کارگر در یک روز - var employeeMonadtory = totalHours / employeeWorkingDay; - computeResult = (dayliWage / employeeMonadtory * 35) / 100; - } - else - { - computeResult = (dayliWage / 7.33 * 35) / 100; - } - - - result = computeResult * overNightTime; - - } - } - else - { - if (overNightWorkH != "0" || overNightWorkM != "0") - { - var overtimeNightH = Convert.ToDouble(overNightWorkH); - var overtimeNightM = Convert.ToDouble(overNightWorkM); - if (overtimeNightM > 0) - { - //تبیدل دقیه به اعشار - overtimeNightM = overtimeNightM / 60; - } - - var overNightTime = overtimeNightH + overtimeNightM; - - //به دست آوردن ساعات کارکرد - double weeklyTime = 0; - try - { - - weeklyTime = double.Parse(weeklyWorkingTime, CultureInfo.InvariantCulture); - } - catch (Exception e) - { - weeklyTime = double.Parse(weeklyWorkingTime); - } - - // محاسبه اضافه کاری برای یک ساعت - if (weeklyTime < 44.00)// اگر کمتر از 44 ساعت کار کرد - { - var dayliHours = weeklyTime / 6; - computeResult = (dayliWage / dayliHours * 35) / 100; - } - else - { - computeResult = (dayliWage / 7.33 * 35) / 100; - } - - - result = computeResult * overNightTime; - - } - - - // اگر شیکاری کاری داشت - - } - - return result; - } - - #endregion - - public void TestDayliFeeCompute() - { - //مقادیر سالانه - var salary = _context.YearlySalaries.Include(i => i.YearlySalaryItemsList).OrderBy(x => x.StartDate).ToList(); - - // یافتن مزد روزانه سال قبل از اولین شروع بکار - var DayliSalaryStep1 = salary.FirstOrDefault(x => x.Year == "1370")! - .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); - var DayliSalaryStep1Fa = DayliSalaryStep1.ToMoney(); - double firstDayliSalary = DayliSalaryStep1Fa.MoneyToDouble(); - - string firstYear = "1370"; - int counter = 0; - foreach (var item in salary) - { - Console.WriteLine($"{item.Year} - {item.ConnectionId}"); - var currentDayliFee = item! - .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); - var fixFeePercentage = item! - .YearlySalaryItemsList.Where(x => x.ItemName == "درصد مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); - // مبلغ مزد ثابت سال جاری - var fixFeePrice = item!.YearlySalaryItemsList - .Where(x => x.ItemName == "مبلغ مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); - - if (counter > 0) - { - if (firstYear == item.Year) - { - int currentYear = Convert.ToInt32(item.Year); - string lastYear = $"{currentYear - 1}"; - firstDayliSalary = salary.Where(x => x.Year == lastYear).MaxBy(x => x.StartDate)! - .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); - - } - // مزد روزانه سال قبل ضربدر درصد مزد ثابت تقسیم بر صد - var percntSumDaylifee = (firstDayliSalary * fixFeePercentage) / 100; - // نتیجه عملیات بالا بعلاوه مزد سال قبل - var Sum = firstDayliSalary + percntSumDaylifee; - - //مزد پایه - var BaseResult = Sum + fixFeePrice; - var baseResultFa = BaseResult.ToMoney(); - var res = GetCurrectFirstDailyFee(BaseResult, item.Year); - - if (currentDayliFee != res) - { - Console.BackgroundColor = ConsoleColor.DarkRed; - Console.WriteLine($" lastYear : {firstDayliSalary} thisYearOriginal : {currentDayliFee} GetCurrect : {res} falseResut : {BaseResult} "); - Console.ResetColor(); - } - else - { - Console.WriteLine($" lastYear : {firstDayliSalary} thisYearOriginal : {currentDayliFee} GetCurrect : {res} falseResut : {BaseResult} "); - } - - //Console.WriteLine($"{item.Year} defualtFa : {currentDayliFee.ToMoney()} dailFeeFa : {BaseResult.ToMoney()} "); - firstDayliSalary = res; - firstYear = item.Year; - - - } - - counter++; - } - - //مقدار اولیه مزد روزانه - - } - - private double GetCurrectFirstDailyFee(double value, string year) - { - double currected = 0; - switch (year) - { - case "1370": - currected = value; - break; - case "1371": - currected = value; - break; - case "1372": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1373": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1374": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1375": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1376": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1377": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1378": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1379": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1380": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1381": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1382": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1383": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1384": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1385": - currected = value == 49950.4 ? 50000 : value; - break; - case "1386": - currected = value < 61000 ? 61000 : value; - break; - case "1387": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1388": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1389": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1390": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1391": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1392": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1393": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1394": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1395": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1396": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1397": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1398": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1399": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1400": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1401": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - case "1402": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1403": - currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); - break; - case "1404": - currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); - break; - default: - currected = value; - break; - - - } - - return currected; - - } + if (weeklyWorkingTime == "24 - 12" || weeklyWorkingTime == "24 - 24" + || weeklyWorkingTime == "36 - 12" || + weeklyWorkingTime == "48 - 24") + { + var TotalDays = (contractEnd - contractStart).TotalDays + 1; + //روزهای قرارداد منهای جمعه ها و تعطیلات رسمی + var MandatoryDays = TotalDays - friday - officialholiday; + //بدست آوردن ساعت موظفی این ماه + var TotalMandatoryHours = MandatoryDays * 7.33; + //تبدیل ساعت به عدد + var totalHoursHDouble = Convert.ToDouble(totalHoursH); + var totalHoursMDouble = Convert.ToDouble(totalHorsM); + if (totalHoursMDouble > 0) + { + //تبیدل دقیه به اعشار + totalHoursMDouble = totalHoursMDouble / 60; + } + //کل ساعت کار پرسنل در این ماه + var totalHours = totalHoursHDouble + totalHoursMDouble; + + var employeeWorkingDay = TotalDays - friday; + + + if (overNightWorkH != "0" || overNightWorkM != "0") + { + var overtimeNightH = Convert.ToDouble(overNightWorkH); + var overtimeNightM = Convert.ToDouble(overNightWorkM); + if (overtimeNightM > 0) + { + //تبیدل دقیه به اعشار + overtimeNightM = overtimeNightM / 60; + } + + var overNightTime = overtimeNightH + overtimeNightM; + + //به دست آوردن ساعات کارکرد + + + // محاسبه اضافه کاری برای یک ساعت + if (totalHours < TotalMandatoryHours)// اگر کمتر از 44 ساعت کار کرد + { + //بدست آوردن میانگین ساعت کار کارگر در یک روز + var employeeMonadtory = totalHours / employeeWorkingDay; + computeResult = (dayliWage / employeeMonadtory * 35) / 100; + } + else + { + computeResult = (dayliWage / 7.33 * 35) / 100; + } + + + result = computeResult * overNightTime; + + } + } + else + { + if (overNightWorkH != "0" || overNightWorkM != "0") + { + var overtimeNightH = Convert.ToDouble(overNightWorkH); + var overtimeNightM = Convert.ToDouble(overNightWorkM); + if (overtimeNightM > 0) + { + //تبیدل دقیه به اعشار + overtimeNightM = overtimeNightM / 60; + } + + var overNightTime = overtimeNightH + overtimeNightM; + + //به دست آوردن ساعات کارکرد + double weeklyTime = 0; + try + { + + weeklyTime = double.Parse(weeklyWorkingTime, CultureInfo.InvariantCulture); + } + catch (Exception e) + { + weeklyTime = double.Parse(weeklyWorkingTime); + } + + // محاسبه اضافه کاری برای یک ساعت + if (weeklyTime < 44.00)// اگر کمتر از 44 ساعت کار کرد + { + var dayliHours = weeklyTime / 6; + computeResult = (dayliWage / dayliHours * 35) / 100; + } + else + { + computeResult = (dayliWage / 7.33 * 35) / 100; + } + + + result = computeResult * overNightTime; + + } + + + // اگر شیکاری کاری داشت + + } + + return result; + } + + #endregion + + public void TestDayliFeeCompute() + { + //مقادیر سالانه + var salary = _context.YearlySalaries.Include(i => i.YearlySalaryItemsList).OrderBy(x => x.StartDate).ToList(); + + // یافتن مزد روزانه سال قبل از اولین شروع بکار + var DayliSalaryStep1 = salary.FirstOrDefault(x => x.Year == "1370")! + .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); + var DayliSalaryStep1Fa = DayliSalaryStep1.ToMoney(); + double firstDayliSalary = DayliSalaryStep1Fa.MoneyToDouble(); + + string firstYear = "1370"; + int counter = 0; + foreach (var item in salary) + { + Console.WriteLine($"{item.Year} - {item.ConnectionId}"); + var currentDayliFee = item! + .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); + var fixFeePercentage = item! + .YearlySalaryItemsList.Where(x => x.ItemName == "درصد مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); + // مبلغ مزد ثابت سال جاری + var fixFeePrice = item!.YearlySalaryItemsList + .Where(x => x.ItemName == "مبلغ مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); + + if (counter > 0) + { + if (firstYear == item.Year) + { + int currentYear = Convert.ToInt32(item.Year); + string lastYear = $"{currentYear - 1}"; + firstDayliSalary = salary.Where(x => x.Year == lastYear).MaxBy(x => x.StartDate)! + .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); + + } + // مزد روزانه سال قبل ضربدر درصد مزد ثابت تقسیم بر صد + var percntSumDaylifee = (firstDayliSalary * fixFeePercentage) / 100; + // نتیجه عملیات بالا بعلاوه مزد سال قبل + var Sum = firstDayliSalary + percntSumDaylifee; + + //مزد پایه + var BaseResult = Sum + fixFeePrice; + var baseResultFa = BaseResult.ToMoney(); + var res = GetCurrectFirstDailyFee(BaseResult, item.Year); + + if (currentDayliFee != res) + { + Console.BackgroundColor = ConsoleColor.DarkRed; + Console.WriteLine($" lastYear : {firstDayliSalary} thisYearOriginal : {currentDayliFee} GetCurrect : {res} falseResut : {BaseResult} "); + Console.ResetColor(); + } + else + { + Console.WriteLine($" lastYear : {firstDayliSalary} thisYearOriginal : {currentDayliFee} GetCurrect : {res} falseResut : {BaseResult} "); + } + + //Console.WriteLine($"{item.Year} defualtFa : {currentDayliFee.ToMoney()} dailFeeFa : {BaseResult.ToMoney()} "); + firstDayliSalary = res; + firstYear = item.Year; + + + } + + counter++; + } + + //مقدار اولیه مزد روزانه + + } + + private double GetCurrectFirstDailyFee(double value, string year) + { + double currected = 0; + switch (year) + { + case "1370": + currected = value; + break; + case "1371": + currected = value; + break; + case "1372": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1373": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1374": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1375": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1376": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1377": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1378": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1379": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1380": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1381": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1382": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1383": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1384": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1385": + currected = value == 49950.4 ? 50000 : value; + break; + case "1386": + currected = value < 61000 ? 61000 : value; + break; + case "1387": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1388": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1389": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1390": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1391": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1392": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1393": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1394": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1395": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1396": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1397": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1398": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1399": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1400": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1401": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + case "1402": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1403": + currected = Math.Round(value, MidpointRounding.ToNegativeInfinity); + break; + case "1404": + currected = Math.Round(value, MidpointRounding.ToPositiveInfinity); + break; + default: + currected = value; + break; + + + } + + return currected; + + } //محاسبه حقوق روزانه #region DayliSalary - public async Task UpgradeManualDailyWage(DateTime newContractStart, DateTime lastContractStart, double lastContractManualDailyWage) + public async Task UpgradeManualDailyWage(DateTime newContractStart, DateTime lastContractStart, double lastContractManualDailyWage) { - //تمام مقادیر سالانه بعد از مزد دلخواه آخرین قراداد - var salaries = await _context.YearlySalaries - .Where(x=> x. StartDate > lastContractStart && x.StartDate <= newContractStart && x.EndDate >= lastContractStart) - .Include(x => x.YearlySalaryItemsList).ToListAsync(); - //مقادیر سالانه آخرین قرارداد - var lastContractSalary = await _context.YearlySalaries.FirstOrDefaultAsync(x => - x.StartDate <= lastContractStart && x.EndDate >= lastContractStart); + //تمام مقادیر سالانه بعد از مزد دلخواه آخرین قراداد + var salaries = await _context.YearlySalaries + .Where(x => x.StartDate > lastContractStart && x.StartDate <= newContractStart && x.EndDate >= lastContractStart) + .Include(x => x.YearlySalaryItemsList).ToListAsync(); + //مقادیر سالانه آخرین قرارداد + var lastContractSalary = await _context.YearlySalaries.FirstOrDefaultAsync(x => + x.StartDate <= lastContractStart && x.EndDate >= lastContractStart); var res = MonthByMonthList(lastContractStart, newContractStart); var dailyWageList = new List<(double dailyWage, DateTime start, DateTime end, string year)>(); @@ -888,7 +889,39 @@ public class YearlySalaryRepository : RepositoryBase, IYearl } Console.WriteLine($"{newContractStart.ToFarsi()} -> upgradedDailyWage : {dailyWageList.Last().dailyWage}"); - return dailyWageList.Last().dailyWage; + var dailyWageResult = dailyWageList.Last().dailyWage; + + + var dailyWageListResult =new List<(string startEnd, string dailyWage)>(); + var firstRecord = dailyWageList.MinBy(x => x.start); + foreach (var item in dailyWageList) + { + + if (item.start == firstRecord.start) + { + var record = ($"{lastContractStart.ToFarsi()} - {item.end.ToFarsi()}", item.dailyWage.ToMoney()); + dailyWageListResult.Add(record); + } + else + { + var record = ($"{item.start.ToFarsi()} - {item.end.ToFarsi()}", item.dailyWage.ToMoney()); + dailyWageListResult.Add(record); + } + + } + + var result = new UpgradeManualDailyWageModel + { + DailyWage = dailyWageResult, + UpgradeManualDailyWageLists = dailyWageListResult.Select(x=> new UpgradeManualDailyWageList() + { + StartEndDate = x.startEnd, + DailyWage = x.dailyWage + }).ToList() + + }; + + return result; } @@ -910,6 +943,8 @@ public class YearlySalaryRepository : RepositoryBase, IYearl //لیست شروع بکار / ترک کار پرسنل leftWorkList = leftWorkList.OrderBy(x => x.StartWorkDateGr).ToList(); + + var firstStartWork = leftWorkList.First().StartWorkDate; //مقادیر سالانه var salary = await _context.YearlySalaries.OrderByDescending(x => x.EndDate).Include(x => x.YearlySalaryItemsList).ToListAsync(); //آیا در حلقه کبیشه بودن چک شود @@ -960,7 +995,7 @@ public class YearlySalaryRepository : RepositoryBase, IYearl baseYearDateList.Add(a); Console.WriteLine($" End : {a.ToFarsi()}"); } - + } @@ -1029,11 +1064,11 @@ public class YearlySalaryRepository : RepositoryBase, IYearl hasCute = true; max365 += 1; } - - - - - + + + + + } } @@ -1043,6 +1078,7 @@ public class YearlySalaryRepository : RepositoryBase, IYearl // پایه سنوات نهایی double selectBase = 0; + var baseList = new List<(double baseYaer, DateTime start, DateTime end, string baseYearPay, DateTime baseYearPayGr, string year, bool hasStartWork, bool hasLeftWork)>(); if (baseYearDateList.Count > 0) { var firstBaseYearDate = baseYearDateList.First(); @@ -1062,8 +1098,8 @@ public class YearlySalaryRepository : RepositoryBase, IYearl res = res.Where(x => x.start != firstBaseYearDate).OrderBy(x => x.start).ToList(); //var afterSalary = salary.Where(x => x.StartDate > firstbasicSalari.EndDate).ToList(); - var baseList = new List<(double baseYaer, DateTime start, DateTime end, string year)>(); - var first = (firstBasic, firstbasicSalari.StartDate, firstbasicSalari.EndDate, firstbasicSalari.Year); + + var first = (firstBasic, firstbasicSalari.StartDate, firstbasicSalari.EndDate, firstBaseYearDate.ToFarsi(), firstBaseYearDate, firstbasicSalari.Year,false,false); baseList.Add(first); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"{1398} -> firstBasic : {firstBasic}"); @@ -1112,10 +1148,27 @@ public class YearlySalaryRepository : RepositoryBase, IYearl var currentBase = currentBasic + percntBaseYear; baseYear = currentBase; + var baseYearPay = "-"; + var baseYearPayDayGr = new DateTime(); + if (baseYearDateList.Any(x => x >= currentSalary.StartDate && x <= currentSalary.EndDate)) + { + var existBaseYear = baseYearDateList.FirstOrDefault(x => x >= currentSalary.StartDate && x <= currentSalary.EndDate); + baseYearPay = existBaseYear.ToFarsi(); + baseYearPayDayGr = new DateTime(existBaseYear.Year,existBaseYear.Month,existBaseYear.Day,17,01,01); + } + else + { + baseYearPayDayGr = new DateTime(item.start.Year, item.start.Month, item.start.Day, 17, 01, 01); - + } + + + Console.ForegroundColor = ConsoleColor.DarkYellow; + Console.WriteLine(baseYearPay); + Console.ResetColor(); + // var round = GetCurrectFirstDailyFee(currentBase, $"{year}"); - var record = (baseYear, currentSalary.StartDate, currentSalary.EndDate, currentSalary.Year); + var record = (baseYear, currentSalary.StartDate, currentSalary.EndDate, baseYearPay, baseYearPayDayGr, currentSalary.Year, false, false); baseList.Add(record); @@ -1126,44 +1179,59 @@ public class YearlySalaryRepository : RepositoryBase, IYearl Console.ResetColor(); - selectBase = baseList.Last().baseYaer; - baseYearResult = new BaseYearDataViewModel() - { - WorkshopId = workshopId, - EmployeeId = employeeId, - BaseYearResult = selectBase, - BaseYearDataList = baseList.Select(x => new BaseYearDataList() - { - BaseYear = x.baseYaer, - - StartDateGr = x.start, - EndDateGr = x.end, - - StartDateFa = x.start.ToFarsi(), - EndDateFa = x.end.ToFarsi(), - Year = x.year - }).ToList(), - - }; } - //var resCompute = DayliFeeComputingTest(startDateW, contractStart, endDateW, employeeId, workshopId, leftWorkList); - //var originalCompute = DayliFeeComputing(startDateW, contractStart, endDateW, employeeId, workshopId, leftWorkList); - //var lastBaseResult = baseYearDateList.Last().baseyearDouble; + selectBase = baseList.Any() ? baseList.Last().baseYaer : 0; + //افزودن تاریخ های شروع بکار و ترک کار به لیست + foreach (var left in leftWorkList) + { + var startWork =(0,new DateTime(), new DateTime(), left.StartWorkDateGr.ToFarsi(), left.StartWorkDateGr, "-",true,false); + baseList.Add(startWork); - //Console.WriteLine($"dailyWage = {resCompute.DayliFeeDouble} - baseYear {selectBase} dailywagePlusBaseyaer = {resCompute.DayliFeeDouble + selectBase} ok = {originalCompute.DayliFeeDouble}"); + if (left.HasLeft) + { + var leftWork = (0, new DateTime(), new DateTime(), left.LeftWorkDateGr.ToFarsi(), left.LeftWorkDateGr, "-", false,true); + baseList.Add(leftWork); + } + + + } + + + baseYearResult = new BaseYearDataViewModel() + { + WorkshopId = workshopId, + EmployeeId = employeeId, + BaseYearResult = selectBase, + FirstWorkDayInLeftWork = firstStartWork, + BaseYearDataList = baseList.Select(x => new BaseYearDataList() + { + BaseYear = x.baseYaer, + + StartDateGr = x.start, + EndDateGr = x.end, + BaseYearPayDay = x.baseYearPay, + BaseYearPayDayGr = x.baseYearPayGr, + StartDateFa = x.start.ToFarsi(), + EndDateFa = x.end.ToFarsi(), + Year = x.year, + HasLeftWork = x.hasLeftWork, + HasStartWork = x.hasStartWork, + }).OrderBy(x => x.BaseYearPayDayGr).ToList(), + + }; Console.WriteLine("BaseYear : " + selectBase); return baseYearResult; } - + /// - /// متد کمکی پایه سنوات - /// - /// - /// - /// + /// متد کمکی پایه سنوات + /// + /// + /// + /// private List<(DateTime start, DateTime end)> MonthByMonthList(DateTime startDate, DateTime endDate) { @@ -1213,3110 +1281,3110 @@ public class YearlySalaryRepository : RepositoryBase, IYearl } public DayliFeeViewModel DayliFeeComputing(DateTime startDateW, DateTime contractStart, DateTime endDateW, long employeeId, long workshopId, List leftWorkList) - { - int oldYear = 0; - string oldYearTemp = string.Empty; - var startPeriod = new DateTime(); - var endtPeriod = new DateTime(); - string finalResultMoney = string.Empty; - double FinalResult = 0; - int DayCounter = 0; - int Max365 = 366; - double Basic = 0; - double BaseResult = 0; - DateTime periodStarter = new DateTime(); - int loopdateYear = 0; - long stDateId = 0;//ای دی ماه های دوگانه - double basicResultSum = 0; - //مقادیر سالانه - var salary = _context.YearlySalaries.OrderByDescending(x => x.EndDate).Include(x => x.YearlySalaryItemsList).ToList(); - - - - // تاریخ اولین شروع بکار - var startDateB = leftWorkList.OrderBy(x => x.StartWorkDateGr).Select(x => x.StartWorkDate).FirstOrDefault(); - - //نگهدارنده آی دی سال در مقادیر سالانه - long loopDateId = 0; - - - var syear = Convert.ToInt32(startDateB.Substring(0, 4)); - var smonth = Convert.ToInt32(startDateB.Substring(5, 2)); - var sday = Convert.ToInt32(startDateB.Substring(8, 2)); - - var endDateConvert = endDateW.ToFarsi(); - var eyear = Convert.ToInt32(endDateConvert.Substring(0, 4)); - var emonth = Convert.ToInt32(endDateConvert.Substring(5, 2)); - var eday = Convert.ToInt32(endDateConvert.Substring(8, 2)); - - //تبدیل تاریخ اولین شروع بکار به شمسی تقویمی - var d1 = new PersianDateTime(syear, smonth, sday); - //تبدیل تاریخ پایان قرارداد به شمسی تقویمی - var d2 = new PersianDateTime(eyear, emonth, eday); - - var getWork = startDateB.ToGeorgianDateTime(); - //یافتن سال گزشته - var getWorkYear = syear - 1; - oldYear = syear - 1; - var getWorkYearString = getWorkYear.ToString(); - //var getWorkSalary = salary.FirstOrDefault(x=>x.Year == getWorkYearString); - var dayliSalaryStep1Check = salary.Any(x => x.Year == getWorkYearString); - // یافتن مزد روزانه سال قبل از اولین شروع بکار - var DayliSalaryStep1 = salary.FirstOrDefault(x => x.Year == getWorkYearString) - .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); - - //مقدار اولیه مزد روزانه - var DayliSalaryStep1Fa = DayliSalaryStep1.ToMoney(); - double firstDayliSalary = DayliSalaryStep1Fa.MoneyToDouble(); - - DateTime baseYearDate = new DateTime(); - - for (DateTime LoopDate = getWork; LoopDate <= endDateW; LoopDate = LoopDate.AddDays(1)) - { - var loopdateFa = LoopDate.ToFarsi(); - loopdateYear = Convert.ToInt32(loopdateFa.Substring(0, 4)); - - var LoopDateGr = LoopDate; - //یافتن ترک کار - var check = leftWorkList.Any(x => x.StartWorkDateGr == LoopDateGr); - if (check) - { - var period = leftWorkList.FirstOrDefault(x => x.StartWorkDateGr == LoopDateGr); - //ذخیره تاریخ شروع بکار - startPeriod = period.StartWorkDateGr; - if (period.LeftWorkDate == "1500/01/01") - { - endtPeriod = endDateW; - } - else - { - - endtPeriod = period.LeftWorkDateGr.AddDays(-1); - // ذخیره تاریخ ترک کار - - } - - - } - - - - //اگر تاریخ جاری بزرگتر یت مساوی تاریخ شروع ترک کار و کوچکتر یا مساوی تاریخ پایان ترک کار بود - if (LoopDateGr >= startPeriod && LoopDateGr <= endtPeriod) - { - //اگر شمارنده روزها صفر بود - if (DayCounter == 0) - { - - //var date = LoopDate.ToString(); - // ذهیر تعداد روز های سال جاری بر اساس کبیسه یودن یا نبودن - Max365 = loopdateFa.YearTotalDays(); - } - // یک روز به شمارنده روزها اضافه کن - DayCounter += 1; - - //periodStarter = startPeriod.ContractStartGr; - } - - - //آیا در مقادیر سالانه رکوردی وجود دارد که شروعش از تاریخ جاری کوچکتر و پایانش از تاریخ جاری بزرگتر باشد - var checkExist = salary.Any(x => - x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId); - if (checkExist) - { - var test = loopdateYear.ToString();//سال جاری رو بدست بیار - var step2 = salary.Where(x => x.Year == test).OrderByDescending(x => x.StartDate).ToList();// اونایی رو بیار که سال جاری هستن - if (step2.Count > 1)// اگر تعدادشون بیش از 1 بود - { - - var stDate = step2.FirstOrDefault(); // آخری - - if (DayCounter < Max365) - { - - if (LoopDateGr >= stDate.StartDate && LoopDateGr <= stDate.EndDate && oldYear != loopdateYear && stDate.id != stDateId) - { - - var fixFeePercentage = salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId) - .YearlySalaryItemsList.Where(x => x.ItemName == "درصد مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); - // مبلغ مزد ثابت سال جاری - var fixFeePrice = salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId) - .YearlySalaryItemsList.Where(x => x.ItemName == "مبلغ مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); - - // مزد روزانه سال قبل ضربدر درصد مزد ثابت تقسیم بر صد - var percntSumDaylifee = (firstDayliSalary * fixFeePercentage) / 100; - // نتیجه عملیات بالا بعلاوه مزد سال قبل - var Sum = firstDayliSalary + percntSumDaylifee; - - //مزد پایه - BaseResult = Sum + fixFeePrice; - BaseResult = GetCurrectFirstDailyFee(BaseResult, test); - //var rondUp = Convert.ToInt32(BaseResult); - - Console.WriteLine($"{test} - mozdeSaleGhabl[{firstDayliSalary}] - mozdeSaleJari[{BaseResult}] - fixFeePercentage[{fixFeePercentage}] - fixFeePrice[{fixFeePrice}]"); - //آی دی سال جاری - loopDateId = salary.Where(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId).Select(x => x.id).FirstOrDefault(); - // ذخیره سال جاری بعنوان سال گذشته برای عملیات بعدی - oldYear = loopdateYear; - stDateId = stDate.id; - } - else - { - if (BaseResult == 0) - { - var oldYearString = oldYear.ToString(); - var resDouble = salary.FirstOrDefault(x => x.Year == oldYearString) - .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); - var resFa = resDouble.ToMoney(); - BaseResult = resFa.MoneyToDouble(); - - } - - } - - - } - else if (DayCounter == Max365 && oldYear != loopdateYear) - { - - var fixFeePercentage = salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId) - .YearlySalaryItemsList.Where(x => x.ItemName == "درصد مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); - // مبلغ مزد ثابت سال جاری - var fixFeePrice = salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId) - .YearlySalaryItemsList.Where(x => x.ItemName == "مبلغ مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); - - // مزد روزانه سال قبل ضربدر درصد مزد ثابت تقسیم بر صد - var percntSumDaylifee = (firstDayliSalary * fixFeePercentage) / 100; - // نتیجه عملیات بالا بعلاوه مزد سال قبل - var Sum = firstDayliSalary + percntSumDaylifee; - //مزد پایه - BaseResult = Sum + fixFeePrice; - //var rondUp = Convert.ToInt32(BaseResult); - BaseResult = GetCurrectFirstDailyFee(BaseResult, test); - Console.WriteLine($"{test} - mozdeSaleGhabl[{firstDayliSalary}] - mozdeSaleJari[{BaseResult}] - fixFeePercentage[{fixFeePercentage}] - fixFeePrice[{fixFeePrice}]"); - - //آی دی سال جاری - loopDateId = salary.Where(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId).Select(x => x.id).FirstOrDefault(); - // ذخیره سال جاری بعنوان سال گذشته برای عملیات بعدی - oldYear = loopdateYear; - } - - } - else if (step2.Count == 1 && oldYear != loopdateYear) - { - //درصد مزد ثابت تاریخ جاری - var fixFeePercentage = salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId) - .YearlySalaryItemsList.Where(x => x.ItemName == "درصد مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); - // مبلغ مزد ثابت سال جاری - var fixFeePrice = salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId) - .YearlySalaryItemsList.Where(x => x.ItemName == "مبلغ مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); - - // مزد روزانه سال قبل ضربدر درصد مزد ثابت تقسیم بر صد - var percntSumDaylifee = (firstDayliSalary * fixFeePercentage) / 100; - // نتیجه عملیات بالا بعلاوه مزد سال قبل - var Sum = firstDayliSalary + percntSumDaylifee; - - - //مزد پایه - BaseResult = Sum + fixFeePrice; - BaseResult = GetCurrectFirstDailyFee(BaseResult, test); - //var rondUp = Convert.ToInt32(BaseResult); - - Console.WriteLine($"{test} - mozdeSaleGhabl[{firstDayliSalary}] - mozdeSaleJari[{BaseResult}] - fixFeePercentage[{fixFeePercentage}] - fixFeePrice[{fixFeePrice}]"); - - //آی دی سال جاری - loopDateId = salary.Where(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId).Select(x => x.id).FirstOrDefault(); - // ذخیره سال جاری بعنوان سال گذشته برای عملیات بعدی - oldYear = loopdateYear; - } - } - //اگر شرط بالا صحیح بود و سال جاری از سال گذشته بزرگتر بود اعملیات را انجام بده - //if (checkExist && loopdateYear > oldYear) - //{ - - - //} - - - - - //اگر شمارنده روزها مساوی شد یا 365 - if (DayCounter == Max365) - { - var test = LoopDateGr.ToFarsi(); - var basicSalari = - salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr); - //پایه سنوات سال جاری - Basic = basicSalari - .YearlySalaryItemsList.Where(x => x.ItemName == "پایه سنوات").Select(x => x.ItemValue).FirstOrDefault(); - //پایه سنوات سال جاری بعلاوه مزد پایه - BaseResult += Basic; - basicResultSum += Basic; - Console.BackgroundColor = ConsoleColor.DarkYellow; - Console.WriteLine($"{test} - mozd[{BaseResult}] - Basic[{Basic}]"); - Console.ResetColor(); - //صفر نمودن شمارنده روزها - DayCounter = 0; - } - - //if (loopdateFa == "1398/12/29") - //{ - // Console.WriteLine(BaseResult); - //} - //else if (loopdateFa == "1399/12/30") - //{ - // Console.WriteLine(BaseResult); - //} - //else if (loopdateFa == "1400/12/29") - //{ - // Console.WriteLine(BaseResult); - //} - //else if (loopdateFa == "1401/12/29") - //{ - // Console.WriteLine(BaseResult); - //} - //else if (loopdateFa == "1402/01/29") - //{ - // Console.WriteLine(BaseResult); - //} - - - FinalResult = BaseResult; - //ذخیره نتیجه نهایی مزد پایه - firstDayliSalary = FinalResult; - - } - - //ارسال مزد نهایی بعد از پایان حقه - #region round - - int FinalResultInt = (int)FinalResult; - var FinalResultDouble = (double)FinalResultInt; - #endregion - finalResultMoney = FinalResultDouble.ToMoney(); - - var res = new DayliFeeViewModel() - { - DayliFeeDouble = FinalResultDouble, - DayliFee = finalResultMoney, - Basic = basicResultSum.ToMoney() - }; - return res; - - - - - } - - public async Task DayliFeeComputingAsync(DateTime startDateW, DateTime contractStart, DateTime endDateW, long employeeId, - long workshopId, List leftWorkList) - { - var res = DayliFeeComputing(startDateW, contractStart, endDateW, employeeId, - workshopId, leftWorkList); - return res; - } - - #endregion - - //کمک هزینه اقلام از جدول مقادیر بر اساس سال انتخاب شده - #region ConsumableItems - - public string ConsumableItems(DateTime endDateW) - { - var endDateInput = _context.YearlySalaries - .SingleOrDefault(x => x.StartDate <= endDateW && x.EndDate >= endDateW); - var FirstItems = _context.YearlySalaryItems.SingleOrDefault(x => x.YearlySalaryId == endDateInput.id && x.ItemName == "کمک هزینه اقلام"); - var res = FirstItems.ItemValue; - var result = res.ToMoney(); - return result; - } - - #endregion - - //یافتن حق مسکن از جدول مقادیر بر اساس سال انتخاب شده - #region HousingAllowance - - public string HousingAllowance(DateTime endDateW) - { - var endDateInput = _context.YearlySalaries - .SingleOrDefault(x => x.StartDate <= endDateW && x.EndDate >= endDateW); - var FirstItems = _context.YearlySalaryItems.SingleOrDefault(x => x.YearlySalaryId == endDateInput.id && x.ItemName == "کمک هزینه مسکن"); - var res = FirstItems.ItemValue; - var result = res.ToMoney(); - return result; - } - - #endregion - - // محاسبه حق عائله مندی پرسنل بر اساس تاریخ ورودی و آی دی پرسنل - #region FamilyAllowance - - public string FamilyAllowance(long personelID, DateTime startContract, DateTime endContract) - { - //DateTime zeroTime = new DateTime(1, 1, 1); - //TimeSpan Age = new TimeSpan(); - - - var endDateInput = _context.YearlySalaries - .SingleOrDefault(x => x.StartDate <= endContract && x.EndDate >= endContract); - var FirstItems = _context.YearlySalaryItems.SingleOrDefault(x => x.YearlySalaryId == endDateInput.id && x.ItemName == "مزد روزانه"); - var dayliSalary = FirstItems.ItemValue; - var familyAllowance = dayliSalary * 3; - double sumOfFamilyAllowance = 0; - DateTime firstDayOFContract = endContract.FindFirstDayOfMonthGr(); - if (startContract < firstDayOFContract) - startContract = firstDayOFContract; - var totalContractDays = Convert.ToInt32((endContract - startContract).TotalDays + 1); - try - { - var children = _context.EmployeeChildrenSet.Where(x => x.EmployeeId == personelID).ToList(); - var insuranceYearAndMonth = _context.Employees.SingleOrDefault(x => x.id == personelID); - var yearI = Convert.ToInt32(insuranceYearAndMonth.InsuranceHistoryByYear); - var monthI = Convert.ToInt32(insuranceYearAndMonth.InsuranceHistoryByMonth); - yearI *= 365; - monthI *= 30; - var insurancHistoey = yearI + monthI; - - foreach (var item in children) - { - if (item.DateOfBirth < endContract) - { - //Age = (endContract - item.DateOfBirth); - //var ageUp18 = (zeroTime + Age).Year - 1; - - var childAge = Tools.GetAge(item.DateOfBirth, endContract); - - if (childAge.yearCount < 18 && insurancHistoey >= 720) - { - sumOfFamilyAllowance += familyAllowance; - - } - else if (childAge.yearCount == 18 && childAge.monthCount == 0 && insurancHistoey >= 720) - { - - if (childAge.dayCount > 0) - { - //به دست آوردن روزهای مجاز قبل از 18 سال - var daysToPay = totalContractDays - childAge.dayCount; - - if (daysToPay > 0) - { - //محاسبه مبلغ بر اساس تعداد روزهای مجاز - var payPerDay = (familyAllowance / 30) * daysToPay; - sumOfFamilyAllowance += payPerDay; - } - - } - else - { - sumOfFamilyAllowance += familyAllowance; - } - } - } - - } - } - catch (Exception e) - { - sumOfFamilyAllowance = 0; - } - - //var ress = dayliSalar3 * childeNumber; - - var result = sumOfFamilyAllowance.ToMoney(); - - - return result; - } - - public string FamilyAllowanceAutoExtention(long personelID, DateTime startContract) - { - var endDateInput = _context.YearlySalaries - .SingleOrDefault(x => x.StartDate <= startContract && x.EndDate >= startContract); - var FirstItems = _context.YearlySalaryItems.SingleOrDefault(x => x.YearlySalaryId == endDateInput.id && x.ItemName == "مزد روزانه"); - var dayliSalary = FirstItems.ItemValue; - var familyAllowance = dayliSalary * 3; - double sumOfFamilyAllowance = 0; - try - { - var children = _context.EmployeeChildrenSet.Where(x => x.EmployeeId == personelID).ToList(); - var insuranceYearAndMonth = _context.Employees.SingleOrDefault(x => x.id == personelID); - var yearI = Convert.ToInt32(insuranceYearAndMonth.InsuranceHistoryByYear); - var monthI = Convert.ToInt32(insuranceYearAndMonth.InsuranceHistoryByMonth); - yearI *= 365; - monthI *= 30; - var insurancHistoey = yearI + monthI; - - foreach (var item in children) - { - if (item.DateOfBirth < startContract) - { - - - var childAge = Tools.GetAge(item.DateOfBirth, startContract); - - if (childAge.yearCount < 18 && insurancHistoey >= 720) - { - sumOfFamilyAllowance += familyAllowance; - - } - - } - - } - } - catch (Exception e) - { - sumOfFamilyAllowance = 0; - } - - - - var result = sumOfFamilyAllowance.ToMoney(); - - return result; - } - - #endregion - - - #region AsyncMetods - public async Task ConsumableItemsAsync(DateTime endDateW) - { - var res = ConsumableItems(endDateW); - return res; - } - - public async Task HousingAllowanceAsync(DateTime endDateW) - { - var res = HousingAllowance(endDateW); - return res; - } - - public async Task FamilyAllowanceAsync(long personelID, DateTime EndCantract) - { - var res = "FamilyAllowance(personelID, EndCantract);"; - return res; - } - #endregion - - - //جستجوی مقادیر یک سال یا آی دی - #region SerachYearlySalaryById - - public EditYearlySalary GetDetails(long id) - { - return _context.YearlySalaries.Select(x => new EditYearlySalary - { - Id = x.id, - StartDate = x.StartDate.ToFarsi(), - EndDate = x.EndDate.ToFarsi(), - ConnectionId = x.ConnectionId, - - }).FirstOrDefault(x => x.Id == id); - } - - #endregion - - - // سرچ مدل صفحه مقادیر سالانه - #region YearlySalaryMainSerach - - public List Search(YearlySalarySearchModel searchModel) - { - var query = _context.YearlySalaries.Select(x => new YearlySalaryViewModel - { - Id = x.id, - - StartDate = x.StartDate.ToFarsi(), - StartDateGr = x.StartDate, - Year = x.Year, - EndDate = x.EndDate.ToFarsi(), - - - }); - - if (!string.IsNullOrWhiteSpace(searchModel.year)) - { - - - query = query.Where(x => x.Year == searchModel.year); - } - - - return query.OrderByDescending(x => x.StartDateGr).ToList(); - } - #endregion - - - public int FindConnection() - { - int connectionid = 0; - var exist = _context.YearlySalaries.Any(x => x.ConnectionId > 0); - if (exist) - { - connectionid = _context.YearlySalaries.Max(x => x.ConnectionId); - } - else - { - connectionid = 0; - } - return connectionid += 1; - } - - // heydari جستجوی مقادیر با سرچ مدل - #region yearlySalarySearchBySearchModel - - public EditYearlySalary GetDetailsBySearchModel(YearlySalarySearchModel searchModel) - { - var query = _context.YearlySalaries.FirstOrDefault(x => x.StartDate <= searchModel.StartDateGr && x.EndDate >= searchModel.EndDateGr && x.Year == searchModel.year); - if (query != null) - { - var yearlySalariesObj = new EditYearlySalary() - { - Id = query.id, - StartDate = query.StartDate.ToFarsi(), - EndDate = query.EndDate.ToFarsi(), - ConnectionId = query.ConnectionId, - }; - return yearlySalariesObj; - } - else - return null; - } - - #endregion - - // محاسبه حق تاهل - #region MarriedAlloance - public double MarriedAllowance(DateTime endDateW, long employeeId) - { - var getEmployee = _context.Employees.FirstOrDefault(x => x.id == employeeId); - if (getEmployee == null) - { - return 0; - } - - if (getEmployee.MaritalStatus == "متاهل") - { - var endDateInput = _context.YearlySalaries - .SingleOrDefault(x => x.StartDate <= endDateW && x.EndDate >= endDateW); - var FirstItems = _context.YearlySalaryItems.SingleOrDefault(x => x.YearlySalaryId == endDateInput.id && x.ItemName == "حق تاهل"); - if (FirstItems == null) - { - return 0; - } - return FirstItems.ItemValue; - } - else - { - return 0; - } - - - } - - - #endregion - - //سنوات - #region yeaers - - public BunosesAndYearsPayStatus Years(DateTime separationStartDate, DateTime leftWorkDate, DateTime separationEndDate, double daylyWage, string yearsOptions, - bool hasleft, DateTime startWorkDate, DateTime contractStart, DateTime contractEnd, long workshopId, long employeeId, bool isOldContract) - { - BunosesAndYearsPayStatus finalResult = new BunosesAndYearsPayStatus(); - var startDateFa = separationEndDate.ToFarsi(); - var checkoutMonth = startDateFa.Substring(5, 2); - double result = 0; - var start1403 = new DateTime(2024, 3, 20); - switch (yearsOptions) - { - case "OnCheckoutOfMonth": - var totalCheckoutDays = (separationEndDate - separationStartDate).TotalDays + 1; - finalResult.YearsPay = (daylyWage * 30) / 365 * totalCheckoutDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalCheckoutDays); - break; - //محاسبه در پایان سال به شرطی که قرارداد منتهی به پایان سال باشد - case "OnEndOfYear"://درپایان سال - - if (isOldContract && contractEnd < start1403) - { - var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; - finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - } - else if (isOldContract && contractEnd > start1403) - { - if ((hasleft && leftWorkDate <= separationEndDate) || (checkoutMonth == "12" && separationEndDate == contractEnd)) - { - - //بدست آوردن اولین روز سال - var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; - var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); - - // اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود - var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr; - - - - #region NewCompute - - //شروع دوره - string st = startComputeDay.ToFarsi(); - int syear = Convert.ToInt32(st.Substring(0, 4)); - int smonth = Convert.ToInt32(st.Substring(5, 2)); - PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1); - PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1); - //پایان فیش حقوقی آخر - PersianDateTime endCheckout = separationEndDate.ToPersianDateTime(); - if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month) - { - var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; - finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - } - else - { - var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && - x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable(); - //پایان دوره - PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime(); - List nullDateList = new List(); - double sumOfOldYearsPay = 0; - var oldTotaldays = 0; - for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1)) - { - var searchStart = ($"{startDate}").ToGeorgianDateTime(); - var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime(); - var foundCheckout = checkoutList.FirstOrDefault(x => - x.ContractStart >= searchStart && x.ContractEnd <= searchEnd); - if (foundCheckout == null) - { - nullDateList.Add(new BunosesAndYearsPayStatus() - { - ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart, - ContractEnd = searchEnd - }); - finalResult.NotCompleted = true; - } - else - { - double foundMonthlySalary = foundCheckout.MonthlySalary + foundCheckout.BaseYearsPay; - int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays); - double foundDayliWage = foundMonthlySalary / foundTotaldays; - double foundYearsPay = ((foundDayliWage * 30) / 365) * foundTotaldays; - oldTotaldays += foundTotaldays; - sumOfOldYearsPay += foundYearsPay; - } - - } - - var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; - double lastMonthYearsPay = ((daylyWage * 30) / 365) * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays + oldTotaldays); - finalResult.YearsPay = lastMonthYearsPay + sumOfOldYearsPay; - finalResult.BunosesStatusList = nullDateList; - - } - - #endregion - } - } - else if (!isOldContract) - - { - if ((hasleft && leftWorkDate <= separationEndDate) || (checkoutMonth == "12" && separationEndDate == contractEnd)) - { - //بدست آوردن اولین روز سال - var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; - var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); - var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr; - #region NewCompute - - //شروع دوره - string st = startComputeDay.ToFarsi(); - int syear = Convert.ToInt32(st.Substring(0, 4)); - int smonth = Convert.ToInt32(st.Substring(5, 2)); - PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1); - PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1); - //پایان فیش حقوقی آخر - PersianDateTime endCheckout = separationEndDate.ToPersianDateTime(); - if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month) - { - var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; - finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - } - else - { - var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && - x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable(); - //پایان دوره - PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime(); - List nullDateList = new List(); - double sumOfOldYearsPay = 0; - var oldTotaldays = 0; - for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1)) - { - var searchStart = ($"{startDate}").ToGeorgianDateTime(); - var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime(); - var foundCheckout = checkoutList.FirstOrDefault(x => - x.ContractStart >= searchStart && x.ContractEnd <= searchEnd); - if (foundCheckout == null) - { - nullDateList.Add(new BunosesAndYearsPayStatus() - { - ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart, - ContractEnd = searchEnd - }); - finalResult.NotCompleted = true; - } - else - { - double foundMonthlySalary = foundCheckout.MonthlySalary + foundCheckout.BaseYearsPay; - int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays); - double foundDayliWage = foundMonthlySalary / foundTotaldays; - double foundYearsPay = ((foundDayliWage * 30) / 365) * foundTotaldays; - oldTotaldays += foundTotaldays; - sumOfOldYearsPay += foundYearsPay; - } - - } - - var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; - double lastMonthYearsPay = ((daylyWage * 30) / 365) * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays + oldTotaldays); - finalResult.YearsPay = lastMonthYearsPay + sumOfOldYearsPay; - finalResult.BunosesStatusList = nullDateList; - - } - - #endregion - //var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; - //result = (daylyWage * 30) / 365 * totalDays; - } - } - - break; - //از شروع بکار تا ترک کار - case "OnLeftWork"://درپایان همکاری - - if (isOldContract && contractEnd < start1403) - { - var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; - finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - } - else if (isOldContract && contractEnd > start1403) - { - - if ((hasleft && leftWorkDate <= separationEndDate)) - { - //بدست آوردن اولین روز سال - var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; - var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); - - // اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود - var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr; - var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; - finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - } - } - else if (!isOldContract) - { - if ((hasleft && leftWorkDate <= separationEndDate)) - { - - var totalDays = (separationEndDate - startWorkDate).TotalDays + 1; - finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - } - } - - break; - // از شروع قراداد تا پایان قراداد یا ترک کار - case "OnEndOfContract"://در پایان قرارداد - var start1403EndOfContract = new DateTime(2024, 3, 20); - if (isOldContract && contractEnd < start1403EndOfContract) - { - var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; - finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - } - else if (isOldContract && contractEnd > start1403) - { - if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd) - { - var totalDays = (separationEndDate - contractStart).TotalDays + 1; - finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - } - - } - else if (!isOldContract) - { - if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd) - { - var totalDays = (separationEndDate - contractStart).TotalDays + 1; - finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - } - } - - break; - case "EndOfContract1402LeftWork1403": //پایان قرارداد قبل 403 پایان همکاری بعد 403 - - if (contractStart >= start1403 && contractEnd > start1403)// بعد از 1403 - { - if (hasleft && leftWorkDate <= separationEndDate)//اگر ترک کار کرده بود - { - //اگر شروع بکار بعد از 1403 بود تاریخ شرو بکار را در نظر میگیرد در غیر اینصورت اولین روز 1403 را در نظر میگیرد - var startComputeDay = startWorkDate >= start1403 ? startWorkDate : start1403; - var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; - finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - } - } - else if (contractStart < start1403 && contractEnd < start1403)// قبل از 1403 - { - var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; - finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - //if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd)// اگر ترک کار کرده بود یا فیش آخر قراداد بود - //{ - // var totalDays = (separationEndDate - contractStart).TotalDays + 1; - // result = (daylyWage * 30) / 365 * totalDays; - //} - } - break; - default: - finalResult.YearsPay = 0; - finalResult.TotalDayCompute = 0; - break; - } - - return finalResult; - } - - - - #endregion - //مزد مرخصی - #region LeavePay - - public LeaveAndAbsenceViewModel LeavePay(string startDateFa, DateTime leftWorkDate, DateTime separationStartDate, DateTime separationEndDate, - double daylyWage, string computeOptions, bool hasleft, DateTime startWorkDate, DateTime contractStart, - DateTime contractEnd, long workshopId, long employeeId, int fridayStartToEnd, int officialHoliday, string totalHoursH, string totalHorsM, double consumableItem, - double housingAllowance, double familyAllowance, double marriedAllowance, bool isOldContract) - { - - - var result = new LeaveAndAbsenceViewModel(); - // ماه فیش آخر - var checkoutMonth = startDateFa.Substring(5, 2); - // بدست آوردن مقدار مجاژ مرخصی پرسنل در این فیش - #region HoursPerDay - // روز های کارکرد فیش - var totalChekoutDays = (separationEndDate - separationStartDate).TotalDays + 1; - - //تعداد روزهای موظفی این فیش حقوقی - //var mandatoryWorkingDay = totalChekoutDays - (fridayStartToEnd + officialHoliday); - //تبدیل ساعت به عدد - var totalHoursHDouble = Convert.ToDouble(totalHoursH); - var totalHoursMDouble = Convert.ToDouble(totalHorsM); - if (totalHoursMDouble > 0) - { - //تبیدل دقیه به اعشار - totalHoursMDouble = totalHoursMDouble / 60; - } - //کل ساعت کار پرسنل در این ماه - var totalHours = totalHoursHDouble + totalHoursMDouble; - var checkoutMandatoryDays = _mandatoryHoursRepository.GetMondatoryDays(separationStartDate, separationEndDate); - // میانگین ساعت کارکرد پرسنل در روز - var hoursePerDay = totalHours / checkoutMandatoryDays.MoandatoryDays; - - - // {مقدار ساعت مجاز مرخصی در برای یک روز{کامل - var leaveHoursesPerDay = 190.58 / 365; - // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل - - double canToLeave = 0; - - - //مزد مرخصی برای یک ساعت - #region MyRegion - - //مقدار مزد روزانه برای یک ساعت - var LeaveDayliFee = daylyWage / 7.33;// مورد سوم - به این روش برای بک ساعت مرد مرخصی درست است - - //اقلام مصرفی برای یک ساعت - var LeaveConoumableItemsStep1 = consumableItem / totalChekoutDays; - var LeaveConsumableItems = LeaveConoumableItemsStep1 / 7.33; - - //کمک هزینه مسکن برای یک ساعت - var LeavehousingAllowanceStep1 = housingAllowance / totalChekoutDays; - var LeaveHousingAllowance = LeavehousingAllowanceStep1 / 7.33; - - //حق عائله مندی برای یک ساعت - var LeavefamilyAllowanceStep1 = familyAllowance / totalChekoutDays; - var LeaveFamilyAllowance = LeavefamilyAllowanceStep1 / 7.33; - - //حق تاهل برای یک ساعت - var LeavemarriedAllowanceStep1 = marriedAllowance / totalChekoutDays; - var LeaveMarriedAllowance = LeavemarriedAllowanceStep1 / 7.33; - - var leavePayPerHours = LeaveDayliFee + LeaveConsumableItems + LeaveHousingAllowance + LeaveFamilyAllowance + LeaveMarriedAllowance; - - #endregion - - - //غیبت برای یک ساعت - double absenceDeductionPerHourses = leavePayPerHours; - //if (hoursePerDay < 7.33) - //{ - // //مقدار مزد روزانه برای یک ساعت - // var dayliFee = daylyWage / hoursePerDay; - - // //اقلام مصرفی برای یک ساعت - // var ConoumableItemsStep1 = consumableItem / 30; - // var ConsumableItems = ConoumableItemsStep1 / hoursePerDay; - - // //کمک هزینه مسکن برای یک ساعت - // var housingAllowanceStep1 = housingAllowance / 30; - // var HousingAllowance = housingAllowanceStep1 / hoursePerDay; - - // //حق عائله مندی برای یک ساعت - // var familyAllowanceStep1 = familyAllowance / 30; - // var FamilyAllowance = familyAllowanceStep1 / hoursePerDay; - - // //حق تاهل برای یک ساعت - // var marriedAllowanceStep1 = marriedAllowance / 30; - // var MarriedAllowance = marriedAllowanceStep1 / hoursePerDay; - // //مزد مرخصی این پرسنل به ازای یک ساعت - // absenceDeductionPerHourses = dayliFee + ConsumableItems + HousingAllowance + FamilyAllowance + MarriedAllowance; - //} - //else - //{ - // //مزد مرخصی این پرسنل به ازای یک ساعت - // absenceDeductionPerHourses = LeaveDayliFee + LeaveConsumableItems + LeaveHousingAllowance + LeaveFamilyAllowance + LeaveMarriedAllowance; - - //} - - #endregion - - //بدست آوردن اولین روز سال - var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; - var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); - var start1403 = new DateTime(2024, 3, 20); - switch (computeOptions) - { - case "OnCheckoutOfMonth": - var resCanToLeave = OnCheckoutCantoleaveList(separationStartDate, separationEndDate, workshopId, employeeId, - leaveHoursesPerDay, totalChekoutDays, hoursePerDay); - - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = true; - ////مدت طلب مرخصی - result.CreditLeaves = resCanToLeave.CanToLeave; - //مزد مرخصی - result.LeavPay = resCanToLeave.CanToLeave * leavePayPerHours; - //مدت غیبت - result.AbsencePeriod = resCanToLeave.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = resCanToLeave.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = hoursePerDay; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"{(separationEndDate - separationStartDate).TotalDays + 1}"; - - break; - //محاسبه در پایان سال به شرطی که قرارداد منتهی به پایان سال باشد - case "OnEndOfYear": - if (isOldContract && contractEnd < start1403) - { - var resEndOfYear = OnCheckoutCantoleaveList(separationStartDate, separationEndDate, workshopId, employeeId, - leaveHoursesPerDay, totalChekoutDays, hoursePerDay); - - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = true; - ////مدت طلب مرخصی - result.CreditLeaves = resEndOfYear.CanToLeave; - //مزد مرخصی - result.LeavPay = resEndOfYear.CanToLeave * leavePayPerHours; - //مدت غیبت - result.AbsencePeriod = resEndOfYear.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = resEndOfYear.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = hoursePerDay; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"{resEndOfYear.CountChekoutDays}"; - - } - else if (isOldContract && contractEnd > start1403) - { - var startDate = startWorkDate >= start1403 ? startWorkDate : start1403; - - var endOfYearRes = EndOfYearCantoleaveList(startDate, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) - .FirstOrDefault(x => x.ContractStart == separationStartDate); - if ((hasleft && leftWorkDate <= separationEndDate) || (separationEndDate == contractEnd && checkoutMonth == "12")) - { - var end = EndOfYearCantoleaveList(startDate, separationEndDate, workshopId, employeeId, - hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, - separationStartDate); - - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = true; - - var canTolv = endOfYearRes.CanToLeave; - var absence = end.Sum(x => x.PeriodOfAbsence); - - if (canTolv >= absence) - { - canTolv -= absence; - absence = 0; - - } - else - { - absence -= canTolv; - canTolv = 0; - - } - - //مزد مرخصی - //result.LeavPay = endOfYearRes.CanToLeave * leavePayPerHours; - result.LeavPay = canTolv * leavePayPerHours; - //مدت غیبت - result.AbsencePeriod = absence; - ////مدت طلب مرخصی - result.CreditLeaves = canTolv; - //کسری غیبت - result.AbsenceDeduction = absence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = end.FirstOrDefault()!.WorkingPerDayHourses; - - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"{endOfYearRes.CountChekoutDays}"; - - } - else - { - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = false; - //مدت طلب مرخصی - result.CreditLeaves = endOfYearRes.CanToLeave; - //مزد مرخصی - result.LeavPay = 0; - //مدت غیبت - result.AbsencePeriod = endOfYearRes.PeriodOfAbsence; - //کسری غیبت - //result.AbsenceDeduction = endOfYearRes.PeriodOfAbsence * absenceDeductionPerHourses; - result.AbsenceDeduction = 0; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = endOfYearRes.WorkingPerDayHourses; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = "0"; - - } - } - else if (!isOldContract) - { - var endOfYearRes = EndOfYearCantoleaveList(startWorkDate, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) - .FirstOrDefault(x => x.ContractStart == separationStartDate); - if ((hasleft && leftWorkDate <= separationEndDate) || (separationEndDate == contractEnd && checkoutMonth == "12")) - { - var end = EndOfYearCantoleaveList(startWorkDate, separationEndDate, workshopId, employeeId, - hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, - separationStartDate); - - var canTolv = endOfYearRes.CanToLeave; - var absence = end.Sum(x => x.PeriodOfAbsence); - if (canTolv >= absence) - { - canTolv -= absence; - absence = 0; - - } - else - { - absence -= canTolv; - canTolv = 0; - - } - - result.LeavPay = canTolv * leavePayPerHours; - //مدت غیبت - result.AbsencePeriod = absence; - ////مدت طلب مرخصی - result.CreditLeaves = canTolv; - //کسری غیبت - result.AbsenceDeduction = absence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = end.FirstOrDefault()!.WorkingPerDayHourses; - - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = true; - - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"{endOfYearRes.CountChekoutDays}"; - - //مزد مرخصی - //result.LeavPay = endOfYearRes.CanToLeave * leavePayPerHours; - - //مدت غیبت - //result.AbsencePeriod = endOfYearRes.PeriodOfAbsence; - //کسری غیبت - //result.AbsenceDeduction = endOfYearRes.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - //result.AverageHoursPerDay = endOfYearRes.WorkingPerDayHourses; - - } - else - { - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = false; - //مدت طلب مرخصی - result.CreditLeaves = endOfYearRes.CanToLeave; - //مزد مرخصی - result.LeavPay = 0; - //مدت غیبت - result.AbsencePeriod = endOfYearRes.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = endOfYearRes.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = endOfYearRes.WorkingPerDayHourses; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = "0"; - - } - } - - break; - case "OnLeftWork"://درپایان همکاری - if (isOldContract && contractEnd < start1403) - { - - var resLeftWork = OnCheckoutCantoleaveList(separationStartDate, separationEndDate, workshopId, employeeId, - leaveHoursesPerDay, totalChekoutDays, hoursePerDay); - - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = true; - ////مدت طلب مرخصی - result.CreditLeaves = resLeftWork.CanToLeave; - //مزد مرخصی - result.LeavPay = resLeftWork.CanToLeave * leavePayPerHours; - //مدت غیبت - result.AbsencePeriod = resLeftWork.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = resLeftWork.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = hoursePerDay; - } - else if (isOldContract && contractEnd > start1403) - { - var startDate = startWorkDate >= start1403 ? startWorkDate : start1403; - var res = LeftWorkCantoleaveList(startDate, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) - .FirstOrDefault(x => x.ContractStart == separationStartDate); - - if (hasleft && leftWorkDate <= separationEndDate) - { - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = true; - ////مدت طلب مرخصی - result.CreditLeaves = 0; - - //مزد مرخصی - result.LeavPay = res.CanToLeave * leavePayPerHours; - - //مدت غیبت - result.AbsencePeriod = res.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = res.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = res.WorkingPerDayHourses; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"{res.CountChekoutDays}"; - } - else - { - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = false; - //مدت طلب مرخصی - result.CreditLeaves = res.CanToLeave; - //مزد مرخصی - result.LeavPay = 0; - //مدت غیبت - result.AbsencePeriod = res.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = res.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = res.WorkingPerDayHourses; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"0"; - - } - - } - else if (!isOldContract) - { - - var res = LeftWorkCantoleaveList(startWorkDate, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) - .FirstOrDefault(x => x.ContractStart == separationStartDate); - - if (hasleft && leftWorkDate <= separationEndDate) - { - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = true; - ////مدت طلب مرخصی - result.CreditLeaves = 0; - - //مزد مرخصی - result.LeavPay = res.CanToLeave * leavePayPerHours; - - //مدت غیبت - result.AbsencePeriod = res.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = res.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = res.WorkingPerDayHourses; - - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"{res.CountChekoutDays}"; - } - else - { - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = false; - //مدت طلب مرخصی - result.CreditLeaves = res.CanToLeave; - //مزد مرخصی - result.LeavPay = 0; - //مدت غیبت - result.AbsencePeriod = res.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = res.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = res.WorkingPerDayHourses; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"0"; - - } - } - - break; - case "OnEndOfContract"://در پایان قرارداد - if (isOldContract && contractEnd < start1403) - { - var resEndOfContract = OnCheckoutCantoleaveList(separationStartDate, separationEndDate, workshopId, employeeId, - leaveHoursesPerDay, totalChekoutDays, hoursePerDay); - - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = true; - ////مدت طلب مرخصی - result.CreditLeaves = resEndOfContract.CanToLeave; - //مزد مرخصی - result.LeavPay = resEndOfContract.CanToLeave * leavePayPerHours; - //مدت غیبت - result.AbsencePeriod = resEndOfContract.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = resEndOfContract.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = hoursePerDay; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"{(separationEndDate - separationEndDate).TotalDays + 1}"; - - } - else if ((isOldContract && contractEnd > start1403) || (!isOldContract)) - { - var resEndOfContract = LeftWorkCantoleaveList(contractStart, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) - .FirstOrDefault(x => x.ContractStart == separationStartDate); - if (resEndOfContract != null) - { - if ((hasleft && leftWorkDate <= separationEndDate) || resEndOfContract.LastChekoutOfContract) - { - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = true; - ////مدت طلب مرخصی - result.CreditLeaves = 0; - - //مزد مرخصی - result.LeavPay = resEndOfContract.CanToLeave * leavePayPerHours; - - //مدت غیبت - result.AbsencePeriod = resEndOfContract.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = resEndOfContract.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = resEndOfContract.WorkingPerDayHourses; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"{resEndOfContract.CountChekoutDays}"; - } - else - { - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = false; - //مدت طلب مرخصی - result.CreditLeaves = resEndOfContract.CanToLeave; - //مزد مرخصی - result.LeavPay = 0; - //مدت غیبت - result.AbsencePeriod = resEndOfContract.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = resEndOfContract.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = resEndOfContract.WorkingPerDayHourses; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"0"; - - } - } - } - break; - case "EndOfContract1402LeftWork1403": //پایان قرارداد قبل 403 پایان همکاری بعد 403 - - if (contractStart >= start1403 && contractEnd > start1403)// بعد از 1403 - { - //تاریخ شروع یافتن قرادادها - var startSearchContracts = startWorkDate >= start1403 ? startWorkDate : start1403; - //تمام قراداد ها از تاریخ شروع تا پایان این فیش - - - - var ress = LeftWorkCantoleaveList(startSearchContracts, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) - .FirstOrDefault(x => x.ContractStart == separationStartDate); - - if (hasleft && leftWorkDate <= separationEndDate) - { - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = true; - ////مدت طلب مرخصی - result.CreditLeaves = 0; - - //مزد مرخصی - result.LeavPay = ress.CanToLeave * leavePayPerHours; - - //مدت غیبت - result.AbsencePeriod = ress.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = ress.PeriodOfAbsence * absenceDeductionPerHourses; ; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = ress.WorkingPerDayHourses; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"{ress.CountChekoutDays}"; - - } - else - { - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = false; - //مدت طلب مرخصی - result.CreditLeaves = ress.CanToLeave; - //مزد مرخصی - result.LeavPay = 0; - //مدت غیبت - result.AbsencePeriod = ress.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = ress.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = ress.WorkingPerDayHourses; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"0"; - - } - } - else if (contractEnd < start1403)// قبل از 1403 - { - var resCanTo1402 = OnCheckoutCantoleaveList(separationStartDate, separationEndDate, workshopId, employeeId, - leaveHoursesPerDay, totalChekoutDays, hoursePerDay); - - //وضعیت تصفیه مزد مرخصی - result.LeaveCheckout = true; - ////مدت طلب مرخصی - result.CreditLeaves = resCanTo1402.CanToLeave; - //مزد مرخصی - result.LeavPay = resCanTo1402.CanToLeave * leavePayPerHours; - //مدت غیبت - result.AbsencePeriod = resCanTo1402.PeriodOfAbsence; - //کسری غیبت - result.AbsenceDeduction = resCanTo1402.PeriodOfAbsence * absenceDeductionPerHourses; - //میانگین ساعت کار در یک روز - result.AverageHoursPerDay = hoursePerDay; - // تعداد روزهایی که برای پرسنل مرخصی حساب شده - result.TotalDayOfLeaveCompute = $"{totalChekoutDays}"; - - } - break; - default: - result = new LeaveAndAbsenceViewModel(); - break; - } - - return result; - } - private 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; ; - - } - private static TimeSpan CalculateBreakTime(TimeSpan breakTimeSpan, TimeSpan sumOneDaySpan) - { - if (breakTimeSpan * 2 >= sumOneDaySpan) - return new TimeSpan(); - return breakTimeSpan; ; - } - - private (bool hasRollCall, double WorkingTotalHours) GetTotalWorkingHoursIfHasRollCall(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd) - { - bool hasRollCall = _rollCallEmployeeRepository.HasRollCallRecord(employeeId, workshopId, - contractStart, contractEnd); - double totalWorkingHours = 0; - if (!hasRollCall) - return (false, 0); - - List rollCallResult; - List groupedRollCall; - - - BaseCustomizeEntity settings = _context.CustomizeWorkshopEmployeeSettings.AsSplitQuery() - .Include(x => x.CustomizeWorkshopGroupSettings).FirstOrDefault(x => - x.WorkshopId == workshopId && x.EmployeeId == employeeId); - //اگر ساعت استراحت پرسنل وجود نداشت صفر است - var breakTimeEntity = settings == null ? new BreakTime(false, new TimeOnly()) : settings.BreakTime; - var endOfFarvardin = "1404/01/31".ToGeorgianDateTime(); - - - rollCallResult = _context.RollCalls.Where(x => - x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart && - x.StartDate.Value.Date <= contractEnd && 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 => - { - TimeSpan breakTime; - if (contractStart > endOfFarvardin) - { - breakTime = CalculateBreakTime( - x.First().BreakTimeSpan, - new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))); - } - else - { - breakTime = CalculateBreakTime(breakTimeEntity, new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))); - } - return 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)) - breakTime, - - BreakTime = breakTime, - }; - }).OrderBy(x => x.CreationDate).ToList(); - - - TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); - totalWorkingHours = sumSpans.TotalMinutes / 60; - - return (true, totalWorkingHours); - - - } - public List LeftWorkCantoleaveList(DateTime startDate, DateTime endDate, long workshopId, long employeeId, bool hasleft, DateTime leftWorkDate, int fridayStartToEnd, int officialHoliday, string totalHoursH, string totalHorsM, DateTime separationStartDate) - { - // {مقدار ساعت مجاز مرخصی در برای یک روز{کامل - var leaveHoursesPerDay = 190.58 / 365; - var contactCanToleaveList = new List(); - var allContractsBetween = _context.Contracts.AsSplitQuery().Include(x => x.WorkingHoursList) - .Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && - x.ContractEnd >= startDate && x.ContarctStart <= endDate).ToList(); - - int mandatoryDays = 0; - double allCanToLeave = 0; - double canToLeave = 0; - int contractCounter = 0; - foreach (var contract in allContractsBetween) - { - contractCounter += 1; - var m = _mandatoryHoursRepository.GetMondatoryDays(contract.ContarctStart, - contract.ContractEnd); - - var workinghoursH = contract.WorkingHoursList.Select(x => x.TotalHoursesH).FirstOrDefault(); - var workinghoursM = contract.WorkingHoursList.Select(x => x.TotalHoursesM).FirstOrDefault(); - workinghoursM = string.IsNullOrWhiteSpace(workinghoursM) ? "0" : workinghoursM; - var workingHoursHDouble = Convert.ToDouble(workinghoursH); - var workingHoursMDouble = Convert.ToDouble(workinghoursM); - - - if (workingHoursMDouble > 0) - { - //تبیدل دقیه به اعشار - workingHoursMDouble = workingHoursMDouble / 60; - } - //کل ساعت کار پرسنل در این ماه - var totalWorkingHours = workingHoursHDouble + workingHoursMDouble; - - #region RollCallSpan - - var contractTotallDays = Convert.ToInt32((contract.ContractEnd - contract.ContarctStart).TotalDays + 1); - if (contractTotallDays <= 31) - { - - var rollCallTotalHoures = GetTotalWorkingHoursIfHasRollCall(employeeId, workshopId, - contract.ContarctStart.Date, contract.ContractEnd.Date); - if (rollCallTotalHoures.hasRollCall) - { - totalWorkingHours = rollCallTotalHoures.WorkingTotalHours; - } - } - - #endregion - // میانگین ساعت کارکرد پرسنل در روز - var workingHoursePerDay = totalWorkingHours / m.MoandatoryDays; - - // از شروع قرارداد تا پایان قرارداد - var totalDays = (contract.ContractEnd - contract.ContarctStart).TotalDays + 1; - double leftChekoutCanToleave = 0; - double leftleaveHoursesPerTotalDays = 0; - // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل - var leaveHoursesPerTotalDays = leaveHoursesPerDay * totalDays; - - - double thisContractCanToLeavPerDay = 0; - double leftThisContractCanToLeavePerDay = 0; - if (workingHoursePerDay < 7.33) - { - // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل - thisContractCanToLeavPerDay = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; - //if (hasleft && leftWorkDate <= endDate) - //{ - // leftThisContractCanToLeavePerDay = (leftleaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; - //} - - } - else - { - workingHoursePerDay = 7.33; - thisContractCanToLeavPerDay = leaveHoursesPerTotalDays; - //if (hasleft && leftWorkDate <= endDate) - //{ - // leftThisContractCanToLeavePerDay = leftleaveHoursesPerTotalDays; - //} - - } - //canToLeave = allCanToLeave + thisContractCanToLeavPerDay; - //leftChekoutCanToleave = allCanToLeave + leftThisContractCanToLeavePerDay; - - var sdate = contract.ContarctStart.ToFarsi(); - var edate = contract.ContractEnd.ToFarsi(); - // اگر فیش در قرارداد جاری حلقه بود تا تاریخ پایان فیش برو - if (separationStartDate >= contract.ContarctStart && separationStartDate < contract.ContractEnd) - edate = endDate.ToFarsi(); - 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); - for (var currntMonth = d1; currntMonth <= d2; currntMonth = currntMonth.AddMonths(1)) - { - var startMonthFa = $"{currntMonth}"; - var startMonthGr = new DateTime(); - if (currntMonth == d1) - { - var d1Fa = $"{d1}"; - startMonthGr = d1Fa.ToGeorgianDateTime(); - } - else - { - var a = $"{startMonthFa.Substring(0, 8)}01"; - startMonthGr = a.ToGeorgianDateTime(); - } - - - var endMonthFa = startMonthFa.FindeEndOfMonth(); - var endMonthGr = endMonthFa.ToGeorgianDateTime(); - bool left = false; - if (hasleft && leftWorkDate >= startMonthGr && leftWorkDate <= endMonthGr) - { - left = true; - - if (endMonthGr > leftWorkDate) - endMonthGr = endDate; - } - #region 365 - - double canToLeavAfter365 = 0; - bool is365 = false; - var countChekoutDays = (int)((endMonthGr - startMonthGr).TotalDays + 1); - var beforeCountDays = contactCanToleaveList.MaxBy(x => x.ContractStart); - if (beforeCountDays != null) - { - if (!beforeCountDays.EndOfYear) - { - var sumCounDays = countChekoutDays + beforeCountDays.CountChekoutDays; - if (sumCounDays > 365) - { - is365 = true; - countChekoutDays = sumCounDays - 365; - - // مقدار ساعت مجاز مرخصی باقی مانده بعد از 365 روز - leaveHoursesPerTotalDays = 7.33 * 9; - if (workingHoursePerDay < 7.33) - { - // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل - canToLeavAfter365 = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; - } - else - { - - canToLeavAfter365 = leaveHoursesPerTotalDays; - } - } - else - { - countChekoutDays = sumCounDays; - } - } - - } - - - - #endregion - - - var leaveList = _context.LeaveList.AsSplitQuery() - .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) - .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) - .Where(x => - (x.StartLeave <= startMonthGr && x.EndLeave >= startMonthGr) || - (x.StartLeave <= endMonthGr && x.EndLeave >= endMonthGr) || - (x.StartLeave >= startMonthGr && x.StartLeave <= endMonthGr) || - (x.EndLeave >= startMonthGr && x.EndLeave <= endMonthGr)).ToList(); - //مرخصی استفاده شده در این ماه - double usedLeaves = 0; - if (leaveList.Count > 0) - { - foreach (var item in leaveList) - { - var start = new DateTime(); - var end = new DateTime(); - start = item.StartLeave < startDate ? startDate : item.StartLeave; - end = item.EndLeave > endDate ? endDate : item.EndLeave; - if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) - { - - var leaveSpan = (end - start).TotalDays + 1; - var usedLeave = leaveSpan * workingHoursePerDay; - usedLeaves += usedLeave; - } - else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) - { - var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - else - { - - var leavingHourses = TimeSpan.Parse(item.LeaveHourses); - var usedLeave = (leavingHourses.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - - } - } - - - - //طلب مرخصی این ماه - double creditLeaves = 0; - // مزد مرخصی - double leavePay = 0; - //مدت غیبت - double periodOfAbsence = 0; - double absenceDeduction = 0; - var beforContactCanToleave = new ContractsCanToLeave(); - var beforContractCount = contractCounter - 1; - if (contactCanToleaveList.Count > 0) - { - //آخری قبل از این - beforContactCanToleave = contactCanToleaveList.MaxBy(x => x.ContractStart); - canToLeave = beforContactCanToleave.CanToLeave; - if (beforContactCanToleave.LastChekoutOfContract) - canToLeave = thisContractCanToLeavPerDay + beforContactCanToleave.CanToLeave; - if (hasleft && leftWorkDate >= startMonthGr && leftWorkDate <= endMonthGr) - { - if (canToLeave > 0) - { - #region LeftChekoutCanToLeave - - var leftMonthtotalDays = Convert.ToInt32((leftWorkDate - contract.ContarctStart).TotalDays + 1); - // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{ترک کار شده - leaveHoursesPerTotalDays = leaveHoursesPerDay * leftMonthtotalDays; - if (workingHoursePerDay < 7.33) - { - // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل - thisContractCanToLeavPerDay = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; - } - else - { - workingHoursePerDay = 7.33; - thisContractCanToLeavPerDay = leaveHoursesPerTotalDays; - } - - - if (contactCanToleaveList.Any(x => x.LastChekoutOfContract && x.ContractCounter == beforContractCount)) - { - - var b = contactCanToleaveList.FirstOrDefault(x => - x.LastChekoutOfContract && x.ContractCounter == beforContractCount); - canToLeave = thisContractCanToLeavPerDay + b.CanToLeave; - } - else - { - canToLeave = thisContractCanToLeavPerDay; - } - leaveList = _context.LeaveList.AsSplitQuery() - .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) - .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) - .Where(x => - (x.StartLeave <= contract.ContarctStart && x.EndLeave >= contract.ContarctStart) || - (x.StartLeave <= leftWorkDate && x.EndLeave >= leftWorkDate) || - (x.StartLeave >= contract.ContarctStart && x.StartLeave <= leftWorkDate) || - (x.EndLeave >= contract.ContarctStart && x.EndLeave <= leftWorkDate)).ToList(); - usedLeaves = 0; - if (leaveList.Count > 0) - { - foreach (var item in leaveList) - { - var start = new DateTime(); - var end = new DateTime(); - start = item.StartLeave < startDate ? startDate : item.StartLeave; - end = item.EndLeave > endDate ? endDate : item.EndLeave; - if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) - { - - var leaveSpan = (end - start).TotalDays + 1; - var usedLeave = leaveSpan * workingHoursePerDay; - usedLeaves += usedLeave; - } - else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) - { - var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - else - { - var leavingHourses = TimeSpan.Parse(item.LeaveHourses); - var usedLeave = (leavingHourses.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - - } - } - - - - #endregion - - } - else - { - var checkAbsenceDeduction = contactCanToleaveList - .Where(x => x.CanToLeave == 0 && x.ContractStart >= contract.ContarctStart).MaxBy(x => x.ContractStart); - if (checkAbsenceDeduction != null) - { - - var startSerach = checkAbsenceDeduction.ContractEnd.AddDays(1); - leaveList = _context.LeaveList.AsSplitQuery() - .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) - .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) - .Where(x => - (x.StartLeave <= startSerach && x.EndLeave >= startSerach) || - (x.StartLeave <= leftWorkDate && x.EndLeave >= leftWorkDate) || - (x.StartLeave >= startSerach && x.StartLeave <= leftWorkDate) || - (x.EndLeave >= startSerach && x.EndLeave <= leftWorkDate)).ToList(); - usedLeaves = 0; - if (leaveList.Count > 0) - { - foreach (var item in leaveList) - { - var start = new DateTime(); - var end = new DateTime(); - start = item.StartLeave < startSerach ? startSerach : item.StartLeave; - end = item.EndLeave > leftWorkDate ? leftWorkDate : item.EndLeave; - if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) - { - - var leaveSpan = (end - start).TotalDays + 1; - var usedLeave = leaveSpan * workingHoursePerDay; - usedLeaves += usedLeave; - } - else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) - { - var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - else - { - var leavingHourses = TimeSpan.Parse(item.LeaveHourses); - var usedLeave = (leavingHourses.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - - } - } - } - } - - - - } - - } - else - { - canToLeave = thisContractCanToLeavPerDay; - if (hasleft && leftWorkDate >= startMonthGr && leftWorkDate <= endMonthGr) - { - var leftMonthtotalDays = Convert.ToInt32((leftWorkDate - contract.ContarctStart).TotalDays + 1); - // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل - leaveHoursesPerTotalDays = leaveHoursesPerDay * leftMonthtotalDays; - if (workingHoursePerDay < 7.33) - { - // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل - canToLeave = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; - } - else - { - workingHoursePerDay = 7.33; - canToLeave = leaveHoursesPerTotalDays; - } - } - - - - } + { + int oldYear = 0; + string oldYearTemp = string.Empty; + var startPeriod = new DateTime(); + var endtPeriod = new DateTime(); + string finalResultMoney = string.Empty; + double FinalResult = 0; + int DayCounter = 0; + int Max365 = 366; + double Basic = 0; + double BaseResult = 0; + DateTime periodStarter = new DateTime(); + int loopdateYear = 0; + long stDateId = 0;//ای دی ماه های دوگانه + double basicResultSum = 0; + //مقادیر سالانه + var salary = _context.YearlySalaries.OrderByDescending(x => x.EndDate).Include(x => x.YearlySalaryItemsList).ToList(); + + + + // تاریخ اولین شروع بکار + var startDateB = leftWorkList.OrderBy(x => x.StartWorkDateGr).Select(x => x.StartWorkDate).FirstOrDefault(); + + //نگهدارنده آی دی سال در مقادیر سالانه + long loopDateId = 0; + + + var syear = Convert.ToInt32(startDateB.Substring(0, 4)); + var smonth = Convert.ToInt32(startDateB.Substring(5, 2)); + var sday = Convert.ToInt32(startDateB.Substring(8, 2)); + + var endDateConvert = endDateW.ToFarsi(); + var eyear = Convert.ToInt32(endDateConvert.Substring(0, 4)); + var emonth = Convert.ToInt32(endDateConvert.Substring(5, 2)); + var eday = Convert.ToInt32(endDateConvert.Substring(8, 2)); + + //تبدیل تاریخ اولین شروع بکار به شمسی تقویمی + var d1 = new PersianDateTime(syear, smonth, sday); + //تبدیل تاریخ پایان قرارداد به شمسی تقویمی + var d2 = new PersianDateTime(eyear, emonth, eday); + + var getWork = startDateB.ToGeorgianDateTime(); + //یافتن سال گزشته + var getWorkYear = syear - 1; + oldYear = syear - 1; + var getWorkYearString = getWorkYear.ToString(); + //var getWorkSalary = salary.FirstOrDefault(x=>x.Year == getWorkYearString); + var dayliSalaryStep1Check = salary.Any(x => x.Year == getWorkYearString); + // یافتن مزد روزانه سال قبل از اولین شروع بکار + var DayliSalaryStep1 = salary.FirstOrDefault(x => x.Year == getWorkYearString) + .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); + + //مقدار اولیه مزد روزانه + var DayliSalaryStep1Fa = DayliSalaryStep1.ToMoney(); + double firstDayliSalary = DayliSalaryStep1Fa.MoneyToDouble(); + + DateTime baseYearDate = new DateTime(); + + for (DateTime LoopDate = getWork; LoopDate <= endDateW; LoopDate = LoopDate.AddDays(1)) + { + var loopdateFa = LoopDate.ToFarsi(); + loopdateYear = Convert.ToInt32(loopdateFa.Substring(0, 4)); + + var LoopDateGr = LoopDate; + //یافتن ترک کار + var check = leftWorkList.Any(x => x.StartWorkDateGr == LoopDateGr); + if (check) + { + var period = leftWorkList.FirstOrDefault(x => x.StartWorkDateGr == LoopDateGr); + //ذخیره تاریخ شروع بکار + startPeriod = period.StartWorkDateGr; + if (period.LeftWorkDate == "1500/01/01") + { + endtPeriod = endDateW; + } + else + { + + endtPeriod = period.LeftWorkDateGr.AddDays(-1); + // ذخیره تاریخ ترک کار + + } + + + } + + + + //اگر تاریخ جاری بزرگتر یت مساوی تاریخ شروع ترک کار و کوچکتر یا مساوی تاریخ پایان ترک کار بود + if (LoopDateGr >= startPeriod && LoopDateGr <= endtPeriod) + { + //اگر شمارنده روزها صفر بود + if (DayCounter == 0) + { + + //var date = LoopDate.ToString(); + // ذهیر تعداد روز های سال جاری بر اساس کبیسه یودن یا نبودن + Max365 = loopdateFa.YearTotalDays(); + } + // یک روز به شمارنده روزها اضافه کن + DayCounter += 1; + + //periodStarter = startPeriod.ContractStartGr; + } + + + //آیا در مقادیر سالانه رکوردی وجود دارد که شروعش از تاریخ جاری کوچکتر و پایانش از تاریخ جاری بزرگتر باشد + var checkExist = salary.Any(x => + x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId); + if (checkExist) + { + var test = loopdateYear.ToString();//سال جاری رو بدست بیار + var step2 = salary.Where(x => x.Year == test).OrderByDescending(x => x.StartDate).ToList();// اونایی رو بیار که سال جاری هستن + if (step2.Count > 1)// اگر تعدادشون بیش از 1 بود + { + + var stDate = step2.FirstOrDefault(); // آخری + + if (DayCounter < Max365) + { + + if (LoopDateGr >= stDate.StartDate && LoopDateGr <= stDate.EndDate && oldYear != loopdateYear && stDate.id != stDateId) + { + + var fixFeePercentage = salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId) + .YearlySalaryItemsList.Where(x => x.ItemName == "درصد مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); + // مبلغ مزد ثابت سال جاری + var fixFeePrice = salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId) + .YearlySalaryItemsList.Where(x => x.ItemName == "مبلغ مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); + + // مزد روزانه سال قبل ضربدر درصد مزد ثابت تقسیم بر صد + var percntSumDaylifee = (firstDayliSalary * fixFeePercentage) / 100; + // نتیجه عملیات بالا بعلاوه مزد سال قبل + var Sum = firstDayliSalary + percntSumDaylifee; + + //مزد پایه + BaseResult = Sum + fixFeePrice; + BaseResult = GetCurrectFirstDailyFee(BaseResult, test); + //var rondUp = Convert.ToInt32(BaseResult); + + Console.WriteLine($"{test} - mozdeSaleGhabl[{firstDayliSalary}] - mozdeSaleJari[{BaseResult}] - fixFeePercentage[{fixFeePercentage}] - fixFeePrice[{fixFeePrice}]"); + //آی دی سال جاری + loopDateId = salary.Where(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId).Select(x => x.id).FirstOrDefault(); + // ذخیره سال جاری بعنوان سال گذشته برای عملیات بعدی + oldYear = loopdateYear; + stDateId = stDate.id; + } + else + { + if (BaseResult == 0) + { + var oldYearString = oldYear.ToString(); + var resDouble = salary.FirstOrDefault(x => x.Year == oldYearString) + .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); + var resFa = resDouble.ToMoney(); + BaseResult = resFa.MoneyToDouble(); + + } + + } + + + } + else if (DayCounter == Max365 && oldYear != loopdateYear) + { + + var fixFeePercentage = salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId) + .YearlySalaryItemsList.Where(x => x.ItemName == "درصد مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); + // مبلغ مزد ثابت سال جاری + var fixFeePrice = salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId) + .YearlySalaryItemsList.Where(x => x.ItemName == "مبلغ مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); + + // مزد روزانه سال قبل ضربدر درصد مزد ثابت تقسیم بر صد + var percntSumDaylifee = (firstDayliSalary * fixFeePercentage) / 100; + // نتیجه عملیات بالا بعلاوه مزد سال قبل + var Sum = firstDayliSalary + percntSumDaylifee; + //مزد پایه + BaseResult = Sum + fixFeePrice; + //var rondUp = Convert.ToInt32(BaseResult); + BaseResult = GetCurrectFirstDailyFee(BaseResult, test); + Console.WriteLine($"{test} - mozdeSaleGhabl[{firstDayliSalary}] - mozdeSaleJari[{BaseResult}] - fixFeePercentage[{fixFeePercentage}] - fixFeePrice[{fixFeePrice}]"); + + //آی دی سال جاری + loopDateId = salary.Where(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId).Select(x => x.id).FirstOrDefault(); + // ذخیره سال جاری بعنوان سال گذشته برای عملیات بعدی + oldYear = loopdateYear; + } + + } + else if (step2.Count == 1 && oldYear != loopdateYear) + { + //درصد مزد ثابت تاریخ جاری + var fixFeePercentage = salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId) + .YearlySalaryItemsList.Where(x => x.ItemName == "درصد مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); + // مبلغ مزد ثابت سال جاری + var fixFeePrice = salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId) + .YearlySalaryItemsList.Where(x => x.ItemName == "مبلغ مزد ثابت").Select(x => x.ItemValue).FirstOrDefault(); + + // مزد روزانه سال قبل ضربدر درصد مزد ثابت تقسیم بر صد + var percntSumDaylifee = (firstDayliSalary * fixFeePercentage) / 100; + // نتیجه عملیات بالا بعلاوه مزد سال قبل + var Sum = firstDayliSalary + percntSumDaylifee; + + + //مزد پایه + BaseResult = Sum + fixFeePrice; + BaseResult = GetCurrectFirstDailyFee(BaseResult, test); + //var rondUp = Convert.ToInt32(BaseResult); + + Console.WriteLine($"{test} - mozdeSaleGhabl[{firstDayliSalary}] - mozdeSaleJari[{BaseResult}] - fixFeePercentage[{fixFeePercentage}] - fixFeePrice[{fixFeePrice}]"); + + //آی دی سال جاری + loopDateId = salary.Where(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr && x.id != loopDateId).Select(x => x.id).FirstOrDefault(); + // ذخیره سال جاری بعنوان سال گذشته برای عملیات بعدی + oldYear = loopdateYear; + } + } + //اگر شرط بالا صحیح بود و سال جاری از سال گذشته بزرگتر بود اعملیات را انجام بده + //if (checkExist && loopdateYear > oldYear) + //{ + + + //} + + + + + //اگر شمارنده روزها مساوی شد یا 365 + if (DayCounter == Max365) + { + var test = LoopDateGr.ToFarsi(); + var basicSalari = + salary.FirstOrDefault(x => x.StartDate <= LoopDateGr && x.EndDate >= LoopDateGr); + //پایه سنوات سال جاری + Basic = basicSalari + .YearlySalaryItemsList.Where(x => x.ItemName == "پایه سنوات").Select(x => x.ItemValue).FirstOrDefault(); + //پایه سنوات سال جاری بعلاوه مزد پایه + BaseResult += Basic; + basicResultSum += Basic; + Console.BackgroundColor = ConsoleColor.DarkYellow; + Console.WriteLine($"{test} - mozd[{BaseResult}] - Basic[{Basic}]"); + Console.ResetColor(); + //صفر نمودن شمارنده روزها + DayCounter = 0; + } + + //if (loopdateFa == "1398/12/29") + //{ + // Console.WriteLine(BaseResult); + //} + //else if (loopdateFa == "1399/12/30") + //{ + // Console.WriteLine(BaseResult); + //} + //else if (loopdateFa == "1400/12/29") + //{ + // Console.WriteLine(BaseResult); + //} + //else if (loopdateFa == "1401/12/29") + //{ + // Console.WriteLine(BaseResult); + //} + //else if (loopdateFa == "1402/01/29") + //{ + // Console.WriteLine(BaseResult); + //} + + + FinalResult = BaseResult; + //ذخیره نتیجه نهایی مزد پایه + firstDayliSalary = FinalResult; + + } + + //ارسال مزد نهایی بعد از پایان حقه + #region round + + int FinalResultInt = (int)FinalResult; + var FinalResultDouble = (double)FinalResultInt; + #endregion + finalResultMoney = FinalResultDouble.ToMoney(); + + var res = new DayliFeeViewModel() + { + DayliFeeDouble = FinalResultDouble, + DayliFee = finalResultMoney, + Basic = basicResultSum.ToMoney() + }; + return res; + + + + + } + + public async Task DayliFeeComputingAsync(DateTime startDateW, DateTime contractStart, DateTime endDateW, long employeeId, + long workshopId, List leftWorkList) + { + var res = DayliFeeComputing(startDateW, contractStart, endDateW, employeeId, + workshopId, leftWorkList); + return res; + } + + #endregion + + //کمک هزینه اقلام از جدول مقادیر بر اساس سال انتخاب شده + #region ConsumableItems + + public string ConsumableItems(DateTime endDateW) + { + var endDateInput = _context.YearlySalaries + .SingleOrDefault(x => x.StartDate <= endDateW && x.EndDate >= endDateW); + var FirstItems = _context.YearlySalaryItems.SingleOrDefault(x => x.YearlySalaryId == endDateInput.id && x.ItemName == "کمک هزینه اقلام"); + var res = FirstItems.ItemValue; + var result = res.ToMoney(); + return result; + } + + #endregion + + //یافتن حق مسکن از جدول مقادیر بر اساس سال انتخاب شده + #region HousingAllowance + + public string HousingAllowance(DateTime endDateW) + { + var endDateInput = _context.YearlySalaries + .SingleOrDefault(x => x.StartDate <= endDateW && x.EndDate >= endDateW); + var FirstItems = _context.YearlySalaryItems.SingleOrDefault(x => x.YearlySalaryId == endDateInput.id && x.ItemName == "کمک هزینه مسکن"); + var res = FirstItems.ItemValue; + var result = res.ToMoney(); + return result; + } + + #endregion + + // محاسبه حق عائله مندی پرسنل بر اساس تاریخ ورودی و آی دی پرسنل + #region FamilyAllowance + + public string FamilyAllowance(long personelID, DateTime startContract, DateTime endContract) + { + //DateTime zeroTime = new DateTime(1, 1, 1); + //TimeSpan Age = new TimeSpan(); + + + var endDateInput = _context.YearlySalaries + .SingleOrDefault(x => x.StartDate <= endContract && x.EndDate >= endContract); + var FirstItems = _context.YearlySalaryItems.SingleOrDefault(x => x.YearlySalaryId == endDateInput.id && x.ItemName == "مزد روزانه"); + var dayliSalary = FirstItems.ItemValue; + var familyAllowance = dayliSalary * 3; + double sumOfFamilyAllowance = 0; + DateTime firstDayOFContract = endContract.FindFirstDayOfMonthGr(); + if (startContract < firstDayOFContract) + startContract = firstDayOFContract; + var totalContractDays = Convert.ToInt32((endContract - startContract).TotalDays + 1); + try + { + var children = _context.EmployeeChildrenSet.Where(x => x.EmployeeId == personelID).ToList(); + var insuranceYearAndMonth = _context.Employees.SingleOrDefault(x => x.id == personelID); + var yearI = Convert.ToInt32(insuranceYearAndMonth.InsuranceHistoryByYear); + var monthI = Convert.ToInt32(insuranceYearAndMonth.InsuranceHistoryByMonth); + yearI *= 365; + monthI *= 30; + var insurancHistoey = yearI + monthI; + + foreach (var item in children) + { + if (item.DateOfBirth < endContract) + { + //Age = (endContract - item.DateOfBirth); + //var ageUp18 = (zeroTime + Age).Year - 1; + + var childAge = Tools.GetAge(item.DateOfBirth, endContract); + + if (childAge.yearCount < 18 && insurancHistoey >= 720) + { + sumOfFamilyAllowance += familyAllowance; + + } + else if (childAge.yearCount == 18 && childAge.monthCount == 0 && insurancHistoey >= 720) + { + + if (childAge.dayCount > 0) + { + //به دست آوردن روزهای مجاز قبل از 18 سال + var daysToPay = totalContractDays - childAge.dayCount; + + if (daysToPay > 0) + { + //محاسبه مبلغ بر اساس تعداد روزهای مجاز + var payPerDay = (familyAllowance / 30) * daysToPay; + sumOfFamilyAllowance += payPerDay; + } + + } + else + { + sumOfFamilyAllowance += familyAllowance; + } + } + } + + } + } + catch (Exception e) + { + sumOfFamilyAllowance = 0; + } + + //var ress = dayliSalar3 * childeNumber; + + var result = sumOfFamilyAllowance.ToMoney(); + + + return result; + } + + public string FamilyAllowanceAutoExtention(long personelID, DateTime startContract) + { + var endDateInput = _context.YearlySalaries + .SingleOrDefault(x => x.StartDate <= startContract && x.EndDate >= startContract); + var FirstItems = _context.YearlySalaryItems.SingleOrDefault(x => x.YearlySalaryId == endDateInput.id && x.ItemName == "مزد روزانه"); + var dayliSalary = FirstItems.ItemValue; + var familyAllowance = dayliSalary * 3; + double sumOfFamilyAllowance = 0; + try + { + var children = _context.EmployeeChildrenSet.Where(x => x.EmployeeId == personelID).ToList(); + var insuranceYearAndMonth = _context.Employees.SingleOrDefault(x => x.id == personelID); + var yearI = Convert.ToInt32(insuranceYearAndMonth.InsuranceHistoryByYear); + var monthI = Convert.ToInt32(insuranceYearAndMonth.InsuranceHistoryByMonth); + yearI *= 365; + monthI *= 30; + var insurancHistoey = yearI + monthI; + + foreach (var item in children) + { + if (item.DateOfBirth < startContract) + { + + + var childAge = Tools.GetAge(item.DateOfBirth, startContract); + + if (childAge.yearCount < 18 && insurancHistoey >= 720) + { + sumOfFamilyAllowance += familyAllowance; + + } + + } + + } + } + catch (Exception e) + { + sumOfFamilyAllowance = 0; + } + + + + var result = sumOfFamilyAllowance.ToMoney(); + + return result; + } + + #endregion + + + #region AsyncMetods + public async Task ConsumableItemsAsync(DateTime endDateW) + { + var res = ConsumableItems(endDateW); + return res; + } + + public async Task HousingAllowanceAsync(DateTime endDateW) + { + var res = HousingAllowance(endDateW); + return res; + } + + public async Task FamilyAllowanceAsync(long personelID, DateTime EndCantract) + { + var res = "FamilyAllowance(personelID, EndCantract);"; + return res; + } + #endregion + + + //جستجوی مقادیر یک سال یا آی دی + #region SerachYearlySalaryById + + public EditYearlySalary GetDetails(long id) + { + return _context.YearlySalaries.Select(x => new EditYearlySalary + { + Id = x.id, + StartDate = x.StartDate.ToFarsi(), + EndDate = x.EndDate.ToFarsi(), + ConnectionId = x.ConnectionId, + + }).FirstOrDefault(x => x.Id == id); + } + + #endregion + + + // سرچ مدل صفحه مقادیر سالانه + #region YearlySalaryMainSerach + + public List Search(YearlySalarySearchModel searchModel) + { + var query = _context.YearlySalaries.Select(x => new YearlySalaryViewModel + { + Id = x.id, + + StartDate = x.StartDate.ToFarsi(), + StartDateGr = x.StartDate, + Year = x.Year, + EndDate = x.EndDate.ToFarsi(), + + + }); + + if (!string.IsNullOrWhiteSpace(searchModel.year)) + { + + + query = query.Where(x => x.Year == searchModel.year); + } + + + return query.OrderByDescending(x => x.StartDateGr).ToList(); + } + #endregion + + + public int FindConnection() + { + int connectionid = 0; + var exist = _context.YearlySalaries.Any(x => x.ConnectionId > 0); + if (exist) + { + connectionid = _context.YearlySalaries.Max(x => x.ConnectionId); + } + else + { + connectionid = 0; + } + return connectionid += 1; + } + + // heydari جستجوی مقادیر با سرچ مدل + #region yearlySalarySearchBySearchModel + + public EditYearlySalary GetDetailsBySearchModel(YearlySalarySearchModel searchModel) + { + var query = _context.YearlySalaries.FirstOrDefault(x => x.StartDate <= searchModel.StartDateGr && x.EndDate >= searchModel.EndDateGr && x.Year == searchModel.year); + if (query != null) + { + var yearlySalariesObj = new EditYearlySalary() + { + Id = query.id, + StartDate = query.StartDate.ToFarsi(), + EndDate = query.EndDate.ToFarsi(), + ConnectionId = query.ConnectionId, + }; + return yearlySalariesObj; + } + else + return null; + } + + #endregion + + // محاسبه حق تاهل + #region MarriedAlloance + public double MarriedAllowance(DateTime endDateW, long employeeId) + { + var getEmployee = _context.Employees.FirstOrDefault(x => x.id == employeeId); + if (getEmployee == null) + { + return 0; + } + + if (getEmployee.MaritalStatus == "متاهل") + { + var endDateInput = _context.YearlySalaries + .SingleOrDefault(x => x.StartDate <= endDateW && x.EndDate >= endDateW); + var FirstItems = _context.YearlySalaryItems.SingleOrDefault(x => x.YearlySalaryId == endDateInput.id && x.ItemName == "حق تاهل"); + if (FirstItems == null) + { + return 0; + } + return FirstItems.ItemValue; + } + else + { + return 0; + } + + + } + + + #endregion + + //سنوات + #region yeaers + + public BunosesAndYearsPayStatus Years(DateTime separationStartDate, DateTime leftWorkDate, DateTime separationEndDate, double daylyWage, string yearsOptions, + bool hasleft, DateTime startWorkDate, DateTime contractStart, DateTime contractEnd, long workshopId, long employeeId, bool isOldContract) + { + BunosesAndYearsPayStatus finalResult = new BunosesAndYearsPayStatus(); + var startDateFa = separationEndDate.ToFarsi(); + var checkoutMonth = startDateFa.Substring(5, 2); + double result = 0; + var start1403 = new DateTime(2024, 3, 20); + switch (yearsOptions) + { + case "OnCheckoutOfMonth": + var totalCheckoutDays = (separationEndDate - separationStartDate).TotalDays + 1; + finalResult.YearsPay = (daylyWage * 30) / 365 * totalCheckoutDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalCheckoutDays); + break; + //محاسبه در پایان سال به شرطی که قرارداد منتهی به پایان سال باشد + case "OnEndOfYear"://درپایان سال + + if (isOldContract && contractEnd < start1403) + { + var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; + finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + } + else if (isOldContract && contractEnd > start1403) + { + if ((hasleft && leftWorkDate <= separationEndDate) || (checkoutMonth == "12" && separationEndDate == contractEnd)) + { + + //بدست آوردن اولین روز سال + var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; + var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); + + // اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود + var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr; + + + + #region NewCompute + + //شروع دوره + string st = startComputeDay.ToFarsi(); + int syear = Convert.ToInt32(st.Substring(0, 4)); + int smonth = Convert.ToInt32(st.Substring(5, 2)); + PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1); + PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1); + //پایان فیش حقوقی آخر + PersianDateTime endCheckout = separationEndDate.ToPersianDateTime(); + if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month) + { + var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; + finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + } + else + { + var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && + x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable(); + //پایان دوره + PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime(); + List nullDateList = new List(); + double sumOfOldYearsPay = 0; + var oldTotaldays = 0; + for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1)) + { + var searchStart = ($"{startDate}").ToGeorgianDateTime(); + var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime(); + var foundCheckout = checkoutList.FirstOrDefault(x => + x.ContractStart >= searchStart && x.ContractEnd <= searchEnd); + if (foundCheckout == null) + { + nullDateList.Add(new BunosesAndYearsPayStatus() + { + ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart, + ContractEnd = searchEnd + }); + finalResult.NotCompleted = true; + } + else + { + double foundMonthlySalary = foundCheckout.MonthlySalary + foundCheckout.BaseYearsPay; + int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays); + double foundDayliWage = foundMonthlySalary / foundTotaldays; + double foundYearsPay = ((foundDayliWage * 30) / 365) * foundTotaldays; + oldTotaldays += foundTotaldays; + sumOfOldYearsPay += foundYearsPay; + } + + } + + var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; + double lastMonthYearsPay = ((daylyWage * 30) / 365) * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays + oldTotaldays); + finalResult.YearsPay = lastMonthYearsPay + sumOfOldYearsPay; + finalResult.BunosesStatusList = nullDateList; + + } + + #endregion + } + } + else if (!isOldContract) + + { + if ((hasleft && leftWorkDate <= separationEndDate) || (checkoutMonth == "12" && separationEndDate == contractEnd)) + { + //بدست آوردن اولین روز سال + var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; + var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); + var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr; + #region NewCompute + + //شروع دوره + string st = startComputeDay.ToFarsi(); + int syear = Convert.ToInt32(st.Substring(0, 4)); + int smonth = Convert.ToInt32(st.Substring(5, 2)); + PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1); + PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1); + //پایان فیش حقوقی آخر + PersianDateTime endCheckout = separationEndDate.ToPersianDateTime(); + if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month) + { + var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; + finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + } + else + { + var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && + x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable(); + //پایان دوره + PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime(); + List nullDateList = new List(); + double sumOfOldYearsPay = 0; + var oldTotaldays = 0; + for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1)) + { + var searchStart = ($"{startDate}").ToGeorgianDateTime(); + var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime(); + var foundCheckout = checkoutList.FirstOrDefault(x => + x.ContractStart >= searchStart && x.ContractEnd <= searchEnd); + if (foundCheckout == null) + { + nullDateList.Add(new BunosesAndYearsPayStatus() + { + ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart, + ContractEnd = searchEnd + }); + finalResult.NotCompleted = true; + } + else + { + double foundMonthlySalary = foundCheckout.MonthlySalary + foundCheckout.BaseYearsPay; + int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays); + double foundDayliWage = foundMonthlySalary / foundTotaldays; + double foundYearsPay = ((foundDayliWage * 30) / 365) * foundTotaldays; + oldTotaldays += foundTotaldays; + sumOfOldYearsPay += foundYearsPay; + } + + } + + var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; + double lastMonthYearsPay = ((daylyWage * 30) / 365) * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays + oldTotaldays); + finalResult.YearsPay = lastMonthYearsPay + sumOfOldYearsPay; + finalResult.BunosesStatusList = nullDateList; + + } + + #endregion + //var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; + //result = (daylyWage * 30) / 365 * totalDays; + } + } + + break; + //از شروع بکار تا ترک کار + case "OnLeftWork"://درپایان همکاری + + if (isOldContract && contractEnd < start1403) + { + var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; + finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + } + else if (isOldContract && contractEnd > start1403) + { + + if ((hasleft && leftWorkDate <= separationEndDate)) + { + //بدست آوردن اولین روز سال + var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; + var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); + + // اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود + var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr; + var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; + finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + } + } + else if (!isOldContract) + { + if ((hasleft && leftWorkDate <= separationEndDate)) + { + + var totalDays = (separationEndDate - startWorkDate).TotalDays + 1; + finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + } + } + + break; + // از شروع قراداد تا پایان قراداد یا ترک کار + case "OnEndOfContract"://در پایان قرارداد + var start1403EndOfContract = new DateTime(2024, 3, 20); + if (isOldContract && contractEnd < start1403EndOfContract) + { + var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; + finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + } + else if (isOldContract && contractEnd > start1403) + { + if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd) + { + var totalDays = (separationEndDate - contractStart).TotalDays + 1; + finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + } + + } + else if (!isOldContract) + { + if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd) + { + var totalDays = (separationEndDate - contractStart).TotalDays + 1; + finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + } + } + + break; + case "EndOfContract1402LeftWork1403": //پایان قرارداد قبل 403 پایان همکاری بعد 403 + + if (contractStart >= start1403 && contractEnd > start1403)// بعد از 1403 + { + if (hasleft && leftWorkDate <= separationEndDate)//اگر ترک کار کرده بود + { + //اگر شروع بکار بعد از 1403 بود تاریخ شرو بکار را در نظر میگیرد در غیر اینصورت اولین روز 1403 را در نظر میگیرد + var startComputeDay = startWorkDate >= start1403 ? startWorkDate : start1403; + var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; + finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + } + } + else if (contractStart < start1403 && contractEnd < start1403)// قبل از 1403 + { + var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; + finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + //if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd)// اگر ترک کار کرده بود یا فیش آخر قراداد بود + //{ + // var totalDays = (separationEndDate - contractStart).TotalDays + 1; + // result = (daylyWage * 30) / 365 * totalDays; + //} + } + break; + default: + finalResult.YearsPay = 0; + finalResult.TotalDayCompute = 0; + break; + } + + return finalResult; + } + + + + #endregion + //مزد مرخصی + #region LeavePay + + public LeaveAndAbsenceViewModel LeavePay(string startDateFa, DateTime leftWorkDate, DateTime separationStartDate, DateTime separationEndDate, + double daylyWage, string computeOptions, bool hasleft, DateTime startWorkDate, DateTime contractStart, + DateTime contractEnd, long workshopId, long employeeId, int fridayStartToEnd, int officialHoliday, string totalHoursH, string totalHorsM, double consumableItem, + double housingAllowance, double familyAllowance, double marriedAllowance, bool isOldContract) + { + + + var result = new LeaveAndAbsenceViewModel(); + // ماه فیش آخر + var checkoutMonth = startDateFa.Substring(5, 2); + // بدست آوردن مقدار مجاژ مرخصی پرسنل در این فیش + #region HoursPerDay + // روز های کارکرد فیش + var totalChekoutDays = (separationEndDate - separationStartDate).TotalDays + 1; + + //تعداد روزهای موظفی این فیش حقوقی + //var mandatoryWorkingDay = totalChekoutDays - (fridayStartToEnd + officialHoliday); + //تبدیل ساعت به عدد + var totalHoursHDouble = Convert.ToDouble(totalHoursH); + var totalHoursMDouble = Convert.ToDouble(totalHorsM); + if (totalHoursMDouble > 0) + { + //تبیدل دقیه به اعشار + totalHoursMDouble = totalHoursMDouble / 60; + } + //کل ساعت کار پرسنل در این ماه + var totalHours = totalHoursHDouble + totalHoursMDouble; + var checkoutMandatoryDays = _mandatoryHoursRepository.GetMondatoryDays(separationStartDate, separationEndDate); + // میانگین ساعت کارکرد پرسنل در روز + var hoursePerDay = totalHours / checkoutMandatoryDays.MoandatoryDays; + + + // {مقدار ساعت مجاز مرخصی در برای یک روز{کامل + var leaveHoursesPerDay = 190.58 / 365; + // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل + + double canToLeave = 0; + + + //مزد مرخصی برای یک ساعت + #region MyRegion + + //مقدار مزد روزانه برای یک ساعت + var LeaveDayliFee = daylyWage / 7.33;// مورد سوم - به این روش برای بک ساعت مرد مرخصی درست است + + //اقلام مصرفی برای یک ساعت + var LeaveConoumableItemsStep1 = consumableItem / totalChekoutDays; + var LeaveConsumableItems = LeaveConoumableItemsStep1 / 7.33; + + //کمک هزینه مسکن برای یک ساعت + var LeavehousingAllowanceStep1 = housingAllowance / totalChekoutDays; + var LeaveHousingAllowance = LeavehousingAllowanceStep1 / 7.33; + + //حق عائله مندی برای یک ساعت + var LeavefamilyAllowanceStep1 = familyAllowance / totalChekoutDays; + var LeaveFamilyAllowance = LeavefamilyAllowanceStep1 / 7.33; + + //حق تاهل برای یک ساعت + var LeavemarriedAllowanceStep1 = marriedAllowance / totalChekoutDays; + var LeaveMarriedAllowance = LeavemarriedAllowanceStep1 / 7.33; + + var leavePayPerHours = LeaveDayliFee + LeaveConsumableItems + LeaveHousingAllowance + LeaveFamilyAllowance + LeaveMarriedAllowance; + + #endregion + + + //غیبت برای یک ساعت + double absenceDeductionPerHourses = leavePayPerHours; + //if (hoursePerDay < 7.33) + //{ + // //مقدار مزد روزانه برای یک ساعت + // var dayliFee = daylyWage / hoursePerDay; + + // //اقلام مصرفی برای یک ساعت + // var ConoumableItemsStep1 = consumableItem / 30; + // var ConsumableItems = ConoumableItemsStep1 / hoursePerDay; + + // //کمک هزینه مسکن برای یک ساعت + // var housingAllowanceStep1 = housingAllowance / 30; + // var HousingAllowance = housingAllowanceStep1 / hoursePerDay; + + // //حق عائله مندی برای یک ساعت + // var familyAllowanceStep1 = familyAllowance / 30; + // var FamilyAllowance = familyAllowanceStep1 / hoursePerDay; + + // //حق تاهل برای یک ساعت + // var marriedAllowanceStep1 = marriedAllowance / 30; + // var MarriedAllowance = marriedAllowanceStep1 / hoursePerDay; + // //مزد مرخصی این پرسنل به ازای یک ساعت + // absenceDeductionPerHourses = dayliFee + ConsumableItems + HousingAllowance + FamilyAllowance + MarriedAllowance; + //} + //else + //{ + // //مزد مرخصی این پرسنل به ازای یک ساعت + // absenceDeductionPerHourses = LeaveDayliFee + LeaveConsumableItems + LeaveHousingAllowance + LeaveFamilyAllowance + LeaveMarriedAllowance; + + //} + + #endregion + + //بدست آوردن اولین روز سال + var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; + var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); + var start1403 = new DateTime(2024, 3, 20); + switch (computeOptions) + { + case "OnCheckoutOfMonth": + var resCanToLeave = OnCheckoutCantoleaveList(separationStartDate, separationEndDate, workshopId, employeeId, + leaveHoursesPerDay, totalChekoutDays, hoursePerDay); + + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = true; + ////مدت طلب مرخصی + result.CreditLeaves = resCanToLeave.CanToLeave; + //مزد مرخصی + result.LeavPay = resCanToLeave.CanToLeave * leavePayPerHours; + //مدت غیبت + result.AbsencePeriod = resCanToLeave.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = resCanToLeave.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = hoursePerDay; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"{(separationEndDate - separationStartDate).TotalDays + 1}"; + + break; + //محاسبه در پایان سال به شرطی که قرارداد منتهی به پایان سال باشد + case "OnEndOfYear": + if (isOldContract && contractEnd < start1403) + { + var resEndOfYear = OnCheckoutCantoleaveList(separationStartDate, separationEndDate, workshopId, employeeId, + leaveHoursesPerDay, totalChekoutDays, hoursePerDay); + + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = true; + ////مدت طلب مرخصی + result.CreditLeaves = resEndOfYear.CanToLeave; + //مزد مرخصی + result.LeavPay = resEndOfYear.CanToLeave * leavePayPerHours; + //مدت غیبت + result.AbsencePeriod = resEndOfYear.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = resEndOfYear.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = hoursePerDay; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"{resEndOfYear.CountChekoutDays}"; + + } + else if (isOldContract && contractEnd > start1403) + { + var startDate = startWorkDate >= start1403 ? startWorkDate : start1403; + + var endOfYearRes = EndOfYearCantoleaveList(startDate, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) + .FirstOrDefault(x => x.ContractStart == separationStartDate); + if ((hasleft && leftWorkDate <= separationEndDate) || (separationEndDate == contractEnd && checkoutMonth == "12")) + { + var end = EndOfYearCantoleaveList(startDate, separationEndDate, workshopId, employeeId, + hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, + separationStartDate); + + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = true; + + var canTolv = endOfYearRes.CanToLeave; + var absence = end.Sum(x => x.PeriodOfAbsence); + + if (canTolv >= absence) + { + canTolv -= absence; + absence = 0; + + } + else + { + absence -= canTolv; + canTolv = 0; + + } + + //مزد مرخصی + //result.LeavPay = endOfYearRes.CanToLeave * leavePayPerHours; + result.LeavPay = canTolv * leavePayPerHours; + //مدت غیبت + result.AbsencePeriod = absence; + ////مدت طلب مرخصی + result.CreditLeaves = canTolv; + //کسری غیبت + result.AbsenceDeduction = absence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = end.FirstOrDefault()!.WorkingPerDayHourses; + + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"{endOfYearRes.CountChekoutDays}"; + + } + else + { + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = false; + //مدت طلب مرخصی + result.CreditLeaves = endOfYearRes.CanToLeave; + //مزد مرخصی + result.LeavPay = 0; + //مدت غیبت + result.AbsencePeriod = endOfYearRes.PeriodOfAbsence; + //کسری غیبت + //result.AbsenceDeduction = endOfYearRes.PeriodOfAbsence * absenceDeductionPerHourses; + result.AbsenceDeduction = 0; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = endOfYearRes.WorkingPerDayHourses; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = "0"; + + } + } + else if (!isOldContract) + { + var endOfYearRes = EndOfYearCantoleaveList(startWorkDate, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) + .FirstOrDefault(x => x.ContractStart == separationStartDate); + if ((hasleft && leftWorkDate <= separationEndDate) || (separationEndDate == contractEnd && checkoutMonth == "12")) + { + var end = EndOfYearCantoleaveList(startWorkDate, separationEndDate, workshopId, employeeId, + hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, + separationStartDate); + + var canTolv = endOfYearRes.CanToLeave; + var absence = end.Sum(x => x.PeriodOfAbsence); + if (canTolv >= absence) + { + canTolv -= absence; + absence = 0; + + } + else + { + absence -= canTolv; + canTolv = 0; + + } + + result.LeavPay = canTolv * leavePayPerHours; + //مدت غیبت + result.AbsencePeriod = absence; + ////مدت طلب مرخصی + result.CreditLeaves = canTolv; + //کسری غیبت + result.AbsenceDeduction = absence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = end.FirstOrDefault()!.WorkingPerDayHourses; + + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = true; + + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"{endOfYearRes.CountChekoutDays}"; + + //مزد مرخصی + //result.LeavPay = endOfYearRes.CanToLeave * leavePayPerHours; + + //مدت غیبت + //result.AbsencePeriod = endOfYearRes.PeriodOfAbsence; + //کسری غیبت + //result.AbsenceDeduction = endOfYearRes.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + //result.AverageHoursPerDay = endOfYearRes.WorkingPerDayHourses; + + } + else + { + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = false; + //مدت طلب مرخصی + result.CreditLeaves = endOfYearRes.CanToLeave; + //مزد مرخصی + result.LeavPay = 0; + //مدت غیبت + result.AbsencePeriod = endOfYearRes.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = endOfYearRes.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = endOfYearRes.WorkingPerDayHourses; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = "0"; + + } + } + + break; + case "OnLeftWork"://درپایان همکاری + if (isOldContract && contractEnd < start1403) + { + + var resLeftWork = OnCheckoutCantoleaveList(separationStartDate, separationEndDate, workshopId, employeeId, + leaveHoursesPerDay, totalChekoutDays, hoursePerDay); + + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = true; + ////مدت طلب مرخصی + result.CreditLeaves = resLeftWork.CanToLeave; + //مزد مرخصی + result.LeavPay = resLeftWork.CanToLeave * leavePayPerHours; + //مدت غیبت + result.AbsencePeriod = resLeftWork.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = resLeftWork.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = hoursePerDay; + } + else if (isOldContract && contractEnd > start1403) + { + var startDate = startWorkDate >= start1403 ? startWorkDate : start1403; + var res = LeftWorkCantoleaveList(startDate, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) + .FirstOrDefault(x => x.ContractStart == separationStartDate); + + if (hasleft && leftWorkDate <= separationEndDate) + { + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = true; + ////مدت طلب مرخصی + result.CreditLeaves = 0; + + //مزد مرخصی + result.LeavPay = res.CanToLeave * leavePayPerHours; + + //مدت غیبت + result.AbsencePeriod = res.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = res.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = res.WorkingPerDayHourses; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"{res.CountChekoutDays}"; + } + else + { + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = false; + //مدت طلب مرخصی + result.CreditLeaves = res.CanToLeave; + //مزد مرخصی + result.LeavPay = 0; + //مدت غیبت + result.AbsencePeriod = res.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = res.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = res.WorkingPerDayHourses; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"0"; + + } + + } + else if (!isOldContract) + { + + var res = LeftWorkCantoleaveList(startWorkDate, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) + .FirstOrDefault(x => x.ContractStart == separationStartDate); + + if (hasleft && leftWorkDate <= separationEndDate) + { + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = true; + ////مدت طلب مرخصی + result.CreditLeaves = 0; + + //مزد مرخصی + result.LeavPay = res.CanToLeave * leavePayPerHours; + + //مدت غیبت + result.AbsencePeriod = res.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = res.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = res.WorkingPerDayHourses; + + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"{res.CountChekoutDays}"; + } + else + { + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = false; + //مدت طلب مرخصی + result.CreditLeaves = res.CanToLeave; + //مزد مرخصی + result.LeavPay = 0; + //مدت غیبت + result.AbsencePeriod = res.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = res.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = res.WorkingPerDayHourses; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"0"; + + } + } + + break; + case "OnEndOfContract"://در پایان قرارداد + if (isOldContract && contractEnd < start1403) + { + var resEndOfContract = OnCheckoutCantoleaveList(separationStartDate, separationEndDate, workshopId, employeeId, + leaveHoursesPerDay, totalChekoutDays, hoursePerDay); + + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = true; + ////مدت طلب مرخصی + result.CreditLeaves = resEndOfContract.CanToLeave; + //مزد مرخصی + result.LeavPay = resEndOfContract.CanToLeave * leavePayPerHours; + //مدت غیبت + result.AbsencePeriod = resEndOfContract.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = resEndOfContract.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = hoursePerDay; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"{(separationEndDate - separationEndDate).TotalDays + 1}"; + + } + else if ((isOldContract && contractEnd > start1403) || (!isOldContract)) + { + var resEndOfContract = LeftWorkCantoleaveList(contractStart, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) + .FirstOrDefault(x => x.ContractStart == separationStartDate); + if (resEndOfContract != null) + { + if ((hasleft && leftWorkDate <= separationEndDate) || resEndOfContract.LastChekoutOfContract) + { + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = true; + ////مدت طلب مرخصی + result.CreditLeaves = 0; + + //مزد مرخصی + result.LeavPay = resEndOfContract.CanToLeave * leavePayPerHours; + + //مدت غیبت + result.AbsencePeriod = resEndOfContract.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = resEndOfContract.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = resEndOfContract.WorkingPerDayHourses; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"{resEndOfContract.CountChekoutDays}"; + } + else + { + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = false; + //مدت طلب مرخصی + result.CreditLeaves = resEndOfContract.CanToLeave; + //مزد مرخصی + result.LeavPay = 0; + //مدت غیبت + result.AbsencePeriod = resEndOfContract.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = resEndOfContract.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = resEndOfContract.WorkingPerDayHourses; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"0"; + + } + } + } + break; + case "EndOfContract1402LeftWork1403": //پایان قرارداد قبل 403 پایان همکاری بعد 403 + + if (contractStart >= start1403 && contractEnd > start1403)// بعد از 1403 + { + //تاریخ شروع یافتن قرادادها + var startSearchContracts = startWorkDate >= start1403 ? startWorkDate : start1403; + //تمام قراداد ها از تاریخ شروع تا پایان این فیش + + + + var ress = LeftWorkCantoleaveList(startSearchContracts, separationEndDate, workshopId, employeeId, hasleft, leftWorkDate, fridayStartToEnd, officialHoliday, totalHoursH, totalHorsM, separationStartDate) + .FirstOrDefault(x => x.ContractStart == separationStartDate); + + if (hasleft && leftWorkDate <= separationEndDate) + { + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = true; + ////مدت طلب مرخصی + result.CreditLeaves = 0; + + //مزد مرخصی + result.LeavPay = ress.CanToLeave * leavePayPerHours; + + //مدت غیبت + result.AbsencePeriod = ress.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = ress.PeriodOfAbsence * absenceDeductionPerHourses; ; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = ress.WorkingPerDayHourses; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"{ress.CountChekoutDays}"; + + } + else + { + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = false; + //مدت طلب مرخصی + result.CreditLeaves = ress.CanToLeave; + //مزد مرخصی + result.LeavPay = 0; + //مدت غیبت + result.AbsencePeriod = ress.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = ress.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = ress.WorkingPerDayHourses; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"0"; + + } + } + else if (contractEnd < start1403)// قبل از 1403 + { + var resCanTo1402 = OnCheckoutCantoleaveList(separationStartDate, separationEndDate, workshopId, employeeId, + leaveHoursesPerDay, totalChekoutDays, hoursePerDay); + + //وضعیت تصفیه مزد مرخصی + result.LeaveCheckout = true; + ////مدت طلب مرخصی + result.CreditLeaves = resCanTo1402.CanToLeave; + //مزد مرخصی + result.LeavPay = resCanTo1402.CanToLeave * leavePayPerHours; + //مدت غیبت + result.AbsencePeriod = resCanTo1402.PeriodOfAbsence; + //کسری غیبت + result.AbsenceDeduction = resCanTo1402.PeriodOfAbsence * absenceDeductionPerHourses; + //میانگین ساعت کار در یک روز + result.AverageHoursPerDay = hoursePerDay; + // تعداد روزهایی که برای پرسنل مرخصی حساب شده + result.TotalDayOfLeaveCompute = $"{totalChekoutDays}"; + + } + break; + default: + result = new LeaveAndAbsenceViewModel(); + break; + } + + return result; + } + private 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; ; + + } + private static TimeSpan CalculateBreakTime(TimeSpan breakTimeSpan, TimeSpan sumOneDaySpan) + { + if (breakTimeSpan * 2 >= sumOneDaySpan) + return new TimeSpan(); + return breakTimeSpan; ; + } + + private (bool hasRollCall, double WorkingTotalHours) GetTotalWorkingHoursIfHasRollCall(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd) + { + bool hasRollCall = _rollCallEmployeeRepository.HasRollCallRecord(employeeId, workshopId, + contractStart, contractEnd); + double totalWorkingHours = 0; + if (!hasRollCall) + return (false, 0); + + List rollCallResult; + List groupedRollCall; + + + BaseCustomizeEntity settings = _context.CustomizeWorkshopEmployeeSettings.AsSplitQuery() + .Include(x => x.CustomizeWorkshopGroupSettings).FirstOrDefault(x => + x.WorkshopId == workshopId && x.EmployeeId == employeeId); + //اگر ساعت استراحت پرسنل وجود نداشت صفر است + var breakTimeEntity = settings == null ? new BreakTime(false, new TimeOnly()) : settings.BreakTime; + var endOfFarvardin = "1404/01/31".ToGeorgianDateTime(); + + + rollCallResult = _context.RollCalls.Where(x => + x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart && + x.StartDate.Value.Date <= contractEnd && 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 => + { + TimeSpan breakTime; + if (contractStart > endOfFarvardin) + { + breakTime = CalculateBreakTime( + x.First().BreakTimeSpan, + new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))); + } + else + { + breakTime = CalculateBreakTime(breakTimeEntity, new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))); + } + return 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)) - breakTime, + + BreakTime = breakTime, + }; + }).OrderBy(x => x.CreationDate).ToList(); + + + TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks)); + totalWorkingHours = sumSpans.TotalMinutes / 60; + + return (true, totalWorkingHours); + + + } + public List LeftWorkCantoleaveList(DateTime startDate, DateTime endDate, long workshopId, long employeeId, bool hasleft, DateTime leftWorkDate, int fridayStartToEnd, int officialHoliday, string totalHoursH, string totalHorsM, DateTime separationStartDate) + { + // {مقدار ساعت مجاز مرخصی در برای یک روز{کامل + var leaveHoursesPerDay = 190.58 / 365; + var contactCanToleaveList = new List(); + var allContractsBetween = _context.Contracts.AsSplitQuery().Include(x => x.WorkingHoursList) + .Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && + x.ContractEnd >= startDate && x.ContarctStart <= endDate).ToList(); + + int mandatoryDays = 0; + double allCanToLeave = 0; + double canToLeave = 0; + int contractCounter = 0; + foreach (var contract in allContractsBetween) + { + contractCounter += 1; + var m = _mandatoryHoursRepository.GetMondatoryDays(contract.ContarctStart, + contract.ContractEnd); + + var workinghoursH = contract.WorkingHoursList.Select(x => x.TotalHoursesH).FirstOrDefault(); + var workinghoursM = contract.WorkingHoursList.Select(x => x.TotalHoursesM).FirstOrDefault(); + workinghoursM = string.IsNullOrWhiteSpace(workinghoursM) ? "0" : workinghoursM; + var workingHoursHDouble = Convert.ToDouble(workinghoursH); + var workingHoursMDouble = Convert.ToDouble(workinghoursM); + + + if (workingHoursMDouble > 0) + { + //تبیدل دقیه به اعشار + workingHoursMDouble = workingHoursMDouble / 60; + } + //کل ساعت کار پرسنل در این ماه + var totalWorkingHours = workingHoursHDouble + workingHoursMDouble; + + #region RollCallSpan + + var contractTotallDays = Convert.ToInt32((contract.ContractEnd - contract.ContarctStart).TotalDays + 1); + if (contractTotallDays <= 31) + { + + var rollCallTotalHoures = GetTotalWorkingHoursIfHasRollCall(employeeId, workshopId, + contract.ContarctStart.Date, contract.ContractEnd.Date); + if (rollCallTotalHoures.hasRollCall) + { + totalWorkingHours = rollCallTotalHoures.WorkingTotalHours; + } + } + + #endregion + // میانگین ساعت کارکرد پرسنل در روز + var workingHoursePerDay = totalWorkingHours / m.MoandatoryDays; + + // از شروع قرارداد تا پایان قرارداد + var totalDays = (contract.ContractEnd - contract.ContarctStart).TotalDays + 1; + double leftChekoutCanToleave = 0; + double leftleaveHoursesPerTotalDays = 0; + // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل + var leaveHoursesPerTotalDays = leaveHoursesPerDay * totalDays; + + + double thisContractCanToLeavPerDay = 0; + double leftThisContractCanToLeavePerDay = 0; + if (workingHoursePerDay < 7.33) + { + // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل + thisContractCanToLeavPerDay = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; + //if (hasleft && leftWorkDate <= endDate) + //{ + // leftThisContractCanToLeavePerDay = (leftleaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; + //} + + } + else + { + workingHoursePerDay = 7.33; + thisContractCanToLeavPerDay = leaveHoursesPerTotalDays; + //if (hasleft && leftWorkDate <= endDate) + //{ + // leftThisContractCanToLeavePerDay = leftleaveHoursesPerTotalDays; + //} + + } + //canToLeave = allCanToLeave + thisContractCanToLeavPerDay; + //leftChekoutCanToleave = allCanToLeave + leftThisContractCanToLeavePerDay; + + var sdate = contract.ContarctStart.ToFarsi(); + var edate = contract.ContractEnd.ToFarsi(); + // اگر فیش در قرارداد جاری حلقه بود تا تاریخ پایان فیش برو + if (separationStartDate >= contract.ContarctStart && separationStartDate < contract.ContractEnd) + edate = endDate.ToFarsi(); + 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); + for (var currntMonth = d1; currntMonth <= d2; currntMonth = currntMonth.AddMonths(1)) + { + var startMonthFa = $"{currntMonth}"; + var startMonthGr = new DateTime(); + if (currntMonth == d1) + { + var d1Fa = $"{d1}"; + startMonthGr = d1Fa.ToGeorgianDateTime(); + } + else + { + var a = $"{startMonthFa.Substring(0, 8)}01"; + startMonthGr = a.ToGeorgianDateTime(); + } + + + var endMonthFa = startMonthFa.FindeEndOfMonth(); + var endMonthGr = endMonthFa.ToGeorgianDateTime(); + bool left = false; + if (hasleft && leftWorkDate >= startMonthGr && leftWorkDate <= endMonthGr) + { + left = true; + + if (endMonthGr > leftWorkDate) + endMonthGr = endDate; + } + #region 365 + + double canToLeavAfter365 = 0; + bool is365 = false; + var countChekoutDays = (int)((endMonthGr - startMonthGr).TotalDays + 1); + var beforeCountDays = contactCanToleaveList.MaxBy(x => x.ContractStart); + if (beforeCountDays != null) + { + if (!beforeCountDays.EndOfYear) + { + var sumCounDays = countChekoutDays + beforeCountDays.CountChekoutDays; + if (sumCounDays > 365) + { + is365 = true; + countChekoutDays = sumCounDays - 365; + + // مقدار ساعت مجاز مرخصی باقی مانده بعد از 365 روز + leaveHoursesPerTotalDays = 7.33 * 9; + if (workingHoursePerDay < 7.33) + { + // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل + canToLeavAfter365 = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; + } + else + { + + canToLeavAfter365 = leaveHoursesPerTotalDays; + } + } + else + { + countChekoutDays = sumCounDays; + } + } + + } + + + + #endregion + + + var leaveList = _context.LeaveList.AsSplitQuery() + .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) + .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) + .Where(x => + (x.StartLeave <= startMonthGr && x.EndLeave >= startMonthGr) || + (x.StartLeave <= endMonthGr && x.EndLeave >= endMonthGr) || + (x.StartLeave >= startMonthGr && x.StartLeave <= endMonthGr) || + (x.EndLeave >= startMonthGr && x.EndLeave <= endMonthGr)).ToList(); + //مرخصی استفاده شده در این ماه + double usedLeaves = 0; + if (leaveList.Count > 0) + { + foreach (var item in leaveList) + { + var start = new DateTime(); + var end = new DateTime(); + start = item.StartLeave < startDate ? startDate : item.StartLeave; + end = item.EndLeave > endDate ? endDate : item.EndLeave; + if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) + { + + var leaveSpan = (end - start).TotalDays + 1; + var usedLeave = leaveSpan * workingHoursePerDay; + usedLeaves += usedLeave; + } + else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) + { + var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + else + { + + var leavingHourses = TimeSpan.Parse(item.LeaveHourses); + var usedLeave = (leavingHourses.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + + } + } + + + + //طلب مرخصی این ماه + double creditLeaves = 0; + // مزد مرخصی + double leavePay = 0; + //مدت غیبت + double periodOfAbsence = 0; + double absenceDeduction = 0; + var beforContactCanToleave = new ContractsCanToLeave(); + var beforContractCount = contractCounter - 1; + if (contactCanToleaveList.Count > 0) + { + //آخری قبل از این + beforContactCanToleave = contactCanToleaveList.MaxBy(x => x.ContractStart); + canToLeave = beforContactCanToleave.CanToLeave; + if (beforContactCanToleave.LastChekoutOfContract) + canToLeave = thisContractCanToLeavPerDay + beforContactCanToleave.CanToLeave; + if (hasleft && leftWorkDate >= startMonthGr && leftWorkDate <= endMonthGr) + { + if (canToLeave > 0) + { + #region LeftChekoutCanToLeave + + var leftMonthtotalDays = Convert.ToInt32((leftWorkDate - contract.ContarctStart).TotalDays + 1); + // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{ترک کار شده + leaveHoursesPerTotalDays = leaveHoursesPerDay * leftMonthtotalDays; + if (workingHoursePerDay < 7.33) + { + // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل + thisContractCanToLeavPerDay = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; + } + else + { + workingHoursePerDay = 7.33; + thisContractCanToLeavPerDay = leaveHoursesPerTotalDays; + } + + + if (contactCanToleaveList.Any(x => x.LastChekoutOfContract && x.ContractCounter == beforContractCount)) + { + + var b = contactCanToleaveList.FirstOrDefault(x => + x.LastChekoutOfContract && x.ContractCounter == beforContractCount); + canToLeave = thisContractCanToLeavPerDay + b.CanToLeave; + } + else + { + canToLeave = thisContractCanToLeavPerDay; + } + leaveList = _context.LeaveList.AsSplitQuery() + .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) + .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) + .Where(x => + (x.StartLeave <= contract.ContarctStart && x.EndLeave >= contract.ContarctStart) || + (x.StartLeave <= leftWorkDate && x.EndLeave >= leftWorkDate) || + (x.StartLeave >= contract.ContarctStart && x.StartLeave <= leftWorkDate) || + (x.EndLeave >= contract.ContarctStart && x.EndLeave <= leftWorkDate)).ToList(); + usedLeaves = 0; + if (leaveList.Count > 0) + { + foreach (var item in leaveList) + { + var start = new DateTime(); + var end = new DateTime(); + start = item.StartLeave < startDate ? startDate : item.StartLeave; + end = item.EndLeave > endDate ? endDate : item.EndLeave; + if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) + { + + var leaveSpan = (end - start).TotalDays + 1; + var usedLeave = leaveSpan * workingHoursePerDay; + usedLeaves += usedLeave; + } + else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) + { + var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + else + { + var leavingHourses = TimeSpan.Parse(item.LeaveHourses); + var usedLeave = (leavingHourses.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + + } + } + + + + #endregion + + } + else + { + var checkAbsenceDeduction = contactCanToleaveList + .Where(x => x.CanToLeave == 0 && x.ContractStart >= contract.ContarctStart).MaxBy(x => x.ContractStart); + if (checkAbsenceDeduction != null) + { + + var startSerach = checkAbsenceDeduction.ContractEnd.AddDays(1); + leaveList = _context.LeaveList.AsSplitQuery() + .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) + .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) + .Where(x => + (x.StartLeave <= startSerach && x.EndLeave >= startSerach) || + (x.StartLeave <= leftWorkDate && x.EndLeave >= leftWorkDate) || + (x.StartLeave >= startSerach && x.StartLeave <= leftWorkDate) || + (x.EndLeave >= startSerach && x.EndLeave <= leftWorkDate)).ToList(); + usedLeaves = 0; + if (leaveList.Count > 0) + { + foreach (var item in leaveList) + { + var start = new DateTime(); + var end = new DateTime(); + start = item.StartLeave < startSerach ? startSerach : item.StartLeave; + end = item.EndLeave > leftWorkDate ? leftWorkDate : item.EndLeave; + if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) + { + + var leaveSpan = (end - start).TotalDays + 1; + var usedLeave = leaveSpan * workingHoursePerDay; + usedLeaves += usedLeave; + } + else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) + { + var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + else + { + var leavingHourses = TimeSpan.Parse(item.LeaveHourses); + var usedLeave = (leavingHourses.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + + } + } + } + } + + + + } + + } + else + { + canToLeave = thisContractCanToLeavPerDay; + if (hasleft && leftWorkDate >= startMonthGr && leftWorkDate <= endMonthGr) + { + var leftMonthtotalDays = Convert.ToInt32((leftWorkDate - contract.ContarctStart).TotalDays + 1); + // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل + leaveHoursesPerTotalDays = leaveHoursesPerDay * leftMonthtotalDays; + if (workingHoursePerDay < 7.33) + { + // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل + canToLeave = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; + } + else + { + workingHoursePerDay = 7.33; + canToLeave = leaveHoursesPerTotalDays; + } + } + + + + } ; - if (canToLeave >= usedLeaves) //اگر طلب مرخصی داشت - { - creditLeaves = canToLeave - usedLeaves; - var has365 = contactCanToleaveList.Any(x => x.Is365); - //اگر از 365 روز تجاوز کرد و باقی مانده مرخصی بیشتر از 9 روز بود فقط 9 روز بماند - if (is365 && !has365 && creditLeaves > canToLeavAfter365 && !left) - { - creditLeaves = canToLeavAfter365; + if (canToLeave >= usedLeaves) //اگر طلب مرخصی داشت + { + creditLeaves = canToLeave - usedLeaves; + var has365 = contactCanToleaveList.Any(x => x.Is365); + //اگر از 365 روز تجاوز کرد و باقی مانده مرخصی بیشتر از 9 روز بود فقط 9 روز بماند + if (is365 && !has365 && creditLeaves > canToLeavAfter365 && !left) + { + creditLeaves = canToLeavAfter365; - } + } - if (is365 && has365 && !left) - { - var last365 = contactCanToleaveList - .Where(x => x.Is365) - .MaxBy(x => x.ContractStart); - canToLeavAfter365 += last365.CanToLeave; - if (creditLeaves > canToLeavAfter365) - { - creditLeaves = canToLeavAfter365; - } + if (is365 && has365 && !left) + { + var last365 = contactCanToleaveList + .Where(x => x.Is365) + .MaxBy(x => x.ContractStart); + canToLeavAfter365 += last365.CanToLeave; + if (creditLeaves > canToLeavAfter365) + { + creditLeaves = canToLeavAfter365; + } - } - periodOfAbsence = 0; - } - else - { - periodOfAbsence = usedLeaves - canToLeave; + } + periodOfAbsence = 0; + } + else + { + periodOfAbsence = usedLeaves - canToLeave; if (workingHoursePerDay >= 7.33) periodOfAbsence = 0; - #region AbsenceItemsCompute - - //var consumableItems = ConsumableItems(endMonthGr); - //var housingAllowance = HousingAllowance(endMonthGr); - //var familyAllowance = FamilyAllowance(employeeId, endMonthGr); - //var marriedAllowance = MarriedAllowance(endMonthGr, employeeId); - - //var leftworkList = _leftWorkRepository.search(new LeftWorkSearchModel(){EmployeeId = employeeId,WorkshopId = workshopId}); - //if (leftworkList == null) - // leftworkList = new List(); - ////دستمزد تجمیعی تا این تاریخ - //var dayliFeeResult = DayliFeeComputing(startDate, contract.ContarctStart, endDate, employeeId, workshopId, leftworkList); - - //var dayliFeeComplete = dayliFeeResult.DayliFee.MoneyToDouble(); - //if (workingHoursePerDay < 7.33) - //{ - // //مقدار مزد روزانه برای یک ساعت - // //var contractDayliFee = contract.DayliWage.MoneyToDouble(); - // var dayliFee = dayliFeeComplete / workingHoursePerDay; - - // var HousingAllowonceNumberType = housingAllowance.MoneyToDouble(); - // var HousingStep1 = HousingAllowonceNumberType / 30; - // var HousingPerHourse = HousingStep1 / workingHoursePerDay; - - // var consumableItemsNumberType = consumableItems.MoneyToDouble(); - // var consumableItemsStep1 = consumableItemsNumberType / 30; - // var consumablePerHourse = consumableItemsStep1 / workingHoursePerDay; - - // var MarriedStep1 = marriedAllowance / 30; - // var MarriedPerHours = MarriedStep1 / workingHoursePerDay; - - // var familyAllowanceNumberType = familyAllowance.MoneyToDouble(); - // var familyAllowanceStep1 = familyAllowanceNumberType / 30; - // var familyPerHours = familyAllowanceStep1 / workingHoursePerDay; - - // //کسری غیبت این پرسنل به ازای یک ساعت - // var absencePerHourse = dayliFee + HousingPerHourse + consumablePerHourse + MarriedPerHours + familyPerHours; - // absenceDeduction = absencePerHourse * periodOfAbsence; - //} - //else - //{ - // //مقدار مزد روزانه برای یک ساعت - // var dayliFee = dayliFeeComplete / 7.33; - - // var HousingAllowonceNumberType = housingAllowance.MoneyToDouble(); - // var HousingStep1 = HousingAllowonceNumberType / 30; - // var HousingPerHourse = HousingStep1 / 7.33; - - // var consumableItemsNumberType = consumableItems.MoneyToDouble(); - // var consumableItemsStep1 = consumableItemsNumberType / 30; - // var consumablePerHourse = consumableItemsStep1 / 7.33; - - // var MarriedStep1 = marriedAllowance / 30; - // var MarriedPerHours = MarriedStep1 / 7.33; - - // var familyAllowanceNumberType = familyAllowance.MoneyToDouble(); - // var familyAllowanceStep1 = familyAllowanceNumberType / 30; - // var familyPerHours = familyAllowanceStep1 / 7.33; - - // //کسری غیبت این پرسنل به ازای یک ساعت - // var absencePerHourse = dayliFee + HousingPerHourse + consumablePerHourse + MarriedPerHours + familyPerHours; - // absenceDeduction = absencePerHourse * periodOfAbsence; - //} - #endregion - - - creditLeaves = 0; - } - - bool lastChekout = endMonthGr == contract.ContractEnd; - - contactCanToleaveList.Add(new ContractsCanToLeave() - { - ContractCounter = contractCounter, - WorkingPerDayHourses = workingHoursePerDay, - ContractStart = startMonthGr, - ContractEnd = endMonthGr, - CanToLeave = creditLeaves, - PeriodOfAbsence = periodOfAbsence, - AbsenceDeduction = absenceDeduction, - LastChekoutOfContract = lastChekout, - Left = left, - CountChekoutDays = countChekoutDays, - Is365 = is365, - }); - - } - - allCanToLeave = canToLeave; - - - - } - - return contactCanToleaveList; - } - - public List EndOfYearCantoleaveList(DateTime startDate, DateTime endDate, long workshopId, long employeeId, bool hasleft, - DateTime leftWorkDate, int fridayStartToEnd, int officialHoliday, string totalHoursH, string totalHorsM, - DateTime separationStartDate) - { - // {مقدار ساعت مجاز مرخصی در برای یک روز{کامل - var leaveHoursesPerDay = 190.58 / 365; - var contactCanToleaveList = new List(); - var allContractsBetween = _context.Contracts.AsSplitQuery().Include(x => x.WorkingHoursList) - .Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && - x.ContractEnd >= startDate && x.ContarctStart <= endDate).OrderBy(x => x.ContarctStart).ToList(); - double canToLeave = 0; - int contractCounter = 0; - foreach (var contract in allContractsBetween) - { - contractCounter += 1; - var m = _mandatoryHoursRepository.GetMondatoryDays(contract.ContarctStart, - contract.ContractEnd); - // میانگین ساعت کارکرد پرسنل در روز - #region PersonelWorkingHoursPerDay - - var workinghoursH = contract.WorkingHoursList.Select(x => x.TotalHoursesH).FirstOrDefault(); - var workinghoursM = contract.WorkingHoursList.Select(x => x.TotalHoursesM).FirstOrDefault(); - //workinghoursH = string.IsNullOrWhiteSpace(workinghoursH) ? "0" : workinghoursH; - workinghoursM = string.IsNullOrWhiteSpace(workinghoursM) ? "0" : workinghoursM; - var workingHoursHDouble = Convert.ToDouble(workinghoursH); - var workingHoursMDouble = Convert.ToDouble(workinghoursM); - if (workingHoursMDouble > 0) - { - //تبیدل دقیه به اعشار - workingHoursMDouble = workingHoursMDouble / 60; - } - //کل ساعت کار پرسنل در این قرارداد - var totalWorkingHours = workingHoursHDouble + workingHoursMDouble; - - #region RollCallSpan - - var contractTotallDays = Convert.ToInt32((contract.ContractEnd - contract.ContarctStart).TotalDays + 1); - if (contractTotallDays <= 31) - { - - var rollCallTotalHoures = GetTotalWorkingHoursIfHasRollCall(employeeId, workshopId, - contract.ContarctStart.Date, contract.ContractEnd.Date); - if (rollCallTotalHoures.hasRollCall) - { - totalWorkingHours = rollCallTotalHoures.WorkingTotalHours; - } - } - - #endregion - // میانگین ساعت کارکرد پرسنل در روز - var workingHoursePerDay = totalWorkingHours / m.MoandatoryDays; - - #endregion - // مقدار ساعت استاندارد مرخصی در این قرارداد - #region StandardCanToleave - - // از شروع قرارداد تا پایان قرارداد - var totalDays = (contract.ContractEnd - contract.ContarctStart).TotalDays + 1; - double leftChekoutCanToleave = 0; - double leftleaveHoursesPerTotalDays = 0; - // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل - var leaveHoursesPerTotalDays = leaveHoursesPerDay * totalDays; - - #endregion - - //مقدار ساعت مجاز مرخصی پرسنل در این قرارداد - #region PersonelCanToLeave - - double personelCanToLeave = 0; - if (workingHoursePerDay < 7.33) - { - // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل - personelCanToLeave = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; - } - else - { - workingHoursePerDay = 7.33; - personelCanToLeave = leaveHoursesPerTotalDays; - } - - #endregion - - double leftThisContractCanToLeavePerDay = 0; - - - var sdate = contract.ContarctStart.ToFarsi(); - var edate = contract.ContractEnd.ToFarsi(); - // اگر فیش در قرارداد جاری حلقه بود تا تاریخ پایان فیش برو - if (separationStartDate >= contract.ContarctStart && separationStartDate < contract.ContractEnd) - edate = endDate.ToFarsi(); - 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); - for (var currntMonth = d1; currntMonth <= d2; currntMonth = currntMonth.AddMonths(1)) - { - - var startMonthFa = $"{currntMonth}"; - var startMonthGr = new DateTime(); - if (currntMonth == d1) - { - var d1Fa = $"{d1}"; - startMonthGr = d1Fa.ToGeorgianDateTime(); - } - else - { - var a = $"{startMonthFa.Substring(0, 8)}01"; - startMonthGr = a.ToGeorgianDateTime(); - } - - - var endMonthFa = startMonthFa.FindeEndOfMonth(); - bool isEndOfYear = endMonthFa.Substring(5, 2) == "12"; - var endMonthGr = endMonthFa.ToGeorgianDateTime(); - bool left = false; - if (hasleft && leftWorkDate >= startMonthGr && leftWorkDate <= endMonthGr) - { - left = true; - - if (endMonthGr > leftWorkDate) - endMonthGr = endDate; - } - #region 365 - - double canToLeavAfter365 = 0; - bool is365 = false; - var countChekoutDays = (int)((endMonthGr - startMonthGr).TotalDays + 1); - var beforeCountDays = contactCanToleaveList.MaxBy(x => x.ContractStart); - if (beforeCountDays != null) - { - if (!beforeCountDays.EndOfYear) - { - var sumCounDays = countChekoutDays + beforeCountDays.CountChekoutDays; - if (sumCounDays > 365) - { - - is365 = true; - countChekoutDays = sumCounDays - 365; - - // مقدار ساعت مجاز مرخصی باقی مانده بعد از 365 روز - leaveHoursesPerTotalDays = 7.33 * 9; - if (workingHoursePerDay < 7.33) - { - // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل - canToLeavAfter365 = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; - } - else - { - - canToLeavAfter365 = leaveHoursesPerTotalDays; - } - } - else - { - countChekoutDays = sumCounDays; - } - } - - } - - - - #endregion - var leaveList = _context.LeaveList.AsSplitQuery() - .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) - .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) - .Where(x => - (x.StartLeave <= startMonthGr && x.EndLeave >= startMonthGr) || - (x.StartLeave <= endMonthGr && x.EndLeave >= endMonthGr) || - (x.StartLeave >= startMonthGr && x.StartLeave <= endMonthGr) || - (x.EndLeave >= startMonthGr && x.EndLeave <= endMonthGr)).ToList(); - //مرخصی استفاده شده در این ماه - double usedLeaves = 0; - if (leaveList.Count > 0) - { - foreach (var item in leaveList) - { - - var start = new DateTime(); - var end = new DateTime(); - start = item.StartLeave < startDate ? startDate : item.StartLeave; - end = item.EndLeave > endDate ? endDate : item.EndLeave; - if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) - { - - var leaveSpan = (end - start).TotalDays + 1; - var usedLeave = leaveSpan * workingHoursePerDay; - usedLeaves += usedLeave; - } - else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) - { - var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - else - { - - var leavingHourses = TimeSpan.Parse(item.LeaveHourses); - var usedLeave = (leavingHourses.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - - } - } - - - - //طلب مرخصی این ماه - double creditLeaves = 0; - // مزد مرخصی - double leavePay = 0; - //مدت غیبت - double periodOfAbsence = 0; - double absenceDeduction = 0; - var beforContactCanToleave = new ContractsCanToLeave(); - var beforContractCount = contractCounter - 1; - if (contactCanToleaveList.Count > 0) - { - //آخری قبل از این - beforContactCanToleave = contactCanToleaveList.MaxBy(x => x.ContractStart); - if (beforContactCanToleave.EndOfYear) - { - canToLeave = personelCanToLeave; - } - else - { - canToLeave = beforContactCanToleave.CanToLeave; - } - - - if (beforContactCanToleave.LastChekoutOfContract && !beforContactCanToleave.EndOfYear) - canToLeave = personelCanToLeave + beforContactCanToleave.CanToLeave; - if (hasleft && leftWorkDate >= startMonthGr && leftWorkDate <= endMonthGr) - { - if (canToLeave > 0) - { - #region LeftChekoutCanToLeave - - var check365 = contactCanToleaveList.FirstOrDefault(x => - x.ContractStart >= contract.ContarctStart && x.Is365); - - if (check365 != null) - { - var startAfter365 = check365.ContractEnd.AddDays(1); - canToLeave = check365.CanToLeave; - leaveList = _context.LeaveList.AsSplitQuery() - .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) - .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) - .Where(x => - (x.StartLeave <= startAfter365 && x.EndLeave >= startAfter365) || - (x.StartLeave <= leftWorkDate && x.EndLeave >= leftWorkDate) || - (x.StartLeave >= startAfter365 && x.StartLeave <= leftWorkDate) || - (x.EndLeave >= startAfter365 && x.EndLeave <= leftWorkDate)).ToList(); - usedLeaves = 0; - if (leaveList.Count > 0) - { - foreach (var item in leaveList) - { - var start = new DateTime(); - var end = new DateTime(); - start = item.StartLeave < startAfter365 ? startAfter365 : item.StartLeave; - end = item.EndLeave > leftWorkDate ? leftWorkDate : item.EndLeave; - if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) - { - - var leaveSpan = (end - start).TotalDays + 1; - var usedLeave = leaveSpan * workingHoursePerDay; - usedLeaves += usedLeave; - } - else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) - { - var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - else - { - var leavingHourses = TimeSpan.Parse(item.LeaveHourses); - var usedLeave = (leavingHourses.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - - } - } - } - else - { - var leftMonthtotalDays = Convert.ToInt32((leftWorkDate - contract.ContarctStart).TotalDays + 1); - // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{ترک کار شده - leaveHoursesPerTotalDays = leaveHoursesPerDay * leftMonthtotalDays; - if (workingHoursePerDay < 7.33) - { - // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل - personelCanToLeave = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; - } - else - { - workingHoursePerDay = 7.33; - personelCanToLeave = leaveHoursesPerTotalDays; - } - - if (contactCanToleaveList.Any(x => x.LastChekoutOfContract && x.ContractCounter == beforContractCount && !x.EndOfYear)) - { - - var b = contactCanToleaveList.FirstOrDefault(x => - x.LastChekoutOfContract && x.ContractCounter == beforContractCount && !x.EndOfYear); - - canToLeave = personelCanToLeave + b.CanToLeave; - - - } - else - { - canToLeave = personelCanToLeave; - } - - leaveList = _context.LeaveList.AsSplitQuery() - .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) - .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) - .Where(x => - (x.StartLeave <= contract.ContarctStart && x.EndLeave >= contract.ContarctStart) || - (x.StartLeave <= leftWorkDate && x.EndLeave >= leftWorkDate) || - (x.StartLeave >= contract.ContarctStart && x.StartLeave <= leftWorkDate) || - (x.EndLeave >= contract.ContarctStart && x.EndLeave <= leftWorkDate)).ToList(); - usedLeaves = 0; - if (leaveList.Count > 0) - { - foreach (var item in leaveList) - { - var start = new DateTime(); - var end = new DateTime(); - start = item.StartLeave < contract.ContarctStart ? contract.ContarctStart : item.StartLeave; - end = item.EndLeave > leftWorkDate ? leftWorkDate : item.EndLeave; - if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) - { - - var leaveSpan = (end - start).TotalDays + 1; - var usedLeave = leaveSpan * workingHoursePerDay; - usedLeaves += usedLeave; - } - else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) - { - var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - else - { - var leavingHourses = TimeSpan.Parse(item.LeaveHourses); - var usedLeave = (leavingHourses.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - - } - } - } - - #endregion - - } - else - { - var checkAbsenceDeduction = contactCanToleaveList - .Where(x => x.CanToLeave == 0 && x.ContractStart >= contract.ContarctStart) - .MaxBy(x => x.ContractStart); - if (checkAbsenceDeduction != null) - { - - var startSerach = checkAbsenceDeduction.ContractEnd.AddDays(1); - leaveList = _context.LeaveList.AsSplitQuery() - .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) - .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) - .Where(x => - (x.StartLeave <= startSerach && x.EndLeave >= startSerach) || - (x.StartLeave <= leftWorkDate && x.EndLeave >= leftWorkDate) || - (x.StartLeave >= startSerach && x.StartLeave <= leftWorkDate) || - (x.EndLeave >= startSerach && x.EndLeave <= leftWorkDate)).ToList(); - usedLeaves = 0; - if (leaveList.Count > 0) - { - foreach (var item in leaveList) - { - - var start = new DateTime(); - var end = new DateTime(); - start = item.StartLeave < startSerach ? startSerach : item.StartLeave; - end = item.EndLeave > leftWorkDate ? leftWorkDate : item.EndLeave; - if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) - { - - var leaveSpan = (end - start).TotalDays + 1; - var usedLeave = leaveSpan * workingHoursePerDay; - usedLeaves += usedLeave; - } - else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) - { - var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - else - { - var leavingHourses = TimeSpan.Parse(item.LeaveHourses); - var usedLeave = (leavingHourses.TotalMinutes) / 60; - usedLeaves += usedLeave; - } - - } - } - } - } - - - - } - - } - else - { - canToLeave = personelCanToLeave; - if (hasleft && leftWorkDate >= startMonthGr && leftWorkDate <= endMonthGr) - { - var leftMonthtotalDays = Convert.ToInt32((leftWorkDate - contract.ContarctStart).TotalDays + 1); - // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل - leaveHoursesPerTotalDays = leaveHoursesPerDay * leftMonthtotalDays; - if (workingHoursePerDay < 7.33) - { - // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل - canToLeave = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; - } - else - { - workingHoursePerDay = 7.33; - canToLeave = leaveHoursesPerTotalDays; - } - } - - - - } - - - - bool lastChekout = endMonthGr == contract.ContractEnd; - bool endOfyear = lastChekout && isEndOfYear; - - - - #region NewcChanges - - var has365B = contactCanToleaveList.Any(x => x.Is365); - creditLeaves = canToLeave; - //اگر از 365 روز تجاوز کرد و باقی مانده مرخصی بیشتر از 9 روز بود فقط 9 روز بماند - if (is365 && !has365B && creditLeaves > canToLeavAfter365 && !left && !endOfyear) - { - creditLeaves = canToLeavAfter365; - - } - - if (is365 && has365B && !left && !endOfyear) - { - var last365 = contactCanToleaveList - .Where(x => x.Is365) - .MaxBy(x => x.ContractStart); - canToLeavAfter365 += last365.CanToLeave; - if (creditLeaves > canToLeavAfter365) - { - creditLeaves = canToLeavAfter365; - } - - } - - periodOfAbsence = usedLeaves; + #region AbsenceItemsCompute + + //var consumableItems = ConsumableItems(endMonthGr); + //var housingAllowance = HousingAllowance(endMonthGr); + //var familyAllowance = FamilyAllowance(employeeId, endMonthGr); + //var marriedAllowance = MarriedAllowance(endMonthGr, employeeId); + + //var leftworkList = _leftWorkRepository.search(new LeftWorkSearchModel(){EmployeeId = employeeId,WorkshopId = workshopId}); + //if (leftworkList == null) + // leftworkList = new List(); + ////دستمزد تجمیعی تا این تاریخ + //var dayliFeeResult = DayliFeeComputing(startDate, contract.ContarctStart, endDate, employeeId, workshopId, leftworkList); + + //var dayliFeeComplete = dayliFeeResult.DayliFee.MoneyToDouble(); + //if (workingHoursePerDay < 7.33) + //{ + // //مقدار مزد روزانه برای یک ساعت + // //var contractDayliFee = contract.DayliWage.MoneyToDouble(); + // var dayliFee = dayliFeeComplete / workingHoursePerDay; + + // var HousingAllowonceNumberType = housingAllowance.MoneyToDouble(); + // var HousingStep1 = HousingAllowonceNumberType / 30; + // var HousingPerHourse = HousingStep1 / workingHoursePerDay; + + // var consumableItemsNumberType = consumableItems.MoneyToDouble(); + // var consumableItemsStep1 = consumableItemsNumberType / 30; + // var consumablePerHourse = consumableItemsStep1 / workingHoursePerDay; + + // var MarriedStep1 = marriedAllowance / 30; + // var MarriedPerHours = MarriedStep1 / workingHoursePerDay; + + // var familyAllowanceNumberType = familyAllowance.MoneyToDouble(); + // var familyAllowanceStep1 = familyAllowanceNumberType / 30; + // var familyPerHours = familyAllowanceStep1 / workingHoursePerDay; + + // //کسری غیبت این پرسنل به ازای یک ساعت + // var absencePerHourse = dayliFee + HousingPerHourse + consumablePerHourse + MarriedPerHours + familyPerHours; + // absenceDeduction = absencePerHourse * periodOfAbsence; + //} + //else + //{ + // //مقدار مزد روزانه برای یک ساعت + // var dayliFee = dayliFeeComplete / 7.33; + + // var HousingAllowonceNumberType = housingAllowance.MoneyToDouble(); + // var HousingStep1 = HousingAllowonceNumberType / 30; + // var HousingPerHourse = HousingStep1 / 7.33; + + // var consumableItemsNumberType = consumableItems.MoneyToDouble(); + // var consumableItemsStep1 = consumableItemsNumberType / 30; + // var consumablePerHourse = consumableItemsStep1 / 7.33; + + // var MarriedStep1 = marriedAllowance / 30; + // var MarriedPerHours = MarriedStep1 / 7.33; + + // var familyAllowanceNumberType = familyAllowance.MoneyToDouble(); + // var familyAllowanceStep1 = familyAllowanceNumberType / 30; + // var familyPerHours = familyAllowanceStep1 / 7.33; + + // //کسری غیبت این پرسنل به ازای یک ساعت + // var absencePerHourse = dayliFee + HousingPerHourse + consumablePerHourse + MarriedPerHours + familyPerHours; + // absenceDeduction = absencePerHourse * periodOfAbsence; + //} + #endregion + + + creditLeaves = 0; + } + + bool lastChekout = endMonthGr == contract.ContractEnd; + + contactCanToleaveList.Add(new ContractsCanToLeave() + { + ContractCounter = contractCounter, + WorkingPerDayHourses = workingHoursePerDay, + ContractStart = startMonthGr, + ContractEnd = endMonthGr, + CanToLeave = creditLeaves, + PeriodOfAbsence = periodOfAbsence, + AbsenceDeduction = absenceDeduction, + LastChekoutOfContract = lastChekout, + Left = left, + CountChekoutDays = countChekoutDays, + Is365 = is365, + }); + + } + + allCanToLeave = canToLeave; + + + + } + + return contactCanToleaveList; + } + + public List EndOfYearCantoleaveList(DateTime startDate, DateTime endDate, long workshopId, long employeeId, bool hasleft, + DateTime leftWorkDate, int fridayStartToEnd, int officialHoliday, string totalHoursH, string totalHorsM, + DateTime separationStartDate) + { + // {مقدار ساعت مجاز مرخصی در برای یک روز{کامل + var leaveHoursesPerDay = 190.58 / 365; + var contactCanToleaveList = new List(); + var allContractsBetween = _context.Contracts.AsSplitQuery().Include(x => x.WorkingHoursList) + .Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && + x.ContractEnd >= startDate && x.ContarctStart <= endDate).OrderBy(x => x.ContarctStart).ToList(); + double canToLeave = 0; + int contractCounter = 0; + foreach (var contract in allContractsBetween) + { + contractCounter += 1; + var m = _mandatoryHoursRepository.GetMondatoryDays(contract.ContarctStart, + contract.ContractEnd); + // میانگین ساعت کارکرد پرسنل در روز + #region PersonelWorkingHoursPerDay + + var workinghoursH = contract.WorkingHoursList.Select(x => x.TotalHoursesH).FirstOrDefault(); + var workinghoursM = contract.WorkingHoursList.Select(x => x.TotalHoursesM).FirstOrDefault(); + //workinghoursH = string.IsNullOrWhiteSpace(workinghoursH) ? "0" : workinghoursH; + workinghoursM = string.IsNullOrWhiteSpace(workinghoursM) ? "0" : workinghoursM; + var workingHoursHDouble = Convert.ToDouble(workinghoursH); + var workingHoursMDouble = Convert.ToDouble(workinghoursM); + if (workingHoursMDouble > 0) + { + //تبیدل دقیه به اعشار + workingHoursMDouble = workingHoursMDouble / 60; + } + //کل ساعت کار پرسنل در این قرارداد + var totalWorkingHours = workingHoursHDouble + workingHoursMDouble; + + #region RollCallSpan + + var contractTotallDays = Convert.ToInt32((contract.ContractEnd - contract.ContarctStart).TotalDays + 1); + if (contractTotallDays <= 31) + { + + var rollCallTotalHoures = GetTotalWorkingHoursIfHasRollCall(employeeId, workshopId, + contract.ContarctStart.Date, contract.ContractEnd.Date); + if (rollCallTotalHoures.hasRollCall) + { + totalWorkingHours = rollCallTotalHoures.WorkingTotalHours; + } + } + + #endregion + // میانگین ساعت کارکرد پرسنل در روز + var workingHoursePerDay = totalWorkingHours / m.MoandatoryDays; + + #endregion + // مقدار ساعت استاندارد مرخصی در این قرارداد + #region StandardCanToleave + + // از شروع قرارداد تا پایان قرارداد + var totalDays = (contract.ContractEnd - contract.ContarctStart).TotalDays + 1; + double leftChekoutCanToleave = 0; + double leftleaveHoursesPerTotalDays = 0; + // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل + var leaveHoursesPerTotalDays = leaveHoursesPerDay * totalDays; + + #endregion + + //مقدار ساعت مجاز مرخصی پرسنل در این قرارداد + #region PersonelCanToLeave + + double personelCanToLeave = 0; + if (workingHoursePerDay < 7.33) + { + // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل + personelCanToLeave = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; + } + else + { + workingHoursePerDay = 7.33; + personelCanToLeave = leaveHoursesPerTotalDays; + } + + #endregion + + double leftThisContractCanToLeavePerDay = 0; + + + var sdate = contract.ContarctStart.ToFarsi(); + var edate = contract.ContractEnd.ToFarsi(); + // اگر فیش در قرارداد جاری حلقه بود تا تاریخ پایان فیش برو + if (separationStartDate >= contract.ContarctStart && separationStartDate < contract.ContractEnd) + edate = endDate.ToFarsi(); + 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); + for (var currntMonth = d1; currntMonth <= d2; currntMonth = currntMonth.AddMonths(1)) + { + + var startMonthFa = $"{currntMonth}"; + var startMonthGr = new DateTime(); + if (currntMonth == d1) + { + var d1Fa = $"{d1}"; + startMonthGr = d1Fa.ToGeorgianDateTime(); + } + else + { + var a = $"{startMonthFa.Substring(0, 8)}01"; + startMonthGr = a.ToGeorgianDateTime(); + } + + + var endMonthFa = startMonthFa.FindeEndOfMonth(); + bool isEndOfYear = endMonthFa.Substring(5, 2) == "12"; + var endMonthGr = endMonthFa.ToGeorgianDateTime(); + bool left = false; + if (hasleft && leftWorkDate >= startMonthGr && leftWorkDate <= endMonthGr) + { + left = true; + + if (endMonthGr > leftWorkDate) + endMonthGr = endDate; + } + #region 365 + + double canToLeavAfter365 = 0; + bool is365 = false; + var countChekoutDays = (int)((endMonthGr - startMonthGr).TotalDays + 1); + var beforeCountDays = contactCanToleaveList.MaxBy(x => x.ContractStart); + if (beforeCountDays != null) + { + if (!beforeCountDays.EndOfYear) + { + var sumCounDays = countChekoutDays + beforeCountDays.CountChekoutDays; + if (sumCounDays > 365) + { + + is365 = true; + countChekoutDays = sumCounDays - 365; + + // مقدار ساعت مجاز مرخصی باقی مانده بعد از 365 روز + leaveHoursesPerTotalDays = 7.33 * 9; + if (workingHoursePerDay < 7.33) + { + // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل + canToLeavAfter365 = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; + } + else + { + + canToLeavAfter365 = leaveHoursesPerTotalDays; + } + } + else + { + countChekoutDays = sumCounDays; + } + } + + } + + + + #endregion + var leaveList = _context.LeaveList.AsSplitQuery() + .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) + .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) + .Where(x => + (x.StartLeave <= startMonthGr && x.EndLeave >= startMonthGr) || + (x.StartLeave <= endMonthGr && x.EndLeave >= endMonthGr) || + (x.StartLeave >= startMonthGr && x.StartLeave <= endMonthGr) || + (x.EndLeave >= startMonthGr && x.EndLeave <= endMonthGr)).ToList(); + //مرخصی استفاده شده در این ماه + double usedLeaves = 0; + if (leaveList.Count > 0) + { + foreach (var item in leaveList) + { + + var start = new DateTime(); + var end = new DateTime(); + start = item.StartLeave < startDate ? startDate : item.StartLeave; + end = item.EndLeave > endDate ? endDate : item.EndLeave; + if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) + { + + var leaveSpan = (end - start).TotalDays + 1; + var usedLeave = leaveSpan * workingHoursePerDay; + usedLeaves += usedLeave; + } + else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) + { + var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + else + { + + var leavingHourses = TimeSpan.Parse(item.LeaveHourses); + var usedLeave = (leavingHourses.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + + } + } + + + + //طلب مرخصی این ماه + double creditLeaves = 0; + // مزد مرخصی + double leavePay = 0; + //مدت غیبت + double periodOfAbsence = 0; + double absenceDeduction = 0; + var beforContactCanToleave = new ContractsCanToLeave(); + var beforContractCount = contractCounter - 1; + if (contactCanToleaveList.Count > 0) + { + //آخری قبل از این + beforContactCanToleave = contactCanToleaveList.MaxBy(x => x.ContractStart); + if (beforContactCanToleave.EndOfYear) + { + canToLeave = personelCanToLeave; + } + else + { + canToLeave = beforContactCanToleave.CanToLeave; + } + + + if (beforContactCanToleave.LastChekoutOfContract && !beforContactCanToleave.EndOfYear) + canToLeave = personelCanToLeave + beforContactCanToleave.CanToLeave; + if (hasleft && leftWorkDate >= startMonthGr && leftWorkDate <= endMonthGr) + { + if (canToLeave > 0) + { + #region LeftChekoutCanToLeave + + var check365 = contactCanToleaveList.FirstOrDefault(x => + x.ContractStart >= contract.ContarctStart && x.Is365); + + if (check365 != null) + { + var startAfter365 = check365.ContractEnd.AddDays(1); + canToLeave = check365.CanToLeave; + leaveList = _context.LeaveList.AsSplitQuery() + .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) + .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) + .Where(x => + (x.StartLeave <= startAfter365 && x.EndLeave >= startAfter365) || + (x.StartLeave <= leftWorkDate && x.EndLeave >= leftWorkDate) || + (x.StartLeave >= startAfter365 && x.StartLeave <= leftWorkDate) || + (x.EndLeave >= startAfter365 && x.EndLeave <= leftWorkDate)).ToList(); + usedLeaves = 0; + if (leaveList.Count > 0) + { + foreach (var item in leaveList) + { + var start = new DateTime(); + var end = new DateTime(); + start = item.StartLeave < startAfter365 ? startAfter365 : item.StartLeave; + end = item.EndLeave > leftWorkDate ? leftWorkDate : item.EndLeave; + if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) + { + + var leaveSpan = (end - start).TotalDays + 1; + var usedLeave = leaveSpan * workingHoursePerDay; + usedLeaves += usedLeave; + } + else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) + { + var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + else + { + var leavingHourses = TimeSpan.Parse(item.LeaveHourses); + var usedLeave = (leavingHourses.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + + } + } + } + else + { + var leftMonthtotalDays = Convert.ToInt32((leftWorkDate - contract.ContarctStart).TotalDays + 1); + // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{ترک کار شده + leaveHoursesPerTotalDays = leaveHoursesPerDay * leftMonthtotalDays; + if (workingHoursePerDay < 7.33) + { + // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل + personelCanToLeave = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; + } + else + { + workingHoursePerDay = 7.33; + personelCanToLeave = leaveHoursesPerTotalDays; + } + + if (contactCanToleaveList.Any(x => x.LastChekoutOfContract && x.ContractCounter == beforContractCount && !x.EndOfYear)) + { + + var b = contactCanToleaveList.FirstOrDefault(x => + x.LastChekoutOfContract && x.ContractCounter == beforContractCount && !x.EndOfYear); + + canToLeave = personelCanToLeave + b.CanToLeave; + + + } + else + { + canToLeave = personelCanToLeave; + } + + leaveList = _context.LeaveList.AsSplitQuery() + .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) + .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) + .Where(x => + (x.StartLeave <= contract.ContarctStart && x.EndLeave >= contract.ContarctStart) || + (x.StartLeave <= leftWorkDate && x.EndLeave >= leftWorkDate) || + (x.StartLeave >= contract.ContarctStart && x.StartLeave <= leftWorkDate) || + (x.EndLeave >= contract.ContarctStart && x.EndLeave <= leftWorkDate)).ToList(); + usedLeaves = 0; + if (leaveList.Count > 0) + { + foreach (var item in leaveList) + { + var start = new DateTime(); + var end = new DateTime(); + start = item.StartLeave < contract.ContarctStart ? contract.ContarctStart : item.StartLeave; + end = item.EndLeave > leftWorkDate ? leftWorkDate : item.EndLeave; + if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) + { + + var leaveSpan = (end - start).TotalDays + 1; + var usedLeave = leaveSpan * workingHoursePerDay; + usedLeaves += usedLeave; + } + else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) + { + var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + else + { + var leavingHourses = TimeSpan.Parse(item.LeaveHourses); + var usedLeave = (leavingHourses.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + + } + } + } + + #endregion + + } + else + { + var checkAbsenceDeduction = contactCanToleaveList + .Where(x => x.CanToLeave == 0 && x.ContractStart >= contract.ContarctStart) + .MaxBy(x => x.ContractStart); + if (checkAbsenceDeduction != null) + { + + var startSerach = checkAbsenceDeduction.ContractEnd.AddDays(1); + leaveList = _context.LeaveList.AsSplitQuery() + .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) + .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) + .Where(x => + (x.StartLeave <= startSerach && x.EndLeave >= startSerach) || + (x.StartLeave <= leftWorkDate && x.EndLeave >= leftWorkDate) || + (x.StartLeave >= startSerach && x.StartLeave <= leftWorkDate) || + (x.EndLeave >= startSerach && x.EndLeave <= leftWorkDate)).ToList(); + usedLeaves = 0; + if (leaveList.Count > 0) + { + foreach (var item in leaveList) + { + + var start = new DateTime(); + var end = new DateTime(); + start = item.StartLeave < startSerach ? startSerach : item.StartLeave; + end = item.EndLeave > leftWorkDate ? leftWorkDate : item.EndLeave; + if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) + { + + var leaveSpan = (end - start).TotalDays + 1; + var usedLeave = leaveSpan * workingHoursePerDay; + usedLeaves += usedLeave; + } + else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) + { + var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + else + { + var leavingHourses = TimeSpan.Parse(item.LeaveHourses); + var usedLeave = (leavingHourses.TotalMinutes) / 60; + usedLeaves += usedLeave; + } + + } + } + } + } + + + + } + + } + else + { + canToLeave = personelCanToLeave; + if (hasleft && leftWorkDate >= startMonthGr && leftWorkDate <= endMonthGr) + { + var leftMonthtotalDays = Convert.ToInt32((leftWorkDate - contract.ContarctStart).TotalDays + 1); + // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل + leaveHoursesPerTotalDays = leaveHoursesPerDay * leftMonthtotalDays; + if (workingHoursePerDay < 7.33) + { + // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل + canToLeave = (leaveHoursesPerTotalDays * workingHoursePerDay) / 7.33; + } + else + { + workingHoursePerDay = 7.33; + canToLeave = leaveHoursesPerTotalDays; + } + } + + + + } + + + + bool lastChekout = endMonthGr == contract.ContractEnd; + bool endOfyear = lastChekout && isEndOfYear; + + + + #region NewcChanges + + var has365B = contactCanToleaveList.Any(x => x.Is365); + creditLeaves = canToLeave; + //اگر از 365 روز تجاوز کرد و باقی مانده مرخصی بیشتر از 9 روز بود فقط 9 روز بماند + if (is365 && !has365B && creditLeaves > canToLeavAfter365 && !left && !endOfyear) + { + creditLeaves = canToLeavAfter365; + + } + + if (is365 && has365B && !left && !endOfyear) + { + var last365 = contactCanToleaveList + .Where(x => x.Is365) + .MaxBy(x => x.ContractStart); + canToLeavAfter365 += last365.CanToLeave; + if (creditLeaves > canToLeavAfter365) + { + creditLeaves = canToLeavAfter365; + } + + } + + periodOfAbsence = usedLeaves; #endregion contactCanToleaveList.Add(new ContractsCanToLeave() - { - ContractCounter = contractCounter, - WorkingPerDayHourses = workingHoursePerDay, - ContractStart = startMonthGr, - ContractEnd = endMonthGr, - CanToLeave = creditLeaves, - PeriodOfAbsence = periodOfAbsence, - AbsenceDeduction = absenceDeduction, - LastChekoutOfContract = lastChekout, - Left = left, - EndOfYear = endOfyear, - CountChekoutDays = countChekoutDays, - Is365 = is365, - }); - - } - - } - return contactCanToleaveList; - } - - - - public ContractsCanToLeave OnCheckoutCantoleaveList(DateTime startDate, DateTime endDate, long workshopId, long employeeId, - double leaveHoursesPerDay, double totalChekoutDays, double hoursePerDay) - { - double checkoutCanToLeave = 0; - // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل - var starndardHoursesPerTotalDays = leaveHoursesPerDay * totalChekoutDays; - if (hoursePerDay < 7.33) - { - // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل - checkoutCanToLeave = (starndardHoursesPerTotalDays * hoursePerDay) / 7.33; - } - else - { - hoursePerDay = 7.33; - checkoutCanToLeave = starndardHoursesPerTotalDays; - } - //بدست آوردن مرخصی این ماه - var checkoutLeaveList = _context.LeaveList.AsSplitQuery() - .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) - .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) - .Where(x => - (x.StartLeave <= startDate && x.EndLeave >= startDate) || - (x.StartLeave <= endDate && x.EndLeave >= endDate) || - (x.StartLeave >= startDate && x.StartLeave <= endDate) || - (x.EndLeave >= startDate && x.EndLeave <= endDate)).ToList(); - //مرخصی استفاده شده در این ماه - double usedLeavesChekout = 0; - if (checkoutLeaveList.Count > 0) - { - foreach (var item in checkoutLeaveList) - { - var start = new DateTime(); - var end = new DateTime(); - start = item.StartLeave < startDate ? startDate : item.StartLeave; - end = item.EndLeave > endDate ? endDate : item.EndLeave; - - if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) - { - var leaveSpan = (end - start).TotalDays + 1; - var usedLeave = leaveSpan * hoursePerDay; - usedLeavesChekout += usedLeave; - } - else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) - { - var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; - usedLeavesChekout += usedLeave; - } - else - { - var leavingHourses = TimeSpan.Parse(item.LeaveHourses); - var usedLeave = (leavingHourses.TotalMinutes) / 60; - usedLeavesChekout += usedLeave; - } - - } - } - - double creditLeaves = 0; - double periodOfAbsence = 0; - if (checkoutCanToLeave >= usedLeavesChekout) //اگر طلب مرخصی داشت - { - creditLeaves = checkoutCanToLeave - usedLeavesChekout; - periodOfAbsence = 0; - - } - else - { - - - periodOfAbsence = usedLeavesChekout - checkoutCanToLeave; - - creditLeaves = 0; - } - - - var result = new ContractsCanToLeave() - { - - CanToLeave = creditLeaves, - PeriodOfAbsence = periodOfAbsence, - - }; - return result; - - } - - public async Task HolidayGregorian(DateTime gregorianDate) - { - var result = new HolidayApiVewModel(); - var gregorianStr = gregorianDate.ToString("MM/dd/yyyy"); - var month = gregorianStr.Substring(0, 2); - var day = gregorianStr.Substring(3, 2); - var year = gregorianStr.Substring(6, 4); - - var client = new HttpClient(); - var request = new HttpRequestMessage(HttpMethod.Get, $"https://holidayapi.ir/gregorian/{year}/{month}/{day}"); - request.Headers.Add("Cookie", "XSRF-TOKEN=eyJpdiI6IjFrOTRrM0tFeVh5ZHFnNis3K0xZQVE9PSIsInZhbHVlIjoidlQ5TEg3c2hGYTVYeU0zRU9ha2NWTWpnYWRLMWxWSG9NWm5JYXhiaC8xRzliSlpmZGp2TlExd0VtL0JIL2JYWXNnVEREeTZNNDd1VHRQdjlQajFCNUxHZkwvdExWb3hCc25IMndUdEVwdDJ4T3drbkdhRTdscVoxNUxDeVNNOTciLCJtYWMiOiJkNjY4NGNkZWI3NGNkMzA1YWUyMjQxNGU5MWYwMjVlMGE1OGQzMjhkYTQ1NGE5NzcyNjA3NGNhM2RjOGI2NDVmIiwidGFnIjoiIn0%3D; holidayapi_session=eyJpdiI6IkdxRGx1NUZsRnlJazUwS3JhRUgrMFE9PSIsInZhbHVlIjoiclZ2U0hQZTErZ3duQmZXWmV6WjlvR1JTWEpwZHRSR0p2YytFOENUYzg0R1JBOGZHcWI1TzhFTEtIRjdXQy9Qa0doY0RXR2pBRGZTOEN3cGJsVEtTcC9uSkliOWZ6U3ZJRkFvY3N0TytWSGJwNWt2dWhKTmI0bnJOb09Ic3NJd0siLCJtYWMiOiI2MTk4YzNjNTdmODJmNDVkZTM5YWE2OTcyNGJiYzI1MTM1ZTViYTZlZTVhZTNhMzNmY2U5NzM1OThiOTg5YThlIiwidGFnIjoiIn0%3D"); - var response = await client.SendAsync(request); - var success = response.IsSuccessStatusCode; - - if (success) - { - var res = await response.Content.ReadAsStringAsync(); - var convertedRes = JsonConvert.DeserializeObject(res); - result.IsHoliday = convertedRes.IsHoliday; - result.IsSuccess = true; - } - - return result; - } - - public async Task HolidayShamsi(string shamsiDate) - { - var result = new HolidayApiVewModel(); - var year = shamsiDate.Substring(0, 4); - var month = shamsiDate.Substring(5, 2); - var day = shamsiDate.Substring(8, 2); - - - var client = new HttpClient(); - var request = new HttpRequestMessage(HttpMethod.Get, $"https://holidayapi.ir/gregorian/{year}/{month}/{day}"); - request.Headers.Add("Cookie", "XSRF-TOKEN=eyJpdiI6IjFrOTRrM0tFeVh5ZHFnNis3K0xZQVE9PSIsInZhbHVlIjoidlQ5TEg3c2hGYTVYeU0zRU9ha2NWTWpnYWRLMWxWSG9NWm5JYXhiaC8xRzliSlpmZGp2TlExd0VtL0JIL2JYWXNnVEREeTZNNDd1VHRQdjlQajFCNUxHZkwvdExWb3hCc25IMndUdEVwdDJ4T3drbkdhRTdscVoxNUxDeVNNOTciLCJtYWMiOiJkNjY4NGNkZWI3NGNkMzA1YWUyMjQxNGU5MWYwMjVlMGE1OGQzMjhkYTQ1NGE5NzcyNjA3NGNhM2RjOGI2NDVmIiwidGFnIjoiIn0%3D; holidayapi_session=eyJpdiI6IkdxRGx1NUZsRnlJazUwS3JhRUgrMFE9PSIsInZhbHVlIjoiclZ2U0hQZTErZ3duQmZXWmV6WjlvR1JTWEpwZHRSR0p2YytFOENUYzg0R1JBOGZHcWI1TzhFTEtIRjdXQy9Qa0doY0RXR2pBRGZTOEN3cGJsVEtTcC9uSkliOWZ6U3ZJRkFvY3N0TytWSGJwNWt2dWhKTmI0bnJOb09Ic3NJd0siLCJtYWMiOiI2MTk4YzNjNTdmODJmNDVkZTM5YWE2OTcyNGJiYzI1MTM1ZTViYTZlZTVhZTNhMzNmY2U5NzM1OThiOTg5YThlIiwidGFnIjoiIn0%3D"); - var response = await client.SendAsync(request); - var success = response.IsSuccessStatusCode; - - if (success) - { - var res = await response.Content.ReadAsStringAsync(); - var convertedRes = JsonConvert.DeserializeObject(res); - result.IsHoliday = convertedRes.IsHoliday; - result.IsSuccess = true; - } - - return result; - } - - #endregion - - //عیدی - #region Bunoses - - public BunosesAndYearsPayStatus Bunoses(string startDateFa, DateTime leftWorkDate, DateTime separationStartDate, DateTime separationEndDate, double daylyWage, string bonusesOptions, - bool hasleft, DateTime startWorkDate, DateTime contractStart, DateTime contractEnd, long workshopId, - long employeeId, bool isOldContract) - { - BunosesAndYearsPayStatus finalResult = new BunosesAndYearsPayStatus(); - double result = 0; - // ماه فیش آخر - var checkoutMonth = startDateFa.Substring(5, 2); - var start1403 = new DateTime(2024, 3, 20); - switch (bonusesOptions) - { - case "OnCheckoutOfMonth": - - var totalCheckoutDays = (separationEndDate - separationStartDate).TotalDays + 1; - finalResult.Bunoses = ((daylyWage * 60) / 365) * totalCheckoutDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalCheckoutDays); - - break; - case "OnEndOfYear"://درپایان سال - - if (isOldContract && contractEnd < start1403) - { - var totaltDays = (separationEndDate - separationStartDate).TotalDays + 1; - finalResult.Bunoses = ((daylyWage * 60) / 365) * totaltDays; - finalResult.TotalDayCompute = Convert.ToInt32(totaltDays); - } - else if (isOldContract && contractEnd > start1403) - { - - - if ((hasleft && leftWorkDate <= separationEndDate) || checkoutMonth == "12") - { - - //بدست آوردن اولین روز سال - string startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; - DateTime startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); - - // اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود - DateTime startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr; - - - #region NewCompute - - //شروع دوره - string st = startComputeDay.ToFarsi(); - int syear = Convert.ToInt32(st.Substring(0, 4)); - int smonth = Convert.ToInt32(st.Substring(5, 2)); - PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1); - PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1); - //پایان فیش حقوقی آخر - PersianDateTime endCheckout = separationEndDate.ToPersianDateTime(); - if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month) - { - var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; - finalResult.Bunoses = ((daylyWage * 60) / 365) * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - } - else - { - var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && - x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable(); - //پایان دوره - PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime(); - List nullDateList = new List(); - double sumOfOldBonuses = 0; - var oldTotalDays = 0; - for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1)) - { - var searchStart = ($"{startDate}").ToGeorgianDateTime(); - var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime(); - var foundCheckout = checkoutList.FirstOrDefault(x => - x.ContractStart >= searchStart && x.ContractEnd <= searchEnd); - if (foundCheckout == null) - { - nullDateList.Add(new BunosesAndYearsPayStatus() - { - ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart, - ContractEnd = searchEnd - }); - finalResult.NotCompleted = true; - } - else - { - double foundMonthlySalary = foundCheckout.MonthlySalary + foundCheckout.BaseYearsPay; - int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays); - double foundDayliWage = foundMonthlySalary / foundTotaldays; - double foundYearsPay = ((foundDayliWage * 60) / 365) * foundTotaldays; - oldTotalDays += foundTotaldays; - sumOfOldBonuses += foundYearsPay; - } - - } - - var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; - double lastMonthBonuses = ((daylyWage * 60) / 365) * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays + oldTotalDays); - finalResult.Bunoses = lastMonthBonuses + sumOfOldBonuses; - finalResult.BunosesStatusList = nullDateList; - } - - #endregion - - - } - } - else if (!isOldContract) - { - if ((hasleft && leftWorkDate <= separationEndDate) || checkoutMonth == "12") - { - //بدست آوردن اولین روز سال - var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; - var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); - var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr; - #region NewCompute - - //شروع دوره - string st = startComputeDay.ToFarsi(); - int syear = Convert.ToInt32(st.Substring(0, 4)); - int smonth = Convert.ToInt32(st.Substring(5, 2)); - PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1); - PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1); - //پایان فیش حقوقی آخر - PersianDateTime endCheckout = separationEndDate.ToPersianDateTime(); - if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month) - { - var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; - finalResult.Bunoses = ((daylyWage * 60) / 365) * totalDays; - } - else - { - var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && - x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable(); - //پایان دوره - PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime(); - List nullDateList = new List(); - double sumOfOldBonuses = 0; - var oldTotalDays = 0; - for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1)) - { - var searchStart = ($"{startDate}").ToGeorgianDateTime(); - var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime(); - var foundCheckout = checkoutList.FirstOrDefault(x => - x.ContractStart >= searchStart && x.ContractEnd <= searchEnd); - if (foundCheckout == null) - { - nullDateList.Add(new BunosesAndYearsPayStatus() - { - ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart, - ContractEnd = searchEnd - }); - finalResult.NotCompleted = true; - } - else - { - double foundMonthlySalary = foundCheckout.MonthlySalary + foundCheckout.BaseYearsPay; - int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays); - double foundDayliWage = foundMonthlySalary / foundTotaldays; - double foundYearsPay = ((foundDayliWage * 60) / 365) * foundTotaldays; - oldTotalDays += foundTotaldays; - sumOfOldBonuses += foundYearsPay; - } - - } - - var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; - double lastMonthBonuses = ((daylyWage * 60) / 365) * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays + oldTotalDays); - finalResult.Bunoses = lastMonthBonuses + sumOfOldBonuses; - finalResult.BunosesStatusList = nullDateList; - } - - #endregion - } - } - - - break; - case "OnEndOfContract"://در پایان قرارداد - - if (isOldContract && contractEnd < start1403) - { - var totaltDays = (separationEndDate - separationStartDate).TotalDays + 1; - finalResult.Bunoses = ((daylyWage * 60) / 365) * totaltDays; - } - else if (isOldContract && contractEnd > start1403) - { - if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd) - { - - //بدست آوردن اولین روز سال - //var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; - //var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); - - var startComputeDay = contractStart; - //var totalDays = (separationEndDate - contractStart).TotalDays + 1; - //result = (daylyWage * 60) / 365 * totalDays; - - #region NewCompute - - //شروع دوره - string st = startComputeDay.ToFarsi(); - int syear = Convert.ToInt32(st.Substring(0, 4)); - int smonth = Convert.ToInt32(st.Substring(5, 2)); - PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1); - PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1); - //پایان فیش حقوقی آخر - PersianDateTime endCheckout = separationEndDate.ToPersianDateTime(); - if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month) - { - var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; - finalResult.Bunoses = ((daylyWage * 60) / 365) * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays); - } - else - { - var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && - x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable(); - //پایان دوره - PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime(); - List nullDateList = new List(); - double sumOfOldBonuses = 0; - var oldTotalDays = 0; - for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1)) - { - var searchStart = ($"{startDate}").ToGeorgianDateTime(); - var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime(); - var foundCheckout = checkoutList.FirstOrDefault(x => - x.ContractStart >= searchStart && x.ContractEnd <= searchEnd); - if (foundCheckout == null) - { - nullDateList.Add(new BunosesAndYearsPayStatus() - { - ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart, - ContractEnd = searchEnd - }); - finalResult.NotCompleted = true; - } - else - { - double foundMonthlySalary = foundCheckout.MonthlySalary + foundCheckout.BaseYearsPay; - int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays); - double foundDayliWage = foundMonthlySalary / foundTotaldays; - double foundBonuses = ((foundDayliWage * 60) / 365) * foundTotaldays; - oldTotalDays += foundTotaldays; - sumOfOldBonuses += foundBonuses; - } - - } - - var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; - double lastMonthBonuses = ((daylyWage * 60) / 365) * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays + oldTotalDays); - finalResult.Bunoses = lastMonthBonuses + sumOfOldBonuses; - finalResult.BunosesStatusList = nullDateList; - } - - #endregion - } - } - else if (!isOldContract) - { - if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd) - { - var startComputeDay = contractStart; - //var totalDays = (separationEndDate - contractStart).TotalDays + 1; - // finalResult.Bunoses = (daylyWage * 60) / 365 * totalDays; - - #region NewCompute - - //شروع دوره - string st = startComputeDay.ToFarsi(); - int syear = Convert.ToInt32(st.Substring(0, 4)); - int smonth = Convert.ToInt32(st.Substring(5, 2)); - PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1); - PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1); - //پایان فیش حقوقی آخر - PersianDateTime endCheckout = separationEndDate.ToPersianDateTime(); - if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month) - { - var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; - finalResult.Bunoses = ((daylyWage * 60) / 365) * totalDays; - } - else - { - var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && - x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable(); - //پایان دوره - PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime(); - List nullDateList = new List(); - double sumOfOldBonuses = 0; - var oldTotalDays = 0; - for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1)) - { - var searchStart = ($"{startDate}").ToGeorgianDateTime(); - var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime(); - var foundCheckout = checkoutList.FirstOrDefault(x => - x.ContractStart >= searchStart && x.ContractEnd <= searchEnd); - if (foundCheckout == null) - { - nullDateList.Add(new BunosesAndYearsPayStatus() - { - ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart, - ContractEnd = searchEnd - }); - finalResult.NotCompleted = true; - } - else - { - double foundMonthlySalary = foundCheckout.MonthlySalary + foundCheckout.BaseYearsPay; - int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays); - double foundDayliWage = foundMonthlySalary / foundTotaldays; - double foundBonuses = ((foundDayliWage * 60) / 365) * foundTotaldays; - oldTotalDays += foundTotaldays; - sumOfOldBonuses += foundBonuses; - } - - } - - var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; - double lastMonthBonuses = ((daylyWage * 60) / 365) * totalDays; - finalResult.TotalDayCompute = Convert.ToInt32(totalDays + oldTotalDays); - finalResult.Bunoses = lastMonthBonuses + sumOfOldBonuses; - finalResult.BunosesStatusList = nullDateList; - } - - #endregion - } - } - - break; - //case "EndOfContract1402LeftWork1403": //پایان قرارداد قبل 403 پایان همکاری بعد 403 - - // if (contractStart >= start1403 && contractEnd > start1403)// بعد از 1403 - // { - // if (hasleft && leftWorkDate <= separationEndDate) - // { - // //بدست آوردن اولین روز سال - // var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; - // var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); - - // // اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود - // var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr; - // var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; - // result = (daylyWage * 60) / 365 * totalDays; - // } - // } - // else if (contractStart < start1403)// قبل از 1403 - // { - // var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; - // finalResult.Bunoses = (daylyWage * 60) / 365 * totalDays; - - // //if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd || checkoutMonth == "12") - // //{ - // // //بدست آوردن اولین روز سال - // // var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; - // // var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); - - // // var startComputeDay = contractStart >= startDayOfYearGr ? contractStart : startDayOfYearGr; - - // //} - // } - // break; - - default: - finalResult.Bunoses = 0; - finalResult.TotalDayCompute = 0; - break; - } - - return finalResult; - } - - - - #endregion - - - #region Insurance - - public InsuranceYearlySalaryModel GetInsuranceItems(DateTime startDate, DateTime endDate, string year) - { - var query = _context.YearlySalaries - .Where(x => x.StartDate <= startDate && x.EndDate >= endDate && x.Year == year) - .Include(x => x.YearlySalaryItemsList) - .Select(x => new InsuranceYearlySalaryModel - { - DayliWage = x.YearlySalaryItemsList.FirstOrDefault(item => item.ItemName == "مزد روزانه").ItemValue, - ConsumableItems = x.YearlySalaryItemsList.FirstOrDefault(item => item.ItemName == "کمک هزینه اقلام").ItemValue, - HousingAllowance = x.YearlySalaryItemsList.FirstOrDefault(item => item.ItemName == "کمک هزینه مسکن").ItemValue, - MarriedAllowance = x.YearlySalaryItemsList.Any(item => item.ItemName == "حق تاهل") ? x.YearlySalaryItemsList.FirstOrDefault(item => item.ItemName == "حق تاهل").ItemValue : 0, - - }).FirstOrDefault(); - - return query; - } - #endregion - - - private double GetRoundValue(double value) - { - string strValue = value.ToString(); - if (strValue.IndexOf('.') > -1) - { - - - string a = strValue.Substring(strValue.IndexOf('.') + 1, 1); - if (int.Parse(a) > 3) - { - return (Math.Round(value, MidpointRounding.ToPositiveInfinity)); - } - else - { - return (Math.Round(value, MidpointRounding.ToNegativeInfinity)); - } - } - - return value; - } + { + ContractCounter = contractCounter, + WorkingPerDayHourses = workingHoursePerDay, + ContractStart = startMonthGr, + ContractEnd = endMonthGr, + CanToLeave = creditLeaves, + PeriodOfAbsence = periodOfAbsence, + AbsenceDeduction = absenceDeduction, + LastChekoutOfContract = lastChekout, + Left = left, + EndOfYear = endOfyear, + CountChekoutDays = countChekoutDays, + Is365 = is365, + }); + + } + + } + return contactCanToleaveList; + } + + + + public ContractsCanToLeave OnCheckoutCantoleaveList(DateTime startDate, DateTime endDate, long workshopId, long employeeId, + double leaveHoursesPerDay, double totalChekoutDays, double hoursePerDay) + { + double checkoutCanToLeave = 0; + // {مقدار ساعت مجاز مرخصی در مدت این فیش حقوقی{کامل + var starndardHoursesPerTotalDays = leaveHoursesPerDay * totalChekoutDays; + if (hoursePerDay < 7.33) + { + // تناسب مجدد به نسبت ساعات کمتر از 7/33 برای بدست آوردن ساعت مجاز مرخصی این پرسنل + checkoutCanToLeave = (starndardHoursesPerTotalDays * hoursePerDay) / 7.33; + } + else + { + hoursePerDay = 7.33; + checkoutCanToLeave = starndardHoursesPerTotalDays; + } + //بدست آوردن مرخصی این ماه + var checkoutLeaveList = _context.LeaveList.AsSplitQuery() + .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) + .Where(x => x.LeaveType == "استحقاقی" && x.IsAccepted) + .Where(x => + (x.StartLeave <= startDate && x.EndLeave >= startDate) || + (x.StartLeave <= endDate && x.EndLeave >= endDate) || + (x.StartLeave >= startDate && x.StartLeave <= endDate) || + (x.EndLeave >= startDate && x.EndLeave <= endDate)).ToList(); + //مرخصی استفاده شده در این ماه + double usedLeavesChekout = 0; + if (checkoutLeaveList.Count > 0) + { + foreach (var item in checkoutLeaveList) + { + var start = new DateTime(); + var end = new DateTime(); + start = item.StartLeave < startDate ? startDate : item.StartLeave; + end = item.EndLeave > endDate ? endDate : item.EndLeave; + + if (item.PaidLeaveType == "روزانه" && !item.HasShiftDuration) + { + var leaveSpan = (end - start).TotalDays + 1; + var usedLeave = leaveSpan * hoursePerDay; + usedLeavesChekout += usedLeave; + } + else if (item.PaidLeaveType == "روزانه" && item.HasShiftDuration) + { + var usedLeave = (item.ShiftDuration.TotalMinutes) / 60; + usedLeavesChekout += usedLeave; + } + else + { + var leavingHourses = TimeSpan.Parse(item.LeaveHourses); + var usedLeave = (leavingHourses.TotalMinutes) / 60; + usedLeavesChekout += usedLeave; + } + + } + } + + double creditLeaves = 0; + double periodOfAbsence = 0; + if (checkoutCanToLeave >= usedLeavesChekout) //اگر طلب مرخصی داشت + { + creditLeaves = checkoutCanToLeave - usedLeavesChekout; + periodOfAbsence = 0; + + } + else + { + + + periodOfAbsence = usedLeavesChekout - checkoutCanToLeave; + + creditLeaves = 0; + } + + + var result = new ContractsCanToLeave() + { + + CanToLeave = creditLeaves, + PeriodOfAbsence = periodOfAbsence, + + }; + return result; + + } + + public async Task HolidayGregorian(DateTime gregorianDate) + { + var result = new HolidayApiVewModel(); + var gregorianStr = gregorianDate.ToString("MM/dd/yyyy"); + var month = gregorianStr.Substring(0, 2); + var day = gregorianStr.Substring(3, 2); + var year = gregorianStr.Substring(6, 4); + + var client = new HttpClient(); + var request = new HttpRequestMessage(HttpMethod.Get, $"https://holidayapi.ir/gregorian/{year}/{month}/{day}"); + request.Headers.Add("Cookie", "XSRF-TOKEN=eyJpdiI6IjFrOTRrM0tFeVh5ZHFnNis3K0xZQVE9PSIsInZhbHVlIjoidlQ5TEg3c2hGYTVYeU0zRU9ha2NWTWpnYWRLMWxWSG9NWm5JYXhiaC8xRzliSlpmZGp2TlExd0VtL0JIL2JYWXNnVEREeTZNNDd1VHRQdjlQajFCNUxHZkwvdExWb3hCc25IMndUdEVwdDJ4T3drbkdhRTdscVoxNUxDeVNNOTciLCJtYWMiOiJkNjY4NGNkZWI3NGNkMzA1YWUyMjQxNGU5MWYwMjVlMGE1OGQzMjhkYTQ1NGE5NzcyNjA3NGNhM2RjOGI2NDVmIiwidGFnIjoiIn0%3D; holidayapi_session=eyJpdiI6IkdxRGx1NUZsRnlJazUwS3JhRUgrMFE9PSIsInZhbHVlIjoiclZ2U0hQZTErZ3duQmZXWmV6WjlvR1JTWEpwZHRSR0p2YytFOENUYzg0R1JBOGZHcWI1TzhFTEtIRjdXQy9Qa0doY0RXR2pBRGZTOEN3cGJsVEtTcC9uSkliOWZ6U3ZJRkFvY3N0TytWSGJwNWt2dWhKTmI0bnJOb09Ic3NJd0siLCJtYWMiOiI2MTk4YzNjNTdmODJmNDVkZTM5YWE2OTcyNGJiYzI1MTM1ZTViYTZlZTVhZTNhMzNmY2U5NzM1OThiOTg5YThlIiwidGFnIjoiIn0%3D"); + var response = await client.SendAsync(request); + var success = response.IsSuccessStatusCode; + + if (success) + { + var res = await response.Content.ReadAsStringAsync(); + var convertedRes = JsonConvert.DeserializeObject(res); + result.IsHoliday = convertedRes.IsHoliday; + result.IsSuccess = true; + } + + return result; + } + + public async Task HolidayShamsi(string shamsiDate) + { + var result = new HolidayApiVewModel(); + var year = shamsiDate.Substring(0, 4); + var month = shamsiDate.Substring(5, 2); + var day = shamsiDate.Substring(8, 2); + + + var client = new HttpClient(); + var request = new HttpRequestMessage(HttpMethod.Get, $"https://holidayapi.ir/gregorian/{year}/{month}/{day}"); + request.Headers.Add("Cookie", "XSRF-TOKEN=eyJpdiI6IjFrOTRrM0tFeVh5ZHFnNis3K0xZQVE9PSIsInZhbHVlIjoidlQ5TEg3c2hGYTVYeU0zRU9ha2NWTWpnYWRLMWxWSG9NWm5JYXhiaC8xRzliSlpmZGp2TlExd0VtL0JIL2JYWXNnVEREeTZNNDd1VHRQdjlQajFCNUxHZkwvdExWb3hCc25IMndUdEVwdDJ4T3drbkdhRTdscVoxNUxDeVNNOTciLCJtYWMiOiJkNjY4NGNkZWI3NGNkMzA1YWUyMjQxNGU5MWYwMjVlMGE1OGQzMjhkYTQ1NGE5NzcyNjA3NGNhM2RjOGI2NDVmIiwidGFnIjoiIn0%3D; holidayapi_session=eyJpdiI6IkdxRGx1NUZsRnlJazUwS3JhRUgrMFE9PSIsInZhbHVlIjoiclZ2U0hQZTErZ3duQmZXWmV6WjlvR1JTWEpwZHRSR0p2YytFOENUYzg0R1JBOGZHcWI1TzhFTEtIRjdXQy9Qa0doY0RXR2pBRGZTOEN3cGJsVEtTcC9uSkliOWZ6U3ZJRkFvY3N0TytWSGJwNWt2dWhKTmI0bnJOb09Ic3NJd0siLCJtYWMiOiI2MTk4YzNjNTdmODJmNDVkZTM5YWE2OTcyNGJiYzI1MTM1ZTViYTZlZTVhZTNhMzNmY2U5NzM1OThiOTg5YThlIiwidGFnIjoiIn0%3D"); + var response = await client.SendAsync(request); + var success = response.IsSuccessStatusCode; + + if (success) + { + var res = await response.Content.ReadAsStringAsync(); + var convertedRes = JsonConvert.DeserializeObject(res); + result.IsHoliday = convertedRes.IsHoliday; + result.IsSuccess = true; + } + + return result; + } + + #endregion + + //عیدی + #region Bunoses + + public BunosesAndYearsPayStatus Bunoses(string startDateFa, DateTime leftWorkDate, DateTime separationStartDate, DateTime separationEndDate, double daylyWage, string bonusesOptions, + bool hasleft, DateTime startWorkDate, DateTime contractStart, DateTime contractEnd, long workshopId, + long employeeId, bool isOldContract) + { + BunosesAndYearsPayStatus finalResult = new BunosesAndYearsPayStatus(); + double result = 0; + // ماه فیش آخر + var checkoutMonth = startDateFa.Substring(5, 2); + var start1403 = new DateTime(2024, 3, 20); + switch (bonusesOptions) + { + case "OnCheckoutOfMonth": + + var totalCheckoutDays = (separationEndDate - separationStartDate).TotalDays + 1; + finalResult.Bunoses = ((daylyWage * 60) / 365) * totalCheckoutDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalCheckoutDays); + + break; + case "OnEndOfYear"://درپایان سال + + if (isOldContract && contractEnd < start1403) + { + var totaltDays = (separationEndDate - separationStartDate).TotalDays + 1; + finalResult.Bunoses = ((daylyWage * 60) / 365) * totaltDays; + finalResult.TotalDayCompute = Convert.ToInt32(totaltDays); + } + else if (isOldContract && contractEnd > start1403) + { + + + if ((hasleft && leftWorkDate <= separationEndDate) || checkoutMonth == "12") + { + + //بدست آوردن اولین روز سال + string startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; + DateTime startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); + + // اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود + DateTime startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr; + + + #region NewCompute + + //شروع دوره + string st = startComputeDay.ToFarsi(); + int syear = Convert.ToInt32(st.Substring(0, 4)); + int smonth = Convert.ToInt32(st.Substring(5, 2)); + PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1); + PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1); + //پایان فیش حقوقی آخر + PersianDateTime endCheckout = separationEndDate.ToPersianDateTime(); + if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month) + { + var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; + finalResult.Bunoses = ((daylyWage * 60) / 365) * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + } + else + { + var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && + x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable(); + //پایان دوره + PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime(); + List nullDateList = new List(); + double sumOfOldBonuses = 0; + var oldTotalDays = 0; + for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1)) + { + var searchStart = ($"{startDate}").ToGeorgianDateTime(); + var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime(); + var foundCheckout = checkoutList.FirstOrDefault(x => + x.ContractStart >= searchStart && x.ContractEnd <= searchEnd); + if (foundCheckout == null) + { + nullDateList.Add(new BunosesAndYearsPayStatus() + { + ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart, + ContractEnd = searchEnd + }); + finalResult.NotCompleted = true; + } + else + { + double foundMonthlySalary = foundCheckout.MonthlySalary + foundCheckout.BaseYearsPay; + int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays); + double foundDayliWage = foundMonthlySalary / foundTotaldays; + double foundYearsPay = ((foundDayliWage * 60) / 365) * foundTotaldays; + oldTotalDays += foundTotaldays; + sumOfOldBonuses += foundYearsPay; + } + + } + + var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; + double lastMonthBonuses = ((daylyWage * 60) / 365) * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays + oldTotalDays); + finalResult.Bunoses = lastMonthBonuses + sumOfOldBonuses; + finalResult.BunosesStatusList = nullDateList; + } + + #endregion + + + } + } + else if (!isOldContract) + { + if ((hasleft && leftWorkDate <= separationEndDate) || checkoutMonth == "12") + { + //بدست آوردن اولین روز سال + var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; + var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); + var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr; + #region NewCompute + + //شروع دوره + string st = startComputeDay.ToFarsi(); + int syear = Convert.ToInt32(st.Substring(0, 4)); + int smonth = Convert.ToInt32(st.Substring(5, 2)); + PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1); + PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1); + //پایان فیش حقوقی آخر + PersianDateTime endCheckout = separationEndDate.ToPersianDateTime(); + if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month) + { + var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; + finalResult.Bunoses = ((daylyWage * 60) / 365) * totalDays; + } + else + { + var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && + x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable(); + //پایان دوره + PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime(); + List nullDateList = new List(); + double sumOfOldBonuses = 0; + var oldTotalDays = 0; + for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1)) + { + var searchStart = ($"{startDate}").ToGeorgianDateTime(); + var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime(); + var foundCheckout = checkoutList.FirstOrDefault(x => + x.ContractStart >= searchStart && x.ContractEnd <= searchEnd); + if (foundCheckout == null) + { + nullDateList.Add(new BunosesAndYearsPayStatus() + { + ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart, + ContractEnd = searchEnd + }); + finalResult.NotCompleted = true; + } + else + { + double foundMonthlySalary = foundCheckout.MonthlySalary + foundCheckout.BaseYearsPay; + int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays); + double foundDayliWage = foundMonthlySalary / foundTotaldays; + double foundYearsPay = ((foundDayliWage * 60) / 365) * foundTotaldays; + oldTotalDays += foundTotaldays; + sumOfOldBonuses += foundYearsPay; + } + + } + + var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; + double lastMonthBonuses = ((daylyWage * 60) / 365) * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays + oldTotalDays); + finalResult.Bunoses = lastMonthBonuses + sumOfOldBonuses; + finalResult.BunosesStatusList = nullDateList; + } + + #endregion + } + } + + + break; + case "OnEndOfContract"://در پایان قرارداد + + if (isOldContract && contractEnd < start1403) + { + var totaltDays = (separationEndDate - separationStartDate).TotalDays + 1; + finalResult.Bunoses = ((daylyWage * 60) / 365) * totaltDays; + } + else if (isOldContract && contractEnd > start1403) + { + if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd) + { + + //بدست آوردن اولین روز سال + //var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; + //var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); + + var startComputeDay = contractStart; + //var totalDays = (separationEndDate - contractStart).TotalDays + 1; + //result = (daylyWage * 60) / 365 * totalDays; + + #region NewCompute + + //شروع دوره + string st = startComputeDay.ToFarsi(); + int syear = Convert.ToInt32(st.Substring(0, 4)); + int smonth = Convert.ToInt32(st.Substring(5, 2)); + PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1); + PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1); + //پایان فیش حقوقی آخر + PersianDateTime endCheckout = separationEndDate.ToPersianDateTime(); + if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month) + { + var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; + finalResult.Bunoses = ((daylyWage * 60) / 365) * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays); + } + else + { + var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && + x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable(); + //پایان دوره + PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime(); + List nullDateList = new List(); + double sumOfOldBonuses = 0; + var oldTotalDays = 0; + for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1)) + { + var searchStart = ($"{startDate}").ToGeorgianDateTime(); + var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime(); + var foundCheckout = checkoutList.FirstOrDefault(x => + x.ContractStart >= searchStart && x.ContractEnd <= searchEnd); + if (foundCheckout == null) + { + nullDateList.Add(new BunosesAndYearsPayStatus() + { + ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart, + ContractEnd = searchEnd + }); + finalResult.NotCompleted = true; + } + else + { + double foundMonthlySalary = foundCheckout.MonthlySalary + foundCheckout.BaseYearsPay; + int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays); + double foundDayliWage = foundMonthlySalary / foundTotaldays; + double foundBonuses = ((foundDayliWage * 60) / 365) * foundTotaldays; + oldTotalDays += foundTotaldays; + sumOfOldBonuses += foundBonuses; + } + + } + + var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; + double lastMonthBonuses = ((daylyWage * 60) / 365) * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays + oldTotalDays); + finalResult.Bunoses = lastMonthBonuses + sumOfOldBonuses; + finalResult.BunosesStatusList = nullDateList; + } + + #endregion + } + } + else if (!isOldContract) + { + if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd) + { + var startComputeDay = contractStart; + //var totalDays = (separationEndDate - contractStart).TotalDays + 1; + // finalResult.Bunoses = (daylyWage * 60) / 365 * totalDays; + + #region NewCompute + + //شروع دوره + string st = startComputeDay.ToFarsi(); + int syear = Convert.ToInt32(st.Substring(0, 4)); + int smonth = Convert.ToInt32(st.Substring(5, 2)); + PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1); + PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1); + //پایان فیش حقوقی آخر + PersianDateTime endCheckout = separationEndDate.ToPersianDateTime(); + if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month) + { + var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; + finalResult.Bunoses = ((daylyWage * 60) / 365) * totalDays; + } + else + { + var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && + x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable(); + //پایان دوره + PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime(); + List nullDateList = new List(); + double sumOfOldBonuses = 0; + var oldTotalDays = 0; + for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1)) + { + var searchStart = ($"{startDate}").ToGeorgianDateTime(); + var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime(); + var foundCheckout = checkoutList.FirstOrDefault(x => + x.ContractStart >= searchStart && x.ContractEnd <= searchEnd); + if (foundCheckout == null) + { + nullDateList.Add(new BunosesAndYearsPayStatus() + { + ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart, + ContractEnd = searchEnd + }); + finalResult.NotCompleted = true; + } + else + { + double foundMonthlySalary = foundCheckout.MonthlySalary + foundCheckout.BaseYearsPay; + int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays); + double foundDayliWage = foundMonthlySalary / foundTotaldays; + double foundBonuses = ((foundDayliWage * 60) / 365) * foundTotaldays; + oldTotalDays += foundTotaldays; + sumOfOldBonuses += foundBonuses; + } + + } + + var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; + double lastMonthBonuses = ((daylyWage * 60) / 365) * totalDays; + finalResult.TotalDayCompute = Convert.ToInt32(totalDays + oldTotalDays); + finalResult.Bunoses = lastMonthBonuses + sumOfOldBonuses; + finalResult.BunosesStatusList = nullDateList; + } + + #endregion + } + } + + break; + //case "EndOfContract1402LeftWork1403": //پایان قرارداد قبل 403 پایان همکاری بعد 403 + + // if (contractStart >= start1403 && contractEnd > start1403)// بعد از 1403 + // { + // if (hasleft && leftWorkDate <= separationEndDate) + // { + // //بدست آوردن اولین روز سال + // var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; + // var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); + + // // اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود + // var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr; + // var totalDays = (separationEndDate - startComputeDay).TotalDays + 1; + // result = (daylyWage * 60) / 365 * totalDays; + // } + // } + // else if (contractStart < start1403)// قبل از 1403 + // { + // var totalDays = (separationEndDate - separationStartDate).TotalDays + 1; + // finalResult.Bunoses = (daylyWage * 60) / 365 * totalDays; + + // //if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd || checkoutMonth == "12") + // //{ + // // //بدست آوردن اولین روز سال + // // var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01"; + // // var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime(); + + // // var startComputeDay = contractStart >= startDayOfYearGr ? contractStart : startDayOfYearGr; + + // //} + // } + // break; + + default: + finalResult.Bunoses = 0; + finalResult.TotalDayCompute = 0; + break; + } + + return finalResult; + } + + + + #endregion + + + #region Insurance + + public InsuranceYearlySalaryModel GetInsuranceItems(DateTime startDate, DateTime endDate, string year) + { + var query = _context.YearlySalaries + .Where(x => x.StartDate <= startDate && x.EndDate >= endDate && x.Year == year) + .Include(x => x.YearlySalaryItemsList) + .Select(x => new InsuranceYearlySalaryModel + { + DayliWage = x.YearlySalaryItemsList.FirstOrDefault(item => item.ItemName == "مزد روزانه").ItemValue, + ConsumableItems = x.YearlySalaryItemsList.FirstOrDefault(item => item.ItemName == "کمک هزینه اقلام").ItemValue, + HousingAllowance = x.YearlySalaryItemsList.FirstOrDefault(item => item.ItemName == "کمک هزینه مسکن").ItemValue, + MarriedAllowance = x.YearlySalaryItemsList.Any(item => item.ItemName == "حق تاهل") ? x.YearlySalaryItemsList.FirstOrDefault(item => item.ItemName == "حق تاهل").ItemValue : 0, + + }).FirstOrDefault(); + + return query; + } + #endregion + + + private double GetRoundValue(double value) + { + string strValue = value.ToString(); + if (strValue.IndexOf('.') > -1) + { + + + string a = strValue.Substring(strValue.IndexOf('.') + 1, 1); + if (int.Parse(a) > 3) + { + return (Math.Round(value, MidpointRounding.ToPositiveInfinity)); + } + else + { + return (Math.Round(value, MidpointRounding.ToNegativeInfinity)); + } + } + + return value; + } } diff --git a/ServiceHost/Areas/Admin/Pages/Company/Contracts/DailyWageAndBaseYearReport.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Contracts/DailyWageAndBaseYearReport.cshtml new file mode 100644 index 00000000..a8fd1262 --- /dev/null +++ b/ServiceHost/Areas/Admin/Pages/Company/Contracts/DailyWageAndBaseYearReport.cshtml @@ -0,0 +1,375 @@ +@using _0_Framework.Application +@model CompanyManagment.App.Contracts.Contract.ContractDailyWageAndBaseYearReport + +@{ + +} + +
+ +
+ +
+
+
+
+
نام پرسنل
+
@Model.EmployeeName
+
+
+
+
+ + + +
+
+
+
+
نام کارگاه
+
@Model.WorkshopName
+
+
+
+ +
+
+ + + @if (Model.OldComputeMethod) + { +
+
+ +
+ + + + +
+
+
این قراداد با روش قدیم محاسبه مزد ایجاد شده است
+ +
+
+ +
+ +
+
+ +
+
+ } + else + { + @if (Model.Contradiction) + { +
+
+ +
+ + + + +
+
+
+ +

مقادیر محاسبه شده در این گزارش با مقادیر ذخیره شده در قراداد مغایرت دارد

+

احتمالا مواردی مانند شروع بکار/ترک کار پرسنل تغییر کرده است

+ +
+ +
+
+ +
+ +
+
+ } +
+
+ +
+ + +
محاسبه پایه سنوات
+ + @if (Model.BaseYearDataViewModel.BaseYearResult > 0) + { + @foreach (var item in Model.BaseYearDataViewModel.BaseYearDataList) + { + if (item.HasStartWork) + { +
+
+
@item.BaseYearPayDay
+
شروع بکار
+
+
+ } + else if (item.HasLeftWork) + { +
+
+
@item.BaseYearPayDay
+
ترک کار
+
+
+ } + else + { + if (item.BaseYearPayDay == "-") + { +
+
+
+ + @item.BaseYearPayDayGr.ToFarsi() + فقط ارتقاء +
+
@item.BaseYear.ToMoney()
+
+
+ } + else + { +
+
+
@item.BaseYearPayDay
+
@item.BaseYear.ToMoney()
+
+
+ } + } + } + } + else + { +
+
+
+
پایه سنوات ندارد
+
+
+
+ } + +
+
+
+ +
+ + +
محاسبه مزد روزانه
+ + + @{ + if (@Model.DailyWageType == "UpgradedDailyWage") + { +
+
+
بازه ارتقاء
+
ارتقاء مزد
+ +
+ +
+ + @foreach (var dailyWage in @Model.UpgradeManualDailyWageLists) + { +
+
+
@dailyWage.StartEndDate
+
@dailyWage.DailyWage
+
+
+ } + + } + else if (@Model.DailyWageType == "ManualDailyWage") + { + +
+
+
مزد دلخواه
+
@Model.DailySalaryUnAffected
+ +
+
+ + } + else + { +
+
+
مزد سالانه
+
@Model.DailySalaryUnAffected
+ +
+
+ + } + } + + +
+
+
+ +
+
+ +
+ + +
نتایج محاسبه پایه سنوات
+
+
+
بدون تاثیر ساعت کار
+
@Model.BaseYearDataViewModel.BaseYearResult.ToMoney()
+
+
+
+
+
متاثر از ساعت کار
+
@Model.BaseYearAffected
+
+
+ +
+
+
+ +
+ + +
نتایج محاسبه مزد روزانه
+ +
+
+
بدون تاثیر ساعت کار
+
@Model.DailySalaryUnAffected
+
+
+ +
+
+
متاثر از ساعت کار
+
@Model.DailySalaryAffected
+
+
+
+
+
+ +
+
+ +
+ + +
دستمزد روزانه تجمیعی
+ + +
+
+
@Model.ContractDate
+
@Model.DailyWage
+
+
+ +
+ +
+ +
+ +
+
+ } + +
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml index 284170cf..7b890d77 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml @@ -47,6 +47,13 @@ position: relative; } + .dailyWageReportIcon { + font-size: 20px !important; + top: 2px !important; + position: relative; + padding :6px !important; + } + .ionRad { border-radius: 8px !important; padding: 0px 7px 0px 7px !important; @@ -797,9 +804,13 @@ - + + +
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml.cs index 0c0a6c1a..afbb1a98 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml.cs @@ -135,6 +135,69 @@ public class IndexModel : PageModel employeeFullName = searchModel.EmployeeName; } + /// + /// نحوه محاسبه پایه سنوات و ارتقاء مزد رو نمایش میده + /// + /// + /// + public async Task OnGetDailyWageAndBaseYearReport(long contractId) + { + var res = new ContractDailyWageAndBaseYearReport(); + var contract = _contractApplication.GetDetails(contractId); + var employeeName = _employeeApplication.GetDetails(contract.EmployeeId).EmployeeFullName; + var workshopName = _workshopApplication.GetWorkshopInfo(contract.WorkshopIds).WorkshopFullName; + var baseYearResult =await _yearlySalaryApplication.BaseYearComputeByContractId(contractId); + + if (contract.DailySalaryUnAffected == 0 || string.IsNullOrWhiteSpace(contract.DailyWageType)) + { + res = new ContractDailyWageAndBaseYearReport() + { + + EmployeeName = employeeName, + WorkshopName = workshopName, + Contradiction = false, + OldComputeMethod = true, + + + }; + + return Partial("DailyWageAndBaseYearReport", res); + } + + var dailyWageListResult = new List(); + bool contradiction = false; + if (contract.DailyWageType == "UpgradedDailyWage") + { + var upgradeDailyWageResult = _contractRepository.GetManualDailWageList(contract.WorkshopIds, + contract.EmployeeId, contract.ContractStartGr).GetAwaiter().GetResult(); + dailyWageListResult = upgradeDailyWageResult.UpgradeManualDailyWageLists; + + //اگر مغایرت داشت + if (contract.DailySalaryUnAffected.ToMoney().MoneyToDouble() != upgradeDailyWageResult.DailyWage.ToMoney().MoneyToDouble() + || baseYearResult.BaseYearResult.ToMoney().MoneyToDouble() != contract.BaseYearUnAffected.ToMoney().MoneyToDouble()) + contradiction = true; + } + + + + + res = new ContractDailyWageAndBaseYearReport() + { + BaseYearDataViewModel = baseYearResult, + BaseYearAffected = contract.BaseYearAffected > 0 ? contract.BaseYearAffected.ToMoney() : "0", + DailySalaryAffected = contract.DailySalaryAffected > 0 ? contract.DailySalaryAffected.ToMoney() : "0", + DailySalaryUnAffected = contract.DailySalaryUnAffected > 0 ? contract.DailySalaryUnAffected.ToMoney() : "0", + DailyWage = contract.DayliWage, + ContractDate = $"تا تاریخ {contract.ContarctStart.FindeEndOfMonth()}", + DailyWageType = contract.DailyWageType, + UpgradeManualDailyWageLists = dailyWageListResult, + EmployeeName = employeeName, + WorkshopName = workshopName, + Contradiction = contradiction, + + }; + return Partial("DailyWageAndBaseYearReport", res); + } public async Task OnGetPersonelMainList(string searchEmployee) { diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs index a8bb4f22..fb4af99a 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs @@ -724,12 +724,25 @@ public class AutoExtensionModel : PageModel foreach (var item in createContarctList) { #region NewManualDailyWage - + double normaldailyWage = item.NormalDailyWage.MoneyToDouble(); double dailySalaryUnAffected = item.DailySalaryUnAffectedStr.MoneyToDouble(); item.HasManualDailyWage = dailySalaryUnAffected > normaldailyWage; item.DailySalaryUnAffected = dailySalaryUnAffected; + + switch (item.DailyWageType) + { + case "1": item.DailyWageType = "NormalDailyWage"; + break; + case "2": + item.DailyWageType = item.HasManualDailyWage == true ? "UpgradedDailyWage" : "NormalDailyWage"; + break; + case "3": + item.DailyWageType = "ManualDailyWage"; + break; + + } #endregion var result = diff --git a/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js index 1e98d3fc..89d7583e 100644 --- a/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js +++ b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js @@ -573,6 +573,7 @@ $('#startProcess').on('click', createContractModel.NormalDailyWage = $(this).find("input[name=normalDailyWage]").val(); createContractModel.DailySalaryUnAffectedStr = $(this).find("input[name=dailySalaryUnAffectedStr]").val(); + createContractModel.DailyWageType = $(this).find("select[name=dailyWageType]").val(); if (createContractModel.DailySalaryUnAffectedStr == "0") { $(this).find("input[name=dailySalaryUnAffectedStr]").addClass("erroreManual"); startCreate = false;