Добавлено автоматическое создание черновика при создании заказа
При любом изменении формы создания заказа автоматически создается черновик и пользователь перенаправляется на страницу редактирования, где работает стандартное автосохранение. Изменения: - Добавлен AJAX endpoint create_draft_from_form в views.py - Создан JavaScript модуль draft-creator.js для автосоздания черновика - Обновлен order_form.html для подключения соответствующих скриптов - Добавлен URL маршрут /orders/create-draft/ Работает с задержкой 2 секунды после первого изменения формы. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -284,6 +284,104 @@ def autosave_draft_order(request, pk):
|
||||
}, status=500)
|
||||
|
||||
|
||||
@require_http_methods(["POST"])
|
||||
@login_required
|
||||
def create_draft_from_form(request):
|
||||
"""
|
||||
AJAX endpoint для создания черновика заказа из формы создания.
|
||||
|
||||
Используется для автоматического создания черновика при первом изменении формы.
|
||||
После создания возвращает ID черновика для перенаправления.
|
||||
|
||||
Пример запроса:
|
||||
{
|
||||
"customer": 1,
|
||||
"is_delivery": true,
|
||||
"delivery_date": "2024-01-15"
|
||||
}
|
||||
|
||||
Ответ при успехе:
|
||||
{
|
||||
"success": true,
|
||||
"order_id": 123,
|
||||
"order_number": "ORD-000123",
|
||||
"redirect_url": "/orders/123/edit/"
|
||||
}
|
||||
"""
|
||||
try:
|
||||
data = json.loads(request.body)
|
||||
|
||||
# Получаем обязательное поле - клиента
|
||||
customer_id = data.get('customer')
|
||||
if not customer_id:
|
||||
return JsonResponse({
|
||||
'success': False,
|
||||
'error': 'Необходимо выбрать клиента'
|
||||
}, status=400)
|
||||
|
||||
from customers.models import Customer
|
||||
try:
|
||||
customer = Customer.objects.get(pk=customer_id)
|
||||
except Customer.DoesNotExist:
|
||||
return JsonResponse({
|
||||
'success': False,
|
||||
'error': 'Клиент не найден'
|
||||
}, status=404)
|
||||
|
||||
# Создаем черновик через DraftOrderService
|
||||
order = DraftOrderService.create_draft(
|
||||
user=request.user,
|
||||
customer=customer,
|
||||
data=data
|
||||
)
|
||||
|
||||
# Обрабатываем позиции заказа, если они переданы
|
||||
if 'items' in data:
|
||||
for item_data in data['items']:
|
||||
product_id = item_data.get('product_id')
|
||||
product_kit_id = item_data.get('product_kit_id')
|
||||
quantity = item_data.get('quantity')
|
||||
price = item_data.get('price')
|
||||
|
||||
if product_id:
|
||||
DraftOrderService.add_item_to_draft(
|
||||
order_id=order.pk,
|
||||
product_id=product_id,
|
||||
quantity=quantity,
|
||||
price=price
|
||||
)
|
||||
elif product_kit_id:
|
||||
DraftOrderService.add_item_to_draft(
|
||||
order_id=order.pk,
|
||||
product_kit_id=product_kit_id,
|
||||
quantity=quantity,
|
||||
price=price
|
||||
)
|
||||
|
||||
return JsonResponse({
|
||||
'success': True,
|
||||
'order_id': order.pk,
|
||||
'order_number': order.order_number,
|
||||
'redirect_url': f'/orders/{order.pk}/edit/'
|
||||
})
|
||||
|
||||
except ValidationError as e:
|
||||
return JsonResponse({
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}, status=400)
|
||||
except json.JSONDecodeError:
|
||||
return JsonResponse({
|
||||
'success': False,
|
||||
'error': 'Некорректный JSON'
|
||||
}, status=400)
|
||||
except Exception as e:
|
||||
return JsonResponse({
|
||||
'success': False,
|
||||
'error': f'Ошибка сервера: {str(e)}'
|
||||
}, status=500)
|
||||
|
||||
|
||||
# === ВРЕМЕННЫЕ КОМПЛЕКТЫ ===
|
||||
|
||||
@require_http_methods(["POST"])
|
||||
|
||||
Reference in New Issue
Block a user