Рефакторинг моделей заказов и добавление методов оплаты

This commit is contained in:
2025-11-26 13:38:02 +03:00
parent 08e8409a66
commit 0653ec0545
20 changed files with 1720 additions and 873 deletions

View File

@@ -8,7 +8,7 @@ from django.contrib.auth.decorators import login_required
from django.core.exceptions import ValidationError
from django.db import models
from .models import Order, OrderItem, Address, OrderStatus
from .forms import OrderForm, OrderItemFormSet, OrderStatusForm
from .forms import OrderForm, OrderItemFormSet, OrderStatusForm, PaymentFormSet
from .filters import OrderFilter
from .services import DraftOrderService
from .services.address_service import AddressService
@@ -65,8 +65,9 @@ def order_create(request):
if request.method == 'POST':
form = OrderForm(request.POST)
formset = OrderItemFormSet(request.POST)
payment_formset = PaymentFormSet(request.POST)
if form.is_valid() and formset.is_valid():
if form.is_valid() and formset.is_valid() and payment_formset.is_valid():
order = form.save(commit=False)
# Обрабатываем адрес доставки
@@ -90,6 +91,10 @@ def order_create(request):
formset.instance = order
formset.save()
# Сохраняем платежи
payment_formset.instance = order
payment_formset.save()
# Пересчитываем итоговую сумму
order.calculate_total()
order.save()
@@ -104,10 +109,12 @@ def order_create(request):
else:
form = OrderForm()
formset = OrderItemFormSet()
payment_formset = PaymentFormSet()
context = {
'form': form,
'formset': formset,
'payment_formset': payment_formset,
'title': 'Создание заказа',
'button_text': 'Создать заказ',
}
@@ -122,8 +129,9 @@ def order_update(request, pk):
if request.method == 'POST':
form = OrderForm(request.POST, instance=order)
formset = OrderItemFormSet(request.POST, instance=order)
payment_formset = PaymentFormSet(request.POST, instance=order)
if form.is_valid() and formset.is_valid():
if form.is_valid() and formset.is_valid() and payment_formset.is_valid():
order = form.save(commit=False)
# Если черновик финализируется
@@ -136,6 +144,7 @@ def order_update(request, pk):
messages.error(request, f'Ошибка финализации: {str(e)}')
form = OrderForm(instance=order)
formset = OrderItemFormSet(instance=order)
payment_formset = PaymentFormSet(instance=order)
else:
# Обрабатываем адрес доставки
if order.is_delivery:
@@ -166,6 +175,9 @@ def order_update(request, pk):
order.save()
formset.save()
# Сохраняем платежи
payment_formset.save()
# Пересчитываем итоговую сумму
order.calculate_total()
order.save()
@@ -180,10 +192,12 @@ def order_update(request, pk):
else:
form = OrderForm(instance=order)
formset = OrderItemFormSet(instance=order)
payment_formset = PaymentFormSet(instance=order)
context = {
'form': form,
'formset': formset,
'payment_formset': payment_formset,
'order': order,
'title': f'Редактирование {"черновика" if order.is_draft() else "заказа"} #{order.order_number}',
'button_text': 'Сохранить изменения',