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