Skip to content
Snippets Groups Projects
Commit 1fe0d7e3 authored by Nadja Geisler's avatar Nadja Geisler :sunny:
Browse files

Merge branch 'feature-interest-view' into 'main'

Introduce admin view to enter interest and ad-hoc comments for AKs

Closes #147

See merge request !129
parents cb658933 93e1216d
Branches
No related tags found
No related merge requests found
...@@ -2,7 +2,7 @@ msgid "" ...@@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-17 17:35+0200\n" "POT-Creation-Date: 2022-08-17 22:41+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
...@@ -459,7 +459,7 @@ msgstr "AK präsentieren" ...@@ -459,7 +459,7 @@ msgstr "AK präsentieren"
msgid "Present results of this AK" msgid "Present results of this AK"
msgstr "Die Ergebnisse dieses AKs vorstellen" msgstr "Die Ergebnisse dieses AKs vorstellen"
#: .\AKModel\models.py:262 .\AKModel\templates\admin\AKModel\status.html:95 #: .\AKModel\models.py:262 .\AKModel\templates\admin\AKModel\status.html:97
msgid "Requirements" msgid "Requirements"
msgstr "Anforderungen" msgstr "Anforderungen"
...@@ -878,7 +878,7 @@ msgid "No AKs with this requirement" ...@@ -878,7 +878,7 @@ msgid "No AKs with this requirement"
msgstr "Kein AK mit dieser Anforderung" msgstr "Kein AK mit dieser Anforderung"
#: .\AKModel\templates\admin\AKModel\requirements_overview.html:45 #: .\AKModel\templates\admin\AKModel\requirements_overview.html:45
#: .\AKModel\templates\admin\AKModel\status.html:111 #: .\AKModel\templates\admin\AKModel\status.html:113
msgid "Add Requirement" msgid "Add Requirement"
msgstr "Anforderung hinzufügen" msgstr "Anforderung hinzufügen"
...@@ -923,39 +923,43 @@ msgstr "Scheduling" ...@@ -923,39 +923,43 @@ msgstr "Scheduling"
msgid "AKs requiring special attention" msgid "AKs requiring special attention"
msgstr "" msgstr ""
#: .\AKModel\templates\admin\AKModel\status.html:84 #: .\AKModel\templates\admin\AKModel\status.html:83
msgid "Enter Interest"
msgstr "Interesse erfassen"
#: .\AKModel\templates\admin\AKModel\status.html:86
msgid "Manage ak tracks" msgid "Manage ak tracks"
msgstr "AK-Tracks verwalten" msgstr "AK-Tracks verwalten"
#: .\AKModel\templates\admin\AKModel\status.html:86 #: .\AKModel\templates\admin\AKModel\status.html:88
msgid "Export AKs as CSV" msgid "Export AKs as CSV"
msgstr "AKs als CSV exportieren" msgstr "AKs als CSV exportieren"
#: .\AKModel\templates\admin\AKModel\status.html:88 #: .\AKModel\templates\admin\AKModel\status.html:90
msgid "Export AKs for Wiki" msgid "Export AKs for Wiki"
msgstr "AKs im Wiki-Format exportieren" msgstr "AKs im Wiki-Format exportieren"
#: .\AKModel\templates\admin\AKModel\status.html:90 #: .\AKModel\templates\admin\AKModel\status.html:92
msgid "Export AK Slides" msgid "Export AK Slides"
msgstr "AK-Folien exportieren" msgstr "AK-Folien exportieren"
#: .\AKModel\templates\admin\AKModel\status.html:92 #: .\AKModel\templates\admin\AKModel\status.html:94
msgid "Export AK Slides (Presentation AKs only)" msgid "Export AK Slides (Presentation AKs only)"
msgstr "AK-Folien exportieren (Nur zu präsentierende AKs)" msgstr "AK-Folien exportieren (Nur zu präsentierende AKs)"
#: .\AKModel\templates\admin\AKModel\status.html:97 #: .\AKModel\templates\admin\AKModel\status.html:99
msgid "No requirements yet" msgid "No requirements yet"
msgstr "Bisher keine Anforderungen" msgstr "Bisher keine Anforderungen"
#: .\AKModel\templates\admin\AKModel\status.html:110 #: .\AKModel\templates\admin\AKModel\status.html:112
msgid "Show AKs for requirements" msgid "Show AKs for requirements"
msgstr "Zu Anforderungen gehörige AKs anzeigen" msgstr "Zu Anforderungen gehörige AKs anzeigen"
#: .\AKModel\templates\admin\AKModel\status.html:114 #: .\AKModel\templates\admin\AKModel\status.html:116
msgid "Messages" msgid "Messages"
msgstr "Nachrichten" msgstr "Nachrichten"
#: .\AKModel\templates\admin\AKModel\status.html:116 #: .\AKModel\templates\admin\AKModel\status.html:118
msgid "Delete all messages" msgid "Delete all messages"
msgstr "Alle Nachrichten löschen" msgstr "Alle Nachrichten löschen"
......
...@@ -79,6 +79,8 @@ ...@@ -79,6 +79,8 @@
href="{% url 'admin:constraint-violations' slug=event.slug %}">{% trans "Constraint Violations" %} <span class="badge badge-secondary">{{ event.constraintviolation_set.count }}</span></a> href="{% url 'admin:constraint-violations' slug=event.slug %}">{% trans "Constraint Violations" %} <span class="badge badge-secondary">{{ event.constraintviolation_set.count }}</span></a>
<a class="btn btn-success" <a class="btn btn-success"
href="{% url 'admin:special-attention' slug=event.slug %}">{% trans "AKs requiring special attention" %}</a> href="{% url 'admin:special-attention' slug=event.slug %}">{% trans "AKs requiring special attention" %}</a>
<a class="btn btn-success"
href="{% url 'admin:enter-interest' event_slug=event.slug pk=event.ak_set.all.first.pk %}">{% trans "Enter Interest" %}</a>
{% endif %} {% endif %}
<a class="btn btn-success" <a class="btn btn-success"
href="{% url 'admin:tracks_manage' event_slug=event.slug %}">{% trans "Manage ak tracks" %}</a> href="{% url 'admin:tracks_manage' event_slug=event.slug %}">{% trans "Manage ak tracks" %}</a>
......
from django import forms
from AKModel.models import AK
class AKInterestForm(forms.ModelForm):
required_css_class = 'required'
class Meta:
model = AK
fields = ['interest',
'notes',
]
...@@ -8,7 +8,7 @@ msgid "" ...@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-10-29 13:36+0000\n" "POT-Creation-Date: 2022-08-17 22:41+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
...@@ -17,7 +17,7 @@ msgstr "" ...@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: AKScheduling/models.py:80 #: .\AKScheduling\models.py:80
#, python-format #, python-format
msgid "" msgid ""
"Not enough space for AK interest (Interest: %(interest)d, Capacity: " "Not enough space for AK interest (Interest: %(interest)d, Capacity: "
...@@ -26,7 +26,7 @@ msgstr "" ...@@ -26,7 +26,7 @@ msgstr ""
"Nicht genug Platz für AK-Interesse (Interesse: %(interest)d, Kapazität: " "Nicht genug Platz für AK-Interesse (Interesse: %(interest)d, Kapazität: "
"%(capacity)d)" "%(capacity)d)"
#: AKScheduling/models.py:92 #: .\AKScheduling\models.py:92
#, python-format #, python-format
msgid "" msgid ""
"Space is too close to AK interest (Interest: %(interest)d, Capacity: " "Space is too close to AK interest (Interest: %(interest)d, Capacity: "
...@@ -35,116 +35,148 @@ msgstr "" ...@@ -35,116 +35,148 @@ msgstr ""
"Verfügbarer Platz zu dicht an Interesse (Interesse: %(interest)d, Kapazität: " "Verfügbarer Platz zu dicht an Interesse (Interesse: %(interest)d, Kapazität: "
"%(capacity)d)" "%(capacity)d)"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:11 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:11
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:11 msgid "Constraint Violations for"
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:10 msgstr ""
msgid "Scheduling for"
msgstr "Scheduling für"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:74 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:78
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:128 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:133
msgid "No violations" msgid "No violations"
msgstr "Keine Verletzungen" msgstr "Keine Verletzungen"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:81 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:85
msgid "Cannot load current violations from server" msgid "Cannot load current violations from server"
msgstr "Kann die aktuellen Verletzungen nicht vom Server laden" msgstr "Kann die aktuellen Verletzungen nicht vom Server laden"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:106 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:110
msgid "Violation(s)" msgid "Violation(s)"
msgstr "Verletzung(en)" msgstr "Verletzung(en)"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:109 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:113
msgid "Auto reload?" msgid "Auto reload?"
msgstr "Automatisch neu laden?" msgstr "Automatisch neu laden?"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:113 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:117
msgid "Reload now" msgid "Reload now"
msgstr "Jetzt neu laden" msgstr "Jetzt neu laden"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:118 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:123
msgid "Violation" msgid "Violation"
msgstr "Verletzung" msgstr "Verletzung"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:119 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:124
msgid "Problem" msgid "Problem"
msgstr "Problem" msgstr "Problem"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:120 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:125
msgid "Details" msgid "Details"
msgstr "Details" msgstr "Details"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:121 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:126
msgid "Since" msgid "Since"
msgstr "Seit" msgstr "Seit"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:134 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:139
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:243 #: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:243
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:208 #: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:208
#: AKScheduling/templates/admin/AKScheduling/unscheduled.html:34 #: .\AKScheduling\templates\admin\AKScheduling\special_attention.html:43
#: .\AKScheduling\templates\admin\AKScheduling\unscheduled.html:34
msgid "Event Status" msgid "Event Status"
msgstr "Event-Status" msgstr "Event-Status"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:136 #: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:141
msgid "Scheduling" msgid "Scheduling"
msgstr "Scheduling" msgstr "Scheduling"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:129 #: .\AKScheduling\templates\admin\AKScheduling\interest.html:33
msgid "Submit"
msgstr "Abschicken"
#: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:11
#: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:10
msgid "Scheduling for"
msgstr "Scheduling für"
#: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:129
msgid "Name of new ak track" msgid "Name of new ak track"
msgstr "Name des neuen AK-Tracks" msgstr "Name des neuen AK-Tracks"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:145 #: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:145
msgid "Could not create ak track" msgid "Could not create ak track"
msgstr "Konnte neuen AK-Track nicht anlegen" msgstr "Konnte neuen AK-Track nicht anlegen"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:171 #: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:171
msgid "Could not update ak track name" msgid "Could not update ak track name"
msgstr "Konnte Namen des AK-Tracks nicht ändern" msgstr "Konnte Namen des AK-Tracks nicht ändern"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:177 #: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:177
msgid "Do you really want to delete this ak track?" msgid "Do you really want to delete this ak track?"
msgstr "Soll dieser AK-Track wirklich gelöscht werden?" msgstr "Soll dieser AK-Track wirklich gelöscht werden?"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:191 #: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:191
msgid "Could not delete ak track" msgid "Could not delete ak track"
msgstr "AK-Track konnte nicht gelöscht werden" msgstr "AK-Track konnte nicht gelöscht werden"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:203 #: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:203
msgid "Manage AK Tracks" msgid "Manage AK Tracks"
msgstr "AK-Tracks verwalten" msgstr "AK-Tracks verwalten"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:204 #: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:204
msgid "Add ak track" msgid "Add ak track"
msgstr "AK-Track hinzufügen" msgstr "AK-Track hinzufügen"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:209 #: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:209
msgid "AKs without track" msgid "AKs without track"
msgstr "AKs ohne Track" msgstr "AKs ohne Track"
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:91 #: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:91
msgid "Day (Horizontal)" msgid "Day (Horizontal)"
msgstr "Tag (horizontal)" msgstr "Tag (horizontal)"
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:98 #: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:98
msgid "Day (Vertical)" msgid "Day (Vertical)"
msgstr "Tag (vertikal)" msgstr "Tag (vertikal)"
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:109 #: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:109
msgid "Event (Horizontal)" msgid "Event (Horizontal)"
msgstr "Event (horizontal)" msgstr "Event (horizontal)"
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:118 #: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:118
msgid "Event (Vertical)" msgid "Event (Vertical)"
msgstr "Event (vertikal)" msgstr "Event (vertikal)"
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:146 #: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:146
msgid "Room" msgid "Room"
msgstr "Raum" msgstr "Raum"
#: AKScheduling/templates/admin/AKScheduling/unscheduled.html:7 #: .\AKScheduling\templates\admin\AKScheduling\special_attention.html:14
msgid "AKs with public notes"
msgstr "AKs mit öffentlichen Kommentaren"
#: .\AKScheduling\templates\admin\AKScheduling\special_attention.html:21
msgid "AKs without availabilities"
msgstr "AKs ohne Verfügbarkeiten"
#: .\AKScheduling\templates\admin\AKScheduling\special_attention.html:28
msgid "AK wishes with slots"
msgstr "AK-Wünsche mit Slots"
#: .\AKScheduling\templates\admin\AKScheduling\special_attention.html:35
msgid "AKs without slots"
msgstr "AKs ohne Slots"
#: .\AKScheduling\templates\admin\AKScheduling\unscheduled.html:7
msgid "Unscheduled AK Slots" msgid "Unscheduled AK Slots"
msgstr "Noch nicht geschedulte AK-Slots" msgstr "Noch nicht geschedulte AK-Slots"
#: AKScheduling/templates/admin/AKScheduling/unscheduled.html:11 #: .\AKScheduling\templates\admin\AKScheduling\unscheduled.html:11
msgid "Count" msgid "Count"
msgstr "Anzahl" msgstr "Anzahl"
#: .\AKScheduling\views.py:103
msgid "Interest updated"
msgstr "Interesse aktualisiert"
#: .\AKScheduling\views.py:141
msgid "Wishes"
msgstr "Wünsche"
{% extends "admin/base_site.html" %}
{% load bootstrap4 %}
{% load i18n %}
{% load l10n %}
{% load tz %}
{% load static %}
{% load fontawesome_5 %}
{% block title %}{{ title }}{% endblock %}
{% block content %}
<div class="text-center text-md-center">
<h5>
{% if previous_ak %}
<a href="{% url "admin:enter-interest" event.slug previous_ak.pk %}" class="pull-left">&lt;-{{ previous_ak.name }}</a> |
{% endif %}
{% if next_ak %}
<a href="{% url "admin:enter-interest" event.slug next_ak.pk %}">{{ next_ak.name }} -&gt;</a>
{% endif %}
</h5>
</div>
<h4>{{ ak.name }}</h4>
<h5>{{ ak.short_name }}</h5>
<div class="mb-3">
<form method="POST" class="post-form">{% csrf_token %}
{% bootstrap_form form %}
{% buttons %}
<button type="submit" class="save btn btn-primary float-right">
{% fa5_icon "check" 'fas' %} {% trans "Submit" %}
</button>
{% endbuttons %}
</form>
</div>
{% for category, aks in categories_with_aks %}
<h5 class="mt-4">{{ category.name }}</h5>
{% for link_ak in aks %}
<a href="{% url "admin:enter-interest" event.slug link_ak.pk %}">{{ link_ak.name }}</a> &middot;
{% endfor %}
{% endfor %}
{% endblock %}
from django.urls import path from django.urls import path
from AKScheduling.views import SchedulingAdminView, UnscheduledSlotsAdminView, TrackAdminView, \ from AKScheduling.views import SchedulingAdminView, UnscheduledSlotsAdminView, TrackAdminView, \
ConstraintViolationsAdminView, SpecialAttentionAKsAdminView ConstraintViolationsAdminView, SpecialAttentionAKsAdminView, InterestEnteringAdminView
def get_admin_urls_scheduling(admin_site): def get_admin_urls_scheduling(admin_site):
...@@ -16,4 +16,6 @@ def get_admin_urls_scheduling(admin_site): ...@@ -16,4 +16,6 @@ def get_admin_urls_scheduling(admin_site):
name="special-attention"), name="special-attention"),
path('<slug:event_slug>/tracks/', admin_site.admin_view(TrackAdminView.as_view()), path('<slug:event_slug>/tracks/', admin_site.admin_view(TrackAdminView.as_view()),
name="tracks_manage"), name="tracks_manage"),
path('<slug:event_slug>/enter-interest/<int:pk>', admin_site.admin_view(InterestEnteringAdminView.as_view()),
name="enter-interest"),
] ]
from django.contrib.messages.views import SuccessMessageMixin
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.views.generic import ListView, DetailView from django.views.generic import ListView, DetailView, UpdateView
from AKModel.models import AKSlot, AKTrack, Event, AK from AKModel.models import AKSlot, AKTrack, Event, AK, AKCategory
from AKModel.views import AdminViewMixin, FilterByEventSlugMixin from AKModel.views import AdminViewMixin, FilterByEventSlugMixin, EventSlugMixin
from AKScheduling.forms import AKInterestForm
class UnscheduledSlotsAdminView(AdminViewMixin, FilterByEventSlugMixin, ListView): class UnscheduledSlotsAdminView(AdminViewMixin, FilterByEventSlugMixin, ListView):
...@@ -91,3 +93,53 @@ class SpecialAttentionAKsAdminView(AdminViewMixin, DetailView): ...@@ -91,3 +93,53 @@ class SpecialAttentionAKsAdminView(AdminViewMixin, DetailView):
context["aks_without_availabilities"] = aks_without_availabilities context["aks_without_availabilities"] = aks_without_availabilities
return context return context
class InterestEnteringAdminView(SuccessMessageMixin, AdminViewMixin, EventSlugMixin, UpdateView):
template_name = "admin/AKScheduling/interest.html"
model = AK
context_object_name = "ak"
form_class = AKInterestForm
success_message = _("Interest updated")
def get_success_url(self):
return self.request.path
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = f"{_('Enter interest')}"
# Sort AKs into different lists (by their category)
ak_wishes = []
categories_with_aks = []
context["previous_ak"] = None
context["next_ak"] = None
last_ak = None
next_is_next = False
for other_ak in context['ak'].category.ak_set.all():
if other_ak.wish:
continue
if next_is_next:
context['next_ak'] = other_ak
next_is_next = False
elif other_ak.pk == context['ak'].pk :
context['previous_ak'] = last_ak
next_is_next = True
last_ak = other_ak
for category in context['event'].akcategory_set.all():
aks_for_category = []
for ak in category.ak_set.all():
if ak.wish:
ak_wishes.append(ak)
else:
aks_for_category.append(ak)
categories_with_aks.append((category, aks_for_category))
categories_with_aks.append(
(AKCategory(name=_("Wishes"), pk=0, description="-"), ak_wishes))
context["categories_with_aks"] = categories_with_aks
return context
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment