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:
@@ -1,11 +1,13 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.contrib import messages
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.db.models import Count, Q
|
||||
from django.views.generic import ListView, CreateView, UpdateView, DeleteView
|
||||
from django.views.generic import ListView, CreateView, UpdateView, DeleteView, View
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.http import JsonResponse
|
||||
|
||||
from inventory.models import Showcase, Reservation
|
||||
from inventory.forms_showcase import ShowcaseForm
|
||||
@@ -173,3 +175,42 @@ class ShowcaseDeleteView(DeleteView):
|
||||
)
|
||||
|
||||
return response
|
||||
|
||||
|
||||
@method_decorator(login_required, name='dispatch')
|
||||
class SetDefaultShowcaseView(LoginRequiredMixin, View):
|
||||
"""
|
||||
Установка витрины по умолчанию для её склада.
|
||||
Обрабатывает POST запрос от AJAX и возвращает JSON ответ.
|
||||
"""
|
||||
|
||||
def post(self, request, pk):
|
||||
"""
|
||||
Установить витрину с заданным pk как витрину по умолчанию для её склада
|
||||
"""
|
||||
try:
|
||||
showcase = get_object_or_404(Showcase, pk=pk, is_active=True)
|
||||
|
||||
# Установить эту витрину как по умолчанию
|
||||
# (метод save() в модели автоматически снимет флаг с других витрин этого склада)
|
||||
showcase.is_default = True
|
||||
showcase.save()
|
||||
|
||||
return JsonResponse({
|
||||
'status': 'success',
|
||||
'message': f'Витрина "{showcase.name}" на складе "{showcase.warehouse.name}" установлена по умолчанию',
|
||||
'showcase_id': showcase.id,
|
||||
'showcase_name': showcase.name,
|
||||
'warehouse_id': showcase.warehouse.id,
|
||||
'warehouse_name': showcase.warehouse.name
|
||||
})
|
||||
except Showcase.DoesNotExist:
|
||||
return JsonResponse({
|
||||
'status': 'error',
|
||||
'message': 'Витрина не найдена'
|
||||
}, status=404)
|
||||
except Exception as e:
|
||||
return JsonResponse({
|
||||
'status': 'error',
|
||||
'message': f'Ошибка при установке витрины по умолчанию: {str(e)}'
|
||||
}, status=500)
|
||||
|
||||
Reference in New Issue
Block a user