fixed buy and sell
This commit is contained in:
@@ -50,7 +50,7 @@ class AssetSummaryService
|
|||||||
|
|
||||||
$metalsWithProductWallet = $this->metalIdsWithProductWallet($userWallets, $catalogById, $mainWalletProductIds, $mainWallet);
|
$metalsWithProductWallet = $this->metalIdsWithProductWallet($userWallets, $catalogById, $mainWalletProductIds, $mainWallet);
|
||||||
$inventoryCards = array_merge(
|
$inventoryCards = array_merge(
|
||||||
$this->buildMeltedInventoryCards($catalog, $catalogById, $mainWallet, $metalIds, $metalsWithProductWallet, $mainWalletProductIds),
|
$this->buildMeltedInventoryCards($catalog, $catalogById, $mainWallet, $metalIds, $metalsWithProductWallet, $mainWalletProductIds, $userWallets),
|
||||||
$this->buildInventoryCards($userWallets, $catalogById, $mainWalletProductIds, $mainWallet),
|
$this->buildInventoryCards($userWallets, $catalogById, $mainWalletProductIds, $mainWallet),
|
||||||
);
|
);
|
||||||
$metalTotals = $this->buildMetalTotals($userWallets, $mainWallet, $metalIds, $weightUnit, $catalogById, $metalsWithProductWallet, $mainWalletProductIds);
|
$metalTotals = $this->buildMetalTotals($userWallets, $mainWallet, $metalIds, $weightUnit, $catalogById, $metalsWithProductWallet, $mainWalletProductIds);
|
||||||
@@ -190,10 +190,13 @@ class AssetSummaryService
|
|||||||
?Wallet $mainWallet,
|
?Wallet $mainWallet,
|
||||||
array $metalIds,
|
array $metalIds,
|
||||||
array $metalsWithProductWallet = [],
|
array $metalsWithProductWallet = [],
|
||||||
array $mainWalletProductIds = []
|
array $mainWalletProductIds = [],
|
||||||
|
Collection $userWallets
|
||||||
): array {
|
): array {
|
||||||
$cards = [];
|
$cards = [];
|
||||||
$mainWalletGrams = Controller::weightToGrams((float) ($mainWallet?->gold ?? 0));
|
$mainWalletGrams = Controller::weightToGrams(
|
||||||
|
$this->effectiveMainWalletGold($userWallets, $mainWallet, $mainWalletProductIds)
|
||||||
|
);
|
||||||
$assignedMetalIds = [];
|
$assignedMetalIds = [];
|
||||||
$mainProductId = $this->configService->mainProductId();
|
$mainProductId = $this->configService->mainProductId();
|
||||||
|
|
||||||
@@ -204,7 +207,7 @@ class AssetSummaryService
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$mainWalletWeight = (float) ($mainWallet?->gold ?? 0);
|
$mainWalletWeight = $this->effectiveMainWalletGold($userWallets, $mainWallet, $mainWalletProductIds);
|
||||||
if ($mainWalletWeight <= 0) {
|
if ($mainWalletWeight <= 0) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
@@ -327,7 +330,8 @@ class AssetSummaryService
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* کیف legacy محصول آبشده/کاتد — وقتی همان فلز روی کیف اصلی موجودی دارد نباید دوباره شمرده شود.
|
* کیف legacy محصول آبشده/کاتد — فقط همان محصول نماینده یا main_product؛
|
||||||
|
* محصولات آبشدهٔ جدا (مثل آبشده سرمایهگذاری) نباید پنهان شوند.
|
||||||
*/
|
*/
|
||||||
private function shouldIgnoreLegacyProductWalletLine(
|
private function shouldIgnoreLegacyProductWalletLine(
|
||||||
Product $catalogProduct,
|
Product $catalogProduct,
|
||||||
@@ -335,7 +339,9 @@ class AssetSummaryService
|
|||||||
Collection $catalogById,
|
Collection $catalogById,
|
||||||
array $mainWalletProductIds
|
array $mainWalletProductIds
|
||||||
): bool {
|
): bool {
|
||||||
if (in_array((int) $catalogProduct->id, $mainWalletProductIds, true)) {
|
$productId = (int) $catalogProduct->id;
|
||||||
|
|
||||||
|
if (in_array($productId, $mainWalletProductIds, true)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -347,9 +353,17 @@ class AssetSummaryService
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$mainMetalId = $this->resolveMainWalletMetalId($mainWallet, $catalogById, $mainWalletProductIds);
|
$representative = $this->resolveMainWalletRepresentative($catalogById, $mainWalletProductIds);
|
||||||
|
if ($representative && $productId === (int) $representative->id) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return $mainMetalId > 0 && (int) ($catalogProduct->metal_id ?? 0) === $mainMetalId;
|
$mainProductId = $this->configService->mainProductId();
|
||||||
|
if ($mainProductId && $productId === (int) $mainProductId) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function resolveMainWalletMetalId(
|
private function resolveMainWalletMetalId(
|
||||||
@@ -565,7 +579,9 @@ class AssetSummaryService
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$mainWalletGrams = Controller::weightToGrams((float) ($mainWallet?->gold ?? 0));
|
$mainWalletGrams = Controller::weightToGrams(
|
||||||
|
$this->effectiveMainWalletGold($userWallets, $mainWallet, $mainWalletProductIds)
|
||||||
|
);
|
||||||
$totals = [];
|
$totals = [];
|
||||||
|
|
||||||
// فلز نمایندهٔ کیف اصلی در حالت main_wallet_products
|
// فلز نمایندهٔ کیف اصلی در حالت main_wallet_products
|
||||||
@@ -740,6 +756,32 @@ class AssetSummaryService
|
|||||||
return (bool) ($product->show_in_assets ?? false);
|
return (bool) ($product->show_in_assets ?? false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* طلای کیف اصلی + کیف legacy محصولات main_wallet_products (خریدهای قبل از اتصال).
|
||||||
|
*/
|
||||||
|
private function effectiveMainWalletGold(
|
||||||
|
Collection $userWallets,
|
||||||
|
?Wallet $mainWallet,
|
||||||
|
array $mainWalletProductIds
|
||||||
|
): float {
|
||||||
|
$total = (float) ($mainWallet?->gold ?? 0);
|
||||||
|
|
||||||
|
if ($mainWalletProductIds === []) {
|
||||||
|
return $total;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($userWallets as $walletLine) {
|
||||||
|
$productId = (int) ($walletLine->product_id ?? 0);
|
||||||
|
if ($productId <= 0 || !in_array($productId, $mainWalletProductIds, true)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$total += (float) ($walletLine->gold ?? 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $total;
|
||||||
|
}
|
||||||
|
|
||||||
private function isCountBasedProduct(Product $product): bool
|
private function isCountBasedProduct(Product $product): bool
|
||||||
{
|
{
|
||||||
return Controller::isCountBasedProduct($this->productPayload($product));
|
return Controller::isCountBasedProduct($this->productPayload($product));
|
||||||
|
|||||||
Reference in New Issue
Block a user