fix: Загружать сохранённые значения корректировки цены при редактировании

При редактировании комплекта поля корректировки цены остаются пустыми,
хотя в БД сохранены корректные значения (price_adjustment_type и value).

Исправлено:
1. Добавлен вызов validateSingleAdjustment() после заполнения полей
   - Это отключает остальные поля и помечает валидные
   - Реализует логику одного заполненного поля

2. Добавлено логирование в консоль браузера для отладки:
   - Показывает какие значения загружены из БД
   - Помогает выявить проблемы

Теперь при редактировании:
- Если есть сохранённая корректировка, она отображается
- Остальные поля автоматически отключаются
- Пересчитывается финальная цена

Файл: products/templates/products/productkit_edit.html
This commit is contained in:
2025-11-02 19:52:42 +03:00
parent 045f6a45da
commit 3c62cce057
3 changed files with 38 additions and 26 deletions

View File

@@ -49,40 +49,37 @@
</dd>
{% endif %}
<dt class="col-sm-4">Цена:</dt>
<dt class="col-sm-4">Базовая цена:</dt>
<dd class="col-sm-8">
<strong>{{ kit.base_price|floatformat:2 }} руб.</strong>
<small class="text-muted d-block">(сумма компонентов)</small>
</dd>
<dt class="col-sm-4">Итоговая цена:</dt>
<dd class="col-sm-8">
{% if kit.sale_price %}
<span class="text-decoration-line-through text-muted">{{ kit.calculated_price|floatformat:2 }} руб.</span>
<span class="text-decoration-line-through text-muted">{{ kit.price|floatformat:2 }} руб.</span>
<br>
<strong class="text-danger fs-5">{{ kit.sale_price|floatformat:2 }} руб.</strong>
<span class="badge bg-danger ms-2">Акция</span>
{% else %}
<strong class="text-success fs-5">{{ kit.actual_price|floatformat:2 }} руб.</strong>
<strong class="text-success fs-5">{{ kit.price|floatformat:2 }} руб.</strong>
{% endif %}
</dd>
<dt class="col-sm-4">Себестоимость:</dt>
{% if kit.price_adjustment_type != 'none' and kit.price_adjustment_value > 0 %}
<dt class="col-sm-4">Корректировка цены:</dt>
<dd class="col-sm-8">
<strong class="text-danger fs-5">{{ kit.calculate_cost|floatformat:2 }} руб.</strong>
{% if kit.price_adjustment_type == 'increase_percent' %}
<span class="badge bg-success">Увеличить на {{ kit.price_adjustment_value }}%</span>
{% elif kit.price_adjustment_type == 'increase_amount' %}
<span class="badge bg-success">Увеличить на {{ kit.price_adjustment_value }} руб.</span>
{% elif kit.price_adjustment_type == 'decrease_percent' %}
<span class="badge bg-warning">Уменьшить на {{ kit.price_adjustment_value }}%</span>
{% elif kit.price_adjustment_type == 'decrease_amount' %}
<span class="badge bg-warning">Уменьшить на {{ kit.price_adjustment_value }} руб.</span>
{% endif %}
</dd>
<dt class="col-sm-4">Ценообразование:</dt>
<dd class="col-sm-8">
<span class="badge bg-info text-dark">{{ kit.get_pricing_method_display }}</span>
</dd>
{% if kit.price %}
<dt class="col-sm-4">Ручная цена:</dt>
<dd class="col-sm-8">{{ kit.price }} руб.</dd>
{% endif %}
{% if kit.markup_percent %}
<dt class="col-sm-4">Процент наценки:</dt>
<dd class="col-sm-8">{{ kit.markup_percent }}%</dd>
{% endif %}
{% if kit.markup_amount %}
<dt class="col-sm-4">Фиксированная наценка:</dt>
<dd class="col-sm-8">{{ kit.markup_amount }} руб.</dd>
{% endif %}
<dt class="col-sm-4">Статус:</dt>

View File

@@ -887,17 +887,29 @@ document.addEventListener('DOMContentLoaded', function() {
const currentAdjustmentType = adjustmentTypeInput.value;
const currentAdjustmentValue = parseFloat(adjustmentValueInput.value) || 0;
console.log('Loading saved adjustment values:', {
type: currentAdjustmentType,
value: currentAdjustmentValue
});
if (currentAdjustmentType && currentAdjustmentType !== 'none' && currentAdjustmentValue > 0) {
// Заполняем соответствующее поле ввода в зависимости от сохранённого типа
if (currentAdjustmentType === 'increase_percent') {
increasePercentInput.value = currentAdjustmentValue;
console.log('Loaded increase_percent:', currentAdjustmentValue);
} else if (currentAdjustmentType === 'increase_amount') {
increaseAmountInput.value = currentAdjustmentValue;
console.log('Loaded increase_amount:', currentAdjustmentValue);
} else if (currentAdjustmentType === 'decrease_percent') {
decreasePercentInput.value = currentAdjustmentValue;
console.log('Loaded decrease_percent:', currentAdjustmentValue);
} else if (currentAdjustmentType === 'decrease_amount') {
decreaseAmountInput.value = currentAdjustmentValue;
console.log('Loaded decrease_amount:', currentAdjustmentValue);
}
// Обновляем состояние полей (отключаем остальные, помечаем как валидные)
validateSingleAdjustment();
}
// Пересчитываем цену после загрузки значений

View File

@@ -163,8 +163,8 @@ class ProductKitCreateView(LoginRequiredMixin, PermissionRequiredMixin, CreateVi
kititem_formset.instance = self.object
saved_items = kititem_formset.save()
# Валидация ценообразования больше не требуется в новой системе
# (новая система использует простой расчёт на основе actual_price компонентов)
# Пересчитываем базовую цену после сохранения всех компонентов
self.object.recalculate_base_price()
# Обработка фотографий
handle_photos(self.request, self.object, ProductKitPhoto, 'kit')
@@ -232,6 +232,9 @@ class ProductKitUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateVi
kititem_formset.instance = self.object
kititem_formset.save()
# Пересчитываем базовую цену после сохранения всех компонентов
self.object.recalculate_base_price()
# Обработка фотографий
handle_photos(self.request, self.object, ProductKitPhoto, 'kit')