From 8ab22d9948e4b9089aee04c3ef703b03a6ba019e Mon Sep 17 00:00:00 2001 From: Mahan Ch Date: Sun, 1 Jun 2025 16:40:09 +0330 Subject: [PATCH] fix admin monthly overview --- .../AdminMonthlyOverviewRepository.cs | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/CompanyManagment.EFCore/Repository/AdminMonthlyOverviewRepository.cs b/CompanyManagment.EFCore/Repository/AdminMonthlyOverviewRepository.cs index d5fb18da..05823b6c 100644 --- a/CompanyManagment.EFCore/Repository/AdminMonthlyOverviewRepository.cs +++ b/CompanyManagment.EFCore/Repository/AdminMonthlyOverviewRepository.cs @@ -10,7 +10,9 @@ using AccountMangement.Infrastructure.EFCore; using Company.Domain.AdminMonthlyOverviewAgg; using CompanyManagment.App.Contracts.AdminMonthlyOverview; using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.EntityFrameworkCore; +using Tools = _0_Framework_b.Application.Tools; namespace CompanyManagment.EFCore.Repository; @@ -31,10 +33,14 @@ public class AdminMonthlyOverviewRepository : RepositoryBase c.ContractStartGr <= targetDate && c.ContractEndGr >= targetDate) + .Where(c => c.ContractStartGr <= targetEndDate && c.ContractEndGr >= targetStartDate) .Select(c => c.ContractingPartyId); // دریافت کارگاه‌های مرتبط با اکانت @@ -59,8 +65,8 @@ public class AdminMonthlyOverviewRepository : RepositoryBase - ((x.StartWorkDate <= targetDate && x.LeftWorkDate.AddDays(-1) >= targetDate) - || (x.StartWorkDate <= nextMonth && x.LeftWorkDate.AddDays(-1) >= nextMonth)) && workshopAccounts.Contains(x.WorkshopId)).Select(x => x.WorkshopId); + ((x.StartWorkDate <= targetEndDate && x.LeftWorkDate.AddDays(-1) >= targetStartDate) + || (x.StartWorkDate <= nextEndMonth && x.LeftWorkDate.AddDays(-1) >= nextFirstMonth)) && workshopAccounts.Contains(x.WorkshopId)).Select(x => x.WorkshopId); @@ -109,7 +115,7 @@ public class AdminMonthlyOverviewRepository : RepositoryBase - x.StartWorkDate <= targetDate && x.LeftWorkDate.AddDays(-1) >= targetDate && workshopIds.Contains(x.WorkshopId)) + x.StartWorkDate <= targetStartDate && x.LeftWorkDate.AddDays(-1) >= targetStartDate && workshopIds.Contains(x.WorkshopId)) .GroupBy(x => x.WorkshopId).Select(x => new { EmployeeCounts = x.Count(), WorkshopId = x.Key }).ToList(); var employeeContractCounts = _companyContext.LeftWorkList.Where(x => - x.StartWorkDate <= nextMonth && x.LeftWorkDate.AddDays(-1) >= nextMonth && workshopIds.Contains(x.WorkshopId)) + x.StartWorkDate <= nextFirstMonth && x.LeftWorkDate.AddDays(-1) >= nextFirstMonth && workshopIds.Contains(x.WorkshopId)) .GroupBy(x => x.WorkshopId).Select(x => new { EmployeeCounts = x.Count(), WorkshopId = x.Key }).ToList(); var adminMonthlyOverviewsList = await adminMonthlyOverviewsQuery.ToListAsync(); @@ -231,7 +237,7 @@ public class AdminMonthlyOverviewRepository : RepositoryBase workshopIds, DateTime targetDate, DateTime nextMonth) + private async Task UpdateAdminMonthlyOverviewStatus(int year, int month, List workshopIds, DateTime targetStartDate,DateTime targetEndDate, DateTime nextStartMonth,DateTime nextEndMonth) { var vipGroup = _companyContext.CustomizeWorkshopEmployeeSettings.Where(x => x.CustomizeWorkshopGroupSettingId == 117) .Select(x => x.EmployeeId) @@ -246,10 +252,10 @@ public class AdminMonthlyOverviewRepository : RepositoryBase workshopIds.Contains(x.leftWork.WorkshopId) && - x.leftWork.StartWorkDate <= targetDate && - x.leftWork.LeftWorkDate.AddDays(-1) >= targetDate && - x.contract.ContarctStart <= targetDate && - x.contract.ContractEnd >= targetDate && + 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) @@ -257,21 +263,21 @@ public class AdminMonthlyOverviewRepository : RepositoryBase new { x.leftWork.WorkshopId, x.leftWork.EmployeeId }); var workingContractEmployeeIds = _companyContext.LeftWorkList.AsNoTracking() - .Where(x => workshopIds.Contains(x.WorkshopId) && x.StartWorkDate <= nextMonth && x.LeftWorkDate.AddDays(-1) >= nextMonth && + .Where(x => workshopIds.Contains(x.WorkshopId) && x.StartWorkDate <= nextEndMonth && x.LeftWorkDate.AddDays(-1) >= nextStartMonth && !vipGroup.Contains(x.EmployeeId) && !_companyContext.EmployeeClientTemps .Any(temp => temp.EmployeeId == x.EmployeeId && temp.WorkshopId == x.WorkshopId) ).Select(x => new { x.WorkshopId, x.EmployeeId }); var contractSet = (await _companyContext.Contracts.AsNoTracking() - .Where(x => x.ContarctStart <= nextMonth && x.ContractEnd >= nextMonth && workshopIds.Contains(x.WorkshopIds)) + .Where(x => x.ContarctStart <= nextEndMonth && x.ContractEnd >= nextStartMonth && workshopIds.Contains(x.WorkshopIds)) .Select(x => new { x.WorkshopIds, x.EmployeeId }) .ToListAsync()) .Select(x => (x.WorkshopIds, x.EmployeeId)) .ToHashSet(); var checkoutSet = (await _companyContext.CheckoutSet.AsNoTracking() - .Where(x => x.ContractStart <= targetDate && x.ContractEnd >= targetDate && workshopIds.Contains(x.WorkshopId)) + .Where(x => x.ContractStart <= targetEndDate && x.ContractEnd >= targetStartDate && workshopIds.Contains(x.WorkshopId)) .Select(x => new { x.WorkshopId, x.EmployeeId }) .ToListAsync()) .Select(x => (x.WorkshopId, x.EmployeeId)) @@ -290,6 +296,8 @@ public class AdminMonthlyOverviewRepository : RepositoryBase g.WorkshopId) .ToList(); + var list = workingContractEmployeeIds.ToList().Where(x=>!contractSet.Any(a=>a.EmployeeId== x.EmployeeId&&a.WorkshopIds == x.WorkshopId)).ToList(); + var workshopsWithFullCheckout = workingCheckoutGrouping .Where(g => g.All(emp => checkoutSet.Contains((emp.WorkshopId, emp.EmployeeId)))) .Select(g => g.Key)