show wallets
This commit is contained in:
@@ -19,6 +19,7 @@ export interface WalletInventoryCard {
|
|||||||
display_type: 'count' | 'weight'
|
display_type: 'count' | 'weight'
|
||||||
unit_weight?: string | null
|
unit_weight?: string | null
|
||||||
show_in_assets: boolean
|
show_in_assets: boolean
|
||||||
|
is_melted?: boolean
|
||||||
file?: ProductFile | null
|
file?: ProductFile | null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,37 @@ export function getTotalMetalLabel(metalId: number): string {
|
|||||||
return `کل دارایی ${getMetalLabel(metalId)}`
|
return `کل دارایی ${getMetalLabel(metalId)}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function sumInventoryCardsWeight(
|
||||||
|
cards: Array<{ metal_id?: number; quantity?: number }>,
|
||||||
|
metalId: number
|
||||||
|
): number {
|
||||||
|
return cards
|
||||||
|
.filter((card) => Number(card.metal_id) === metalId)
|
||||||
|
.reduce((sum, card) => sum + Number(card.quantity ?? 0), 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function resolveSummaryMetalWeight(
|
||||||
|
metal: { metal_id: number; total_weight: number },
|
||||||
|
cards: Array<{ metal_id?: number; quantity?: number }>
|
||||||
|
): number {
|
||||||
|
const cardWeight = sumInventoryCardsWeight(cards, metal.metal_id)
|
||||||
|
if (cardWeight > 0) {
|
||||||
|
return Number(cardWeight.toFixed(3))
|
||||||
|
}
|
||||||
|
|
||||||
|
return metal.total_weight
|
||||||
|
}
|
||||||
|
|
||||||
|
export function formatInventoryCardValue(card: {
|
||||||
|
quantity?: number
|
||||||
|
unit?: string
|
||||||
|
display_type?: string
|
||||||
|
}): string {
|
||||||
|
const quantity = Number(card.quantity ?? 0)
|
||||||
|
const unit = card.unit ?? (card.display_type === 'count' ? 'عدد' : 'گرم')
|
||||||
|
return `${quantity} ${unit}`
|
||||||
|
}
|
||||||
|
|
||||||
export function isSingleMetalCatalog(metalIds: number[]): boolean {
|
export function isSingleMetalCatalog(metalIds: number[]): boolean {
|
||||||
return metalIds.length === 1
|
return metalIds.length === 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ import { usePriceWithoutType } from '@/utils/usePrice'
|
|||||||
import { useConfigStore } from '@/store/configStore'
|
import { useConfigStore } from '@/store/configStore'
|
||||||
import { useWalletAssets } from '@/composables/useWalletAssets'
|
import { useWalletAssets } from '@/composables/useWalletAssets'
|
||||||
import type { WalletMetalTotal } from '@/models/walletAssets'
|
import type { WalletMetalTotal } from '@/models/walletAssets'
|
||||||
|
import { resolveSummaryMetalWeight } from '@/utils/productAssets'
|
||||||
|
|
||||||
const nameProject = useConfigStore().config.name
|
const nameProject = useConfigStore().config.name
|
||||||
const { assetsSummary, loadWalletAssets } = useWalletAssets()
|
const { assetsSummary, loadWalletAssets } = useWalletAssets()
|
||||||
@@ -107,16 +108,8 @@ onMounted(async () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
function summaryMetalWeight(metal: WalletMetalTotal) {
|
|
||||||
if (inventoryCards.value.length > 0) {
|
|
||||||
return metal.product_weight
|
|
||||||
}
|
|
||||||
|
|
||||||
return metal.total_weight
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatMetalTotal(metal: WalletMetalTotal) {
|
function formatMetalTotal(metal: WalletMetalTotal) {
|
||||||
return `${summaryMetalWeight(metal)}${metal.unit}`
|
return `${resolveSummaryMetalWeight(metal, inventoryCards.value)}${metal.unit}`
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ import BasicIcon from '@/components/BasicPacks/BasicIcon.vue'
|
|||||||
import { usePriceWithoutType } from '@/utils/usePrice'
|
import { usePriceWithoutType } from '@/utils/usePrice'
|
||||||
import { useWalletAssets } from '@/composables/useWalletAssets'
|
import { useWalletAssets } from '@/composables/useWalletAssets'
|
||||||
import type { WalletMetalTotal } from '@/models/walletAssets'
|
import type { WalletMetalTotal } from '@/models/walletAssets'
|
||||||
|
import { resolveSummaryMetalWeight } from '@/utils/productAssets'
|
||||||
|
|
||||||
const { assetsSummary, loadWalletAssets } = useWalletAssets()
|
const { assetsSummary, loadWalletAssets } = useWalletAssets()
|
||||||
|
|
||||||
@@ -68,15 +69,7 @@ onMounted(() => {
|
|||||||
void loadWalletAssets()
|
void loadWalletAssets()
|
||||||
})
|
})
|
||||||
|
|
||||||
function summaryMetalWeight(metal: WalletMetalTotal) {
|
|
||||||
if (inventoryCards.value.length > 0) {
|
|
||||||
return metal.product_weight
|
|
||||||
}
|
|
||||||
|
|
||||||
return metal.total_weight
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatMetalTotal(metal: WalletMetalTotal) {
|
function formatMetalTotal(metal: WalletMetalTotal) {
|
||||||
return `${summaryMetalWeight(metal)}${metal.unit}`
|
return `${resolveSummaryMetalWeight(metal, inventoryCards.value)}${metal.unit}`
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -12,6 +12,14 @@
|
|||||||
is-line
|
is-line
|
||||||
:value="formatMetalTotal(metal)"
|
:value="formatMetalTotal(metal)"
|
||||||
/>
|
/>
|
||||||
|
<template v-for="card in cardsByMetal(metal.metal_id)" :key="`card-${card.product_id}`">
|
||||||
|
<BasicInfoItem
|
||||||
|
class="flex justify-between mr-4 text-sm"
|
||||||
|
:title="card.title"
|
||||||
|
is-line
|
||||||
|
:value="formatInventoryCardValue(card)"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
<a-divider class="!my-1" />
|
<a-divider class="!my-1" />
|
||||||
</template>
|
</template>
|
||||||
<BasicInfoItem
|
<BasicInfoItem
|
||||||
@@ -41,6 +49,7 @@ import BasicInfoItem from '@/components/BasicPacks/BasicInfoItem.vue'
|
|||||||
import { usePrice } from '@/utils/usePrice'
|
import { usePrice } from '@/utils/usePrice'
|
||||||
import { useWalletAssets } from '@/composables/useWalletAssets'
|
import { useWalletAssets } from '@/composables/useWalletAssets'
|
||||||
import type { WalletMetalTotal } from '@/models/walletAssets'
|
import type { WalletMetalTotal } from '@/models/walletAssets'
|
||||||
|
import { formatInventoryCardValue } from '@/utils/productAssets'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
show: boolean
|
show: boolean
|
||||||
@@ -59,6 +68,7 @@ const visible = computed({
|
|||||||
set: (val) => emit('update:show', val),
|
set: (val) => emit('update:show', val),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const inventoryCards = computed(() => assetsSummary.value?.inventory_cards ?? [])
|
||||||
const metalTotals = computed(() => assetsSummary.value?.metal_totals ?? [])
|
const metalTotals = computed(() => assetsSummary.value?.metal_totals ?? [])
|
||||||
const cashWallet = computed(() => assetsSummary.value?.cash_wallet ?? 0)
|
const cashWallet = computed(() => assetsSummary.value?.cash_wallet ?? 0)
|
||||||
const totalRialValue = computed(() => assetsSummary.value?.total_rial_value ?? 0)
|
const totalRialValue = computed(() => assetsSummary.value?.total_rial_value ?? 0)
|
||||||
@@ -76,6 +86,10 @@ watch(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
function cardsByMetal(metalId: number) {
|
||||||
|
return inventoryCards.value.filter((card) => Number(card.metal_id) === metalId)
|
||||||
|
}
|
||||||
|
|
||||||
function formatMetalTotal(metal: WalletMetalTotal) {
|
function formatMetalTotal(metal: WalletMetalTotal) {
|
||||||
return `${metal.total_weight} ${metal.unit}`
|
return `${metal.total_weight} ${metal.unit}`
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user