$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 array> $statusGrid task_id => sw_id => status */ /** @var list<\App\Domain\Worker> $ownerChoices */ /** @var bool $taskStatusEnabled */ use App\Domain\SprintWeek; use App\Domain\TaskAssignment; use function App\Http\e; $tasks = $tasks ?? []; $taskGrid = $taskGrid ?? []; $statusGrid = $statusGrid ?? []; $ownerChoices = $ownerChoices ?? []; $taskStatusEnabled = $taskStatusEnabled ?? false; 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

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): ?> (edit)
$_label): ?>
 
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); $st = (string) ($statusGrid[$t->id][$sw->id] ?? TaskAssignment::STATUS_ZUGEWIESEN); // Phase 18: when the global flag is on, the status colour class // and data-* attributes live on the
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 ?> itself — no nested // wrapper. Keeps the cell's table-layout intact and the days // input renders exactly as it did pre-Phase-18. $tdExtraClass = $taskStatusEnabled ? ' assign-status-' . $st : ''; ?> data-assign-cell data-status="" data-sw-id="id ?>" data-sort-value-sw-id ?>=""> isAdmin): ?> isAdmin): ?>