- New Features * Introduce CustomUser with role field and admin integration * Add ProjectMembership model linking users to projects * Add Ticket model with status, type, creator, and project relationships * Register CustomUser and ProjectMembership in Django admin with list views * Add URLs and views for account management and ticket CRUD operations - Enhancements * Provide pagination and filtering for ticket listings * Improve admin UI with role‑specific fieldsets - Bug Fixes * Remove obsolete serializers and placeholder files
52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
from django.urls import reverse_lazy
|
|
from django.views.generic import CreateView, DeleteView, DetailView, ListView, UpdateView
|
|
|
|
from apps.core.permissions import AdminRequiredMixin
|
|
from apps.projects.models import Project
|
|
|
|
|
|
class ProjectListView(LoginRequiredMixin, ListView):
|
|
model = Project
|
|
template_name = "pages/projects/project_list.html"
|
|
context_object_name = "projects"
|
|
paginate_by = 20
|
|
|
|
def get_queryset(self):
|
|
user = self.request.user
|
|
if user.is_admin():
|
|
return Project.objects.all()
|
|
return Project.objects.filter(members=user)
|
|
|
|
|
|
class ProjectDetailView(LoginRequiredMixin, DetailView):
|
|
model = Project
|
|
template_name = "pages/projects/project_detail.html"
|
|
context_object_name = "project"
|
|
|
|
def get_queryset(self):
|
|
user = self.request.user
|
|
if user.is_admin():
|
|
return Project.objects.all()
|
|
return Project.objects.filter(members=user)
|
|
|
|
|
|
class ProjectCreateView(AdminRequiredMixin, CreateView):
|
|
model = Project
|
|
template_name = "pages/projects/project_form.html"
|
|
fields = ["name", "client", "status", "members"]
|
|
success_url = reverse_lazy("project_list")
|
|
|
|
|
|
class ProjectUpdateView(AdminRequiredMixin, UpdateView):
|
|
model = Project
|
|
template_name = "pages/projects/project_form.html"
|
|
fields = ["name", "client", "status", "members"]
|
|
success_url = reverse_lazy("project_list")
|
|
|
|
|
|
class ProjectDeleteView(AdminRequiredMixin, DeleteView):
|
|
model = Project
|
|
template_name = "pages/projects/project_confirm_delete.html"
|
|
success_url = reverse_lazy("project_list")
|