refactor LeavePayMetotds

This commit is contained in:
SamSys
2025-06-02 13:33:21 +03:30
parent c81da3e787
commit 2208834a0e

View File

@@ -2241,6 +2241,50 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
return new TimeSpan();
return breakTimeSpan; ;
}
private (bool hasRollCall, double WorkingTotalHours) GetTotalWorkingHoursIfHasRollCall(long employeeId,long workshopId, DateTime contractStart, DateTime contractEnd)
{
bool hasRollCall = _rollCallEmployeeRepository.HasRollCallRecord(employeeId, workshopId,
contractStart, contractEnd);
double totalWorkingHours = 0;
if (!hasRollCall)
return (false, 0);
List<RollCallViewModel> rollCallResult;
List<GroupedRollCalls> groupedRollCall;
rollCallResult = _context.RollCalls.Where(x =>
x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart &&
x.StartDate.Value.Date <= contractEnd && x.EndDate != null).Select(x => new RollCallViewModel()
{
StartDate = x.StartDate,
EndDate = x.EndDate,
ShiftSpan = (x.EndDate.Value - x.StartDate.Value),
CreationDate = x.ShiftDate,
BreakTimeSpan = x.BreakTimeSpan
}).ToList();
groupedRollCall = rollCallResult.GroupBy(x => x.CreationDate.Date).Select(x => new GroupedRollCalls()
{
CreationDate = x.Key,
ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value }).ToList(),
HasFriday = x.Any(s => s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)),
SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - CalculateBreakTime(x.First().BreakTimeSpan,
new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))),
}).OrderBy(x => x.CreationDate).ToList();
TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks));
totalWorkingHours = sumSpans.TotalMinutes / 60;
return (true, totalWorkingHours);
}
public List<ContractsCanToLeave> LeftWorkCantoleaveList(DateTime startDate, DateTime endDate, long workshopId, long employeeId, bool hasleft, DateTime leftWorkDate, int fridayStartToEnd, int officialHoliday, string totalHoursH, string totalHorsM, DateTime separationStartDate)
{
// {مقدار ساعت مجاز مرخصی در برای یک روز{کامل
@@ -2280,43 +2324,13 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
var contractTotallDays = Convert.ToInt32((contract.ContractEnd - contract.ContarctStart).TotalDays + 1);
if (contractTotallDays <= 31)
{
var hasRollCall = _rollCallEmployeeRepository.HasRollCallRecord(employeeId, workshopId,
var rollCallTotalHoures = GetTotalWorkingHoursIfHasRollCall(employeeId, workshopId,
contract.ContarctStart.Date, contract.ContractEnd.Date);
if (hasRollCall)
if (rollCallTotalHoures.hasRollCall)
{
List<RollCallViewModel> rollCallResult;
List<GroupedRollCalls> groupedRollCall;
rollCallResult = _context.RollCalls.Where(x =>
x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contract.ContarctStart.Date &&
x.StartDate.Value.Date <= contract.ContractEnd.Date && x.EndDate != null).Select(x => new RollCallViewModel()
{
StartDate = x.StartDate,
EndDate = x.EndDate,
ShiftSpan = (x.EndDate.Value - x.StartDate.Value),
CreationDate = x.ShiftDate,
BreakTimeSpan = x.BreakTimeSpan
}).ToList();
groupedRollCall = rollCallResult.GroupBy(x => x.CreationDate.Date).Select(x => new GroupedRollCalls()
{
CreationDate = x.Key,
ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value }).ToList(),
HasFriday = x.Any(s => s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday || s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)),
SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - CalculateBreakTime(x.First().BreakTimeSpan,
new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks))),
}).OrderBy(x => x.CreationDate).ToList();
TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks));
totalWorkingHours = sumSpans.TotalMinutes / 60;
totalWorkingHours = rollCallTotalHoures.WorkingTotalHours;
}
}
#endregion
@@ -2814,6 +2828,22 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
}
//کل ساعت کار پرسنل در این قرارداد
var totalWorkingHours = workingHoursHDouble + workingHoursMDouble;
#region RollCallSpan
var contractTotallDays = Convert.ToInt32((contract.ContractEnd - contract.ContarctStart).TotalDays + 1);
if (contractTotallDays <= 31)
{
var rollCallTotalHoures = GetTotalWorkingHoursIfHasRollCall(employeeId, workshopId,
contract.ContarctStart.Date, contract.ContractEnd.Date);
if (rollCallTotalHoures.hasRollCall)
{
totalWorkingHours = rollCallTotalHoures.WorkingTotalHours;
}
}
#endregion
// میانگین ساعت کارکرد پرسنل در روز
var workingHoursePerDay = totalWorkingHours / m.MoandatoryDays;