From 591de9acd8777b7fa2b324e99a3ecf87e56703f8 Mon Sep 17 00:00:00 2001 From: MahanCh Date: Thu, 31 Jul 2025 13:37:43 +0330 Subject: [PATCH] add search and get some data from query for GetList in InstitutionContractRepository.cs --- .../IInstitutionContractApplication.cs | 5 ++ .../InstitutionContractRepository.cs | 89 ++++++++++++++++++- 2 files changed, 92 insertions(+), 2 deletions(-) diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index fecb851a..e50f4d6d 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -103,6 +103,11 @@ public class InstitutionContractListSearchModel /// تاریخ قرارداد تا /// public string ContractDateTo { get; set; } + + /// + /// ایندکس صفحه + /// + public int PageIndex { get; set; } } /// diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index 6abed8c8..49a4dc65 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -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 GetList(InstitutionContractListSearchModel searchModel) + public async Task 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