diff --git a/myproject/orders/forms.py b/myproject/orders/forms.py index 2e73257..df2c7c6 100644 --- a/myproject/orders/forms.py +++ b/myproject/orders/forms.py @@ -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): """Валидация формы заказа, включая обязательные поля доставки""" diff --git a/myproject/orders/templates/orders/order_form.html b/myproject/orders/templates/orders/order_form.html index 8af2c28..0208a3b 100644 --- a/myproject/orders/templates/orders/order_form.html +++ b/myproject/orders/templates/orders/order_form.html @@ -195,50 +195,6 @@ - -