diff --git a/src/app/api/dashboard/route.js b/src/app/api/dashboard/route.js index 94e679b..9039093 100644 --- a/src/app/api/dashboard/route.js +++ b/src/app/api/dashboard/route.js @@ -35,6 +35,9 @@ export async function GET(request) { }; }); + // Calculate values by contract + const contractSummary = {}; + projects.forEach(project => { const value = parseFloat(project.wartosc_zlecenia) || 0; const type = project.project_type; @@ -46,6 +49,26 @@ export async function GET(request) { } else if (project.wartosc_zlecenia && project.project_status !== 'cancelled') { typeSummary[type].unrealisedValue += value; } + + // Group by contract + if (project.contract_number && project.wartosc_zlecenia && project.project_status !== 'cancelled') { + const contractKey = project.contract_number; + if (!contractSummary[contractKey]) { + contractSummary[contractKey] = { + contract_name: project.contract_name || project.contract_number, + realisedValue: 0, + unrealisedValue: 0, + totalValue: 0 + }; + } + + if (project.project_status === 'fulfilled' && project.completion_date) { + contractSummary[contractKey].realisedValue += value; + } else { + contractSummary[contractKey].unrealisedValue += value; + } + contractSummary[contractKey].totalValue += value; + } }); // Calculate overall totals @@ -132,6 +155,26 @@ export async function GET(request) { realisedValue: 158000, unrealisedValue: 242000 } + }, + byContract: { + 'UMK/001/2024': { + contract_name: 'Modernizacja budynku głównego', + realisedValue: 320000, + unrealisedValue: 180000, + totalValue: 500000 + }, + 'UMK/002/2024': { + contract_name: 'Budowa parkingu wielopoziomowego', + realisedValue: 480000, + unrealisedValue: 320000, + totalValue: 800000 + }, + 'UMK/003/2024': { + contract_name: 'Remont elewacji', + realisedValue: 158000, + unrealisedValue: 242000, + totalValue: 400000 + } } }; } else { @@ -251,6 +294,17 @@ export async function GET(request) { unrealisedValue: Math.round(data.unrealisedValue) } ]) + ), + byContract: Object.fromEntries( + Object.entries(contractSummary).map(([contractNumber, data]) => [ + contractNumber, + { + contract_name: data.contract_name, + realisedValue: Math.round(data.realisedValue), + unrealisedValue: Math.round(data.unrealisedValue), + totalValue: Math.round(data.totalValue) + } + ]) ) } }); diff --git a/src/app/dashboard/page.js b/src/app/dashboard/page.js index 2b55827..a64a2bb 100644 --- a/src/app/dashboard/page.js +++ b/src/app/dashboard/page.js @@ -284,6 +284,87 @@ export default function TeamLeadsDashboard() { + + {/* By Contract Section */} + {summaryData?.byContract && Object.keys(summaryData.byContract).length > 0 && ( +
{payload[0].payload.fullName}
+{payload[0].payload.name}
++ {`${t('teamDashboard.realised')}: ${formatCurrency(payload[0].payload.realised)}`} +
++ {`${t('teamDashboard.unrealised')}: ${formatCurrency(payload[0].payload.unrealised)}`} +
++ {`${t('teamDashboard.total')}: ${formatCurrency(payload[0].payload.total)}`} +
+