Compare commits
No commits in common. "928173976beae4beeb320d395194c7abbbef6db1" and "dbbfa79f10eda4ee44f22f2cd5a57efe3c5c39e3" have entirely different histories.
928173976b
...
dbbfa79f10
@ -84,23 +84,6 @@ class Ensemble(models.Model):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
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):
|
class Project(models.Model):
|
||||||
''' A Project linked to an ensemble
|
''' A Project linked to an ensemble
|
||||||
@ -115,8 +98,6 @@ class Project(models.Model):
|
|||||||
nonce = models.SmallIntegerField(default=1,
|
nonce = models.SmallIntegerField(default=1,
|
||||||
help_text="Increment this to reset the authentication links")
|
help_text="Increment this to reset the authentication links")
|
||||||
|
|
||||||
objects = ProjectQuerySet.as_manager()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['active', 'event_date']
|
ordering = ['active', 'event_date']
|
||||||
|
|
||||||
@ -153,6 +134,19 @@ class Project(models.Model):
|
|||||||
def auth(self):
|
def auth(self):
|
||||||
return sign_data(f'{self.pk}-{self.nonce}', 12)
|
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):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|||||||
@ -254,12 +254,14 @@ class ProjectListView(ProjectMixin, ListView):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def get_project_queryset(self):
|
def get_project_queryset(self):
|
||||||
return models.Project.objects.for_user(self.request.user,
|
return models.Project.for_user(self.request.user,
|
||||||
self.get_authorized_keys('project'),
|
self.get_authorized_keys('project'),
|
||||||
self.get_authorized_keys('ensemble'))
|
self.get_authorized_keys('ensemble'))
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return self.get_project_queryset().current().active()
|
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)
|
||||||
|
|
||||||
class ProjectCreateView(EnsembleMixin, CreateView):
|
class ProjectCreateView(EnsembleMixin, CreateView):
|
||||||
admin_required = True
|
admin_required = True
|
||||||
|
|||||||
@ -25,5 +25,5 @@ class PlaylistAddForm(forms.Form):
|
|||||||
def save(self):
|
def save(self):
|
||||||
self.instance.works.add(self.cleaned_data['work'])
|
self.instance.works.add(self.cleaned_data['work'])
|
||||||
|
|
||||||
class ProjectSelectForm(BaseForm):
|
class ProjectSelectForm(forms.Form):
|
||||||
project = forms.ModelChoiceField(queryset=Project.objects.all())
|
project = forms.ModelChoiceField(queryset=Project.objects.all())
|
||||||
@ -63,7 +63,7 @@
|
|||||||
<td>{{ forloop.counter }}.</td>
|
<td>{{ forloop.counter }}.</td>
|
||||||
<td>
|
<td>
|
||||||
{% if request.is_admin %}
|
{% if request.is_admin %}
|
||||||
<a href="{% url 'work_detail' item.work.collection.pk item.work.pk %}">{{ item.work.name }}</a>
|
<a href="{% url 'work_detail' item.work.pk %}">{{ item.work.name }}</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ item.work.name }}
|
{{ item.work.name }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -75,7 +75,7 @@
|
|||||||
<select name="instruments">
|
<select name="instruments">
|
||||||
<option value='-'>None</option>
|
<option value='-'>None</option>
|
||||||
{% for part in item.work.digital_parts %}
|
{% for part in item.work.digital_parts %}
|
||||||
<option value='{{ part.tag }}'>{{ part.name }}</option>
|
<option value='{{ part.tag }}'>{{ part.instrument }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@ -30,7 +30,9 @@ class ProjectItemListView(ProjectMixin, ListView):
|
|||||||
|
|
||||||
def post(self, request, **kwargs):
|
def post(self, request, **kwargs):
|
||||||
|
|
||||||
project_works = self.project.works.all()
|
project = self.get_project()
|
||||||
|
|
||||||
|
project_works = project.works.all()
|
||||||
|
|
||||||
instruments = request.POST.getlist('instruments')
|
instruments = request.POST.getlist('instruments')
|
||||||
works = request.POST.getlist('works')
|
works = request.POST.getlist('works')
|
||||||
@ -56,7 +58,7 @@ class ProjectItemListView(ProjectMixin, ListView):
|
|||||||
|
|
||||||
result = extract_and_concat(sections)
|
result = extract_and_concat(sections)
|
||||||
|
|
||||||
download_name = f'{self.project.name}.pdf'
|
download_name = f'{project.name}.pdf'
|
||||||
|
|
||||||
response = FileResponse(result, content_type="application/pdf")
|
response = FileResponse(result, content_type="application/pdf")
|
||||||
response['Content-Disposition'] = f'inline; filename="{download_name}"'
|
response['Content-Disposition'] = f'inline; filename="{download_name}"'
|
||||||
@ -72,6 +74,10 @@ class ProjectItemListView(ProjectMixin, ListView):
|
|||||||
data['instrument'] = self.request.session.get('instrument', 'Score')
|
data['instrument'] = self.request.session.get('instrument', 'Score')
|
||||||
data['part'] = self.request.session.get('part', '0')
|
data['part'] = self.request.session.get('part', '0')
|
||||||
data['running_time'] = self.get_queryset().aggregate(Sum('work__running_time'))['work__running_time__sum']
|
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
|
return data
|
||||||
|
|
||||||
|
|
||||||
@ -256,7 +262,7 @@ class WorkAddToProject(CollectionMixin, FormView):
|
|||||||
qs = f.fields['project'].queryset
|
qs = f.fields['project'].queryset
|
||||||
|
|
||||||
# Limit to projects for ensembles where we are an admin and they haven't occured yet
|
# Limit to projects for ensembles where we are an admin and they haven't occured yet
|
||||||
qs = qs.for_user(self.request.user).current()
|
qs = qs.filter(ensemble__admins=self.request.user, event_date__gt=now())
|
||||||
|
|
||||||
# dont show projects already added to
|
# dont show projects already added to
|
||||||
work = self.get_object()
|
work = self.get_object()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user