Fix product performance grouped JSON build
This commit is contained in:
@@ -3535,6 +3535,7 @@ function weightFieldForMetric (field) {
|
||||
|
||||
function applyDerivedGroupMetrics (out, sourceRows, groupField = '') {
|
||||
Object.assign(out, normalizeProductCostFields(out))
|
||||
const isGroup = Boolean(String(groupField || '').trim())
|
||||
const preservedCustomerScores = {}
|
||||
const preservedProductScores = {}
|
||||
for (const suffix of ['90d', '180d', '365d', 'total']) {
|
||||
@@ -3556,7 +3557,7 @@ function applyDerivedGroupMetrics (out, sourceRows, groupField = '') {
|
||||
const qty = Number(out[`sales_qty_${suffix}`] || 0)
|
||||
const stockQty = Number(out.stock_qty || 0)
|
||||
const avgStock = Number(out[`avg_stock_${suffix}`] || 0)
|
||||
const turnoverBase = avgStock > 0 ? avgStock : stockQty
|
||||
const turnoverBase = avgStock > 0 ? avgStock : (isGroup ? 0 : stockQty)
|
||||
const days = productPerformancePeriodDays(out, suffix)
|
||||
const avgDaily = days > 0 ? qty / days : Number(out[`avg_daily_sales_${suffix}`] || 0)
|
||||
if (days > 0) out[`avg_daily_sales_${suffix}`] = avgDaily
|
||||
@@ -3660,7 +3661,9 @@ function productPeriodMetricSource (row, suffix) {
|
||||
const salesIndex = Number(row?.[`sales_index_${suffix}`] || 0)
|
||||
const qty = Number(row?.[`sales_qty_${suffix}`] || 0)
|
||||
const stockQty = Number(row?.stock_qty || 0)
|
||||
const avgStock = Number(row?.[`avg_stock_${suffix}`] || 0) || stockQty
|
||||
const avgStock = Number(row?.[`avg_stock_${suffix}`] || 0)
|
||||
const isGroup = Boolean(row?.__group || String(row?.group_field || '').trim())
|
||||
const turnoverBase = avgStock > 0 ? avgStock : (isGroup ? 0 : stockQty)
|
||||
const turnoverKey = `stock_turnover_${suffix}`
|
||||
const hasTurnover = Object.prototype.hasOwnProperty.call(row || {}, turnoverKey)
|
||||
return {
|
||||
@@ -3670,7 +3673,7 @@ function productPeriodMetricSource (row, suffix) {
|
||||
gross_margin_cost_90d: Number(row?.[`gross_margin_cost_${suffix}`] ?? 0),
|
||||
gross_margin_90d: Number(row?.[`gross_margin_${suffix}`] ?? 0),
|
||||
sales_qty_90d: qty,
|
||||
stock_turnover_90d: hasTurnover ? Number(row?.[turnoverKey] || 0) : annualizedStockTurnover(qty, avgStock, productPerformancePeriodDays(row, suffix)),
|
||||
stock_turnover_90d: hasTurnover ? Number(row?.[turnoverKey] || 0) : annualizedStockTurnover(qty, turnoverBase, productPerformancePeriodDays(row, suffix)),
|
||||
market_count_90d: periodCount(row, 'market_count', suffix),
|
||||
customer_count_90d: periodCount(row, 'customer_count', suffix),
|
||||
stock_qty: stockQty
|
||||
@@ -4344,11 +4347,15 @@ function existingOrStockTurnover (value, salesQty, stockQty, periodDays) {
|
||||
}
|
||||
|
||||
function groupedOrExistingStockTurnover (row, suffix, periodDays) {
|
||||
const stockBase = Number(row?.[`avg_stock_${suffix}`] || row?.stock_qty || 0)
|
||||
const salesQty = Number(row?.[`sales_qty_${suffix}`] || 0)
|
||||
const avgStock = Number(row?.[`avg_stock_${suffix}`] || 0)
|
||||
const stockQty = Number(row?.stock_qty || 0)
|
||||
if (row?.__group) {
|
||||
return stockTurnover(salesQty, stockBase, periodDays)
|
||||
if (avgStock > 0) return stockTurnover(salesQty, avgStock, periodDays)
|
||||
const current = Number(row?.[`stock_turnover_${suffix}`])
|
||||
return Number.isFinite(current) ? current : 0
|
||||
}
|
||||
const stockBase = avgStock > 0 ? avgStock : stockQty
|
||||
return existingOrStockTurnover(row?.[`stock_turnover_${suffix}`], salesQty, stockBase, periodDays)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user