Создан TenantOnboardingService как единый источник истины для:
- Активации заявки на регистрацию тенанта
- Создания Client, Domain, Subscription
- Инициализации системных данных (Customer, статусы, способы оплаты, склад, витрина)
Новые сервисы:
- TenantOnboardingService (tenants/services/onboarding.py)
- WarehouseService (inventory/services/warehouse_service.py)
- ShowcaseService (inventory/services/showcase_service.py)
- PaymentMethodService (orders/services/payment_method_service.py)
Рефакторинг:
- admin.py: 220 строк → 5 строк (делегирование сервису)
- init_tenant_data.py: 259 строк → 68 строк
- activate_registration.py: использует сервис
- Тесты обновлены для вызова сервиса напрямую
При создании тенанта автоматически создаются склад и витрина по умолчанию.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Removed autosave.js (665 lines) and draft-creator.js (441 lines)
- Removed draft_service.py (~500 lines) and DraftOrderService
- Removed AJAX endpoints: autosave and create-draft
- Updated order_create() to add is_create_page flag
- Updated order_update() to finalize drafts without DraftOrderService
- Added get_new_status() method to OrderStatusService
- Updated order_form.html:
- Removed old JS includes
- Added beforeunload warning for unsaved data
- Updated buttons: separate buttons for create/draft/finalize
- Total code reduction: ~1600 lines (92% removed)
New workflow:
- /orders/create/ - user fills form, chooses button
- /orders/<id>/edit/ - simple editing without autosave
- beforeunload warning when leaving page (except on submit)
Реализован базовый функционал для работы с черновиками заказов.
Это первый этап из трех для полной реализации автосохранения.
Изменения:
1. Модель Order (orders/models.py):
- Добавлен статус 'draft' в STATUS_CHOICES
- Добавлено поле last_autosave_at для отслеживания автосохранения
- Добавлен метод is_draft() для проверки статуса черновика
2. Миграция (0005_add_draft_support.py):
- Добавление поля last_autosave_at в Order
- Добавление статуса 'draft' в choices
3. Service Layer (orders/services/draft_service.py):
- Класс DraftOrderService с методами:
* create_draft() - создание нового черновика
* update_draft() - обновление существующего черновика
* add_item_to_draft() - добавление товара в черновик
* remove_item_from_draft() - удаление товара из черновика
* finalize_draft() - завершение черновика (draft → new)
* get_user_drafts() - получение черновиков пользователя
* delete_old_drafts() - очистка старых черновиков
- Вся бизнес-логика инкапсулирована в сервисный слой
Архитектурные решения:
- Использование service layer pattern для изоляции бизнес-логики
- Транзакционность всех операций с черновиками
- Автоматический пересчет итоговой суммы при изменении товаров
- Связь временных комплектов с черновиками через FK
Следующие этапы (в следующих коммитах):
- Этап 2: AJAX endpoints и модификация views
- Этап 3: JavaScript автосохранение и UI
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>