Files
Distribution_GL/Repositories/ChequeRepository.cs

104 lines
4.9 KiB
C#

using General_Ledger_Service.Enums;
using General_Ledger_Service.Infra;
using General_Ledger_Service.Interfaces.Repositories;
using General_Ledger_Service.Models;
using Microsoft.EntityFrameworkCore;
namespace General_Ledger_Service.Repositories
{
public class ChequeRepository(AppDBContext context) : IChequeRepository
{
private readonly AppDBContext _context = context;
public Task<ChequeBook> AddChequeBookAsync(ChequeBook chequeBook) =>
RepositoryHelpers.AddAsync(_context.ChequeBooks, chequeBook);
public Task<ChequeBook?> GetChequeBookByIdAsync(long chequeBookId) =>
RepositoryHelpers.GetByIdAsync(_context.ChequeBooks, chequeBookId);
public async Task<ChequeBook?> GetChequeBookByNoAsync(string chequeBookNo, bool includePages = false)
{
var query = _context.ChequeBooks.AsQueryable();
if (includePages)
{
query = query.Include(b => b.Pages);
}
return await query.FirstOrDefaultAsync(b => b.ChequeBookNo == chequeBookNo);
}
public Task<bool> ChequeBookNoExistsAsync(string chequeBookNo) =>
RepositoryHelpers.ExistsAsync(_context.ChequeBooks, b => b.ChequeBookNo == chequeBookNo);
public async Task<(List<ChequeBook> Items, int TotalCount)> ListChequeBooksAsync(
long? bankAccountId, long? branchId, ChequeBookStatus? status, int? page, int? pageSize)
{
var query = _context.ChequeBooks.AsQueryable();
if (bankAccountId.HasValue) query = query.Where(b => b.BankAccountId == bankAccountId.Value);
if (branchId.HasValue) query = query.Where(b => b.BranchId == branchId.Value);
if (status.HasValue) query = query.Where(b => b.Status == status.Value);
query = query.OrderByDescending(b => b.ReceivedDate).ThenBy(b => b.ChequeBookNo);
var totalCount = await query.CountAsync();
var items = await RepositoryHelpers.ApplyPaging(query, page, pageSize).ToListAsync();
return (items, totalCount);
}
public async Task AddChequePagesAsync(IEnumerable<ChequePage> pages) =>
await _context.ChequePages.AddRangeAsync(pages);
public async Task<ChequePage?> GetChequePageByNoAsync(string chequeNo) =>
await _context.ChequePages.Include(p => p.ChequeBook).FirstOrDefaultAsync(p => p.ChequeNo == chequeNo);
public Task<bool> ChequeNoExistsAsync(string chequeNo) =>
RepositoryHelpers.ExistsAsync(_context.ChequePages, p => p.ChequeNo == chequeNo);
public async Task<(List<ChequePage> Items, int TotalCount)> ListChequePagesAsync(
string? chequeBookNo, ChequeIssueStatus? issueStatus, ChequePayeeType? payeeType,
long? payeeId, int? page, int? pageSize)
{
var query = _context.ChequePages.Include(p => p.ChequeBook).AsQueryable();
if (!string.IsNullOrWhiteSpace(chequeBookNo)) query = query.Where(p => p.ChequeBook.ChequeBookNo == chequeBookNo);
if (issueStatus.HasValue) query = query.Where(p => p.IssueStatus == issueStatus.Value);
if (payeeType.HasValue) query = query.Where(p => p.PayeeType == payeeType.Value);
if (payeeId.HasValue) query = query.Where(p => p.PayeeId == payeeId.Value);
query = query.OrderBy(p => p.ChequeNo);
var totalCount = await query.CountAsync();
var items = await RepositoryHelpers.ApplyPaging(query, page, pageSize).ToListAsync();
return (items, totalCount);
}
public Task<ReceivedCheque> AddReceivedChequeAsync(ReceivedCheque receivedCheque) =>
RepositoryHelpers.AddAsync(_context.ReceivedCheques, receivedCheque);
public Task<ReceivedCheque?> GetReceivedChequeByIdAsync(long receivedChequeId) =>
RepositoryHelpers.GetByIdAsync(_context.ReceivedCheques, receivedChequeId);
public async Task<(List<ReceivedCheque> Items, int TotalCount)> ListReceivedChequesAsync(
long? companyId, long? branchId, ReceivedChequeStatus? status,
ReceivedChequeFromType? receivedFromType, int? page, int? pageSize)
{
var query = _context.ReceivedCheques.AsQueryable();
if (companyId.HasValue) query = query.Where(c => c.CompanyId == companyId.Value);
if (branchId.HasValue) query = query.Where(c => c.BranchId == branchId.Value);
if (status.HasValue) query = query.Where(c => c.Status == status.Value);
if (receivedFromType.HasValue) query = query.Where(c => c.ReceivedFromType == receivedFromType.Value);
query = query.OrderByDescending(c => c.ReceivedDate).ThenByDescending(c => c.ReceivedChequeId);
var totalCount = await query.CountAsync();
var items = await RepositoryHelpers.ApplyPaging(query, page, pageSize).ToListAsync();
return (items, totalCount);
}
}
}