From 5cd30e5910d4dc5cc290080abba1732d0516b6d7 Mon Sep 17 00:00:00 2001 From: gozareshgir Date: Mon, 19 Jan 2026 19:12:48 +0330 Subject: [PATCH 1/7] Checkout Print Api init --- 0_Framework/Application/Tools.cs | 12 + .../CheckoutAgg/ICheckoutRepository.cs | 9 + .../Checkout/Dto/CheckoutPrintDto.cs | 231 ++++++++++++++++++ .../Checkout/ICheckoutApplication.cs | 7 + .../CheckoutApplication.cs | 6 + .../Repository/CheckoutRepository.cs | 141 +++++++++++ .../Checkouts/CheckoutPrintAll.cshtml.cs | 9 +- 7 files changed, 412 insertions(+), 3 deletions(-) create mode 100644 CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs diff --git a/0_Framework/Application/Tools.cs b/0_Framework/Application/Tools.cs index 23afe3cb..db65625e 100644 --- a/0_Framework/Application/Tools.cs +++ b/0_Framework/Application/Tools.cs @@ -445,6 +445,18 @@ public static class Tools return myMoney.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir")); } + + /// + /// اگر مبلغ صفر باشد خط تیره برمیگرداند + /// + /// + /// + public static string ToMoneyCheckZero(this double myMoney) + { + if (myMoney == 0) + return "-"; + return myMoney.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir")); + } public static string ToMoneyNullable(this double? myMoney) { diff --git a/Company.Domain/CheckoutAgg/ICheckoutRepository.cs b/Company.Domain/CheckoutAgg/ICheckoutRepository.cs index daa2c35d..c1bba732 100644 --- a/Company.Domain/CheckoutAgg/ICheckoutRepository.cs +++ b/Company.Domain/CheckoutAgg/ICheckoutRepository.cs @@ -92,5 +92,14 @@ public interface ICheckoutRepository : IRepository /// Task> GetList(CheckoutSearchModelDto searchModel); + + /// + /// پرینت فیش حقوقی + /// Api + /// + /// + /// + Task> CheckoutPrint(List ids); + #endregion } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs b/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs new file mode 100644 index 00000000..a007e448 --- /dev/null +++ b/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs @@ -0,0 +1,231 @@ +using System; +using CompanyManagment.App.Contracts.Loan; +using CompanyManagment.App.Contracts.RollCall; +using CompanyManagment.App.Contracts.SalaryAid; +using System.Collections.Generic; + +namespace CompanyManagment.App.Contracts.Checkout.Dto; + +public class CheckoutPrintDto +{ + // هدر فیش + // اطلاعات هویتی + // اطلاعات کارگاه + #region Header + public long Id { get; set; } + + /// + /// نام پرسنل + /// + public string EmployeeFullName { get; set; } + + /// + /// نام پدر + /// + public string FathersName { get; set; } + + /// + /// کد ملی + /// + public string NationalCode { get; set; } + + /// + /// تاریخ تولد + /// + public string DateOfBirth { get; set; } + + /// + /// نام کارگاه + /// + public string WorkshopName { get; set; } + + /// + /// شماره قراداد + /// + public string ContractNo { get; set; } + + /// + /// ماه + /// + public string Month { get; set; } + + /// + /// سال + /// + public string Year { get; set; } + + /// + /// لیست کارفرما + /// + public List EmployersLists { get; set; } + + /// + /// آیا کارقرما حقوقی است + /// + public bool EmployerIslegal { get; set; } + #endregion + + //جدول مطالبات و کسورات + #region PaymentAndDeductionTable + /// + /// مطالبات + /// + public List PaymentList { get; set; } + + /// + /// کسورات + /// + public List DeductionList { get; set; } + + /// + /// جمع مطالبات + /// + public string TotalPayment { get; set; } + + /// + /// جمع کسورات + /// + public string TotalDeductions { get; set; } + + + /// + /// مبلغ قابل پرداخت + /// + public string TotalClaims { get; set; } + #endregion + + //لیست ورود و خروج پرسنل + //اطلاعات ساعات کار و موظقی + #region RollCallData + /// + /// لیست حضورغیاب + /// + public List MonthlyRollCall { get; set; } + + /// + /// دیتای جدول حضورغیاب + /// + public CheckoutRollCallViewModel CheckoutRollCall { get; set; } + + #endregion + + //اقساط + #region LoneAndInstallmentData + + public List InstallmentViewModels { get; set; } + public List SalaryAidViewModels { get; set; } + + #endregion +} + +/// +/// کسورات +/// +public class PaymentData +{ + /// + /// حقوق و مزد + /// + public string MonthlySalary { get; set; } + + /// + /// پایه سنوات + /// + public string BaseYearsPay { get; set; } + + /// + /// کمک هزینه اقلام مصرفی + /// + public string ConsumableItems { get; set; } + + /// + /// کمک هزینه مسکن + /// + public string HousingAllowance { get; set; } + + /// + /// فوق العاده اضافه کاری + /// + public string OvertimePay { get; set; } + + /// + /// فوق العاده شبکاری + /// + public string NightworkPay { get; set; } + + /// + /// فوق العاده جمعه کاری + /// + public string FridayPay { get; set; } + + /// + /// فوق العاده ماموریت + /// + public string MissionPay { get; set; } + + /// + /// فوق العاده نوبت کاری + /// + public string ShiftPay { get; set; } + + /// + /// کمک هزینه عائله مندی + /// + public string FamilyAllowance { get; set; } + + /// + /// حق تاهل + /// + public string MarriedAllowance { get; set; } + +} + +/// +/// کسورات +/// +public class DeductionData +{ + +} + +public class PaymentAndDeductionList +{ + public int RowNumber { get; set; } + /// + /// عنوان + /// + public string Title { get; set; } + + /// + /// مقدار/روز/ساعت + /// + public string Value { get; set; } + + /// + /// مبلغ + /// + public string Amount { get; set; } +} + + +/// +/// لیست کارفرما +/// +public class CheckoutEmployersList +{ + public bool IsLegal { get; set; } + public string EmployerFullName { get; set; } +} + + + + +public class CheckoutGetData : CheckoutPrintDto +{ + public DateTime ContractStart { get; set; } + + public int PersonnelCode { get; set; } + + public long WorkshopId { get; set; } + public long EmployeeId { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs b/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs index cdc831af..a3e75d18 100644 --- a/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs +++ b/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs @@ -81,5 +81,12 @@ public interface ICheckoutApplication /// Task GetRotatingShiftApi(long id); + /// + /// پرینت فیش حقوقی + /// Api + /// + /// + /// + Task> CheckoutPrint(List ids); #endregion } \ No newline at end of file diff --git a/CompanyManagment.Application/CheckoutApplication.cs b/CompanyManagment.Application/CheckoutApplication.cs index 1681fe34..30263813 100644 --- a/CompanyManagment.Application/CheckoutApplication.cs +++ b/CompanyManagment.Application/CheckoutApplication.cs @@ -772,5 +772,11 @@ public class CheckoutApplication : ICheckoutApplication RotatingShiftList = items }; } + + public Task> CheckoutPrint(List ids) + { + return _checkoutRepository.CheckoutPrint(ids); + } + #endregion } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs index 1e56389a..637dcf1e 100644 --- a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs @@ -3060,5 +3060,146 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos }; } + + + public async Task> CheckoutPrint(List ids) + { + if (ids.Count == 0) + return new List(); + + var watch = new Stopwatch(); + watch.Start(); + + var getCheckouts = await _context.CheckoutSet.Where(x => ids.Contains(x.id)) + .AsNoTracking() + .ToListAsync(); + + var employers = await _context.WorkshopEmployers + .Where(x => x.WorkshopId == getCheckouts.First().WorkshopId).AsNoTracking() + .Select(x => new CheckoutEmployersList + { + IsLegal = x.Employer.IsLegal == "true", + EmployerFullName = x.Employer.FullName + }).ToListAsync(); + + var employees = (from x in _context.Employees.Where(x => getCheckouts.Select(ch => ch.EmployeeId).Contains(x.id)) + select new + { + EmployeeId = x.id, + MaritalStatus = x.MaritalStatus + } + ).AsNoTracking(); + var workshop = await _context.Workshops.AsNoTracking().FirstAsync(x => x.id == getCheckouts.First().WorkshopId); + + bool isLegal = employers.Any(x => x.IsLegal); + + var result = getCheckouts.Select(x => + { + + var overTimeWorkValue = x.OvertimePay > 0 ? x.OverTimeWorkValue : "-"; + var overNightWorkValue = x.OvertimePay > 0 ? x.OverNightWorkValue : "-"; + var fridayWorkValue = x.FridayPay > 0 ? x.FridayWorkValue : "-"; + var maritalStatus = employees.First(e => e.EmployeeId == x.EmployeeId).MaritalStatus; + var rewardPay = x.RewardPay == null ? "-" : x.RewardPay.ToMoneyNullable(); + var rotatingShiftValue = x.ShiftPay > 0 ? x.RotatingShiftValue : "-"; + var totalDeduction = "-"; + var totalPayment = "-"; + var totalClaims = "-"; + if (!workshop.TotalPaymentHide) + { + totalDeduction = x.TotalDeductions; + totalPayment = x.TotalPayment.ToMoneyCheckZero(); + totalClaims = x.TotalClaims; + } + + return new CheckoutPrintDto() + { + Id = x.id, + + // هدر فیش + // اطلاعات هویتی + // اطلاعات کارگاه + #region Header + + EmployeeFullName = x.EmployeeFullName, + FathersName = x.FathersName, + NationalCode = x.NationalCode, + DateOfBirth = x.DateOfBirth, + WorkshopName = x.WorkshopName, + ContractNo = x.ContractNo, + Month = x.Month, + Year = x.Year, + EmployersLists = employers, + EmployerIslegal = isLegal, + #endregion + + //جدول مطالبات و کسورات + + #region PaymentAndDeductionTable + + //مطالبات + PaymentList = new List + { + new PaymentAndDeductionList() + {RowNumber = 1, Title = "حقوق و مزد", Value = $"{x.SumOfWorkingDays}", Amount = x.MonthlySalary.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 2, Title = "پایه سنوات", Value = "-", Amount = x.BaseYearsPay.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 3, Title = "کمک هزینه اقلام مصرفی خانوار", Value = "-", Amount = x.ConsumableItems.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 4, Title = "کمک هزینه مسکن", Value = "-", Amount = x.HousingAllowance.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 5, Title = "فوق العاده اضافه کاری", Value = overTimeWorkValue, Amount = x.OvertimePay.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 6, Title = "فوق العاده شب کاری", Value = overNightWorkValue, Amount = x.NightworkPay.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 7, Title = "فوق العاده جمعه کاری", Value = fridayWorkValue, Amount = x.FridayPay.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 8, Title = "فوق العاده ماموریت", Value = "-", Amount = "-",}, + new PaymentAndDeductionList() + {RowNumber = 9, Title = "فوق العاده نوبت کاری", Value = rotatingShiftValue, Amount = x.ShiftPay.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 10, Title = "کمک هزینه عائله مندی", Value = "-", Amount = x.FamilyAllowance.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 11, Title = "حق تاهل", Value = maritalStatus, Amount = x.MarriedAllowance.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 12, Title = "پاداش", Value = "-", Amount = rewardPay,}, + new PaymentAndDeductionList() + {RowNumber = 13, Title = "عیدی و پاداش", Value = "-", Amount = x.BonusesPay.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 14, Title = "سنوات", Value = "-", Amount = x.YearsPay.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 15, Title = "مزد مرخصی", Value = "-", Amount = x.LeavePay.ToMoneyCheckZero(),}, + }, + + //کسورات + DeductionList = new List + { + new PaymentAndDeductionList() + {RowNumber = 1, Title = "حق بیمه سهم کارگر", Value = "-", Amount = x.InsuranceDeduction.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 2, Title = "مالیات بر حقوق", Value = "-", Amount = x.TaxDeducation.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 3, Title = "قسط تسهیلات", Value = "-", Amount = x.InstallmentDeduction.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 4, Title = "مساعده", Value = "-", Amount = x.SalaryAidDeduction.ToMoneyCheckZero(),}, + new PaymentAndDeductionList() + {RowNumber = 5, Title = "غیبت", Value = "-", Amount = "-",}, + }, + + + TotalPayment = totalPayment, + TotalDeductions = totalDeduction, + TotalClaims = totalClaims, + #endregion + }; + + + + }).ToList(); + + Console.WriteLine("print : " + watch.Elapsed); + return result; + } #endregion } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml.cs index a98a852a..09858586 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml.cs @@ -22,9 +22,12 @@ public class CheckoutPrintAllModel : PageModel } public void OnGet(string idlist) - { - var ids = ExtractNumbers(idlist); - var resultList = new List(); + { + + + var ids = ExtractNumbers(idlist); + var test = _checkoutApplication.CheckoutPrint(ids).GetAwaiter().GetResult(); + var resultList = new List(); var res = _checkoutApplication.PrintAll(ids); From 3317bde6d6c5f9ca4965b2e07a7cf770da92471d Mon Sep 17 00:00:00 2001 From: gozareshgir Date: Tue, 20 Jan 2026 14:16:00 +0330 Subject: [PATCH 2/7] checkout group and one print --- 0_Framework/Application/Tools.cs | 12 + .../Checkout/Dto/CheckoutPrintDto.cs | 22 +- .../Repository/CheckoutRepository.cs | 433 ++++++++++-------- .../Admin/Controllers/CheckoutController.cs | 25 + .../Checkouts/CheckoutPrintAll.cshtml.cs | 2 +- 5 files changed, 291 insertions(+), 203 deletions(-) diff --git a/0_Framework/Application/Tools.cs b/0_Framework/Application/Tools.cs index db65625e..47de9e95 100644 --- a/0_Framework/Application/Tools.cs +++ b/0_Framework/Application/Tools.cs @@ -457,6 +457,18 @@ public static class Tools return "-"; return myMoney.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir")); } + + /// + /// اگر مبلغ صفر یا نال باشد خط تیره برمیگرداند + /// + /// + /// + public static string ToMoneyCheckZeroNullable(this double? myMoney) + { + if (myMoney == 0 || myMoney == null) + return "-"; + return myMoney?.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir")); + } public static string ToMoneyNullable(this double? myMoney) { diff --git a/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs b/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs index a007e448..201d2679 100644 --- a/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs +++ b/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs @@ -63,6 +63,22 @@ public class CheckoutPrintDto /// آیا کارقرما حقوقی است /// public bool EmployerIslegal { get; set; } + + /// + /// آیا ترک کار کرده + /// + public bool HasLeft { get; set; } + + /// + /// آخرین روز کاری + /// + public string LastDayOfWork { get; set; } + + /// + /// روز ترک کار + /// + public string LeftWorkDate { get; set; } + #endregion //جدول مطالبات و کسورات @@ -109,8 +125,8 @@ public class CheckoutPrintDto #endregion - //اقساط - #region LoneAndInstallmentData + //اقساط - مساعده + #region SalaryAidAndInstallmentData public List InstallmentViewModels { get; set; } public List SalaryAidViewModels { get; set; } @@ -213,7 +229,7 @@ public class PaymentAndDeductionList /// public class CheckoutEmployersList { - public bool IsLegal { get; set; } + public string IsLegal { get; set; } public string EmployerFullName { get; set; } } diff --git a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs index 637dcf1e..51f6b8c7 100644 --- a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs @@ -78,7 +78,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos public (bool hasChekout, double FamilyAlloance, double OverTimePay, double RotatingShift, double Nightwork, double Fridaywork, double YraesPay) HasCheckout(long workshopId, long employeId, string year, string month) { var farisMonthName = Tools.ToFarsiMonthByNumber(month); - + var res = _context.CheckoutSet.FirstOrDefault(x => x.WorkshopId == workshopId && x.EmployeeId == employeId && x.Year == year && x.Month == farisMonthName && x.IsActiveString == "true"); @@ -87,14 +87,14 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos var checkLeftDate = ($"{year}/{month}/01").ToGeorgianDateTime(); var hasLeftwork = _context.LeftWorkList.Any(x => x.EmployeeId == employeId && x.WorkshopId == workshopId && x.LeftWorkDate == checkLeftDate); - if(hasLeftwork) + if (hasLeftwork) return (true, 0, 0, 0, 0, 0, 0); return (false, 0, 0, 0, 0, 0, 0); } - - return (true, res.FamilyAllowance, res.OvertimePay, res.ShiftPay, res.NightworkPay, res.FridayPay,res.YearsPay); + + return (true, res.FamilyAllowance, res.OvertimePay, res.ShiftPay, res.NightworkPay, res.FridayPay, res.YearsPay); } public EditCheckout GetDetails(long id) @@ -253,7 +253,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos var now = DateTime.Now; DateTime currentStart = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime(); DateTime currentEnd = ($"{DateTime.Now.ToFarsi().FindeEndOfMonth()}").ToGeorgianDateTime(); - + var chekoutCreated = result.checkout.FirstOrDefault(x => x.ContractStart < endSearch && x.ContractEnd > startSreach && x.IsActiveString == "true"); if (chekoutCreated != null) @@ -279,7 +279,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos } var employeeJoin = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork .contractWorkshopEmployee.employee.id; - + var leftWork = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork .leftwork; @@ -537,7 +537,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos entity.SetLoanInstallment(command.LoanInstallments, command.InstallmentDeduction); entity.SetCheckoutRollCall(command.CheckoutRollCall); entity.SetEmployeeMandatoryHours(command.EmployeeMandatoryHours); - if(command.HasInsuranceShareTheSameAsList) + if (command.HasInsuranceShareTheSameAsList) entity.SetInsuranceShare(); await _context.SaveChangesAsync(); @@ -902,108 +902,108 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos foreach (var item in checkouts) { var ch = new CheckoutViewModel() + { + Id = item.id, + WorkshopId = item.WorkshopId, + ContractId = item.ContractId, + EmployeeId = item.EmployeeId, + EmployeeFullName = item.EmployeeFullName, + FathersName = item.FathersName, + NationalCode = item.NationalCode, + DateOfBirth = item.DateOfBirth, + WorkshopName = item.WorkshopName, + Month = item.Month, + Year = item.Year, + PersonnelCode = item.PersonnelCode, + PersonnelCodeInt = Convert.ToInt32(item.PersonnelCode), + ContractNo = item.ContractNo, + MonthlySalary = item.MonthlySalary.ToMoney(), + BaseYearsPay = item.BaseYearsPay.ToMoney(), + ConsumableItems = item.ConsumableItems.ToMoney(), + HousingAllowance = item.HousingAllowance.ToMoney(), + OvertimePay = item.OvertimePay.ToMoney(), + NightworkPay = item.NightworkPay.ToMoney(), + FridayPay = item.FridayPay.ToMoney(), + MissionPay = item.MissionPay.ToMoney(), + ShiftPay = item.ShiftPay.ToMoney(), + FamilyAllowance = item.FamilyAllowance.ToMoney(), + BonusesPay = item.BonusesPay.ToMoney(), + YearsPay = item.YearsPay.ToMoney(), + LeavePay = item.LeavePay.ToMoney(), + InsuranceDeduction = item.InsuranceDeduction.ToMoney(), + TaxDeducation = item.TaxDeducation.ToMoney(), + InstallmentDeduction = item.InstallmentDeduction.ToMoney(), + SalaryAidDeduction = item.SalaryAidDeduction.ToMoney(), + AbsenceDeduction = item.AbsenceDeduction.ToMoney(), + TotalClaims = item.TotalClaims, + TotalDeductions = item.TotalDeductions, + TotalPayment = item.TotalPayment.ToMoney(), + RewardPay = item.RewardPay.ToMoneyNullable(), + ContractStartGr = item.ContractStart, + ContractEndGr = item.ContractEnd, + IsLeft = false, + LeftWorkDate = "", + LastDayOfWork = "", + MarriedAllowance = item.MarriedAllowance.ToMoney(), + HasRollCall = item.HasRollCall, + SumOfWorkingDays = "-", + OverTimeWorkValue = item.OverTimeWorkValue, + OverNightWorkValue = item.OverNightWorkValue, + FridayWorkValue = item.FridayWorkValue, + RotatingShiftValue = item.RotatingShiftValue, + AbsenceValue = item.AbsenceValue, + MaritalStatus = "", + TotalDayOfLeaveCompute = "-", + TotalDayOfYearsCompute = "-", + TotalDayOfBunosesCompute = "-", + InstallmentViewModels = item.LoanInstallments.Select(i => new LoanInstallmentViewModel() { - Id = item.id, - WorkshopId = item.WorkshopId, - ContractId = item.ContractId, - EmployeeId = item.EmployeeId, - EmployeeFullName = item.EmployeeFullName, - FathersName = item.FathersName, - NationalCode = item.NationalCode, - DateOfBirth = item.DateOfBirth, - WorkshopName = item.WorkshopName, - Month = item.Month, - Year = item.Year, - PersonnelCode = item.PersonnelCode, - PersonnelCodeInt = Convert.ToInt32(item.PersonnelCode), - ContractNo = item.ContractNo, - MonthlySalary = item.MonthlySalary.ToMoney(), - BaseYearsPay = item.BaseYearsPay.ToMoney(), - ConsumableItems = item.ConsumableItems.ToMoney(), - HousingAllowance = item.HousingAllowance.ToMoney(), - OvertimePay = item.OvertimePay.ToMoney(), - NightworkPay = item.NightworkPay.ToMoney(), - FridayPay = item.FridayPay.ToMoney(), - MissionPay = item.MissionPay.ToMoney(), - ShiftPay = item.ShiftPay.ToMoney(), - FamilyAllowance = item.FamilyAllowance.ToMoney(), - BonusesPay = item.BonusesPay.ToMoney(), - YearsPay = item.YearsPay.ToMoney(), - LeavePay = item.LeavePay.ToMoney(), - InsuranceDeduction = item.InsuranceDeduction.ToMoney(), - TaxDeducation = item.TaxDeducation.ToMoney(), - InstallmentDeduction = item.InstallmentDeduction.ToMoney(), - SalaryAidDeduction = item.SalaryAidDeduction.ToMoney(), - AbsenceDeduction = item.AbsenceDeduction.ToMoney(), - TotalClaims = item.TotalClaims, - TotalDeductions = item.TotalDeductions, - TotalPayment = item.TotalPayment.ToMoney(), - RewardPay = item.RewardPay.ToMoneyNullable(), - ContractStartGr = item.ContractStart, - ContractEndGr = item.ContractEnd, - IsLeft = false, - LeftWorkDate = "", - LastDayOfWork = "", - MarriedAllowance = item.MarriedAllowance.ToMoney(), - HasRollCall = item.HasRollCall, - SumOfWorkingDays = "-", - OverTimeWorkValue = item.OverTimeWorkValue, - OverNightWorkValue = item.OverNightWorkValue, - FridayWorkValue = item.FridayWorkValue, - RotatingShiftValue = item.RotatingShiftValue, - AbsenceValue = item.AbsenceValue, - MaritalStatus = "", - TotalDayOfLeaveCompute = "-", - TotalDayOfYearsCompute = "-", - TotalDayOfBunosesCompute = "-", - InstallmentViewModels = item.LoanInstallments.Select(i => new LoanInstallmentViewModel() + Amount = i.AmountForMonth, + AmountDouble = i.AmountForMonth.MoneyToDouble(), + Year = i.Year, + Month = i.Month, + IsActive = i.IsActive, + RemainingAmount = i.LoanRemaining, + LoanAmount = i.LoanAmount + }).ToList(), + SalaryAidViewModels = item.SalaryAids.Select(s => new SalaryAidViewModel() + { + Amount = s.Amount, + AmountDouble = s.Amount.MoneyToDouble(), + SalaryAidDateTimeFa = s.SalaryAidDateTimeFa, + SalaryAidDateTimeGe = s.SalaryAidDateTime + }).ToList(), + CheckoutRollCall = item.CheckoutRollCall != null ? new CheckoutRollCallViewModel() + { + TotalPresentTimeSpan = item.CheckoutRollCall.TotalPresentTimeSpan, + TotalBreakTimeSpan = item.CheckoutRollCall.TotalBreakTimeSpan, + TotalWorkingTimeSpan = item.CheckoutRollCall.TotalWorkingTimeSpan, + TotalPaidLeaveTmeSpan = item.CheckoutRollCall.TotalPaidLeaveTmeSpan, + TotalMandatoryTimeSpan = item.CheckoutRollCall.TotalMandatoryTimeSpan, + TotalSickLeaveTimeSpan = item.CheckoutRollCall.TotalSickLeaveTimeSpan, + RollCallDaysCollection = item.CheckoutRollCall.RollCallDaysCollection.Select(d => new CheckoutRollCallDayViewModel() { - Amount = i.AmountForMonth, - AmountDouble = i.AmountForMonth.MoneyToDouble(), - Year = i.Year, - Month = i.Month, - IsActive = i.IsActive, - RemainingAmount = i.LoanRemaining, - LoanAmount = i.LoanAmount + WorkingTimeSpan = d.WorkingTimeSpan, + BreakTimeSpan = d.BreakTimeSpan, + IsSliced = d.IsSliced, + IsAbsent = d.IsAbsent, + IsFriday = d.IsFriday, + IsHoliday = d.IsHoliday, + LeaveType = d.LeaveType, + CheckoutId = d.CheckoutId, + Date = d.Date, + FirstEndDate = d.FirstEndDate, + FirstStartDate = d.FirstStartDate, + Id = d.Id, + SecondEndDate = d.SecondEndDate, + SecondStartDate = d.SecondStartDate, }).ToList(), - SalaryAidViewModels = item.SalaryAids.Select(s => new SalaryAidViewModel() - { - Amount = s.Amount, - AmountDouble = s.Amount.MoneyToDouble(), - SalaryAidDateTimeFa = s.SalaryAidDateTimeFa, - SalaryAidDateTimeGe = s.SalaryAidDateTime - }).ToList(), - CheckoutRollCall = item.CheckoutRollCall != null ? new CheckoutRollCallViewModel() - { - TotalPresentTimeSpan = item.CheckoutRollCall.TotalPresentTimeSpan, - TotalBreakTimeSpan = item.CheckoutRollCall.TotalBreakTimeSpan, - TotalWorkingTimeSpan = item.CheckoutRollCall.TotalWorkingTimeSpan, - TotalPaidLeaveTmeSpan = item.CheckoutRollCall.TotalPaidLeaveTmeSpan, - TotalMandatoryTimeSpan = item.CheckoutRollCall.TotalMandatoryTimeSpan, - TotalSickLeaveTimeSpan = item.CheckoutRollCall.TotalSickLeaveTimeSpan, - RollCallDaysCollection = item.CheckoutRollCall.RollCallDaysCollection.Select(d => new CheckoutRollCallDayViewModel() - { - WorkingTimeSpan = d.WorkingTimeSpan, - BreakTimeSpan = d.BreakTimeSpan, - IsSliced = d.IsSliced, - IsAbsent = d.IsAbsent, - IsFriday = d.IsFriday, - IsHoliday = d.IsHoliday, - LeaveType = d.LeaveType, - CheckoutId = d.CheckoutId, - Date = d.Date, - FirstEndDate = d.FirstEndDate, - FirstStartDate = d.FirstStartDate, - Id = d.Id, - SecondEndDate = d.SecondEndDate, - SecondStartDate = d.SecondStartDate, - }).ToList(), - } : null, - HasAmountConflict =item.HasAmountConflict, - EmployeeMandatoryHoursTimeSpan = item.EmployeeMandatoryHours, - EmployeeMandatoryHoursStr = Tools.ToFarsiHoursAndMinutes(Convert.ToInt32(item.EmployeeMandatoryHours.TotalHours),item.EmployeeMandatoryHours.Minutes,"-") - }; + } : null, + HasAmountConflict = item.HasAmountConflict, + EmployeeMandatoryHoursTimeSpan = item.EmployeeMandatoryHours, + EmployeeMandatoryHoursStr = Tools.ToFarsiHoursAndMinutes(Convert.ToInt32(item.EmployeeMandatoryHours.TotalHours), item.EmployeeMandatoryHours.Minutes, "-") + }; var workshopName = _context.Workshops.FirstOrDefault(x => x.id == ch.WorkshopId); ch.WorkshopName = workshopName.WorkshopName; ch.TotalPaymentHide = workshopName.TotalPaymentHide; @@ -2014,7 +2014,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos // ); var checkouts = - _context.CheckoutSet.Include(w=>w.CheckoutWarningMessageList).Where(x => workshopAcounts.Contains(x.WorkshopId)) + _context.CheckoutSet.Include(w => w.CheckoutWarningMessageList).Where(x => workshopAcounts.Contains(x.WorkshopId)) .Join(_context.Workshops.AsSplitQuery(), ch => ch.WorkshopId, workshop => workshop.id, @@ -2037,7 +2037,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos { res.ch, res.workshop, - option = _context.EmployeeComputeOptionsSet.FirstOrDefault(x=>x.WorkshopId == res.ch.WorkshopId &&x.EmployeeId == res.ch.EmployeeId), + option = _context.EmployeeComputeOptionsSet.FirstOrDefault(x => x.WorkshopId == res.ch.WorkshopId && x.EmployeeId == res.ch.EmployeeId), res.workshopEmployer, contractingParty = _context.PersonalContractingParties .Include(p => p.Employers) @@ -2070,7 +2070,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos hasEmployeeOrWorkshpSearch = true; checkouts = checkouts.Where(x => x.ch.ContractNo == searchModel.ContractNo); } - + //if (searchModel.IsActiveString == null) @@ -2250,50 +2250,50 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos } - + #endregion if (!hasSearch && !hasEmployeeOrWorkshpSearch) { - + return checkouts.Select(x => new CheckoutViewModel() + { + + Id = x.ch.id, + EmployeeFullName = x.ch.EmployeeFullName, + ContractStart = x.ch.ContractStart.ToFarsi(), + ContractEnd = x.ch.ContractEnd.ToFarsi(), + ContractStartGr = x.ch.ContractStart, + ContractEndGr = x.ch.ContractEnd, + PersonnelCode = x.ch.PersonnelCode, + PersonnelCodeInt = Convert.ToInt32(x.ch.PersonnelCode), + ArchiveCode = x.workshop.ArchiveCode, + SumOfWorkingDays = x.ch.SumOfWorkingDays, + WorkshopName = x.workshop.WorkshopName, + Month = x.ch.Month, + Year = x.ch.Year, + ContractNo = x.ch.ContractNo, + ContractId = x.ch.ContractId, + WorkshopId = x.ch.WorkshopId, + EmployeeId = x.ch.EmployeeId, + EmployerId = x.workshopEmployer.EmployerId, + IsActiveString = x.ch.IsActiveString, + Signature = x.ch.Signature, + CreationDate = x.ch.CreationDate, + EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}", + IsBlockCantracingParty = x.contractingParty.IsBlock, + HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, + IsUpdateNeeded = x.ch.IsUpdateNeeded, + CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => new CheckoutWarningMessageModel { + WarningMessage = wm.WarningMessage, + TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, - Id = x.ch.id, - EmployeeFullName = x.ch.EmployeeFullName, - ContractStart = x.ch.ContractStart.ToFarsi(), - ContractEnd = x.ch.ContractEnd.ToFarsi(), - ContractStartGr = x.ch.ContractStart, - ContractEndGr = x.ch.ContractEnd, - PersonnelCode = x.ch.PersonnelCode, - PersonnelCodeInt = Convert.ToInt32(x.ch.PersonnelCode), - ArchiveCode = x.workshop.ArchiveCode, - SumOfWorkingDays = x.ch.SumOfWorkingDays, - WorkshopName = x.workshop.WorkshopName, - Month = x.ch.Month, - Year = x.ch.Year, - ContractNo = x.ch.ContractNo, - ContractId = x.ch.ContractId, - WorkshopId = x.ch.WorkshopId, - EmployeeId = x.ch.EmployeeId, - EmployerId = x.workshopEmployer.EmployerId, - IsActiveString = x.ch.IsActiveString, - Signature = x.ch.Signature, - CreationDate = x.ch.CreationDate, - EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}", - IsBlockCantracingParty = x.contractingParty.IsBlock, - HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, - IsUpdateNeeded = x.ch.IsUpdateNeeded, - CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm=> new CheckoutWarningMessageModel - { - WarningMessage = wm.WarningMessage, - TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, - - }).ToList() + }).ToList() - }).OrderByDescending(x=>x.Id).Take(3000).ToList().DistinctBy(x => x.Id) + }).OrderByDescending(x => x.Id).Take(3000).ToList().DistinctBy(x => x.Id) .OrderByDescending(x => x.Id).ThenByDescending(x => x.Year) .ThenBy(x => x.PersonnelCodeInt) .Take(50).ToList(); @@ -2441,7 +2441,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos CreationDate = x.ch.CreationDate, EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}", IsBlockCantracingParty = x.contractingParty.IsBlock, - HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, + HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, IsUpdateNeeded = x.ch.IsUpdateNeeded, CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => new CheckoutWarningMessageModel { @@ -2454,8 +2454,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos .Select(x => x.First()).ToList() .OrderByDescending(x => x.Id) .ThenByDescending(x => x.Year).ThenBy(x => x.PersonnelCodeInt).ToList(); - - + + } } @@ -2769,43 +2769,43 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos .Select(x => x.WorkshopId); - - var watch = new Stopwatch(); - watch.Start(); - var checkouts = - ( - from workshop in _context.Workshops.Where(x => workshopAccounts.Contains(x.id)) - join x in _context.CheckoutSet - on workshop.id equals x.WorkshopId - select new - { - Id = x.id, - EmployeeFullName = x.EmployeeFullName, - EmployeeId = x.EmployeeId, - ContractStart = x.ContractStart, - ContractEnd = x.ContractEnd, - PersonnelCode = x.PersonnelCode, - SumOfWorkingDays = x.SumOfWorkingDays, - Month = x.Month, - Year = x.Year, - ContractNo = x.ContractNo, - IsActiveString = x.IsActiveString, - Signature = x.Signature, - IsUpdateNeeded = x.IsUpdateNeeded, - WorkshopId = x.WorkshopId, - ArchiveCode = workshop.ArchiveCode, - WorkshopName = workshop.WorkshopFullName, - WorkshopSignCheckout = workshop.SignCheckout, - - } - ).OrderByDescending(x => x.Id) - .ThenByDescending(x => x.Year) - .ThenByDescending(x=>x.ContractStart) - .ThenBy(x => x.PersonnelCode).AsNoTracking(); + var watch = new Stopwatch(); + watch.Start(); + var checkouts = + ( + from workshop in _context.Workshops.Where(x => workshopAccounts.Contains(x.id)) + join x in _context.CheckoutSet + on workshop.id equals x.WorkshopId + select new + { + Id = x.id, + EmployeeFullName = x.EmployeeFullName, + EmployeeId = x.EmployeeId, + ContractStart = x.ContractStart, + ContractEnd = x.ContractEnd, + PersonnelCode = x.PersonnelCode, + SumOfWorkingDays = x.SumOfWorkingDays, + Month = x.Month, + Year = x.Year, + ContractNo = x.ContractNo, + IsActiveString = x.IsActiveString, + Signature = x.Signature, + IsUpdateNeeded = x.IsUpdateNeeded, + WorkshopId = x.WorkshopId, + ArchiveCode = workshop.ArchiveCode, + WorkshopName = workshop.WorkshopFullName, + WorkshopSignCheckout = workshop.SignCheckout, + + } + + ).OrderByDescending(x => x.Id) + .ThenByDescending(x => x.Year) + .ThenByDescending(x => x.ContractStart) + .ThenBy(x => x.PersonnelCode).AsNoTracking(); Console.WriteLine("getList======================= : " + watch.Elapsed); - + #region SercheModel if (!string.IsNullOrWhiteSpace(searchModel.ContractNo)) @@ -2839,7 +2839,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos (string.IsNullOrWhiteSpace(searchModel.ContractStart) || string.IsNullOrWhiteSpace(searchModel.ContractEnd))) { - + var startYear = searchModel.Year + "/01/01"; var startyearGr = startYear.ToGeorgianDateTime(); var endYear = $"{searchModel.Year}/12/01".FindeEndOfMonth(); @@ -2855,7 +2855,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos string.IsNullOrWhiteSpace(searchModel.ContractStart) && string.IsNullOrWhiteSpace(searchModel.ContractEnd)) { - + //سرچ سال و ماه string y1 = $"{searchModel.Year}/{searchModel.Month}/01"; var startDate = y1.ToGeorgianDateTime(); @@ -2975,7 +2975,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos !string.IsNullOrWhiteSpace(searchModel.ContractEnd) && string.IsNullOrWhiteSpace(searchModel.Year) && string.IsNullOrWhiteSpace(searchModel.Month)) { - + //سرچ تاریخ var start = searchModel.ContractStart.ToGeorgianDateTime(); var endd = searchModel.ContractEnd.ToGeorgianDateTime(); @@ -2992,19 +2992,19 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos watch.Reset(); watch.Start(); - + var checkoutQueryFilter = await checkouts.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync(); Console.WriteLine("pagination===================== : " + watch.Elapsed); - var employers =await + var employers = await _context.WorkshopEmployers.Where(x => checkoutQueryFilter .Select(c => c.WorkshopId).Contains(x.WorkshopId)) - .Select(x=> new {x.Employer, x.WorkshopId}).ToListAsync(); + .Select(x => new { x.Employer, x.WorkshopId }).ToListAsync(); var contractingPartiesIds = employers.Select(x => x.Employer.ContractingPartyId).ToList(); var warningMessages = await _context.CheckoutWarningMessages.Where(x => checkoutQueryFilter .Select(c => c.Id).Contains(x.CheckoutId)).ToListAsync(); - + var contractnigParties = await _context.PersonalContractingParties .Where(x => contractingPartiesIds.Contains(x.id)).ToListAsync(); @@ -3078,40 +3078,58 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos .Where(x => x.WorkshopId == getCheckouts.First().WorkshopId).AsNoTracking() .Select(x => new CheckoutEmployersList { - IsLegal = x.Employer.IsLegal == "true", + IsLegal = x.Employer.IsLegal, EmployerFullName = x.Employer.FullName }).ToListAsync(); var employees = (from x in _context.Employees.Where(x => getCheckouts.Select(ch => ch.EmployeeId).Contains(x.id)) - select new - { - EmployeeId = x.id, - MaritalStatus = x.MaritalStatus - } + select new + { + EmployeeId = x.id, + MaritalStatus = x.MaritalStatus + } ).AsNoTracking(); var workshop = await _context.Workshops.AsNoTracking().FirstAsync(x => x.id == getCheckouts.First().WorkshopId); + var showSumOfPayments = workshop.TotalPaymentHide; + bool isLegal = employers.Any(x => x.IsLegal == "حقوقی"); + + var leftWorks = await _context.LeftWorkList.AsNoTracking() + .Where(x => x.WorkshopId == workshop.id).ToListAsync(); - bool isLegal = employers.Any(x => x.IsLegal); - var result = getCheckouts.Select(x => { + var leftCheck = leftWorks + .FirstOrDefault(l => l.EmployeeId == x.EmployeeId && x.ContractStart >= l.StartWorkDate && x.ContractStart <= l.LeftWorkDate && l.HasLeft); + bool hasLeft = false; + var leftWorkDate = ""; + var lastDayOfWork = ""; + if (leftCheck != null) + { + var contractLeftWorkDate = x.ContractEnd.AddDays(1); + if (leftCheck.HasLeft && leftCheck.LeftWorkDate == contractLeftWorkDate) + { + hasLeft = true; + leftWorkDate = leftCheck.LeftWorkDate.ToFarsi(); + lastDayOfWork = x.ContractEnd.ToFarsi(); + } + } var overTimeWorkValue = x.OvertimePay > 0 ? x.OverTimeWorkValue : "-"; - var overNightWorkValue = x.OvertimePay > 0 ? x.OverNightWorkValue : "-"; + var overNightWorkValue = x.NightworkPay > 0 ? x.OverNightWorkValue : "-"; var fridayWorkValue = x.FridayPay > 0 ? x.FridayWorkValue : "-"; var maritalStatus = employees.First(e => e.EmployeeId == x.EmployeeId).MaritalStatus; - var rewardPay = x.RewardPay == null ? "-" : x.RewardPay.ToMoneyNullable(); + var rewardPay = x.RewardPay == null ? "-" : x.RewardPay.ToMoneyCheckZeroNullable(); var rotatingShiftValue = x.ShiftPay > 0 ? x.RotatingShiftValue : "-"; var totalDeduction = "-"; var totalPayment = "-"; var totalClaims = "-"; - if (!workshop.TotalPaymentHide) + if (showSumOfPayments) { totalDeduction = x.TotalDeductions; totalPayment = x.TotalPayment.ToMoneyCheckZero(); totalClaims = x.TotalClaims; } - + return new CheckoutPrintDto() { Id = x.id, @@ -3125,12 +3143,15 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos FathersName = x.FathersName, NationalCode = x.NationalCode, DateOfBirth = x.DateOfBirth, - WorkshopName = x.WorkshopName, + WorkshopName = workshop.WorkshopName, ContractNo = x.ContractNo, Month = x.Month, Year = x.Year, EmployersLists = employers, EmployerIslegal = isLegal, + HasLeft = hasLeft, + LastDayOfWork = lastDayOfWork, + LeftWorkDate = leftWorkDate, #endregion //جدول مطالبات و کسورات @@ -3192,6 +3213,20 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos TotalDeductions = totalDeduction, TotalClaims = totalClaims, #endregion + + //لیست ورود و خروج پرسنل + //اطلاعات ساعات کار و موظقی + #region RollCallData + + + + #endregion + + + //اقساط - مساعده + #region SalaryAidAndInstallmentData + + #endregion }; diff --git a/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs b/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs index 8f3df3e9..3056151b 100644 --- a/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs +++ b/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs @@ -3,6 +3,7 @@ using CompanyManagment.App.Contracts.Checkout; using CompanyManagment.App.Contracts.Checkout.Dto; using CompanyManagment.App.Contracts.InstitutionPlan; using Microsoft.AspNetCore.Mvc; +using NuGet.Packaging.Signing; using ServiceHost.BaseControllers; namespace ServiceHost.Areas.Admin.Controllers; @@ -39,5 +40,29 @@ public class CheckoutController : AdminBaseController return result; } + /// + /// پرینت گروهی فیش حقوقی + /// + /// + /// + [HttpGet("GroupPrint")] + public async Task> Print(List ids) + { + var result =await _checkoutApplication.CheckoutPrint(ids); + return result; + } + + /// + /// پرینت تکی فیش حقوقی + /// + /// + /// + [HttpGet("PrintOne")] + public async Task> Print(long id) + { + var result = await _checkoutApplication.CheckoutPrint([id]); + return result; + } + } diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml.cs index 09858586..a1a37028 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml.cs @@ -26,7 +26,7 @@ public class CheckoutPrintAllModel : PageModel var ids = ExtractNumbers(idlist); - var test = _checkoutApplication.CheckoutPrint(ids).GetAwaiter().GetResult(); + var resultList = new List(); var res = _checkoutApplication.PrintAll(ids); From 5b6f967fca768d12619a536111937b5250988975 Mon Sep 17 00:00:00 2001 From: gozareshgir Date: Tue, 20 Jan 2026 18:17:32 +0330 Subject: [PATCH 3/7] workshopSelectList api and employeeSelectlist --- .../CheckoutAgg/ICheckoutRepository.cs | 6 ++ .../WorkshopAgg/IWorkshopRepository.cs | 10 ++++ .../Checkout/Dto/EmployeeSelectListDto.cs | 14 +++++ .../Checkout/ICheckoutApplication.cs | 7 +++ .../DTOs/AdminWorkshopSelectListDto.cs | 24 ++++++++ .../Workshop/IWorkshopApplication.cs | 22 ++++++-- .../CheckoutApplication.cs | 5 +- .../WorkshopAppliction.cs | 13 +++++ .../Repository/CheckoutRepository.cs | 19 +++++++ .../Repository/WorkshopRepository.cs | 55 +++++++++++++++++-- .../Admin/Controllers/CheckoutController.cs | 32 ++++++++++- 11 files changed, 197 insertions(+), 10 deletions(-) create mode 100644 CompanyManagment.App.Contracts/Checkout/Dto/EmployeeSelectListDto.cs create mode 100644 CompanyManagment.App.Contracts/Workshop/DTOs/AdminWorkshopSelectListDto.cs diff --git a/Company.Domain/CheckoutAgg/ICheckoutRepository.cs b/Company.Domain/CheckoutAgg/ICheckoutRepository.cs index c1bba732..167c323c 100644 --- a/Company.Domain/CheckoutAgg/ICheckoutRepository.cs +++ b/Company.Domain/CheckoutAgg/ICheckoutRepository.cs @@ -84,6 +84,12 @@ public interface ICheckoutRepository : IRepository #region ForApi + /// + /// دریافت سلکت لیست پرسنل کارگاه + /// + /// + /// + Task> GetEmployeeSelectListByWorkshopId(long id); /// /// دریافت لیست فیش حقوقی diff --git a/Company.Domain/WorkshopAgg/IWorkshopRepository.cs b/Company.Domain/WorkshopAgg/IWorkshopRepository.cs index 6d5f56ea..b9193076 100644 --- a/Company.Domain/WorkshopAgg/IWorkshopRepository.cs +++ b/Company.Domain/WorkshopAgg/IWorkshopRepository.cs @@ -106,4 +106,14 @@ public interface IWorkshopRepository : IRepository #endregion + + #region ForApi + /// + /// دریافت لیست کارگاه های ادمین برای سلکت تو + /// Api + /// + /// + Task> GetAdminWorkshopSelectList(); + + #endregion } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Checkout/Dto/EmployeeSelectListDto.cs b/CompanyManagment.App.Contracts/Checkout/Dto/EmployeeSelectListDto.cs new file mode 100644 index 00000000..4384aaa3 --- /dev/null +++ b/CompanyManagment.App.Contracts/Checkout/Dto/EmployeeSelectListDto.cs @@ -0,0 +1,14 @@ +namespace CompanyManagment.App.Contracts.Checkout.Dto; + +public class EmployeeSelectListDto +{ + /// + /// آی دی پرسنل + /// + public long Id { get; set; } + + /// + /// نام پرسنل + /// + public string EmployeeFullName { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs b/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs index a3e75d18..89822fca 100644 --- a/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs +++ b/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs @@ -67,6 +67,13 @@ public interface ICheckoutApplication #region ForApi + /// + /// دریافت سلکت لیست پرسنل کارگاه + /// + /// + /// + Task> GetEmployeeSelectListByWorkshopId(long id); + /// /// دریافت لیست فیش های حقوقی ادمین /// diff --git a/CompanyManagment.App.Contracts/Workshop/DTOs/AdminWorkshopSelectListDto.cs b/CompanyManagment.App.Contracts/Workshop/DTOs/AdminWorkshopSelectListDto.cs new file mode 100644 index 00000000..8ed1da5d --- /dev/null +++ b/CompanyManagment.App.Contracts/Workshop/DTOs/AdminWorkshopSelectListDto.cs @@ -0,0 +1,24 @@ +namespace CompanyManagment.App.Contracts.Workshop.DTOs; + +public class AdminWorkshopSelectListDto +{ + /// + /// آی دی کارگاه + /// + public long Id { get; set; } + + /// + /// نام کارگاه + /// + public string WorkshopFullName { get; set; } + + /// + /// کد بایگانی + /// + public string ArchiveCode { get; set; } + + /// + /// آیا بلاک شده است + /// + public bool IsBlock { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs b/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs index 9e9ec0ac..b73faf8b 100644 --- a/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs +++ b/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs @@ -1,10 +1,11 @@ -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Threading.Tasks; -using _0_Framework.Application; +using _0_Framework.Application; using AccountManagement.Application.Contracts.Account; +using CompanyManagment.App.Contracts.Checkout.Dto; using CompanyManagment.App.Contracts.Workshop.DTOs; using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Threading.Tasks; namespace CompanyManagment.App.Contracts.Workshop; @@ -92,6 +93,19 @@ public interface IWorkshopApplication #endregion Task> CreateWorkshopWorkflowRegistration(CreateWorkshopWorkflowRegistration command); + + + #region ForApi + + + /// + /// دریافت لیست کارگاه های ادمین برای سلکت تو + /// Api + /// + /// + Task> GetAdminWorkshopSelectList(); + + #endregion } public class CreateWorkshopWorkflowRegistration diff --git a/CompanyManagment.Application/CheckoutApplication.cs b/CompanyManagment.Application/CheckoutApplication.cs index 30263813..37ac1a18 100644 --- a/CompanyManagment.Application/CheckoutApplication.cs +++ b/CompanyManagment.Application/CheckoutApplication.cs @@ -717,7 +717,10 @@ public class CheckoutApplication : ICheckoutApplication return _checkoutRepository.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, start, end); } - + public async Task> GetEmployeeSelectListByWorkshopId(long id) + { + return await _checkoutRepository.GetEmployeeSelectListByWorkshopId(id); + } #endregion diff --git a/CompanyManagment.Application/WorkshopAppliction.cs b/CompanyManagment.Application/WorkshopAppliction.cs index c2110263..5f7ab020 100644 --- a/CompanyManagment.Application/WorkshopAppliction.cs +++ b/CompanyManagment.Application/WorkshopAppliction.cs @@ -11,6 +11,7 @@ using Company.Domain.InstitutionContractAgg; using Company.Domain.LeftWorkAgg; using Company.Domain.LeftWorkInsuranceAgg; using Company.Domain.WorkshopAgg; +using CompanyManagment.App.Contracts.Checkout.Dto; using CompanyManagment.App.Contracts.Employee; using CompanyManagment.App.Contracts.EmployeeChildren; using CompanyManagment.App.Contracts.LeftWork; @@ -1130,5 +1131,17 @@ public class WorkshopAppliction : IWorkshopApplication return operation.Succcedded(); } + + + #endregion + + + #region ForApi + + public async Task> GetAdminWorkshopSelectList() + { + return await _workshopRepository.GetAdminWorkshopSelectList(); + } + #endregion } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs index 51f6b8c7..cc0041f9 100644 --- a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs @@ -2762,6 +2762,22 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos #region ForApi + public async Task> GetEmployeeSelectListByWorkshopId(long id) + { + var employeesHasLeftworkData =_context.LeftWorkList.Where(x => x.WorkshopId == id).Select(x => x.EmployeeId); + var employees =await _context.Employees + .Where(x => employeesHasLeftworkData.Contains(x.id)) + .Select(x => + new EmployeeSelectListDto() + { + Id = x.id, + EmployeeFullName = x.FullName + }) + .AsNoTracking() + .ToListAsync(); + return employees; + } + public async Task> GetList(CheckoutSearchModelDto searchModel) { var acountID = _authHelper.CurrentAccountId(); @@ -3236,5 +3252,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos Console.WriteLine("print : " + watch.Elapsed); return result; } + + + #endregion } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/WorkshopRepository.cs b/CompanyManagment.EFCore/Repository/WorkshopRepository.cs index 30a06a9f..e19bdd73 100644 --- a/CompanyManagment.EFCore/Repository/WorkshopRepository.cs +++ b/CompanyManagment.EFCore/Repository/WorkshopRepository.cs @@ -1187,14 +1187,14 @@ public class WorkshopRepository : RepositoryBase !string.IsNullOrEmpty(x.ArchiveCode)) .Select(x => x.ArchiveCode) .ToList(); - + int maxArchiveCode = 0; - + foreach (var code in archiveCodes) { // Remove "b-" prefix if exists string cleanCode = code.StartsWith("b-") ? code.Substring(2) : code; - + // Try to parse the clean code to an integer if (int.TryParse(cleanCode, out int codeValue)) { @@ -1204,7 +1204,7 @@ public class WorkshopRepository : RepositoryBase x.StartWork).ToList(); } + + + + #endregion + + + #region ForApi + + public async Task> GetAdminWorkshopSelectList() + { + var watch = new Stopwatch(); + watch.Start(); + var acountId = _authHelper.CurrentAccountId(); + + var workshopIds = _context.WorkshopAccounts.AsNoTracking().Where(x => x.AccountId == acountId).Select(x => x.WorkshopId); + + var employers = await + _context.WorkshopEmployers.AsNoTracking().Where(x => workshopIds.Contains(x.WorkshopId)) + .Select(x => new { x.Employer, x.WorkshopId }).ToListAsync(); + + var blockedContractingParties =await _context.PersonalContractingParties + .Where(x => x.IsBlock == "true").Select(x=>x.id).ToListAsync(); + + var workshops = await _context.Workshops.AsNoTracking() + .Where(x => workshopIds.Contains(x.id)) + .Where(x => x.IsActiveString == "true").ToListAsync(); + + + var result = workshops.Select(x => + { + var empl = employers.First(em => em.WorkshopId == x.id); + var isBlock = blockedContractingParties.Any(cp => cp == empl.Employer.ContractingPartyId); + return new AdminWorkshopSelectListDto + { + Id = x.id, + WorkshopFullName = x.WorkshopFullName, + ArchiveCode = x.ArchiveCode, + IsBlock = isBlock + }; + + }).OrderBy(x=>x.IsBlock ? 1 : 0) + .ToList(); + + Console.WriteLine("workshopSelectList : " +watch.Elapsed); + return result; + } + #endregion } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs b/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs index 3056151b..0cf5f2a1 100644 --- a/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs +++ b/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs @@ -2,6 +2,8 @@ using CompanyManagment.App.Contracts.Checkout; using CompanyManagment.App.Contracts.Checkout.Dto; using CompanyManagment.App.Contracts.InstitutionPlan; +using CompanyManagment.App.Contracts.Workshop; +using CompanyManagment.App.Contracts.Workshop.DTOs; using Microsoft.AspNetCore.Mvc; using NuGet.Packaging.Signing; using ServiceHost.BaseControllers; @@ -11,10 +13,12 @@ namespace ServiceHost.Areas.Admin.Controllers; public class CheckoutController : AdminBaseController { private readonly ICheckoutApplication _checkoutApplication; + private readonly IWorkshopApplication _workshopApplication; - public CheckoutController(ICheckoutApplication checkoutApplication) + public CheckoutController(ICheckoutApplication checkoutApplication, IWorkshopApplication workshopApplication) { _checkoutApplication = checkoutApplication; + _workshopApplication = workshopApplication; } /// @@ -64,5 +68,31 @@ public class CheckoutController : AdminBaseController return result; } + + #region CreateCheckout + /// + /// سلکت لیست کارگاه + /// + /// + [HttpGet("WorkshopSelectList")] + public async Task> GetWorkshopSelectList() + { + var result =await _workshopApplication.GetAdminWorkshopSelectList(); + return result; + } + + /// + /// سلک لیست پرسنل + /// + /// + /// + [HttpGet("EmployeeSelectList")] + public async Task> GetEmployeeSelectListByWorkshopId(long workshopId) + { + var result = await _checkoutApplication.GetEmployeeSelectListByWorkshopId(workshopId); + return result; + } + #endregion + } From 7fc5ac7ccdc3ef1dae4a9b984029b4c05b45dadb Mon Sep 17 00:00:00 2001 From: gozareshgir Date: Tue, 20 Jan 2026 18:48:00 +0330 Subject: [PATCH 4/7] change --- CompanyManagment.EFCore/Repository/WorkshopRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CompanyManagment.EFCore/Repository/WorkshopRepository.cs b/CompanyManagment.EFCore/Repository/WorkshopRepository.cs index e19bdd73..f8e55f70 100644 --- a/CompanyManagment.EFCore/Repository/WorkshopRepository.cs +++ b/CompanyManagment.EFCore/Repository/WorkshopRepository.cs @@ -2044,7 +2044,7 @@ public class WorkshopRepository : RepositoryBase workshopIds.Contains(x.WorkshopId)) .Select(x => new { x.Employer, x.WorkshopId }).ToListAsync(); - var blockedContractingParties =await _context.PersonalContractingParties + var blockedContractingParties =await _context.PersonalContractingParties .Where(x => x.IsBlock == "true").Select(x=>x.id).ToListAsync(); var workshops = await _context.Workshops.AsNoTracking() From 5a1ec104a1cbf50d3de2a353f533624f5e83ffaf Mon Sep 17 00:00:00 2001 From: mahan Date: Tue, 20 Jan 2026 19:44:40 +0330 Subject: [PATCH 5/7] add salary aid and loan for checkout print --- .../Checkout/Dto/CheckoutPrintDto.cs | 6 +- .../Checkout/ICheckoutApplication.cs | 12 + .../CheckoutDailyRollCallViewModel.cs | 38 + .../Repository/CheckoutRepository.cs | 1021 +++++++++-------- 4 files changed, 613 insertions(+), 464 deletions(-) diff --git a/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs b/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs index 201d2679..60b72897 100644 --- a/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs +++ b/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs @@ -116,7 +116,7 @@ public class CheckoutPrintDto /// /// لیست حضورغیاب /// - public List MonthlyRollCall { get; set; } + public List MonthlyRollCall { get; set; } /// /// دیتای جدول حضورغیاب @@ -128,8 +128,8 @@ public class CheckoutPrintDto //اقساط - مساعده #region SalaryAidAndInstallmentData - public List InstallmentViewModels { get; set; } - public List SalaryAidViewModels { get; set; } + public List Installments { get; set; } + public List SalaryAids { get; set; } #endregion } diff --git a/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs b/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs index a3e75d18..abbc3238 100644 --- a/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs +++ b/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs @@ -89,4 +89,16 @@ public interface ICheckoutApplication /// Task> CheckoutPrint(List ids); #endregion +} + +public class CheckoutPrintInstallmentDto +{ + public string RemainingAmount { get; set; } + public string LoanAmount { get; set; } + public string Amount { get; set; } +} +public class CheckoutPrintSalaryAidDto +{ + public string Amount { get; set; } + public string SalaryAidDateTimeFa { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/RollCall/CheckoutDailyRollCallViewModel.cs b/CompanyManagment.App.Contracts/RollCall/CheckoutDailyRollCallViewModel.cs index 9c938ee9..94b2e283 100644 --- a/CompanyManagment.App.Contracts/RollCall/CheckoutDailyRollCallViewModel.cs +++ b/CompanyManagment.App.Contracts/RollCall/CheckoutDailyRollCallViewModel.cs @@ -45,4 +45,42 @@ namespace CompanyManagment.App.Contracts.RollCall } #endregion + public class CheckoutPrintRollCallDto + { + + public string RollCallDateFa { get; set; } + public string StartDate1 { get; set; } + public string EndDate1 { get; set; } + + public string StartDate2 { get; set; } + public string EndDate2 { get; set; } + + //منقطع بودن شیفت کاری + public bool IsSliced { get; set; } + + public string TotalWorkingHours { get; set; } + + public string DayOfWeek { get; set; } + + public string BreakTimeString { get; set; } + + /// + /// اگر مرخصی نداشته باشد خالی خواهد بود، اگر داشته باشد نوع مرخصی جانشانی می شود + /// + public string LeaveType { get; set; } + + public bool IsAbsent { get; set; } + public bool IsFriday { get; set; } + public bool IsHoliday { get; set; } + public bool IsBirthDay { get; set; } + + + public string EnterDifferencesMinutes1 { get; set; } + public string ExitDifferencesMinutes1 { get; set; } + + public string EnterDifferencesMinutes2 { get; set; } + public string ExitDifferencesMinutes2 { get; set; } + + } + } diff --git a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs index 51f6b8c7..cfd2078e 100644 --- a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs @@ -54,9 +54,11 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos private readonly IRollCallMandatoryRepository _rollCallMandatoryRepository; private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository; - public CheckoutRepository(IAuthHelper authHelper, CompanyContext context, IConfiguration configuration, ILeftWorkRepository leftWorkRepository, IWorkingHoursTempApplication workingHoursTempApplication, IRollCallRepository rollCallRepository, IRollCallMandatoryRepository rollCallMandatoryRepository, IRollCallEmployeeRepository rollCallEmployeeRepository) : base(context) + public CheckoutRepository(IAuthHelper authHelper, CompanyContext context, IConfiguration configuration, + ILeftWorkRepository leftWorkRepository, IWorkingHoursTempApplication workingHoursTempApplication, + IRollCallRepository rollCallRepository, IRollCallMandatoryRepository rollCallMandatoryRepository, + IRollCallEmployeeRepository rollCallEmployeeRepository) : base(context) { - _authHelper = authHelper; _context = context; _configuration = configuration; @@ -75,7 +77,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos /// /// /// - public (bool hasChekout, double FamilyAlloance, double OverTimePay, double RotatingShift, double Nightwork, double Fridaywork, double YraesPay) HasCheckout(long workshopId, long employeId, string year, string month) + public (bool hasChekout, double FamilyAlloance, double OverTimePay, double RotatingShift, double Nightwork, double + Fridaywork, double YraesPay) HasCheckout(long workshopId, long employeId, string year, string month) { var farisMonthName = Tools.ToFarsiMonthByNumber(month); @@ -94,54 +97,54 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos } - return (true, res.FamilyAllowance, res.OvertimePay, res.ShiftPay, res.NightworkPay, res.FridayPay, res.YearsPay); + return (true, res.FamilyAllowance, res.OvertimePay, res.ShiftPay, res.NightworkPay, res.FridayPay, + res.YearsPay); } public EditCheckout GetDetails(long id) { return _context.CheckoutSet.Select(x => new EditCheckout() - { - Id = x.id, - EmployeeFullName = x.EmployeeFullName, - FathersName = x.FathersName, - NationalCode = x.NationalCode, - DateOfBirth = x.DateOfBirth, - WorkshopName = x.WorkshopName, - Month = x.Month, - Year = x.Year, - ContractNo = x.ContractNo, - MonthlySalary = x.MonthlySalary, - BaseYearsPay = x.BaseYearsPay, - ConsumableItems = x.ConsumableItems.ToMoney(), - HousingAllowance = x.HousingAllowance.ToMoney(), - OvertimePay = x.OvertimePay, - NightworkPay = x.NightworkPay, - FridayPay = x.FridayPay, - MissionPay = x.MissionPay, - ShiftPay = x.ShiftPay, - FamilyAllowance = x.FamilyAllowance.ToMoney(), - BonusesPay = x.BonusesPay, - YearsPay = x.YearsPay, - LeavePay = x.LeavePay, - InsuranceDeduction = x.InsuranceDeduction, - TaxDeducation = x.TaxDeducation, - InstallmentDeduction = x.InstallmentDeduction, - SalaryAidDeduction = x.SalaryAidDeduction, - AbsenceDeduction = x.AbsenceDeduction, - TotalClaims = x.TotalClaims, - TotalDeductions = x.TotalDeductions, - TotalPayment = x.TotalPayment, - RewardPay = x.RewardPay, - HasRollCall = x.HasRollCall, - EmployeeId = x.EmployeeId, - WorkshopId = x.WorkshopId, - ContractId = x.ContractId, - ContractStartGr = x.ContractStart, - ContractEndGr = x.ContractEnd, - ContractStart = x.ContractStart.ToFarsi(), - ContractEnd = x.ContractEnd.ToFarsi() - - }) + { + Id = x.id, + EmployeeFullName = x.EmployeeFullName, + FathersName = x.FathersName, + NationalCode = x.NationalCode, + DateOfBirth = x.DateOfBirth, + WorkshopName = x.WorkshopName, + Month = x.Month, + Year = x.Year, + ContractNo = x.ContractNo, + MonthlySalary = x.MonthlySalary, + BaseYearsPay = x.BaseYearsPay, + ConsumableItems = x.ConsumableItems.ToMoney(), + HousingAllowance = x.HousingAllowance.ToMoney(), + OvertimePay = x.OvertimePay, + NightworkPay = x.NightworkPay, + FridayPay = x.FridayPay, + MissionPay = x.MissionPay, + ShiftPay = x.ShiftPay, + FamilyAllowance = x.FamilyAllowance.ToMoney(), + BonusesPay = x.BonusesPay, + YearsPay = x.YearsPay, + LeavePay = x.LeavePay, + InsuranceDeduction = x.InsuranceDeduction, + TaxDeducation = x.TaxDeducation, + InstallmentDeduction = x.InstallmentDeduction, + SalaryAidDeduction = x.SalaryAidDeduction, + AbsenceDeduction = x.AbsenceDeduction, + TotalClaims = x.TotalClaims, + TotalDeductions = x.TotalDeductions, + TotalPayment = x.TotalPayment, + RewardPay = x.RewardPay, + HasRollCall = x.HasRollCall, + EmployeeId = x.EmployeeId, + WorkshopId = x.WorkshopId, + ContractId = x.ContractId, + ContractStartGr = x.ContractStart, + ContractEndGr = x.ContractEnd, + ContractStart = x.ContractStart.ToFarsi(), + ContractEnd = x.ContractEnd.ToFarsi() + }) .FirstOrDefault(x => x.Id == id); } @@ -156,7 +159,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos /// /// /// - public async Task GetContractResultToCreateCheckout(long workshopId, long employeeId, string year, string month, string contractStart, + public async Task GetContractResultToCreateCheckout(long workshopId, long employeeId, + string year, string month, string contractStart, string contractEnd) { DateTime startSreach; @@ -169,7 +173,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos } else { - if (month == "0" && year == "0") { DateTime now = DateTime.Now; @@ -199,8 +202,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos startSreach = startStr.ToGeorgianDateTime(); endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime(); } - } + var timer = new Stopwatch(); timer.Start(); @@ -215,7 +218,9 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos contractWorkshop => contractWorkshop.contract.EmployeeId, employee => employee.id, (contractWorkshop, employee) => new { contractWorkshop, employee }) - .Join(_context.LeftWorkList.AsSplitQuery().Where(l => l.WorkshopId == workshopId && l.StartWorkDate < endSearch && l.LeftWorkDate > startSreach), + .Join( + _context.LeftWorkList.AsSplitQuery().Where(l => + l.WorkshopId == workshopId && l.StartWorkDate < endSearch && l.LeftWorkDate > startSreach), contractWorkshopEmployee => contractWorkshopEmployee.contractWorkshop.contract.EmployeeId, leftwork => leftwork.EmployeeId, (contractWorkshopEmployee, leftwork) => new { contractWorkshopEmployee, leftwork }) @@ -225,16 +230,15 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos personnelCode => personnelCode.EmployeeId, (contractWorkshopEmployeeleftWork, personnelCode) => new { contractWorkshopEmployeeleftWork, personnelCode }) - .GroupJoin(_context.CheckoutSet.AsSplitQuery(), contractWorkshopEmployeeleftWorkPersonnelCode => contractWorkshopEmployeeleftWorkPersonnelCode .contractWorkshopEmployeeleftWork.contractWorkshopEmployee.contractWorkshop.contract.id, checkout => checkout.ContractId, (contractWorkshopEmployeeleftWorkPersonnelCode, checkout) => new { contractWorkshopEmployeeleftWorkPersonnelCode, checkout }) - .GroupJoin(_context.EmployeeComputeOptionsSet.Where(o => o.WorkshopId == workshopId), - x => x.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork.leftwork.EmployeeId, + x => x.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork.leftwork + .EmployeeId, option => option.EmployeeId, (x, options) => new { x.checkout, x.contractWorkshopEmployeeleftWorkPersonnelCode, options }) .SelectMany( @@ -254,11 +258,11 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos DateTime currentStart = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime(); DateTime currentEnd = ($"{DateTime.Now.ToFarsi().FindeEndOfMonth()}").ToGeorgianDateTime(); - var chekoutCreated = result.checkout.FirstOrDefault(x => x.ContractStart < endSearch && x.ContractEnd > startSreach && x.IsActiveString == "true"); + var chekoutCreated = result.checkout.FirstOrDefault(x => + x.ContractStart < endSearch && x.ContractEnd > startSreach && x.IsActiveString == "true"); if (chekoutCreated != null) { - return new CreateCheckoutListViewModel { Id = chekoutCreated.ContractId, @@ -277,6 +281,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos EmployeeHasCreateCheckout = true }; } + var employeeJoin = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork .contractWorkshopEmployee.employee.id; @@ -287,11 +292,13 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos var startStatusSearch = leftWork.StartWorkDate > startSreach && leftWork.StartWorkDate <= endSearch ? leftWork.StartWorkDate : startSreach; - var endStatusSearch = leftWork.HasLeft && leftWork.LeftWorkDate > startSreach && leftWork.LeftWorkDate <= endSearch + var endStatusSearch = leftWork.HasLeft && leftWork.LeftWorkDate > startSreach && + leftWork.LeftWorkDate <= endSearch ? leftWork.LeftWorkDate.AddDays(-1) : startSreach; bool hasRollCall = - _rollCallEmployeeRepository.HasRollCallRecord(employeeJoin, workshopId, startStatusSearch, endStatusSearch); + _rollCallEmployeeRepository.HasRollCallRecord(employeeJoin, workshopId, startStatusSearch, + endStatusSearch); bool extension = true; bool laterThanEnd = false; @@ -304,11 +311,11 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos .contractWorkshopEmployee.contractWorkshop.contract.ContarctStart; var contractEndGr = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork .contractWorkshopEmployee.contractWorkshop.contract.ContractEnd; + #region HasRollCall if (hasRollCall) { - // اگر ترک کار کرده بود // اگر ترک کارش در بازه انتخاب شده بود if (leftWork.HasLeft && leftWork.LeftWorkDate > startSreach && leftWork.LeftWorkDate <= endSearch) @@ -326,7 +333,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos ? leftWork.StartWorkDate.ToFarsi() : startSreach.ToFarsi(); contractEnd = leftWork.LeftWorkDate.AddDays(-1).ToFarsi(); - } else { @@ -338,7 +344,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos ? leftWork.StartWorkDate.ToFarsi() : startSreach.ToFarsi(); contractEnd = leftWork.LeftWorkDate.AddDays(-1).ToFarsi(); - } } else if (endSearch < currentStart) @@ -361,7 +366,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos : startSreach.ToFarsi(); contractEnd = leftWork.LeftWorkDate.AddDays(-1).ToFarsi(); } - } else if (leftWork.HasLeft && leftWork.LeftWorkDate <= startSreach) { @@ -369,7 +373,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos extension = false; description = "به دلیل ترک کار پیش از تاریخ انتخاب شده مجاز به ایجاد فیش نمی باشید"; leftWorkDate = leftWork.LeftWorkDate.ToFarsi(); - } else if (!leftWork.HasLeft && startSreach == currentStart) { @@ -380,13 +383,9 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos ? leftWork.StartWorkDate.ToFarsi() : startSreach.ToFarsi(); contractEnd = endSearch.ToFarsi(); - } else if (!leftWork.HasLeft && startSreach < currentStart) { - - - if (contractStartGr <= startSreach && contractStartGr > endSearch) { laterThanEnd = true; @@ -401,12 +400,11 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos contractStart = leftWork.StartWorkDate > startSreach ? leftWork.StartWorkDate.ToFarsi() : startSreach.ToFarsi(); - contractEnd = (leftWork.LeftWorkDate > startSreach && leftWork.LeftWorkDate <= endSearch) ? leftWork.LeftWorkDate.AddDays(-1).ToFarsi() : endSearch.ToFarsi(); - + contractEnd = (leftWork.LeftWorkDate > startSreach && leftWork.LeftWorkDate <= endSearch) + ? leftWork.LeftWorkDate.AddDays(-1).ToFarsi() + : endSearch.ToFarsi(); } - } - } #endregion @@ -472,13 +470,11 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos contractEnd = endSearch.ToFarsi(); } } - } #endregion - return new CreateCheckoutListViewModel { Id = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork @@ -502,15 +498,14 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos ContractStart = contractStart, ContractEnd = contractEnd, LeftWorkDate = leftWorkDate, - EmployeeHasCreateCheckout = result.option != null ? result.option.CreateCheckout : result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork.contractWorkshopEmployee.contractWorkshop.workshop.CreateCheckout - + EmployeeHasCreateCheckout = result.option != null + ? result.option.CreateCheckout + : result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork + .contractWorkshopEmployee.contractWorkshop.workshop.CreateCheckout }; - }).Where(x => x.EmployeeHasCreateCheckout).OrderByDescending(x => x.Extension).ToList(); - - Console.WriteLine("process : " + timer.Elapsed); return new CreateCheckoutListViewModel() @@ -521,14 +516,13 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos public async Task CreateCkeckout(Checkout command) { - var creationDates = DateTime.Now; //var result = await _context.Database.ExecuteSqlInterpolatedAsync($"EXEC InsertQuery_Checkout {id},{employeeFullName},{isActiveString},{signature},{fathersName},{nationalCode},{dateOfBirth},{employeeId},{workshopName},{workshopId},{contractNo},{contractStart},{contractEnd},{month},{year},{contractId},{workingHoursId},{monthlySalary},{baseYearsPay},{consumableItems},{housingAllowance},{overtimePay},{nightworkPay},{fridayPay},{missionPay},{shiftPay},{familyAllowance},{bonusesPay},{yearsPay},{leavePay},{insuranceDeduction},{taxDeducation},{installmentDeduction},{salaryAidDeduction},{absenceDeduction},{creationDate},{archiveCode},{personnelCode},{sumOfWorkingDays},{totalClaims},{taxDeducation},{totalPayment}"); var result = (_context.Database - .SqlQuery( - $"EXEC InsertQuery_CreateChekoute {command.EmployeeFullName},{"true"},{command.Signature},{command.FathersName},{command.NationalCode},{command.DateOfBirth},{command.EmployeeId},{command.WorkshopName},{command.WorkshopId},{command.ContractNo},{command.ContractStart},{command.ContractEnd},{command.Month},{command.Year},{command.ContractId},{command.WorkingHoursId},{command.MonthlySalary},{command.BaseYearsPay},{command.ConsumableItems},{command.HousingAllowance},{command.OvertimePay},{command.NightworkPay},{command.FridayPay},{command.MissionPay},{command.ShiftPay},{command.FamilyAllowance},{command.BonusesPay},{command.YearsPay},{command.LeavePay},{command.InsuranceDeduction},{command.TaxDeducation},{command.InstallmentDeduction},{command.SalaryAidDeduction},{command.AbsenceDeduction},{creationDates},{command.ArchiveCode},{command.PersonnelCode},{command.SumOfWorkingDays},{command.TotalClaims},{command.TotalDeductions},{command.TotalPayment},{0},{command.MarriedAllowance},{command.AbsencePeriod},{command.AverageHoursPerDay},{command.CreditLeaves},{command.LeaveCheckout},{command.HasRollCall},{command.OverTimeWorkValue},{command.OverNightWorkValue},{command.FridayWorkValue},{command.RotatingShiftValue},{command.AbsenceValue}, {command.TotalDayOfLeaveCompute},{command.TotalDayOfYearsCompute},{command.TotalDayOfBunosesCompute}") - .AsEnumerable())// این قسمت مهمه! + .SqlQuery( + $"EXEC InsertQuery_CreateChekoute {command.EmployeeFullName},{"true"},{command.Signature},{command.FathersName},{command.NationalCode},{command.DateOfBirth},{command.EmployeeId},{command.WorkshopName},{command.WorkshopId},{command.ContractNo},{command.ContractStart},{command.ContractEnd},{command.Month},{command.Year},{command.ContractId},{command.WorkingHoursId},{command.MonthlySalary},{command.BaseYearsPay},{command.ConsumableItems},{command.HousingAllowance},{command.OvertimePay},{command.NightworkPay},{command.FridayPay},{command.MissionPay},{command.ShiftPay},{command.FamilyAllowance},{command.BonusesPay},{command.YearsPay},{command.LeavePay},{command.InsuranceDeduction},{command.TaxDeducation},{command.InstallmentDeduction},{command.SalaryAidDeduction},{command.AbsenceDeduction},{creationDates},{command.ArchiveCode},{command.PersonnelCode},{command.SumOfWorkingDays},{command.TotalClaims},{command.TotalDeductions},{command.TotalPayment},{0},{command.MarriedAllowance},{command.AbsencePeriod},{command.AverageHoursPerDay},{command.CreditLeaves},{command.LeaveCheckout},{command.HasRollCall},{command.OverTimeWorkValue},{command.OverNightWorkValue},{command.FridayWorkValue},{command.RotatingShiftValue},{command.AbsenceValue}, {command.TotalDayOfLeaveCompute},{command.TotalDayOfYearsCompute},{command.TotalDayOfBunosesCompute}") + .AsEnumerable()) // این قسمت مهمه! .FirstOrDefault(); var entity = await _context.CheckoutSet.FirstOrDefaultAsync(x => x.id == result); @@ -540,7 +534,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos if (command.HasInsuranceShareTheSameAsList) entity.SetInsuranceShare(); await _context.SaveChangesAsync(); - } @@ -682,9 +675,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos query = query.Where(x => x.ContractStartGr >= startyearGr && x.ContractEndGr <= endYearGr).ToList(); if (searchModel.WorkshopId > 0 || searchModel.EmployeeId > 0 || searchModel.EmployerId > 0) return query.OrderByDescending(x => x.ContractEndGr).ThenBy(x => x.PersonnelCodeInt).ToList(); - - - } else if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month) && string.IsNullOrWhiteSpace(searchModel.ContractStart) && @@ -803,7 +793,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos endDate >= x.ContractEndGr && startDate < x.ContractEndGr).ToList(); if (searchModel.WorkshopId > 0 || searchModel.EmployeeId > 0 || searchModel.EmployerId > 0) return query.OrderBy(x => x.PersonnelCodeInt).ToList(); - } else if (!string.IsNullOrWhiteSpace(searchModel.ContractStart) && !string.IsNullOrWhiteSpace(searchModel.ContractEnd) && @@ -817,17 +806,12 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos if (searchModel.WorkshopId > 0 || searchModel.EmployeeId > 0 || searchModel.EmployerId > 0) return query.OrderByDescending(x => x.ContractEndGr).ThenBy(x => x.PersonnelCodeInt).ToList(); - } return query.OrderByDescending(x => x.Id) .ThenByDescending(x => x.Year).ThenBy(x => x.PersonnelCodeInt).Take(100).ToList(); - - - - //foreach(var items in query) //{ // var employeId = _context.WorkshopEmployers?.Where(x => x.WorkshopId == items.WorkshopId) @@ -869,7 +853,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos ContractNo = x.ContractNo, ContractId = x.ContractId, HasRollCall = x.HasRollCall - }); if (searchModel.EmployeeId != 0 && searchModel.WorkshopId != 0) @@ -888,11 +871,12 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos { var start = searchModel.ContractStart.ToGeorgianDateTime(); var end = searchModel.ContractEnd.ToGeorgianDateTime(); - query = query.Where(x => x.ContractStartGr == start && x.ContractEndGr == end && x.EmployeeId == searchModel.EmployeeId && x.WorkshopId == searchModel.WorkshopId); + query = query.Where(x => + x.ContractStartGr == start && x.ContractEndGr == end && x.EmployeeId == searchModel.EmployeeId && + x.WorkshopId == searchModel.WorkshopId); } return query.OrderBy(x => x.ContractStartGr).ToList(); - } public List PrintAll(List id) @@ -971,38 +955,41 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos Amount = s.Amount, AmountDouble = s.Amount.MoneyToDouble(), SalaryAidDateTimeFa = s.SalaryAidDateTimeFa, - SalaryAidDateTimeGe = s.SalaryAidDateTime + SalaryAidDateTimeGe = s.SalaryAidDateTime, }).ToList(), - CheckoutRollCall = item.CheckoutRollCall != null ? new CheckoutRollCallViewModel() - { - TotalPresentTimeSpan = item.CheckoutRollCall.TotalPresentTimeSpan, - TotalBreakTimeSpan = item.CheckoutRollCall.TotalBreakTimeSpan, - TotalWorkingTimeSpan = item.CheckoutRollCall.TotalWorkingTimeSpan, - TotalPaidLeaveTmeSpan = item.CheckoutRollCall.TotalPaidLeaveTmeSpan, - TotalMandatoryTimeSpan = item.CheckoutRollCall.TotalMandatoryTimeSpan, - TotalSickLeaveTimeSpan = item.CheckoutRollCall.TotalSickLeaveTimeSpan, - RollCallDaysCollection = item.CheckoutRollCall.RollCallDaysCollection.Select(d => new CheckoutRollCallDayViewModel() + CheckoutRollCall = item.CheckoutRollCall != null + ? new CheckoutRollCallViewModel() { - WorkingTimeSpan = d.WorkingTimeSpan, - BreakTimeSpan = d.BreakTimeSpan, - IsSliced = d.IsSliced, - IsAbsent = d.IsAbsent, - IsFriday = d.IsFriday, - IsHoliday = d.IsHoliday, - LeaveType = d.LeaveType, - CheckoutId = d.CheckoutId, - Date = d.Date, - FirstEndDate = d.FirstEndDate, - FirstStartDate = d.FirstStartDate, - Id = d.Id, - SecondEndDate = d.SecondEndDate, - SecondStartDate = d.SecondStartDate, - }).ToList(), - - } : null, + TotalPresentTimeSpan = item.CheckoutRollCall.TotalPresentTimeSpan, + TotalBreakTimeSpan = item.CheckoutRollCall.TotalBreakTimeSpan, + TotalWorkingTimeSpan = item.CheckoutRollCall.TotalWorkingTimeSpan, + TotalPaidLeaveTmeSpan = item.CheckoutRollCall.TotalPaidLeaveTmeSpan, + TotalMandatoryTimeSpan = item.CheckoutRollCall.TotalMandatoryTimeSpan, + TotalSickLeaveTimeSpan = item.CheckoutRollCall.TotalSickLeaveTimeSpan, + RollCallDaysCollection = item.CheckoutRollCall.RollCallDaysCollection.Select(d => + new CheckoutRollCallDayViewModel() + { + WorkingTimeSpan = d.WorkingTimeSpan, + BreakTimeSpan = d.BreakTimeSpan, + IsSliced = d.IsSliced, + IsAbsent = d.IsAbsent, + IsFriday = d.IsFriday, + IsHoliday = d.IsHoliday, + LeaveType = d.LeaveType, + CheckoutId = d.CheckoutId, + Date = d.Date, + FirstEndDate = d.FirstEndDate, + FirstStartDate = d.FirstStartDate, + Id = d.Id, + SecondEndDate = d.SecondEndDate, + SecondStartDate = d.SecondStartDate, + }).ToList(), + } + : null, HasAmountConflict = item.HasAmountConflict, EmployeeMandatoryHoursTimeSpan = item.EmployeeMandatoryHours, - EmployeeMandatoryHoursStr = Tools.ToFarsiHoursAndMinutes(Convert.ToInt32(item.EmployeeMandatoryHours.TotalHours), item.EmployeeMandatoryHours.Minutes, "-") + EmployeeMandatoryHoursStr = Tools.ToFarsiHoursAndMinutes( + Convert.ToInt32(item.EmployeeMandatoryHours.TotalHours), item.EmployeeMandatoryHours.Minutes, "-") }; var workshopName = _context.Workshops.FirstOrDefault(x => x.id == ch.WorkshopId); ch.WorkshopName = workshopName.WorkshopName; @@ -1126,9 +1113,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos var totalPaidLeaveTimeSpans = hourlyPaidLeaveTimeSpans.Concat(dailyPaidLeaveTimeSpans); ch.TotalHourlyLeave = new TimeSpan(hourlyPaidLeaveTimeSpans.Sum(x => x.Ticks)); - ch.TotalPaidLeave = new TimeSpan(totalPaidLeaveTimeSpans.Sum(x => x.Ticks)).ToFarsiDaysAndHoursAndMinutes("-"); - - + ch.TotalPaidLeave = + new TimeSpan(totalPaidLeaveTimeSpans.Sum(x => x.Ticks)).ToFarsiDaysAndHoursAndMinutes("-"); #endregion @@ -1146,7 +1132,9 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos ch.TotalBreakTimeStr = ch.CheckoutRollCall.TotalBreakTimeSpan.ToFarsiHoursAndMinutes("-"); ch.TotalPresentTimeStr = ch.CheckoutRollCall.TotalPresentTimeSpan.ToFarsiHoursAndMinutes("-"); ch.TotalMandatoryTimeStr = ch.CheckoutRollCall.TotalMandatoryTimeSpan.ToFarsiHoursAndMinutes("-"); - ch.TotalPaidLeave = Tools.ToFarsiHoursAndMinutes(Convert.ToInt32(ch.CheckoutRollCall.TotalPaidLeaveTmeSpan.TotalHours), ch.CheckoutRollCall.TotalPaidLeaveTmeSpan.Minutes, "-"); + ch.TotalPaidLeave = Tools.ToFarsiHoursAndMinutes( + Convert.ToInt32(ch.CheckoutRollCall.TotalPaidLeaveTmeSpan.TotalHours), + ch.CheckoutRollCall.TotalPaidLeaveTmeSpan.Minutes, "-"); ch.MonthlyRollCall = ch.CheckoutRollCall.RollCallDaysCollection .Select(x => new CheckoutDailyRollCallViewModel { @@ -1167,13 +1155,12 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos BreakTimeString = $"{(int)(x.BreakTimeSpan.TotalHours)}:{x.BreakTimeSpan.Minutes:00}", RollCallDateFa = x.Date.ToFarsi() }).ToList(); - } else { - if (ch.HasRollCall) - ch.MonthlyRollCall = _rollCallRepository.GetEmployeeRollCallsForMonth(ch.EmployeeId, ch.WorkshopId, ch.ContractStartGr, ch.ContractEndGr); + ch.MonthlyRollCall = _rollCallRepository.GetEmployeeRollCallsForMonth(ch.EmployeeId, ch.WorkshopId, + ch.ContractStartGr, ch.ContractEndGr); else { ch.CreateWorkingHoursTemp.ContractStartGr = ch.ContractStartGr; @@ -1182,9 +1169,11 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos ch.CreateWorkingHoursTemp.ContractEnd = ch.ContractEndGr.ToFarsi(); ch.CreateWorkingHoursTemp.EmployeeId = ch.EmployeeId; ch.CreateWorkingHoursTemp.WorkshopId = ch.WorkshopId; - ch.MonthlyRollCall = ConvertStaticToRollCall(ch.CreateWorkingHoursTemp, workshopName.WorkshopHolidayWorking); + ch.MonthlyRollCall = + ConvertStaticToRollCall(ch.CreateWorkingHoursTemp, workshopName.WorkshopHolidayWorking); } } + query.Add(ch); } @@ -1195,6 +1184,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos printNumer += 1; rec.PrintCounter = printNumer; } + return query; } @@ -1220,7 +1210,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos Id = x.id, EmployerFullName = x.FName + " " + x.LName, IsLegal = x.IsLegal, - }).Where(x => emp.Contains(x.Id)).ToList(); if (employerlist.Count > 0) { @@ -1249,7 +1238,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos //} - var leaveList = _context.LeaveList.Where(x => x.WorkshopId == ch.WorkshopId && x.EmployeeId == ch.EmployeeId && x.LeaveType == "استحقاقی"); + var leaveList = _context.LeaveList.Where(x => + x.WorkshopId == ch.WorkshopId && x.EmployeeId == ch.EmployeeId && x.LeaveType == "استحقاقی"); var leaveViewModel = new List(); foreach (var list in leaveList) @@ -1374,7 +1364,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos SalaryAidDateTimeFa = s.SalaryAidDateTimeFa, SalaryAidDateTimeGe = s.SalaryAidDateTime }).ToList(), - }).SingleOrDefault(x => x.Id == id); var workshopName = _context.Workshops.FirstOrDefault(x => x.id == ch.WorkshopId); @@ -1394,6 +1383,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos }; employers.Add(employer); } + ch.MaritalStatus = _context.Employees.Find(ch.EmployeeId)?.MaritalStatus; ch.EmployerList = employers; var workingHours = _workingHoursTempApplication.GetByContractIdConvertToShiftwork4(ch.ContractId); @@ -1488,7 +1478,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos ch.TotalSickLeave = new TimeSpan(sickLeaveTimeSpans.Sum(x => x.Ticks)).ToFarsiDaysAndHoursAndMinutes("-"); - var hourlyPaidLeaveTimeSpans = hourlyPaidLeave.Select(x => TimeOnly.Parse(x.LeaveHourses).ToTimeSpan()).ToList(); + var hourlyPaidLeaveTimeSpans = + hourlyPaidLeave.Select(x => TimeOnly.Parse(x.LeaveHourses).ToTimeSpan()).ToList(); var dailyPaidLeaveTimeSpans = dailyPaidLeave.Select(x => { @@ -1501,20 +1492,19 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos ch.TotalHourlyLeave = new TimeSpan(hourlyPaidLeaveTimeSpans.Sum(x => x.Ticks)); ch.TotalPaidLeave = new TimeSpan(totalPaidLeaveTimeSpans.Sum(x => x.Ticks)).ToFarsiDaysAndHoursAndMinutes("-"); - - #endregion - if (ch.TotalPaymentHide == false) { ch.TotalClaims = ""; ch.TotalDeductions = ""; ch.TotalPayment = ""; } + if (ch.HasRollCall) - ch.MonthlyRollCall = _rollCallRepository.GetEmployeeRollCallsForMonth(ch.EmployeeId, ch.WorkshopId, ch.ContractStartGr, ch.ContractEndGr); + ch.MonthlyRollCall = _rollCallRepository.GetEmployeeRollCallsForMonth(ch.EmployeeId, ch.WorkshopId, + ch.ContractStartGr, ch.ContractEndGr); else { ch.CreateWorkingHoursTemp.ContractStartGr = ch.ContractStartGr; @@ -1523,15 +1513,18 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos ch.CreateWorkingHoursTemp.ContractEnd = ch.ContractEndGr.ToFarsi(); ch.CreateWorkingHoursTemp.EmployeeId = ch.EmployeeId; ch.CreateWorkingHoursTemp.WorkshopId = ch.WorkshopId; - ch.MonthlyRollCall = ConvertStaticToRollCall(ch.CreateWorkingHoursTemp, workshopName.WorkshopHolidayWorking); + ch.MonthlyRollCall = + ConvertStaticToRollCall(ch.CreateWorkingHoursTemp, workshopName.WorkshopHolidayWorking); } + return ch; } - private List ConvertStaticToRollCall(CreateWorkingHoursTemp workingHours, bool workshopHolidayWorking) + private List ConvertStaticToRollCall(CreateWorkingHoursTemp workingHours, + bool workshopHolidayWorking) { var rollCalls = _rollCallMandatoryRepository.ConvertStaticHoursToRollCall(workingHours, - workshopHolidayWorking); + workshopHolidayWorking); var workshopId = workingHours.WorkshopId; var employeeId = workingHours.EmployeeId; var year = Convert.ToInt32(workingHours.ContarctStart.Substring(0, 4)); @@ -1540,8 +1533,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos var endMonthDay = workingHours.ContractEndGr; var leaves = _context.LeaveList.Where(x => - x.WorkshopId == workshopId && x.EmployeeId == employeeId && x.EndLeave.Date >= startMonthDay.Date && - x.StartLeave.Date <= endMonthDay.Date).ToList(); + x.WorkshopId == workshopId && x.EmployeeId == employeeId && x.EndLeave.Date >= startMonthDay.Date && + x.StartLeave.Date <= endMonthDay.Date).ToList(); var firstDayOfCurrentMonth = new DateTime(year, month, 1, new PersianCalendar()); @@ -1561,50 +1554,54 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos int dateRange = (int)(lastDayOfCurrentMonth - firstDayOfCurrentMonth).TotalDays + 1; - var holidays = _context.HolidayItems.Where(x => x.HolidayYear.Contains(year.ToString())).Select(x => new HolidayItemViewModel - { - Id = x.id, - Holidaydate = x.Holidaydate.ToFarsi(), - HolidayId = x.HolidayId, - HolidayYear = x.HolidayYear, - HolidaydateGr = x.Holidaydate - }).ToList(); + var holidays = _context.HolidayItems.Where(x => x.HolidayYear.Contains(year.ToString())).Select(x => + new HolidayItemViewModel + { + Id = x.id, + Holidaydate = x.Holidaydate.ToFarsi(), + HolidayId = x.HolidayId, + HolidayYear = x.HolidayYear, + HolidaydateGr = x.Holidaydate + }).ToList(); if (workshopHolidayWorking) holidays = []; //all the dates from start to end, to be compared with present days to get absent dates - var completeDaysList = Enumerable.Range(0, dateRange).Select(offset => startMonthDay.AddDays(offset).Date).ToList(); + var completeDaysList = Enumerable.Range(0, dateRange).Select(offset => startMonthDay.AddDays(offset).Date) + .ToList(); var absentRecords = completeDaysList - .ExceptBy(rollCalls.Select(x => x.ShiftDate.Date), y => y.Date) - .Select(x => - { - var leave = leaves.FirstOrDefault(y => - y.EmployeeId == employeeId && y.EndLeave.Date >= x.Date && y.StartLeave.Date <= x.Date); - var isHoliday = false; - var isFriday = x.Date.DayOfWeek == DayOfWeek.Friday; - var isNormalWorkingDay = isHoliday == false && isFriday == false; - return new CheckoutDailyRollCallViewModel() + .ExceptBy(rollCalls.Select(x => x.ShiftDate.Date), y => y.Date) + .Select(x => { - StartDate1 = null, - EndDate1 = null, - DateTimeGr = x.Date, - DayOfWeek = x.Date.DayOfWeek.DayOfWeeKToPersian(), - RollCallDateFa = x.Date.ToFarsi(), - LeaveType = leave != null ? leave.LeaveType : "", - IsAbsent = leave == null && isNormalWorkingDay - }; - }); + var leave = leaves.FirstOrDefault(y => + y.EmployeeId == employeeId && y.EndLeave.Date >= x.Date && y.StartLeave.Date <= x.Date); + var isHoliday = false; + var isFriday = x.Date.DayOfWeek == DayOfWeek.Friday; + var isNormalWorkingDay = isHoliday == false && isFriday == false; + return new CheckoutDailyRollCallViewModel() + { + StartDate1 = null, + EndDate1 = null, + DateTimeGr = x.Date, + DayOfWeek = x.Date.DayOfWeek.DayOfWeeKToPersian(), + RollCallDateFa = x.Date.ToFarsi(), + LeaveType = leave != null ? leave.LeaveType : "", + IsAbsent = leave == null && isNormalWorkingDay + }; + }); var presentDays = rollCalls.GroupBy(x => x.ShiftDate.Date).Select(x => { - var orderedRollcalls = x.OrderBy(y => y.ShiftDate).ToList(); var rollCallTimeSpanPerDay = - new TimeSpan(x.Where(y => y.EndDate != null).Sum(y => y.ShiftEndWithoutRest == null ? (y.EndDate - y.StartDate).Value!.Ticks : (y.ShiftEndWithoutRest - y.StartDate)!.Value.Ticks)); + new TimeSpan(x.Where(y => y.EndDate != null).Sum(y => + y.ShiftEndWithoutRest == null + ? (y.EndDate - y.StartDate).Value!.Ticks + : (y.ShiftEndWithoutRest - y.StartDate)!.Value.Ticks)); var breakTimePerDay = new TimeSpan(x.Sum(r => r.BreakTimeSpan.Ticks)); var firstRollCall = orderedRollcalls.FirstOrDefault(); @@ -1618,7 +1615,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos secondRCEndDate = secondRollCall.ShiftEndWithoutRest ?? secondRollCall.EndDate; - return new CheckoutDailyRollCallViewModel() { StartDate1 = firstRollCall?.StartDate?.ToString("HH:mm") ?? "", @@ -1690,12 +1686,15 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos { return new List(); } + var employers = - _context.Employers.Where(x => x.ContractingPartyId == contracingPartyAcc.PersonalContractingPartyId).Select(x => x.id).ToList(); + _context.Employers.Where(x => x.ContractingPartyId == contracingPartyAcc.PersonalContractingPartyId) + .Select(x => x.id).ToList(); if (employers.Count < 1) { return new List(); } + var workshopIds = _context.WorkshopEmployers.Where(x => employers.Contains(x.EmployerId)) .Select(x => x.WorkshopId).ToList(); var checkValid = workshopIds.Any(x => x == searchModel.WorkshopId); @@ -1703,7 +1702,9 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos { return new List(); } + #endregion + var query = _context.CheckoutSet.Include(w => w.CheckoutWarningMessageList) .AsSplitQuery().Select(x => new CheckoutViewModel() { @@ -1745,9 +1746,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos { WarningMessage = wm.WarningMessage, TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, - }).ToList() - }).Where(x => x.WorkshopId == searchModel.WorkshopId); if (searchModel.EmployeeId > 0) { @@ -1756,7 +1755,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos } if (!string.IsNullOrWhiteSpace(searchModel.ContractStart) && - !string.IsNullOrWhiteSpace(searchModel.ContractEnd)) + !string.IsNullOrWhiteSpace(searchModel.ContractEnd)) { var start = searchModel.ContractStart.ToGeorgianDateTime(); var endd = searchModel.ContractEnd.ToGeorgianDateTime(); @@ -1861,16 +1860,20 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos default: y2 = $"{searchModel.Year}/{searchModel.Month}/29"; break; - } } var start = y.ToGeorgianDateTime(); var end = y2.ToGeorgianDateTime(); - query = query.Where(x => x.ContractStartGr >= start && x.ContractStartGr < end && x.ContractEndGr > start && x.ContractEndGr <= end || - x.ContractStartGr <= start && x.ContractEndGr >= end || start <= x.ContractStartGr && end > x.ContractStartGr || end >= x.ContractEndGr && start < x.ContractEndGr); + query = query.Where(x => + x.ContractStartGr >= start && x.ContractStartGr < end && x.ContractEndGr > start && + x.ContractEndGr <= end || + x.ContractStartGr <= start && x.ContractEndGr >= end || + start <= x.ContractStartGr && end > x.ContractStartGr || + end >= x.ContractEndGr && start < x.ContractEndGr); } + if (searchModel.SearchAll) return query.OrderByDescending(x => x.Id).ToList(); switch (searchModel.Sorting) @@ -1901,8 +1904,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos break; default: return query.OrderByDescending(x => x.Id).Skip(searchModel.PageIndex).Take(30).ToList(); } - - } #endregion @@ -1932,12 +1933,10 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos try { - var checkout = _context.CheckoutSet.Where(x => x.id == id)?.FirstOrDefault(); _context.CheckoutSet.Remove(checkout); _context.SaveChanges(); return op.Succcedded(-1, "حذف با موفقیت انجام شد."); - } catch (Exception) { @@ -1955,6 +1954,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos notRemoveList.Add(item); } } + return notRemoveList; } @@ -2014,7 +2014,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos // ); var checkouts = - _context.CheckoutSet.Include(w => w.CheckoutWarningMessageList).Where(x => workshopAcounts.Contains(x.WorkshopId)) + _context.CheckoutSet.Include(w => w.CheckoutWarningMessageList) + .Where(x => workshopAcounts.Contains(x.WorkshopId)) .Join(_context.Workshops.AsSplitQuery(), ch => ch.WorkshopId, workshop => workshop.id, @@ -2037,7 +2038,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos { res.ch, res.workshop, - option = _context.EmployeeComputeOptionsSet.FirstOrDefault(x => x.WorkshopId == res.ch.WorkshopId && x.EmployeeId == res.ch.EmployeeId), + option = _context.EmployeeComputeOptionsSet.FirstOrDefault(x => + x.WorkshopId == res.ch.WorkshopId && x.EmployeeId == res.ch.EmployeeId), res.workshopEmployer, contractingParty = _context.PersonalContractingParties .Include(p => p.Employers) @@ -2054,15 +2056,18 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos hasEmployeeOrWorkshpSearch = true; checkouts = checkouts.Where(x => x.ch.WorkshopId == searchModel.WorkshopId); } + if (searchModel.EmployeeId != 0) { hasEmployeeOrWorkshpSearch = true; checkouts = checkouts.Where(x => x.ch.EmployeeId == searchModel.EmployeeId); } + if (searchModel.EmployerId != 0) { hasEmployeeOrWorkshpSearch = true; - checkouts = checkouts.Where(x => x.contractingParty.Employers.Select(c => c.id).Contains(searchModel.EmployerId)); + checkouts = checkouts.Where(x => + x.contractingParty.Employers.Select(c => c.id).Contains(searchModel.EmployerId)); } if (!string.IsNullOrWhiteSpace(searchModel.ContractNo)) @@ -2072,7 +2077,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos } - //if (searchModel.IsActiveString == null) //{ // checkouts = checkouts.Where(x => x.ch.IsActiveString == "true"); @@ -2104,7 +2108,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos checkouts = checkouts.Where(x => x.ch.ContractStart >= startyearGr && x.ch.ContractEnd <= endYearGr); if (searchModel.WorkshopId > 0 || searchModel.EmployeeId > 0 || searchModel.EmployerId > 0) checkouts = checkouts.OrderByDescending(x => x.ch.ContractEnd); - } else if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month) && string.IsNullOrWhiteSpace(searchModel.ContractStart) && @@ -2224,7 +2227,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos endDate >= x.ch.ContractEnd && startDate < x.ch.ContractEnd); //if (searchModel.WorkshopId > 0 || searchModel.EmployeeId > 0 || searchModel.EmployerId > 0) // checkouts = checkouts.OrderBy(x => x.ch.PersonnelCodeInt); - } else if (!string.IsNullOrWhiteSpace(searchModel.ContractStart) && !string.IsNullOrWhiteSpace(searchModel.ContractEnd) && @@ -2244,105 +2246,96 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos if (!string.IsNullOrEmpty(searchModel.EmployeeName)) { hasSearch = true; - var employeeList = _context.Employees.Where(x => (!string.IsNullOrEmpty(x.FName) && x.FName.StartsWith(searchModel.EmployeeName)) || - (!string.IsNullOrEmpty(x.LName) && x.LName.StartsWith(searchModel.EmployeeName))).Select(x => x.id).ToList(); + var employeeList = _context.Employees.Where(x => + (!string.IsNullOrEmpty(x.FName) && x.FName.StartsWith(searchModel.EmployeeName)) || + (!string.IsNullOrEmpty(x.LName) && x.LName.StartsWith(searchModel.EmployeeName))).Select(x => x.id) + .ToList(); checkouts = checkouts.Where(x => employeeList.Contains(x.ch.EmployeeId)); } - - #endregion if (!hasSearch && !hasEmployeeOrWorkshpSearch) { - return checkouts.Select(x => new CheckoutViewModel() - { - - Id = x.ch.id, - EmployeeFullName = x.ch.EmployeeFullName, - ContractStart = x.ch.ContractStart.ToFarsi(), - ContractEnd = x.ch.ContractEnd.ToFarsi(), - ContractStartGr = x.ch.ContractStart, - ContractEndGr = x.ch.ContractEnd, - PersonnelCode = x.ch.PersonnelCode, - PersonnelCodeInt = Convert.ToInt32(x.ch.PersonnelCode), - ArchiveCode = x.workshop.ArchiveCode, - SumOfWorkingDays = x.ch.SumOfWorkingDays, - WorkshopName = x.workshop.WorkshopName, - Month = x.ch.Month, - Year = x.ch.Year, - ContractNo = x.ch.ContractNo, - ContractId = x.ch.ContractId, - WorkshopId = x.ch.WorkshopId, - EmployeeId = x.ch.EmployeeId, - EmployerId = x.workshopEmployer.EmployerId, - IsActiveString = x.ch.IsActiveString, - Signature = x.ch.Signature, - CreationDate = x.ch.CreationDate, - EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}", - IsBlockCantracingParty = x.contractingParty.IsBlock, - HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, - IsUpdateNeeded = x.ch.IsUpdateNeeded, - CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => new CheckoutWarningMessageModel { - WarningMessage = wm.WarningMessage, - TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, - - }).ToList() - - - }).OrderByDescending(x => x.Id).Take(3000).ToList().DistinctBy(x => x.Id) + Id = x.ch.id, + EmployeeFullName = x.ch.EmployeeFullName, + ContractStart = x.ch.ContractStart.ToFarsi(), + ContractEnd = x.ch.ContractEnd.ToFarsi(), + ContractStartGr = x.ch.ContractStart, + ContractEndGr = x.ch.ContractEnd, + PersonnelCode = x.ch.PersonnelCode, + PersonnelCodeInt = Convert.ToInt32(x.ch.PersonnelCode), + ArchiveCode = x.workshop.ArchiveCode, + SumOfWorkingDays = x.ch.SumOfWorkingDays, + WorkshopName = x.workshop.WorkshopName, + Month = x.ch.Month, + Year = x.ch.Year, + ContractNo = x.ch.ContractNo, + ContractId = x.ch.ContractId, + WorkshopId = x.ch.WorkshopId, + EmployeeId = x.ch.EmployeeId, + EmployerId = x.workshopEmployer.EmployerId, + IsActiveString = x.ch.IsActiveString, + Signature = x.ch.Signature, + CreationDate = x.ch.CreationDate, + EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}", + IsBlockCantracingParty = x.contractingParty.IsBlock, + HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, + IsUpdateNeeded = x.ch.IsUpdateNeeded, + CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => + new CheckoutWarningMessageModel + { + WarningMessage = wm.WarningMessage, + TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, + }).ToList() + }).OrderByDescending(x => x.Id).Take(3000).ToList().DistinctBy(x => x.Id) .OrderByDescending(x => x.Id).ThenByDescending(x => x.Year) .ThenBy(x => x.PersonnelCodeInt) .Take(50).ToList(); - } else if (hasSearch && !hasEmployeeOrWorkshpSearch) { - var result = checkouts.Select(x => new CheckoutViewModel() - { - - Id = x.ch.id, - EmployeeFullName = x.ch.EmployeeFullName, - ContractStart = x.ch.ContractStart.ToFarsi(), - ContractEnd = x.ch.ContractEnd.ToFarsi(), - ContractStartGr = x.ch.ContractStart, - ContractEndGr = x.ch.ContractEnd, - PersonnelCode = x.ch.PersonnelCode, - PersonnelCodeInt = Convert.ToInt32(x.ch.PersonnelCode), - ArchiveCode = x.workshop.ArchiveCode, - SumOfWorkingDays = x.ch.SumOfWorkingDays, - WorkshopName = x.workshop.WorkshopName, - Month = x.ch.Month, - Year = x.ch.Year, - ContractNo = x.ch.ContractNo, - ContractId = x.ch.ContractId, - WorkshopId = x.ch.WorkshopId, - EmployeeId = x.ch.EmployeeId, - EmployerId = x.workshopEmployer.EmployerId, - IsActiveString = x.ch.IsActiveString, - Signature = x.ch.Signature, - CreationDate = x.ch.CreationDate, - EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}", - IsBlockCantracingParty = x.contractingParty.IsBlock, - HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, - IsUpdateNeeded = x.ch.IsUpdateNeeded, - CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => new CheckoutWarningMessageModel { - WarningMessage = wm.WarningMessage, - TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, - - }).ToList() - - }).OrderByDescending(x => x.Id) - .GroupBy(x => x.Id) + Id = x.ch.id, + EmployeeFullName = x.ch.EmployeeFullName, + ContractStart = x.ch.ContractStart.ToFarsi(), + ContractEnd = x.ch.ContractEnd.ToFarsi(), + ContractStartGr = x.ch.ContractStart, + ContractEndGr = x.ch.ContractEnd, + PersonnelCode = x.ch.PersonnelCode, + PersonnelCodeInt = Convert.ToInt32(x.ch.PersonnelCode), + ArchiveCode = x.workshop.ArchiveCode, + SumOfWorkingDays = x.ch.SumOfWorkingDays, + WorkshopName = x.workshop.WorkshopName, + Month = x.ch.Month, + Year = x.ch.Year, + ContractNo = x.ch.ContractNo, + ContractId = x.ch.ContractId, + WorkshopId = x.ch.WorkshopId, + EmployeeId = x.ch.EmployeeId, + EmployerId = x.workshopEmployer.EmployerId, + IsActiveString = x.ch.IsActiveString, + Signature = x.ch.Signature, + CreationDate = x.ch.CreationDate, + EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}", + IsBlockCantracingParty = x.contractingParty.IsBlock, + HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, + IsUpdateNeeded = x.ch.IsUpdateNeeded, + CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => + new CheckoutWarningMessageModel + { + WarningMessage = wm.WarningMessage, + TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, + }).ToList() + }).OrderByDescending(x => x.Id) + .GroupBy(x => x.Id) .Select(x => x.First()); - if ((string.IsNullOrWhiteSpace(searchModel.ContractStart) || string.IsNullOrWhiteSpace(searchModel.ContractEnd)) && string.IsNullOrWhiteSpace(searchModel.Month)) { @@ -2352,7 +2345,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos .OrderByDescending(x => x.ContractStartGr).ToList(); } else if ((string.IsNullOrWhiteSpace(searchModel.ContractStart) || - string.IsNullOrWhiteSpace(searchModel.ContractEnd)) && !string.IsNullOrWhiteSpace(searchModel.Month) && !string.IsNullOrWhiteSpace(searchModel.Year)) + string.IsNullOrWhiteSpace(searchModel.ContractEnd)) && + !string.IsNullOrWhiteSpace(searchModel.Month) && !string.IsNullOrWhiteSpace(searchModel.Year)) { //اگر فقط سال و ماه رو سرچ کرد return result.Take(300) @@ -2360,7 +2354,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos .OrderByDescending(x => x.ContractStartGr).ToList(); } else if (!string.IsNullOrWhiteSpace(searchModel.ContractStart) && - !string.IsNullOrWhiteSpace(searchModel.ContractEnd)) + !string.IsNullOrWhiteSpace(searchModel.ContractEnd)) { //اگر فقط سال و ماه رو سرچ کرد return result.Take(300) @@ -2370,99 +2364,89 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos return result.ToList().OrderByDescending(x => x.Id) .ThenByDescending(x => x.Year).ThenBy(x => x.PersonnelCodeInt).ToList(); - } else if (hasEmployeeOrWorkshpSearch && !hasSearch) { - return checkouts.Select(x => new CheckoutViewModel() - { - - Id = x.ch.id, - EmployeeFullName = x.ch.EmployeeFullName, - ContractStart = x.ch.ContractStart.ToFarsi(), - ContractEnd = x.ch.ContractEnd.ToFarsi(), - ContractStartGr = x.ch.ContractStart, - ContractEndGr = x.ch.ContractEnd, - PersonnelCode = x.ch.PersonnelCode, - PersonnelCodeInt = Convert.ToInt32(x.ch.PersonnelCode), - ArchiveCode = x.workshop.ArchiveCode, - SumOfWorkingDays = x.ch.SumOfWorkingDays, - WorkshopName = x.workshop.WorkshopName, - Month = x.ch.Month, - Year = x.ch.Year, - ContractNo = x.ch.ContractNo, - ContractId = x.ch.ContractId, - WorkshopId = x.ch.WorkshopId, - EmployeeId = x.ch.EmployeeId, - EmployerId = x.workshopEmployer.EmployerId, - IsActiveString = x.ch.IsActiveString, - Signature = x.ch.Signature, - CreationDate = x.ch.CreationDate, - EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}", - IsBlockCantracingParty = x.contractingParty.IsBlock, - HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, - IsUpdateNeeded = x.ch.IsUpdateNeeded, - CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => new CheckoutWarningMessageModel { - WarningMessage = wm.WarningMessage, - TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, - - }).ToList() - - }).GroupBy(x => x.Id).Select(x => x.First()).ToList() + Id = x.ch.id, + EmployeeFullName = x.ch.EmployeeFullName, + ContractStart = x.ch.ContractStart.ToFarsi(), + ContractEnd = x.ch.ContractEnd.ToFarsi(), + ContractStartGr = x.ch.ContractStart, + ContractEndGr = x.ch.ContractEnd, + PersonnelCode = x.ch.PersonnelCode, + PersonnelCodeInt = Convert.ToInt32(x.ch.PersonnelCode), + ArchiveCode = x.workshop.ArchiveCode, + SumOfWorkingDays = x.ch.SumOfWorkingDays, + WorkshopName = x.workshop.WorkshopName, + Month = x.ch.Month, + Year = x.ch.Year, + ContractNo = x.ch.ContractNo, + ContractId = x.ch.ContractId, + WorkshopId = x.ch.WorkshopId, + EmployeeId = x.ch.EmployeeId, + EmployerId = x.workshopEmployer.EmployerId, + IsActiveString = x.ch.IsActiveString, + Signature = x.ch.Signature, + CreationDate = x.ch.CreationDate, + EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}", + IsBlockCantracingParty = x.contractingParty.IsBlock, + HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, + IsUpdateNeeded = x.ch.IsUpdateNeeded, + CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => + new CheckoutWarningMessageModel + { + WarningMessage = wm.WarningMessage, + TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, + }).ToList() + }).GroupBy(x => x.Id).Select(x => x.First()).ToList() .OrderByDescending(x => x.ContractStartGr).ToList(); } else { return checkouts.Select(x => new CheckoutViewModel() - { - - Id = x.ch.id, - EmployeeFullName = x.ch.EmployeeFullName, - ContractStart = x.ch.ContractStart.ToFarsi(), - ContractEnd = x.ch.ContractEnd.ToFarsi(), - ContractStartGr = x.ch.ContractStart, - ContractEndGr = x.ch.ContractEnd, - PersonnelCode = x.ch.PersonnelCode, - PersonnelCodeInt = Convert.ToInt32(x.ch.PersonnelCode), - ArchiveCode = x.workshop.ArchiveCode, - SumOfWorkingDays = x.ch.SumOfWorkingDays, - WorkshopName = x.workshop.WorkshopName, - Month = x.ch.Month, - Year = x.ch.Year, - ContractNo = x.ch.ContractNo, - ContractId = x.ch.ContractId, - WorkshopId = x.ch.WorkshopId, - EmployeeId = x.ch.EmployeeId, - EmployerId = x.workshopEmployer.EmployerId, - IsActiveString = x.ch.IsActiveString, - Signature = x.ch.Signature, - CreationDate = x.ch.CreationDate, - EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}", - IsBlockCantracingParty = x.contractingParty.IsBlock, - HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, - IsUpdateNeeded = x.ch.IsUpdateNeeded, - CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => new CheckoutWarningMessageModel { - WarningMessage = wm.WarningMessage, - TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, - - }).ToList() - - }).GroupBy(x => x.Id) + Id = x.ch.id, + EmployeeFullName = x.ch.EmployeeFullName, + ContractStart = x.ch.ContractStart.ToFarsi(), + ContractEnd = x.ch.ContractEnd.ToFarsi(), + ContractStartGr = x.ch.ContractStart, + ContractEndGr = x.ch.ContractEnd, + PersonnelCode = x.ch.PersonnelCode, + PersonnelCodeInt = Convert.ToInt32(x.ch.PersonnelCode), + ArchiveCode = x.workshop.ArchiveCode, + SumOfWorkingDays = x.ch.SumOfWorkingDays, + WorkshopName = x.workshop.WorkshopName, + Month = x.ch.Month, + Year = x.ch.Year, + ContractNo = x.ch.ContractNo, + ContractId = x.ch.ContractId, + WorkshopId = x.ch.WorkshopId, + EmployeeId = x.ch.EmployeeId, + EmployerId = x.workshopEmployer.EmployerId, + IsActiveString = x.ch.IsActiveString, + Signature = x.ch.Signature, + CreationDate = x.ch.CreationDate, + EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}", + IsBlockCantracingParty = x.contractingParty.IsBlock, + HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, + IsUpdateNeeded = x.ch.IsUpdateNeeded, + CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => + new CheckoutWarningMessageModel + { + WarningMessage = wm.WarningMessage, + TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, + }).ToList() + }).GroupBy(x => x.Id) .Select(x => x.First()).ToList() .OrderByDescending(x => x.Id) .ThenByDescending(x => x.Year).ThenBy(x => x.PersonnelCodeInt).ToList(); - - } - } + public async Task> SearchForMainCheckout(CheckoutSearchModel searchModel) { - - bool hasSearch = false; bool hasEmployeeOrWorkshpSearch = false; //List query = null; @@ -2480,11 +2464,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos .Select(x => x.WorkshopId).ToList(); - - var query = _context.CheckoutSet.Select(x => new CheckoutViewModel() { - Id = x.id, EmployeeFullName = x.EmployeeFullName, //var start = ; @@ -2507,13 +2488,9 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos IsActiveString = x.IsActiveString, Signature = x.Signature, CreationDate = x.CreationDate, - - }); - - if (!string.IsNullOrWhiteSpace(searchModel.ContractNo) && searchModel.ContractId != 0) query = query.Where(x => x.ContractNo == searchModel.ContractNo && x.ContractId == searchModel.ContractId); @@ -2522,11 +2499,13 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos hasEmployeeOrWorkshpSearch = true; query = query.Where(x => x.WorkshopId == searchModel.WorkshopId); } + if (searchModel.EmployeeId != 0) { hasEmployeeOrWorkshpSearch = true; query = query.Where(x => x.EmployeeId == searchModel.EmployeeId); } + if (searchModel.EmployerId != 0) { hasEmployeeOrWorkshpSearch = true; @@ -2570,7 +2549,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos query = query.Where(x => x.ContractStartGr >= startyearGr && x.ContractEndGr <= endYearGr); if (searchModel.WorkshopId > 0 || searchModel.EmployeeId > 0 || searchModel.EmployerId > 0) query = query.OrderByDescending(x => x.ContractEndGr).ThenBy(x => x.PersonnelCodeInt); - } else if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month) && string.IsNullOrWhiteSpace(searchModel.ContractStart) && @@ -2690,7 +2668,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos endDate >= x.ContractEndGr && startDate < x.ContractEndGr); if (searchModel.WorkshopId > 0 || searchModel.EmployeeId > 0 || searchModel.EmployerId > 0) query = query.OrderBy(x => x.PersonnelCodeInt); - } else if (!string.IsNullOrWhiteSpace(searchModel.ContractStart) && !string.IsNullOrWhiteSpace(searchModel.ContractEnd) && @@ -2705,16 +2682,18 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos if (searchModel.WorkshopId > 0 || searchModel.EmployeeId > 0 || searchModel.EmployerId > 0) query = query.OrderByDescending(x => x.ContractEndGr).ThenBy(x => x.PersonnelCodeInt); - } if (!string.IsNullOrEmpty(searchModel.EmployeeName)) { hasSearch = true; - var employeeList = _context.Employees.Where(x => (!string.IsNullOrEmpty(x.FName) && x.FName.StartsWith(searchModel.EmployeeName)) || - (!string.IsNullOrEmpty(x.LName) && x.LName.StartsWith(searchModel.EmployeeName))).Select(x => x.id).ToList(); + var employeeList = _context.Employees.Where(x => + (!string.IsNullOrEmpty(x.FName) && x.FName.StartsWith(searchModel.EmployeeName)) || + (!string.IsNullOrEmpty(x.LName) && x.LName.StartsWith(searchModel.EmployeeName))).Select(x => x.id) + .ToList(); query = query.Where(x => employeeList.Contains(x.EmployeeId)); } + if (hasSearch) return query.OrderByDescending(x => x.Id) .ThenByDescending(x => x.Year).ThenBy(x => x.PersonnelCodeInt).ToList(); @@ -2725,22 +2704,17 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos .ThenByDescending(x => x.Year).ThenBy(x => x.PersonnelCodeInt).Take(50).ToList(); // Console.WriteLine("return" + watch.Elapsed); - - - } #endregion #region Pooya - - public List<(long EmployeeId, DateTime CheckoutStart, DateTime CheckoutEnd)> GetLastCheckoutsByWorkshopIdForWorkFlow(long workshopId, DateTime start, DateTime end) + public List<(long EmployeeId, DateTime CheckoutStart, DateTime CheckoutEnd)> + GetLastCheckoutsByWorkshopIdForWorkFlow(long workshopId, DateTime start, DateTime end) { - - - - return _context.CheckoutSet.AsSplitQuery().Where(x => x.ContractEnd.Date >= start && x.ContractStart.Date <= end && x.WorkshopId == workshopId).Select(x => new + return _context.CheckoutSet.AsSplitQuery().Where(x => + x.ContractEnd.Date >= start && x.ContractStart.Date <= end && x.WorkshopId == workshopId).Select(x => new { EmployeeId = x.EmployeeId, CheckoutEnd = x.ContractEnd, @@ -2758,8 +2732,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos #endregion - - #region ForApi public async Task> GetList(CheckoutSearchModelDto searchModel) @@ -2769,40 +2741,37 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos .Select(x => x.WorkshopId); - var watch = new Stopwatch(); watch.Start(); var checkouts = - ( - from workshop in _context.Workshops.Where(x => workshopAccounts.Contains(x.id)) - join x in _context.CheckoutSet - on workshop.id equals x.WorkshopId - select new - { - Id = x.id, - EmployeeFullName = x.EmployeeFullName, - EmployeeId = x.EmployeeId, - ContractStart = x.ContractStart, - ContractEnd = x.ContractEnd, - PersonnelCode = x.PersonnelCode, - SumOfWorkingDays = x.SumOfWorkingDays, - Month = x.Month, - Year = x.Year, - ContractNo = x.ContractNo, - IsActiveString = x.IsActiveString, - Signature = x.Signature, - IsUpdateNeeded = x.IsUpdateNeeded, - WorkshopId = x.WorkshopId, - ArchiveCode = workshop.ArchiveCode, - WorkshopName = workshop.WorkshopFullName, - WorkshopSignCheckout = workshop.SignCheckout, - - } - - ).OrderByDescending(x => x.Id) - .ThenByDescending(x => x.Year) - .ThenByDescending(x => x.ContractStart) - .ThenBy(x => x.PersonnelCode).AsNoTracking(); + ( + from workshop in _context.Workshops.Where(x => workshopAccounts.Contains(x.id)) + join x in _context.CheckoutSet + on workshop.id equals x.WorkshopId + select new + { + Id = x.id, + EmployeeFullName = x.EmployeeFullName, + EmployeeId = x.EmployeeId, + ContractStart = x.ContractStart, + ContractEnd = x.ContractEnd, + PersonnelCode = x.PersonnelCode, + SumOfWorkingDays = x.SumOfWorkingDays, + Month = x.Month, + Year = x.Year, + ContractNo = x.ContractNo, + IsActiveString = x.IsActiveString, + Signature = x.Signature, + IsUpdateNeeded = x.IsUpdateNeeded, + WorkshopId = x.WorkshopId, + ArchiveCode = workshop.ArchiveCode, + WorkshopName = workshop.WorkshopFullName, + WorkshopSignCheckout = workshop.SignCheckout, + } + ).OrderByDescending(x => x.Id) + .ThenByDescending(x => x.Year) + .ThenByDescending(x => x.ContractStart) + .ThenBy(x => x.PersonnelCode).AsNoTracking(); Console.WriteLine("getList======================= : " + watch.Elapsed); @@ -2817,10 +2786,12 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos .OrderByDescending(x => x.ContractStart) .ThenBy(x => x.PersonnelCode); } + if (!string.IsNullOrWhiteSpace(searchModel.EmployeeFullName)) { checkouts = checkouts.Where(x => x.EmployeeFullName.Contains(searchModel.EmployeeFullName)); } + if (searchModel.EmployerId != 0) { var workshopIds = _context.WorkshopEmployers.Where(e => e.EmployerId == searchModel.EmployerId) @@ -2830,16 +2801,12 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos } - - - //سرچ سال if (!string.IsNullOrWhiteSpace(searchModel.Year) && string.IsNullOrWhiteSpace(searchModel.Month) && (string.IsNullOrWhiteSpace(searchModel.ContractStart) || string.IsNullOrWhiteSpace(searchModel.ContractEnd))) { - var startYear = searchModel.Year + "/01/01"; var startyearGr = startYear.ToGeorgianDateTime(); var endYear = $"{searchModel.Year}/12/01".FindeEndOfMonth(); @@ -2847,15 +2814,14 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos checkouts = checkouts.Where(x => x.ContractStart >= startyearGr && x.ContractEnd <= endYearGr); - if (searchModel.WorkshopId > 0 || !string.IsNullOrWhiteSpace(searchModel.EmployeeFullName) || searchModel.EmployerId > 0) + if (searchModel.WorkshopId > 0 || !string.IsNullOrWhiteSpace(searchModel.EmployeeFullName) || + searchModel.EmployerId > 0) checkouts = checkouts.OrderByDescending(x => x.ContractEnd); - } else if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month) && string.IsNullOrWhiteSpace(searchModel.ContractStart) && string.IsNullOrWhiteSpace(searchModel.ContractEnd)) { - //سرچ سال و ماه string y1 = $"{searchModel.Year}/{searchModel.Month}/01"; var startDate = y1.ToGeorgianDateTime(); @@ -2969,31 +2935,30 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos endDate >= x.ContractEnd && startDate < x.ContractEnd); //if (searchModel.WorkshopId > 0 || searchModel.EmployeeId > 0 || searchModel.EmployerId > 0) // checkouts = checkouts.OrderBy(x => x.PersonnelCodeInt); - } else if (!string.IsNullOrWhiteSpace(searchModel.ContractStart) && !string.IsNullOrWhiteSpace(searchModel.ContractEnd) && string.IsNullOrWhiteSpace(searchModel.Year) && string.IsNullOrWhiteSpace(searchModel.Month)) { - //سرچ تاریخ var start = searchModel.ContractStart.ToGeorgianDateTime(); var endd = searchModel.ContractEnd.ToGeorgianDateTime(); checkouts = checkouts.Where(x => x.ContractStart >= start && x.ContractStart <= endd); - if (searchModel.WorkshopId > 0 || !string.IsNullOrWhiteSpace(searchModel.EmployeeFullName) || searchModel.EmployerId > 0) + if (searchModel.WorkshopId > 0 || !string.IsNullOrWhiteSpace(searchModel.EmployeeFullName) || + searchModel.EmployerId > 0) checkouts = checkouts.OrderByDescending(x => x.ContractEnd).ThenBy(x => x.PersonnelCode); } - #endregion watch.Reset(); watch.Start(); - var checkoutQueryFilter = await checkouts.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync(); + var checkoutQueryFilter = + await checkouts.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync(); Console.WriteLine("pagination===================== : " + watch.Elapsed); var employers = await @@ -3019,7 +2984,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos { var warningMessage = warningMessages.Where(wm => wm.CheckoutId == x.Id); var empl = employers.First(em => em.WorkshopId == x.WorkshopId); - var isBlock = contractnigParties.Any(cp => cp.id == empl.Employer.ContractingPartyId && cp.IsBlock == "true"); + var isBlock = + contractnigParties.Any(cp => cp.id == empl.Employer.ContractingPartyId && cp.IsBlock == "true"); var option = options.FirstOrDefault(o => o.WorkshopId == x.WorkshopId && o.EmployeeId == x.EmployeeId); return new CheckoutDto { @@ -3044,13 +3010,10 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos { WarningMessage = wm.WarningMessage, TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, - }).ToList() }; - - }) - .ToList(); + .ToList(); var count = await checkouts.CountAsync(); Console.WriteLine("FinalList================================ : " + watch.Elapsed); return new PagedResult() @@ -3061,7 +3024,6 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos } - public async Task> CheckoutPrint(List ids) { if (ids.Count == 0) @@ -3082,12 +3044,13 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos EmployerFullName = x.Employer.FullName }).ToListAsync(); - var employees = (from x in _context.Employees.Where(x => getCheckouts.Select(ch => ch.EmployeeId).Contains(x.id)) - select new - { - EmployeeId = x.id, - MaritalStatus = x.MaritalStatus - } + var employees = + (from x in _context.Employees.Where(x => getCheckouts.Select(ch => ch.EmployeeId).Contains(x.id)) + select new + { + EmployeeId = x.id, + MaritalStatus = x.MaritalStatus + } ).AsNoTracking(); var workshop = await _context.Workshops.AsNoTracking().FirstAsync(x => x.id == getCheckouts.First().WorkshopId); var showSumOfPayments = workshop.TotalPaymentHide; @@ -3099,7 +3062,9 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos var result = getCheckouts.Select(x => { var leftCheck = leftWorks - .FirstOrDefault(l => l.EmployeeId == x.EmployeeId && x.ContractStart >= l.StartWorkDate && x.ContractStart <= l.LeftWorkDate && l.HasLeft); + .FirstOrDefault(l => + l.EmployeeId == x.EmployeeId && x.ContractStart >= l.StartWorkDate && + x.ContractStart <= l.LeftWorkDate && l.HasLeft); bool hasLeft = false; var leftWorkDate = ""; var lastDayOfWork = ""; @@ -3112,8 +3077,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos leftWorkDate = leftCheck.LeftWorkDate.ToFarsi(); lastDayOfWork = x.ContractEnd.ToFarsi(); } - } + var overTimeWorkValue = x.OvertimePay > 0 ? x.OverTimeWorkValue : "-"; var overNightWorkValue = x.NightworkPay > 0 ? x.OverNightWorkValue : "-"; var fridayWorkValue = x.FridayPay > 0 ? x.FridayWorkValue : "-"; @@ -3130,6 +3095,59 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos totalClaims = x.TotalClaims; } + List rollcalls = []; + TimeSpan TotalPresentTimeSpan; + TimeSpan TotalBreakTimeSpan; + TimeSpan TotalWorkingTimeSpan; + TimeSpan TotalPaidLeaveTmeSpan; + TimeSpan TotalMandatoryTimeSpan; + TimeSpan TotalSickLeaveTimeSpan; + if (x.CheckoutRollCall != null) + { + TotalMandatoryTimeSpan = x.CheckoutRollCall.TotalPresentTimeSpan; + TotalBreakTimeSpan = x.CheckoutRollCall.TotalBreakTimeSpan; + TotalWorkingTimeSpan = x.CheckoutRollCall.TotalWorkingTimeSpan; + TotalPaidLeaveTmeSpan = x.CheckoutRollCall.TotalPaidLeaveTmeSpan; + TotalMandatoryTimeSpan = x.CheckoutRollCall.TotalMandatoryTimeSpan; + TotalSickLeaveTimeSpan = x.CheckoutRollCall.TotalSickLeaveTimeSpan; + rollcalls = x.CheckoutRollCall.RollCallDaysCollection.Select(r => new CheckoutPrintRollCallDto() + { + DayOfWeek = r.Date.DayOfWeek.DayOfWeeKToPersian(), + StartDate1 = r.FirstStartDate, + EndDate1 = r.FirstEndDate, + StartDate2 = r.SecondStartDate, + EndDate2 = r.SecondEndDate, + IsSliced = r.IsSliced, + LeaveType = r.LeaveType, + IsAbsent = r.IsAbsent, + IsFriday = r.IsFriday, + IsHoliday = r.IsHoliday, + TotalWorkingHours = $"{(int)(r.WorkingTimeSpan.TotalHours)}:{r.WorkingTimeSpan.Minutes:00}", + BreakTimeString = $"{(int)(r.BreakTimeSpan.TotalHours)}:{r.BreakTimeSpan.Minutes:00}", + RollCallDateFa = r.Date.ToFarsi() + + }).ToList(); + } + else + { + + if (x.HasRollCall) + x.MonthlyRollCall = _rollCallRepository.GetEmployeeRollCallsForMonth(x.EmployeeId, x.WorkshopId, + x.ContractStartGr, x.ContractEndGr); + else + { + x.CreateWorkingHoursTemp.ContractStartGr = x.ContractStartGr; + x.CreateWorkingHoursTemp.ContractEndGr = x.ContractEndGr; + x.CreateWorkingHoursTemp.ContarctStart = x.ContractStartGr.ToFarsi(); + x.CreateWorkingHoursTemp.ContractEnd = x.ContractEndGr.ToFarsi(); + x.CreateWorkingHoursTemp.EmployeeId = x.EmployeeId; + x.CreateWorkingHoursTemp.WorkshopId = x.WorkshopId; + x.MonthlyRollCall = + ConvertStaticToRollCall(x.CreateWorkingHoursTemp, + workshopName.WorkshopHolidayWorking); + } + } + return new CheckoutPrintDto() { Id = x.id, @@ -3137,6 +3155,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos // هدر فیش // اطلاعات هویتی // اطلاعات کارگاه + #region Header EmployeeFullName = x.EmployeeFullName, @@ -3152,6 +3171,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos HasLeft = hasLeft, LastDayOfWork = lastDayOfWork, LeftWorkDate = leftWorkDate, + #endregion //جدول مطالبات و کسورات @@ -3159,82 +3179,161 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos #region PaymentAndDeductionTable //مطالبات - PaymentList = new List - { + PaymentList = + [ new PaymentAndDeductionList() - {RowNumber = 1, Title = "حقوق و مزد", Value = $"{x.SumOfWorkingDays}", Amount = x.MonthlySalary.ToMoneyCheckZero(),}, + { + RowNumber = 1, Title = "حقوق و مزد", Value = $"{x.SumOfWorkingDays}", + Amount = x.MonthlySalary.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() - {RowNumber = 2, Title = "پایه سنوات", Value = "-", Amount = x.BaseYearsPay.ToMoneyCheckZero(),}, + { + RowNumber = 2, Title = "پایه سنوات", Value = "-", Amount = x.BaseYearsPay.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() - {RowNumber = 3, Title = "کمک هزینه اقلام مصرفی خانوار", Value = "-", Amount = x.ConsumableItems.ToMoneyCheckZero(),}, + { + RowNumber = 3, Title = "کمک هزینه اقلام مصرفی خانوار", Value = "-", + Amount = x.ConsumableItems.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() - {RowNumber = 4, Title = "کمک هزینه مسکن", Value = "-", Amount = x.HousingAllowance.ToMoneyCheckZero(),}, + { + RowNumber = 4, Title = "کمک هزینه مسکن", Value = "-", + Amount = x.HousingAllowance.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() - {RowNumber = 5, Title = "فوق العاده اضافه کاری", Value = overTimeWorkValue, Amount = x.OvertimePay.ToMoneyCheckZero(),}, + { + RowNumber = 5, Title = "فوق العاده اضافه کاری", Value = overTimeWorkValue, + Amount = x.OvertimePay.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() - {RowNumber = 6, Title = "فوق العاده شب کاری", Value = overNightWorkValue, Amount = x.NightworkPay.ToMoneyCheckZero(),}, + { + RowNumber = 6, Title = "فوق العاده شب کاری", Value = overNightWorkValue, + Amount = x.NightworkPay.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() - {RowNumber = 7, Title = "فوق العاده جمعه کاری", Value = fridayWorkValue, Amount = x.FridayPay.ToMoneyCheckZero(),}, + { + RowNumber = 7, Title = "فوق العاده جمعه کاری", Value = fridayWorkValue, + Amount = x.FridayPay.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() - {RowNumber = 8, Title = "فوق العاده ماموریت", Value = "-", Amount = "-",}, + { RowNumber = 8, Title = "فوق العاده ماموریت", Value = "-", Amount = "-", }, + new PaymentAndDeductionList() - {RowNumber = 9, Title = "فوق العاده نوبت کاری", Value = rotatingShiftValue, Amount = x.ShiftPay.ToMoneyCheckZero(),}, + { + RowNumber = 9, Title = "فوق العاده نوبت کاری", Value = rotatingShiftValue, + Amount = x.ShiftPay.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() - {RowNumber = 10, Title = "کمک هزینه عائله مندی", Value = "-", Amount = x.FamilyAllowance.ToMoneyCheckZero(),}, + { + RowNumber = 10, Title = "کمک هزینه عائله مندی", Value = "-", + Amount = x.FamilyAllowance.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() - {RowNumber = 11, Title = "حق تاهل", Value = maritalStatus, Amount = x.MarriedAllowance.ToMoneyCheckZero(),}, + { + RowNumber = 11, Title = "حق تاهل", Value = maritalStatus, + Amount = x.MarriedAllowance.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() - {RowNumber = 12, Title = "پاداش", Value = "-", Amount = rewardPay,}, + { RowNumber = 12, Title = "پاداش", Value = "-", Amount = rewardPay, }, + new PaymentAndDeductionList() - {RowNumber = 13, Title = "عیدی و پاداش", Value = "-", Amount = x.BonusesPay.ToMoneyCheckZero(),}, + { + RowNumber = 13, Title = "عیدی و پاداش", Value = "-", + Amount = x.BonusesPay.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() - {RowNumber = 14, Title = "سنوات", Value = "-", Amount = x.YearsPay.ToMoneyCheckZero(),}, + { + RowNumber = 14, Title = "سنوات", Value = "-", + Amount = x.YearsPay.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() - {RowNumber = 15, Title = "مزد مرخصی", Value = "-", Amount = x.LeavePay.ToMoneyCheckZero(),}, - }, + { + RowNumber = 15, Title = "مزد مرخصی", Value = "-", + Amount = x.LeavePay.ToMoneyCheckZero(), + } + ], //کسورات - DeductionList = new List - { + DeductionList = + [ new PaymentAndDeductionList() - {RowNumber = 1, Title = "حق بیمه سهم کارگر", Value = "-", Amount = x.InsuranceDeduction.ToMoneyCheckZero(),}, - new PaymentAndDeductionList() - {RowNumber = 2, Title = "مالیات بر حقوق", Value = "-", Amount = x.TaxDeducation.ToMoneyCheckZero(),}, - new PaymentAndDeductionList() - {RowNumber = 3, Title = "قسط تسهیلات", Value = "-", Amount = x.InstallmentDeduction.ToMoneyCheckZero(),}, - new PaymentAndDeductionList() - {RowNumber = 4, Title = "مساعده", Value = "-", Amount = x.SalaryAidDeduction.ToMoneyCheckZero(),}, - new PaymentAndDeductionList() - {RowNumber = 5, Title = "غیبت", Value = "-", Amount = "-",}, - }, + { + RowNumber = 1, Title = "حق بیمه سهم کارگر", Value = "-", + Amount = x.InsuranceDeduction.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() + { + RowNumber = 2, Title = "مالیات بر حقوق", Value = "-", + Amount = x.TaxDeducation.ToMoneyCheckZero(), + }, + new PaymentAndDeductionList() + { + RowNumber = 3, Title = "قسط تسهیلات", Value = "-", + Amount = x.InstallmentDeduction.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 4, Title = "مساعده", Value = "-", Amount = x.SalaryAidDeduction.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { RowNumber = 5, Title = "غیبت", Value = "-", Amount = "-", } + ], + TotalPayment = totalPayment, TotalDeductions = totalDeduction, TotalClaims = totalClaims, + #endregion //لیست ورود و خروج پرسنل //اطلاعات ساعات کار و موظقی + #region RollCallData - - + MonthlyRollCall =rollcalls, #endregion //اقساط - مساعده - #region SalaryAidAndInstallmentData + #region SalaryAidAndInstallmentData + SalaryAids= x.SalaryAids.Select(s=> new CheckoutPrintSalaryAidDto() + { + Amount = s.Amount, + SalaryAidDateTimeFa = s.SalaryAidDateTimeFa, + }).ToList(), + + Installments = x.LoanInstallments.Select(i=>new CheckoutPrintInstallmentDto() + { + Amount = i.AmountForMonth, + RemainingAmount = i.LoanRemaining, + LoanAmount = i.LoanAmount + }).ToList(), + + #endregion }; - - - }).ToList(); Console.WriteLine("print : " + watch.Elapsed); return result; } + #endregion } \ No newline at end of file From a68b879e957328f36c37c8eb1a5dfa56a4d1ee28 Mon Sep 17 00:00:00 2001 From: mahan Date: Tue, 20 Jan 2026 19:58:49 +0330 Subject: [PATCH 6/7] comment the unfinished rollcall --- .../Repository/CheckoutRepository.cs | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs index 2ea7aebf..916e09bc 100644 --- a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs @@ -3147,21 +3147,21 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos else { - if (x.HasRollCall) - x.MonthlyRollCall = _rollCallRepository.GetEmployeeRollCallsForMonth(x.EmployeeId, x.WorkshopId, - x.ContractStartGr, x.ContractEndGr); - else - { - x.CreateWorkingHoursTemp.ContractStartGr = x.ContractStartGr; - x.CreateWorkingHoursTemp.ContractEndGr = x.ContractEndGr; - x.CreateWorkingHoursTemp.ContarctStart = x.ContractStartGr.ToFarsi(); - x.CreateWorkingHoursTemp.ContractEnd = x.ContractEndGr.ToFarsi(); - x.CreateWorkingHoursTemp.EmployeeId = x.EmployeeId; - x.CreateWorkingHoursTemp.WorkshopId = x.WorkshopId; - x.MonthlyRollCall = - ConvertStaticToRollCall(x.CreateWorkingHoursTemp, - workshopName.WorkshopHolidayWorking); - } + // if (x.HasRollCall) + // x.MonthlyRollCall = _rollCallRepository.GetEmployeeRollCallsForMonth(x.EmployeeId, x.WorkshopId, + // x.ContractStartGr, x.ContractEndGr); + // else + // { + // x.CreateWorkingHoursTemp.ContractStartGr = x.ContractStartGr; + // x.CreateWorkingHoursTemp.ContractEndGr = x.ContractEndGr; + // x.CreateWorkingHoursTemp.ContarctStart = x.ContractStartGr.ToFarsi(); + // x.CreateWorkingHoursTemp.ContractEnd = x.ContractEndGr.ToFarsi(); + // x.CreateWorkingHoursTemp.EmployeeId = x.EmployeeId; + // x.CreateWorkingHoursTemp.WorkshopId = x.WorkshopId; + // x.MonthlyRollCall = + // ConvertStaticToRollCall(x.CreateWorkingHoursTemp, + // workshopName.WorkshopHolidayWorking); + // } } return new CheckoutPrintDto() From 7a79343b2ffac5c2dda9cb1462dd424e15a3291a Mon Sep 17 00:00:00 2001 From: gozareshgir Date: Wed, 21 Jan 2026 19:20:15 +0330 Subject: [PATCH 7/7] GetContractsToCreateCheckout Completed --- .../Dto/ContractsListToCreateCheckoutDto.cs | 53 + .../Checkout/Dto/CreateCheckoutStatus.cs | 22 + .../Checkout/ICheckoutApplication.cs | 12 + .../CheckoutApplication.cs | 1200 +++++++++-------- .../Repository/CheckoutRepository.cs | 41 +- .../Admin/Controllers/CheckoutController.cs | 31 +- ServiceHost/Program.cs | 18 +- .../WorkFlow/IWorkFlowApplication.cs | 11 + .../WorkFlowApplication.cs | 61 + 9 files changed, 856 insertions(+), 593 deletions(-) create mode 100644 CompanyManagment.App.Contracts/Checkout/Dto/ContractsListToCreateCheckoutDto.cs create mode 100644 CompanyManagment.App.Contracts/Checkout/Dto/CreateCheckoutStatus.cs diff --git a/CompanyManagment.App.Contracts/Checkout/Dto/ContractsListToCreateCheckoutDto.cs b/CompanyManagment.App.Contracts/Checkout/Dto/ContractsListToCreateCheckoutDto.cs new file mode 100644 index 00000000..e3d5c6c9 --- /dev/null +++ b/CompanyManagment.App.Contracts/Checkout/Dto/ContractsListToCreateCheckoutDto.cs @@ -0,0 +1,53 @@ +namespace CompanyManagment.App.Contracts.Checkout.Dto; + +public class ContractsListToCreateCheckoutDto +{ + /// + /// آی دی قراداد + /// + public long Id { get; set; } + + /// + /// کد پرسنلی + /// + public long PersonnelCode { get; set; } + + /// + /// شماره قرارداد + /// + public string ContractNo { get; set; } + + //نام کارگاه + public string WorkshopName { get; set; } + + /// + /// نام پرسنل + /// + public string EmployeeName { get; set; } + + /// + /// تاریخ شوع فیش + /// + public string ContractStart { get; set; } + /// + /// تاریخ پایان فیش + /// + public string ContractEnd { get; set; } + + /// + /// تاریخ ترک کار + /// + public string LeftWorkDate { get; set; } + + /// + /// وضعیت ایجاد فیش + /// + public CreateCheckoutStatus CreateCheckoutStatus { get; set; } + + + /// + /// توضیحات + /// + public string Description { get; set; } + +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Checkout/Dto/CreateCheckoutStatus.cs b/CompanyManagment.App.Contracts/Checkout/Dto/CreateCheckoutStatus.cs new file mode 100644 index 00000000..f63a750c --- /dev/null +++ b/CompanyManagment.App.Contracts/Checkout/Dto/CreateCheckoutStatus.cs @@ -0,0 +1,22 @@ +namespace CompanyManagment.App.Contracts.Checkout.Dto; + +/// +/// وضعیت ایجاد فیش +/// +public enum CreateCheckoutStatus +{ + /// + /// آماده ایجاد + /// + ReadyToCreate, + + /// + /// غیر مجاز + /// + NotValid, + + /// + /// دارای فیش حقوقی + /// + HasCheckout, +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs b/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs index 93208f9d..5b938ead 100644 --- a/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs +++ b/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs @@ -95,6 +95,18 @@ public interface ICheckoutApplication /// /// Task> CheckoutPrint(List ids); + + /// + /// دریافت لیست قراردادها برای ایجاد فیش حقوقی + /// + /// + /// + /// + /// + /// + Task>> GetContractToCreateCheckout(long workshopId, + string year, string month, long employeeId); + #endregion } diff --git a/CompanyManagment.Application/CheckoutApplication.cs b/CompanyManagment.Application/CheckoutApplication.cs index 37ac1a18..705ee241 100644 --- a/CompanyManagment.Application/CheckoutApplication.cs +++ b/CompanyManagment.Application/CheckoutApplication.cs @@ -34,135 +34,136 @@ namespace CompanyManagment.Application; public class CheckoutApplication : ICheckoutApplication { - private readonly ICheckoutRepository _checkoutRepository; - private readonly IYearlySalaryRepository _yearlySalaryRepository; - private readonly ILeftWorkRepository _leftWorkRepository; - private readonly IEmployerRepository _employerRepository; - private readonly IPersonalContractingPartyApp _contractingPartyApp; - private readonly ILeaveApplication _leaveApplication; - private readonly IMandatoryHoursApplication _mandatoryHoursApplication; - private readonly IRollCallMandatoryRepository _rollCallMandatoryRepository; - private readonly IRollCallRepository _rollCallRepository; - private readonly IHolidayItemApplication _holidayItemApplication; - private readonly IWorkingHoursTempRepository _workingHoursTempRepository; - private readonly IWorkshopRepository _workshopRepository; + private readonly ICheckoutRepository _checkoutRepository; + private readonly IYearlySalaryRepository _yearlySalaryRepository; + private readonly ILeftWorkRepository _leftWorkRepository; + private readonly IEmployerRepository _employerRepository; + private readonly IPersonalContractingPartyApp _contractingPartyApp; + private readonly ILeaveApplication _leaveApplication; + private readonly IMandatoryHoursApplication _mandatoryHoursApplication; + private readonly IRollCallMandatoryRepository _rollCallMandatoryRepository; + private readonly IRollCallRepository _rollCallRepository; + private readonly IHolidayItemApplication _holidayItemApplication; + private readonly IWorkingHoursTempRepository _workingHoursTempRepository; + private readonly IWorkshopRepository _workshopRepository; + public CheckoutApplication(ICheckoutRepository checkoutRepository, IYearlySalaryRepository yearlySalaryRepository, - ILeftWorkRepository leftWorkRepository, - IEmployerRepository employerRepository, IPersonalContractingPartyApp contractingPartyApp, ILeaveApplication leaveApplication, IMandatoryHoursApplication mandatoryHoursApplication, IRollCallMandatoryRepository rollCallMandatoryRepository, IRollCallRepository rollCallRepository, IHolidayItemApplication holidayItemApplication, IWorkingHoursTempRepository workingHoursTempRepository, IWorkshopRepository workshopRepository) - { - _checkoutRepository = checkoutRepository; - _yearlySalaryRepository = yearlySalaryRepository; - _leftWorkRepository = leftWorkRepository; - _employerRepository = employerRepository; - _contractingPartyApp = contractingPartyApp; - _leaveApplication = leaveApplication; - _mandatoryHoursApplication = mandatoryHoursApplication; - _rollCallMandatoryRepository = rollCallMandatoryRepository; - _rollCallRepository = rollCallRepository; - _holidayItemApplication = holidayItemApplication; + ILeftWorkRepository leftWorkRepository, + IEmployerRepository employerRepository, IPersonalContractingPartyApp contractingPartyApp, ILeaveApplication leaveApplication, IMandatoryHoursApplication mandatoryHoursApplication, IRollCallMandatoryRepository rollCallMandatoryRepository, IRollCallRepository rollCallRepository, IHolidayItemApplication holidayItemApplication, IWorkingHoursTempRepository workingHoursTempRepository, IWorkshopRepository workshopRepository) + { + _checkoutRepository = checkoutRepository; + _yearlySalaryRepository = yearlySalaryRepository; + _leftWorkRepository = leftWorkRepository; + _employerRepository = employerRepository; + _contractingPartyApp = contractingPartyApp; + _leaveApplication = leaveApplication; + _mandatoryHoursApplication = mandatoryHoursApplication; + _rollCallMandatoryRepository = rollCallMandatoryRepository; + _rollCallRepository = rollCallRepository; + _holidayItemApplication = holidayItemApplication; _workingHoursTempRepository = workingHoursTempRepository; _workshopRepository = workshopRepository; } - [SuppressMessage("ReSharper.DPA", "DPA0007: Large number of DB records", MessageId = "count: 241")] - public void Create(CreateCheckout command) - { - var operation = new OperationResult(); - var syear = Convert.ToInt32(command.ContractStart.Substring(0, 4)); - var smonth = Convert.ToInt32(command.ContractStart.Substring(5, 2)); - string month = string.Empty; - switch (smonth) - { - case 1: - month = "فروردین"; - break; - case 2: - month = "اردیبهشت"; - break; - case 3: - month = "خرداد"; - break; - case 4: - month = "تیر"; - break; - case 5: - month = "مرداد"; - break; - case 6: - month = "شهریور"; - break; - case 7: - month = "مهر"; - break; - case 8: - month = "آبان"; - break; - case 9: - month = "آذر"; - break; - case 10: - month = "دی"; - break; - case 11: - month = "بهمن"; - break; - case 12: - month = "اسفند"; - break; - } - var year = syear.ToString(); + [SuppressMessage("ReSharper.DPA", "DPA0007: Large number of DB records", MessageId = "count: 241")] + public void Create(CreateCheckout command) + { + var operation = new OperationResult(); + var syear = Convert.ToInt32(command.ContractStart.Substring(0, 4)); + var smonth = Convert.ToInt32(command.ContractStart.Substring(5, 2)); + string month = string.Empty; + switch (smonth) + { + case 1: + month = "فروردین"; + break; + case 2: + month = "اردیبهشت"; + break; + case 3: + month = "خرداد"; + break; + case 4: + month = "تیر"; + break; + case 5: + month = "مرداد"; + break; + case 6: + month = "شهریور"; + break; + case 7: + month = "مهر"; + break; + case 8: + month = "آبان"; + break; + case 9: + month = "آذر"; + break; + case 10: + month = "دی"; + break; + case 11: + month = "بهمن"; + break; + case 12: + month = "اسفند"; + break; + } + var year = syear.ToString(); - #region SickLeav + #region SickLeav - //var serachModel = new LeaveSearchModel() - //{ - // EmployeeId = command.EmployeeId, - // WorkshopId = command.WorkshopId, - // LeaveType = "استعلاجی", - // StartLeave = command.ContractStart, - // EndLeave = command.ContractEnd, - // IsAccepted = true, - //}; - //var leavList = _leaveApplication.search(serachModel); - // int sickLeaveCount = 0; - //if (leavList.Count > 0) - //{ + //var serachModel = new LeaveSearchModel() + //{ + // EmployeeId = command.EmployeeId, + // WorkshopId = command.WorkshopId, + // LeaveType = "استعلاجی", + // StartLeave = command.ContractStart, + // EndLeave = command.ContractEnd, + // IsAccepted = true, + //}; + //var leavList = _leaveApplication.search(serachModel); + // int sickLeaveCount = 0; + //if (leavList.Count > 0) + //{ - // foreach (var leave in leavList) - // { - // if (leave.StartLeaveGr < command.ContractStartGr && leave.EndLeaveGr <= command.ContractEndGr) - // { - // int res = (int)((leave.EndLeaveGr - command.ContractStartGr).TotalDays +1); - // sickLeaveCount += res; - // } - // else if (leave.StartLeaveGr >= command.ContractStartGr && leave.EndLeaveGr > command.ContractEndGr) - // { - // int res = (int)((command.ContractEndGr - leave.StartLeaveGr).TotalDays + 1); - // sickLeaveCount += res; - // } - // else - // { - // int res = (int)((leave.EndLeaveGr - leave.StartLeaveGr).TotalDays + 1); - // sickLeaveCount += res; - // } + // foreach (var leave in leavList) + // { + // if (leave.StartLeaveGr < command.ContractStartGr && leave.EndLeaveGr <= command.ContractEndGr) + // { + // int res = (int)((leave.EndLeaveGr - command.ContractStartGr).TotalDays +1); + // sickLeaveCount += res; + // } + // else if (leave.StartLeaveGr >= command.ContractStartGr && leave.EndLeaveGr > command.ContractEndGr) + // { + // int res = (int)((command.ContractEndGr - leave.StartLeaveGr).TotalDays + 1); + // sickLeaveCount += res; + // } + // else + // { + // int res = (int)((leave.EndLeaveGr - leave.StartLeaveGr).TotalDays + 1); + // sickLeaveCount += res; + // } - // } - //} + // } + //} - #endregion + #endregion - var dayliWage = command.DayliWage.MoneyToDouble(); - // کمک هزینه اقلام - var consumableItem = command.ConsumableItems.MoneyToDouble(); - //حق اولاد - var familyAllowance = command.FamilyAllowance.MoneyToDouble(); - //کمک هزینه مسکن - var housingAllowance = command.HousingAllowance.MoneyToDouble(); - //حق تاهل - var marriedAllowance = command.MarriedAllowance.MoneyToDouble(); + var dayliWage = command.DayliWage.MoneyToDouble(); + // کمک هزینه اقلام + var consumableItem = command.ConsumableItems.MoneyToDouble(); + //حق اولاد + var familyAllowance = command.FamilyAllowance.MoneyToDouble(); + //کمک هزینه مسکن + var housingAllowance = command.HousingAllowance.MoneyToDouble(); + //حق تاهل + var marriedAllowance = command.MarriedAllowance.MoneyToDouble(); //var MontlyYearsBunos = //_yearlySalaryRepository.GetMontlyBunosYears(command.WeeklyTime, command.ContractStartGr, command.ContractEndGr, dayliWage, command.WorkingWeeklyTime, command.officialholiday, command.friday, command.TotalHolidaysAndNotH, command.TotalHolidaysAndNotM, command.Basic, command.FridayStarttoEnd, command.DailFeeComplete, command.HasRollCall, command.HolidayWorking, command.ShiftWork); //دستمزد ماهانه @@ -183,8 +184,8 @@ public class CheckoutApplication : ICheckoutApplication //سنوات var years = command.YearsPay; - //عیدی و پاداش - var bunos = command.BonusesPay; + //عیدی و پاداش + var bunos = command.BonusesPay; //فاطمه احمدژاد === موقت عیدی و پاداش و سنوات حساب نشه if (command.EmployeeId == 45104 && command.WorkshopId == 315) @@ -195,12 +196,12 @@ public class CheckoutApplication : ICheckoutApplication } var sumOfWorkingDays = $"{totalDays}"; - if (command.friday > 0) - { - var fridayPercent = dayliWage * 40 / 100; - //فوق العاده جمعه کاری - command.FridayPay = fridayPercent * command.friday; - } + if (command.friday > 0) + { + var fridayPercent = dayliWage * 40 / 100; + //فوق العاده جمعه کاری + command.FridayPay = fridayPercent * command.friday; + } //حق بیمه سهم کارگر #region InsuranceDeduction @@ -208,7 +209,7 @@ public class CheckoutApplication : ICheckoutApplication bool hasInsuranceShareTheSameAsList = false; if (command.InsuranceDeduction == 0) { - var insuranceOverTime = command.HasInsuranceChekoutOverTime ? command.OvertimePay : 0; + var insuranceOverTime = command.HasInsuranceChekoutOverTime ? command.OvertimePay : 0; insuranceDeduction = (monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + insuranceOverTime) * 7 / 100; } else @@ -222,213 +223,213 @@ public class CheckoutApplication : ICheckoutApplication if (command.OvertimePay > 0 && command.AbsenceDeduction > 0) - { - if (command.AbsenceDeduction >= command.OvertimePay) - { - command.AbsenceDeduction = command.AbsenceDeduction - command.OvertimePay; - command.OvertimePay = 0; + { + if (command.AbsenceDeduction >= command.OvertimePay) + { + command.AbsenceDeduction = command.AbsenceDeduction - command.OvertimePay; + command.OvertimePay = 0; command.OverTimeWorkValue = "00:00"; } - else - { - command.OvertimePay = command.OvertimePay - command.AbsenceDeduction; - command.AbsenceDeduction = 0; - } + else + { + command.OvertimePay = command.OvertimePay - command.AbsenceDeduction; + command.AbsenceDeduction = 0; + } - } - var checkoutStart = $"{command.Year}/{command.Month}/01"; - var checkoutEnd = checkoutStart.FindeEndOfMonth(); - var salaryAids = - _rollCallMandatoryRepository.SalaryAidsForCheckout(command.EmployeeId, command.WorkshopId, checkoutStart.ToGeorgianDateTime(), checkoutEnd.ToGeorgianDateTime()) - .Select(x => new CheckoutSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa, x.CalculationDateTimeGe, x.CalculationDateTimeFa, x.Id)).ToList(); + } + var checkoutStart = $"{command.Year}/{command.Month}/01"; + var checkoutEnd = checkoutStart.FindeEndOfMonth(); + var salaryAids = + _rollCallMandatoryRepository.SalaryAidsForCheckout(command.EmployeeId, command.WorkshopId, checkoutStart.ToGeorgianDateTime(), checkoutEnd.ToGeorgianDateTime()) + .Select(x => new CheckoutSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa, x.CalculationDateTimeGe, x.CalculationDateTimeFa, x.Id)).ToList(); - command.SalaryAidDeduction = salaryAids.Sum(x => x.Amount.MoneyToDouble()); - - var loanInstallments = _rollCallMandatoryRepository.LoanInstallmentForCheckout(command.EmployeeId, - command.WorkshopId, command.ContractStartGr, command.HasLeft ? DateTime.MaxValue : command.ContractEndGr) - .Select(x => - new CheckoutLoanInstallment(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount, x.LoanAmount, x.Id)).ToList(); + command.SalaryAidDeduction = salaryAids.Sum(x => x.Amount.MoneyToDouble()); - command.InstallmentDeduction = loanInstallments.Sum(x => x.AmountForMonth.MoneyToDouble()); + var loanInstallments = _rollCallMandatoryRepository.LoanInstallmentForCheckout(command.EmployeeId, + command.WorkshopId, command.ContractStartGr, command.HasLeft ? DateTime.MaxValue : command.ContractEndGr) + .Select(x => + new CheckoutLoanInstallment(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount, x.LoanAmount, x.Id)).ToList(); - - - - var firstDayOfMonth = $"{command.ContractStart.Substring(0, 8)}01".ToGeorgianDateTime(); - var firstDayOfCurrentMonth = new DateTime(syear, smonth, 1, new PersianCalendar()); - - LeaveSearchModel sickLeaveSearch = new LeaveSearchModel() - { - EmployeeId = command.EmployeeId, - WorkshopId = command.WorkshopId, - StartLeaveGr = command.ContractStartGr, - EndLeaveGr = command.ContractEndGr, - IsAccepted = true, - }; - var leaves = _leaveApplication.search(sickLeaveSearch); - - firstDayOfMonth.AddMonthsFa(1, out var lastDayOfCurrentMonth); - - lastDayOfCurrentMonth = lastDayOfCurrentMonth.AddDays(-1); - - int dateRange = (int)(lastDayOfCurrentMonth - firstDayOfCurrentMonth).TotalDays + 1; - - var holidays = _holidayItemApplication.Search(new HolidayItemSearchModel() - { - HolidayYear = command.ContractStartGr.ToFarsiYear() - }); - //all the dates from start to end, to be compared with present days to get absent dates - var completeDaysList = Enumerable.Range(0, dateRange).Select(offset => firstDayOfCurrentMonth.AddDays(offset).Date).ToList(); - - var absentRecords = completeDaysList - .ExceptBy(command.GroupedRollCalls.Select(x => x.CreationDate.Date), y => y.Date) - .Select(x => - { - var leave = leaves.FirstOrDefault(y => - y.EmployeeId == command.EmployeeId && y.EndLeaveGr.Date >= x.Date && y.StartLeaveGr.Date <= x.Date); - var isHoliday = holidays.Any(y => y.HolidaydateGr == x.Date); - var isFriday = x.Date.DayOfWeek == DayOfWeek.Friday; - var isNormalWorkingDay = isHoliday == false && isFriday == false; - return new CheckoutDailyRollCallViewModel() - { - StartDate1 = null, - EndDate1 = null, - DateTimeGr = x.Date, - DayOfWeek = x.Date.DayOfWeek.ToString(), - RollCallDateFa = x.Date.ToFarsi(), - LeaveType = leave != null ? leave.LeaveType : "", - IsAbsent = leave == null && isNormalWorkingDay - }; - }); - - var presentDays = command.GroupedRollCalls.Select(x => - { - - var orderedRollcalls = x.ShiftList.OrderBy(y => y.Start); - - var rollCallTimeSpanPerDay = x.SumOneDaySpan; - TimeSpan breakTimePerDay = x.BreakTime; - - return new CheckoutDailyRollCallViewModel() - { - StartDate1 = orderedRollcalls.FirstOrDefault().Start.ToString("HH:mm"), - EndDate1 = orderedRollcalls.FirstOrDefault().EndWithOutResTime.ToString("HH:mm"), - - StartDate2 = orderedRollcalls.Skip(1).FirstOrDefault()?.Start.ToString("HH:mm") ?? "", - EndDate2 = orderedRollcalls.Skip(1).FirstOrDefault()?.EndWithOutResTime.ToString("HH:mm") ?? "", - - TotalhourseSpan = rollCallTimeSpanPerDay, - - BreakTimeTimeSpan = breakTimePerDay, - - DayOfWeek = x.CreationDate.DayOfWeek.DayOfWeeKToPersian(), - RollCallDateFa = x.CreationDate.Date.ToFarsi(), - DateTimeGr = x.CreationDate.Date, - IsSliced = x.ShiftList.Count() > 2, - IsAbsent = false - }; - }); - - - presentDays = presentDays.Select(x => new CheckoutDailyRollCallViewModel - { - StartDate1 = x.StartDate1, - EndDate1 = x.EndDate1, - EndDate2 = x.EndDate2, - StartDate2 = x.StartDate2, - TotalWorkingHours = $"{(int)(x.TotalhourseSpan.TotalHours)}:{x.TotalhourseSpan.Minutes:00}", - BreakTimeString = $"{(int)(x.BreakTimeTimeSpan.TotalHours)}:{x.BreakTimeTimeSpan.Minutes:00}", - TotalhourseSpan = x.TotalhourseSpan, - BreakTimeTimeSpan = x.BreakTimeTimeSpan, - DayOfWeek = x.DayOfWeek, - RollCallDateFa = x.RollCallDateFa, - DateTimeGr = x.DateTimeGr, - IsSliced = x.IsSliced, - IsAbsent = false - }); - - var result = presentDays.Concat(absentRecords).OrderBy(x => x.DateTimeGr).ToList(); - result.ForEach(x => - { - x.IsHoliday = holidays.Any(y => x.DateTimeGr.Date == y.HolidaydateGr.Date); - x.IsFriday = x.DateTimeGr.DayOfWeek == DayOfWeek.Friday; - }); - - var checkoutRollCallDays = result.Select(x => new CheckoutRollCallDay(x.DateTimeGr, - x.StartDate1, x.EndDate1, x.StartDate2, x.EndDate2, - x.BreakTimeTimeSpan, x.IsSliced, x.TotalhourseSpan, x.IsAbsent, x.IsFriday, x.IsHoliday, x.LeaveType)) - .ToList(); - - - double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(syear, smonth); - int mandatoryWholeHours = (int)mandatoryHours; - int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); - - var totalMandatoryHours = TimeSpan.FromHours(mandatoryWholeHours).Add(TimeSpan.FromMinutes(mandatoryMinutes)); - var checkoutRollCall = new CheckoutRollCall(totalMandatoryHours, command.TotalPresentTimeSpan, command.TotalBreakTimeSpan, - command.TotalWorkingTimeSpan, command.TotalPaidLeave, command.TotalSickLeave, checkoutRollCallDays); + command.InstallmentDeduction = loanInstallments.Sum(x => x.AmountForMonth.MoneyToDouble()); - var totalClaimsDouble = monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + command.OvertimePay + - command.NightworkPay + familyAllowance + bunos + years + command.LeavePay + command.FridayPay + command.ShiftPay; - var totalClaims = totalClaimsDouble.ToMoney(); - var totalDeductionDouble = insuranceDeduction + command.AbsenceDeduction + command.InstallmentDeduction + command.SalaryAidDeduction; - var totalDeductions = totalDeductionDouble.ToMoney(); - var totalPayment = totalClaimsDouble - totalDeductionDouble; + var firstDayOfMonth = $"{command.ContractStart.Substring(0, 8)}01".ToGeorgianDateTime(); + var firstDayOfCurrentMonth = new DateTime(syear, smonth, 1, new PersianCalendar()); - if (_checkoutRepository.Exists(x => - x.Month == command.Month && x.Year == command.Year && x.ContractNo == command.ContractNo)) - { - operation.Failed("امکان ثبت رکورد تکراری وجود ندارد"); - } - else - { - if (string.IsNullOrWhiteSpace(command.Signature)) - { - command.Signature = "0"; - } - + LeaveSearchModel sickLeaveSearch = new LeaveSearchModel() + { + EmployeeId = command.EmployeeId, + WorkshopId = command.WorkshopId, + StartLeaveGr = command.ContractStartGr, + EndLeaveGr = command.ContractEndGr, + IsAccepted = true, + }; + var leaves = _leaveApplication.search(sickLeaveSearch); - var checkout = new Checkout(command.EmployeeFullName, command.FathersName, command.NationalCode - , command.DateOfBirth, command.EmployeeId, command.WorkshopName, command.WorkshopId, command.ContractNo, command.ContractStartGr, command.ContractEndGr, month, year, - command.ContractId, command.WorkingHoursId, monthlyWage, bacicYears, consumableItem, housingAllowance - , command.OvertimePay, command.NightworkPay, command.FridayPay, 0, command.ShiftPay, familyAllowance, bunos, years, command.LeavePay, insuranceDeduction, 0, command.InstallmentDeduction, command.SalaryAidDeduction, command.AbsenceDeduction, sumOfWorkingDays, - command.ArchiveCode, command.PersonnelCode, totalClaims, totalDeductions, totalPayment, command.Signature, marriedAllowance, command.LeaveCheckout, command.CreditLeaves, command.AbsencePeriod, command.AverageHoursPerDay, command.HasRollCall, command.OverTimeWorkValue, command.OverNightWorkValue - , command.FridayWorkValue, command.RotatingShiftValue, command.AbsenceValue, command.TotalDayOfLeaveCompute, command.TotalDayOfYearsCompute, command.TotalDayOfBunosesCompute, - loanInstallments, salaryAids,checkoutRollCall,command.EmployeeMandatoryHours, hasInsuranceShareTheSameAsList); + firstDayOfMonth.AddMonthsFa(1, out var lastDayOfCurrentMonth); - _checkoutRepository.CreateCkeckout(checkout).GetAwaiter().GetResult(); - //_checkoutRepository.SaveChanges(); + lastDayOfCurrentMonth = lastDayOfCurrentMonth.AddDays(-1); - //var employeeFullName = new SqlParameter("@EmployeeFullName", SqlDbType.NVarChar, 50); - //employeeFullName.Value = command.EmployeeFullName; - //var fathersName = new SqlParameter("@FathersName", SqlDbType.NVarChar, 20); - //fathersName.Value = command.EmployeeFullName; + int dateRange = (int)(lastDayOfCurrentMonth - firstDayOfCurrentMonth).TotalDays + 1; - } + var holidays = _holidayItemApplication.Search(new HolidayItemSearchModel() + { + HolidayYear = command.ContractStartGr.ToFarsiYear() + }); + //all the dates from start to end, to be compared with present days to get absent dates + var completeDaysList = Enumerable.Range(0, dateRange).Select(offset => firstDayOfCurrentMonth.AddDays(offset).Date).ToList(); + + var absentRecords = completeDaysList + .ExceptBy(command.GroupedRollCalls.Select(x => x.CreationDate.Date), y => y.Date) + .Select(x => + { + var leave = leaves.FirstOrDefault(y => + y.EmployeeId == command.EmployeeId && y.EndLeaveGr.Date >= x.Date && y.StartLeaveGr.Date <= x.Date); + var isHoliday = holidays.Any(y => y.HolidaydateGr == x.Date); + var isFriday = x.Date.DayOfWeek == DayOfWeek.Friday; + var isNormalWorkingDay = isHoliday == false && isFriday == false; + return new CheckoutDailyRollCallViewModel() + { + StartDate1 = null, + EndDate1 = null, + DateTimeGr = x.Date, + DayOfWeek = x.Date.DayOfWeek.ToString(), + RollCallDateFa = x.Date.ToFarsi(), + LeaveType = leave != null ? leave.LeaveType : "", + IsAbsent = leave == null && isNormalWorkingDay + }; + }); + + var presentDays = command.GroupedRollCalls.Select(x => + { + + var orderedRollcalls = x.ShiftList.OrderBy(y => y.Start); + + var rollCallTimeSpanPerDay = x.SumOneDaySpan; + TimeSpan breakTimePerDay = x.BreakTime; + + return new CheckoutDailyRollCallViewModel() + { + StartDate1 = orderedRollcalls.FirstOrDefault().Start.ToString("HH:mm"), + EndDate1 = orderedRollcalls.FirstOrDefault().EndWithOutResTime.ToString("HH:mm"), + + StartDate2 = orderedRollcalls.Skip(1).FirstOrDefault()?.Start.ToString("HH:mm") ?? "", + EndDate2 = orderedRollcalls.Skip(1).FirstOrDefault()?.EndWithOutResTime.ToString("HH:mm") ?? "", + + TotalhourseSpan = rollCallTimeSpanPerDay, + + BreakTimeTimeSpan = breakTimePerDay, + + DayOfWeek = x.CreationDate.DayOfWeek.DayOfWeeKToPersian(), + RollCallDateFa = x.CreationDate.Date.ToFarsi(), + DateTimeGr = x.CreationDate.Date, + IsSliced = x.ShiftList.Count() > 2, + IsAbsent = false + }; + }); - } + presentDays = presentDays.Select(x => new CheckoutDailyRollCallViewModel + { + StartDate1 = x.StartDate1, + EndDate1 = x.EndDate1, + EndDate2 = x.EndDate2, + StartDate2 = x.StartDate2, + TotalWorkingHours = $"{(int)(x.TotalhourseSpan.TotalHours)}:{x.TotalhourseSpan.Minutes:00}", + BreakTimeString = $"{(int)(x.BreakTimeTimeSpan.TotalHours)}:{x.BreakTimeTimeSpan.Minutes:00}", + TotalhourseSpan = x.TotalhourseSpan, + BreakTimeTimeSpan = x.BreakTimeTimeSpan, + DayOfWeek = x.DayOfWeek, + RollCallDateFa = x.RollCallDateFa, + DateTimeGr = x.DateTimeGr, + IsSliced = x.IsSliced, + IsAbsent = false + }); - public OperationResult Edit(EditCheckout command) - { - throw new NotImplementedException(); - } + var result = presentDays.Concat(absentRecords).OrderBy(x => x.DateTimeGr).ToList(); + result.ForEach(x => + { + x.IsHoliday = holidays.Any(y => x.DateTimeGr.Date == y.HolidaydateGr.Date); + x.IsFriday = x.DateTimeGr.DayOfWeek == DayOfWeek.Friday; + }); - public EditCheckout GetDetails(long id) - { - return _checkoutRepository.GetDetails(id); - } + var checkoutRollCallDays = result.Select(x => new CheckoutRollCallDay(x.DateTimeGr, + x.StartDate1, x.EndDate1, x.StartDate2, x.EndDate2, + x.BreakTimeTimeSpan, x.IsSliced, x.TotalhourseSpan, x.IsAbsent, x.IsFriday, x.IsHoliday, x.LeaveType)) + .ToList(); - public async Task GetContractResultToCreateCheckout(long workshopId, long employeeId, string year, string month, - string contractStart, string contractEnd) - { - return await _checkoutRepository.GetContractResultToCreateCheckout(workshopId, employeeId, year, month, contractStart, - contractEnd); - } + double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(syear, smonth); + int mandatoryWholeHours = (int)mandatoryHours; + int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); + + var totalMandatoryHours = TimeSpan.FromHours(mandatoryWholeHours).Add(TimeSpan.FromMinutes(mandatoryMinutes)); + var checkoutRollCall = new CheckoutRollCall(totalMandatoryHours, command.TotalPresentTimeSpan, command.TotalBreakTimeSpan, + command.TotalWorkingTimeSpan, command.TotalPaidLeave, command.TotalSickLeave, checkoutRollCallDays); + + + + + var totalClaimsDouble = monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + command.OvertimePay + + command.NightworkPay + familyAllowance + bunos + years + command.LeavePay + command.FridayPay + command.ShiftPay; + var totalClaims = totalClaimsDouble.ToMoney(); + var totalDeductionDouble = insuranceDeduction + command.AbsenceDeduction + command.InstallmentDeduction + command.SalaryAidDeduction; + var totalDeductions = totalDeductionDouble.ToMoney(); + var totalPayment = totalClaimsDouble - totalDeductionDouble; + + if (_checkoutRepository.Exists(x => + x.Month == command.Month && x.Year == command.Year && x.ContractNo == command.ContractNo)) + { + operation.Failed("امکان ثبت رکورد تکراری وجود ندارد"); + } + else + { + if (string.IsNullOrWhiteSpace(command.Signature)) + { + command.Signature = "0"; + } + + + var checkout = new Checkout(command.EmployeeFullName, command.FathersName, command.NationalCode + , command.DateOfBirth, command.EmployeeId, command.WorkshopName, command.WorkshopId, command.ContractNo, command.ContractStartGr, command.ContractEndGr, month, year, + command.ContractId, command.WorkingHoursId, monthlyWage, bacicYears, consumableItem, housingAllowance + , command.OvertimePay, command.NightworkPay, command.FridayPay, 0, command.ShiftPay, familyAllowance, bunos, years, command.LeavePay, insuranceDeduction, 0, command.InstallmentDeduction, command.SalaryAidDeduction, command.AbsenceDeduction, sumOfWorkingDays, + command.ArchiveCode, command.PersonnelCode, totalClaims, totalDeductions, totalPayment, command.Signature, marriedAllowance, command.LeaveCheckout, command.CreditLeaves, command.AbsencePeriod, command.AverageHoursPerDay, command.HasRollCall, command.OverTimeWorkValue, command.OverNightWorkValue + , command.FridayWorkValue, command.RotatingShiftValue, command.AbsenceValue, command.TotalDayOfLeaveCompute, command.TotalDayOfYearsCompute, command.TotalDayOfBunosesCompute, + loanInstallments, salaryAids, checkoutRollCall, command.EmployeeMandatoryHours, hasInsuranceShareTheSameAsList); + + _checkoutRepository.CreateCkeckout(checkout).GetAwaiter().GetResult(); + //_checkoutRepository.SaveChanges(); + + //var employeeFullName = new SqlParameter("@EmployeeFullName", SqlDbType.NVarChar, 50); + //employeeFullName.Value = command.EmployeeFullName; + //var fathersName = new SqlParameter("@FathersName", SqlDbType.NVarChar, 20); + //fathersName.Value = command.EmployeeFullName; + + } + + + } + + public OperationResult Edit(EditCheckout command) + { + throw new NotImplementedException(); + } + + public EditCheckout GetDetails(long id) + { + return _checkoutRepository.GetDetails(id); + } + + public async Task GetContractResultToCreateCheckout(long workshopId, long employeeId, string year, string month, + string contractStart, string contractEnd) + { + return await _checkoutRepository.GetContractResultToCreateCheckout(workshopId, employeeId, year, month, contractStart, + contractEnd); + + } public Task> SearchCheckoutOptimized(CheckoutSearchModel searchModel) { @@ -440,32 +441,32 @@ public class CheckoutApplication : ICheckoutApplication var watch = System.Diagnostics.Stopwatch.StartNew(); watch.Start(); var result = new List(); - var query = await _checkoutRepository.SearchForMainCheckout(searchModel); - query = query.Select(x => new CheckoutViewModel() - { - Id = x.Id, - EmployeeFullName = x.EmployeeFullName, - ContractStart = x.ContractStart, - ContractEnd = x.ContractEnd, - ContractStartGr = x.ContractStartGr, - ContractEndGr = x.ContractEndGr, - PersonnelCode = x.PersonnelCode, - PersonnelCodeInt = x.PersonnelCodeInt, - ArchiveCode = x.ArchiveCode, - SumOfWorkingDays = x.SumOfWorkingDays, - WorkshopName = x.WorkshopName, - Month = x.Month, - Year = x.Year, - ContractNo = x.ContractNo, - ContractId = x.ContractId, - WorkshopId = x.WorkshopId, - EmployeeId = x.EmployeeId, - IsActiveString = x.IsActiveString, - Signature = x.Signature, - CreationDate = x.CreationDate, - EmployerName = _employerRepository.GetEmployerByWorkshopId(x.WorkshopId).FirstOrDefault()?.EmployerFullName, - IsBlockCantracingParty = _employerRepository.GetEmployerByWorkshopId(x.WorkshopId).FirstOrDefault()?.IsBlockContractingParty, - }).ToList(); + var query = await _checkoutRepository.SearchForMainCheckout(searchModel); + query = query.Select(x => new CheckoutViewModel() + { + Id = x.Id, + EmployeeFullName = x.EmployeeFullName, + ContractStart = x.ContractStart, + ContractEnd = x.ContractEnd, + ContractStartGr = x.ContractStartGr, + ContractEndGr = x.ContractEndGr, + PersonnelCode = x.PersonnelCode, + PersonnelCodeInt = x.PersonnelCodeInt, + ArchiveCode = x.ArchiveCode, + SumOfWorkingDays = x.SumOfWorkingDays, + WorkshopName = x.WorkshopName, + Month = x.Month, + Year = x.Year, + ContractNo = x.ContractNo, + ContractId = x.ContractId, + WorkshopId = x.WorkshopId, + EmployeeId = x.EmployeeId, + IsActiveString = x.IsActiveString, + Signature = x.Signature, + CreationDate = x.CreationDate, + EmployerName = _employerRepository.GetEmployerByWorkshopId(x.WorkshopId).FirstOrDefault()?.EmployerFullName, + IsBlockCantracingParty = _employerRepository.GetEmployerByWorkshopId(x.WorkshopId).FirstOrDefault()?.IsBlockContractingParty, + }).ToList(); //foreach (var items in query) //{ // var s = _employerRepository.GetEmployerByWorkshopId(items.WorkshopId); @@ -483,251 +484,300 @@ public class CheckoutApplication : ICheckoutApplication Console.WriteLine("old : " + watch.Elapsed); return query; - } - - public List SimpleSearch(CheckoutSearchModel searchModel) - { - return _checkoutRepository.SimpleSearch(searchModel); - } - - public List PrintAll(List id) - { - var result = _checkoutRepository.PrintAll(id); - var oneRecord = result.FirstOrDefault(); - if (oneRecord == null) - return new(); - result.ForEach(x => - { - - - int yearFa; - int monthFa; - try - { - yearFa = int.Parse(oneRecord.Year); - monthFa = oneRecord.Month.ToMonthByStringValue(); - } - catch (Exception e) - { - return; - } - double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(yearFa, monthFa); - int mandatoryWholeHours = (int)mandatoryHours; - int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); - var totalWorking = new TimeSpan(x.MonthlyRollCall.Sum(y => y.TotalhourseSpan.Ticks)); - var totalBreakTime = new TimeSpan(x.MonthlyRollCall.Sum(y => y.BreakTimeTimeSpan.Ticks)); - TimeSpan totalPresent = totalWorking + totalBreakTime; - if (x.CheckoutRollCall == null) - { - if (x.HasRollCall) - { - totalWorking = new TimeSpan(x.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)) - - x.TotalHourlyLeave; - totalBreakTime = new TimeSpan(x.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); - totalPresent = totalWorking + totalBreakTime; - } - else - { - totalBreakTime = new TimeSpan(x.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); - totalPresent = new TimeSpan(x.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)); - totalWorking = totalPresent - totalBreakTime; - } - - x.TotalWorkingTimeStr = - Tools.ToFarsiHoursAndMinutes((int)totalWorking.TotalHours, totalWorking.Minutes, "-"); - x.TotalBreakTimeStr = - Tools.ToFarsiHoursAndMinutes((int)totalBreakTime.TotalHours, totalBreakTime.Minutes, "-"); - x.TotalPresentTimeStr = - Tools.ToFarsiHoursAndMinutes((int)totalPresent.TotalHours, totalPresent.Minutes, "-"); - x.TotalMandatoryTimeStr = Tools.ToFarsiHoursAndMinutes(mandatoryWholeHours, mandatoryMinutes, "-"); - - } - }); - - return result; - } - - public CheckoutViewModel PrintOne(long id) - { - var result = _checkoutRepository.PrintOne(id); - - int yearFa; - int monthFa; - try - { - yearFa = int.Parse(result.Year); - monthFa = result.Month.ToMonthByStringValue(); - } - catch (Exception e) - { - return new(); - } - double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(yearFa, monthFa); - int mandatoryWholeHours = (int)mandatoryHours; - int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); - TimeSpan totalWorking; - TimeSpan totalBreakTime; - TimeSpan totalPresent; - TimeSpan totalHoursLeave; - if (result.HasRollCall) - { - totalWorking = new TimeSpan(result.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)) - result.TotalHourlyLeave; - totalBreakTime = new TimeSpan(result.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); - totalPresent = totalWorking + totalBreakTime; - } - else - { - totalBreakTime = new TimeSpan(result.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); - totalPresent = new TimeSpan(result.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)); - totalWorking = totalPresent - totalBreakTime; - } - - result.TotalWorkingTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalWorking.TotalHours, totalWorking.Minutes, "-"); - result.TotalBreakTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalBreakTime.TotalHours, totalBreakTime.Minutes, "-"); - result.TotalPresentTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalPresent.TotalHours, totalPresent.Minutes, "-"); - result.TotalMandatoryTimeStr = Tools.ToFarsiHoursAndMinutes(mandatoryWholeHours, mandatoryMinutes, "-"); - - return result; - } - - public CheckoutLeavePrintViewModel LeavePrint(long id) - { - return _checkoutRepository.PrintLeave(id); - } - - public OperationResult Sign(long id) - { - var opration = new OperationResult(); - var contract = _checkoutRepository.Get(id); - if (contract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); - - contract.Sign(); - - - _checkoutRepository.SaveChanges(); - opration.IsSuccedded = true; - return opration.Succcedded(); - } - - public OperationResult UnSign(long id) - { - var opration = new OperationResult(); - var contract = _checkoutRepository.Get(id); - if (contract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); - - contract.UnSign(); - - - _checkoutRepository.SaveChanges(); - opration.IsSuccedded = true; - return opration.Succcedded(); - } - - public OperationResult Active(long id) - { - var opration = new OperationResult(); - var contract = _checkoutRepository.Get(id); - if (contract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); - - contract.Active(); - - _checkoutRepository.SaveChanges(); - return opration.Succcedded(); - } - - public OperationResult DeActive(long id) - { - var opration = new OperationResult(); - var contract = _checkoutRepository.Get(id); - if (contract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); - - contract.DeActive(); - - - _checkoutRepository.SaveChanges(); - - return opration.Succcedded(); - } - - public OperationResult RemoveCheckout(long id) - { - return _checkoutRepository.RemoveCheckout(id); - } - - public OperationResult CustomSet(long id, double rewardPay, double salaryAidDeduction) - { - var opration = new OperationResult(); - var checkout = _checkoutRepository.Get(id); - var totalClaimsDouble = checkout.TotalClaims.MoneyToDouble(); - var totalDeductionsDouble = checkout.TotalDeductions.MoneyToDouble(); - totalClaimsDouble = (double)(totalClaimsDouble - checkout.RewardPay); - totalDeductionsDouble = totalDeductionsDouble - checkout.SalaryAidDeduction; - - var totalClaims = totalClaimsDouble + rewardPay; - var totalDeductions = totalDeductionsDouble + salaryAidDeduction; - - - - var totalClaimsString = totalClaims.ToMoney(); - var totalDeductionsString = totalDeductions.ToMoney(); - var totalPayment = totalClaims - totalDeductions; - - checkout.CustomSet(rewardPay, salaryAidDeduction, totalClaimsString, totalDeductionsString, totalPayment); - - _checkoutRepository.SaveChanges(); - opration.IsSuccedded = true; - return opration.Succcedded(); - } - - #region Client - - public List SearchForClient(CheckoutSearchModel searchModel) - { - return _checkoutRepository.SearchForClient(searchModel); - } - - #endregion - #region NewChangeByHeydari - public List CheckHasSignature(List ids) - { - return _checkoutRepository.CheckHasSignature(ids); - } - public OperationResult DeleteAllCheckouts(List ids) - { - return _checkoutRepository.DeleteAllCheckouts(ids); - } - public OperationResult DeleteCheckout(long id) - { - return _checkoutRepository.DeleteCheckout(id); - } - public async Task> SearchForMainCheckout(CheckoutSearchModel searchModel) - { - return await _checkoutRepository.SearchForMainCheckout(searchModel); - } - #endregion - #region Pooya - - - public List<(long EmployeeId, DateTime CheckoutStart, DateTime CheckoutEnd)> GetLastCheckoutsByWorkshopIdForWorkFlow(long workshopId, DateTime start, DateTime end) - { - return _checkoutRepository.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, start, end); - } - - public async Task> GetEmployeeSelectListByWorkshopId(long id) - { - return await _checkoutRepository.GetEmployeeSelectListByWorkshopId(id); } + public List SimpleSearch(CheckoutSearchModel searchModel) + { + return _checkoutRepository.SimpleSearch(searchModel); + } + + public List PrintAll(List id) + { + var result = _checkoutRepository.PrintAll(id); + var oneRecord = result.FirstOrDefault(); + if (oneRecord == null) + return new(); + result.ForEach(x => + { + + + int yearFa; + int monthFa; + try + { + yearFa = int.Parse(oneRecord.Year); + monthFa = oneRecord.Month.ToMonthByStringValue(); + } + catch (Exception e) + { + return; + } + double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(yearFa, monthFa); + int mandatoryWholeHours = (int)mandatoryHours; + int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); + var totalWorking = new TimeSpan(x.MonthlyRollCall.Sum(y => y.TotalhourseSpan.Ticks)); + var totalBreakTime = new TimeSpan(x.MonthlyRollCall.Sum(y => y.BreakTimeTimeSpan.Ticks)); + TimeSpan totalPresent = totalWorking + totalBreakTime; + if (x.CheckoutRollCall == null) + { + if (x.HasRollCall) + { + totalWorking = new TimeSpan(x.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)) - + x.TotalHourlyLeave; + totalBreakTime = new TimeSpan(x.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); + totalPresent = totalWorking + totalBreakTime; + } + else + { + totalBreakTime = new TimeSpan(x.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); + totalPresent = new TimeSpan(x.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)); + totalWorking = totalPresent - totalBreakTime; + } + + x.TotalWorkingTimeStr = + Tools.ToFarsiHoursAndMinutes((int)totalWorking.TotalHours, totalWorking.Minutes, "-"); + x.TotalBreakTimeStr = + Tools.ToFarsiHoursAndMinutes((int)totalBreakTime.TotalHours, totalBreakTime.Minutes, "-"); + x.TotalPresentTimeStr = + Tools.ToFarsiHoursAndMinutes((int)totalPresent.TotalHours, totalPresent.Minutes, "-"); + x.TotalMandatoryTimeStr = Tools.ToFarsiHoursAndMinutes(mandatoryWholeHours, mandatoryMinutes, "-"); + + } + }); + + return result; + } + + public CheckoutViewModel PrintOne(long id) + { + var result = _checkoutRepository.PrintOne(id); + + int yearFa; + int monthFa; + try + { + yearFa = int.Parse(result.Year); + monthFa = result.Month.ToMonthByStringValue(); + } + catch (Exception e) + { + return new(); + } + double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(yearFa, monthFa); + int mandatoryWholeHours = (int)mandatoryHours; + int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); + TimeSpan totalWorking; + TimeSpan totalBreakTime; + TimeSpan totalPresent; + TimeSpan totalHoursLeave; + if (result.HasRollCall) + { + totalWorking = new TimeSpan(result.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)) - result.TotalHourlyLeave; + totalBreakTime = new TimeSpan(result.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); + totalPresent = totalWorking + totalBreakTime; + } + else + { + totalBreakTime = new TimeSpan(result.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); + totalPresent = new TimeSpan(result.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)); + totalWorking = totalPresent - totalBreakTime; + } + + result.TotalWorkingTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalWorking.TotalHours, totalWorking.Minutes, "-"); + result.TotalBreakTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalBreakTime.TotalHours, totalBreakTime.Minutes, "-"); + result.TotalPresentTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalPresent.TotalHours, totalPresent.Minutes, "-"); + result.TotalMandatoryTimeStr = Tools.ToFarsiHoursAndMinutes(mandatoryWholeHours, mandatoryMinutes, "-"); + + return result; + } + + public CheckoutLeavePrintViewModel LeavePrint(long id) + { + return _checkoutRepository.PrintLeave(id); + } + + public OperationResult Sign(long id) + { + var opration = new OperationResult(); + var contract = _checkoutRepository.Get(id); + if (contract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + contract.Sign(); + + + _checkoutRepository.SaveChanges(); + opration.IsSuccedded = true; + return opration.Succcedded(); + } + + public OperationResult UnSign(long id) + { + var opration = new OperationResult(); + var contract = _checkoutRepository.Get(id); + if (contract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + contract.UnSign(); + + + _checkoutRepository.SaveChanges(); + opration.IsSuccedded = true; + return opration.Succcedded(); + } + + public OperationResult Active(long id) + { + var opration = new OperationResult(); + var contract = _checkoutRepository.Get(id); + if (contract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + contract.Active(); + + _checkoutRepository.SaveChanges(); + return opration.Succcedded(); + } + + public OperationResult DeActive(long id) + { + var opration = new OperationResult(); + var contract = _checkoutRepository.Get(id); + if (contract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + contract.DeActive(); + + + _checkoutRepository.SaveChanges(); + + return opration.Succcedded(); + } + + public OperationResult RemoveCheckout(long id) + { + return _checkoutRepository.RemoveCheckout(id); + } + + public OperationResult CustomSet(long id, double rewardPay, double salaryAidDeduction) + { + var opration = new OperationResult(); + var checkout = _checkoutRepository.Get(id); + var totalClaimsDouble = checkout.TotalClaims.MoneyToDouble(); + var totalDeductionsDouble = checkout.TotalDeductions.MoneyToDouble(); + totalClaimsDouble = (double)(totalClaimsDouble - checkout.RewardPay); + totalDeductionsDouble = totalDeductionsDouble - checkout.SalaryAidDeduction; + + var totalClaims = totalClaimsDouble + rewardPay; + var totalDeductions = totalDeductionsDouble + salaryAidDeduction; + + + + var totalClaimsString = totalClaims.ToMoney(); + var totalDeductionsString = totalDeductions.ToMoney(); + var totalPayment = totalClaims - totalDeductions; + + checkout.CustomSet(rewardPay, salaryAidDeduction, totalClaimsString, totalDeductionsString, totalPayment); + + _checkoutRepository.SaveChanges(); + opration.IsSuccedded = true; + return opration.Succcedded(); + } + + #region Client + + public List SearchForClient(CheckoutSearchModel searchModel) + { + return _checkoutRepository.SearchForClient(searchModel); + } + + #endregion + #region NewChangeByHeydari + public List CheckHasSignature(List ids) + { + return _checkoutRepository.CheckHasSignature(ids); + } + public OperationResult DeleteAllCheckouts(List ids) + { + return _checkoutRepository.DeleteAllCheckouts(ids); + } + public OperationResult DeleteCheckout(long id) + { + return _checkoutRepository.DeleteCheckout(id); + } + public async Task> SearchForMainCheckout(CheckoutSearchModel searchModel) + { + return await _checkoutRepository.SearchForMainCheckout(searchModel); + } + #endregion + #region Pooya + + + public List<(long EmployeeId, DateTime CheckoutStart, DateTime CheckoutEnd)> GetLastCheckoutsByWorkshopIdForWorkFlow(long workshopId, DateTime start, DateTime end) + { + return _checkoutRepository.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, start, end); + } + + + #endregion #region ForApi + #region CreateWorkshop + + /// + /// دریافت سلکت لیست پرسنل کارگاه + /// + /// + /// + public async Task> GetEmployeeSelectListByWorkshopId(long id) + { + return await _checkoutRepository.GetEmployeeSelectListByWorkshopId(id); + } + + /// + /// دریافت لیست قراردادها برای ایجاد فیش حقوقی + /// + /// + /// + /// + /// + /// + public async Task>> GetContractToCreateCheckout(long workshopId, string year, string month, long employeeId) + { + var op = new OperationResult>(); + if (workshopId < 1) + return op.Failed("کارگاه را انتخاب کنید"); + if (string.IsNullOrWhiteSpace(year) || string.IsNullOrWhiteSpace(month)) + return op.Failed("سال و ماه را انتخاب کنید"); + var result = await GetContractResultToCreateCheckout(workshopId, employeeId, year, month, null, + null); + if(result.CreateCheckoutList.Count == 0) + return op.Failed("موردی یافت نشد"); + var finalResult = result.CreateCheckoutList.Select(x => new ContractsListToCreateCheckoutDto + { + Id = x.Id, + ContractNo = x.ContractNo, + WorkshopName = x.WorkshopName, + EmployeeName = x.EmployeeName, + ContractStart = x.ContractStart, + ContractEnd = x.ContractEnd, + PersonnelCode = x.PersonnelCode, + Description = x.Description, + LeftWorkDate = x.LeftWorkDate, + CreateCheckoutStatus = x.HasCheckout ? CreateCheckoutStatus.HasCheckout : x.Extension == false ? CreateCheckoutStatus.NotValid : CreateCheckoutStatus.ReadyToCreate + + }).ToList(); + + return op.Succcedded(finalResult); + } + + #endregion + + public async Task> GetList(CheckoutSearchModelDto searchModel) { return await _checkoutRepository.GetList(searchModel); @@ -742,8 +792,8 @@ public class CheckoutApplication : ICheckoutApplication var typeOfWorkingHours = ""; if (checkout.HasRollCall) { - result = await _rollCallMandatoryRepository.RotatingShiftReport(checkout.WorkshopId, checkout.EmployeeId, checkout.ContractStartGr, checkout.ContractEndGr, workingHours.ShiftWork, true, workingHours, false); - typeOfWorkingHours = "دارای حضورغیاب"; + result = await _rollCallMandatoryRepository.RotatingShiftReport(checkout.WorkshopId, checkout.EmployeeId, checkout.ContractStartGr, checkout.ContractEndGr, workingHours.ShiftWork, true, workingHours, false); + typeOfWorkingHours = "دارای حضورغیاب"; } else diff --git a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs index 916e09bc..95cd3c8e 100644 --- a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs @@ -2734,22 +2734,42 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos #region ForApi + ///ایجاد فیش + #region CreateCheckout + + + /// + /// دریافت سلکت لیست پرسنل کارگاه + /// + /// + /// public async Task> GetEmployeeSelectListByWorkshopId(long id) { - var employeesHasLeftworkData =_context.LeftWorkList.Where(x => x.WorkshopId == id).Select(x => x.EmployeeId); - var employees =await _context.Employees + var employeesHasLeftworkData = _context.LeftWorkList.Where(x => x.WorkshopId == id).Select(x => x.EmployeeId); + var employees = await _context.Employees .Where(x => employeesHasLeftworkData.Contains(x.id)) .Select(x => - new EmployeeSelectListDto() - { - Id = x.id, - EmployeeFullName = x.FullName - }) + new EmployeeSelectListDto() + { + Id = x.id, + EmployeeFullName = x.FullName + }) .AsNoTracking() .ToListAsync(); return employees; } + + + #endregion + + + + /// + /// دریافت لیست فیش حقوقی + /// + /// + /// public async Task> GetList(CheckoutSearchModelDto searchModel) { var acountID = _authHelper.CurrentAccountId(); @@ -3039,7 +3059,12 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos }; } - + /// + /// پرینت فیش حقوقی + /// Api + /// + /// + /// public async Task> CheckoutPrint(List ids) { if (ids.Count == 0) diff --git a/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs b/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs index 0cf5f2a1..295d50b7 100644 --- a/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs +++ b/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs @@ -7,6 +7,7 @@ using CompanyManagment.App.Contracts.Workshop.DTOs; using Microsoft.AspNetCore.Mvc; using NuGet.Packaging.Signing; using ServiceHost.BaseControllers; +using WorkFlow.Application.Contracts.WorkFlow; namespace ServiceHost.Areas.Admin.Controllers; @@ -14,11 +15,13 @@ public class CheckoutController : AdminBaseController { private readonly ICheckoutApplication _checkoutApplication; private readonly IWorkshopApplication _workshopApplication; + private readonly IWorkFlowApplication _workFlowApplication; - public CheckoutController(ICheckoutApplication checkoutApplication, IWorkshopApplication workshopApplication) + public CheckoutController(ICheckoutApplication checkoutApplication, IWorkshopApplication workshopApplication, IWorkFlowApplication workFlowApplication) { _checkoutApplication = checkoutApplication; _workshopApplication = workshopApplication; + _workFlowApplication = workFlowApplication; } /// @@ -92,6 +95,32 @@ public class CheckoutController : AdminBaseController var result = await _checkoutApplication.GetEmployeeSelectListByWorkshopId(workshopId); return result; } + + + /// + /// دریافت لیست قراردادها برای ایجاد فیش حقوقی + /// + /// + /// + /// + /// + /// + [HttpGet("GetContractsToCreateCheckout")] + public async Task>> GetContractsToCreateCheckout(long workshopId, string year, string month, long employeeId) + { + + var result =await _checkoutApplication.GetContractToCreateCheckout(workshopId, year, month, employeeId); + if (!result.IsSuccedded) + return result; + + var hasWorkFlow =await _workFlowApplication.HasWorkFlow(workshopId, year, month); + + if (hasWorkFlow) + return new OperationResult>().Failed( + "این کارگاه به دلیل داشتن کارپوشه مجاز به ایجاد تصفیه حساب نمی باشد"); + return result; + + } #endregion } diff --git a/ServiceHost/Program.cs b/ServiceHost/Program.cs index 218871e3..98953155 100644 --- a/ServiceHost/Program.cs +++ b/ServiceHost/Program.cs @@ -386,17 +386,17 @@ if (builder.Environment.IsDevelopment()) { var logConfig = configuration .ReadFrom.Configuration(context.Configuration) - .ReadFrom.Services(services) - .Enrich.FromLogContext(); + .ReadFrom.Services(services); + - logConfig.WriteTo.File( - path: Path.Combine(logDirectory, "gozareshgir_log.txt"), - rollingInterval: RollingInterval.Day, - retainedFileCountLimit: 30, - shared: true, - outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}" - ); + //logConfig.WriteTo.File( + // path: Path.Combine(logDirectory, "gozareshgir_log.txt"), + // rollingInterval: RollingInterval.Day, + // retainedFileCountLimit: 30, + // shared: true, + // outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}" + //); }, writeToProviders: true); // این باعث میشه کنسول پیش‌فرض هم کار کنه } diff --git a/WorkFlow/Application/WorkFlow.Application.Contracts/WorkFlow/IWorkFlowApplication.cs b/WorkFlow/Application/WorkFlow.Application.Contracts/WorkFlow/IWorkFlowApplication.cs index e000f514..6ac9791c 100644 --- a/WorkFlow/Application/WorkFlow.Application.Contracts/WorkFlow/IWorkFlowApplication.cs +++ b/WorkFlow/Application/WorkFlow.Application.Contracts/WorkFlow/IWorkFlowApplication.cs @@ -73,4 +73,15 @@ public interface IWorkFlowApplication Task> GetEmployeesWithoutLunchBreak(long workshopId); Task> GetEmployeesWithoutGroup(long workshopId); + + #region ForApi + /// + /// در زمان ایجاد فیش کارپوشه کارگاه را چک میکند + /// + /// + /// + /// + /// + Task HasWorkFlow(long workshopId, string year, string month); + #endregion } \ No newline at end of file diff --git a/WorkFlow/Application/WorkFlow.Application/WorkFlowApplication.cs b/WorkFlow/Application/WorkFlow.Application/WorkFlowApplication.cs index d644bb5f..ac28f42f 100644 --- a/WorkFlow/Application/WorkFlow.Application/WorkFlowApplication.cs +++ b/WorkFlow/Application/WorkFlow.Application/WorkFlowApplication.cs @@ -781,5 +781,66 @@ public class WorkFlowApplication : IWorkFlowApplication return _customizedWorkshopSettingsACL.GetEmployeesWithoutGroup(workshopId); } + #region ForApi + + + public async Task HasWorkFlow(long workshopId, string year, string month) + { + var workshop = _workshopRepository.GetDetails(workshopId); + bool hasWorkFlow = false; + + var skipRollCallByWorkshopId = workshopId is 368 or 610; + if (workshop.HasRollCallFreeVip == "true" && !skipRollCallByWorkshopId) + { + DateTime startSreach; + DateTime endSearch; + + if (month == "0" && year == "0") + { + DateTime now = DateTime.Now; + string startStr = $"{now.ToFarsi().Substring(0, 8)}01"; + startSreach = startStr.ToGeorgianDateTime(); + endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime(); + } + else if (month == "0" && year != "0") + { + DateTime now = DateTime.Now; + + string startStr = $"{year}/{now.ToFarsi().Substring(5, 2)}/01"; + startSreach = startStr.ToGeorgianDateTime(); + endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime(); + } + else if (month != "0" && year == "0") + { + DateTime now = DateTime.Now; + + string startStr = $"{now.ToFarsi().Substring(0, 4)}/{month}/01"; + startSreach = startStr.ToGeorgianDateTime(); + endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime(); + } + else + { + string startStr = $"{year}/{month}/01"; + startSreach = startStr.ToGeorgianDateTime(); + endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime(); + } + + + DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1); + if (lastMonthEnd == endSearch) + { + var countWorkFlowCut = await CountCutByBgServiceLastMonth(workshopId); + var countWorkFlowAbsent = await CountAbsentRollCallLastMonth(workshopId); + var countWorkFlowLunchBreak = await CountEmployeesWithoutLunchBreakLastMonth(workshopId); + var countUndefinedRollCalls = await CountUndefinedLastMonth(workshopId); + + hasWorkFlow = countWorkFlowCut > 0 || countWorkFlowAbsent > 0 || countWorkFlowLunchBreak > 0 || + countUndefinedRollCalls > 0; + } + } + + return hasWorkFlow; + } + #endregion } \ No newline at end of file