Skip to content
Snippets Groups Projects
Verified Commit 53052575 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Show announcements in dashboard

parent c7500df8
No related branches found
No related tags found
1 merge request!161Show announcements on dashboard
Pipeline #881 failed
from datetime import date, datetime, timedelta
from typing import Optional, Iterable, Union, Sequence
from typing import Optional, Iterable, Union, Sequence, List
from django.contrib.auth import get_user_model
from django.contrib.auth.models import User
......@@ -312,6 +312,22 @@ class Announcement(models.Model):
return cls.objects.filter(content_type=ct, recipient_id__in=pks)
@classmethod
def for_person_at_time(cls, person: Person, when: Optional[datetime] = None) -> List:
""" Get all announcements for one person at a certain time """
when = when or timezone.datetime.now()
# Get announcements by time
announcements = cls.objects.filter(valid_from__lte=when, valid_until__gte=when)
# Filter by person
announcements_for_person = []
for announcement in announcements:
if person in announcement.recipient_persons:
announcements_for_person.append(announcement)
return announcements_for_person
@property
def recipient_persons(self) -> Union[models.QuerySet, Sequence[models.Model]]:
""" Return a list of Persons this announcement is relevant for
......
{% load i18n humanize %}
{% for announcement in announcements %}
<div class="alert primary">
<div>
{% if show_interval %}
<em class="right hide-on-small-and-down">
{% if announcement.valid_from.date == announcement.valid_until.date %}
{% blocktrans with from=announcement.valid_from|naturalday %}
Valid for {{ from }}
{% endblocktrans %}
{% else %}
{% blocktrans with from=announcement.valid_from|naturalday until=announcement.valid_until|naturalday %}
Valid for {{ from }} – {{ until }}
{% endblocktrans %}
{% endif %}
</em>
{% endif %}
<i class="material-icons left">announcement</i>
<p>
<strong>{{ announcement.title }}</strong> <br/>
{{ announcement.description }}
</p>
{% if show_interval %}
<em class="hide-on-med-and-up">
{% if announcement.valid_from.date == announcement.valid_until.date %}
{% blocktrans with from=announcement.valid_from|naturalday %}
Valid for {{ from }}
{% endblocktrans %}
{% else %}
{% blocktrans with from=announcement.valid_from|naturalday until=announcement.valid_until|naturalday %}
Valid for {{ from }} – {{ until }}
{% endblocktrans %}
{% endif %}
</em>
{% endif %}
</div>
</div>
{% endfor %}
......@@ -28,6 +28,8 @@
</div>
{% endfor %}
{% include "core/announcements.html" with announcements=announcements %}
<div class="row" id="live_load">
{% for widget in widgets %}
<div class="col s12 m12 l6 xl4">
......
......@@ -16,7 +16,7 @@ from .forms import (
EditTermForm,
PersonsAccountsFormSet,
)
from .models import Activity, Group, Notification, Person, School, DashboardWidget
from .models import Activity, Group, Notification, Person, School, DashboardWidget, Announcement
from .tables import GroupsTable, PersonsTable
from .util import messages
......@@ -33,6 +33,9 @@ def index(request: HttpRequest) -> HttpResponse:
context["notifications"] = notifications
context["unread_notifications"] = unread_notifications
announcements = Announcement.for_person_at_time(request.user.person)
context["announcements"] = announcements
widgets = DashboardWidget.objects.filter(active=True)
media = DashboardWidget.get_media(widgets)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment