{# Рабочий период по ЛЮДЯМ — ведомость: точка состояния и имя · ход дня · начало · конец · работа · перерывы. Это «registro de jornada» одной строкой на человека — то, что просит закон и что руководитель хочет видеть, не открывая машину (владелец, 04.09). Две машины одного человека — одна строка: начало по самой ранней, конец по самой поздней, дорожки слиты. С 06.09 карточка забрала ось суток себе, а вечером того же дня стала ведомостью (направление «Один вопрос» + журнал): линия 2px над шапкой колонок и над «итого», линейка часов прямо в шапке над колонкой хода дня, цифры моноширинные по разрядам. Итог дня — в строке «Итого» внизу; крупно его же говорит заголовок над ведомостью, третьего места не нужно. Режимы по размеру (пороги 2 / 15 / 16 машин): у одиночки под ведомостью три числа недели и машина с точкой состояния (блока «Машины» у такой компании нет); у парка строки свёрнуты в группы с плотностью по часам, разворот группы — её люди. Вид «люди / группы» подсказывает сервер (data-view-hint), свой выбор человека сильнее и помнится (overview.html). Геометрия — общая с дорожками: строка это сетка [имя | дорожка | числа], ширины держат --tl-lab и --tl-sum, поэтому линейка часов и полоса «сейчас» встают на свои места тем же расчётом. #} {% set j = card.data %} {% set zs = '&tlzoom=' ~ j.zoom if j.zoom %} {% set dayq = '' if j.is_today else j.day %}
{{ tr(card.title) }} ← {% if j.next %}→ {% else %}→{% endif %} {# Окна оси кнопками (владелец, 19.08): «день» — сброс, дальше окна, прижатые к «сейчас»/концу активности. Лупа отдельно — «по размеру активности», у неё нет своей ширины. #} {{ tr('день') }} {{ tr('6 ч') }} {{ tr('1 ч') }} {{ tr('15 мин') }} {% if j.zoom == 'fit' %}{% else %}{% endif %} {% if j.work_human %}{{ j.work_human }}{% endif %}
{# день без единого блока — не таблица прочерков, а одна строка (правило «пустое не показывать»); сегодняшний такой день целиком берёт на себя заголовок, сюда доходит только прошлое #} {% if j.rows and j.active %} {% if j.groups %} {# ----- вид «группы»: дорожка группы — сколько человек работало в каждый час, пять ступеней одного тона; разворот — строки людей. Линейка полного дня: плотность считается по часам суток и окна оси не знает. ----- #} {% endif %} {# ----- вид «люди»: строка на человека ----- #}
{# Подписи колонок — капсом: это ровно тот случай, где разрядка отличает шапку от значений (правило 3 чистки). Над дорожкой — линейка часов. #}
{{ tr('Сотрудник') }} {{ tr('Начало') }} {{ tr('Конец') }} {{ tr('Работа') }} {{ tr('Перерывы') }}
{% for r in j.rows %}{% include "_jrn_row.html" %}{% endfor %} {# Полоса «сейчас» через все дорожки с бегущими секундами (владелец, 19.08). Позицию и часы ведёт клиент, сервер даёт стартовую точку. #} {% if j.play %} {% endif %}
{{ tr('Итого') }} · {{ tr('{n} чел.').format(n=j.people) }} {% with legend_note = (tr('штриховка — работа идёт прямо сейчас') if j.is_today) %} {% include "_legend.html" %} {% endwith %} {{ j.work_human }} {{ j.break_human }}
{# Подписи под ведомостью — одной тихой строкой, а не столбиком абзацев (владелец, 08.09): переключение вида и напоминание о незакреплённых. #}
{% if j.groups %} {# Переключение вида — с фразой, почему так (владелец, 06.09): «по группам, потому что машин 47». Свой выбор человека помнит браузер. #}

{% endif %} {% if j.unassigned %}

{{ tr('Строки без сотрудника — это машины, которые ещё никому не закреплены.') }} {{ tr('Закрепить →') }}

{% endif %}
{% else %}

{{ tr('Сегодня ещё никто не начал.') if j.is_today else tr('В этот день активности не было.') }}

{% endif %} {% if j.facts %} {# Одиночка: три числа недели вместо блоков «Машины» и «Неделя» — машина и есть человек, её состояние стоит рядом с именем. #}
{{ tr('Эта неделя') }}
{{ j.facts.week_human }}
{{ tr('В среднем в день') }}
{{ j.facts.avg_human }}
{{ tr('Машина') if j.facts.machines|length == 1 else tr('Машины') }}
{% for m in j.facts.machines %}{{ m.name }}{% endfor %}
{% endif %}