Merge branch 'Feature/PaymentInstrument/Init' into Main

# Conflicts:
#	CompanyManagment.EFCore/Repository/ContractingPartyBankAccountsRepository.cs
This commit is contained in:
MahanCh
2025-08-03 13:19:47 +03:30
11 changed files with 297 additions and 7 deletions

View File

@@ -1,4 +1,6 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.PaymentInstrument;
@@ -7,4 +9,10 @@ namespace Company.Domain.PaymentInstrumentAgg;
public interface IPaymentInstrumentRepository:IRepository<long,PaymentInstrument>
{
Task<GetPaymentInstrumentListViewModel> GetList(PaymentInstrumentSearchModel searchModel);
Task<List<PosTerminalSelectListViewModel>> GetPosTerminalSelectList(string search);
Task<OperationResult<List<string>>> PosTerminalIdSelectList(string search, string selected);
Task<OperationResult<List<string>>> IbanSelectList(string search, string selected);
Task<OperationResult<List<string>>> AccountNumberSelectList(string search, string selected);
Task<OperationResult<List<string>>> CardNumberSelectList(string search, string selected);
}

View File

@@ -21,7 +21,7 @@ public class PaymentInstrument:EntityBase
PosTerminalId = posTerminalId;
Description = description;
PaymentInstrumentGroupId = paymentInstrumentGroupId;
Type = PaymentInstrumentType.BankAccount;
Type = PaymentInstrumentType.Pos;
}
public static PaymentInstrument CreatePosType(string posTerminalId, string description, long paymentInstrumentGroupId)

View File

@@ -0,0 +1,5 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
public class AccountNumberSelectListViewModel : SelectListViewModel;

View File

@@ -0,0 +1,5 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
public class CardNumberSelectListViewModel:SelectListViewModel;

View File

@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
using Microsoft.AspNetCore.Mvc;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
@@ -51,4 +52,9 @@ public interface IPaymentInstrumentApplication
Task<OperationResult> DeleteGroup(long id);
Task<List<PaymentInstrumentGroupsViewModel>> GetGroup();
Task<OperationResult<List<string>>> PosTerminalIdSelectList(string search, string selected);
Task<OperationResult<List<string>>> IbanSelectList(string search, string selected);
Task<OperationResult<List<string>>> AccountNumberSelectList(string search, string selected);
Task<OperationResult<List<string>>> CardNumberSelectList(string search, string selected);
}

View File

@@ -0,0 +1,5 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
public class IbanSelectListViewModel:SelectListViewModel;

View File

@@ -0,0 +1,7 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
public class PosTerminalSelectListViewModel:SelectListViewModel
{
}

View File

@@ -120,4 +120,29 @@ public class PaymentInstrumentApplication:IPaymentInstrumentApplication
{
return await _paymentInstrumentGroupRepository.GetList();
}
public async Task<List<PosTerminalSelectListViewModel>> GetPosTerminalSelectList(string search)
{
return await _paymentInstrumentRepository.GetPosTerminalSelectList(search);
}
public async Task<OperationResult<List<string>>> PosTerminalIdSelectList(string search, string selected)
{
return await _paymentInstrumentRepository.PosTerminalIdSelectList(search, selected);
}
public async Task<OperationResult<List<string>>> IbanSelectList(string search, string selected)
{
return await _paymentInstrumentRepository.IbanSelectList(search, selected);
}
public async Task<OperationResult<List<string>>> AccountNumberSelectList(string search, string selected)
{
return await _paymentInstrumentRepository.AccountNumberSelectList(search, selected);
}
public async Task<OperationResult<List<string>>> CardNumberSelectList(string search, string selected)
{
return await _paymentInstrumentRepository.CardNumberSelectList(search, selected);
}
}

View File

@@ -88,7 +88,7 @@ public class ContractingPartyBankAccountsRepository : RepositoryBase<long, Contr
public async Task<OperationResult<List<string>>> IBanSelectList(string search, string selected)
{
var iBanQuery = _context.ContractingPartyBankAccounts.Select(x => x.IBan);
var iBanQuery = _context.ContractingPartyBankAccounts.Where(x=>x.IBan != null).Select(x=>x.IBan);
if (!string.IsNullOrWhiteSpace(search))
{
iBanQuery = iBanQuery.Where(x => x.Contains(search));
@@ -106,7 +106,7 @@ public class ContractingPartyBankAccountsRepository : RepositoryBase<long, Contr
public async Task<OperationResult<List<string>>> CardNumberSelectList(string search, string selected)
{
var cardNumberQuery = _context.ContractingPartyBankAccounts.Select(x => x.CardNumber);
var cardNumberQuery = _context.ContractingPartyBankAccounts.Where(x=>x.CardNumber != null).Select(x=>x.CardNumber);
if (!string.IsNullOrWhiteSpace(search))
{
cardNumberQuery = cardNumberQuery.Where(x => x.Contains(search));
@@ -124,7 +124,7 @@ public class ContractingPartyBankAccountsRepository : RepositoryBase<long, Contr
public async Task<OperationResult<List<string>>> AccountNumberSelectList(string search, string selected)
{
var accountNumberQuery = _context.ContractingPartyBankAccounts.Select(x => x.IBan);
var accountNumberQuery = _context.ContractingPartyBankAccounts.Where(x=>x.AccountNumber != null).Select(x=>x.AccountNumber);
if (!string.IsNullOrWhiteSpace(search))
{
accountNumberQuery = accountNumberQuery.Where(x => x.Contains(search));

View File

@@ -1,5 +1,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.PaymentInstrumentAgg;
using CompanyManagment.App.Contracts.PaymentInstrument;
@@ -76,4 +78,136 @@ public class PaymentInstrumentRepository : RepositoryBase<long, PaymentInstrumen
};
return list;
}
public Task<List<PosTerminalSelectListViewModel>> GetPosTerminalSelectList(string search)
{
var queryable = _companyContext.PaymentInstruments.Select(x=>new PosTerminalSelectListViewModel
{
Id = x.id,
Text = x.PosTerminalId
});
if (!string.IsNullOrWhiteSpace(search))
{
queryable = queryable.Where(x => x.Text.Contains(search));
}
return queryable.Take(50).ToListAsync();
}
public Task<List<IbanSelectListViewModel>> GetIbanSelectList(string search)
{
var queryable = _companyContext.PaymentInstruments.Select(x => new IbanSelectListViewModel
{
Id = x.id,
Text = x.IBan
});
if (!string.IsNullOrWhiteSpace(search))
{
queryable = queryable.Where(x => x.Text.Contains(search));
}
return queryable.Take(50).ToListAsync();
}
public Task<List<AccountNumberSelectListViewModel>> GetAccountNumberSelectList(string search)
{
var queryable = _companyContext.PaymentInstruments.Select(x => new AccountNumberSelectListViewModel
{
Id = x.id,
Text = x.AccountNumber
});
if (!string.IsNullOrWhiteSpace(search))
{
queryable = queryable.Where(x => x.Text.Contains(search));
}
return queryable.Take(50).ToListAsync();
}
public Task<List<CardNumberSelectListViewModel>> GetCardNumberSelectList(string search)
{
var queryable = _companyContext.PaymentInstruments.Select(x => new CardNumberSelectListViewModel
{
Id = x.id,
Text = x.CardNumber
});
if (!string.IsNullOrWhiteSpace(search))
{
queryable = queryable.Where(x => x.Text.Contains(search));
}
return queryable.Take(50).ToListAsync();
}
public async Task<OperationResult<List<string>>> PosTerminalIdSelectList(string search, string selected)
{
var query = _companyContext.PaymentInstruments.Where(x=>x.PosTerminalId != null).Select(x => x.PosTerminalId);
if (!string.IsNullOrWhiteSpace(search))
{
query = query.Where(x => x.Contains(search));
}
var result = await query.Take(50).ToListAsync();
if (!string.IsNullOrWhiteSpace(selected))
{
result.Add(selected);
}
return new OperationResult<List<string>>().Succcedded(result.Distinct().ToList());
}
public async Task<OperationResult<List<string>>> IbanSelectList(string search, string selected)
{
var query = _companyContext.PaymentInstruments.Where(x=>x.IBan != null).Select(x => x.IBan);
if (!string.IsNullOrWhiteSpace(search))
{
query = query.Where(x => x.Contains(search));
}
var result = await query.Take(50).ToListAsync();
if (!string.IsNullOrWhiteSpace(selected))
{
result.Add(selected);
}
return new OperationResult<List<string>>().Succcedded(result.Distinct().ToList());
}
public async Task<OperationResult<List<string>>> AccountNumberSelectList(string search, string selected)
{
var query = _companyContext.PaymentInstruments.Where(x=>x.AccountNumber != null).Select(x => x.AccountNumber);
if (!string.IsNullOrWhiteSpace(search))
{
query = query.Where(x => x.Contains(search));
}
var result = await query.Take(50).ToListAsync();
if (!string.IsNullOrWhiteSpace(selected))
{
result.Add(selected);
}
return new OperationResult<List<string>>().Succcedded(result.Distinct().ToList());
}
public async Task<OperationResult<List<string>>> CardNumberSelectList(string search, string selected)
{
var query = _companyContext.PaymentInstruments.Where(x=>x.CardNumber != null).Select(x => x.CardNumber);
if (!string.IsNullOrWhiteSpace(search))
{
query = query.Where(x => x.Contains(search));
}
var result = await query.Take(50).ToListAsync();
if (!string.IsNullOrWhiteSpace(selected))
{
result.Add(selected);
}
return new OperationResult<List<string>>().Succcedded(result.Distinct().ToList());
}
}

View File

@@ -1,4 +1,5 @@
using _0_Framework.Application;
using CompanyManagment.App.Contracts.ContractingPartyBankAccounts;
using CompanyManagment.App.Contracts.PaymentInstrument;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
@@ -8,10 +9,12 @@ namespace ServiceHost.Areas.Admin.Controllers;
public class PaymentInstrumentController:AdminBaseController
{
private readonly IPaymentInstrumentApplication _paymentInstrumentApplication;
private readonly IContractingPartyBankAccountsApplication _contractingPartyBankAccountsApplication;
public PaymentInstrumentController(IPaymentInstrumentApplication paymentInstrumentApplication)
public PaymentInstrumentController(IPaymentInstrumentApplication paymentInstrumentApplication, IContractingPartyBankAccountsApplication contractingPartyBankAccountsApplication)
{
_paymentInstrumentApplication = paymentInstrumentApplication;
_contractingPartyBankAccountsApplication = contractingPartyBankAccountsApplication;
}
/// <summary>
///لیست اطلاعات بانکی جاری شرکا
@@ -92,4 +95,96 @@ public class PaymentInstrumentController:AdminBaseController
return result;
}
/// <summary>
/// دریافت لیست شناسه‌های دستگاه پوز به صورت رشته
/// </summary>
/// <param name="search">عبارت جستجو</param>
/// <param name="selected">مقدار انتخاب شده</param>
/// <returns>لیست شناسه‌های دستگاه پوز</returns>
[HttpGet("pos-terminal-id-select")]
public async Task<ActionResult<OperationResult<List<string>>>> GetPosTerminalIdSelectList(string search, string selected)
{
return await _paymentInstrumentApplication.PosTerminalIdSelectList(search, selected);
}
/// <summary>
/// دریافت لیست شماره‌های شبا به صورت رشته
/// </summary>
/// <param name="search">عبارت جستجو</param>
/// <param name="selected">مقدار انتخاب شده</param>
/// <returns>لیست شماره‌های شبا</returns>
[HttpGet("iban-select")]
public async Task<ActionResult<OperationResult<List<string>>>> GetIbanSelectList(string search, string selected)
{
var paymentIban = await _paymentInstrumentApplication.IbanSelectList(search, selected);
var contractingIban = await _contractingPartyBankAccountsApplication.IBanSelectList(search, selected);
var combinedList = new List<string>();
if (paymentIban.IsSuccedded)
{
combinedList.AddRange(paymentIban.Data??[]);
}
if (contractingIban.IsSuccedded)
{
combinedList.AddRange(contractingIban.Data??[]);
}
return new OperationResult<List<string>>().Succcedded(combinedList.Distinct().ToList());
}
/// <summary>
/// دریافت لیست شماره‌های حساب به صورت رشته
/// </summary>
/// <param name="search">عبارت جستجو</param>
/// <param name="selected">مقدار انتخاب شده</param>
/// <returns>لیست شماره‌های حساب</returns>
[HttpGet("account-number-select")]
public async Task<ActionResult<OperationResult<List<string>>>> GetAccountNumberSelectList(string search, string selected)
{
var paymentAccountNumbers = await _paymentInstrumentApplication.AccountNumberSelectList(search, selected);
var contractingAccountNumbers = await _contractingPartyBankAccountsApplication.AccountNumberSelectList(search, selected);
var combinedList = new List<string>();
if (paymentAccountNumbers.IsSuccedded)
{
combinedList.AddRange(paymentAccountNumbers.Data??[]);
}
if (contractingAccountNumbers.IsSuccedded)
{
combinedList.AddRange(contractingAccountNumbers.Data??[]);
}
return new OperationResult<List<string>>().Succcedded(combinedList.Distinct().ToList());
}
/// <summary>
/// دریافت لیست شماره‌های کارت به صورت رشته
/// </summary>
/// <param name="search">عبارت جستجو</param>
/// <param name="selected">مقدار انتخاب شده</param>
/// <returns>لیست شماره‌های کارت</returns>
[HttpGet("card-number-select")]
public async Task<ActionResult<OperationResult<List<string>>>> GetCardNumberSelectList(string search, string selected)
{
var paymentCardNumbers = await _paymentInstrumentApplication.CardNumberSelectList(search, selected);
var contractingCardNumbers = await _contractingPartyBankAccountsApplication.CardNumberSelectList(search, selected);
var combinedList = new List<string>();
if (paymentCardNumbers.IsSuccedded)
{
combinedList.AddRange(paymentCardNumbers.Data??[]);
}
if (contractingCardNumbers.IsSuccedded)
{
combinedList.AddRange(contractingCardNumbers.Data??[]);
}
return new OperationResult<List<string>>().Succcedded(combinedList.Distinct().ToList());
}
}