$weeks */ /** @var list<\App\Domain\SprintWorker> $sprintWorkers */ /** @var array> $grid sw_id => week_id => days */ /** @var array $capacity */ /** @var list<\App\Domain\Task> $tasks */ /** @var array> $taskGrid task_id => sw_id => days */ /** @var list<\App\Domain\Worker> $ownerChoices */ use function App\Http\e; $tasks = $tasks ?? []; $taskGrid = $taskGrid ?? []; $ownerChoices = $ownerChoices ?? []; 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.

Tasks

isAdmin): ?>
id] ?? []; $tot = array_sum($assign); ?> id] ?? 0.0); ?>
Task Owner Prio Tot workerName) ?>
No tasks yet. isAdmin): ?> Click + Add task to start.
isAdmin): ?> isAdmin): ?> title) ?> isAdmin): ?> id === $t->ownerWorkerId) { $ownerName = $ow->name; break; } } echo e($ownerName); ?> isAdmin): ?> priority ?> id ?>=""> isAdmin): ?> isAdmin): ?>