add search and get some data from query for GetList in InstitutionContractRepository.cs

This commit is contained in:
MahanCh
2025-07-31 13:37:43 +03:30
parent be282fa548
commit 591de9acd8
2 changed files with 92 additions and 2 deletions

View File

@@ -103,6 +103,11 @@ public class InstitutionContractListSearchModel
/// تاریخ قرارداد تا
/// </summary>
public string ContractDateTo { get; set; }
/// <summary>
/// ایندکس صفحه
/// </summary>
public int PageIndex { get; set; }
}
/// <summary>

View File

@@ -4,6 +4,7 @@ using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Exceptions;
using _0_Framework.InfraStructure;
using Company.Domain.ContractingPartyAccountAgg;
using Company.Domain.empolyerAgg;
@@ -17,6 +18,7 @@ using CompanyManagment.App.Contracts.Workshop;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using OfficeOpenXml.Packaging.Ionic.Zip;
using PersianTools.Core;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
@@ -997,9 +999,92 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
#endregion
}
public Task<GetInstitutionContractListViewModel> GetList(InstitutionContractListSearchModel searchModel)
public async Task<GetInstitutionContractListViewModel> GetList(InstitutionContractListSearchModel searchModel)
{
throw new NotImplementedException();
var query = _context.InstitutionContractSet
.Include(x => x.ContactInfoList).AsSplitQuery();
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.Select(i => i.ContractingPartyId).Contains(x.ContractingPartyId))
.SumAsync(x => x.FinancialTransactionList.Sum(t => t.Deptor - t.Creditor));
var joinedQuery = query.Join(_context.PersonalContractingParties
.Include(x => x.Employers)
.ThenInclude(x => x.WorkshopEmployers)
.ThenInclude(x => x.Workshop),
contract => contract.ContractingPartyId,
contractingParty => contractingParty.id,
(contract, contractingParty) => new { contract, contractingParty });
#region Search
if (!string.IsNullOrWhiteSpace(searchModel.EmployerOrWorkshopOrContractingPartyOrRepresentativeName))
{
var keyword = searchModel.EmployerOrWorkshopOrContractingPartyOrRepresentativeName;
joinedQuery = joinedQuery.Where(x =>
x.contractingParty.RepresentativeFullName.Contains(keyword) ||
(x.contractingParty.FName + " " + x.contractingParty.LName).Contains(keyword) ||
x.contractingParty.Employers.Any(e =>
e.FullName.Contains(keyword) ||
e.WorkshopEmployers.Any(we =>
we.Workshop.WorkshopFullName.Contains(keyword)))
);
}
if (!string.IsNullOrWhiteSpace(searchModel.City))
{
joinedQuery = joinedQuery.Where(x => x.contract.City == searchModel.City);
}
if (!string.IsNullOrWhiteSpace(searchModel.Province))
{
joinedQuery = joinedQuery.Where(x => x.contract.State == searchModel.Province);
}
if (searchModel.AmountFrom > 0)
{
joinedQuery = joinedQuery.Where(x => x.contract.ContractAmount >= searchModel.AmountFrom);
}
if (searchModel.AmountTo > 0)
{
joinedQuery = joinedQuery.Where(x => x.contract.ContractAmount <= searchModel.AmountTo);
}
if (string.IsNullOrWhiteSpace(searchModel.ContractDateFrom) &&
string.IsNullOrWhiteSpace(searchModel.ContractDateTo))
{
if (!searchModel.ContractDateFrom.TryToGeorgianDateTime(out var dateFrom))
throw new BadRequestException("تاریخ وارد شده نامعتبر است");
if (!searchModel.ContractDateTo.TryToGeorgianDateTime(out var dateTo))
{
throw new BadRequestException("تاریخ وارد شده نامعتبر است");
}
if (dateFrom > dateTo)
{
throw new BadRequestException("تاریخ شروع نمیتواند بزرگ تر از تاریخ پایان باشد");
}
joinedQuery = joinedQuery.Where(x =>
x.contract.ContractStartGr <= dateTo && x.contract.ContractEndGr <= dateFrom);
}
#endregion
var res = new GetInstitutionContractListViewModel()
{
TotalAmount = totalAmount,
TotalDebt = totalDebt,
Items = //TODO:FIll this,
};
return res;
}
#endregion