diff --git a/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs b/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs index 4b28d607..6a89a33d 100644 --- a/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs +++ b/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs @@ -30,7 +30,17 @@ public interface IYearlySalaryRepository : IRepository 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); - + + /// + /// متد ارتقاء مزد دلخواه + /// + /// + /// + /// + /// + Task UpgradeManualDailyWage(DateTime newContractStart, DateTime lastContractStart, + double lastContractManualDailyWage); + /// /// متد محاسبه پایه سنوات و لیست پایه سنوات های پرسنل /// diff --git a/CompanyManagment.EFCore/Repository/ContractRepository.cs b/CompanyManagment.EFCore/Repository/ContractRepository.cs index b68c3099..1b10a33e 100644 --- a/CompanyManagment.EFCore/Repository/ContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/ContractRepository.cs @@ -64,16 +64,17 @@ public class ContractRepository : RepositoryBase, 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) diff --git a/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs b/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs index 4ae7dc87..09e6ce71 100644 --- a/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs +++ b/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs @@ -122,6 +122,7 @@ public class LeftWorkRepository : RepositoryBase, ILeftWorkRepos AddYearsPay = x.AddYearsPay, AddLeavePay = x.AddLeavePay, JobId = x.JobId, + HasLeft = x.HasLeft, JobName = _context.Jobs.FirstOrDefault(j => j.id == x.JobId).JobName diff --git a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs index 0afe1773..57ede850 100644 --- a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs +++ b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs @@ -816,7 +816,82 @@ public class YearlySalaryRepository : RepositoryBase, IYearl } //محاسبه حقوق روزانه #region DayliSalary - + + public async Task 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; + } + + /// /// متد محاسبه پایه سنوات /// @@ -879,9 +954,13 @@ public class YearlySalaryRepository : RepositoryBase, 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, IYearl { int max365 = 0; int dayCounter = 0; + bool hasCute = false; foreach (var leftWork in leftWorkList) { //اگر ترک کار کرده بود پایان چرخه تاریخ آخرین روز کاری اوست @@ -916,18 +996,44 @@ public class YearlySalaryRepository : RepositoryBase, 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, IYearl baseYear = currentBase; - + // var round = GetCurrectFirstDailyFee(currentBase, $"{year}"); var record = (baseYear, currentSalary.StartDate, currentSalary.EndDate, currentSalary.Year); baseList.Add(record); diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs index 5b2c2930..a8bb4f22 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/AutoExtension.cshtml.cs @@ -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;