Checkout NEW Compute DailyWage Completed

This commit is contained in:
SamSys
2025-09-02 04:33:30 +03:30
parent a26f079969
commit 29fed23805
9 changed files with 131 additions and 30 deletions

View File

@@ -15,7 +15,7 @@ namespace Company.Domain.RollCallAgg;
public interface IRollCallMandatoryRepository : IRepository<long, RollCall>
{
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);
/// <summary>
/// محاسبه ساعات کارکرد پرسنل در صورت داشتن حضور غیاب

View File

@@ -19,6 +19,15 @@ public interface IYearlySalaryRepository : IRepository<long, YearlySalary>
List<string> GetYears();
List<YearlySalaryViewModel> GetYearlySalary();
/// <summary>
/// دریافت مزد روزانه فیش حقوقی
/// </summary>
/// <param name="contract"></param>
/// <param name="checkoutStart"></param>
/// <param name="checkoutEnd"></param>
/// <returns></returns>
Task<double> GetCheckoutDailyWage(EditContract contract, DateTime checkoutStart, DateTime checkoutEnd);
/// <summary>
/// دریافت مزد روزانه بر اساس تاریخ شروع و پایان
/// </summary>

View File

@@ -160,4 +160,35 @@ public class CreateCheckout
public TimeSpan TotalPaidLeave { get; set; }
public TimeSpan TotalSickLeave { get; set; }
/// <summary>
/// دستمزد روزانه خام بعد از تاثیر ساعت کار
/// </summary>
public double DailySalaryAffected { get; set; }
/// <summary>
/// پایه سنوات بعد از تاثیر ساعت کار
/// </summary>
public double BaseYearAffected { get; set; }
/// <summary>
/// دستمزد روزانه قبل از تاثیر ساعت کار
/// </summary>
public double DailySalaryUnAffected { get; set; }
/// <summary>
/// دستمزد روزانه دریافت شده از سمت فرانت
/// </summary>
public string DailySalaryUnAffectedStr { get; set; }
/// <summary>
/// مزد سالانه نرمال دریافت از سمت فرانت
/// </summary>
public string NormalDailyWage { get; set; }
/// <summary>
/// پایه سنوات قبل از تاثیر ساعت کار
/// </summary>
public double BaseYearUnAffected { get; set; }
}

View File

@@ -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);
/// <summary>
/// گزارش نوبت کاری حضور غیاب

View File

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

View File

@@ -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<ComputingViewModel> RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart, DateTime contractEnd,

View File

@@ -67,7 +67,7 @@ public class RollCallMandatoryRepository : RepositoryBase<long, RollCall>, 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<long, RollCall>, IRoll
if (leftworkList == null)
leftworkList = new List<LeftWorkViewModel>();
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<long, RollCall>, 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;

View File

@@ -90,6 +90,33 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
#endregion
public async Task<double> 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;
}
/// <summary>
/// دریافت مزد روزانه بر اساس تاریخ شروع و پایان
/// </summary>

View File

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