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

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

@@ -62,7 +62,6 @@ class DraftOrderService:
delivery_time_start=data.get('delivery_time_start'),
delivery_time_end=data.get('delivery_time_end'),
delivery_cost=data.get('delivery_cost', Decimal('0')),
payment_method=data.get('payment_method', 'cash_to_courier'),
customer_is_recipient=data.get('customer_is_recipient', True),
recipient_name=data.get('recipient_name'),
recipient_phone=data.get('recipient_phone'),
@@ -103,7 +102,7 @@ class DraftOrderService:
simple_fields = [
'is_delivery', 'delivery_date', 'delivery_time_start', 'delivery_time_end',
'delivery_cost', 'payment_method', 'customer_is_recipient',
'delivery_cost', 'customer_is_recipient',
'recipient_name', 'recipient_phone', 'is_anonymous',
'special_instructions', 'discount_amount'
]
@@ -304,6 +303,71 @@ class DraftOrderService:
is_custom_price=is_custom_price
)
# Обрабатываем удаление платежей
if 'deleted_payment_ids' in data:
deleted_payment_ids = data['deleted_payment_ids']
if deleted_payment_ids:
from ..models import Payment
Payment.objects.filter(id__in=deleted_payment_ids, order=order).delete()
# Обрабатываем платежи (payments)
if 'payments' in data:
from ..models import Payment, PaymentMethod
payments_data = data['payments']
# Обрабатываем каждый платеж
for payment_data in payments_data:
payment_id = payment_data.get('id') # ID существующего платежа (если есть)
payment_method_id = payment_data.get('payment_method_id')
amount_raw = payment_data.get('amount', '')
notes = payment_data.get('notes', '')
# Пропускаем пустые платежи
if not payment_method_id or not amount_raw:
continue
# Конвертируем сумму в Decimal
try:
amount = Decimal(str(amount_raw))
if amount <= 0:
continue
except (ValueError, TypeError, decimal.InvalidOperation):
continue
# Получаем способ оплаты
try:
payment_method = PaymentMethod.objects.get(pk=payment_method_id)
except PaymentMethod.DoesNotExist:
continue
# Обновляем существующий платеж или создаём новый
if payment_id:
# Обновляем существующий платеж
try:
payment = Payment.objects.get(id=payment_id, order=order)
payment.payment_method = payment_method
payment.amount = amount
payment.notes = notes
payment.save()
except Payment.DoesNotExist:
# Если платеж не найден, создаём новый
Payment.objects.create(
order=order,
payment_method=payment_method,
amount=amount,
notes=notes,
created_by=user
)
else:
# Создаём новый платеж
Payment.objects.create(
order=order,
payment_method=payment_method,
amount=amount,
notes=notes,
created_by=user
)
order.modified_by = user
order.last_autosave_at = timezone.now()
order.save()