— intentionally does NOT extend * views/layout.php. We drop the nav chrome, Arbeitstage matrix, and * capacity summary; the task-list toolbar + table get the entire * viewport. Reuses the compiled /assets/css/app.css + the jQuery * and jQuery UI CDN tags from layout.php, and /assets/js/sprint-planner.js * picks up the data-beamer="1" flag on the root to namespace its * localStorage keys and flip on vertical-header rotation when the table * overflows. * * @var \App\Domain\Sprint $sprint * @var \App\Domain\User $currentUser * @var string $csrfToken * @var list<\App\Domain\SprintWeek> $weeks * @var list<\App\Domain\SprintWorker> $sprintWorkers * @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\TaskAssignment; use function App\Http\e; $tasks = $tasks ?? []; $taskGrid = $taskGrid ?? []; $statusGrid = $statusGrid ?? []; $ownerChoices = $ownerChoices ?? []; $sprintWorkers = $sprintWorkers ?? []; $taskStatusEnabled = $taskStatusEnabled ?? false; if (!function_exists('fmt_days')) { function fmt_days(float $x): string { if (abs($x - round($x)) < 1e-9) { return (string) (int) round($x); } return number_format($x, 1); } } ?> <?= e($title ?? ($sprint->name . ' — present')) ?>

name) ?>

startDate) ?> – endDate) ?> isArchived): ?> · archived

No weeks yet. Open settings to add some. No workers on this sprint yet. Open settings to add some.

Tasks

isAdmin): ?>
id] ?? []; $tot = array_sum($assign); ?> id] ?? 0.0); $st = (string) ($statusGrid[$t->id][$sw->id] ?? TaskAssignment::STATUS_ZUGEWIESEN); ?>
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): ?>