diff --git a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs index bc8889e2..6187a5ec 100644 --- a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs +++ b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs @@ -2241,6 +2241,50 @@ public class YearlySalaryRepository : RepositoryBase, 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 rollCallResult; + List 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 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, 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 rollCallResult; - List 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, 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;