Files
ACORE/templates/pages/user-groups.html
T
lokses 69ae14f65e documents: права view/edit_all_documents для группы и сотрудника.
Чтобы на портале можно было выдать доступ ко всем документам так же, как к отчётам всех отделов.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-23 14:04:51 +03:00

146 lines
10 KiB
HTML

{% load i18n %}
<div class="page-content">
<div style="margin-bottom:1.5rem;">
<h1 style="font-size:1.25rem; font-weight:500; color:var(--color-foreground);">{% trans "Группы пользователей" %}</h1>
<p style="font-size:0.875rem; color:var(--color-muted-foreground); margin-top:0.25rem;">{% trans "Роли портала и сводная таблица доступа к разделам" %}</p>
</div>
{% if ug_message %}
<div style="margin-bottom:1rem; padding:0.65rem 0.9rem; border-radius:0.5rem; background:color-mix(in srgb, #16a34a 12%, var(--color-card)); border:1px solid color-mix(in srgb, #16a34a 30%, var(--color-border)); font-size:0.8125rem;">{{ ug_message }}</div>
{% endif %}
{% if ug_error %}
<div style="margin-bottom:1rem; padding:0.65rem 0.9rem; border-radius:0.5rem; background:color-mix(in srgb, #dc2626 12%, var(--color-card)); border:1px solid color-mix(in srgb, #dc2626 30%, var(--color-border)); font-size:0.8125rem;">{{ ug_error }}</div>
{% endif %}
<div style="background:var(--color-card); border-radius:0.75rem; border:1px solid var(--color-border); overflow:hidden;">
<table style="width:100%; border-collapse:collapse; font-size:0.8125rem;">
<thead>
<tr style="background:var(--color-muted);">
<th style="padding:0.625rem 1.25rem; text-align:left; font-size:0.7rem; text-transform:uppercase; color:var(--color-muted-foreground);">{% trans "Группа" %}</th>
<th style="padding:0.625rem 1rem; text-align:left; font-size:0.7rem; text-transform:uppercase; color:var(--color-muted-foreground);">{% trans "Описание" %}</th>
<th style="padding:0.625rem 1rem; text-align:left; font-size:0.7rem; text-transform:uppercase; color:var(--color-muted-foreground);">{% trans "Разделов" %}</th>
<th style="padding:0.625rem 1rem; text-align:left; font-size:0.7rem; text-transform:uppercase; color:var(--color-muted-foreground);">{% trans "Статус" %}</th>
<th style="padding:0.625rem 1rem;"></th>
</tr>
</thead>
<tbody>
{% for g in groups %}
<tr class="tr-hover" style="border-bottom:1px solid var(--color-border);">
<td style="padding:0.75rem 1.25rem; font-weight:500; color:var(--color-foreground);">{{ g.name }}</td>
<td style="padding:0.75rem 1rem; color:var(--color-muted-foreground);">{{ g.profile_description|default:"—" }}</td>
<td style="padding:0.75rem 1rem;">{{ g.access_count }}</td>
<td style="padding:0.75rem 1rem;">
{% if g.profile_active %}<span class="badge badge-success">{% trans "Активна" %}</span>
{% else %}<span class="badge badge-muted">{% trans "Выкл." %}</span>{% endif %}
</td>
<td style="padding:0.75rem 1rem; text-align:right;">
<a href="{% url 'user_group_access' g.id %}"
hx-get="{% url 'user_group_access' g.id %}"
hx-target="#main-content" hx-push-url="{% url 'user_group_access' g.id %}"
hx-indicator="#loader"
class="btn btn-secondary" style="font-size:0.75rem; text-decoration:none; border:1px solid var(--color-border);">
{% trans "Сводная таблица доступа" %}
</a>
</td>
</tr>
{% empty %}
<tr><td colspan="5" style="padding:2rem; text-align:center; color:var(--color-muted-foreground);">{% trans "Групп нет" %}</td></tr>
{% endfor %}
</tbody>
</table>
</div>
<div style="margin-top:1.5rem; background:var(--color-card); border-radius:0.75rem; border:1px solid var(--color-border); padding:1.25rem;">
<h2 style="font-size:0.9375rem; font-weight:500; margin:0 0 0.35rem;">{% trans "Отчёты всех отделов — отдельным сотрудникам" %}</h2>
<p style="font-size:0.8125rem; color:var(--color-muted-foreground); margin:0 0 1rem;">
{% trans "Не трогает группу: право только у выбранного человека. Он увидит опубликованные отчёты всех отделов." %}
</p>
<form method="post" action="{% url 'user_group_individual_reports_grant' %}"
style="display:flex; gap:0.5rem; flex-wrap:wrap; align-items:center; margin:0 0 1rem;">
{% csrf_token %}
<select name="employee_id" required class="input" style="min-width:18rem;">
<option value="">{% trans "Выберите сотрудника…" %}</option>
{% for emp in employee_choices %}
<option value="{{ emp.id }}">{{ emp.last_name }} {{ emp.first_name }} ({{ emp.username }})</option>
{% endfor %}
</select>
<button type="submit" class="btn btn-primary">{% trans "Выдать доступ" %}</button>
</form>
{% if individual_report_viewers %}
<table style="width:100%; border-collapse:collapse; font-size:0.8125rem;">
<thead>
<tr style="background:var(--color-muted);">
<th style="padding:0.5rem 0.75rem; text-align:left; font-size:0.7rem; text-transform:uppercase; color:var(--color-muted-foreground);">{% trans "Сотрудник" %}</th>
<th style="padding:0.5rem 0.75rem;"></th>
</tr>
</thead>
<tbody>
{% for emp in individual_report_viewers %}
<tr style="border-top:1px solid var(--color-border);">
<td style="padding:0.6rem 0.75rem;">{{ emp.last_name }} {{ emp.first_name }} <span style="color:var(--color-muted-foreground);">({{ emp.username }})</span></td>
<td style="padding:0.6rem 0.75rem; text-align:right;">
<form method="post" action="{% url 'user_group_individual_reports_revoke' emp.id %}" style="margin:0;">
{% csrf_token %}
<button type="submit" class="btn btn-secondary" style="font-size:0.75rem;">{% trans "Снять" %}</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p style="font-size:0.8125rem; color:var(--color-muted-foreground); margin:0;">{% trans "Пока никому персонально не выдано." %}</p>
{% endif %}
</div>
<div style="margin-top:1.5rem; background:var(--color-card); border-radius:0.75rem; border:1px solid var(--color-border); padding:1.25rem;">
<h2 style="font-size:0.9375rem; font-weight:500; margin:0 0 0.35rem;">{% trans "Все документы — отдельным сотрудникам" %}</h2>
<p style="font-size:0.8125rem; color:var(--color-muted-foreground); margin:0 0 1rem;">
{% trans "Не трогает группу: право только у выбранного человека. Можно выдать просмотр или полное редактирование всех документов." %}
</p>
<form method="post" action="{% url 'user_group_individual_documents_grant' %}"
style="display:flex; gap:0.5rem; flex-wrap:wrap; align-items:center; margin:0 0 1rem;">
{% csrf_token %}
<select name="employee_id" required class="input" style="min-width:18rem;">
<option value="">{% trans "Выберите сотрудника…" %}</option>
{% for emp in employee_choices %}
<option value="{{ emp.id }}">{{ emp.last_name }} {{ emp.first_name }} ({{ emp.username }})</option>
{% endfor %}
</select>
<select name="level" class="input" style="min-width:10rem;">
<option value="view">{% trans "Просмотр" %}</option>
<option value="edit">{% trans "Редактирование" %}</option>
</select>
<button type="submit" class="btn btn-primary">{% trans "Выдать доступ" %}</button>
</form>
{% if individual_document_grants %}
<table style="width:100%; border-collapse:collapse; font-size:0.8125rem;">
<thead>
<tr style="background:var(--color-muted);">
<th style="padding:0.5rem 0.75rem; text-align:left; font-size:0.7rem; text-transform:uppercase; color:var(--color-muted-foreground);">{% trans "Сотрудник" %}</th>
<th style="padding:0.5rem 0.75rem; text-align:left; font-size:0.7rem; text-transform:uppercase; color:var(--color-muted-foreground);">{% trans "Уровень" %}</th>
<th style="padding:0.5rem 0.75rem;"></th>
</tr>
</thead>
<tbody>
{% for row in individual_document_grants %}
<tr style="border-top:1px solid var(--color-border);">
<td style="padding:0.6rem 0.75rem;">{{ row.employee.last_name }} {{ row.employee.first_name }} <span style="color:var(--color-muted-foreground);">({{ row.employee.username }})</span></td>
<td style="padding:0.6rem 0.75rem;">{% if row.level == 'edit' %}{% trans "Редактирование" %}{% else %}{% trans "Просмотр" %}{% endif %}</td>
<td style="padding:0.6rem 0.75rem; text-align:right;">
<form method="post" action="{% url 'user_group_individual_documents_revoke' row.employee.id %}" style="margin:0;">
{% csrf_token %}
<button type="submit" class="btn btn-secondary" style="font-size:0.75rem;">{% trans "Снять" %}</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p style="font-size:0.8125rem; color:var(--color-muted-foreground); margin:0;">{% trans "Пока никому персонально не выдано." %}</p>
{% endif %}
</div>
</div>