Добавлена поддержка флага is_from_showcase в форму заказа
- orders/forms.py: добавлено поле is_from_showcase в OrderItemForm * HiddenInput widget * Устанавливается через JavaScript для showcase_kit - orders/templates/orders/order_form.html: JavaScript логика * Автоматическое определение showcase_kit при загрузке черновика * Установка is_from_showcase=true для витринных комплектов * Консольное логирование для отладки - Флаг используется backend для вызова reserve_for_order()
This commit is contained in:
@@ -456,7 +456,7 @@ class OrderItemForm(forms.ModelForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = OrderItem
|
model = OrderItem
|
||||||
fields = ['product', 'product_kit', 'sales_unit', 'quantity', 'price', 'is_custom_price']
|
fields = ['product', 'product_kit', 'sales_unit', 'quantity', 'price', 'is_custom_price', 'is_from_showcase']
|
||||||
# ВАЖНО: НЕ включаем 'id' в fields - это предотвращает ошибку валидации
|
# ВАЖНО: НЕ включаем 'id' в fields - это предотвращает ошибку валидации
|
||||||
widgets = {
|
widgets = {
|
||||||
'quantity': forms.NumberInput(attrs={'min': 1, 'value': 1}),
|
'quantity': forms.NumberInput(attrs={'min': 1, 'value': 1}),
|
||||||
@@ -465,6 +465,7 @@ class OrderItemForm(forms.ModelForm):
|
|||||||
'product_kit': forms.HiddenInput(),
|
'product_kit': forms.HiddenInput(),
|
||||||
'sales_unit': forms.HiddenInput(), # Управляется через JS
|
'sales_unit': forms.HiddenInput(), # Управляется через JS
|
||||||
'is_custom_price': forms.HiddenInput(),
|
'is_custom_price': forms.HiddenInput(),
|
||||||
|
'is_from_showcase': forms.HiddenInput(), # Устанавливается через JS для showcase_kit
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@@ -491,6 +492,9 @@ class OrderItemForm(forms.ModelForm):
|
|||||||
|
|
||||||
# Поле is_custom_price устанавливается через JS
|
# Поле is_custom_price устанавливается через JS
|
||||||
self.fields['is_custom_price'].required = False
|
self.fields['is_custom_price'].required = False
|
||||||
|
|
||||||
|
# Поле is_from_showcase устанавливается через JS для showcase_kit
|
||||||
|
self.fields['is_from_showcase'].required = False
|
||||||
|
|
||||||
def clean_price(self):
|
def clean_price(self):
|
||||||
"""Парсим цену с запятой или точкой и округляем до 2 знаков"""
|
"""Парсим цену с запятой или точкой и округляем до 2 знаков"""
|
||||||
|
|||||||
@@ -2088,6 +2088,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
const salesUnitField = document.querySelector(`[name="items-${index}-sales_unit"]`);
|
const salesUnitField = document.querySelector(`[name="items-${index}-sales_unit"]`);
|
||||||
const quantityField = document.querySelector(`[name="items-${index}-quantity"]`);
|
const quantityField = document.querySelector(`[name="items-${index}-quantity"]`);
|
||||||
const priceField = document.querySelector(`[name="items-${index}-price"]`);
|
const priceField = document.querySelector(`[name="items-${index}-price"]`);
|
||||||
|
const isFromShowcaseField = document.querySelector(`[name="items-${index}-is_from_showcase"]`);
|
||||||
|
|
||||||
if (!productField || !kitField) {
|
if (!productField || !kitField) {
|
||||||
console.warn(`[Draft Items] ⚠️ Форма ${index} не найдена`);
|
console.warn(`[Draft Items] ⚠️ Форма ${index} не найдена`);
|
||||||
@@ -2098,11 +2099,15 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
console.log(` - productField:`, productField);
|
console.log(` - productField:`, productField);
|
||||||
console.log(` - kitField:`, kitField);
|
console.log(` - kitField:`, kitField);
|
||||||
console.log(` - salesUnitField:`, salesUnitField);
|
console.log(` - salesUnitField:`, salesUnitField);
|
||||||
|
console.log(` - isFromShowcaseField:`, isFromShowcaseField);
|
||||||
|
|
||||||
// Устанавливаем значения
|
// Устанавливаем значения
|
||||||
if (item.type === 'product') {
|
if (item.type === 'product') {
|
||||||
productField.value = item.id;
|
productField.value = item.id;
|
||||||
kitField.value = '';
|
kitField.value = '';
|
||||||
|
if (isFromShowcaseField) {
|
||||||
|
isFromShowcaseField.value = 'false';
|
||||||
|
}
|
||||||
console.log(`[Draft Items] ✅ Установлен product ID: ${item.id}`);
|
console.log(`[Draft Items] ✅ Установлен product ID: ${item.id}`);
|
||||||
|
|
||||||
// Устанавливаем sales_unit если есть
|
// Устанавливаем sales_unit если есть
|
||||||
@@ -2118,7 +2123,18 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
if (salesUnitField) {
|
if (salesUnitField) {
|
||||||
salesUnitField.value = '';
|
salesUnitField.value = '';
|
||||||
}
|
}
|
||||||
console.log(`[Draft Items] ✅ Установлен kit ID: ${item.id}`);
|
|
||||||
|
// КРИТИЧНО: Для showcase_kit устанавливаем is_from_showcase=true
|
||||||
|
if (isFromShowcaseField) {
|
||||||
|
if (item.type === 'showcase_kit') {
|
||||||
|
isFromShowcaseField.value = 'true';
|
||||||
|
console.log(`[Draft Items] 🌺 Установлен флаг is_from_showcase=true для витринного комплекта`);
|
||||||
|
} else {
|
||||||
|
isFromShowcaseField.value = 'false';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`[Draft Items] ✅ Установлен kit ID: ${item.id} (type: ${item.type})`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Устанавливаем количество и цену
|
// Устанавливаем количество и цену
|
||||||
|
|||||||
Reference in New Issue
Block a user