From 79807569dcb78101a4e13c951059cf18e1f020b2 Mon Sep 17 00:00:00 2001 From: MahanCh Date: Sun, 3 Aug 2025 15:19:09 +0330 Subject: [PATCH] add status for list of InstitutionContract --- .../InstitutionContractRepository.cs | 84 +++++++++++++++---- 1 file changed, 68 insertions(+), 16 deletions(-) diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index 8a1facfd..48b1f4e9 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework.Exceptions; using _0_Framework.InfraStructure; +using Company.Domain.ContarctingPartyAgg; using Company.Domain.ContractingPartyAccountAgg; using Company.Domain.empolyerAgg; using Company.Domain.FinancialStatmentAgg; @@ -1005,12 +1006,6 @@ public class InstitutionContractRepository : RepositoryBase x.ContactInfoList); - var totalAmount = await query.Where(x => x.IsActiveString == "true").SumAsync(x => x.ContractAmount); - - var totalDebt = await _context.FinancialStatments.Include(x => x.FinancialTransactionList) - .Where(x => query.Where(q=>q.IsActiveString == "true" || q.IsActiveString == "blue").Select(i => i.ContractingPartyId).Contains(x.ContractingPartyId)) - .SelectMany(x => x.FinancialTransactionList) - .SumAsync(x => x.Deptor - x.Creditor); var joinedQuery = query.Join(_context.PersonalContractingParties .Include(x => x.Employers) @@ -1080,10 +1075,55 @@ public class InstitutionContractRepository : RepositoryBase x.contract.IsActiveString == "blue"); + break; + case InstitutionContractStatus.PendingForRenewal: + joinedQuery = joinedQuery.Where(x => + x.contract.ContractEndGr >= now && x.contract.ContractEndGr <= endThisMontGr); + break; + case InstitutionContractStatus.Block: + joinedQuery = joinedQuery.Where(x => x.contractingParty.IsBlock == "true"); + break; + case InstitutionContractStatus.Free: + joinedQuery = joinedQuery.Where(x => x.contract.ContractAmount == 0); + break; + case InstitutionContractStatus.WithoutWorkshop: + joinedQuery = joinedQuery.Where(x => !x.contractingParty.Employers + .SelectMany(e => e.WorkshopEmployers.Select(we => we.Workshop)).Any()); + break; + case InstitutionContractStatus.Active: + joinedQuery = joinedQuery.Where(x => + x.contract.IsActiveString != "blue" && // Not DeactiveWithDebt + !(x.contract.ContractEndGr >= now && x.contract.ContractEndGr <= endThisMontGr) && // Not PendingForRenewal + x.contractingParty.IsBlock != "true" && // Not Block + x.contract.ContractAmount != 0 && // Not Free + x.contractingParty.Employers + .SelectMany(e => e.WorkshopEmployers.Select(we => we.Workshop)) + .Any() // Has at least one workshop => Not WithoutWorkshop + ); + break; + } + } #endregion - var list = await joinedQuery.ApplyPagination(searchModel.PageIndex,searchModel.PageSize).ToListAsync(); + + var totalAmount = await joinedQuery.SumAsync(x => x.contract.ContractAmount); + + var totalDebt = await _context.FinancialStatments.Include(x => x.FinancialTransactionList) + .Where(x => joinedQuery.Select(i => i.contract.ContractingPartyId).Contains(x.ContractingPartyId)) + .SelectMany(x => x.FinancialTransactionList) + .SumAsync(x => x.Deptor - x.Creditor); + var list = await joinedQuery.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync(); var res = new GetInstitutionContractListViewModel() { @@ -1105,8 +1145,7 @@ public class InstitutionContractRepository : RepositoryBase 0 ? arc.Min(a => a) : 0; var archiveCode = minArchiveCode == 10000000 ? 0 : minArchiveCode; - var status = SetContractStatus(x.contract.ContractEndGr, x.contract.ContractAmount, - x.contract.IsActiveString); + var status = SetContractStatus(x.contract,x.contractingParty,x.statement); return new GetInstitutionContractListItemsViewModel() { ContractAmount = x.contract.ContractAmount, @@ -1133,8 +1172,9 @@ public class InstitutionContractRepository : RepositoryBase= now && contractEndGr <= endThisMontGr) + if (contract.ContractEndGr >= now && contract.ContractEndGr <= endThisMontGr) { status = InstitutionContractStatus.PendingForRenewal; isExpier = true; } - if (contractAmount == 0) + if (contract.ContractAmount == 0) { status = InstitutionContractStatus.Free; - if ((contractEndGr >= now && contractEndGr <= endThisMontGr) || (contractEndGr < now)) + if ((contract.ContractEndGr >= now && contract.ContractEndGr <= endThisMontGr) || (contract.ContractEndGr < now)) { isExpier = true; } } - if (isActiveString == "blue") + if (contract.IsActiveString == "blue") { status = InstitutionContractStatus.DeactiveWithDebt; isExpier = true; } + var workshops = contractingParty.Employers + .SelectMany(e => e.WorkshopEmployers.Select(we => we.Workshop)).DistinctBy(w => w.id).ToList(); + + if (workshops.Count == 0) + { + status = InstitutionContractStatus.Free; + } + + if (contractingParty.IsBlock == "true") + { + status = InstitutionContractStatus.Block; + } return (status, isExpier); }