{{ sprint.startDate }} – {{ sprint.endDate }} · Reserve {{ (sprint.reserveFraction * 100)|number_format(0) }}% {% if sprint.isArchived %} · archived {% endif %}
| {% for w in weeks %} |
KW{{ w.isoWeek }}
{{ w.startDate }}
|
{% endfor %}
Σ | RTB |
|---|---|---|---|
| Arbeitstage {% if currentUser.isAdmin %} (edit) {% endif %} | {% set sumMax = 0 %} {% for w in weeks %} {% set sumMax = sumMax + w.maxWorkingDays %}
{% for bit, label in dayLabels %}
{% endfor %}
|
{% endfor %}
{{ fmt_days(sumMax) }} | |
| {% if currentUser.isAdmin %} ≡ {% endif %} {{ sw.workerName }} | {% for w in weeks %} {% set v = rowDays[w.id]|default(0.0) %}{% if currentUser.isAdmin %} {% else %} {{ fmt_days(v) }} {% endif %} | {% endfor %}{{ fmt_days(rowSum) }} | {% if currentUser.isAdmin %} {% else %} {{ fmt_rtb(sw.rtb) }} {% endif %} |
| {% for sw in sprintWorkers %} | {{ sw.workerName }} | {% endfor %}
|---|---|
| Ressourcen | {% for sw in sprintWorkers %} {% set c = capacity[sw.id]|default(null) %}{{ fmt_days(c.ressourcen|default(0.0)) }} | {% endfor %}
| − Reserven | {% for sw in sprintWorkers %} {% set c = capacity[sw.id]|default(null) %}{{ fmt_days(c.after_reserves|default(0.0)) }} | {% endfor %}
| Available | {% for sw in sprintWorkers %} {% set c = capacity[sw.id]|default(null) %} {% set av = c.available|default(0.0) %}{{ fmt_days(av) }} | {% endfor %}
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.
{% include "sprints/_task_list.twig" %} {% endif %}