Upgraded daillyWage Completed

This commit is contained in:
SamSys
2025-08-24 03:37:54 +03:30
parent 584425b3af
commit 8f76b8c082
5 changed files with 138 additions and 19 deletions

View File

@@ -30,7 +30,17 @@ public interface IYearlySalaryRepository : IRepository<long, YearlySalary>
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);
double GetOverNightWorking(double dayliWage, string overNightWorkH, string overNightWorkM, string weeklyWorkingTime, int officialholiday, int friday, DateTime contractStart, DateTime contractEnd, string totalHoursH, string totalHorsM);
/// <summary>
/// متد ارتقاء مزد دلخواه
/// </summary>
/// <param name="newContractStart"></param>
/// <param name="lastContractStart"></param>
/// <param name="lastContractManualDailyWage"></param>
/// <returns></returns>
Task<double> UpgradeManualDailyWage(DateTime newContractStart, DateTime lastContractStart,
double lastContractManualDailyWage);
/// <summary>
/// متد محاسبه پایه سنوات و لیست پایه سنوات های پرسنل
/// </summary>

View File

@@ -64,16 +64,17 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
//اگر دستمزد آخرین قراداد و قرداد جدید از یک مقادیر سالانه بودن بدون ارتقاء دستمزد دلخواه آخرین قرداد ارسال میشه
if (lastContractYearlySalary.id == yearlySalaryId)
return lastContract.DailySalaryUnAffected;
double dailyWage = _yearlySalaryRepository.UpgradeManualDailyWage(contractStart,
lastContractYearlySalary.StartDate, lastContract.DailySalaryUnAffected).GetAwaiter().GetResult();
return 0;
return dailyWage;
}
public EditContract GetDetails(long id)

View File

@@ -122,6 +122,7 @@ public class LeftWorkRepository : RepositoryBase<long, LeftWork>, ILeftWorkRepos
AddYearsPay = x.AddYearsPay,
AddLeavePay = x.AddLeavePay,
JobId = x.JobId,
HasLeft = x.HasLeft,
JobName = _context.Jobs.FirstOrDefault(j => j.id == x.JobId).JobName

View File

@@ -816,7 +816,82 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
}
//محاسبه حقوق روزانه
#region DayliSalary
public async Task<double> UpgradeManualDailyWage(DateTime newContractStart, DateTime lastContractStart, double lastContractManualDailyWage)
{
//تمام مقادیر سالانه بعد از مزد دلخواه آخرین قراداد
var salaries = await _context.YearlySalaries
.Where(x=> x. StartDate > lastContractStart && x.StartDate <= newContractStart && x.EndDate >= lastContractStart)
.Include(x => x.YearlySalaryItemsList).ToListAsync();
//مقادیر سالانه آخرین قرارداد
var lastContractSalary = await _context.YearlySalaries.FirstOrDefaultAsync(x =>
x.StartDate <= lastContractStart && x.EndDate >= lastContractStart);
var res = MonthByMonthList(lastContractStart, newContractStart);
var dailyWageList = new List<(double dailyWage, DateTime start, DateTime end, string year)>();
var first = (lastContractManualDailyWage, lastContractSalary.StartDate, lastContractSalary.EndDate, lastContractSalary.Year);
dailyWageList.Add(first);
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"{lastContractSalary.StartDate.ToFarsi()} -> firstDailyWage : {lastContractStart}");
foreach (var item in res)
{
var lastReecord = dailyWageList.Last();
var year = Convert.ToInt32(item.start.ToFarsi().Substring(0, 4));
if (item.start > lastReecord.end && lastReecord.year != $"{year}")
{
var selectedSalary = salaries.Where(x => x.Year == $"{year}").OrderBy(x => x.StartDate).ToList();
var currentSalary = selectedSalary.First();
if (selectedSalary.Count > 1)
{
currentSalary = selectedSalary.Last();
var firstSalery = selectedSalary.First();
if (newContractStart < currentSalary.StartDate)
{
currentSalary = firstSalery;
}
}
var fixFeePercentage = currentSalary
.YearlySalaryItemsList.Where(x => x.ItemName == "درصد مزد ثابت").Select(x => x.ItemValue).FirstOrDefault();
// مبلغ مزد ثابت سال جاری
var fixFeePrice = currentSalary
.YearlySalaryItemsList.Where(x => x.ItemName == "مبلغ مزد ثابت").Select(x => x.ItemValue).FirstOrDefault();
// مزد روزانه سال قبل ضربدر درصد مزد ثابت تقسیم بر صد
var percntSumDaylifee = (lastReecord.dailyWage * fixFeePercentage) / 100;
// نتیجه عملیات بالا بعلاوه مزد سال قبل
var Sum = lastReecord.dailyWage + percntSumDaylifee;
//مزد پایه
var dailyWage = Sum + fixFeePrice;
// var round = GetCurrectFirstDailyFee(currentBase, $"{year}");
var record = (dailyWage, currentSalary.StartDate, currentSalary.EndDate, currentSalary.Year);
dailyWageList.Add(record);
Console.WriteLine($"{record.StartDate.ToFarsi()} -> upgradedDailyWage : {record.dailyWage}");
}
}
Console.WriteLine($"{newContractStart.ToFarsi()} -> upgradedDailyWage : {dailyWageList.Last().dailyWage}");
return dailyWageList.Last().dailyWage;
}
/// <summary>
/// متد محاسبه پایه سنوات
/// </summary>
@@ -879,9 +954,13 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
var a = current.AddDays(1);
checkKabiseh = true;
baseYearDateList.Add(a);
Console.WriteLine($" End : {a.ToFarsi()}");
if (a <= endComputeDate)
{
checkKabiseh = true;
baseYearDateList.Add(a);
Console.WriteLine($" End : {a.ToFarsi()}");
}
}
@@ -892,6 +971,7 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
{
int max365 = 0;
int dayCounter = 0;
bool hasCute = false;
foreach (var leftWork in leftWorkList)
{
//اگر ترک کار کرده بود پایان چرخه تاریخ آخرین روز کاری اوست
@@ -916,18 +996,44 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
dayCounter += 1;
checkKabiseh = false;
if (dayCounter == max365)
{
var a = !hasCute ? current.AddDays(1) : current;
if (a <= endComputeDate)
{
checkKabiseh = true;
baseYearDateList.Add(a);
Console.WriteLine($" End : {a.ToFarsi()}");
Console.WriteLine(dayCounter);
if (hasCute)
{
dayCounter = 1;
isKabiseh = ($"{current.ToFarsi()}").YearTotalDays() == 367 ? true : false;
max365 = isKabiseh ? 366 : 365;
checkKabiseh = true;
var a = current.AddDays(1);
baseYearDateList.Add(a);
Console.WriteLine($" End : {a.ToFarsi()}");
Console.WriteLine(dayCounter);
dayCounter = 0;
string kabise = "";
if (isKabiseh)
kabise = "kabise";
Console.WriteLine($" start : {current.ToFarsi()} {kabise}");
}
else
{
dayCounter = 0;
}
hasCute = false;
}
else
{
hasCute = true;
max365 += 1;
}
}
}
@@ -1007,7 +1113,7 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
baseYear = currentBase;
// var round = GetCurrectFirstDailyFee(currentBase, $"{year}");
var record = (baseYear, currentSalary.StartDate, currentSalary.EndDate, currentSalary.Year);
baseList.Add(record);

View File

@@ -5502,12 +5502,13 @@ 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;
//Console.WriteLine($"oldDaily : {dayliFeeResult.DayliFee} newDaily {dayliFee}");
baseYearUnAffected = baseYear.BaseYearResult > 0 ? (baseYear.BaseYearResult.ToMoney()).MoneyToDouble() : 0;
baseYearAffected = baseYearUnAffected;
dailySalaryAffected = command.DailySalaryUnAffected;