Добавлена поддержка черновиков заказов (Этап 1/3)
Реализован базовый функционал для работы с черновиками заказов.
Это первый этап из трех для полной реализации автосохранения.
Изменения:
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>
This commit is contained in:
@@ -89,6 +89,7 @@ class Order(models.Model):
|
||||
|
||||
# Статус заказа
|
||||
STATUS_CHOICES = [
|
||||
('draft', 'Черновик'),
|
||||
('new', 'Новый'),
|
||||
('confirmed', 'Подтвержден'),
|
||||
('in_assembly', 'В сборке'),
|
||||
@@ -104,6 +105,14 @@ class Order(models.Model):
|
||||
verbose_name="Статус заказа"
|
||||
)
|
||||
|
||||
# Автосохранение (для черновиков)
|
||||
last_autosave_at = models.DateTimeField(
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name="Последнее автосохранение",
|
||||
help_text="Время последнего автоматического сохранения черновика"
|
||||
)
|
||||
|
||||
# Оплата
|
||||
PAYMENT_METHOD_CHOICES = [
|
||||
('cash_to_courier', 'Наличные курьеру'),
|
||||
@@ -299,6 +308,10 @@ class Order(models.Model):
|
||||
self.is_paid = False
|
||||
self.save()
|
||||
|
||||
def is_draft(self):
|
||||
"""Проверяет, является ли заказ черновиком"""
|
||||
return self.status == 'draft'
|
||||
|
||||
@property
|
||||
def amount_due(self):
|
||||
"""Остаток к оплате"""
|
||||
|
||||
Reference in New Issue
Block a user