69 Commits

Author SHA1 Message Date
47bf0cbcb9 Notify processing departments about subscriptions
All checks were successful
Deploy production / deploy (push) Successful in 13m7s
2026-11-03 10:06:17 +03:00
lizerk
18d170ffd2 Add subscription and project-aware procurement workflows 2026-10-25 15:35:46 +03:00
4f6244ab1f Fix CORP runtime errors and harden deployment and media access
Some checks failed
Deploy production / deploy (push) Failing after 2s
2026-09-10 16:40:08 +03:00
lizerk
dac0234007 Enforce repository-wide code quality 2026-09-07 19:43:48 +03:00
lizerk
d6706c518b Support multiple employee positions 2026-08-27 10:41:50 +03:00
lizerk
a0c87e5b26 Refactor procurement serializers and centralize equipment policy 2026-08-15 11:34:35 +03:00
lizerk
cca52d70d6 Refactor project structure and remove obsolete code 2026-08-15 11:16:50 +03:00
lizerk
aaa1da663c refactor: unify observability and realtime updates 2026-08-14 22:49:20 +03:00
lizerk
78f19e27af Remove obsolete files and simplify project structure 2026-08-14 16:35:21 +03:00
lizerk
f34f92cd7d feat: optimize boards and extend workflow media 2026-08-07 17:26:40 +03:00
lizerk
c0092437e1 improve procurement request workspace 2026-08-07 14:02:42 +03:00
lizerk
8fd5ae1054 feat: expand document procurement and request workflows 2026-08-04 20:19:12 +03:00
lizerk
1295d24c86 feat(finance): expand payroll period workflows 2026-08-04 16:40:23 +03:00
lizerk
716c8337de feat(finance): add native payroll management 2026-07-20 14:00:15 +03:00
lizerk
df2377431d feat: expand documents tasks and procurement workflows 2026-07-17 14:09:06 +03:00
lizerk
0dbd817c60 feat: refine procurement approval access and employee statuses 2026-07-06 10:43:52 +03:00
lizerk
0b45888f5c feat: improve documents and procurement workflows 2026-07-06 10:13:27 +03:00
lizerk
32500e3037 chore: checkpoint current project changes 2026-06-20 10:47:00 +03:00
lizerk
3f471424cd Improve notification labels and push avatars 2026-06-12 10:50:15 +03:00
lizerk
b16b74c060 Refine procurement notifications 2026-06-11 18:03:08 +03:00
lizerk
76799c453e Allow procurement executor reassignment 2026-06-09 12:43:48 +03:00
lizerk
4555ee9bf7 Fix procurement viewed state and item actions 2026-06-08 16:25:19 +03:00
lizerk
a794ff40c8 Support multiple expected delivery dates 2026-06-01 22:13:40 +03:00
lizerk
b1a5ac34ef procurement: fix department workflow UI bugs 2026-05-27 18:36:18 +03:00
lizerk
ddeef4653c procurement: refine request workflow and filters 2026-05-27 15:54:10 +03:00
lizerk
5b422fd34e procurement: use actual item price for approval totals 2026-05-26 17:43:28 +03:00
lizerk
4a05618ed7 procurement: route requests through processing department 2026-05-26 17:25:31 +03:00
lizerk
da986c0e29 procurement: refine fulfillment workflow 2026-05-26 17:02:30 +03:00
lizerk
b40f32e849 procurement: add workflow notifications 2026-05-22 16:53:04 +03:00
lizerk
88b0755e82 procurement: allow higher approver bypass 2026-05-22 14:42:06 +03:00
lizerk
fce272d352 procurement: add processing department workflow 2026-05-22 13:46:53 +03:00
lizerk
af423d8d0a feat(procurement): tighten approval flow and request actions 2026-04-13 02:55:26 +03:00
lizerk
ae7e1daf89 refactor(frontend): align profile, notifications and procurement flows 2026-04-12 18:02:47 +03:00
lizerk
e3ba6ea925 refactor(ui): stabilize equipment deep links and qr flow 2026-04-12 16:09:38 +03:00
lizerk
6ee32111db chore: configure vscode flake8 and commit lint cleanup 2026-03-31 19:17:56 +03:00
lizerk
2815efe069 chore: finalize backend lint cleanup 2026-03-31 17:53:29 +03:00
lizerk
3f59f8ebb9 Add backend OpenAPI docs and clean test suite 2026-03-31 17:05:31 +03:00
lizerk
2031872461 refactor(procurement): approval logic now fully driven by ApprovalRoute table (priority+min_amount), removed hardcoded steps, all workflow is DB-driven; tests and migrations updated 2026-03-30 02:16:29 +03:00
lizerk
a784212ea1 удалил лишнего из заявок и оборудования 2026-03-10 12:38:39 +03:00
lizerk
46e7059a40 refactor(procurement): удаление дублирующего WebSocket модуля
Проблема:
- procurement/notifications/websocket.py дублировал функциональность
- Прямые вызовы channel_layer.group_send() обходили универсальную систему
- Нарушение единообразия использования notifications

Решение:
- Удален websocket.py модуль
- WebSocket уведомления теперь отправляются через универсальную систему:
  notify.send() → channels.py → Celery → WebSocketNotificationSender

Преимущества:
- ✅ Единообразие архитектуры (как в requests_app)
- ✅ Все каналы (WebSocket, Email, Push) через одну систему
- ✅ Автоматический retry и rate limiting
- ✅ Централизованное логирование
- ✅ Меньше кода для поддержки

Изменения:
- Удален: notifications/websocket.py
- Обновлен: notifications/signals.py (удалены broadcast вызовы)
- Обновлен: notifications/__init__.py (удалены импорты websocket)
2026-03-10 12:37:49 +03:00
lizerk
16c5f2023a refactor(procurement): реструктуризация notifications в модульную архитектуру
- Создана папка backend/procurement/notifications/ вместо одного signals.py
- Разделена логика на специализированные модули:
  * config.py - типы уведомлений (verbs) и шаблоны сообщений
  * handlers.py - бизнес-логика отправки уведомлений
  * signals.py - только Django сигналы
  * websocket.py - WebSocket broadcast для real-time обновлений
  * __init__.py - публичный API модуля

Преимущества новой структуры:
- ✅ Четкое разделение ответственности (SRP)
- ✅ WebSocket логика отделена от уведомлений
- ✅ Все шаблоны сообщений в одном месте (MessageTemplates)
- ✅ Константы verbs централизованы (NotificationVerbs)
- ✅ Легче тестировать и расширять
- ✅ Обратная совместимость через __init__.py

Изменения:
- Удален: signals.py (сохранен как .old для истории)
- Добавлен: notifications/ модуль с 5 файлами
- Обновлен: apps.py (новый импорт сигналов)
2026-03-10 12:34:05 +03:00
lizerk
ed636081dc refactor: complete notifications v2 system with frontend translation
- Remove hard-coded Russian translations from backend API
- Backend now returns raw verb values (language-agnostic)
- Implement frontend translation functions for notification titles and categories
- Add category badge system with filters on notifications page
- Create translation utilities in frontend (verbTranslations.ts)
- Add notification settings page structure
- Update API endpoints to return simplified notification data
- Refactor notification signals across all apps
- Remove deprecated code and tests
- Add comprehensive documentation for v2 migration

Backend changes:
- notifications/api/views.py: Remove translation logic, simplify responses
- All notification_signals.py: Update to use consistent patterns
- Remove deprecated Telegram bot command
- Update Celery tasks for new notification structure

Frontend changes:
- app/notifications/page.tsx: Add translation functions and category badges
- hooks/useNotificationWebSocket.ts: New WebSocket hook for real-time updates
- lib/verbTranslations.ts: Centralized translation mappings
- components/NotificationCenter.tsx: Update to use new API format

This makes the notifications module fully reusable and project-independent.
2026-03-09 21:35:36 +03:00
lizerk
70f9c1950d fix: исправлены URL-ы в уведомлениях на существующие страницы фронтенда
- /requests/{id}/ → /requests
- /documents/{id}/ → /documents
- /calendar (вместо /?event_id={id})
- /procurement/orders/{id}/ → /procurement
- /messages (вместо /communications/chats/{id}/)
- / для постов ленты

Теперь клик по уведомлениям не вызывает 404 ошибки
2026-03-09 10:05:57 +03:00
3e672b2edc feat: добавлены правила для 5 приложений (requests, communications, calendar, procurement, feed)
- requests_app/rules.py: 8 предикатов + 10 правил
  * Предикаты: is_request_author, is_request_assignee, can_manage_requests и др.
  * Правила: view/change/delete/assign/approve requests, комментирование, статистика

- communications/rules.py: 9 предикатов + 15 правил
  * Предикаты: is_chat_member, is_chat_owner, is_chat_admin, is_message_author и др.
  * Правила: view/send/change/delete чаты и сообщения, управление участниками, закрепление
  * Включены примеры для WebSocket consumers

- calendar_app/rules.py: 9 предикатов + 12 правил
  * Предикаты: is_calendar_owner, is_personal_calendar, has_calendar_access и др.
  * Правила: view/change/delete календари и события, подписки, экспорт iCal, приглашения

- procurement/rules.py: 8 предикатов + 13 правил
  * Предикаты: is_procurement_manager, is_purchase_request_author, can_approve_purchases и др.
  * Правила: view/change/delete заявки на закупку, управление поставщиками и договорами

- feed/rules.py: 8 предикатов + 11 правил
  * Предикаты: is_post_author, can_publish_posts, can_moderate_posts и др.
  * Правила: view/create/change/delete посты, публикация, закрепление, комментирование, реакции

Во всех apps.py добавлен импорт rules для автозагрузки правил при старте Django
2026-02-28 00:13:46 +03:00
6a77f4fb13 - 2025-12-15 12:11:24 +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
978ed9a819 fix: aligned ProcurementItem permissions with ProcurementRequest logic
- Added comprehensive permission checks in perform_create()
- Created _check_item_edit_permission() helper method
- Updated perform_update() and perform_destroy() to use helper
- Permission logic now matches CanManageProcurementRequest:
  * Admins/Staff can edit items in DRAFT requests
  * Users with change_procurementrequest permission
  * Request author can edit their own requests
  * Department head can edit requests from their department
- Fixes 403 Forbidden error when creating/editing/deleting items
2025-12-10 17:02:40 +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