fix: Загружать сохранённые значения корректировки цены при редактировании
При редактировании комплекта поля корректировки цены остаются пустыми, хотя в БД сохранены корректные значения (price_adjustment_type и value). Исправлено: 1. Добавлен вызов validateSingleAdjustment() после заполнения полей - Это отключает остальные поля и помечает валидные - Реализует логику одного заполненного поля 2. Добавлено логирование в консоль браузера для отладки: - Показывает какие значения загружены из БД - Помогает выявить проблемы Теперь при редактировании: - Если есть сохранённая корректировка, она отображается - Остальные поля автоматически отключаются - Пересчитывается финальная цена Файл: products/templates/products/productkit_edit.html
This commit is contained in:
@@ -49,40 +49,37 @@
|
|||||||
</dd>
|
</dd>
|
||||||
{% endif %}
|
{% 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">
|
<dd class="col-sm-8">
|
||||||
{% if kit.sale_price %}
|
{% 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>
|
<strong class="text-danger fs-5">{{ kit.sale_price|floatformat:2 }} руб.</strong>
|
||||||
<span class="badge bg-danger ms-2">Акция</span>
|
<span class="badge bg-danger ms-2">Акция</span>
|
||||||
{% else %}
|
{% 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 %}
|
{% endif %}
|
||||||
</dd>
|
</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">
|
<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>
|
</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 %}
|
{% endif %}
|
||||||
|
|
||||||
<dt class="col-sm-4">Статус:</dt>
|
<dt class="col-sm-4">Статус:</dt>
|
||||||
|
|||||||
@@ -887,17 +887,29 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
const currentAdjustmentType = adjustmentTypeInput.value;
|
const currentAdjustmentType = adjustmentTypeInput.value;
|
||||||
const currentAdjustmentValue = parseFloat(adjustmentValueInput.value) || 0;
|
const currentAdjustmentValue = parseFloat(adjustmentValueInput.value) || 0;
|
||||||
|
|
||||||
|
console.log('Loading saved adjustment values:', {
|
||||||
|
type: currentAdjustmentType,
|
||||||
|
value: currentAdjustmentValue
|
||||||
|
});
|
||||||
|
|
||||||
if (currentAdjustmentType && currentAdjustmentType !== 'none' && currentAdjustmentValue > 0) {
|
if (currentAdjustmentType && currentAdjustmentType !== 'none' && currentAdjustmentValue > 0) {
|
||||||
// Заполняем соответствующее поле ввода в зависимости от сохранённого типа
|
// Заполняем соответствующее поле ввода в зависимости от сохранённого типа
|
||||||
if (currentAdjustmentType === 'increase_percent') {
|
if (currentAdjustmentType === 'increase_percent') {
|
||||||
increasePercentInput.value = currentAdjustmentValue;
|
increasePercentInput.value = currentAdjustmentValue;
|
||||||
|
console.log('Loaded increase_percent:', currentAdjustmentValue);
|
||||||
} else if (currentAdjustmentType === 'increase_amount') {
|
} else if (currentAdjustmentType === 'increase_amount') {
|
||||||
increaseAmountInput.value = currentAdjustmentValue;
|
increaseAmountInput.value = currentAdjustmentValue;
|
||||||
|
console.log('Loaded increase_amount:', currentAdjustmentValue);
|
||||||
} else if (currentAdjustmentType === 'decrease_percent') {
|
} else if (currentAdjustmentType === 'decrease_percent') {
|
||||||
decreasePercentInput.value = currentAdjustmentValue;
|
decreasePercentInput.value = currentAdjustmentValue;
|
||||||
|
console.log('Loaded decrease_percent:', currentAdjustmentValue);
|
||||||
} else if (currentAdjustmentType === 'decrease_amount') {
|
} else if (currentAdjustmentType === 'decrease_amount') {
|
||||||
decreaseAmountInput.value = currentAdjustmentValue;
|
decreaseAmountInput.value = currentAdjustmentValue;
|
||||||
|
console.log('Loaded decrease_amount:', currentAdjustmentValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Обновляем состояние полей (отключаем остальные, помечаем как валидные)
|
||||||
|
validateSingleAdjustment();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Пересчитываем цену после загрузки значений
|
// Пересчитываем цену после загрузки значений
|
||||||
|
|||||||
@@ -163,8 +163,8 @@ class ProductKitCreateView(LoginRequiredMixin, PermissionRequiredMixin, CreateVi
|
|||||||
kititem_formset.instance = self.object
|
kititem_formset.instance = self.object
|
||||||
saved_items = kititem_formset.save()
|
saved_items = kititem_formset.save()
|
||||||
|
|
||||||
# Валидация ценообразования больше не требуется в новой системе
|
# Пересчитываем базовую цену после сохранения всех компонентов
|
||||||
# (новая система использует простой расчёт на основе actual_price компонентов)
|
self.object.recalculate_base_price()
|
||||||
|
|
||||||
# Обработка фотографий
|
# Обработка фотографий
|
||||||
handle_photos(self.request, self.object, ProductKitPhoto, 'kit')
|
handle_photos(self.request, self.object, ProductKitPhoto, 'kit')
|
||||||
@@ -232,6 +232,9 @@ class ProductKitUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateVi
|
|||||||
kititem_formset.instance = self.object
|
kititem_formset.instance = self.object
|
||||||
kititem_formset.save()
|
kititem_formset.save()
|
||||||
|
|
||||||
|
# Пересчитываем базовую цену после сохранения всех компонентов
|
||||||
|
self.object.recalculate_base_price()
|
||||||
|
|
||||||
# Обработка фотографий
|
# Обработка фотографий
|
||||||
handle_photos(self.request, self.object, ProductKitPhoto, 'kit')
|
handle_photos(self.request, self.object, ProductKitPhoto, 'kit')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user