MOBILE FIXES: - request-list.css: переделан мобильный layout с flexbox вместо grid - page-header.css: оптимизирован padding/margin для мобильных экранов - requestListHandler.js: * Добавлен AbortController с таймаутом (10/15 сек для мобильных) * Обработка offline/online событий сети * Информативные сообщения об ошибках (отсутствие интернета, таймаут) * Адаптивный Intersection Observer (rootMargin 200px для мобильных) * Лучшая обработка network failures UI/UX: - Скрыт счётчик на экранах < 480px - Контент теперь отображается на всех разрешениях - Исчезновение спиннера при ошибке сети - Визуальное различие между ошибками загрузки NEW FEATURE: - Добавлен новый тип заявления 'Отгул' (day_off) - Обновлена миграция 0009_alter_request_type - Добавлен во все формы создания/редактирования - Добавлен в фильтры списка
31 lines
982 B
Python
31 lines
982 B
Python
from __future__ import annotations
|
||
from django.db.models import TextChoices
|
||
|
||
|
||
class RequestType(TextChoices):
|
||
"""Перечень типов заявлений (значение хранится в БД)."""
|
||
|
||
VACATION = "vacation", "Отпуск"
|
||
SICK_LEAVE = "sick_leave", "Больничный"
|
||
DAY_OFF = "day_off", "Отгул"
|
||
TRANSFER = "transfer", "Перевод"
|
||
DISMISSAL = "dismissal", "Увольнение"
|
||
OTHER = "other", "Другое"
|
||
|
||
|
||
class RequestStatus(TextChoices):
|
||
"""Статусы жизненного цикла заявления (значение хранится в БД)."""
|
||
|
||
DRAFT = "draft", "Черновик"
|
||
PENDING = "pending", "На рассмотрении"
|
||
APPROVED = "approved", "Одобрено"
|
||
REJECTED = "rejected", "Отклонено"
|
||
CANCELLED = "cancelled", "Отменено"
|
||
|
||
|
||
FINAL_STATUS = {
|
||
RequestStatus.APPROVED,
|
||
RequestStatus.REJECTED,
|
||
RequestStatus.CANCELLED,
|
||
}
|