From 6abc64ab8f44743bba19bb061e1003cdea6dd5b5 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Mon, 7 Nov 2016 10:45:32 +0100 Subject: [PATCH] Add activity filters, filter published articles (fix #344), goto django 1.9.11 --- app/locale/fr/LC_MESSAGES/django.po | 2 +- .../core/templatetags/organization_tags.py | 18 ++++++++++++------ app/organization/magazine/views.py | 7 +++++++ app/organization/network/models.py | 6 +++++- app/templates/pages/teampage.html | 17 +++++++++++++++++ requirements.txt | 2 +- 6 files changed, 43 insertions(+), 9 deletions(-) diff --git a/app/locale/fr/LC_MESSAGES/django.po b/app/locale/fr/LC_MESSAGES/django.po index 06476914..6fd20e75 100644 --- a/app/locale/fr/LC_MESSAGES/django.po +++ b/app/locale/fr/LC_MESSAGES/django.po @@ -668,7 +668,7 @@ msgstr "grade de l'activité" #: organization/network/models.py:328 msgid "activity framework" -msgstr " cadre de l'activité" +msgstr "corps de l'activité" #: organization/network/models.py:334 msgid "activity function" diff --git a/app/organization/core/templatetags/organization_tags.py b/app/organization/core/templatetags/organization_tags.py index 0fe1784f..278ca8c0 100644 --- a/app/organization/core/templatetags/organization_tags.py +++ b/app/organization/core/templatetags/organization_tags.py @@ -115,12 +115,6 @@ def in_category(objects, category): def sub_topics(topic): return ProjectTopic.objects.filter(parent=topic) - -@register.filter -def classname(obj): - return obj.__class__.__name__ - - @register.filter def classname(obj): return obj.__class__.__name__ @@ -135,3 +129,15 @@ def app_label_short(obj): else : app_label_short = app_label return app_label_short + +@register.as_tag +def activity_statuses(*args): + return ActivityStatus.objects.filter(display=True) + +@register.filter +def get_team_persons(status, team): + persons = [] + for activity in status.activities.filter(teams__in=[team]): + if not activity.person in persons: + persons.append(activity.person) + return persons diff --git a/app/organization/magazine/views.py b/app/organization/magazine/views.py index a1b892bf..d8a1b2b9 100644 --- a/app/organization/magazine/views.py +++ b/app/organization/magazine/views.py @@ -25,6 +25,10 @@ class ArticleDetailView(SlugMixin, DetailView): template_name='magazine/article/article_detail.html' context_object_name = 'article' + def get_object(self, **kwargs): + articles = self.model.objects.published(for_user=self.request.user).select_related() + return get_object_or_404(articles, slug=kwargs['slug']) + def get_context_data(self, **kwargs): context = super(ArticleDetailView, self).get_context_data(**kwargs) @@ -58,6 +62,9 @@ class ArticleListView(SlugMixin, ListView): template_name='magazine/article/article_list.html' context_object_name = 'article' + def get_queryset(self, **kwargs): + return self.model.objects.published(for_user=self.request.user).select_related() + def get_context_data(self, **kwargs): context = super(ArticleListView, self).get_context_data(**kwargs) return context diff --git a/app/organization/network/models.py b/app/organization/network/models.py index 5232ea05..647b95f3 100644 --- a/app/organization/network/models.py +++ b/app/organization/network/models.py @@ -313,8 +313,12 @@ class PersonListBlockInline(models.Model): class ActivityStatus(Named): + order = models.IntegerField(_('order number'), default=100) + display = models.BooleanField(_('display on team page'), blank=True, default=False) + class Meta: verbose_name = _('activity status') + ordering = ['order'] class ActivityGrade(Named): @@ -383,7 +387,7 @@ class PersonActivity(Period): person = models.ForeignKey('Person', verbose_name=_('person'), related_name='activities') weeks = models.IntegerField(_('number of weeks'), blank=True, null=True) - status = models.ForeignKey(ActivityStatus, verbose_name=_('status'), blank=True, null=True, on_delete=models.SET_NULL) + status = models.ForeignKey(ActivityStatus, verbose_name=_('status'), blank=True, null=True, related_name='activities', on_delete=models.SET_NULL) is_permanent = models.BooleanField(_('permanent'), default=False) framework = models.ForeignKey(ActivityFramework, verbose_name=_('framework'), blank=True, null=True, on_delete=models.SET_NULL) grade = models.ForeignKey(ActivityGrade, verbose_name=_('grade'), blank=True, null=True, on_delete=models.SET_NULL) diff --git a/app/templates/pages/teampage.html b/app/templates/pages/teampage.html index 3dfd6d33..48882be5 100644 --- a/app/templates/pages/teampage.html +++ b/app/templates/pages/teampage.html @@ -74,6 +74,23 @@ {% endwith %} {% endblock %} +{% block page_person_list %} +
+
+
+ {% activity_statuses as statuses %} + {% for status in statuses %} + {{ status.name }} : + {% for person in status|get_team_persons:page.teampage.team %} + {{ person.title }}{% if not forloop.last %}, {% endif %} + {% endfor %} +
+ {% endfor %} +
+
+{% endblock %} + + {% block related_project %} {% if page.teampage.team.leader_projects.all or page.teampage.team.partner_projects.all %}
diff --git a/requirements.txt b/requirements.txt index 0bd39c1f..3d0c38ff 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ mysqlclient psycopg2 pyquery humanize -Django==1.9.10 +Django==1.9.11 mezzanine==4.2.2 django-modeltranslation django-meta -- 2.39.5