From 29fed23805e6319f2af160fbb8e5f5c7f5e5ea95 Mon Sep 17 00:00:00 2001 From: SamSys Date: Tue, 2 Sep 2025 04:33:30 +0330 Subject: [PATCH] Checkout NEW Compute DailyWage Completed --- .../IRollCallMandatoryRepository.cs | 2 +- .../IYearlySalaryRepository.cs | 9 ++++++ .../Checkout/CreateCheckout.cs | 31 +++++++++++++++++++ .../RollCall/IRollCallMandatoryApplication.cs | 2 +- .../CheckoutApplication.cs | 31 +++++++++++++------ .../RollCallMandatoryApplication.cs | 4 +-- .../Repository/RollCallMandatoryRepository.cs | 26 +++++++++------- .../Repository/YearlySalaryRepository.cs | 27 ++++++++++++++++ .../Pages/Company/Checkouts/Index.cshtml.cs | 29 ++++++++++++++--- 9 files changed, 131 insertions(+), 30 deletions(-) diff --git a/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs b/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs index c1a8e006..b37fd3cb 100644 --- a/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs +++ b/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs @@ -15,7 +15,7 @@ namespace Company.Domain.RollCallAgg; public interface IRollCallMandatoryRepository : IRepository { - ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute); + ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute, double dailyWageUnAffected); /// /// محاسبه ساعات کارکرد پرسنل در صورت داشتن حضور غیاب diff --git a/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs b/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs index 7c2c71e1..cae19664 100644 --- a/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs +++ b/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs @@ -19,6 +19,15 @@ public interface IYearlySalaryRepository : IRepository List GetYears(); List GetYearlySalary(); + /// + /// دریافت مزد روزانه فیش حقوقی + /// + /// + /// + /// + /// + Task GetCheckoutDailyWage(EditContract contract, DateTime checkoutStart, DateTime checkoutEnd); + /// /// دریافت مزد روزانه بر اساس تاریخ شروع و پایان /// diff --git a/CompanyManagment.App.Contracts/Checkout/CreateCheckout.cs b/CompanyManagment.App.Contracts/Checkout/CreateCheckout.cs index 8baee048..d1d0a5a4 100644 --- a/CompanyManagment.App.Contracts/Checkout/CreateCheckout.cs +++ b/CompanyManagment.App.Contracts/Checkout/CreateCheckout.cs @@ -160,4 +160,35 @@ public class CreateCheckout public TimeSpan TotalPaidLeave { get; set; } public TimeSpan TotalSickLeave { get; set; } + + /// + /// دستمزد روزانه خام بعد از تاثیر ساعت کار + /// + public double DailySalaryAffected { get; set; } + + /// + /// پایه سنوات بعد از تاثیر ساعت کار + /// + public double BaseYearAffected { get; set; } + + + /// + /// دستمزد روزانه قبل از تاثیر ساعت کار + /// + public double DailySalaryUnAffected { get; set; } + + /// + /// دستمزد روزانه دریافت شده از سمت فرانت + /// + public string DailySalaryUnAffectedStr { get; set; } + + /// + /// مزد سالانه نرمال دریافت از سمت فرانت + /// + public string NormalDailyWage { get; set; } + + /// + /// پایه سنوات قبل از تاثیر ساعت کار + /// + public double BaseYearUnAffected { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/RollCall/IRollCallMandatoryApplication.cs b/CompanyManagment.App.Contracts/RollCall/IRollCallMandatoryApplication.cs index ce101b2b..d5da6b04 100644 --- a/CompanyManagment.App.Contracts/RollCall/IRollCallMandatoryApplication.cs +++ b/CompanyManagment.App.Contracts/RollCall/IRollCallMandatoryApplication.cs @@ -8,7 +8,7 @@ namespace CompanyManagment.App.Contracts.RollCall; public interface IRollCallMandatoryApplication { bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart); - ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute); + ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute, double dailyWageUnAffected); /// /// گزارش نوبت کاری حضور غیاب diff --git a/CompanyManagment.Application/CheckoutApplication.cs b/CompanyManagment.Application/CheckoutApplication.cs index 4101295b..5a54f502 100644 --- a/CompanyManagment.Application/CheckoutApplication.cs +++ b/CompanyManagment.Application/CheckoutApplication.cs @@ -152,17 +152,30 @@ public class CheckoutApplication : ICheckoutApplication 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); - //دستمزد ماهانه - var monthlyWage = MontlyYearsBunos.MontlyWage; - //سنوات - var years = command.YearsPay; + //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); + //دستمزد ماهانه + + #region Salary + + var totalDays = (command.ContractEndGr - command.ContractStartGr).TotalDays + 1; + + var mandatoryDays = totalDays - command.FridayStarttoEnd - command.officialholiday; + + if (!command.HasRollCall && command.ShiftWork != "4") + mandatoryDays = totalDays - command.FridayStarttoEnd; + var monthlyWage = command.DailySalaryAffected * mandatoryDays; + + //پایه سنوات + var bacicYears = command.BaseYearAffected * mandatoryDays; + #endregion + + //سنوات + var years = command.YearsPay; //عیدی و پاداش var bunos = command.BonusesPay; - //پایه سنوات - var bacicYears = MontlyYearsBunos.BasicYears; - var sumOfWorkingDays = MontlyYearsBunos.SumOfWorkingDay; + + var sumOfWorkingDays = $"{totalDays}"; if (command.friday > 0) { var fridayPercent = dayliWage * 40 / 100; diff --git a/CompanyManagment.Application/RollCallMandatoryApplication.cs b/CompanyManagment.Application/RollCallMandatoryApplication.cs index 617b906e..ec10dadd 100644 --- a/CompanyManagment.Application/RollCallMandatoryApplication.cs +++ b/CompanyManagment.Application/RollCallMandatoryApplication.cs @@ -21,9 +21,9 @@ public class RollCallMandatoryApplication : IRollCallMandatoryApplication return _rollCallMandatoryRepository.Exists(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date); } - public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute) + public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute, double dailyWageUnAffected) { - return _rollCallMandatoryRepository.MandatoryCompute(employeeId,workshopId, contractStart, contractEnd, command, holidayWorking, isStaticCheckout, rotatingShiftCompute); + return _rollCallMandatoryRepository.MandatoryCompute(employeeId,workshopId, contractStart, contractEnd, command, holidayWorking, isStaticCheckout, rotatingShiftCompute, dailyWageUnAffected); } public async Task RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart, DateTime contractEnd, diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index 0be63749..c36e540e 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -67,7 +67,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll #region OfficialChckout public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, - CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute) + CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute,double dailyWageUnAffected) { #region Entities @@ -488,20 +488,22 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll if (leftworkList == null) leftworkList = new List(); - var dayliFeeResult = _yearlySalaryRepository.DayliFeeComputing(startDate, contractStart, contractEnd, - command.EmployeeId, command.WorkshopId, leftworkList); - dayliFee = dayliFeeResult.DayliFee; - dayliFeeDouble = dayliFeeResult.DayliFeeDouble; - dayliFeeComplete = dayliFeeResult.DayliFee.MoneyToDouble(); - basic = dayliFeeResult.Basic; + //var dayliFeeResult = _yearlySalaryRepository.DayliFeeComputing(startDate, contractStart, contractEnd, + // command.EmployeeId, command.WorkshopId, leftworkList); + //dayliFee = dayliFeeResult.DayliFee; + //dayliFeeDouble = dayliFeeResult.DayliFeeDouble; + //dayliFeeComplete = dayliFeeResult.DayliFee.MoneyToDouble(); + //basic = dayliFeeResult.Basic; + //dayliFee = dailyWageUnAffected; var baseYear = _yearlySalaryRepository.BaseYearCompute(contractStart, contractEnd, command.EmployeeId, command.WorkshopId, leftworkList).Result; - dayliFee = (command.DailySalaryUnAffected + baseYear.BaseYearResult).ToMoney(); + dayliFee = (dailyWageUnAffected + baseYear.BaseYearResult).ToMoney(); + baseYearUnAffected = baseYear.BaseYearResult; baseYearAffected = baseYearUnAffected; - dailySalaryAffected = command.DailySalaryUnAffected; + dailySalaryAffected = dailyWageUnAffected; } #endregion @@ -526,15 +528,15 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll if (!string.IsNullOrWhiteSpace(command.ShiftWork)) { var workedHoursePerDay = totalHourses / mandatorDays; - var result = (dayliFeeDouble / 7.33) * workedHoursePerDay; + //var result = (dayliFeeDouble / 7.33) * workedHoursePerDay; - dayliFee = result.ToMoney(); + //dayliFee = result.ToMoney(); #region NeWdailyWage - var da = command.DailySalaryUnAffected / 7.33; + var da = dailyWageUnAffected / 7.33; dailySalaryAffected = da > 0 ? ((workedHoursePerDay * da).ToMoney()).MoneyToDouble() : 0; var ba = baseYearUnAffected / 7.33; baseYearAffected = ba > 0 ? ((workedHoursePerDay * ba).ToMoney()).MoneyToDouble() : 0; diff --git a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs index bb06a7e8..a53e3c8d 100644 --- a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs +++ b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs @@ -90,6 +90,33 @@ public class YearlySalaryRepository : RepositoryBase, IYearl #endregion + public async Task GetCheckoutDailyWage(EditContract contract, DateTime checkoutStart, DateTime checkoutEnd) + { + var contractEnd = ($"{contract.ContarctStart.FindeEndOfMonth()}").ToGeorgianDateTime(); + var contractYearlySalary = await + _context.YearlySalaries.FirstOrDefaultAsync(x => + x.StartDate <= contract.ContractStartGr && x.EndDate >= contractEnd); + var checkoutYearlySalary = await + _context.YearlySalaries.Include(x=>x.YearlySalaryItemsList).FirstOrDefaultAsync(x => + x.StartDate <= checkoutStart && x.EndDate >= checkoutEnd); + //اگر قرداد و فیش حقوی از یک مقادیر سالانه استفاده کرده اند + //مزد روزانه قرارداد رو میگیره + if (contractYearlySalary.id == checkoutYearlySalary.id) + return contract.DailySalaryUnAffected; + + if (contract.DailyWageType == "NormalDailyWage") + { + var normalDailyWage = checkoutYearlySalary + .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); + return normalDailyWage; + } + + + var res = UpgradeManualDailyWage(checkoutStart, contract.ContractStartGr, contract.DailySalaryUnAffected) + .GetAwaiter().GetResult(); + return res.DailyWage; + } + /// /// دریافت مزد روزانه بر اساس تاریخ شروع و پایان /// diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs index ff15a680..9a7bcb23 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs @@ -762,6 +762,7 @@ public class IndexModel : PageModel foreach (var item in ContractsId) { var contract = _contractApplication.GetDetails(item); + //var workingHours = _workingHoursApplication.GetByContractId(contract.Id); var workingHours = _workingHoursTempApplication.GetByContractIdConvertToShiftwork4(contract.Id); var separation = _contractApplication.contractSeparation(ConvertYear, ConvertMonth, @@ -780,7 +781,15 @@ public class IndexModel : PageModel //workshopInfo var workshop = _workshopApplication.GetDetails(contract.WorkshopIds); var mandatoryCompute = new ComputingViewModel(); - + + #region DailyWageCompute + + var dailyWageUnAffected = _yearlySalaryRepository.GetCheckoutDailyWage(contract, + separation.ContractStartGr, separation.ContractEndGr).GetAwaiter().GetResult(); + + + #endregion + var hasRollCall = _rollCallEmployeeStatusApp.HasRollCallRecord(contract.EmployeeId, contract.WorkshopIds, separation.ContractStartGr, separation.ContractEndGr); @@ -790,13 +799,13 @@ public class IndexModel : PageModel { mandatoryCompute = _rollCallMandatoryApplication.MandatoryCompute(contract.EmployeeId, contract.WorkshopIds, - separation.ContractStartGr, separation.ContractEndGr, workingHours, workshop.WorkshopHolidayWorking, false,workshop.RotatingShiftCompute); + separation.ContractStartGr, separation.ContractEndGr, workingHours, workshop.WorkshopHolidayWorking, false,workshop.RotatingShiftCompute, dailyWageUnAffected); } else { mandatoryCompute = _rollCallMandatoryApplication.MandatoryCompute(contract.EmployeeId, contract.WorkshopIds, - separation.ContractStartGr, separation.ContractEndGr, workingHours, workshop.WorkshopHolidayWorking, true,workshop.RotatingShiftCompute); + separation.ContractStartGr, separation.ContractEndGr, workingHours, workshop.WorkshopHolidayWorking, true,workshop.RotatingShiftCompute, dailyWageUnAffected); //var hasLeave = _leaveApplication.LeavOnChekout(separation.ContractStartGr, // separation.ContractEndGr, contract.EmployeeId, contract.WorkshopIds); //if (hasLeave != null) @@ -904,7 +913,7 @@ public class IndexModel : PageModel { foundMandatoryCompute = _rollCallMandatoryApplication.MandatoryCompute(contract.EmployeeId, contract.WorkshopIds, - found.ContractStart, found.ContractEnd, foundWorkingHours, workshop.WorkshopHolidayWorking, false, workshop.RotatingShiftCompute); + found.ContractStart, found.ContractEnd, foundWorkingHours, workshop.WorkshopHolidayWorking, false, workshop.RotatingShiftCompute, dailyWageUnAffected); } else @@ -1044,7 +1053,17 @@ public class IndexModel : PageModel // ساعت موظفی پرسنل برای این ماه EmployeeMandatoryHours = mandatoryCompute.EmployeeMandatoryHours, - HasInsuranceChekoutOverTime = workshop.InsuranceCheckoutOvertime + HasInsuranceChekoutOverTime = workshop.InsuranceCheckoutOvertime, + + BaseYearAffected = mandatoryCompute.BaseYearAffected, + + + + DailySalaryAffected = mandatoryCompute.DailySalaryAffected, + + + + }; _checkoutApplication.Create(command);