Исправлена персистентность типа доставки при автосохранении

Проблема: После переключения между "С доставкой" и "Самовывоз" и автосохранения, при перезагрузке страницы всегда отображался "Самовывоз", независимо от фактически сохраненного значения.

Изменения:

1. **orders/templates/orders/order_form.html**:
   - Переписана инициализация управления типом доставки
   - Код вынесен из jQuery document.ready в отдельный DOMContentLoaded обработчик
   - Разделена логика синхронизации:
     * syncDeliveryTypeFromRadio() - для обработки кликов пользователя
     * syncUIFromCheckbox() - для инициализации UI из значения чекбокса
   - Исправлен рендеринг скрытого чекбокса is_delivery с явным атрибутом checked
   - Удалена лишняя закрывающая скобка, вызывавшая JS ошибку
   - Удален дублирующийся обработчик select2:opening для выбора клиента

2. **orders/services/draft_service.py**:
   - Добавлена явная конвертация boolean полей (is_delivery, customer_is_recipient, is_anonymous)
   - Обработка различных типов данных (bool, string, None) в единый boolean
   - Добавлено логирование для отладки is_delivery (временно)

Результат: Тип доставки теперь корректно сохраняется через автосохранение и восстанавливается при перезагрузке страницы.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-11 16:59:24 +03:00
parent 885ac839e2
commit 8cc8cd1339
3 changed files with 70 additions and 14 deletions

View File

@@ -143,8 +143,27 @@ class DraftOrderService:
if field in data:
value = data[field]
# Конвертируем boolean поля
if field in ['is_delivery', 'customer_is_recipient', 'is_anonymous']:
# Явно конвертируем в bool, обрабатывая различные типы данных
original_value = value
if isinstance(value, bool):
value = value
elif isinstance(value, str):
value = value.lower() in ('true', '1', 'yes', 'on')
elif value is None:
value = False
else:
value = bool(value)
# Логируем для отладки
if field == 'is_delivery':
import logging
logger = logging.getLogger(__name__)
logger.info(f"[AUTOSAVE] is_delivery: original={original_value} (type={type(original_value)}), converted={value}")
# Конвертируем числовые поля в Decimal
if field in ['delivery_cost', 'discount_amount']:
elif field in ['delivery_cost', 'discount_amount']:
if value == '' or value is None:
value = None
else: