{% extends "rota/base.html" %} {% block title %}Week of {{ schedule.week_start }}{% endblock %} {% block content %} {% include "rota/_tabs.html" %}
{{ coverage }}%{{ filled }} / {{ total_slots }} positions filled
{{ unfilled|length }}unfilled
{{ issues|length }}rule violations
{{ locked_count }}locked shifts
{{ report.objective|default:"-" }}objective (lower is better)
{% csrf_token %}
{% if issues %}

Violations

{% endif %}

Click a shift to lock or unlock it (locked shifts survive a re-solve). Use edit to reassign.

{% for d in days %}{% endfor %} {% if unfilled %} {% for chips in unfilled_by_day %}{% endfor %} {% endif %} {% for row in rows %} {% for chips in row.cells %}{% endfor %} {% endfor %}
Employee{{ d|date:"D j" }}
Unfilled{% for chip in chips %}{% include "rota/_chip.html" with assigned=False %}{% endfor %}
{{ row.employee.name }} {{ row.hours|floatformat:"-1" }}h of {{ row.employee.min_hours|floatformat:"-1" }}-{{ row.employee.max_hours|floatformat:"-1" }}{% for chip in chips %}{% include "rota/_chip.html" with assigned=True %}{% endfor %}
{% if unfilled %}

Unfilled positions ({{ unfilled|length }})

{% for u in unfilled %} {% endfor %}
{{ u.chip.label }} {{ u.chip.time }} - {{ u.chip.skill }} @ {{ u.chip.location }} {{ u.explain }} candidates
{% endif %} {% endblock %}