diff --git a/CompanyManagment.EFCore/Repository/RollCallEmployeeRepository.cs b/CompanyManagment.EFCore/Repository/RollCallEmployeeRepository.cs index c34bf1e6..b0832169 100644 --- a/CompanyManagment.EFCore/Repository/RollCallEmployeeRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallEmployeeRepository.cs @@ -82,25 +82,45 @@ public class RollCallEmployeeRepository : RepositoryBase var service = _rollCallServiceRepository.GetAllServiceByWorkshopId(workshopId); + //اگر سرویس حضور غیاب نداشت if (!service.Any(x => x.StartService.Date <= contractStart.Date && x.EndService.Date >= contractEnd.Date)) return false; //var rollCallEmployee = GetByEmployeeIdAndWorkshopId(employeeId, workshopId); //if (rollCallEmployee == null) // return false; - var rollCallEmployee = _context.RollCallEmployees - .Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId) - .Include(x => x.EmployeesStatus); - if (!rollCallEmployee.Any()) + var rollCallEmployee = _context.RollCallEmployees.Include(xs => xs.EmployeesStatus) + .FirstOrDefault(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId); + //اگر تنظیمات حضور غیاب نداشت + if (rollCallEmployee == null) + return false; + + //اگر استاتوس نداشت + if (!rollCallEmployee.EmployeesStatus.Any()) return false; - var a = rollCallEmployee.Any(x => x.EmployeesStatus.Any(s => - (s.StartDate <= contractStart.Date && s.EndDate.Date >= contractEnd.Date) || - (s.StartDate.Date <= contractStart.Date && s.EndDate.Date > contractStart.Date))); - //var result = _employeeRollCallStatusRepository.w(x => x.RollCallEmployeeId == rollCallEmployee.Id && - // (x.StartDate.Date <= contractStart.Date && x.EndDate.Date >= contractEnd.Date) || - // (x.StartDate.Date <= contractStart.Date && x.EndDate.Date > contractStart.Date)); - return a; + var leftWork = + _context.LeftWorkList.FirstOrDefault(x => + x.StartWorkDate <= contractEnd.Date && x.LeftWorkDate > contractStart); + if (leftWork == null) + return false; + + var status = rollCallEmployee.EmployeesStatus.FirstOrDefault(s => + (s.StartDate <= contractStart.Date && s.EndDate.Date >= contractEnd.Date)); + //اگر استاتوس کامل پوشش داد + if (status != null) + return true; + + + status = rollCallEmployee.EmployeesStatus.FirstOrDefault(s => + (s.StartDate.Date <= contractStart.Date && s.EndDate.Date > contractStart.Date && + s.EndDate.Date < contractEnd.Date)); + //اگر قبل از پایان فیس استاتوس قطع شده ولی ترک کار داره + if (status != null && leftWork.HasLeft) + return true; + + + return false; } public List GetByWorkshopId(long workshopId) {