add status for list of InstitutionContract

This commit is contained in:
MahanCh
2025-08-03 15:19:09 +03:30
parent 9eca54276b
commit 79807569dc

View File

@@ -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<long, InstitutionCon
var query = _context.InstitutionContractSet
.Include(x => 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<long, InstitutionCon
x.contract.ContractStartGr <= dateTo && x.contract.ContractEndGr <= dateFrom);
}
var now = DateTime.Today;
var nowFa = now.ToFarsi();
var endFa = nowFa.FindeEndOfMonth();
var endThisMontGr = endFa.ToGeorgianDateTime();
//Todo: Search by Status For Tab
if (searchModel.Status != null)
{
switch (searchModel.Status)
{
case InstitutionContractStatus.DeactiveWithDebt:
joinedQuery = joinedQuery.Where(x => 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<long, InstitutionCon
var minArchiveCode = arc.Count > 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<long, InstitutionCon
return res;
}
private (InstitutionContractStatus status, bool isExpiered) SetContractStatus(DateTime contractEndGr, double contractAmount,
string isActiveString)
private (InstitutionContractStatus status, bool isExpiered) SetContractStatus(InstitutionContract contract,
PersonalContractingParty contractingParty,
FinancialStatment financialStatment)
{
var now = DateTime.Now;
var nowFa = now.ToFarsi();
@@ -1142,32 +1182,44 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
var endThisMontGr = endFa.ToGeorgianDateTime();
InstitutionContractStatus status = InstitutionContractStatus.Active;
bool isExpier = false;
if (contractEndGr < now)
if (contract.ContractEndGr < now)
{
status = InstitutionContractStatus.Deactive;
isExpier = true;
}
if (contractEndGr >= 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);
}