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:
2025-11-28 23:29:19 +03:00
parent f911a57640
commit 9a44c98e6e
8 changed files with 110 additions and 1946 deletions

View File

@@ -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 %}