From 4ff2596864cd9edd34d49d940ae65fa6fba85436 Mon Sep 17 00:00:00 2001 From: MahanCh Date: Wed, 23 Jul 2025 12:42:52 +0330 Subject: [PATCH] fix some bugs for admin monthly overview --- .../AdminMonthlyOverviewRepository.cs | 90 +++++++++++++++---- 1 file changed, 71 insertions(+), 19 deletions(-) diff --git a/CompanyManagment.EFCore/Repository/AdminMonthlyOverviewRepository.cs b/CompanyManagment.EFCore/Repository/AdminMonthlyOverviewRepository.cs index 3656a066..adc86a98 100644 --- a/CompanyManagment.EFCore/Repository/AdminMonthlyOverviewRepository.cs +++ b/CompanyManagment.EFCore/Repository/AdminMonthlyOverviewRepository.cs @@ -244,25 +244,67 @@ public class AdminMonthlyOverviewRepository : RepositoryBase new { leftWork.EmployeeId, WorkshopId = leftWork.WorkshopId }, - // contract => new { contract.EmployeeId, WorkshopId = contract.WorkshopIds }, - // (leftWork, contract) => new { leftWork, contract } - // ) - // .Where(x => - // workshopIds.Contains(x.leftWork.WorkshopId) && - // x.leftWork.StartWorkDate <= targetEndDate && - // x.leftWork.LeftWorkDate.AddDays(-1) >= targetStartDate && - // x.contract.ContarctStart <= targetEndDate && - // x.contract.ContractEnd >= targetStartDate && - // !vipGroup.Contains(x.leftWork.EmployeeId) && - // !_companyContext.EmployeeClientTemps - // .Any(temp => temp.EmployeeId == x.leftWork.EmployeeId && temp.WorkshopId == x.leftWork.WorkshopId) - // ) - // .Select(x => new { x.leftWork.WorkshopId, x.leftWork.EmployeeId }); + //var workingCheckoutEmployeeIds = GetWorkingCheckoutEmployeeIds(workshopIds, targetStartDate, targetEndDate, vipGroup); + var chcekoutLeftWorks = _companyContext.LeftWorkList + .AsNoTracking() + .Where(x => + workshopIds.Contains(x.WorkshopId) && + x.StartWorkDate <= targetEndDate && + x.LeftWorkDate.AddDays(-1) >= targetStartDate && + !vipGroup.Contains(x.EmployeeId)) + .Select(x => new + { + x.EmployeeId, + x.WorkshopId, + x.StartWorkDate, + x.LeftWorkDate, + x.Workshop.CreateCheckout + }) + .ToList(); + + var checkoutContracts = _companyContext.Contracts + .AsNoTracking() + .Where(x => + workshopIds.Contains(x.WorkshopIds) && + x.ContarctStart <= targetEndDate && + x.ContractEnd >= targetStartDate) + .Select(x => new + { + x.EmployeeId, + WorkshopId = x.WorkshopIds, + x.ContarctStart, + x.ContractEnd + }) + .ToList(); + + var computeOptionsDict = _companyContext.EmployeeComputeOptionsSet + .AsNoTracking() + .Where(o => workshopIds.Contains(o.WorkshopId)) + .ToDictionary( + o => (o.EmployeeId, o.WorkshopId), + o => o.CreateCheckout + ); + + var clientTemps = _companyContext.EmployeeClientTemps + .AsNoTracking().AsEnumerable() + .Select(x => (x.EmployeeId, x.WorkshopId)) + .ToHashSet(); + + var workingCheckoutEmployeeIds = chcekoutLeftWorks + .Join( + checkoutContracts, + left => new { left.EmployeeId, left.WorkshopId }, + contract => new { contract.EmployeeId, contract.WorkshopId }, + (left, contract) => new { left, contract }) + .Where(x => + !clientTemps.Contains((x.left.EmployeeId, x.left.WorkshopId)) && + (computeOptionsDict.TryGetValue((x.left.EmployeeId, x.left.WorkshopId), out var createCheckout) + ? createCheckout + : x.left.CreateCheckout)) + .Select(x => ( + x.left.WorkshopId, + x.left.EmployeeId + )).ToList(); @@ -312,6 +354,11 @@ public class AdminMonthlyOverviewRepository : RepositoryBase x.Key) + .Union(workingContractGrouping.Select(x => x.WorkshopId)).ToList(); + + var notValidWorkshops = workshopIds.Except(validWorkshops).ToList(); + var workshopsWithFullContracts = workingContractGrouping .Where(g => g.Data.All(emp => contractSet.Contains((emp.WorkshopId, emp.EmployeeId)))) .Select(g => g.WorkshopId) @@ -339,6 +386,10 @@ public class AdminMonthlyOverviewRepository : RepositoryBase x.Month == month && x.Year == year); + var notValidMonthlyOverViews = + await adminMonthlyOverviews.Where(x => notValidWorkshops.Contains(x.WorkshopId)).ToListAsync(); + + var adminMonthlyOverviewsWithFullContracts = await adminMonthlyOverviews .Where(x => fullyCoveredWorkshops.Contains(x.WorkshopId) && x.Status == AdminMonthlyOverviewStatus.CreateDocuments) .ToListAsync(); @@ -353,6 +404,7 @@ public class AdminMonthlyOverviewRepository : RepositoryBase