{% extends "base.html" %} {% block title %}{{ tr('Настройки') }} — Puntavia{% endblock %} {% block nav_set %}on{% endblock %} {% block head %} {# ряды формы и сетка карточек — общие: _settings_rows.html + .cardcols из base #} {% include "_settings_rows.html" %} {% endblock %} {% block crumb %}/{{ tr('Настройки') }}{% endblock %} {% block content %}
{% with tab = 'settings' %}{% include "_tabs_team.html" %}{% endwith %} {# Настройки самого сервиса (ключи, модель, почта, хранение) переехали в /system (владелец, 20.08): это параметры сервера, а не компании, и место им за системной дверью. Staff отсюда туда лишь провожается ссылкой. #} {% if is_staff %} {% endif %}
{% if saved %}
{{ tr('Сохранено. Машины подхватят параметры сбора при следующей связи — обычно в течение минуты.') }}
{% endif %}
{{ tr('Компания') }}
{# сырой ключ нужен раз в никогда — прячем за складкой, код выше покрывает установку целиком #}
{{ tr('Сырой ключ и его смена…') }}
{% from "_ava.html" import avapick with context %} {{ avapick(org.name, org.avatar, 'org_avatar') }}
{# два языка постоянно путались: письма — компании, кабинет — личный. Пишем прямо здесь, что кабинет следует за этим же языком, пока человек не выбрал себе другой (владелец, 04.09: «выбран русский, интерфейс английский»). #} {{ tr('На нём же говорит кабинет — у всех, кто не выбрал себе другой язык глобусом в шапке. У вас сейчас — {name}.').format(name=lang_names[lang]) }}
{{ tr('Приватность') }}
{# Наблюдение за рисками (Тир 1). Осознанный режим: подсвечивает подозрительное поведение из УЖЕ собранного (тайминг, программы, заголовки). Клавиши и буфер обмена не перехватываются — этого в продукте нет. #}
{{ tr('Наблюдение за рисками') }}
{# Нормы компании (Тир 1.5): что руководитель объявил нормой кнопкой «это норма» на карточке рисков. Снимаются здесь; кнопки — вне формы (fetch), чтобы не отправлять всю форму настроек ради одной строки. #} {% if oc['risk_norms'] %}
    {% for n in oc['risk_norms'] %}
  • {{ n.who }} — {{ tr(risk_norm_labels.get(n.kind, n.kind)) }}
  • {% endfor %}
{% endif %}
{{ tr('Сбор на машинах') }}

{{ tr('Эти параметры уезжают на все машины при следующей связи и перезаписывают локальные.') }}

{# Скриншоты выключены у новой компании намеренно (см. PLAN.md): в ЕС непрерывные снимки экрана считают несоразмерной мерой. Включение — осознанный шаг, поэтому со спросом. #}
{{ tr('Тонкая настройка съёмки…') }}
{{ tr('ИИ-разбор') }}
{# был во вкладке «Сервис», но это настройка КОМПАНИИ (ORG_KEYS): блок — единица разбора и отчётов, разрыв между блоками решает она #}
{{ tr('Отчёты на почту') }}
{% if not mail_ready %}
{{ tr('Почта на сервере не настроена: письма пока складываются в журнал.') }} {{ tr('Настройка smtp_url — в админке /system.') if is_staff else tr('Скажите нам — включим.') }}
{% endif %}
{# Оповещения — отдельно от отчётов: отчёт приходит по расписанию, а оповещение — когда что-то ПОШЛО НЕ ТАК. Пока одно (молчащая машина), карточка растёт по мере надобности. #}
{{ tr('Оповещения') }}

{{ tr('Письмо, когда что-то пошло не так — на тот же адрес, что и отчёты.') }}

{# Подписка — только у владельца (право billing). Своих экранов оплаты у нас нет намеренно: карта, счета и отмена живут в кабинете Stripe, там же, где платили. Карточка показывает состояние и уводит туда одной кнопкой. #} {% if can('billing') and (pay_card or has_sub) %}
{{ tr('Подписка') }} {{ tr('Тариф «{name}»').format(name=plan_info.id|upper) }}

{% if plan[0] == 'active' %}{{ tr('Оплачено: €{eur} в месяц, до {n} человек. Счета приходят на почту от Stripe.').format(eur=plan_info.eur, n=plan_info.seats) }} {% elif plan[0] == 'trial' %}{{ tr('Демо: осталось {n} дн. Карта нужна, только чтобы продолжить.').format(n=plan[1]) }} {% else %}{{ tr('Демо кончилось. Оплата включает разбор и скриншоты обратно, вместе со всей историей.') }}{% endif %}

{# Вся страница — одна форма настроек, а форму в форму вкладывать нельзя: браузер выбрасывает внутреннюю и кнопка отправляет НАСТРОЙКИ. Поэтому кнопки привязаны атрибутом form= к пустым формам внизу страницы — тот же приём, что у «Удалить компанию». #}
{% if has_sub %} {% endif %} {% if pay_card and plan[0] != 'active' %} {% endif %}
{% endif %} {# Права на свои данные — не «раздел для юристов», а карточки в общем ряду. Стоят в самом низу и только у владельца: удаление отменить нельзя. #} {% if can('delete_org') %}
{{ tr('Ваши данные') }}

{{ tr('Всё, что о вашей компании хранится на сервере, можно забрать одним файлом или удалить насовсем.') }}

{{ tr('Скачать архив') }}
{# Та же форма карточки, что у всех: раньше стояла отдельной формой под сеткой и растягивалась во весь экран. Вкладывать форму в форму нельзя, поэтому поле и кнопка привязаны к пустой форме #delOrg внизу страницы атрибутом form= — сохранение настроек их не отправляет. #}
{{ tr('Удалить компанию') }}

{{ tr('Сразу и без корзины: записи, настройки и все скриншоты. Машины перестанут приниматься, доступ закроется у всех. Чтобы подтвердить, впишите название компании — «вы уверены?» нажимают не глядя, а название переписывают осознанно.') }}

{% if deleted == 'mismatch' %}
{{ tr('Название не совпало — ничего не удалено.') }}
{% endif %}
{% endif %}
{{ tr('К сводке') }}
{% if can('delete_org') %} {# Пустые формы для кнопок подписки: см. комментарий у карточки «Подписка» #}
{% endif %}
{% endblock %} {% block scripts %} {% endblock %}