Files
ACORE/templates/pages/dashboard_widgets/upcoming.html
T
lokses df137e1074 dashboard: виджеты «Ближайшие события», «Мои HR-заявки», «Мои IT-заявки»
Три новых виджета к кастомизируемому дашборду:
- upcoming — праздники, отпуска, ДР, смены и встречи на 2 недели вперёд;
  переиспользует сборщики календаря (с их логикой видимости) через новый
  calendar_service.upcoming_events()
- my_hr_requests — статусы моих кадровых заявок (отпуск/больничный/отгул)
- my_tickets — мои открытые обращения в IT-поддержку

Все три — в реестре DASHBOARD_WIDGETS, доступны в настройке дашборда и
наборах по умолчанию. Тесты: реестр, контекст HR-заявок, рендер виджетов.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-21 18:53:06 +03:00

25 lines
2.2 KiB
HTML

{% load i18n %}
<div class="dashboard-widget" data-widget="upcoming" style="background: var(--color-card); border-radius: 0.75rem; border: 1px solid var(--color-border); box-shadow: 0 1px 2px rgb(0 0 0 / 0.05);">
<div style="padding: 1.25rem 1.5rem; border-bottom: 1px solid var(--color-border);">
<h3 style="font-weight: 600; color: var(--color-card-foreground); font-size: 0.9375rem;">{% trans "Ближайшие события" %}</h3>
<p style="font-size: 0.8125rem; color: var(--color-muted-foreground); margin-top: 0.125rem;">{% trans "Праздники, отпуска, дни рождения и смены — на 2 недели вперёд" %}</p>
</div>
<div>
{% for event in upcoming_events %}
<div style="display: flex; align-items: center; gap: 0.875rem; padding: 0.75rem 1.5rem; {% if not forloop.last %}border-bottom: 1px solid var(--color-border);{% endif %}">
<div style="width: 3rem; flex-shrink: 0; text-align: center;">
<div style="font-size: 1.125rem; font-weight: 700; color: var(--color-foreground); line-height: 1;">{{ event.date|date:"d" }}</div>
<div style="font-size: 0.6875rem; color: var(--color-muted-foreground); text-transform: uppercase;">{{ event.date|date:"M" }}</div>
</div>
<span style="width: 0.5rem; height: 0.5rem; border-radius: 50%; background: {{ event.dot }}; flex-shrink: 0;"></span>
<div style="flex: 1; min-width: 0; font-size: 0.875rem; color: var(--color-card-foreground); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">{{ event.label }}</div>
</div>
{% empty %}
<div style="padding: 1.5rem; text-align: center; color: var(--color-muted-foreground); font-size: 0.8125rem;">{% trans "Ближайших событий нет" %}</div>
{% endfor %}
</div>
<div style="padding: 0.875rem 1.5rem; border-top: 1px solid var(--color-border);">
<a href="/calendar/" hx-get="/calendar/" hx-target="#main-content" hx-push-url="/calendar/" hx-indicator="#loader" style="font-size: 0.8125rem; color: var(--color-primary); text-decoration: none; font-weight: 500;">{% trans "Календарь" %} →</a>
</div>
</div>