$weeks */ /** @var list<\App\Domain\SprintWorker> $sprintWorkers */ /** @var array> $grid sw_id => week_id => days */ /** @var array $capacity */ use function App\Http\e; if (!function_exists('fmt_days')) { function fmt_days(float $x): string { // Show 0 as "0", whole numbers as integer, halves as x.5 if (abs($x - round($x)) < 1e-9) { return (string) (int) round($x); } return number_format($x, 1); } } ?>

name) ?>

startDate) ?> – endDate) ?> · Reserve reserveFraction * 100, 0)) ?>% isArchived): ?> · archived

isAdmin): ?> Settings
No weeks yet. Open settings to add some. No workers on this sprint yet. Open settings to add some.
maxWorkingDays; ?> id] ?? []; $rowSum = array_sum($rowDays); ?> id] ?? 0.0); ?>
 
KWisoWeek ?>
startDate) ?>
Σ RTB
Arbeitstage isAdmin): ?> maxWorkingDays)) ?>  
isAdmin): ?> workerName) ?> isAdmin): ?> isAdmin): ?> rtb, 2, '.', '')) ?>
Capacity
id] ?? null; ?> id] ?? null; ?> id] ?? null; $av = (float) ($c['available'] ?? 0.0); ?>
  workerName) ?>
Ressourcen
− Reserven
Available

Numeric inputs snap to 0.5 (days) or 0.05 (RTB) on blur. Edits save automatically with a 400 ms debounce; Available turns red if a worker is overcommitted.

Task list lands in Phase 6.