Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0457ef6c7c | |||
| f3ac5ad7df |
+15
-1
@@ -62,9 +62,23 @@ public class CompleteOrderPaymentCommandHandler : IRequestHandler<CompleteOrderP
|
|||||||
var userWallet = await _context.UserWallets
|
var userWallet = await _context.UserWallets
|
||||||
.FirstOrDefaultAsync(w => w.UserId == order.UserId, cancellationToken);
|
.FirstOrDefaultAsync(w => w.UserId == order.UserId, cancellationToken);
|
||||||
|
|
||||||
if (userWallet != null)
|
if (userWallet != null && order.DiscountBalanceUsed > 0)
|
||||||
{
|
{
|
||||||
userWallet.DiscountBalance -= order.DiscountBalanceUsed;
|
userWallet.DiscountBalance -= order.DiscountBalanceUsed;
|
||||||
|
|
||||||
|
// ثبت لاگ تغییرات کیف پول
|
||||||
|
_context.UserWalletChangeLogs.Add(new Domain.Entities.UserWalletChangeLog
|
||||||
|
{
|
||||||
|
WalletId = userWallet.Id,
|
||||||
|
CurrentBalance = userWallet.Balance,
|
||||||
|
ChangeValue = 0,
|
||||||
|
CurrentNetworkBalance = userWallet.NetworkBalance,
|
||||||
|
ChangeNerworkValue = 0,
|
||||||
|
CurrentDiscountBalance = userWallet.DiscountBalance,
|
||||||
|
ChangeDiscountValue = -order.DiscountBalanceUsed,
|
||||||
|
IsIncrease = false,
|
||||||
|
RefrenceId = transaction.Id
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// تایید فروش و کسر موجودی از طریق InventoryService
|
// تایید فروش و کسر موجودی از طریق InventoryService
|
||||||
|
|||||||
+29
-2
@@ -111,7 +111,18 @@ public class PlaceOrderCommandHandler : IRequestHandler<PlaceOrderCommand, Place
|
|||||||
|
|
||||||
// Always apply maximum possible discount (100%) — user cannot choose less
|
// Always apply maximum possible discount (100%) — user cannot choose less
|
||||||
var maxDiscountBalanceUsable = totalDiscountAmount;
|
var maxDiscountBalanceUsable = totalDiscountAmount;
|
||||||
var actualDiscountBalanceUsed = Math.Min(maxDiscountBalanceUsable, userWallet.DiscountBalance);
|
|
||||||
|
// بررسی کافی بودن موجودی کیف پول اعتباری (تخفیفی)
|
||||||
|
if (userWallet.DiscountBalance < maxDiscountBalanceUsable)
|
||||||
|
{
|
||||||
|
return new PlaceOrderResponseDto
|
||||||
|
{
|
||||||
|
Success = false,
|
||||||
|
Message = $"موجودی کیف پول اعتباری کافی نیست. مبلغ مورد نیاز: {maxDiscountBalanceUsable:N0} ریال، موجودی شما: {userWallet.DiscountBalance:N0} ریال"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var actualDiscountBalanceUsed = maxDiscountBalanceUsable;
|
||||||
|
|
||||||
_logger.LogInformation(
|
_logger.LogInformation(
|
||||||
"Discount auto-applied: max allowed={MaxAllowed}, wallet balance={WalletBalance}, used={Used}",
|
"Discount auto-applied: max allowed={MaxAllowed}, wallet balance={WalletBalance}, used={Used}",
|
||||||
@@ -263,9 +274,25 @@ public class PlaceOrderCommandHandler : IRequestHandler<PlaceOrderCommand, Place
|
|||||||
|
|
||||||
var walletForDeduct = await _context.UserWallets
|
var walletForDeduct = await _context.UserWallets
|
||||||
.FirstOrDefaultAsync(w => w.UserId == request.UserId, cancellationToken);
|
.FirstOrDefaultAsync(w => w.UserId == request.UserId, cancellationToken);
|
||||||
if (walletForDeduct != null)
|
if (walletForDeduct != null && actualDiscountBalanceUsed > 0)
|
||||||
|
{
|
||||||
walletForDeduct.DiscountBalance -= actualDiscountBalanceUsed;
|
walletForDeduct.DiscountBalance -= actualDiscountBalanceUsed;
|
||||||
|
|
||||||
|
// ثبت لاگ تغییرات کیف پول
|
||||||
|
_context.UserWalletChangeLogs.Add(new Domain.Entities.UserWalletChangeLog
|
||||||
|
{
|
||||||
|
WalletId = walletForDeduct.Id,
|
||||||
|
CurrentBalance = walletForDeduct.Balance,
|
||||||
|
ChangeValue = 0,
|
||||||
|
CurrentNetworkBalance = walletForDeduct.NetworkBalance,
|
||||||
|
ChangeNerworkValue = 0,
|
||||||
|
CurrentDiscountBalance = walletForDeduct.DiscountBalance,
|
||||||
|
ChangeDiscountValue = -actualDiscountBalanceUsed,
|
||||||
|
IsIncrease = false,
|
||||||
|
RefrenceId = transaction.Id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var cartItem in cartItems)
|
foreach (var cartItem in cartItems)
|
||||||
{
|
{
|
||||||
await _inventoryService.ConfirmSaleAsync(
|
await _inventoryService.ConfirmSaleAsync(
|
||||||
|
|||||||
+15
@@ -114,6 +114,21 @@ public class VerifyDiscountWalletChargeCommandHandler
|
|||||||
_context.Transactions.Add(transaction);
|
_context.Transactions.Add(transaction);
|
||||||
await _context.SaveChangesAsync(cancellationToken);
|
await _context.SaveChangesAsync(cancellationToken);
|
||||||
|
|
||||||
|
// ثبت لاگ تغییرات کیف پول (بعد از ایجاد Transaction برای داشتن TransactionId)
|
||||||
|
_context.UserWalletChangeLogs.Add(new Domain.Entities.UserWalletChangeLog
|
||||||
|
{
|
||||||
|
WalletId = wallet.Id,
|
||||||
|
CurrentBalance = wallet.Balance,
|
||||||
|
ChangeValue = 0,
|
||||||
|
CurrentNetworkBalance = wallet.NetworkBalance,
|
||||||
|
ChangeNerworkValue = 0,
|
||||||
|
CurrentDiscountBalance = wallet.DiscountBalance,
|
||||||
|
ChangeDiscountValue = request.Amount,
|
||||||
|
IsIncrease = true,
|
||||||
|
RefrenceId = transaction.Id
|
||||||
|
});
|
||||||
|
await _context.SaveChangesAsync(cancellationToken);
|
||||||
|
|
||||||
// لینک PaymentTransaction به Transaction داخلی
|
// لینک PaymentTransaction به Transaction داخلی
|
||||||
if (paymentTx != null)
|
if (paymentTx != null)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user