Исправлена персистентность типа доставки при автосохранении
Проблема: После переключения между "С доставкой" и "Самовывоз" и автосохранения, при перезагрузке страницы всегда отображался "Самовывоз", независимо от фактически сохраненного значения.
Изменения:
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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user