Add default showcase selection per warehouse

- Add is_default field to Showcase model with unique constraint per warehouse
- Implement Showcase.save() to ensure only one default per warehouse
- Add SetDefaultShowcaseView for AJAX-based default selection
- Update ShowcaseForm to include is_default checkbox
- Add interactive checkbox UI in showcase list with AJAX functionality
- Update POS API to return showcase.is_default instead of warehouse.is_default
- Update terminal.js to auto-select showcase based on its is_default flag
- Add migration for is_default field

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-20 11:40:08 +03:00
parent 766ca3c87c
commit dd184265ee
9 changed files with 253 additions and 15 deletions

View File

@@ -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):
"""