20 Commits

Author SHA1 Message Date
lizerk
e3ba6ea925 refactor(ui): stabilize equipment deep links and qr flow 2026-04-12 16:09:38 +03:00
070dbc267e style: unify table styles in equipment_detail
- Replaced Bootstrap table with proc-table-header/proc-request-item
- Now maintenance history and transfer logs match request items style
- Added responsive behavior with d-lg-none labels
- Better visual consistency across procurement module
2025-12-15 10:12:42 +03:00
c7bc99398f refactor: switch equipment_detail from CSR to SSR
- Updated equipment_detail view to load data from DB (SSR)
- Added select_related and prefetch_related for optimization
- Implemented can_manage permission check in view
- Removed loadEquipmentDetail() JavaScript API call
- Added breadcrumb navigation
- Kept action handlers (maintenance, transfer, write-off)
- Added department loading for transfer modal
- Now consistent with request_detail SSR approach
2025-12-15 09:54:31 +03:00
04e46d98d4 - 2025-12-15 09:49:41 +03:00
aeab6a1127 fix: display total_cost instead of estimated_cost in request list
- Changed from estimated_cost (single field) to total_cost (calculated sum)
- Now correctly shows sum of all items in the request
2025-12-10 17:08:09 +03:00
2e92c4d7a0 fix: исправлена загрузка отделов и обработка пагинированного ответа
- API departments возвращает объект с пагинацией {results: [...]}, а не массив
- Добавлена универсальная обработка как массива, так и объекта с results
- Добавлены проверки существования DOM элементов перед обращением
- Исправлена ошибка при редактировании заявки
2025-12-10 16:53:09 +03:00
be9d02bc43 fix: улучшена обработка ошибок загрузки отделов
- Добавлено детальное логирование всех этапов загрузки
- Добавлена проверка существования элемента select
- Улучшена обработка ошибок с понятными сообщениями
- Добавлены alert'ы для уведомления пользователя об ошибках
2025-12-10 16:51:23 +03:00
065a8851a1 feat: реализована полная функциональность создания и редактирования заявок
- Добавлены модальные окна для всех действий на странице деталей
  * Добавление позиции (#addItemModal)
  * Одобрение заявки (#approveModal)
  * Отклонение заявки (#rejectModal)
- Реализованы JavaScript обработчики для всех кнопок
  * deleteItem() - удаление позиции
  * saveItemBtn - сохранение новой позиции
  * confirmApproveBtn - одобрение с комментарием
  * confirmRejectBtn - отклонение с обязательным комментарием
- Исправлены API endpoints (items вместо request-items)
- Доработана форма создания/редактирования заявки
  * Удалены несуществующие поля (desired_date, estimated_cost)
  * Добавлен выбор отдела из API
  * Реализована AJAX отправка формы
  * Поддержка создания черновика и отправки на согласование
  * Поддержка редактирования существующих заявок (PATCH)
- Добавлен URL и view для редактирования заявок
- Кнопка "Редактировать" теперь ведёт на страницу редактирования
2025-12-10 16:46:47 +03:00
b787df45f6 refactor: синхронизированы статусные бейджи во всех шаблонах закупок
- Обновлены иконки статусов в dashboard.html и request_list.html
- Все статусы теперь используют одинаковые иконки и стили
- Добавлены функции getStatusBadgeHTML() для динамического рендеринга
- Исправлена синтаксическая ошибка в loadRequests()
- Статусы: draft, pending, approved, rejected, in_progress, completed, cancelled
2025-12-10 16:37:14 +03:00
427f5ed22f feat(procurement): frontend templates + API-based rendering; update models, serializers, views and tests 2025-12-10 14:09:49 +03:00
ccbc8c5452 feat(procurement): полный жизненный цикл заявок
Добавлены endpoints:
- start_work: APPROVED → IN_PROGRESS
- complete: IN_PROGRESS → COMPLETED
- cancel: отмена заявки с любого статуса кроме завершённых
- create_equipment: создание оборудования из позиции завершённой заявки

Frontend:
- Модальные окна approve/reject/cancel
- POST handler для создания заявок
- Django формы для заявок

Тесты: 19 новых тестов lifecycle, всего 136 тестов procurement passed
2025-12-09 16:46:21 +03:00
8b8974e3ef feat: refactor equipment API permissions
- Add DeptPerm.MANAGE_EQUIPMENT scoped permission constant
- Create migration 0035 for new DepartmentPermission
- Refactor CanManageEquipment permission class with:
  * Admin/staff/superuser → full access
  * Model permissions → full access (add/change/delete_equipment)
  * Department head → own department, can choose responsible
  * Scoped permission → own department, responsible forced to head
  * Regular members → no access
- Update EquipmentListSerializer with:
  * Permission level detection (full/dept_head/scoped/None)
  * Auto-fill department and responsible based on permission level
  * Validation that responsible is in same department
- Add create_options endpoint returning:
  * allowed_departments, can_choose_department, can_choose_responsible
  * default_responsible, permission_level
- Add bulk equipment creation support with auto-generated inventory numbers
- Implement 45 comprehensive permission tests (all passing)
- Fix is_active=True in test make_user() fixture

Tests: 45/45 passing ✅
2025-12-09 16:14:30 +03:00
3d1a415bee fix: исправление загрузки категорий в модале управления
- Исправлена обработка ответа API (поддержка как массива, так и объекта с results)
- API возвращает объект с пагинацией, а не просто массив
- Теперь корректно извлекается массив категорий из data.results
- Исправлена ошибка 'categories.forEach is not a function'
2025-12-09 13:26:36 +03:00
4a7dbf7ce2 feat: добавление UI для управления категориями оборудования
- Добавлена кнопка 'Управление категориями' на странице оборудования
- Создан модал с двумя секциями: добавление и список категорий
- Форма создания категории: название, иконка Bootstrap Icons, описание
- Список существующих категорий с возможностью удаления
- JavaScript функции для работы с API категорий
- Автоматическое обновление списка после создания/удаления
- Защита от удаления категорий с привязанным оборудованием
- Доступно только для staff пользователей (can_manage)
2025-12-09 13:24:55 +03:00
272b02377f feat: добавление позиций при создании заявки и исправление списка отделов
- Добавлен список departments в контекст request_list view
- Реализовано динамическое добавление позиций (items) прямо в модале создания заявки
- Кнопка 'Добавить позицию' для добавления товаров/услуг
- Каждая позиция содержит: название, описание, количество, ед.изм., цену
- Позиции можно удалять кнопкой X
- JavaScript собирает все позиции и отправляет в API вместе с заявкой
- Поддержка как создания с позициями, так и без них
- Реализовано на обеих страницах: dashboard и request_list
- Все 72 теста проходят успешно
2025-12-09 13:21:14 +03:00
41eda0e7ac fix: исправление создания заявок - добавлено обязательное поле department
- Сделано поле 'items' необязательным в ProcurementRequestCreateSerializer
- Добавлено поле 'department' в форму создания заявки (dashboard и request_list)
- Обновлен JavaScript для передачи department в API
- Добавлен список departments в контекст dashboard view
- Теперь можно создать заявку без позиций (items), добавить их потом
- Все 72 теста проходят успешно
2025-12-09 13:11:28 +03:00
c94de51c31 feat: добавление управления оборудованием через UI
- Добавлена кнопка 'Добавить оборудование' на странице списка
- Создан модал для добавления нового оборудования
- Создан модал для редактирования существующего оборудования
- Добавлена кнопка редактирования в dropdown меню каждой карточки
- Реализованы JavaScript обработчики для создания/редактирования через API
- Добавлен импорт User в views_frontend.py для передачи списка пользователей
- Все поля модели Equipment доступны для редактирования (включая статус, отдел)
2025-12-09 13:04:56 +03:00
805d536a47 fix: улучшение кнопки создания заявки и исправление модала
- Изменен текст кнопки на 'Создать заявку' на всех страницах
- Добавлен параметр create_as_card=True на странице списка заявок
- Перемещен модал внутрь блока content в dashboard.html (исправление ошибки Bootstrap)
2025-12-09 12:59:09 +03:00
64af0d273e fix: improve procurement request creation UX
- Change dashboard create button to use modal instead of URL redirect
- Add create_as_card and create_modal parameters to page_header
- Replace form POST submission with AJAX API calls
- Add proper form validation and error handling
- Redirect to request detail page after successful creation
- Remove unused create_url from dashboard context
2025-12-09 12:45:47 +03:00
53a8f0e6b4 feat: add procurement frontend templates and styles
Stage 6 - Frontend Implementation:
- Add procurement.css with iOS-style components
- Add dashboard, request_list, request_detail, request_form templates
- Add equipment_list, equipment_detail templates
- Add status badges and filters partials
- Add JS handlers for dashboard, requests and equipment
- Add procurement link to sidebar navigation
- Configure separate URL namespaces (procurement for API, procurement_frontend for views)

All 66 tests passing.
2025-12-09 12:03:58 +03:00