From 304d09e3c4458e7f3f3dd7a8c8617c73dbdcbb7a Mon Sep 17 00:00:00 2001 From: Matt Date: Sat, 4 Jan 2025 11:15:35 -0500 Subject: [PATCH] Fix projected revenue trend regression --- .../components/dashboard/MiniStatCards.jsx | 32 ++++++++++++++---- .../src/components/dashboard/StatCards.jsx | 33 ++++++++++++++----- 2 files changed, 51 insertions(+), 14 deletions(-) diff --git a/dashboard/src/components/dashboard/MiniStatCards.jsx b/dashboard/src/components/dashboard/MiniStatCards.jsx index 9953eb7..e43ae48 100644 --- a/dashboard/src/components/dashboard/MiniStatCards.jsx +++ b/dashboard/src/components/dashboard/MiniStatCards.jsx @@ -246,25 +246,45 @@ const MiniStatCards = ({ }, []); const calculateRevenueTrend = useCallback(() => { - if (!stats?.prevPeriodRevenue && stats?.prevPeriodRevenue !== 0) - return null; - const currentRevenue = - stats.periodProgress < 100 ? stats.projectedRevenue : stats.revenue; - const prevRevenue = stats.prevPeriodRevenue; + if (!stats?.prevPeriodRevenue && stats?.prevPeriodRevenue !== 0) return null; + + // If period is complete, use actual revenue + // If period is incomplete, use smart projection when available, fallback to simple projection + 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; + // Calculate absolute difference percentage const trend = currentRevenue >= prevRevenue ? "up" : "down"; const diff = Math.abs(currentRevenue - prevRevenue); const percentage = (diff / prevRevenue) * 100; + console.log('[MiniStatCards RevenueTrend Result]', { + trend, + percentage, + calculation: `(|${currentRevenue} - ${prevRevenue}| / ${prevRevenue}) * 100 = ${percentage}%` + }); + return { trend, value: percentage, current: currentRevenue, previous: prevRevenue, }; - }, [stats]); + }, [stats, projection]); const calculateOrderTrend = useCallback(() => { if (!stats?.prevPeriodOrders) return null; diff --git a/dashboard/src/components/dashboard/StatCards.jsx b/dashboard/src/components/dashboard/StatCards.jsx index afceb98..5db3bea 100644 --- a/dashboard/src/components/dashboard/StatCards.jsx +++ b/dashboard/src/components/dashboard/StatCards.jsx @@ -1476,28 +1476,45 @@ const StatCards = ({ }, []); const calculateRevenueTrend = useCallback(() => { - if (!stats?.prevPeriodRevenue && stats?.prevPeriodRevenue !== 0) - return null; + if (!stats?.prevPeriodRevenue && stats?.prevPeriodRevenue !== 0) return null; - // For incomplete periods, compare projected revenue to previous period - // For complete periods, compare actual revenue to previous period - const currentRevenue = - stats.periodProgress < 100 ? stats.projectedRevenue : stats.revenue; - const prevRevenue = stats.prevPeriodRevenue; + // If period is complete, use actual revenue + // If period is incomplete, use smart projection when available, fallback to simple projection + const currentRevenue = stats.periodProgress < 100 + ? (projection?.projectedRevenue || stats.projectedRevenue) + : 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; + // Calculate absolute difference percentage const trend = currentRevenue >= prevRevenue ? "up" : "down"; const diff = Math.abs(currentRevenue - prevRevenue); const percentage = (diff / prevRevenue) * 100; + console.log('[RevenueTrend Result]', { + trend, + percentage, + calculation: `(|${currentRevenue} - ${prevRevenue}| / ${prevRevenue}) * 100 = ${percentage}%` + }); + return { trend, value: percentage, current: currentRevenue, previous: prevRevenue, }; - }, [stats]); + }, [stats, projection]); const calculateOrderTrend = useCallback(() => { if (!stats?.prevPeriodOrders) return null;