Рефакторинг моделей заказов и добавление методов оплаты
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from django import forms
|
||||
from django.forms import inlineformset_factory
|
||||
from .models import Order, OrderItem, Address, OrderStatus
|
||||
from .models import Order, OrderItem, Payment, Address, OrderStatus
|
||||
from customers.models import Customer
|
||||
from inventory.models import Warehouse
|
||||
from products.models import Product, ProductKit
|
||||
@@ -101,7 +101,6 @@ class OrderForm(forms.ModelForm):
|
||||
'recipient_name',
|
||||
'recipient_phone',
|
||||
'status',
|
||||
'payment_method',
|
||||
'discount_amount',
|
||||
'is_anonymous',
|
||||
'special_instructions',
|
||||
@@ -443,3 +442,53 @@ TemporaryKitItemFormSet = formset_factory(
|
||||
min_num=1, # Минимум 1 компонент в комплекте
|
||||
validate_min=True,
|
||||
)
|
||||
|
||||
|
||||
# === ПЛАТЕЖИ (СМЕШАННАЯ ОПЛАТА) ===
|
||||
|
||||
class PaymentForm(forms.ModelForm):
|
||||
"""
|
||||
Форма для создания платежа по заказу.
|
||||
Поддерживает смешанную оплату (несколько платежей на один заказ).
|
||||
"""
|
||||
class Meta:
|
||||
model = Payment
|
||||
fields = ['payment_method', 'amount', 'notes']
|
||||
widgets = {
|
||||
'payment_method': forms.Select(attrs={'class': 'form-select'}),
|
||||
'amount': forms.NumberInput(attrs={
|
||||
'class': 'form-control',
|
||||
'step': '0.01',
|
||||
'min': '0',
|
||||
'placeholder': 'Сумма платежа'
|
||||
}),
|
||||
'notes': forms.Textarea(attrs={
|
||||
'class': 'form-control',
|
||||
'rows': 2,
|
||||
'placeholder': 'Примечания к платежу (опционально)'
|
||||
}),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
# Фильтруем только активные способы оплаты
|
||||
from .models import PaymentMethod
|
||||
self.fields['payment_method'].queryset = PaymentMethod.objects.filter(
|
||||
is_active=True
|
||||
).order_by('order', 'name')
|
||||
|
||||
# Делаем notes опциональным
|
||||
self.fields['notes'].required = False
|
||||
|
||||
|
||||
# Formset для множественных платежей
|
||||
PaymentFormSet = inlineformset_factory(
|
||||
Order,
|
||||
Payment,
|
||||
form=PaymentForm,
|
||||
extra=0, # Без пустых форм (добавляем через JavaScript)
|
||||
can_delete=True,
|
||||
min_num=0, # Платежи не обязательны при создании черновика
|
||||
validate_min=False,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user