diff --git a/frontend/src/views/TicketDetailPage.tsx b/frontend/src/views/TicketDetailPage.tsx index a38b660..461ae50 100644 --- a/frontend/src/views/TicketDetailPage.tsx +++ b/frontend/src/views/TicketDetailPage.tsx @@ -305,6 +305,18 @@ function projectConsumptionPercent(consumptionMinutes: number, budgetMinutes?: n return Math.round((consumptionMinutes / budgetMinutes) * 100); } +function projectRemainingLabel(remainingMinutes: number | null) { + if (remainingMinutes === null) { + return "Rest offen"; + } + + if (remainingMinutes < 0) { + return `Überzogen ${formatMinutes(Math.abs(remainingMinutes))}`; + } + + return `Rest ${formatMinutes(remainingMinutes)}`; +} + function isPartialHoursInput(value: string) { return /^\d*(?:[,.]\d*)?$/.test(value.trim()); } @@ -562,6 +574,7 @@ export function TicketDetailPage({ periodType, period, ticketId, onNavigate, onO const projectConsumptionMinutes = project?.consumption_minutes ?? 0; const projectBudgetMinutes = project?.hour_budget_minutes ?? null; const projectConsumptionUsagePercent = project ? projectConsumptionPercent(projectConsumptionMinutes, projectBudgetMinutes) : null; + const projectRemainingMinutes = projectBudgetMinutes && projectBudgetMinutes > 0 ? projectBudgetMinutes - projectConsumptionMinutes : null; const canEditProject = project?.can_edit !== false; const canEditTicketData = !project || canEditProject; const isProject = Boolean(project); @@ -1396,16 +1409,24 @@ export function TicketDetailPage({ periodType, period, ticketId, onNavigate, onO Zeitraum {project.starts_on || "offen"} - {project.ends_on || "offen"} Kontingent {projectBudgetMinutes ? formatMinutes(projectBudgetMinutes) : "offen"} Verbrauch {formatMinutes(projectConsumptionMinutes)} + {projectRemainingLabel(projectRemainingMinutes)} {showBudgetedProjectEntries ? {budgetedProjectEntries.length} Budgets : null} - {showBudgetedProjectEntries ? (
- Gesamtverbrauch - {projectConsumptionUsagePercent !== null ? `${projectConsumptionUsagePercent}%` : "ohne Gesamtbudget"} + Budgetverbrauch + + {projectBudgetMinutes && projectBudgetMinutes > 0 + ? `${formatMinutes(projectConsumptionMinutes)} / ${formatMinutes(projectBudgetMinutes)} · ${projectRemainingLabel(projectRemainingMinutes)}` + : `${formatMinutes(projectConsumptionMinutes)} / offen`} +
-
+
- ) : null}