diff --git a/myproject/inventory/forms_showcase.py b/myproject/inventory/forms_showcase.py index d1f0bcf..a96b5b1 100644 --- a/myproject/inventory/forms_showcase.py +++ b/myproject/inventory/forms_showcase.py @@ -12,7 +12,7 @@ class ShowcaseForm(forms.ModelForm): """ class Meta: model = Showcase - fields = ['name', 'warehouse', 'description', 'is_active'] + fields = ['name', 'warehouse', 'description', 'is_active', 'is_default'] widgets = { 'name': forms.TextInput(attrs={ 'class': 'form-control', @@ -25,16 +25,19 @@ class ShowcaseForm(forms.ModelForm): 'placeholder': 'Описание витрины, её расположение или особенности' }), 'is_active': forms.CheckboxInput(attrs={'class': 'form-check-input'}), + 'is_default': forms.CheckboxInput(attrs={'class': 'form-check-input'}), } labels = { 'name': 'Название витрины', 'warehouse': 'Склад', 'description': 'Описание', 'is_active': 'Активна', + 'is_default': 'Витрина по умолчанию', } help_texts = { 'warehouse': 'Склад, к которому привязана витрина', 'is_active': 'Неактивные витрины скрыты из списка выбора', + 'is_default': 'Витрина будет автоматически выбрана при создании резерва на этом складе', } def __init__(self, *args, **kwargs): diff --git a/myproject/inventory/migrations/0004_showcase_is_default_and_more.py b/myproject/inventory/migrations/0004_showcase_is_default_and_more.py new file mode 100644 index 0000000..227fb99 --- /dev/null +++ b/myproject/inventory/migrations/0004_showcase_is_default_and_more.py @@ -0,0 +1,22 @@ +# Generated by Django 5.0.10 on 2025-11-20 08:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('inventory', '0003_showcase_reservation_showcase_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='showcase', + name='is_default', + field=models.BooleanField(default=False, verbose_name='По умолчанию'), + ), + migrations.AddIndex( + model_name='showcase', + index=models.Index(fields=['is_default'], name='inventory_s_is_defa_bf9a7c_idx'), + ), + ] diff --git a/myproject/inventory/models.py b/myproject/inventory/models.py index a9c03db..794f41a 100644 --- a/myproject/inventory/models.py +++ b/myproject/inventory/models.py @@ -369,6 +369,7 @@ class Showcase(models.Model): related_name='showcases', verbose_name="Склад") description = models.TextField(blank=True, null=True, verbose_name="Описание") is_active = models.BooleanField(default=True, verbose_name="Активна") + is_default = models.BooleanField(default=False, verbose_name="По умолчанию") created_at = models.DateTimeField(auto_now_add=True, verbose_name="Дата создания") updated_at = models.DateTimeField(auto_now=True, verbose_name="Дата обновления") @@ -379,11 +380,19 @@ class Showcase(models.Model): indexes = [ models.Index(fields=['warehouse']), models.Index(fields=['is_active']), + models.Index(fields=['is_default']), ] def __str__(self): return f"{self.name} ({self.warehouse.name})" + def save(self, *args, **kwargs): + """Обеспечиваем что только одна витрина может быть по умолчанию для каждого склада""" + if self.is_default: + # Снимаем флаг is_default со всех других витрин этого склада + Showcase.objects.filter(warehouse=self.warehouse, is_default=True).exclude(pk=self.pk).update(is_default=False) + super().save(*args, **kwargs) + class Reservation(models.Model): """ diff --git a/myproject/inventory/templates/inventory/showcase/form.html b/myproject/inventory/templates/inventory/showcase/form.html index 2c9d8bd..1ff5473 100644 --- a/myproject/inventory/templates/inventory/showcase/form.html +++ b/myproject/inventory/templates/inventory/showcase/form.html @@ -85,7 +85,7 @@ -