and new metod to upgrade dailyWage

This commit is contained in:
SamSys
2025-08-23 07:09:56 +03:30
parent 2f60883ea2
commit 584425b3af
11 changed files with 145 additions and 54 deletions

View File

@@ -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<long, Contract>
{
/// <summary>
/// دریافت مزد ارتقاء یافته
/// </summary>
/// <param name="workshopId"></param>
/// <param name="employeeId"></param>
/// <param name="yearlySalaryId"></param>
/// <returns></returns>
Task<double> GetManualDailWage(long workshopId, long employeeId, long yearlySalaryId, DateTime contractStart);
EditContract GetDetails(long id);
EditContract GetContractByStartEnd(DateTime start, DateTime end, long workshopId, long employeeId);

View File

@@ -17,14 +17,14 @@ public interface IYearlySalaryRepository : IRepository<long, YearlySalary>
void TestDayliFeeCompute();
List<string> GetYears();
List<YearlySalaryViewModel> GetYearlySalary();
/// <summary>
/// دریافت مزد روزانه بر اساس تاریخ شروع و پایان
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
Task<double> 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);

View File

@@ -7,6 +7,14 @@ namespace CompanyManagment.App.Contracts.Contract;
public interface IContractApplication
{
/// <summary>
/// دریافت مزد ارتقاء یافته
/// </summary>
/// <param name="workshopId"></param>
/// <param name="employeeId"></param>
/// <param name="yearlySalaryId"></param>
/// <returns></returns>
Task<double> GetManualDailWage(long workshopId, long employeeId, long yearlySalaryId, DateTime contractStart);
OperationResult Create(CreateContract command);
OperationResult CreateNew(createContractModel command);
OperationResult Edit(EditContract command);

View File

@@ -21,7 +21,7 @@ public interface IYearlySalaryApplication
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
Task<double> GetDailyWageByStartEnd(DateTime start, DateTime end);
Task<(double dailyWage, long yearlySalaryId)> GetDailyWageByStartEnd(DateTime start, DateTime end);
List<YearlySalaryViewModel> Search(YearlySalarySearchModel searchModel);
EditYearlySalary GetDetailsBySearchModel(YearlySalarySearchModel searchModel);

View File

@@ -78,6 +78,11 @@ public class ContractApplication : IContractApplication
}
public async Task<double> 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();

View File

@@ -128,7 +128,7 @@ public class YearlySalaryApplication : IYearlySalaryApplication
return _yearlySalaryRepository.GetYearlySalary();
}
public async Task<double> GetDailyWageByStartEnd(DateTime start, DateTime end)
public async Task<(double dailyWage, long yearlySalaryId)> GetDailyWageByStartEnd(DateTime start, DateTime end)
{
return await _yearlySalaryRepository.GetDailyWageByStartEnd(start, end);
}

View File

@@ -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<long, Contract>, IContractRepos
}
public async Task<double> GetManualDailWage(long workshopId, long employeeId)
public async Task<double> 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;
}

View File

@@ -95,7 +95,7 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
public async Task<double> 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<long, YearlySalary>, IYearl
{
dailyWage = salary
.YearlySalaryItemsList.Where(x => x.ItemName == "مزد روزانه").Select(x => x.ItemValue).FirstOrDefault();
return (dailyWage, salary.id);
}
return dailyWage;
return (dailyWage, 0);
}
//محاسبه حقوق ماهیانه عیدی و پاداش ، سنوات

View File

@@ -689,7 +689,9 @@
<th style="font-size: 10px !important" class="sizeSet sorting_asc_disabled sorting_desc_disabled">پرسنل</th>
<th style="font-size: 10px !important" class="sizeSet sorting_asc_disabled sorting_asc_disabled">سمت</th>
<th style="font-size: 10px !important" class="sizeSet sorting_asc_disabled sorting_asc_disabled"> دستمزد روزانه </th>
<th style="font-size: 10px !important" class="sizeSet sorting_asc_disabled sorting_asc_disabled"> دستمزد روزانه </th>
<th style="display: none;font-size: 10px !important" class="sizeSet sorting_asc_disabled sorting_asc_disabled">نوع قراداد</th>
<th style="display: none;font-size: 10px !important" class="sizeSet sorting_asc_disabled sorting_asc_disabled">مدت قرارداد</th>
<th style="font-size: 10px !important" class="sizeSet sorting_asc_disabled sorting_desc_disabled">تاریخ شروع</th>
@@ -765,18 +767,30 @@
</td>
<td style="font-family: 'IranSans' !important; font-size: 12px !important; text-align: center; min-width: 70px;direction: ltr">
<input type="hidden" name="normalDailyWage" value="0" class="normalDailyWage" />
<input type="text" name="dailySalaryUnAffectedStr" disabled="disabled" value="0" class="dayliwage form-control" style="text-align: center; border-radius: 7px; height: 24px;" />
<select disabled="disabled" name="dailyWageType" class="selectDailyWageModel" style="background-color: #fafafa;color: rgba(0, 0, 0, 0.6);border: 1px solid #c7c7c7 !important;border-radius: 5px;box-shadow: none;padding:0px 2px 3px">
<td style="font-family: 'IranSans' !important; font-size: 12px !important; text-align: center; min-width: 70px;direction: ltr">
<input type="hidden" name="normalDailyWage" value="0" class="normalDailyWage" />
<input type="hidden" name="upgradedDailyWage" value="0" class="upgradedDailyWage" />
<input type="text" name="dailySalaryUnAffectedStr" disabled="disabled" value="0" class="dayliwage form-control" style="text-align: center; border-radius: 7px; height: 24px;" />
<select disabled="disabled" name="dailyWageType" class="selectDailyWageModel" style="background-color: #fafafa;color: rgba(0, 0, 0, 0.6);border: 1px solid #c7c7c7 !important;border-radius: 5px;box-shadow: none;padding:0px 2px 3px">
<option value="0">انتخاب دستمزد</option>
<option value="1">مزد سالانه</option>
<option value="2">مزد ارتقاء یافته</option>
<option value="3">مزد دلخواه</option>
</select>
<br/>
<span class="errorCompare falseStatusHide" style="color:red; font-size: 10.5px"></span>
</td>
<br/>
<span class="errorCompare falseStatusHide" style="color:red; font-size: 10.5px"></span>
</td>
<td style="display: none;font-family: 'IranSans' !important; font-size: 12px !important; text-align: center; min-width: 70px;">
<select name="contractType" class="contractType">
<option value="موقت">موقت</option>
<option value="دائم">دائم</option>
<option value="معین">معین</option>
</select>
</td>
<td style="display: none;font-family: 'IranSans' !important; font-size: 12px !important; text-align: center; min-width: 90px;">
@@ -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;

View File

@@ -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;

View File

@@ -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);