Compare commits

...

2 Commits

Author SHA1 Message Date
Tris Forster
928173976b Got my music working again 2023-02-23 19:29:20 +11:00
Tris Forster
d7892d355d Moved project filtering to the right place - the queryset 2023-02-23 19:18:23 +11:00
5 changed files with 27 additions and 29 deletions

View File

@ -84,6 +84,23 @@ class Ensemble(models.Model):
def __str__(self):
return self.name
class ProjectQuerySet(models.QuerySet):
def current(self):
return self.filter(models.Q(event_date__gte=(timezone.now()-timezone.timedelta(7))) | models.Q(event_date=None))
def active(self):
return self.filter(active=True)
def for_user(self, user, project_keys=[], ensemble_keys=[]):
if user.is_superuser:
return self
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 self.filter(f)
class Project(models.Model):
''' A Project linked to an ensemble
@ -98,6 +115,8 @@ class Project(models.Model):
nonce = models.SmallIntegerField(default=1,
help_text="Increment this to reset the authentication links")
objects = ProjectQuerySet.as_manager()
class Meta:
ordering = ['active', 'event_date']
@ -134,19 +153,6 @@ 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

View File

@ -254,14 +254,12 @@ class ProjectListView(ProjectMixin, ListView):
return True
def get_project_queryset(self):
return models.Project.for_user(self.request.user,
return models.Project.objects.for_user(self.request.user,
self.get_authorized_keys('project'),
self.get_authorized_keys('ensemble'))
def get_queryset(self):
qs = self.get_project_queryset()
f = Q(event_date__gte=(timezone.now()-timezone.timedelta(7))) | Q(event_date=None)
return qs.filter(f, active=True)
return self.get_project_queryset().current().active()
class ProjectCreateView(EnsembleMixin, CreateView):
admin_required = True

View File

@ -25,5 +25,5 @@ class PlaylistAddForm(forms.Form):
def save(self):
self.instance.works.add(self.cleaned_data['work'])
class ProjectSelectForm(forms.Form):
class ProjectSelectForm(BaseForm):
project = forms.ModelChoiceField(queryset=Project.objects.all())

View File

@ -63,7 +63,7 @@
<td>{{ forloop.counter }}.</td>
<td>
{% if request.is_admin %}
<a href="{% url 'work_detail' item.work.pk %}">{{ item.work.name }}</a>
<a href="{% url 'work_detail' item.work.collection.pk item.work.pk %}">{{ item.work.name }}</a>
{% else %}
{{ item.work.name }}
{% endif %}
@ -75,7 +75,7 @@
<select name="instruments">
<option value='-'>None</option>
{% for part in item.work.digital_parts %}
<option value='{{ part.tag }}'>{{ part.instrument }}</option>
<option value='{{ part.tag }}'>{{ part.name }}</option>
{% endfor %}
</select>
</span>

View File

@ -30,9 +30,7 @@ class ProjectItemListView(ProjectMixin, ListView):
def post(self, request, **kwargs):
project = self.get_project()
project_works = project.works.all()
project_works = self.project.works.all()
instruments = request.POST.getlist('instruments')
works = request.POST.getlist('works')
@ -58,7 +56,7 @@ class ProjectItemListView(ProjectMixin, ListView):
result = extract_and_concat(sections)
download_name = f'{project.name}.pdf'
download_name = f'{self.project.name}.pdf'
response = FileResponse(result, content_type="application/pdf")
response['Content-Disposition'] = f'inline; filename="{download_name}"'
@ -74,10 +72,6 @@ class ProjectItemListView(ProjectMixin, ListView):
data['instrument'] = self.request.session.get('instrument', 'Score')
data['part'] = self.request.session.get('part', '0')
data['running_time'] = self.get_queryset().aggregate(Sum('work__running_time'))['work__running_time__sum']
#if running_time:
# data['running_time'] = "{0:d}:{1:02d}".format(int(running_time / 60), running_time % 60)
#else:
# data['running_time'] = "-:--"
return data
@ -262,7 +256,7 @@ class WorkAddToProject(CollectionMixin, FormView):
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())
qs = qs.for_user(self.request.user).current()
# dont show projects already added to
work = self.get_object()