{# Тело дашборда. Отдаётся и целой страницей, и куском при живом обновлении — поэтому здесь не должно быть ничего, что настраивается один раз при загрузке (обработчиков, замеров, состояния прокрутки). Настройка набора карточек живёт в overview.html, ВНЕ живой зоны: иначе обновление сносило бы её на полуслове. #} {% set mach = (cards | selectattr('id', 'equalto', 'machines') | list | first) %} {% if not devices %} {# Первый экран новой компании: сценарий запуска вместо строки прочерков. Прочерки отвечали на вопрос «сколько наработано», который у пустой компании не стоит; стоит вопрос «что мне сделать, чтобы заработало». #} {# По центру и самодостаточно (владелец, 19.08): сборки скачиваются прямо отсюда, код подключения копируется здесь же — на лендинг не уводим. #}

{{ tr('Сводка') }}

{{ tr('Кабинет готов — осталось подключить первую машину.') }}

{# без шапки-заголовка: над карточкой уже стоят «Сводка» и подзаголовок, третий заголовок подряд был шумом (владелец: «скучено, лишнее убрать») #}
  1. {{ tr('Скачайте программу под систему сотрудника:') }} {% for b in builds %} {% if b.ready %} {{ b.sys }} · {{ b.note }} {% else %} {{ b.sys }} · {{ b.note }} — {{ tr('скоро') }} {% endif %} {% endfor %}
  2. {% if connect_code %} {{ tr('Когда программа спросит подключение — вставьте этот код:') }} {# обработчик инлайном: этот кусок живёт в живой зоне, и навешанные скриптом слушатели пропадали бы при каждой подмене разметки #} {% else %} {{ tr('При установке агент спросит адрес этого сервера и ключ регистрации — ключ лежит в') }} {{ tr('настройках') }} {% endif %}
  3. {# живое ожидание вместо обещания: экран и правда опрашивает сервер сам (data-live), и как только машина выйдет на связь — онбординг уступит место карточкам. Пульс отвечает на «а он вообще ждёт?» #}
  4. {{ tr('Ждём подключения') }}
    {{ tr('Как только машина выйдет на связь, экран обновится сам — обычно это меньше минуты. К вечеру придёт первый разбор дня.') }}
{% else %} {# Заголовок «Сводка» и «на связи N из M» живут в крошке шапки (решение владельца, 15.08): контент начинается сразу с цифр. #} {% if mach and 'totals' not in chosen and 'headline' not in chosen and 'board' not in chosen %}
{{ tr('суммарно сегодня') }} {{ mach.data.o.total_human }}
{% endif %} {# Порядок карточек — тот, что выбрал человек. Узкие идут сеткой, широкая «Машины» разрывает её и занимает всю ширину: у неё внутри собственная сетка плиток, и вкладывать одну в другую незачем. Полосы считает сервер (server._overview_ctx), чтобы шаблон не занимался раскладкой. #} {# Счётчики и «Требуют внимания» — одной полосой (владелец, 08.09: две полосы в левом углу широкого экрана «не красиво»): цифры слева, чипы тревог справа, на узком экране тревоги переносятся под цифры. #} {% set ns = namespace(skip=false) %} {% for group in groups %} {% if ns.skip %} {% set ns.skip = false %} {% elif group.wide and group.wide.id == 'totals' and loop.nextitem and loop.nextitem.wide and loop.nextitem.wide.id == 'alerts' %}
{% with card = group.wide %}{% include "_card_totals.html" %}{% endwith %} {% with card = loop.nextitem.wide %}{% include "_card_alerts.html" %}{% endwith %}
{% set ns.skip = true %} {% elif group.narrow %}
{% for card in group.narrow %}{% include "_card_" ~ card.id ~ ".html" %}{% endfor %}
{% else %} {% with card = group.wide %}{% include "_card_" ~ card.id ~ ".html" %}{% endwith %} {% endif %} {% endfor %} {# Всё остальное — по ссылкам (направление «Один вопрос», 06.09): блока машин на главной по умолчанию нет, одна строка говорит, сколько их на связи, и ведёт в раздел. У одиночки машина стоит под ведомостью, в тихий день о машинах рассказывает заголовок — там строка лишняя. #} {% if 'machines' not in chosen %}

{% if live_n == dev_n %}{{ tr('Машины: все на связи') }}{% else %}{{ tr('Машины: на связи {a} из {b}').format(a=live_n, b=dev_n) }}{% endif %} — {{ tr('раздел «Машины» →') }}

{% endif %} {% endif %}