-
- {
+
+
-
-
-
{
- onConfigInputChange();
- onFixedCostChange(parseNumber(event.target.value, fixedCostPerOrder));
- }}
- onBlur={handleFieldBlur}
- />
+
diff --git a/inventory/src/pages/DiscountSimulator.tsx b/inventory/src/pages/DiscountSimulator.tsx
index 3125bc6..43b1c44 100644
--- a/inventory/src/pages/DiscountSimulator.tsx
+++ b/inventory/src/pages/DiscountSimulator.tsx
@@ -16,6 +16,7 @@ import {
DiscountPromoType,
ShippingPromoType,
ShippingTierConfig,
+ CogsCalculationMode,
} from "@/types/discount-simulator";
import { useToast } from "@/hooks/use-toast";
@@ -57,6 +58,7 @@ export function DiscountSimulator() {
const [shippingTiers, setShippingTiers] = useState
([]);
const [merchantFeePercent, setMerchantFeePercent] = useState(DEFAULT_MERCHANT_FEE);
const [fixedCostPerOrder, setFixedCostPerOrder] = useState(DEFAULT_FIXED_COST);
+ const [cogsCalculationMode, setCogsCalculationMode] = useState('actual');
const [pointDollarValue, setPointDollarValue] = useState(DEFAULT_POINT_VALUE);
const [pointDollarTouched, setPointDollarTouched] = useState(false);
const [simulationResult, setSimulationResult] = useState(undefined);
@@ -155,6 +157,7 @@ export function DiscountSimulator() {
}),
merchantFeePercent,
fixedCostPerOrder,
+ cogsCalculationMode,
pointsConfig: payloadPointsConfig,
};
}, [
@@ -166,6 +169,7 @@ export function DiscountSimulator() {
shippingTiers,
merchantFeePercent,
fixedCostPerOrder,
+ cogsCalculationMode,
pointDollarValue,
]);
@@ -246,6 +250,7 @@ export function DiscountSimulator() {
shippingTiers?: ShippingTierConfig[];
merchantFeePercent?: number;
fixedCostPerOrder?: number;
+ cogsCalculationMode?: CogsCalculationMode;
pointsConfig?: {
pointsPerDollar?: number | null;
redemptionRate?: number | null;
@@ -292,6 +297,10 @@ export function DiscountSimulator() {
setFixedCostPerOrder(parsed.fixedCostPerOrder);
}
+ if (parsed.cogsCalculationMode === 'actual' || parsed.cogsCalculationMode === 'average') {
+ setCogsCalculationMode(parsed.cogsCalculationMode);
+ }
+
if (parsed.pointsConfig && typeof parsed.pointsConfig.pointDollarValue === 'number') {
setPointDollarValue(parsed.pointsConfig.pointDollarValue);
setPointDollarTouched(true);
@@ -328,9 +337,10 @@ export function DiscountSimulator() {
shippingTiers,
merchantFeePercent,
fixedCostPerOrder,
+ cogsCalculationMode,
pointDollarValue,
});
- }, [dateRange, selectedPromoId, productPromo, shippingPromo, shippingTiers, merchantFeePercent, fixedCostPerOrder, pointDollarValue]);
+ }, [dateRange, selectedPromoId, productPromo, shippingPromo, shippingTiers, merchantFeePercent, fixedCostPerOrder, cogsCalculationMode, pointDollarValue]);
useEffect(() => {
if (!hasLoadedConfig) {
@@ -403,6 +413,7 @@ export function DiscountSimulator() {
setShippingTiers([]);
setMerchantFeePercent(DEFAULT_MERCHANT_FEE);
setFixedCostPerOrder(DEFAULT_FIXED_COST);
+ setCogsCalculationMode('actual');
setPointDollarValue(DEFAULT_POINT_VALUE);
setPointDollarTouched(false);
setSimulationResult(undefined);
@@ -449,6 +460,8 @@ export function DiscountSimulator() {
onMerchantFeeChange={setMerchantFeePercent}
fixedCostPerOrder={fixedCostPerOrder}
onFixedCostChange={setFixedCostPerOrder}
+ cogsCalculationMode={cogsCalculationMode}
+ onCogsCalculationModeChange={setCogsCalculationMode}
pointsPerDollar={currentPointsPerDollar}
redemptionRate={currentRedemptionRate}
pointDollarValue={pointDollarValue}
diff --git a/inventory/src/types/discount-simulator.ts b/inventory/src/types/discount-simulator.ts
index 76edc4e..a70811a 100644
--- a/inventory/src/types/discount-simulator.ts
+++ b/inventory/src/types/discount-simulator.ts
@@ -54,6 +54,7 @@ export interface DiscountSimulationTotals {
pointDollarValue: number;
weightedProfitAmount: number;
weightedProfitPercent: number;
+ overallCogsPercentage?: number;
}
export interface DiscountSimulationResponse {
@@ -65,6 +66,8 @@ export interface DiscountSimulationResponse {
buckets: DiscountSimulationBucket[];
}
+export type CogsCalculationMode = 'actual' | 'average';
+
export interface DiscountSimulationRequest {
dateRange: {
start: string;
@@ -89,6 +92,7 @@ export interface DiscountSimulationRequest {
shippingTiers: ShippingTierConfig[];
merchantFeePercent: number;
fixedCostPerOrder: number;
+ cogsCalculationMode: CogsCalculationMode;
pointsConfig: {
pointsPerDollar: number | null;
redemptionRate: number | null;