Исправлена отображение полей адреса и стили формы заказа
## Основные изменения: ### 1. Исправлена логика выбора режима адреса - Переместил функцию initAddressModeToggle() из jQuery блока в отдельную функцию - Теперь инициализация адреса работает независимо от jQuery - Добавлены подробные логи в консоль для отладки ([ADDRESS MODE] префикс) ### 2. Добавлены CSS классы для управления видимостью - address-history-mode: display: none !important (по умолчанию скрыт) - address-new-mode: display: none !important (по умолчанию скрыт) - .visible класс переводит элементы на display: block !important - Использование classList.add/remove вместо inline styles ### 3. Исправлены стили полей формы (OrderForm) - Добавлена явная обработка для Select полей - получают form-select - Поле "Статус" и другие Select теперь имеют правильные стили Bootstrap - Разделена логика для RadioSelect, Select и остальных полей ### 4. Улучшена отладка - Добавлены console.log сообщения на каждом этапе инициализации - Префикс [ADDRESS MODE] помогает отличить логи системы адреса от других ## Технические детали: - Address сервис использует метод format_address_for_display() для красивого вывода - AJAX endpoint get_customer_address_history() загружает адреса клиента - Три режима адреса: history (из истории), new (новый адрес), empty (без адреса) - Режим empty выбирается по умолчанию 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -9,8 +9,9 @@ from decimal import Decimal
|
||||
import decimal
|
||||
from datetime import datetime, date, time
|
||||
|
||||
from ..models import Order, OrderItem
|
||||
from ..models import Order, OrderItem, Address
|
||||
from products.models import Product, ProductKit
|
||||
from .address_service import AddressService
|
||||
|
||||
|
||||
class DraftOrderService:
|
||||
@@ -87,7 +88,6 @@ class DraftOrderService:
|
||||
# ForeignKey поля требуют специальной обработки
|
||||
fk_fields = {
|
||||
'customer': 'customers.Customer',
|
||||
'delivery_address': 'customers.Address',
|
||||
'pickup_shop': 'shops.Shop',
|
||||
}
|
||||
|
||||
@@ -113,6 +113,31 @@ class DraftOrderService:
|
||||
except Model.DoesNotExist:
|
||||
pass # Игнорируем несуществующие объекты
|
||||
|
||||
# === Обработка адреса доставки ===
|
||||
# Новая логика с выбором режима адреса
|
||||
if 'address_mode' in data:
|
||||
address = AddressService.process_address_from_form(order, data)
|
||||
if address:
|
||||
# Если адрес не существует в БД, сохраняем его
|
||||
if not address.pk:
|
||||
address.save()
|
||||
order.delivery_address = address
|
||||
else:
|
||||
# Если режим "без адреса", удаляем существующий адрес
|
||||
if order.delivery_address:
|
||||
old_address = order.delivery_address
|
||||
order.delivery_address = None
|
||||
# Удаляем старый адрес если он больше не используется
|
||||
if old_address and not old_address.order:
|
||||
old_address.delete()
|
||||
elif 'delivery_address' in data and data['delivery_address']:
|
||||
# Старая логика для совместимости (если передается delivery_address напрямую)
|
||||
try:
|
||||
address = Address.objects.get(pk=data['delivery_address'])
|
||||
order.delivery_address = address
|
||||
except Address.DoesNotExist:
|
||||
pass
|
||||
|
||||
# Обрабатываем простые поля
|
||||
for field in simple_fields:
|
||||
if field in data:
|
||||
|
||||
Reference in New Issue
Block a user