Simplify order creation and editing - remove autosave
- Removed autosave.js (665 lines) and draft-creator.js (441 lines) - Removed draft_service.py (~500 lines) and DraftOrderService - Removed AJAX endpoints: autosave and create-draft - Updated order_create() to add is_create_page flag - Updated order_update() to finalize drafts without DraftOrderService - Added get_new_status() method to OrderStatusService - Updated order_form.html: - Removed old JS includes - Added beforeunload warning for unsaved data - Updated buttons: separate buttons for create/draft/finalize - Total code reduction: ~1600 lines (92% removed) New workflow: - /orders/create/ - user fills form, chooses button - /orders/<id>/edit/ - simple editing without autosave - beforeunload warning when leaving page (except on submit)
This commit is contained in:
@@ -831,12 +831,34 @@
|
||||
<!-- Кнопки -->
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<button type="submit" class="btn btn-primary btn-lg">
|
||||
<i class="bi bi-check-circle"></i> {{ button_text }}
|
||||
</button>
|
||||
<a href="{% url 'orders:order-list' %}" class="btn btn-secondary btn-lg">
|
||||
<i class="bi bi-x-circle"></i> Отмена
|
||||
</a>
|
||||
<div class="d-flex gap-2">
|
||||
{% if is_create_page %}
|
||||
<!-- На странице создания показываем обе кнопки -->
|
||||
<button type="submit" name="create_order" class="btn btn-primary btn-lg">
|
||||
<i class="bi bi-check-circle"></i> Создать заказ
|
||||
</button>
|
||||
<button type="submit" name="save_as_draft" class="btn btn-secondary btn-lg">
|
||||
<i class="bi bi-save"></i> Сохранить как черновик
|
||||
</button>
|
||||
{% elif is_draft %}
|
||||
<!-- Для черновиков показываем кнопку финализации и обычного сохранения -->
|
||||
<button type="submit" name="finalize_draft" class="btn btn-success btn-lg">
|
||||
<i class="bi bi-check-circle-fill"></i> Финализировать черновик
|
||||
</button>
|
||||
<button type="submit" class="btn btn-primary btn-lg">
|
||||
<i class="bi bi-save"></i> Сохранить изменения
|
||||
</button>
|
||||
{% else %}
|
||||
<!-- Для обычных заказов - только сохранение -->
|
||||
<button type="submit" class="btn btn-primary btn-lg">
|
||||
<i class="bi bi-save"></i> {{ button_text }}
|
||||
</button>
|
||||
{% endif %}
|
||||
|
||||
<a href="{% url 'orders:order-list' %}" class="btn btn-outline-secondary btn-lg">
|
||||
<i class="bi bi-x-circle"></i> Отмена
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -1000,7 +1022,7 @@ function initCustomerSelect2() {
|
||||
console.log('Значение восстановлено:', $customerSelect.val());
|
||||
}
|
||||
|
||||
// Уведомляем draft-creator.js что Select2 готов и есть предзаполненное значение
|
||||
// Select2 готов и есть предзаполненное значение
|
||||
if (currentValue && window.DraftCreator) {
|
||||
console.log('7. Уведомляем DraftCreator о предзаполненном клиенте');
|
||||
setTimeout(function() {
|
||||
@@ -1065,12 +1087,12 @@ function initCustomerSelect2() {
|
||||
if (data.is_create_option || data.id === '__create_new__') {
|
||||
console.log('11. Открываем модальное окно для создания клиента');
|
||||
this.value = '';
|
||||
// Триггерим нативное change событие для draft-creator.js
|
||||
// Триггерим нативное change событие
|
||||
const changeEvent = new Event('change', { bubbles: true });
|
||||
this.dispatchEvent(changeEvent);
|
||||
window.openCreateCustomerModal(data.search_text);
|
||||
} else {
|
||||
// Триггерим нативное change событие для других обработчиков (например, draft-creator.js)
|
||||
// Триггерим нативное change событие для других обработчиков
|
||||
console.log('12. Триггерим нативное change событие для customer ID:', data.id);
|
||||
const changeEvent = new Event('change', { bubbles: true });
|
||||
this.dispatchEvent(changeEvent);
|
||||
@@ -2181,12 +2203,37 @@ if (!document.getElementById('notification-styles')) {
|
||||
})();
|
||||
</script>
|
||||
|
||||
<!-- Скрипты автосохранения и создания черновиков -->
|
||||
{% if order %}
|
||||
<!-- Автосохранение при редактировании заказа -->
|
||||
<script src="{% static 'orders/js/autosave.js' %}"></script>
|
||||
{% else %}
|
||||
<!-- Автосоздание черновика при создании нового заказа -->
|
||||
<script src="{% static 'orders/js/draft-creator.js' %}"></script>
|
||||
{% endif %}
|
||||
<!-- Предупреждение о несохраненных данных -->
|
||||
<script>
|
||||
/**
|
||||
* Предупреждение при попытке покинуть страницу с несохраненными данными
|
||||
*/
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
let isSubmitting = false;
|
||||
|
||||
// При отправке формы - отключаем предупреждение
|
||||
const form = document.getElementById('order-form');
|
||||
if (form) {
|
||||
form.addEventListener('submit', function() {
|
||||
isSubmitting = true;
|
||||
});
|
||||
}
|
||||
|
||||
// Показываем предупреждение при закрытии/переходе
|
||||
window.addEventListener('beforeunload', function(e) {
|
||||
if (isSubmitting) {
|
||||
return; // Не показываем предупреждение если форма отправляется
|
||||
}
|
||||
|
||||
{% if is_create_page or is_draft %}
|
||||
// Только для создания заказа и редактирования черновика
|
||||
e.preventDefault();
|
||||
e.returnValue = 'Несохраненные данные будут потеряны. Вы уверены?';
|
||||
return e.returnValue;
|
||||
{% endif %}
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user