Рефакторинг блока доставки: объединение с датой/временем, упрощение структуры адреса, вынос получателя, авто-выбор склада по умолчанию
This commit is contained in:
@@ -282,8 +282,23 @@ class OrderForm(forms.ModelForm):
|
||||
self.fields['recipient_from_history'].queryset = Recipient.objects.none()
|
||||
|
||||
# Инициализируем queryset для pickup_warehouse
|
||||
# Фильтруем только активные склады, доступные для самовывоза
|
||||
# Сортируем: сначала склад по умолчанию, потом по названию
|
||||
from inventory.models import Warehouse
|
||||
self.fields['pickup_warehouse'].queryset = Warehouse.objects.filter(is_active=True).order_by('name')
|
||||
self.fields['pickup_warehouse'].queryset = Warehouse.objects.filter(
|
||||
is_active=True,
|
||||
is_pickup_point=True
|
||||
).order_by('-is_default', 'name')
|
||||
|
||||
# Если это новый заказ и еще не выбран склад, выбираем склад по умолчанию
|
||||
if not self.instance.pk:
|
||||
default_warehouse = Warehouse.objects.filter(
|
||||
is_active=True,
|
||||
is_pickup_point=True,
|
||||
is_default=True
|
||||
).first()
|
||||
if default_warehouse:
|
||||
self.fields['pickup_warehouse'].initial = default_warehouse
|
||||
|
||||
# Инициализируем поля доставки из существующей Delivery
|
||||
if self.instance.pk and hasattr(self.instance, 'delivery'):
|
||||
@@ -294,6 +309,51 @@ class OrderForm(forms.ModelForm):
|
||||
self.fields['time_to'].initial = delivery.time_to
|
||||
self.fields['pickup_warehouse'].initial = delivery.pickup_warehouse
|
||||
self.fields['delivery_cost'].initial = delivery.cost
|
||||
|
||||
# Если выбран самовывоз, но склад не указан - выбираем склад по умолчанию
|
||||
if delivery.delivery_type == Delivery.DELIVERY_TYPE_PICKUP and not delivery.pickup_warehouse:
|
||||
default_warehouse = Warehouse.objects.filter(
|
||||
is_active=True,
|
||||
is_pickup_point=True,
|
||||
is_default=True
|
||||
).first()
|
||||
if default_warehouse:
|
||||
self.fields['pickup_warehouse'].initial = default_warehouse
|
||||
|
||||
# Инициализируем поля адреса, если есть адрес доставки
|
||||
if delivery.address:
|
||||
# Проверяем, есть ли этот адрес в истории клиента
|
||||
if self.instance.customer:
|
||||
customer_addresses = Address.objects.filter(
|
||||
deliveries__order__customer=self.instance.customer
|
||||
).distinct()
|
||||
if delivery.address in customer_addresses:
|
||||
# Адрес есть в истории - используем режим "история"
|
||||
self.fields['address_mode'].initial = 'history'
|
||||
self.fields['address_from_history'].queryset = customer_addresses
|
||||
self.fields['address_from_history'].initial = delivery.address.pk
|
||||
else:
|
||||
# Адреса нет в истории - используем режим "новый" и заполняем поля
|
||||
self.fields['address_mode'].initial = 'new'
|
||||
self.fields['address_street'].initial = delivery.address.street
|
||||
self.fields['address_building_number'].initial = delivery.address.building_number
|
||||
self.fields['address_apartment_number'].initial = delivery.address.apartment_number
|
||||
self.fields['address_entrance'].initial = delivery.address.entrance
|
||||
self.fields['address_floor'].initial = delivery.address.floor
|
||||
self.fields['address_intercom_code'].initial = delivery.address.intercom_code
|
||||
self.fields['address_delivery_instructions'].initial = delivery.address.delivery_instructions
|
||||
self.fields['address_confirm_with_recipient'].initial = delivery.address.confirm_address_with_recipient
|
||||
else:
|
||||
# Нет клиента - просто заполняем поля
|
||||
self.fields['address_mode'].initial = 'new'
|
||||
self.fields['address_street'].initial = delivery.address.street
|
||||
self.fields['address_building_number'].initial = delivery.address.building_number
|
||||
self.fields['address_apartment_number'].initial = delivery.address.apartment_number
|
||||
self.fields['address_entrance'].initial = delivery.address.entrance
|
||||
self.fields['address_floor'].initial = delivery.address.floor
|
||||
self.fields['address_intercom_code'].initial = delivery.address.intercom_code
|
||||
self.fields['address_delivery_instructions'].initial = delivery.address.delivery_instructions
|
||||
self.fields['address_confirm_with_recipient'].initial = delivery.address.confirm_address_with_recipient
|
||||
|
||||
def clean(self):
|
||||
"""Валидация формы заказа, включая обязательные поля доставки"""
|
||||
|
||||
Reference in New Issue
Block a user