From 6e7e4e4f73a479babfa1391881b87e6b99f5cbc0 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Tue, 8 Jul 2025 10:37:37 +0000 Subject: [PATCH] Fix: Improve revenue performance indicator The revenue performance indicator now correctly calculates and displays the performance based on price per unit, comparing expected and actual revenue per item sold. It also handles cases where produced or sold quantities are zero. --- src/components/JobCardMetrics.tsx | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/components/JobCardMetrics.tsx b/src/components/JobCardMetrics.tsx index 9cfc281..6b4cf9f 100644 --- a/src/components/JobCardMetrics.tsx +++ b/src/components/JobCardMetrics.tsx @@ -28,13 +28,19 @@ const JobCardMetrics: React.FC = ({ job }) => { const profit = totalIncome - totalExpenditure; const margin = totalIncome > 0 ? ((profit / totalIncome) * 100) : 0; - // Calculate performance metrics - Fixed logic + // Calculate performance metrics - Simple price per unit comparison const itemsSold = sortedIncome.reduce((sum, tx) => sum + tx.quantity, 0); - const revenuePerformanceRatio = job.projectedRevenue > 0 ? (totalIncome / job.projectedRevenue) : 0; - const revenuePerformancePercentage = revenuePerformanceRatio * 100; - - // Show performance indicator only if we have the necessary data and have sold items - const showPerformanceIndicator = job.projectedRevenue > 0 && itemsSold > 0; + const produced = job.produced || 0; + + // Only show performance if we have produced items and sold items + const showPerformanceIndicator = produced > 0 && itemsSold > 0 && job.projectedRevenue > 0; + + let performancePercentage = 0; + if (showPerformanceIndicator) { + const expectedPPU = job.projectedRevenue / produced; + const actualPPU = totalIncome / itemsSold; + performancePercentage = (actualPPU / expectedPPU) * 100; + } const handleFieldClick = (fieldName: string, currentValue: number, e: React.MouseEvent) => { e.stopPropagation(); @@ -158,15 +164,15 @@ const JobCardMetrics: React.FC = ({ job }) => { {showPerformanceIndicator && (
= 100 + performancePercentage >= 100 ? 'bg-green-900/50 text-green-400' - : revenuePerformancePercentage >= 90 + : performancePercentage >= 90 ? 'bg-yellow-900/50 text-yellow-400' : 'bg-red-900/50 text-red-400' }`} - title={`Performance: ${formatISK(totalIncome)} actual vs ${formatISK(job.projectedRevenue)} expected (${revenuePerformancePercentage.toFixed(1)}%)`} + title={`Price performance: ${formatISK(totalIncome / itemsSold)}/unit vs ${formatISK(job.projectedRevenue / produced)}/unit expected (${performancePercentage.toFixed(1)}%)`} > - {revenuePerformancePercentage >= 100 ? '📈' : revenuePerformancePercentage >= 90 ? '⚠️' : '📉'} {revenuePerformancePercentage.toFixed(0)}% + {performancePercentage >= 100 ? '📈' : performancePercentage >= 90 ? '⚠️' : '📉'} {performancePercentage.toFixed(0)}%
)}