Игорь Надеин eb70384928 � Мобильная оптимизация и новый тип заявления 'Отгул'
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
- Добавлен во все формы создания/редактирования
- Добавлен в фильтры списка
2025-12-29 10:00:32 +03:00

31 lines
982 B
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
}