fix some bugs 3

This commit is contained in:
2026-07-18 15:30:59 +03:30
parent f7edf4e2d3
commit 45f2d8bf70
5 changed files with 41 additions and 28 deletions
+14 -9
View File
@@ -59,7 +59,8 @@ class AssetSummaryService
$metalsWithProductWallet,
$mainWalletProductIds,
$userWallets,
$customerId
$customerId,
$ownerType
),
$this->buildInventoryCards($userWallets, $catalogById, $mainWalletProductIds, $mainWallet),
);
@@ -71,7 +72,8 @@ class AssetSummaryService
$catalogById,
$metalsWithProductWallet,
$mainWalletProductIds,
$customerId
$customerId,
$ownerType
);
$cashWallet = $this->walletBalanceService->mainWalletCash($userWallets);
$assetsRialValue = $this->sumAssetsRialValue(
@@ -218,12 +220,13 @@ class AssetSummaryService
array $metalsWithProductWallet = [],
array $mainWalletProductIds = [],
Collection $userWallets,
int $customerId = 0
int $customerId = 0,
int $ownerType = 0
): array {
$cards = [];
$mainWalletGrams = Controller::weightToGrams(
$customerId > 0
? $this->walletBalanceService->effectiveMainWalletGold($customerId)
? $this->walletBalanceService->effectiveMainWalletGold($customerId, $ownerType)
: $this->effectiveMainWalletGold($userWallets, $mainWallet, $mainWalletProductIds)
);
$assignedMetalIds = [];
@@ -237,9 +240,10 @@ class AssetSummaryService
}
$mainWalletWeight = $customerId > 0
? $this->walletBalanceService->effectiveMainWalletGold($customerId)
? $this->walletBalanceService->effectiveMainWalletGold($customerId, $ownerType)
: $this->effectiveMainWalletGold($userWallets, $mainWallet, $mainWalletProductIds);
if ($mainWalletWeight <= 0) {
// صفر کامل را نشان نده؛ منفی را نشان بده تا اختلاف موجودی دیده شود
if (abs($mainWalletWeight) < 0.000001) {
return [];
}
@@ -322,7 +326,7 @@ class AssetSummaryService
public function productDisplayQuantity(int $customerId, int $ownerType, int $productId): float
{
if ($this->configService->isMainWalletProduct($productId)) {
return $this->walletBalanceService->effectiveMainWalletGold($customerId);
return $this->walletBalanceService->effectiveMainWalletGold($customerId, $ownerType);
}
$card = $this->productInventoryCard($customerId, $ownerType, $productId);
@@ -609,7 +613,8 @@ class AssetSummaryService
Collection $catalogById,
array $metalsWithProductWallet = [],
array $mainWalletProductIds = [],
int $customerId = 0
int $customerId = 0,
int $ownerType = 0
): array {
if ($metalIds === []) {
return [];
@@ -617,7 +622,7 @@ class AssetSummaryService
$mainWalletGrams = Controller::weightToGrams(
$customerId > 0
? $this->walletBalanceService->effectiveMainWalletGold($customerId)
? $this->walletBalanceService->effectiveMainWalletGold($customerId, $ownerType)
: $this->effectiveMainWalletGold($userWallets, $mainWallet, $mainWalletProductIds)
);
$totals = [];
+15 -8
View File
@@ -46,26 +46,33 @@ class WalletBalanceService
/**
* موجودی مؤثر کیف اصلی برای نمایش آبشده =
* gold کیف اصلی + gold کیف‌های legacy محصولات main_wallet_products.
* owner_type در جمع نادیده گرفته می‌شود تا خریدهای قدیمی از دست نروند.
*
* @param int|null $ownerType اگر داده شود فقط همان owner_type جمع می‌شود (هم‌تراز wallet/me).
*/
public function effectiveMainWalletGold(int $ownerId): float
public function effectiveMainWalletGold(int $ownerId, ?int $ownerType = null): float
{
$mainGold = (float) Wallet::query()
$mainQuery = Wallet::query()
->where('owner', $ownerId)
->whereNull('fund_id')
->whereNull('product_id')
->sum('gold');
->whereNull('product_id');
if ($ownerType !== null) {
$mainQuery->where('owner_type', $ownerType);
}
$mainGold = (float) $mainQuery->sum('gold');
$productIds = $this->mainWalletProductIds();
if ($productIds === []) {
return round($mainGold, 3);
}
$orphanedGold = (float) Wallet::query()
$orphanedQuery = Wallet::query()
->where('owner', $ownerId)
->whereNull('fund_id')
->whereIn('product_id', $productIds)
->sum('gold');
->whereIn('product_id', $productIds);
if ($ownerType !== null) {
$orphanedQuery->where('owner_type', $ownerType);
}
$orphanedGold = (float) $orphanedQuery->sum('gold');
return round($mainGold + $orphanedGold, 3);
}