diff --git a/CompanyManagment.EFCore/Repository/PaymentTransactionRepository.cs b/CompanyManagment.EFCore/Repository/PaymentTransactionRepository.cs index 3793eac3..aa8a5d7d 100644 --- a/CompanyManagment.EFCore/Repository/PaymentTransactionRepository.cs +++ b/CompanyManagment.EFCore/Repository/PaymentTransactionRepository.cs @@ -55,33 +55,69 @@ public class PaymentTransactionRepository : RepositoryBase x.Status == searchModel.StatusEnum); } - var paymentTransactionsData = await query - .AsNoTracking() - .Skip(searchModel.PageIndex) - .Take(30) - .ToListAsync(); + // 1. گرفتن تراکنش‌ها +var paymentTransactionsData = await query + .AsNoTracking() + .Skip(searchModel.PageIndex) + .Take(30) + .ToListAsync(); - var result = paymentTransactionsData - .OrderByDescending(x=>x.CreationDate).Select(x => new GetPaymentTransactionListViewModel +// 2. استخراج prefix و suffix از کارت‌های ماسک‌شده +var maskedCardInfos = paymentTransactionsData + .Select(x => new + { + MaskedCard = x.CardNumber, + Prefix = x.CardNumber.Substring(0, 4), + Suffix = x.CardNumber.Substring(x.CardNumber.Length - 4) + }) + .Distinct() + .ToList(); + +// 3. گرفتن شماره کارت‌های واقعی +var matchedBankAccounts = await _companyContext.ContractingPartyBankAccounts + .Where(account => maskedCardInfos.Any(mask => + account.CardNumber.StartsWith(mask.Prefix) && + account.CardNumber.EndsWith(mask.Suffix) + )) + .ToListAsync(); + +// 4. ساختن خروجی +var result = paymentTransactionsData + .OrderByDescending(x => x.CreationDate) + .Select(x => + { + var prefix = x.CardNumber.Substring(0, 4); + var suffix = x.CardNumber.Substring(x.CardNumber.Length - 4); + + // پیدا کردن شماره کارت کامل و اطلاعات بانک و صاحب حساب + var matchedAccount = matchedBankAccounts + .FirstOrDefault(account => + account.CardNumber.StartsWith(prefix) && + account.CardNumber.EndsWith(suffix)); + + return new GetPaymentTransactionListViewModel + { + Id = x.id, + ContractingPartyName = x.ContractingPartyName, + BankName = x.BankName, + CardNumber = matchedAccount?.CardNumber ?? x.CardNumber, + Status = x.Status switch { - Id = x.id, - ContractingPartyName = x.ContractingPartyName, - BankName = x.BankName, - CardNumber = x.CardNumber, - Status = x.Status switch - { - PaymentTransactionStatus.Failed => "ناموفق", - PaymentTransactionStatus.Success => "موفق", - _ => "نامشخص" - }, - StatusEnum = x.Status, - Amount = x.Amount, - TransactionId = x.TransactionId, - PaymentDate = x.TransactionDate.ToFarsi(), - PaymentTime = $"{x.TransactionDate:HH:mm}" - }).ToList(); + PaymentTransactionStatus.Failed => "ناموفق", + PaymentTransactionStatus.Success => "موفق", + _ => "نامشخص" + }, + StatusEnum = x.Status, + Amount = x.Amount, + TransactionId = x.TransactionId, + PaymentDate = x.TransactionDate.ToFarsi(), + PaymentTime = $"{x.TransactionDate:HH:mm}" + }; + }) + .ToList(); + +return result; - return result; }