diff --git a/Company.Domain/PaymentInstrumentAgg/IPaymentInstrumentRepository.cs b/Company.Domain/PaymentInstrumentAgg/IPaymentInstrumentRepository.cs index 1feac746..69312633 100644 --- a/Company.Domain/PaymentInstrumentAgg/IPaymentInstrumentRepository.cs +++ b/Company.Domain/PaymentInstrumentAgg/IPaymentInstrumentRepository.cs @@ -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 { Task GetList(PaymentInstrumentSearchModel searchModel); + Task> GetPosTerminalSelectList(string search); + Task>> PosTerminalIdSelectList(string search, string selected); + Task>> IbanSelectList(string search, string selected); + Task>> AccountNumberSelectList(string search, string selected); + Task>> CardNumberSelectList(string search, string selected); + } \ No newline at end of file diff --git a/Company.Domain/PaymentInstrumentAgg/PaymentInstrument.cs b/Company.Domain/PaymentInstrumentAgg/PaymentInstrument.cs index 2208c860..11ee80c7 100644 --- a/Company.Domain/PaymentInstrumentAgg/PaymentInstrument.cs +++ b/Company.Domain/PaymentInstrumentAgg/PaymentInstrument.cs @@ -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) diff --git a/CompanyManagment.App.Contracts/PaymentInstrument/AccountNumberSelectListViewModel.cs b/CompanyManagment.App.Contracts/PaymentInstrument/AccountNumberSelectListViewModel.cs new file mode 100644 index 00000000..e853715c --- /dev/null +++ b/CompanyManagment.App.Contracts/PaymentInstrument/AccountNumberSelectListViewModel.cs @@ -0,0 +1,5 @@ +using _0_Framework.Application; + +namespace CompanyManagment.App.Contracts.PaymentInstrument; + +public class AccountNumberSelectListViewModel : SelectListViewModel; diff --git a/CompanyManagment.App.Contracts/PaymentInstrument/CardNumberSelectListViewModel.cs b/CompanyManagment.App.Contracts/PaymentInstrument/CardNumberSelectListViewModel.cs new file mode 100644 index 00000000..548860f8 --- /dev/null +++ b/CompanyManagment.App.Contracts/PaymentInstrument/CardNumberSelectListViewModel.cs @@ -0,0 +1,5 @@ +using _0_Framework.Application; + +namespace CompanyManagment.App.Contracts.PaymentInstrument; + +public class CardNumberSelectListViewModel:SelectListViewModel; diff --git a/CompanyManagment.App.Contracts/PaymentInstrument/IPaymentInstrumentApplication.cs b/CompanyManagment.App.Contracts/PaymentInstrument/IPaymentInstrumentApplication.cs index c9af65f6..6f509a74 100644 --- a/CompanyManagment.App.Contracts/PaymentInstrument/IPaymentInstrumentApplication.cs +++ b/CompanyManagment.App.Contracts/PaymentInstrument/IPaymentInstrumentApplication.cs @@ -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 DeleteGroup(long id); Task> GetGroup(); -} \ No newline at end of file + + Task>> PosTerminalIdSelectList(string search, string selected); + Task>> IbanSelectList(string search, string selected); + Task>> AccountNumberSelectList(string search, string selected); + Task>> CardNumberSelectList(string search, string selected); +} diff --git a/CompanyManagment.App.Contracts/PaymentInstrument/IbanSelectListViewModel.cs b/CompanyManagment.App.Contracts/PaymentInstrument/IbanSelectListViewModel.cs new file mode 100644 index 00000000..bc934189 --- /dev/null +++ b/CompanyManagment.App.Contracts/PaymentInstrument/IbanSelectListViewModel.cs @@ -0,0 +1,5 @@ +using _0_Framework.Application; + +namespace CompanyManagment.App.Contracts.PaymentInstrument; + +public class IbanSelectListViewModel:SelectListViewModel; diff --git a/CompanyManagment.App.Contracts/PaymentInstrument/PosTerminalSelectListViewModel.cs b/CompanyManagment.App.Contracts/PaymentInstrument/PosTerminalSelectListViewModel.cs new file mode 100644 index 00000000..4dfc930b --- /dev/null +++ b/CompanyManagment.App.Contracts/PaymentInstrument/PosTerminalSelectListViewModel.cs @@ -0,0 +1,7 @@ +using _0_Framework.Application; + +namespace CompanyManagment.App.Contracts.PaymentInstrument; + +public class PosTerminalSelectListViewModel:SelectListViewModel +{ +} diff --git a/CompanyManagment.Application/PaymentInstrumentApplication.cs b/CompanyManagment.Application/PaymentInstrumentApplication.cs index cf996e96..f464dc11 100644 --- a/CompanyManagment.Application/PaymentInstrumentApplication.cs +++ b/CompanyManagment.Application/PaymentInstrumentApplication.cs @@ -120,4 +120,29 @@ public class PaymentInstrumentApplication:IPaymentInstrumentApplication { return await _paymentInstrumentGroupRepository.GetList(); } + + public async Task> GetPosTerminalSelectList(string search) + { + return await _paymentInstrumentRepository.GetPosTerminalSelectList(search); + } + + public async Task>> PosTerminalIdSelectList(string search, string selected) + { + return await _paymentInstrumentRepository.PosTerminalIdSelectList(search, selected); + } + + public async Task>> IbanSelectList(string search, string selected) + { + return await _paymentInstrumentRepository.IbanSelectList(search, selected); + } + + public async Task>> AccountNumberSelectList(string search, string selected) + { + return await _paymentInstrumentRepository.AccountNumberSelectList(search, selected); + } + + public async Task>> CardNumberSelectList(string search, string selected) + { + return await _paymentInstrumentRepository.CardNumberSelectList(search, selected); + } } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/ContractingPartyBankAccountsRepository.cs b/CompanyManagment.EFCore/Repository/ContractingPartyBankAccountsRepository.cs index 5fbeb7ba..05343dd0 100644 --- a/CompanyManagment.EFCore/Repository/ContractingPartyBankAccountsRepository.cs +++ b/CompanyManagment.EFCore/Repository/ContractingPartyBankAccountsRepository.cs @@ -88,7 +88,7 @@ public class ContractingPartyBankAccountsRepository : RepositoryBase>> 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>> 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>> 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)); diff --git a/CompanyManagment.EFCore/Repository/PaymentInstrumentRepository.cs b/CompanyManagment.EFCore/Repository/PaymentInstrumentRepository.cs index 4d4f0d75..624f3c3b 100644 --- a/CompanyManagment.EFCore/Repository/PaymentInstrumentRepository.cs +++ b/CompanyManagment.EFCore/Repository/PaymentInstrumentRepository.cs @@ -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> 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> 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> 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> 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>> 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>().Succcedded(result.Distinct().ToList()); + } + + public async Task>> 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>().Succcedded(result.Distinct().ToList()); + } + + public async Task>> 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>().Succcedded(result.Distinct().ToList()); + } + + public async Task>> 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>().Succcedded(result.Distinct().ToList()); + } } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Controllers/PaymentInstrumentController.cs b/ServiceHost/Areas/Admin/Controllers/PaymentInstrumentController.cs index a55afdd9..f5a82301 100644 --- a/ServiceHost/Areas/Admin/Controllers/PaymentInstrumentController.cs +++ b/ServiceHost/Areas/Admin/Controllers/PaymentInstrumentController.cs @@ -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; } /// ///لیست اطلاعات بانکی جاری شرکا @@ -91,5 +94,97 @@ public class PaymentInstrumentController:AdminBaseController var result = await _paymentInstrumentApplication.DeleteGroup(id); return result; } - + + /// + /// دریافت لیست شناسه‌های دستگاه پوز به صورت رشته + /// + /// عبارت جستجو + /// مقدار انتخاب شده + /// لیست شناسه‌های دستگاه پوز + [HttpGet("pos-terminal-id-select")] + public async Task>>> GetPosTerminalIdSelectList(string search, string selected) + { + return await _paymentInstrumentApplication.PosTerminalIdSelectList(search, selected); + } + + /// + /// دریافت لیست شماره‌های شبا به صورت رشته + /// + /// عبارت جستجو + /// مقدار انتخاب شده + /// لیست شماره‌های شبا + [HttpGet("iban-select")] + public async Task>>> GetIbanSelectList(string search, string selected) + { + var paymentIban = await _paymentInstrumentApplication.IbanSelectList(search, selected); + var contractingIban = await _contractingPartyBankAccountsApplication.IBanSelectList(search, selected); + + var combinedList = new List(); + + if (paymentIban.IsSuccedded) + { + combinedList.AddRange(paymentIban.Data??[]); + } + + if (contractingIban.IsSuccedded) + { + combinedList.AddRange(contractingIban.Data??[]); + } + + return new OperationResult>().Succcedded(combinedList.Distinct().ToList()); + } + + /// + /// دریافت لیست شماره‌های حساب به صورت رشته + /// + /// عبارت جستجو + /// مقدار انتخاب شده + /// لیست شماره‌های حساب + [HttpGet("account-number-select")] + public async Task>>> GetAccountNumberSelectList(string search, string selected) + { + var paymentAccountNumbers = await _paymentInstrumentApplication.AccountNumberSelectList(search, selected); + var contractingAccountNumbers = await _contractingPartyBankAccountsApplication.AccountNumberSelectList(search, selected); + + var combinedList = new List(); + + if (paymentAccountNumbers.IsSuccedded) + { + combinedList.AddRange(paymentAccountNumbers.Data??[]); + } + + if (contractingAccountNumbers.IsSuccedded) + { + combinedList.AddRange(contractingAccountNumbers.Data??[]); + } + + return new OperationResult>().Succcedded(combinedList.Distinct().ToList()); + } + + /// + /// دریافت لیست شماره‌های کارت به صورت رشته + /// + /// عبارت جستجو + /// مقدار انتخاب شده + /// لیست شماره‌های کارت + [HttpGet("card-number-select")] + public async Task>>> GetCardNumberSelectList(string search, string selected) + { + var paymentCardNumbers = await _paymentInstrumentApplication.CardNumberSelectList(search, selected); + var contractingCardNumbers = await _contractingPartyBankAccountsApplication.CardNumberSelectList(search, selected); + + var combinedList = new List(); + + if (paymentCardNumbers.IsSuccedded) + { + combinedList.AddRange(paymentCardNumbers.Data??[]); + } + + if (contractingCardNumbers.IsSuccedded) + { + combinedList.AddRange(contractingCardNumbers.Data??[]); + } + + return new OperationResult>().Succcedded(combinedList.Distinct().ToList()); + } } \ No newline at end of file