{Object.keys(groupedProducts)
.sort((a, b) => {
const productsA = groupedProducts[a]
const productsB = groupedProducts[b]
const orderA = productsA[0]?.category_order ?? 999
const orderB = productsB[0]?.category_order ?? 999
return orderA - orderB
})
.map((categoryName, catIndex) => {
const categoryProducts = groupedProducts[categoryName].sort((a, b) => {
const skuA = a.product_sku || ''
const skuB = b.product_sku || ''
return skuA.localeCompare(skuB)
})
const categoryTotalQty = categoryProducts.reduce((sum, item) => sum + (item.quantity_sold || 0), 0)
const categoryTotalRevenue = categoryProducts.reduce((sum, item) => sum + (item.revenue || 0), 0)
return (
{categoryName.toUpperCase()}
| Produk |
Qty |
Pendapatan
|
% Std HPP
|
% Real HPP
|
Status |
{categoryProducts.map((item, index) => {
const stdHpp = DUMMY_STD_HPP
const realHpp = DUMMY_REAL_HPP
const status = getHppStatus(stdHpp, realHpp)
return (
|
{item.product_name}
|
{item.quantity_sold}
|
{formatCurrency(item.revenue)}
|
{stdHpp}%
|
{realHpp}%
|
|
)
})}
|
Subtotal {categoryName}
|
{categoryTotalQty}
|
{formatCurrency(categoryTotalRevenue)}
|
|
|
|
)
})}
{/* Grand Total */}
|
TOTAL KESELURUHAN
|
{productSummary.totalQuantitySold ?? 0}
|
{formatCurrency(productSummary.totalRevenue ?? 0)}
|
|
|
|