diff --git a/myproject/orders/services/address_service.py b/myproject/orders/services/address_service.py index b9e6c5d..53e3855 100644 --- a/myproject/orders/services/address_service.py +++ b/myproject/orders/services/address_service.py @@ -74,11 +74,23 @@ class AddressService: street = form_data.get('address_street', '').strip() building_number = form_data.get('address_building_number', '').strip() - if not street or not building_number: - # Если обязательные поля не заполнены, возвращаем None + # Для автосохранения разрешаем сохранять адрес даже если не все поля заполнены + # Проверяем только что хотя бы одно поле адреса заполнено + has_any_address_data = any([ + street, + building_number, + form_data.get('address_apartment_number', '').strip(), + form_data.get('address_entrance', '').strip(), + form_data.get('address_floor', '').strip(), + form_data.get('address_intercom_code', '').strip(), + form_data.get('address_delivery_instructions', '').strip(), + ]) + + if not has_any_address_data: + # Если все поля адреса пустые, возвращаем None return None - # Создаем новый адрес + # Создаем новый адрес (даже если не все обязательные поля заполнены) address = AddressService.create_address_from_form_data(form_data) return address diff --git a/myproject/orders/static/orders/js/autosave.js b/myproject/orders/static/orders/js/autosave.js index 033195a..8e589fc 100644 --- a/myproject/orders/static/orders/js/autosave.js +++ b/myproject/orders/static/orders/js/autosave.js @@ -371,40 +371,37 @@ // Поля адреса доставки (новая логика с прямым вводом) const addressStreetField = form.querySelector('input[name="address_street"]'); - if (addressStreetField && addressStreetField.value) { - data.address_street = addressStreetField.value; - // Указываем режим "новый адрес" если есть улица - data.address_mode = 'new'; - } - const addressBuildingField = form.querySelector('input[name="address_building_number"]'); - if (addressBuildingField && addressBuildingField.value) { - data.address_building_number = addressBuildingField.value; - } - const addressApartmentField = form.querySelector('input[name="address_apartment_number"]'); - if (addressApartmentField && addressApartmentField.value) { - data.address_apartment_number = addressApartmentField.value; - } - const addressEntranceField = form.querySelector('input[name="address_entrance"]'); - if (addressEntranceField && addressEntranceField.value) { - data.address_entrance = addressEntranceField.value; - } - const addressFloorField = form.querySelector('input[name="address_floor"]'); - if (addressFloorField && addressFloorField.value) { - data.address_floor = addressFloorField.value; - } - const addressIntercomField = form.querySelector('input[name="address_intercom_code"]'); - if (addressIntercomField && addressIntercomField.value) { - data.address_intercom_code = addressIntercomField.value; - } - const addressInstructionsField = form.querySelector('textarea[name="address_delivery_instructions"]'); - if (addressInstructionsField && addressInstructionsField.value) { - data.address_delivery_instructions = addressInstructionsField.value; + + // Собираем все поля адреса + const addressFields = { + address_street: addressStreetField?.value || '', + address_building_number: addressBuildingField?.value || '', + address_apartment_number: addressApartmentField?.value || '', + address_entrance: addressEntranceField?.value || '', + address_floor: addressFloorField?.value || '', + address_intercom_code: addressIntercomField?.value || '', + address_delivery_instructions: addressInstructionsField?.value || '', + }; + + // Проверяем, заполнено ли хотя бы одно поле адреса + const hasAnyAddressData = Object.values(addressFields).some(value => value.trim() !== ''); + + if (hasAnyAddressData) { + // Указываем режим "новый адрес" если заполнено хотя бы одно поле + data.address_mode = 'new'; + + // Добавляем все непустые поля в данные + Object.entries(addressFields).forEach(([key, value]) => { + if (value.trim() !== '') { + data[key] = value; + } + }); } const addressConfirmField = form.querySelector('input[name="address_confirm_with_recipient"]');