add search and get some data from query for GetList in InstitutionContractRepository.cs
This commit is contained in:
@@ -103,6 +103,11 @@ public class InstitutionContractListSearchModel
|
||||
/// تاریخ قرارداد تا
|
||||
/// </summary>
|
||||
public string ContractDateTo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ایندکس صفحه
|
||||
/// </summary>
|
||||
public int PageIndex { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user