diff --git a/src/utils/productDealMethod.ts b/src/utils/productDealMethod.ts index c44011d..b700d05 100644 --- a/src/utils/productDealMethod.ts +++ b/src/utils/productDealMethod.ts @@ -607,6 +607,7 @@ export type TransactionTradeProductSource = { product?: (ProductUnitSource & { title?: string | null }) | null wallet?: { product?: (ProductUnitSource & { title?: string | null }) | null } | null title?: string | null + order?: unknown } /** محصول معامله‌شده — نه لزوماً همان کیف پول (مثلاً خرید مفتول با کیف کاتد) */ @@ -654,6 +655,53 @@ export function getTransactionTradePriceLabel(product?: (ProductUnitSource & { t return `قیمت هر ${getWeightUnit()} ${getTradePriceUnitLabel()}` } +/** برچسب «موجودی کیف …» برای سطر موجودی فلز در جزئیات معامله */ +export function getTransactionMetalWalletBalanceLabel( + item?: TransactionTradeProductSource | null, +): string { + if (!item) { + return getGoldWalletLabel() + } + + const tradeProduct = item.order ? resolveTransactionTradeProduct(item) : null + const walletProduct = item.wallet?.product + const tradeTitle = (tradeProduct?.title ?? '').trim() + const walletTitle = (walletProduct?.title ?? '').trim() + + if (tradeTitle) { + if (!walletTitle) { + return `موجودی کیف ${tradeTitle}` + } + + return `موجودی ${tradeTitle}` + } + + if (walletTitle) { + return `موجودی ${walletTitle}` + } + + return getGoldWalletLabel(item.wallet?.product?.group_type) +} + +/** واحد نمایش موجودی فلز در جزئیات معامله */ +export function getTransactionMetalWalletBalanceUnit( + item?: TransactionTradeProductSource | null, +): string { + const tradeProduct = item?.order ? resolveTransactionTradeProduct(item) : null + const walletProduct = item?.wallet?.product + const product = tradeProduct?.title ? tradeProduct : walletProduct + + if (product && usesQuantityTrade(product)) { + return getProductQuantityUnit(product) + } + + if (product?.title) { + return getWeightUnit() + } + + return getWeightUnit() +} + /** وزن کل زیر مقدار مبادله‌شده — فقط محصول تعدادی (نه trade_by_quantity) */ export function shouldShowTransactionTotalWeightLine(product?: ProductUnitSource | null) { if (!product || usesQuantityTrade(product) || !hasProductUnitWeight(product)) { diff --git a/src/views/base/transactions/components/TransactionDetailPanel.vue b/src/views/base/transactions/components/TransactionDetailPanel.vue index c25d5d7..aeecf6d 100644 --- a/src/views/base/transactions/components/TransactionDetailPanel.vue +++ b/src/views/base/transactions/components/TransactionDetailPanel.vue @@ -60,29 +60,23 @@ ریال -
+
- موجودی {{ item.wallet.product.title }}: + {{ metalWalletBalanceLabel }}:
{{ formatGoldAmount(item.balance_gold) }}
- {{ getProductQuantityUnit(item.wallet.product) }} + {{ metalWalletBalanceUnit }}
-
- هر عدد {{ getProductUnitWeightLabel(item.wallet.product) }} +
+ هر عدد {{ getProductUnitWeightLabel(metalWalletProduct) }}
-
-
- {{ getGoldWalletLabel(item.wallet?.product?.group_type) }}: -
-
-
{{ formatGoldAmount(item.balance_gold) }}
- {{ getWeightUnit() }} -
-
وضعیت:
@@ -112,13 +106,12 @@ import { formatGoldAmount, usePriceWithoutType } from '@/utils/usePrice' import type { Transaction } from '@/models/transaction' import { getCashWalletLabel, - getGoldWalletLabel, - getMeltedGoldTradeLabel, - getProductQuantityUnit, getProductTotalWeightLabel, getProductUnitWeightLabel, + getTransactionMetalWalletBalanceLabel, + getTransactionMetalWalletBalanceUnit, getTransactionTradePriceLabel, - getWeightUnit, + getMeltedGoldTradeLabel, resolveTransactionTradeProduct, shouldShowTransactionTotalWeightLine, } from '@/utils/productDealMethod' @@ -136,4 +129,19 @@ const tradeProduct = computed(() => resolveTransactionTradeProduct(props.item)) const tradeProductLabel = computed( () => (tradeProduct.value?.title ?? '').trim() || getMeltedGoldTradeLabel(), ) +const metalWalletProduct = computed(() => { + if (props.item.order && tradeProduct.value?.title) { + return tradeProduct.value + } + + return props.item.wallet?.product ?? tradeProduct.value ?? null +}) +const metalWalletBalanceLabel = computed(() => getTransactionMetalWalletBalanceLabel(props.item)) +const metalWalletBalanceUnit = computed(() => getTransactionMetalWalletBalanceUnit(props.item)) +const showMetalWalletBalance = computed( + () => + props.item.order != null + || props.item.wallet?.product != null + || Math.abs(Number(props.item.balance_gold) || 0) > 0, +)