From f49ff0fd0e68819349787d3088a537aeebda194c Mon Sep 17 00:00:00 2001 From: Tris Forster Date: Thu, 23 Feb 2023 18:37:21 +1100 Subject: [PATCH] Moved project list to model --- app/interface/models.py | 13 +++++++++++++ app/interface/views.py | 13 +++---------- app/library/views/__init__.py | 8 ++++++-- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/app/interface/models.py b/app/interface/models.py index 1de8115..9b30396 100644 --- a/app/interface/models.py +++ b/app/interface/models.py @@ -134,6 +134,19 @@ class Project(models.Model): def auth(self): return sign_data(f'{self.pk}-{self.nonce}', 12) + @classmethod + def for_user(cls, user, project_keys=[], ensemble_keys=[]): + projects = cls.objects.select_related('ensemble') + if user.is_superuser: + return projects + + f = models.Q(pk__in=project_keys) | models.Q(ensemble__slug__in=ensemble_keys) + + if user.is_authenticated: + f |= models.Q(ensemble__admins=user.pk) + + return projects.filter(f) + def __str__(self): return self.name diff --git a/app/interface/views.py b/app/interface/views.py index 2a59928..f56c91a 100644 --- a/app/interface/views.py +++ b/app/interface/views.py @@ -254,16 +254,9 @@ class ProjectListView(ProjectMixin, ListView): return True def get_project_queryset(self): - projects = models.Project.objects.select_related('ensemble') - if self.request.is_admin: - return projects - - f = Q(pk__in=self.get_authorized_keys('project').keys()) | Q(ensemble__slug__in=self.get_authorized_keys('ensemble').keys()) - - if self.request.user.is_authenticated: - f |= Q(ensemble__admins=self.request.user.pk) - - return projects.filter(f) + return models.Project.for_user(self.request.user, + self.get_authorized_keys('project'), + self.get_authorized_keys('ensemble')) def get_queryset(self): qs = self.get_project_queryset() diff --git a/app/library/views/__init__.py b/app/library/views/__init__.py index 816576d..43a1ec6 100644 --- a/app/library/views/__init__.py +++ b/app/library/views/__init__.py @@ -248,7 +248,7 @@ class WorkUpdateView(CollectionMixin, UpdateView): -class WorkAddToProject(ProjectMixin, FormView): +class WorkAddToProject(CollectionMixin, FormView): admin_required = True form_class = forms.ProjectSelectForm template_name = "interface/default_form.html" @@ -261,8 +261,12 @@ class WorkAddToProject(ProjectMixin, FormView): f = super(WorkAddToProject, self).get_form() qs = f.fields['project'].queryset + # Limit to projects for ensembles where we are an admin and they haven't occured yet + qs = qs.filter(ensemble__admins=self.request.user, event_date__gt=now()) + + # dont show projects already added to work = self.get_object() - qs = qs.filter(ensemble_id=self.request.ensemble_id).exclude(pk__in=work.projects.all()) + qs = qs.exclude(pk__in=work.projects.all()) f.fields['project'].queryset = qs return f