From 49b84b50a50c42fe84af7bbf9c752843fb3a7f8d Mon Sep 17 00:00:00 2001 From: SamSys Date: Mon, 18 Aug 2025 05:33:31 +0330 Subject: [PATCH 01/18] add dailywage select on create contract front --- Company.Domain/ContractAgg/Contract.cs | 31 + .../Company/Workshops/AutoExtension.cshtml | 935 ++++++++++-------- .../Company/Workshops/AutoExtension.cshtml.cs | 27 + ServiceHost/Properties/launchSettings.json | 2 +- .../page/Workshop/js/AutoExtension.js | 13 + 5 files changed, 581 insertions(+), 427 deletions(-) diff --git a/Company.Domain/ContractAgg/Contract.cs b/Company.Domain/ContractAgg/Contract.cs index 24e2e371..bf73b11d 100644 --- a/Company.Domain/ContractAgg/Contract.cs +++ b/Company.Domain/ContractAgg/Contract.cs @@ -65,7 +65,38 @@ public class Contract : EntityBase public DateTime SetContractDate { get; private set; } public string JobType { get; private set; } public string ContractType { get; private set; } + /// + /// مزد تجمیعی یعد از تاثیر ساعت کار + /// public string DayliWage { get; private set; } + + ///// + ///// دستمزد روزانه خام بعد از تاثیر ساعت کار + ///// + //public double DailySalaryAffected { get; set; } + + ///// + ///// پایه سنوات بعد از تاثیر ساعت کار + ///// + //public double BaseYearAffected { get; set; } + + + ///// + ///// دستمزد روزانه قبل از تاثیر ساعت کار + ///// + //public double DailySalaryUnAffected { get; set; } + + ///// + ///// پایه سنوات قبل از تاثیر ساعت کار + ///// + //public double BaseYearUnAffected { get; set; } + + ///// + ///// آیا دستمزد روزانه دستی وارد شده است؟ + ///// + //public bool HasManualDailyWage { get; set; } + + public string IsActiveString { get; private set; } public string ArchiveCode { get; private set; } public string WorkshopAddress1 { get; private set; } diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml index 31c60a1d..203c991a 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml @@ -4,447 +4,466 @@ @{ @section Styles{ + @*heder*@ + .top-Bar { + background-color: #c1dcd8; + height: 100px; + border-radius: 15px; + margin: 0px 2px 10px 2px; + box-shadow: 0px 1px 15px 0 #749883; + + } + .workshopName { + color: #fff; + background-color: #1b9998; + font-size: 15px; + border-radius: 15px; + height: 25px; + line-height: 1.8; + } + .manual { + background-color: #efefef; + min-height: 160px; + border-radius: 15px; + width: 49%; + box-shadow: 0px 1px 15px 0 #0f8181; + } + .automatic { + background-color: #efefef; + min-height: 160px; + border-radius: 15px; + width: 49%; + box-shadow: 0px 1px 15px 0 #0f8181 + } + .discManual { + border-radius: 20px 5px 0px 0px; + cursor: unset; + font-size: 12px; + padding: 3px 10px; + } + .inptAutomatic { + display: inline-block; + border-radius: 15px; + text-align: center; + } + .trueStatusHide { + display: none; + } + .falseStatusHide { + display: none; + } + .progBar { + display: none; + } + #createProcess { + background-color: #fdfdfd; + height: 100px; + border-radius: 15px; + margin: 0px 2px 10px 2px; + box-shadow: 0px 1px 15px 0 #1ebb5f; + } + .progress-bar { + color: #fff!important; + font-size: 17px !important; + line-height: 23px !important; + border-radius: 10px !important; + + } + + .dayliwage{ + width: 50% !important; + } + + .groupDailyWageDisable{ + background-color: #e1e1e1; + color: #bfbfbf; + pointer-events: none; + opacity: 0.5; + } + + .groupDailyWageEnable { + background-color: #d0d0d0; + color: #232323; + pointer-events:auto; + opacity: 1; + + } + } var i = 1; @@ -525,22 +544,30 @@
-

ایجاد قرارداد بصورت خودکار

+

انتخاب دستمزد بصورت گروهی


-
- تاریخ شروع - + -
- تاریخ پایان - -
+ +
@@ -653,7 +680,7 @@ پرسنل سمت - نوع قرارداد + دستمزد روزانه مدت قرارداد تاریخ شروع @@ -729,15 +756,16 @@ - - - - + + + + @@ -851,6 +879,61 @@ var EmployeesStartedWorkInSelectedPeriodAjaxUrl = '@Url.Page("./AutoExtension", "EmployeesStartedWorkInSelectedPeriod")'; + + diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs index 32439d90..d9b5c38c 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs @@ -644,6 +644,33 @@ public class AutoExtensionModel : PageModel #endregion + + public IActionResult OnPostSelectDailyWage(string wageType) + { + var res = "0"; + switch (wageType) + { + case "0": + res = "0"; + break; + case "1": + res = "1000"; + break; + case "2": + res = "2000"; + break; + case "3": + res = "3000"; + break; + } + + return new JsonResult(new + { + isSuccess = true, + result = res + }); + + } #region CreateContract public IActionResult OnPostCreateContract(List createContarctList) diff --git a/ServiceHost/Properties/launchSettings.json b/ServiceHost/Properties/launchSettings.json index 69be5550..788962e4 100644 --- a/ServiceHost/Properties/launchSettings.json +++ b/ServiceHost/Properties/launchSettings.json @@ -11,7 +11,7 @@ }, "ServiceHost": { "commandName": "Project", - "launchBrowser": false, + "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" diff --git a/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js index d8eead67..419a123f 100644 --- a/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js +++ b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js @@ -96,6 +96,8 @@ connection.on('showStatus', }); $('#firstCheckBtn').on('click', function () { + $("a.groupDailyWage") + .removeClass("groupDailyWageEnable"); $('#datatable tbody tr').each(function (i) { const tagTrue = $(this).find(".ion-checkmark-circled"); const tagFalse = $(this).find(".ion-close-circled"); @@ -177,8 +179,10 @@ $('#firstCheckBtn').on('click', if (continueCheck && dateInputPannel) { if (checkboxCount > 0) { + $('#datatable tbody tr').each(function (i) { let chekbox = $(this).find("input[name=selectItem]"); + $(this).find(".selectDailyWageModel").prop("disabled", true); if (chekbox.is(":checked") == true) { employeeId = $(this).attr("data-employeeId"); start = $(this).find("input[name=contarctStart]").val(); @@ -358,6 +362,7 @@ $('#firstCheckBtn').on('click', } else { $(this).removeClass("redColor"); $(this).addClass("greenColor"); + $(this).find(".selectDailyWageModel").prop("disabled", false); //$(this).find("input[type=checkbox]").removeAttr("disabled"); //$(this).find("input[type=checkbox]").prop("checked", true); var iTagTrue = $(this).find(".ion-checkmark-circled"); @@ -419,6 +424,14 @@ $('#firstCheckBtn').on('click', }); //end of each + + + var greenCount = $("table tr.greenColor").length; + + if (greenCount >= 1) { + $("a.groupDailyWage") + .addClass("groupDailyWageEnable"); + } } else { //checkboxCount If statment $.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', " هیچ موردی انتخاب نشده است - میتوانید بصورت گروهی یا تکی، پرسنل را تیک بزنید"); From 4a3515ad6595f8680aca270fd63430be68f28289 Mon Sep 17 00:00:00 2001 From: SamSys Date: Wed, 20 Aug 2025 02:52:06 +0330 Subject: [PATCH 02/18] manualDailyWage frontEnd Completed --- 0_Framework/Application/Tools.cs | 46 ++++-- .../IYearlySalaryRepository.cs | 9 + .../YearlySalary/IYearlySalaryApplication.cs | 9 + .../YearlySalaryApplication.cs | 5 + .../Repository/YearlySalaryRepository.cs | 20 ++- .../Company/Workshops/AutoExtension.cshtml | 155 +++++++++++++----- .../Company/Workshops/AutoExtension.cshtml.cs | 58 +++++-- .../page/Workshop/js/AutoExtension.js | 21 ++- 8 files changed, 250 insertions(+), 73 deletions(-) diff --git a/0_Framework/Application/Tools.cs b/0_Framework/Application/Tools.cs index d959c33e..98f58bb9 100644 --- a/0_Framework/Application/Tools.cs +++ b/0_Framework/Application/Tools.cs @@ -477,26 +477,42 @@ public static class Tools string bb = string.Empty; bool isNegative = false; - for (int x = 0; x < myMoney.Length; x++) + try { - if (char.IsDigit(myMoney[x])) + if (!string.IsNullOrWhiteSpace(myMoney)) { - bb += myMoney[x]; - } - else if (myMoney[x] == '-' && bb.Length == 0) - { - // اگر علامت منفی قبل از اولین عدد آمد، در نظر بگیر - isNegative = true; - } - } + for (int x = 0; x < myMoney.Length; x++) + { + if (char.IsDigit(myMoney[x])) + { + bb += myMoney[x]; + } + else if (myMoney[x] == '-' && bb.Length == 0) + { + // اگر علامت منفی قبل از اولین عدد آمد، در نظر بگیر + isNegative = true; + } + } - if (bb.Length > 0) - { - double res = double.Parse(bb); - return isNegative ? -res : res; + if (bb.Length > 0) + { + double res = double.Parse(bb); + return isNegative ? -res : res; + } + else + { + return 0; + } + } + else + { + return 0; + } + } - else + catch (Exception) { + return 0; } } diff --git a/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs b/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs index 3c488984..d5fd6e69 100644 --- a/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs +++ b/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs @@ -17,6 +17,15 @@ public interface IYearlySalaryRepository : IRepository void TestDayliFeeCompute(); List GetYears(); List GetYearlySalary(); + + /// + /// دریافت مزد روزانه بر اساس تاریخ شروع و پایان + /// + /// + /// + /// + Task 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); double GetOverTimeWorking(double dayliWage, string overTimeWorkH, string overTimeWorkM); diff --git a/CompanyManagment.App.Contracts/YearlySalary/IYearlySalaryApplication.cs b/CompanyManagment.App.Contracts/YearlySalary/IYearlySalaryApplication.cs index 42e5b33e..aece16d7 100644 --- a/CompanyManagment.App.Contracts/YearlySalary/IYearlySalaryApplication.cs +++ b/CompanyManagment.App.Contracts/YearlySalary/IYearlySalaryApplication.cs @@ -14,6 +14,15 @@ public interface IYearlySalaryApplication OperationResult Err(); EditYearlySalary GetDetails(long id); List GetYearlySalary(); + + /// + /// دریافت مزد روزانه بر اساس تاریخ شروع و پایان + /// + /// + /// + /// + Task GetDailyWageByStartEnd(DateTime start, DateTime end); + List Search(YearlySalarySearchModel searchModel); EditYearlySalary GetDetailsBySearchModel(YearlySalarySearchModel searchModel); diff --git a/CompanyManagment.Application/YearlySalaryApplication.cs b/CompanyManagment.Application/YearlySalaryApplication.cs index f5535933..232289e3 100644 --- a/CompanyManagment.Application/YearlySalaryApplication.cs +++ b/CompanyManagment.Application/YearlySalaryApplication.cs @@ -128,6 +128,11 @@ public class YearlySalaryApplication : IYearlySalaryApplication return _yearlySalaryRepository.GetYearlySalary(); } + public async Task GetDailyWageByStartEnd(DateTime start, DateTime end) + { + return await _yearlySalaryRepository.GetDailyWageByStartEnd(start, end); + } + public List Search(YearlySalarySearchModel searchModel) { return _yearlySalaryRepository.Search(searchModel); diff --git a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs index e148e46a..cf3f669e 100644 --- a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs +++ b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs @@ -87,9 +87,27 @@ public class YearlySalaryRepository : RepositoryBase, IYearl .OrderByDescending(x => x.Year).ToList(); } - #endregion + #endregion + /// + /// دریافت مزد روزانه بر اساس تاریخ شروع و پایان + /// + /// + /// + /// + public async Task 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; + if (salary != null) + { + dailyWage = salary + .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); + } + return dailyWage; + + } //محاسبه حقوق ماهیانه عیدی و پاداش ، سنوات #region GetMontlyBunosYears public MontlywageBunosYearsViewModel GetMontlyBunosYears(TimeSpan weeklyTime, DateTime contractStart, DateTime contractEnd, double daylyWage, diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml index 203c991a..92959192 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml @@ -4,6 +4,15 @@ @{ @section Styles{ +} + +
+ +
+ +
+
+
+
+
نام پرسنل
+
@Model.EmployeeName
+
+
+
+
+ + + +
+
+
+
+
نام کارگاه
+
@Model.WorkshopName
+
+
+
+ +
+
+ + + @if (Model.OldComputeMethod) + { +
+
+ +
+ + + + +
+
+
این قراداد با روش قدیم محاسبه مزد ایجاد شده است
+ +
+
+ +
+ +
+
+ +
+
+ } + else + { + @if (Model.Contradiction) + { +
+
+ +
+ + + + +
+
+
+ +

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

+

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

+ +
+ +
+
+ +
+ +
+
+ } +
+
+ +
+ + +
محاسبه پایه سنوات
+ + @if (Model.BaseYearDataViewModel.BaseYearResult > 0) + { + @foreach (var item in Model.BaseYearDataViewModel.BaseYearDataList) + { + if (item.HasStartWork) + { +
+
+
@item.BaseYearPayDay
+
شروع بکار
+
+
+ } + else if (item.HasLeftWork) + { +
+
+
@item.BaseYearPayDay
+
ترک کار
+
+
+ } + else + { + if (item.BaseYearPayDay == "-") + { +
+
+
+ + @item.BaseYearPayDayGr.ToFarsi() + فقط ارتقاء +
+
@item.BaseYear.ToMoney()
+
+
+ } + else + { +
+
+
@item.BaseYearPayDay
+
@item.BaseYear.ToMoney()
+
+
+ } + } + } + } + else + { +
+
+
+
پایه سنوات ندارد
+
+
+
+ } + +
+
+
+ +
+ + +
محاسبه مزد روزانه
+ + + @{ + if (@Model.DailyWageType == "UpgradedDailyWage") + { +
+
+
بازه ارتقاء
+
ارتقاء مزد
+ +
+ +
+ + @foreach (var dailyWage in @Model.UpgradeManualDailyWageLists) + { +
+
+
@dailyWage.StartEndDate
+
@dailyWage.DailyWage
+
+
+ } + + } + else if (@Model.DailyWageType == "ManualDailyWage") + { + +
+
+
مزد دلخواه
+
@Model.DailySalaryUnAffected
+ +
+
+ + } + else + { +
+
+
مزد سالانه
+
@Model.DailySalaryUnAffected
+ +
+
+ + } + } + + +
+
+
+ +
+
+ +
+ + +
نتایج محاسبه پایه سنوات
+
+
+
بدون تاثیر ساعت کار
+
@Model.BaseYearDataViewModel.BaseYearResult.ToMoney()
+
+
+
+
+
متاثر از ساعت کار
+
@Model.BaseYearAffected
+
+
+ +
+
+
+ +
+ + +
نتایج محاسبه مزد روزانه
+ +
+
+
بدون تاثیر ساعت کار
+
@Model.DailySalaryUnAffected
+
+
+ +
+
+
متاثر از ساعت کار
+
@Model.DailySalaryAffected
+
+
+
+
+
+ +
+
+ +
+ + +
دستمزد روزانه تجمیعی
+ + +
+
+
@Model.ContractDate
+
@Model.DailyWage
+
+
+ +
+ +
+ +
+ +
+
+ } + +
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml index 284170cf..7b890d77 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml @@ -47,6 +47,13 @@ position: relative; } + .dailyWageReportIcon { + font-size: 20px !important; + top: 2px !important; + position: relative; + padding :6px !important; + } + .ionRad { border-radius: 8px !important; padding: 0px 7px 0px 7px !important; @@ -797,9 +804,13 @@ - + + +
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml.cs index 0c0a6c1a..afbb1a98 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml.cs @@ -135,6 +135,69 @@ public class IndexModel : PageModel employeeFullName = searchModel.EmployeeName; } + /// + /// نحوه محاسبه پایه سنوات و ارتقاء مزد رو نمایش میده + /// + /// + /// + public async Task OnGetDailyWageAndBaseYearReport(long contractId) + { + var res = new ContractDailyWageAndBaseYearReport(); + var contract = _contractApplication.GetDetails(contractId); + var employeeName = _employeeApplication.GetDetails(contract.EmployeeId).EmployeeFullName; + var workshopName = _workshopApplication.GetWorkshopInfo(contract.WorkshopIds).WorkshopFullName; + var baseYearResult =await _yearlySalaryApplication.BaseYearComputeByContractId(contractId); + + if (contract.DailySalaryUnAffected == 0 || string.IsNullOrWhiteSpace(contract.DailyWageType)) + { + res = new ContractDailyWageAndBaseYearReport() + { + + EmployeeName = employeeName, + WorkshopName = workshopName, + Contradiction = false, + OldComputeMethod = true, + + + }; + + return Partial("DailyWageAndBaseYearReport", res); + } + + var dailyWageListResult = new List(); + bool contradiction = false; + if (contract.DailyWageType == "UpgradedDailyWage") + { + var upgradeDailyWageResult = _contractRepository.GetManualDailWageList(contract.WorkshopIds, + contract.EmployeeId, contract.ContractStartGr).GetAwaiter().GetResult(); + dailyWageListResult = upgradeDailyWageResult.UpgradeManualDailyWageLists; + + //اگر مغایرت داشت + if (contract.DailySalaryUnAffected.ToMoney().MoneyToDouble() != upgradeDailyWageResult.DailyWage.ToMoney().MoneyToDouble() + || baseYearResult.BaseYearResult.ToMoney().MoneyToDouble() != contract.BaseYearUnAffected.ToMoney().MoneyToDouble()) + contradiction = true; + } + + + + + res = new ContractDailyWageAndBaseYearReport() + { + BaseYearDataViewModel = baseYearResult, + BaseYearAffected = contract.BaseYearAffected > 0 ? contract.BaseYearAffected.ToMoney() : "0", + DailySalaryAffected = contract.DailySalaryAffected > 0 ? contract.DailySalaryAffected.ToMoney() : "0", + DailySalaryUnAffected = contract.DailySalaryUnAffected > 0 ? contract.DailySalaryUnAffected.ToMoney() : "0", + DailyWage = contract.DayliWage, + ContractDate = $"تا تاریخ {contract.ContarctStart.FindeEndOfMonth()}", + DailyWageType = contract.DailyWageType, + UpgradeManualDailyWageLists = dailyWageListResult, + EmployeeName = employeeName, + WorkshopName = workshopName, + Contradiction = contradiction, + + }; + return Partial("DailyWageAndBaseYearReport", res); + } public async Task OnGetPersonelMainList(string searchEmployee) { diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs index a8bb4f22..fb4af99a 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs @@ -724,12 +724,25 @@ public class AutoExtensionModel : PageModel foreach (var item in createContarctList) { #region NewManualDailyWage - + double normaldailyWage = item.NormalDailyWage.MoneyToDouble(); double dailySalaryUnAffected = item.DailySalaryUnAffectedStr.MoneyToDouble(); item.HasManualDailyWage = dailySalaryUnAffected > normaldailyWage; item.DailySalaryUnAffected = dailySalaryUnAffected; + + switch (item.DailyWageType) + { + case "1": item.DailyWageType = "NormalDailyWage"; + break; + case "2": + item.DailyWageType = item.HasManualDailyWage == true ? "UpgradedDailyWage" : "NormalDailyWage"; + break; + case "3": + item.DailyWageType = "ManualDailyWage"; + break; + + } #endregion var result = diff --git a/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js index 1e98d3fc..89d7583e 100644 --- a/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js +++ b/ServiceHost/wwwroot/AssetsAdmin/page/Workshop/js/AutoExtension.js @@ -573,6 +573,7 @@ $('#startProcess').on('click', createContractModel.NormalDailyWage = $(this).find("input[name=normalDailyWage]").val(); createContractModel.DailySalaryUnAffectedStr = $(this).find("input[name=dailySalaryUnAffectedStr]").val(); + createContractModel.DailyWageType = $(this).find("select[name=dailyWageType]").val(); if (createContractModel.DailySalaryUnAffectedStr == "0") { $(this).find("input[name=dailySalaryUnAffectedStr]").addClass("erroreManual"); startCreate = false; From 77458978b5b0bdb1869e8a23ea2c68328bf85705 Mon Sep 17 00:00:00 2001 From: SamSys Date: Sun, 31 Aug 2025 05:28:59 +0330 Subject: [PATCH 08/18] checkout change --- .../Repository/RollCallMandatoryRepository.cs | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index 261dea2c..0be63749 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -479,6 +479,9 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll var startDate = command.GetWorkDateHide.ToGeorgianDateTime(); var dayliFee = "خطای تاریخ"; double dayliFeeDouble = 0; + double baseYearUnAffected = 0; + double baseYearAffected = 0; + double dailySalaryAffected = 0; if (styear >= 1370) { @@ -491,6 +494,14 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll dayliFeeDouble = dayliFeeResult.DayliFeeDouble; dayliFeeComplete = dayliFeeResult.DayliFee.MoneyToDouble(); basic = dayliFeeResult.Basic; + + + var baseYear = _yearlySalaryRepository.BaseYearCompute(contractStart, contractEnd, command.EmployeeId, + command.WorkshopId, leftworkList).Result; + dayliFee = (command.DailySalaryUnAffected + baseYear.BaseYearResult).ToMoney(); + + baseYearAffected = baseYearUnAffected; + dailySalaryAffected = command.DailySalaryUnAffected; } #endregion @@ -520,6 +531,21 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll dayliFee = result.ToMoney(); + + #region NeWdailyWage + + var da = command.DailySalaryUnAffected / 7.33; + dailySalaryAffected = da > 0 ? ((workedHoursePerDay * da).ToMoney()).MoneyToDouble() : 0; + var ba = baseYearUnAffected / 7.33; + baseYearAffected = ba > 0 ? ((workedHoursePerDay * ba).ToMoney()).MoneyToDouble() : 0; + + var fullDailySalary = dailySalaryAffected + baseYearAffected; + dayliFee = fullDailySalary.ToMoney(); + + #endregion + + + var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble(); var HousingStep1 = HousingAllowonceNumberType / 30; var HousingStep2 = HousingStep1 / 7.33; @@ -892,6 +918,13 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll //ساعت موظفی پرسنل در این ماه EmployeeMandatoryHours = mandatoryHoursTimeSpan, #endregion + + #region NewDailWage + + BaseYearAffected = baseYearAffected, + DailySalaryAffected = dailySalaryAffected, + + #endregion }; #endregion From 29fed23805e6319f2af160fbb8e5f5c7f5e5ea95 Mon Sep 17 00:00:00 2001 From: SamSys Date: Tue, 2 Sep 2025 04:33:30 +0330 Subject: [PATCH 09/18] 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); From b5fc98a47ba12f93397ee6dbde5691e90eb88994 Mon Sep 17 00:00:00 2001 From: SamSys Date: Mon, 8 Sep 2025 00:50:28 +0330 Subject: [PATCH 10/18] test mirror --- Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs index b9c58e62..2de9ba33 100644 --- a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs +++ b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs @@ -10,6 +10,7 @@ namespace Company.Domain.ClassifiedSalaryAgg { public class ClassifiedSalary : EntityBase { + //test public ClassifiedSalary(double group1, double group2, double group3, double group4, double group5, double group6, double group7, double group8, double group9, double group10, double group11, double group12, double group13, double group14, double group15, double group16, double group17, double group18, double group19, double group20, DateTime startDate, DateTime endDate, int year) { Group1 = group1; From 7d3a1dad71bf53d9d20e1b8845314d1b294dc102 Mon Sep 17 00:00:00 2001 From: SamSys Date: Mon, 8 Sep 2025 00:53:59 +0330 Subject: [PATCH 11/18] test mirror2 --- Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs index 2de9ba33..1e67bc01 100644 --- a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs +++ b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs @@ -10,7 +10,7 @@ namespace Company.Domain.ClassifiedSalaryAgg { public class ClassifiedSalary : EntityBase { - //test + //test//test public ClassifiedSalary(double group1, double group2, double group3, double group4, double group5, double group6, double group7, double group8, double group9, double group10, double group11, double group12, double group13, double group14, double group15, double group16, double group17, double group18, double group19, double group20, DateTime startDate, DateTime endDate, int year) { Group1 = group1; From b3cf56eb1c6278160d6235d917c9a86805d14b9e Mon Sep 17 00:00:00 2001 From: SamSys Date: Tue, 16 Sep 2025 03:01:41 +0330 Subject: [PATCH 12/18] conflict Fixed --- Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs b/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs index 5ea7c4dc..9d501157 100644 --- a/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs +++ b/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs @@ -15,8 +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, double dailyWageUnAffected); - ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute, bool totalLeaveCompute); + ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute, double dailyWageUnAffected, bool totalLeaveCompute); /// /// محاسبه ساعات کارکرد پرسنل در صورت داشتن حضور غیاب From d0928804ee472cf17bfa1f79bd4c43881da282be Mon Sep 17 00:00:00 2001 From: SamSys Date: Tue, 30 Sep 2025 22:05:12 +0330 Subject: [PATCH 13/18] new permission to DailyWageReport btn on Contract list --- .../Areas/Admin/Pages/Accounts/Account/CreateRole.cshtml | 7 +++++-- .../Areas/Admin/Pages/Accounts/Account/EditRole.cshtml | 9 ++++++--- .../Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs | 2 +- .../Areas/Admin/Pages/Company/Contracts/Index.cshtml | 2 +- .../Admin/Pages/Company/Workshops/AutoExtension.cshtml | 6 +++--- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/ServiceHost/Areas/Admin/Pages/Accounts/Account/CreateRole.cshtml b/ServiceHost/Areas/Admin/Pages/Accounts/Account/CreateRole.cshtml index fca01fe8..e0faa6dd 100644 --- a/ServiceHost/Areas/Admin/Pages/Accounts/Account/CreateRole.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Accounts/Account/CreateRole.cshtml @@ -400,8 +400,11 @@
-
- +
+ +
+
+
@*تصفیه*@ diff --git a/ServiceHost/Areas/Admin/Pages/Accounts/Account/EditRole.cshtml b/ServiceHost/Areas/Admin/Pages/Accounts/Account/EditRole.cshtml index 025f5756..8e2a87a3 100644 --- a/ServiceHost/Areas/Admin/Pages/Accounts/Account/EditRole.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Accounts/Account/EditRole.cshtml @@ -401,9 +401,12 @@
-
- -
+
+ +
+
+ +
@*تصفیه*@
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs index a7a2904a..0dc5ea9d 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs @@ -1089,7 +1089,7 @@ public class IndexModel : PageModel EmployeeMandatoryHours = mandatoryCompute.EmployeeMandatoryHours, HasInsuranceChekoutOverTime = workshop.InsuranceCheckoutOvertime, - HasLeft = separation.HasLeft + HasLeft = separation.HasLeft, BaseYearAffected = mandatoryCompute.BaseYearAffected, diff --git a/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml index 7b890d77..4865d1a4 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml @@ -808,7 +808,7 @@ href="#showmodal=@Url.Page("./Index", "CreatePaidLeave", new {employeeId = item.EmployeeId, workshopId = item.WorkshopIds})"> - diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml index 76959dab..711503e5 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml @@ -559,19 +559,19 @@

-
+ -
+ -
+
مزد دلخواه From 8fb10ba5b06e954d301286cddff5597f8ee59f80 Mon Sep 17 00:00:00 2001 From: mahan Date: Wed, 1 Oct 2025 16:32:58 +0330 Subject: [PATCH 14/18] add validation for leave --- .../Leave/LeavErrorViewModel.cs | 3 +++ CompanyManagment.Application/LeaveApplication.cs | 4 ++++ CompanyManagment.EFCore/Repository/LeaveRepository.cs | 11 +++++++++++ 3 files changed, 18 insertions(+) diff --git a/CompanyManagment.App.Contracts/Leave/LeavErrorViewModel.cs b/CompanyManagment.App.Contracts/Leave/LeavErrorViewModel.cs index 24953c80..d4fcfe49 100644 --- a/CompanyManagment.App.Contracts/Leave/LeavErrorViewModel.cs +++ b/CompanyManagment.App.Contracts/Leave/LeavErrorViewModel.cs @@ -14,5 +14,8 @@ namespace CompanyManagment.App.Contracts.Leave public string LeftWorlErrMessage { get; set; } public bool HasNotContract { get; set; } public string ContractErrMessage { get; set; } + + public bool HasHolidayError { get; set; } + public string HolidayErrorMessage { get; set; } } } diff --git a/CompanyManagment.Application/LeaveApplication.cs b/CompanyManagment.Application/LeaveApplication.cs index b504cab5..a532608e 100644 --- a/CompanyManagment.Application/LeaveApplication.cs +++ b/CompanyManagment.Application/LeaveApplication.cs @@ -96,6 +96,8 @@ public class LeaveApplication : ILeaveApplication return op.Failed(checkErr.ContractErrMessage); if (checkErr.HasLeftWork) return op.Failed(checkErr.LeftWorlErrMessage); + if (checkErr.HasHolidayError) + return op.Failed(checkErr.HolidayErrorMessage); if (start > end) return op.Failed("تارخ شروع از پایان بزرگتر است"); @@ -304,6 +306,8 @@ public class LeaveApplication : ILeaveApplication return op.Failed(checkErr.CheckoutErrMessage); if (checkErr.HasLeftWork) return op.Failed(checkErr.LeftWorlErrMessage); + if (checkErr.HasHolidayError) + return op.Failed(checkErr.HolidayErrorMessage); if (start > end) return op.Failed("تارخ شروع از پایان بزرگتر است"); diff --git a/CompanyManagment.EFCore/Repository/LeaveRepository.cs b/CompanyManagment.EFCore/Repository/LeaveRepository.cs index d2fe7013..ef53d722 100644 --- a/CompanyManagment.EFCore/Repository/LeaveRepository.cs +++ b/CompanyManagment.EFCore/Repository/LeaveRepository.cs @@ -454,6 +454,17 @@ public class LeaveRepository : RepositoryBase, ILeaveRepository #endregion + #region HolidayError + + if (_context.HolidayItems.Any(x => startLeav.Date == x.Holidaydate.Date) || + startLeav.DayOfWeek == DayOfWeek.Friday) + { + res.HasHolidayError = true; + res.HolidayErrorMessage = "شما نمیتوانید در روز های تعطیل مرخصی ثبت کنید"; + } + + #endregion + return res; } From f4c3aa18896a55b41ebe1daf8e20562f0744b84b Mon Sep 17 00:00:00 2001 From: SamSys Date: Thu, 2 Oct 2025 13:03:29 +0330 Subject: [PATCH 15/18] Except Personnel checkoutChange --- .../Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs index 0dc5ea9d..698f318f 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs @@ -992,7 +992,12 @@ public class IndexModel : PageModel officialHoliday, totalHoursH, totalHoursM, consumableItemDouble, housingAllowanceDouble, familyAllowanceDouble, marriedAllowanceDouble, workshop.IsOldContract); - + //فاطمه احمدژاد === موقت عیدی و پاداش و سنوات حساب نشه + if (employee.Id == 45104 && workshop.Id == 315) + { + bunosesPay.Bunoses = 0; + yearsPay.YearsPay = 0; + } var command = new CreateCheckout { EmployeeFullName = employee.EmployeeFullName, From 5a7f233568083888c4c5cb434b7aab4109f22020 Mon Sep 17 00:00:00 2001 From: SamSys Date: Thu, 2 Oct 2025 14:22:48 +0330 Subject: [PATCH 16/18] checkout dailyWage bug fixed --- .../CheckoutApplication.cs | 11 +++++++++-- .../Repository/YearlySalaryRepository.cs | 15 ++++++++++++++- .../Admin/Pages/Company/Checkouts/Index.cshtml.cs | 7 +------ 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/CompanyManagment.Application/CheckoutApplication.cs b/CompanyManagment.Application/CheckoutApplication.cs index 78714756..4a35934e 100644 --- a/CompanyManagment.Application/CheckoutApplication.cs +++ b/CompanyManagment.Application/CheckoutApplication.cs @@ -174,8 +174,15 @@ public class CheckoutApplication : ICheckoutApplication var years = command.YearsPay; //عیدی و پاداش var bunos = command.BonusesPay; - - var sumOfWorkingDays = $"{totalDays}"; + + //فاطمه احمدژاد === موقت عیدی و پاداش و سنوات حساب نشه + if (command.EmployeeId == 45104 && command.WorkshopId == 315) + { + years = 0; + bunos = 0; + } + + var sumOfWorkingDays = $"{totalDays}"; if (command.friday > 0) { var fridayPercent = dayliWage * 40 / 100; diff --git a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs index ca9b3137..081ef131 100644 --- a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs +++ b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs @@ -102,7 +102,20 @@ public class YearlySalaryRepository : RepositoryBase, IYearl //اگر قرداد و فیش حقوی از یک مقادیر سالانه استفاده کرده اند //مزد روزانه قرارداد رو میگیره if (contractYearlySalary.id == checkoutYearlySalary.id) - return contract.DailySalaryUnAffected; + { + if (contract.DailySalaryUnAffected > 0) + { + return contract.DailySalaryUnAffected; + } + else + { + var normalDailyWage = checkoutYearlySalary + .YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault(); + return normalDailyWage; + } + + } + if (contract.DailyWageType == "NormalDailyWage") { diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs index 698f318f..05e3fdac 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs @@ -992,12 +992,7 @@ public class IndexModel : PageModel officialHoliday, totalHoursH, totalHoursM, consumableItemDouble, housingAllowanceDouble, familyAllowanceDouble, marriedAllowanceDouble, workshop.IsOldContract); - //فاطمه احمدژاد === موقت عیدی و پاداش و سنوات حساب نشه - if (employee.Id == 45104 && workshop.Id == 315) - { - bunosesPay.Bunoses = 0; - yearsPay.YearsPay = 0; - } + var command = new CreateCheckout { EmployeeFullName = employee.EmployeeFullName, From 55f62da9287969575d5dc519eedee7afa5147e63 Mon Sep 17 00:00:00 2001 From: SamSys Date: Thu, 2 Oct 2025 15:39:01 +0330 Subject: [PATCH 17/18] monthlyWage bug fixed --- CompanyManagment.Application/CheckoutApplication.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CompanyManagment.Application/CheckoutApplication.cs b/CompanyManagment.Application/CheckoutApplication.cs index 4a35934e..3b0984c9 100644 --- a/CompanyManagment.Application/CheckoutApplication.cs +++ b/CompanyManagment.Application/CheckoutApplication.cs @@ -164,10 +164,10 @@ public class CheckoutApplication : ICheckoutApplication if (!command.HasRollCall && command.ShiftWork != "4") mandatoryDays = totalDays - command.FridayStarttoEnd; - var monthlyWage = command.DailySalaryAffected * mandatoryDays; + var monthlyWage = command.DailySalaryAffected * totalDays; //پایه سنوات - var bacicYears = command.BaseYearAffected * mandatoryDays; + var bacicYears = command.BaseYearAffected * totalDays; #endregion //سنوات @@ -178,7 +178,7 @@ public class CheckoutApplication : ICheckoutApplication //فاطمه احمدژاد === موقت عیدی و پاداش و سنوات حساب نشه if (command.EmployeeId == 45104 && command.WorkshopId == 315) { - years = 0; + bunos = 0; } From 87cde91ad094facc1191088df653ff9fc0cc1527 Mon Sep 17 00:00:00 2001 From: SamSys Date: Thu, 2 Oct 2025 16:11:38 +0330 Subject: [PATCH 18/18] Extecpt Condition EmployeeId = 45104, workshopId = 315 --- CompanyManagment.Application/CheckoutApplication.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CompanyManagment.Application/CheckoutApplication.cs b/CompanyManagment.Application/CheckoutApplication.cs index 3b0984c9..9ef0b0f8 100644 --- a/CompanyManagment.Application/CheckoutApplication.cs +++ b/CompanyManagment.Application/CheckoutApplication.cs @@ -178,7 +178,8 @@ public class CheckoutApplication : ICheckoutApplication //فاطمه احمدژاد === موقت عیدی و پاداش و سنوات حساب نشه if (command.EmployeeId == 45104 && command.WorkshopId == 315) { - + years = 0; + bunos = 0; }