fix: Исправлена работа черновиков заказов и добавлено автосохранение статуса
Проблема 1: Ошибка 500 при создании черновика заказа - Поле status в модели Order является ForeignKey на OrderStatus - В коде использовались строковые значения 'draft' и 'new' вместо объектов - Это приводило к TypeError при создании/обновлении заказов Решение: - В DraftOrderService.create_draft: добавлен get_or_create для статуса 'draft' - В DraftOrderService.finalize_draft: добавлен get_or_create для статуса 'new' - В DraftOrderService.get_user_drafts: заменен фильтр status='draft' на status__code='draft' - В DraftOrderService.delete_old_drafts: заменен фильтр status='draft' на status__code='draft' - В cleanup_draft_orders.py: исправлен фильтр в режиме dry-run Проблема 2: Отсутствие автосохранения при изменении статуса - Поле status не отслеживалось в autosave.js - При смене статуса заказ не сохранялся автоматически Решение: - Добавлено поле 'select[name="status"]' в список отслеживаемых полей - Добавлен сбор значения статуса в функции collectFormData - Добавлено 'status': 'orders.OrderStatus' в fk_fields для обработки на сервере Дополнительно: - Добавлено автосохранение полей адреса доставки (улица, дом, квартира и т.д.) - Добавлено автосохранение полей получателя (имя, телефон) - Добавлена автоматическая установка address_mode='new' при наличии адреса Файлы: - orders/services/draft_service.py - orders/management/commands/cleanup_draft_orders.py - orders/static/orders/js/autosave.js 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -39,9 +39,21 @@ class DraftOrderService:
|
||||
data = data or {}
|
||||
|
||||
with transaction.atomic():
|
||||
# Получаем или создаем статус 'draft'
|
||||
from ..models import OrderStatus
|
||||
draft_status, _ = OrderStatus.objects.get_or_create(
|
||||
code='draft',
|
||||
defaults={
|
||||
'name': 'Черновик',
|
||||
'label': 'Черновик',
|
||||
'is_system': True,
|
||||
'color': '#808080',
|
||||
}
|
||||
)
|
||||
|
||||
order = Order.objects.create(
|
||||
customer=customer,
|
||||
status='draft',
|
||||
status=draft_status,
|
||||
modified_by=user,
|
||||
is_delivery=data.get('is_delivery', True),
|
||||
delivery_address=data.get('delivery_address'),
|
||||
@@ -86,6 +98,7 @@ class DraftOrderService:
|
||||
fk_fields = {
|
||||
'customer': 'customers.Customer',
|
||||
'pickup_shop': 'shops.Shop',
|
||||
'status': 'orders.OrderStatus',
|
||||
}
|
||||
|
||||
simple_fields = [
|
||||
@@ -308,8 +321,20 @@ class DraftOrderService:
|
||||
# Выполняем полную валидацию модели
|
||||
order.full_clean()
|
||||
|
||||
# Получаем или создаем статус 'new'
|
||||
from ..models import OrderStatus
|
||||
new_status, _ = OrderStatus.objects.get_or_create(
|
||||
code='new',
|
||||
defaults={
|
||||
'name': 'Новый',
|
||||
'label': 'Новый',
|
||||
'is_system': True,
|
||||
'color': '#0d6efd',
|
||||
}
|
||||
)
|
||||
|
||||
# Изменяем статус на 'new'
|
||||
order.status = 'new'
|
||||
order.status = new_status
|
||||
order.modified_by = user
|
||||
order.last_autosave_at = None # Очищаем, т.к. заказ больше не черновик
|
||||
order.save()
|
||||
@@ -335,7 +360,7 @@ class DraftOrderService:
|
||||
QuerySet: Черновики заказов
|
||||
"""
|
||||
drafts = Order.objects.filter(
|
||||
status='draft',
|
||||
status__code='draft',
|
||||
modified_by=user
|
||||
).select_related('customer', 'delivery_address', 'pickup_shop')
|
||||
|
||||
@@ -361,7 +386,7 @@ class DraftOrderService:
|
||||
|
||||
# Находим старые черновики
|
||||
old_drafts = Order.objects.filter(
|
||||
status='draft',
|
||||
status__code='draft',
|
||||
last_autosave_at__lt=cutoff_date
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user