fix fallback base on show product
This commit is contained in:
@@ -32,6 +32,20 @@ export function isMeltedTradeGroup(groupType?: string | null) {
|
||||
return group === PRODUCT_CATEGORY_ABSHODE || LEGACY_MELTED_GROUP_TYPES.includes(group as typeof LEGACY_MELTED_GROUP_TYPES[number])
|
||||
}
|
||||
|
||||
export interface QuantityTradeProductSource {
|
||||
group_type?: string | null
|
||||
trade_by_quantity?: boolean | number | null
|
||||
}
|
||||
|
||||
/** معامله مقداری: فقط فیلد trade_by_quantity — بدون وابستگی به دستهبندی */
|
||||
export function usesQuantityTrade(product?: QuantityTradeProductSource | null) {
|
||||
if (!product) {
|
||||
return false
|
||||
}
|
||||
|
||||
return product.trade_by_quantity === true || Number(product.trade_by_quantity) === 1
|
||||
}
|
||||
|
||||
export function isMetalCommodityGroup(groupType?: string | null) {
|
||||
const group = normalizeProductGroupType(groupType)
|
||||
return group === 'مس' || group === 'نقره'
|
||||
|
||||
@@ -56,10 +56,24 @@ export function isWeightBasedProductUnit(unit?: string | null) {
|
||||
|
||||
const COUNT_BASED_GROUP_TYPES = ['سکه', 'گوی', 'مکعب', 'شمش', 'سکه پارسیان']
|
||||
|
||||
/** مطابق ادمین: وزن «دارد» یعنی amount مقدار واقعی است؛ «ندارد» یعنی amount = 1 */
|
||||
/** مطابق ادمین: وزن «دارد» => amount > 0 ؛ «ندارد» => amount = 0 */
|
||||
export function hasProductUnitWeight(product?: ProductUnitSource | null) {
|
||||
if (isMeltedTradeGroup(product?.group_type)) {
|
||||
return false
|
||||
}
|
||||
|
||||
const amount = Number(product?.amount ?? 0)
|
||||
return amount > 0 && amount !== 1
|
||||
return amount > 0
|
||||
}
|
||||
|
||||
/** ضریب قیمت — محصول بدون وزن قطعه همیشه ۱ */
|
||||
export function productPriceAmountFactor(product?: ProductUnitSource | null) {
|
||||
if (hasProductUnitWeight(product)) {
|
||||
const amount = Number(product?.amount ?? 0)
|
||||
return amount > 0 ? amount : 1
|
||||
}
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
export function getProductWeightUnit(product?: ProductUnitSource | null) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { Product } from '@/models/products'
|
||||
import { getTradeBuyPrice, getTradeSellPrice, lastPrice } from '@/utils/price'
|
||||
import { isMetalCommodityGroup, isMeltedProductUsingAppPrice, isMeltedTradeGroup } from '@/utils/productCategories'
|
||||
import { isMetalCommodityGroup, isMeltedProductUsingAppPrice, isMeltedTradeGroup, usesQuantityTrade } from '@/utils/productCategories'
|
||||
import { productPriceAmountFactor } from '@/utils/productDealMethod'
|
||||
|
||||
function productUsesLastPriceIfZero(product: Product): boolean {
|
||||
return Boolean(product.use_last_price_if_zero)
|
||||
@@ -89,13 +90,14 @@ export function getProductBuyPrice(product: Product): number {
|
||||
isMeltedProductUsingAppPrice(product)
|
||||
|| isMeltedTradeGroup(product.group_type)
|
||||
|| isMetalCommodityGroup(product.group_type)
|
||||
|| usesQuantityTrade(product)
|
||||
) {
|
||||
return base + fee
|
||||
}
|
||||
|
||||
const withFee = base + fee
|
||||
return product.direct_price === 0
|
||||
? withFee * Number(product.amount ?? 0)
|
||||
? withFee * productPriceAmountFactor(product)
|
||||
: withFee
|
||||
}
|
||||
|
||||
@@ -138,7 +140,7 @@ export function getProductSellPrice(product: Product): number {
|
||||
return 0
|
||||
}
|
||||
|
||||
if (isMeltedProductUsingAppPrice(product) || isMeltedTradeGroup(product.group_type)) {
|
||||
if (isMeltedProductUsingAppPrice(product) || isMeltedTradeGroup(product.group_type) || usesQuantityTrade(product)) {
|
||||
return base - Number(product.cash_fee_sell ?? 0)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user