from django.shortcuts import redirect from django.urls import reverse_lazy from django.views.generic import TemplateView, ListView, UpdateView from django.contrib.auth.mixins import LoginRequiredMixin from .models import Item # Проверь, как точно называется твоя модель деталей/заказов # Класс главной страницы (роутер) class IndexView(TemplateView): template_name = 'shiftflow/landing.html' def get(self, request, *args, **kwargs): # Если юзер авторизован — сразу отправляем его в реестр if request.user.is_authenticated: return redirect('registry') # Если нет — показываем кнопку "Войти" return super().get(request, *args, **kwargs) # Класс реестра деталей (защищен LoginRequiredMixin) class RegistryView(LoginRequiredMixin, ListView): model = Item template_name = 'shiftflow/registry.html' context_object_name = 'items' def get_queryset(self): # Позже здесь добавим: .filter(machine__in=request.user.profile.machines.all()) # Сортируем: сначала статус (по алфавиту или логике choices), # затем по дате (свежие сверху), по станку и по номеру сделки return Item.objects.all().order_by('status', '-date', 'machine__name', 'deal__number') def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # Передаем роль в шаблон, чтобы скрывать/показывать кнопки if hasattr(self.request.user, 'profile'): context['user_role'] = self.request.user.profile.role return context # Вьюха детального вида и редактирования class ItemUpdateView(LoginRequiredMixin, UpdateView): model = Item template_name = 'shiftflow/item_detail.html' # Перечисляем поля, которые можно редактировать (укажи нужные) fields = [ 'drawing_name', 'machine', 'quantity_plan', 'quantity_fact', 'material', 'size_value', 'status', 'is_synced_1c', 'extra_drawing' ] context_object_name = 'item' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # Обязательно добавляем роль в контекст этого шаблона! if hasattr(self.request.user, 'profile'): context['user_role'] = self.request.user.profile.role return context def get_success_url(self): # После сохранения возвращаемся в реестр return reverse_lazy('registry')