diff --git a/Company.Domain/ContractAgg/IContractRepository.cs b/Company.Domain/ContractAgg/IContractRepository.cs index 808c7e3b..132d0348 100644 --- a/Company.Domain/ContractAgg/IContractRepository.cs +++ b/Company.Domain/ContractAgg/IContractRepository.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework.Domain; using CompanyManagment.App.Contracts.Contract; @@ -9,6 +10,14 @@ namespace Company.Domain.ContractAgg; public interface IContractRepository : IRepository { + /// + /// دریافت مزد ارتقاء یافته + /// + /// + /// + /// + /// + Task GetManualDailWage(long workshopId, long employeeId, long yearlySalaryId, DateTime contractStart); EditContract GetDetails(long id); EditContract GetContractByStartEnd(DateTime start, DateTime end, long workshopId, long employeeId); diff --git a/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs b/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs index d5fd6e69..4b28d607 100644 --- a/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs +++ b/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs @@ -17,14 +17,14 @@ public interface IYearlySalaryRepository : IRepository void TestDayliFeeCompute(); List GetYears(); List GetYearlySalary(); - + /// /// دریافت مزد روزانه بر اساس تاریخ شروع و پایان /// /// /// /// - Task GetDailyWageByStartEnd(DateTime start, DateTime end); + Task<(double dailyWage, long yearlySalaryId)> GetDailyWageByStartEnd(DateTime start, DateTime end); MontlywageBunosYearsViewModel GetMontlyBunosYears(TimeSpan weeklyTime, DateTime contractStart,DateTime contractEnd, double daylyWage, string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM, string basic, int fridayStartToEnd, double dayliFeeComplete, bool hasRollCall, bool holidaysWorking,string shiftWork); double GetLeavePay(DateTime contractStart, DateTime contractEnd, double daylyWage, double consumableItem, double housingAllowance, double familyAllowance , string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM); diff --git a/CompanyManagment.App.Contracts/Contract/IContractApplication.cs b/CompanyManagment.App.Contracts/Contract/IContractApplication.cs index d7dfbc79..5048b564 100644 --- a/CompanyManagment.App.Contracts/Contract/IContractApplication.cs +++ b/CompanyManagment.App.Contracts/Contract/IContractApplication.cs @@ -7,6 +7,14 @@ namespace CompanyManagment.App.Contracts.Contract; public interface IContractApplication { + /// + /// دریافت مزد ارتقاء یافته + /// + /// + /// + /// + /// + Task GetManualDailWage(long workshopId, long employeeId, long yearlySalaryId, DateTime contractStart); OperationResult Create(CreateContract command); OperationResult CreateNew(createContractModel command); OperationResult Edit(EditContract command); diff --git a/CompanyManagment.App.Contracts/YearlySalary/IYearlySalaryApplication.cs b/CompanyManagment.App.Contracts/YearlySalary/IYearlySalaryApplication.cs index aece16d7..cd4331bb 100644 --- a/CompanyManagment.App.Contracts/YearlySalary/IYearlySalaryApplication.cs +++ b/CompanyManagment.App.Contracts/YearlySalary/IYearlySalaryApplication.cs @@ -21,7 +21,7 @@ public interface IYearlySalaryApplication /// /// /// - Task GetDailyWageByStartEnd(DateTime start, DateTime end); + Task<(double dailyWage, long yearlySalaryId)> GetDailyWageByStartEnd(DateTime start, DateTime end); List Search(YearlySalarySearchModel searchModel); EditYearlySalary GetDetailsBySearchModel(YearlySalarySearchModel searchModel); diff --git a/CompanyManagment.Application/ContractApplication.cs b/CompanyManagment.Application/ContractApplication.cs index eb40bb19..bca7cf32 100644 --- a/CompanyManagment.Application/ContractApplication.cs +++ b/CompanyManagment.Application/ContractApplication.cs @@ -78,6 +78,11 @@ public class ContractApplication : IContractApplication } + public async Task GetManualDailWage(long workshopId, long employeeId, long yearlySalaryId, DateTime contractStart) + { + return await _contractRepository.GetManualDailWage(workshopId, employeeId, yearlySalaryId, contractStart); + } + public OperationResult Create(CreateContract command) { var yearlysalaryList = _yearlySalaryRepository.GetYearlySalary(); diff --git a/CompanyManagment.Application/YearlySalaryApplication.cs b/CompanyManagment.Application/YearlySalaryApplication.cs index 232289e3..4e9b4522 100644 --- a/CompanyManagment.Application/YearlySalaryApplication.cs +++ b/CompanyManagment.Application/YearlySalaryApplication.cs @@ -128,7 +128,7 @@ public class YearlySalaryApplication : IYearlySalaryApplication return _yearlySalaryRepository.GetYearlySalary(); } - public async Task GetDailyWageByStartEnd(DateTime start, DateTime end) + public async Task<(double dailyWage, long yearlySalaryId)> GetDailyWageByStartEnd(DateTime start, DateTime end) { return await _yearlySalaryRepository.GetDailyWageByStartEnd(start, end); } diff --git a/CompanyManagment.EFCore/Repository/ContractRepository.cs b/CompanyManagment.EFCore/Repository/ContractRepository.cs index ca9f853d..b68c3099 100644 --- a/CompanyManagment.EFCore/Repository/ContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/ContractRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Linq; @@ -43,15 +44,34 @@ public class ContractRepository : RepositoryBase, IContractRepos } - public async Task GetManualDailWage(long workshopId, long employeeId) + public async Task GetManualDailWage(long workshopId, long employeeId, long yearlySalaryId, DateTime contractStart) { var lastContract = await _context.Contracts - .Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && x.IsActiveString == "true") + .Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && x.IsActiveString == "true" && x.ContarctStart < contractStart) .OrderByDescending(x => x.ContarctStart) .FirstOrDefaultAsync(); + //اگر قردادی قبل از قرارداد جدید نداشت if (lastContract == null) return 0; + //اگر آخرین قرداد مزد دلخواه نداشت + if (!lastContract.HasManualDailyWage) + return 0; + + var lastContractYearlySalary = await _context.YearlySalaries + .FirstOrDefaultAsync(x => x.StartDate <= lastContract.ContarctStart && x.EndDate >= lastContract.ContarctStart); + + //اگر دستمزد آخرین قراداد و قرداد جدید از یک مقادیر سالانه بودن بدون ارتقاء دستمزد دلخواه آخرین قرداد ارسال میشه + if (lastContractYearlySalary.id == yearlySalaryId) + return lastContract.DailySalaryUnAffected; + + + + + + + + return 0; } diff --git a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs index cf3f669e..0afe1773 100644 --- a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs +++ b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs @@ -95,7 +95,7 @@ public class YearlySalaryRepository : RepositoryBase, IYearl /// /// /// - public async Task GetDailyWageByStartEnd(DateTime start, DateTime end) + public async Task<(double dailyWage, long yearlySalaryId)> GetDailyWageByStartEnd(DateTime start, DateTime end) { var salary = await _context.YearlySalaries.Where(x => x.StartDate <= start && x.EndDate >= end).Include(x => x.YearlySalaryItemsList).FirstOrDefaultAsync(); double dailyWage = 0; @@ -103,9 +103,10 @@ public class YearlySalaryRepository : RepositoryBase, IYearl { dailyWage = salary .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); + return (dailyWage, salary.id); } - return dailyWage; + return (dailyWage, 0); } //محاسبه حقوق ماهیانه عیدی و پاداش ، سنوات diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml index a3fffe99..76959dab 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml @@ -689,7 +689,9 @@ پرسنل سمت - دستمزد روزانه + دستمزد روزانه + + نوع قراداد مدت قرارداد تاریخ شروع @@ -765,18 +767,30 @@ - - - - + + + -
- - +
+ + + + + + + + + @@ -911,23 +925,29 @@ } $('#datatable tbody tr').each(function (i) { + const chekbox = $(this).find("input[name=selectItem]"); + const statustrue = $(this).find("input[name=isStatusTrue]"); + + if(chekbox.is(":checked") && statustrue.is(":checked")){ + let input = $(this).find(".dayliwage"); // اینپوت مرتبط با همین سلکت + + let normalDailyWageHidden = $(this).find(".normalDailyWage").val(); + let upgradedDailyWageHidden = $(this).find(".upgradedDailyWage").val(); + $(this).find(".errorCompare").addClass("falseStatusHide"); + $(this).find(".dayliwage").removeClass("erroreManual"); + switch(num){ + + case 1: input.val(normalDailyWageHidden);input.prop("disabled", true); + break; + case 2 : input.val(upgradedDailyWageHidden); input.prop("disabled", true); + break; + case 3 : input.val(normalDailyWageHidden); input.prop("disabled", false); + break; + } + } - let input = $(this).find(".dayliwage"); // اینپوت مرتبط با همین سلکت - - let normalDailyWageHidden = $(this).find(".normalDailyWage").val(); - $(this).find(".errorCompare").addClass("falseStatusHide"); - $(this).find(".dayliwage").removeClass("erroreManual"); - switch(num){ - - case 1: input.val(normalDailyWageHidden);input.prop("disabled", true); - break; - case 2 : input.val("0"); input.prop("disabled", true); - break; - case 3 : input.val(normalDailyWageHidden); input.prop("disabled", false); - break; - } }); } @@ -991,6 +1011,7 @@ let selectedValue = $(this).val(); // مقدار انتخاب شده let input = $(this).closest("td").find(".dayliwage"); // اینپوت مرتبط با همین سلکت let normalDailyWageHidden = $(this).closest("td").find(".normalDailyWage").val(); + let upgradedDailyWageHidden = $(this).closest("td").find(".upgradedDailyWage").val(); $(this).closest("td").find(".errorCompare").addClass("falseStatusHide"); input.removeClass("erroreManual"); switch(selectedValue){ @@ -998,7 +1019,7 @@ break; case "1" : input.val(normalDailyWageHidden);input.prop("disabled", true); break; - case "2" : input.val("0"); input.prop("disabled", true); + case "2" : input.val(upgradedDailyWageHidden); input.prop("disabled", true); break; case "3" : input.val(normalDailyWageHidden); input.prop("disabled", false); break; diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs index 2539245c..5b2c2930 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs @@ -568,21 +568,32 @@ public class AutoExtensionModel : PageModel //return Partial("Alert", alarm); if (!string.IsNullOrWhiteSpace(contractExistCheck)) contractExist = true; + //تاریخ پایان را پایان ماه شزع قرارداد در نظر میگیریم //زیرا ممکن است تاریخ پایان قراداد در همان سال نباشد var endOfMonthFromStart = ($"{start.ToFarsi().FindeEndOfMonth()}").ToGeorgianDateTime(); - var normaldailyWage = _yearlySalaryApplication.GetDailyWageByStartEnd(start, endOfMonthFromStart).GetAwaiter().GetResult(); - - //var contract = _contractApplication.SearchForCheckout() + (double dailyWage, long yearlySalaryId) normalDailyWage = (0,0); + double upgradedDailyWage =0; + if (!contractExist) + { + normalDailyWage = _yearlySalaryApplication.GetDailyWageByStartEnd(start, endOfMonthFromStart).GetAwaiter().GetResult(); + + upgradedDailyWage = + _contractApplication.GetManualDailWage(workshopId, employeeId, normalDailyWage.yearlySalaryId, start).GetAwaiter().GetResult(); + if (upgradedDailyWage == 0) + upgradedDailyWage = normalDailyWage.dailyWage; + } + return new JsonResult(new { success = true, getWorkDate = getWorkDateHide, errContractExist = contractExist, errLeftValid = leftValid, - normalDailyWage = normaldailyWage.ToMoney(), + normalDailyWage = normalDailyWage.dailyWage > 0 ? normalDailyWage.dailyWage.ToMoney() : "0", + upgradedDailyWage = upgradedDailyWage > 0 ? upgradedDailyWage.ToMoney() : "0", }); } @@ -5483,7 +5494,7 @@ public class AutoExtensionModel : PageModel double baseYearUnAffected = 0; double baseYearAffected = 0; double dailySalaryAffected = 0; - + if (styear >= 1370) { if (leftworkList == null) @@ -5491,14 +5502,14 @@ public class AutoExtensionModel : PageModel //var dayliFeeResult = _yearlySalaryRepository.DayliFeeComputing(startDate, contractStartDate, // contractStartDate, command.EmployeeId, command.WorkshopId, leftworkList); - + var baseYear = _yearlySalaryRepository.BaseYearCompute(contractStartDate, endDate, command.EmployeeId, command.WorkshopId, leftworkList).Result; dayliFee = (command.DailySalaryUnAffected + baseYear.BaseYearResult).ToMoney(); //basic = dayliFeeResult.Basic; - - baseYearUnAffected = baseYear.BaseYearResult; - baseYearAffected = baseYear.BaseYearResult; + + baseYearUnAffected = baseYear.BaseYearResult > 0 ? (baseYear.BaseYearResult.ToMoney()).MoneyToDouble() : 0; + baseYearAffected = baseYearUnAffected; dailySalaryAffected = command.DailySalaryUnAffected; } @@ -5687,20 +5698,22 @@ public class AutoExtensionModel : PageModel //var dividedForOneDay = totalHourses / notHolidaysCount; if (totalHourses < FixHourses) { - var DailyFeeNumberType = dayliFee.MoneyToDouble(); - var dailyStep1 = DailyFeeNumberType / 7.33; + //var DailyFeeNumberType = dayliFee.MoneyToDouble(); + //var dailyStep1 = DailyFeeNumberType / 7.33; var hoursesPerDay = totalHourses / TotalDaysNoFriday; - var result = hoursesPerDay * dailyStep1; + //var result = hoursesPerDay * dailyStep1; - dayliFee = result.ToMoney(); + //dayliFee = result.ToMoney(); var da = command.DailySalaryUnAffected / 7.33; - dailySalaryAffected = hoursesPerDay * da; + dailySalaryAffected = da > 0 ? ((hoursesPerDay * da).ToMoney()).MoneyToDouble() : 0 ; var ba = baseYearUnAffected / 7.33; - baseYearAffected = hoursesPerDay * ba; + baseYearAffected = ba > 0 ? ((hoursesPerDay * ba).ToMoney()).MoneyToDouble() : 0; - var fullDailysalar = dailySalaryAffected + baseYearAffected; - var test = fullDailysalar.ToMoney(); + var fullDailySalary = dailySalaryAffected + baseYearAffected; + dayliFee = fullDailySalary.ToMoney(); + + var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble(); var HousingStep1 = HousingAllowonceNumberType / 30; // کمک هزینه خام به ازای روز @@ -5787,12 +5800,21 @@ public class AutoExtensionModel : PageModel if (totalHourses < FixHourses) { - var dailyFeeNumberType = dayliFee.MoneyToDouble(); - var dailyStep1 = dailyFeeNumberType / 7.33; + //var dailyFeeNumberType = dayliFee.MoneyToDouble(); + //var dailyStep1 = dailyFeeNumberType / 7.33; var hoursesPerDay = totalHourses / TotalDaysNoFriday; - var result = hoursesPerDay * dailyStep1; + //var result = hoursesPerDay * dailyStep1; + + //dayliFee = result.ToMoney(); + + var da = command.DailySalaryUnAffected / 7.33; + dailySalaryAffected = da > 0 ? ((hoursesPerDay * da).ToMoney()).MoneyToDouble() : 0; + var ba = baseYearUnAffected / 7.33; + baseYearAffected = ba > 0 ? ((hoursesPerDay * ba).ToMoney()).MoneyToDouble() : 0; + + var fullDailySalary = dailySalaryAffected + baseYearAffected; + dayliFee = fullDailySalary.ToMoney(); - dayliFee = result.ToMoney(); //var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble(); //var HousingStep1 = HousingAllowonceNumberType / 30; diff --git a/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js index 06f19ff5..1e98d3fc 100644 --- a/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js +++ b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js @@ -146,7 +146,7 @@ $('#firstCheckBtn').on('click', var workshopId = $('#workshopId').val(); var normalDailyWage = "0"; - + var upgradedDailyWage = "0"; var address = $('#wAddress1').val(); const checkboxCount = $('#datatable').find("input[type=checkbox]:checked").length; //ERR Response @@ -345,6 +345,7 @@ $('#firstCheckBtn').on('click', errContractExist = response.errContractExist; normalDailyWage = response.normalDailyWage; + upgradedDailyWage = response.upgradedDailyWage; } }, failure: function (response) { @@ -380,6 +381,7 @@ $('#firstCheckBtn').on('click', $(this).addClass("greenColor"); $(this).find(".selectDailyWageModel").prop("disabled", false); $(this).find(".normalDailyWage").val(normalDailyWage); + $(this).find(".upgradedDailyWage").val(upgradedDailyWage); $(this).find(".sdate").prop("disabled", true); $(this).find(".edate").prop("disabled", true); //$(this).find("input[type=checkbox]").removeAttr("disabled"); @@ -571,7 +573,10 @@ $('#startProcess').on('click', createContractModel.NormalDailyWage = $(this).find("input[name=normalDailyWage]").val(); createContractModel.DailySalaryUnAffectedStr = $(this).find("input[name=dailySalaryUnAffectedStr]").val(); - + if (createContractModel.DailySalaryUnAffectedStr == "0") { + $(this).find("input[name=dailySalaryUnAffectedStr]").addClass("erroreManual"); + startCreate = false; + } createContarctList.push(createContractModel);