Fix projected revenue trend regression
This commit is contained in:
@@ -246,25 +246,45 @@ const MiniStatCards = ({
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const calculateRevenueTrend = useCallback(() => {
|
const calculateRevenueTrend = useCallback(() => {
|
||||||
if (!stats?.prevPeriodRevenue && stats?.prevPeriodRevenue !== 0)
|
if (!stats?.prevPeriodRevenue && stats?.prevPeriodRevenue !== 0) return null;
|
||||||
return null;
|
|
||||||
const currentRevenue =
|
// If period is complete, use actual revenue
|
||||||
stats.periodProgress < 100 ? stats.projectedRevenue : stats.revenue;
|
// If period is incomplete, use smart projection when available, fallback to simple projection
|
||||||
const prevRevenue = stats.prevPeriodRevenue;
|
const currentRevenue = stats.periodProgress < 100
|
||||||
|
? (projection?.projectedRevenue || stats.projectedRevenue)
|
||||||
|
: stats.revenue;
|
||||||
|
const prevRevenue = stats.prevPeriodRevenue; // Previous period's total revenue
|
||||||
|
|
||||||
|
console.log('[MiniStatCards RevenueTrend Debug]', {
|
||||||
|
periodProgress: stats.periodProgress,
|
||||||
|
currentRevenue,
|
||||||
|
smartProjection: projection?.projectedRevenue,
|
||||||
|
simpleProjection: stats.projectedRevenue,
|
||||||
|
actualRevenue: stats.revenue,
|
||||||
|
prevRevenue,
|
||||||
|
isProjected: stats.periodProgress < 100
|
||||||
|
});
|
||||||
|
|
||||||
if (!currentRevenue || !prevRevenue) return null;
|
if (!currentRevenue || !prevRevenue) return null;
|
||||||
|
|
||||||
|
// Calculate absolute difference percentage
|
||||||
const trend = currentRevenue >= prevRevenue ? "up" : "down";
|
const trend = currentRevenue >= prevRevenue ? "up" : "down";
|
||||||
const diff = Math.abs(currentRevenue - prevRevenue);
|
const diff = Math.abs(currentRevenue - prevRevenue);
|
||||||
const percentage = (diff / prevRevenue) * 100;
|
const percentage = (diff / prevRevenue) * 100;
|
||||||
|
|
||||||
|
console.log('[MiniStatCards RevenueTrend Result]', {
|
||||||
|
trend,
|
||||||
|
percentage,
|
||||||
|
calculation: `(|${currentRevenue} - ${prevRevenue}| / ${prevRevenue}) * 100 = ${percentage}%`
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
trend,
|
trend,
|
||||||
value: percentage,
|
value: percentage,
|
||||||
current: currentRevenue,
|
current: currentRevenue,
|
||||||
previous: prevRevenue,
|
previous: prevRevenue,
|
||||||
};
|
};
|
||||||
}, [stats]);
|
}, [stats, projection]);
|
||||||
|
|
||||||
const calculateOrderTrend = useCallback(() => {
|
const calculateOrderTrend = useCallback(() => {
|
||||||
if (!stats?.prevPeriodOrders) return null;
|
if (!stats?.prevPeriodOrders) return null;
|
||||||
|
|||||||
@@ -1476,28 +1476,45 @@ const StatCards = ({
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const calculateRevenueTrend = useCallback(() => {
|
const calculateRevenueTrend = useCallback(() => {
|
||||||
if (!stats?.prevPeriodRevenue && stats?.prevPeriodRevenue !== 0)
|
if (!stats?.prevPeriodRevenue && stats?.prevPeriodRevenue !== 0) return null;
|
||||||
return null;
|
|
||||||
|
|
||||||
// For incomplete periods, compare projected revenue to previous period
|
// If period is complete, use actual revenue
|
||||||
// For complete periods, compare actual revenue to previous period
|
// If period is incomplete, use smart projection when available, fallback to simple projection
|
||||||
const currentRevenue =
|
const currentRevenue = stats.periodProgress < 100
|
||||||
stats.periodProgress < 100 ? stats.projectedRevenue : stats.revenue;
|
? (projection?.projectedRevenue || stats.projectedRevenue)
|
||||||
const prevRevenue = stats.prevPeriodRevenue;
|
: stats.revenue;
|
||||||
|
const prevRevenue = stats.prevPeriodRevenue; // Previous period's total revenue
|
||||||
|
|
||||||
|
console.log('[RevenueTrend Debug]', {
|
||||||
|
periodProgress: stats.periodProgress,
|
||||||
|
currentRevenue,
|
||||||
|
smartProjection: projection?.projectedRevenue,
|
||||||
|
simpleProjection: stats.projectedRevenue,
|
||||||
|
actualRevenue: stats.revenue,
|
||||||
|
prevRevenue,
|
||||||
|
isProjected: stats.periodProgress < 100
|
||||||
|
});
|
||||||
|
|
||||||
if (!currentRevenue || !prevRevenue) return null;
|
if (!currentRevenue || !prevRevenue) return null;
|
||||||
|
|
||||||
|
// Calculate absolute difference percentage
|
||||||
const trend = currentRevenue >= prevRevenue ? "up" : "down";
|
const trend = currentRevenue >= prevRevenue ? "up" : "down";
|
||||||
const diff = Math.abs(currentRevenue - prevRevenue);
|
const diff = Math.abs(currentRevenue - prevRevenue);
|
||||||
const percentage = (diff / prevRevenue) * 100;
|
const percentage = (diff / prevRevenue) * 100;
|
||||||
|
|
||||||
|
console.log('[RevenueTrend Result]', {
|
||||||
|
trend,
|
||||||
|
percentage,
|
||||||
|
calculation: `(|${currentRevenue} - ${prevRevenue}| / ${prevRevenue}) * 100 = ${percentage}%`
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
trend,
|
trend,
|
||||||
value: percentage,
|
value: percentage,
|
||||||
current: currentRevenue,
|
current: currentRevenue,
|
||||||
previous: prevRevenue,
|
previous: prevRevenue,
|
||||||
};
|
};
|
||||||
}, [stats]);
|
}, [stats, projection]);
|
||||||
|
|
||||||
const calculateOrderTrend = useCallback(() => {
|
const calculateOrderTrend = useCallback(() => {
|
||||||
if (!stats?.prevPeriodOrders) return null;
|
if (!stats?.prevPeriodOrders) return null;
|
||||||
|
|||||||
Reference in New Issue
Block a user