Skip to content
Snippets Groups Projects
Commit 964f9969 authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

Add event detail page

parent fedcb0f9
No related branches found
No related tags found
1 merge request!23Resolve "Event detail page"
Pipeline #69118 passed with warnings
......@@ -88,17 +88,6 @@ MENUS = {
)
],
},
{
"name": _("Registrations"),
"url": "registrations",
"icon": "how_to_reg",
"validators": [
(
"aleksis.core.util.predicates.permission_validator",
"paweljong.view_registrations_rule",
)
],
},
],
},
],
......
......@@ -50,3 +50,12 @@ time.icon span {
padding-top: 0.8em;
color: #0606FA;
}
#owners-chip {
width: 16px;
height: 16px;
}
#event-detail-table {
table-layout: fixed;
}
......@@ -21,7 +21,7 @@ class ManageEventsTable(tables.Table):
text=_("Edit"),
)
view = tables.LinkColumn(
"event_by_name",
"event_detail_by_name",
args=[A("slug")],
verbose_name=_("View"),
text=_("View"),
......
{# -*- engine:django -*- #}
{% extends "core/base.html" %}
{% load i18n static rules material_form coerce html_helpers %}
{% load render_table from django_tables2 %}
{% block browser_title %}{{ event }}{% endblock %}
{% block extra_head %}
<link rel="stylesheet" href="{% static 'css/paweljong.css' %}"/>
{% endblock %}
{% block content %}
<h4>{{ event }}</h4>
{% has_perm 'paweljong.manage_event' user event as can_manage_event %}
{% if can_manage_event %}
<p>
{% if can_manage_event %}
<a href="{% url 'edit_event_by_slug' event.slug %}" class="btn waves-effect waves-light">
<i class="material-icons left iconify" data-icon="mdi:edit"></i>
{% trans "Edit" %}
</a>
{% endif %}
</p>
{% endif %}
<div class="card">
<div class="card-content">
<p>{{ event.description }}</p>
<table id="event-detail-table">
<tr>
<td><i class="material-icons small">event</i></td>
<td>{{ event.date_event }}</td>
<td><i class="material-icons small">location_on</i></td>
<td>{{ event.place }}</td>
</tr>
<tr>
<td><i class="material-icons small">edit_calendar</i></td>
<td colspan="2">{% trans "Registration open until" %}:</td>
<td>{{ event.date_registration }}</td>
</tr>
<tr>
<td><i class="material-icons small">money</i></td>
<td colspan="2">{% trans "Participation fee (all inclusive)" %}</td>
<td>{{ event.cost }}</td>
</tr>
<tr>
<td><i class="material-icons small">group</i></td>
<td colspan="2">{{ event.linked_group.members.count }}</td>
<td>{% trans "of" %} {{ event.max_participants }}</td>
</tr>
<tr>
<td><i class="material-icons iconify" data-icon="vscode-icons:file-type-light-codeowners"></i></td>
<td colspan="2">{% trans "Owners" %}</td>
<td>
{% for owner in event.owners_persons.all %}
<div class="chip">
<img src="{{ owner.avatar_url }}" alt="{{ owner }}" id="owners-chip">
<a href="{{ owner.get_absolute_url }}">{{ owner }}</a>
</div>
{% endfor %}
</td>
</tr>
<tr>
<td>{% trans "Description" %}</td>
<td colspan="3">
{{ event.information|add_class_to_el:"ul, browser-default"|safe }}
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
<h5>{% blocktrans %}Additional fields{% endblocktrans %}</h5>
{% render_table additional_fields_table %}
<h5>{% blocktrans %}Child groups{% endblocktrans%}</h5>
{% render_table child_groups_table %}
<h5>{% blocktrans %}Registrations{% endblocktrans %}</h5>
{% render_table registrations_table %}
{% endblock %}
{% extends "core/base.html" %}
{% load material_form i18n %}
{% load render_table from django_tables2 %}
{% block page_title %}{% blocktrans %}Registrations{% endblocktrans %}{% endblock %}
{% block browser_title %}{% blocktrans %}Registrations{% endblocktrans %}{% endblock %}
{% block content %}
<h5>{% trans "Filter registrations" %}</h5>
<form method="get">
{% form form=registrations_filter.form %}{% endform %}
{% trans "Search" as caption %}
{% include "core/partials/save_button.html" with caption=caption icon="search" %}
<button type="reset" class="btn red waves-effect waves-light">
<i class="material-icons left">clear</i>
{% trans "Clear" %}
</button>
</form>
<h5>{% trans "Selected registrations" %}</h5>
{% render_table registrations_table %}
{% endblock %}
......@@ -43,6 +43,7 @@ urlpatterns = [
name="register_event_by_slug",
),
path("event/<slug:slug>", views.EventFullView.as_view(), name="event_by_name"),
path("event/<slug:slug>/detail", views.EventDetailView.as_view(), name="event_detail_by_name"),
path(
"event/<slug:slug>/start",
views.RegisterEventStart.as_view(),
......@@ -71,7 +72,6 @@ urlpatterns = [
path("vouchers/<int:pk>/print", views.print_voucher, name="print_voucher_by_pk"),
path("vouchers/", views.vouchers, name="vouchers"),
path("event/lists/generate", views.generate_lists, name="generate_lists"),
path("event/registrations/list", views.registrations, name="registrations"),
path(
"event/registrations/<int:pk>",
views.EventRegistrationDetailView.as_view(),
......
......@@ -25,11 +25,11 @@ from templated_email import send_templated_mail
from aleksis.apps.postbuero.models import MailAddress
from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView
from aleksis.core.models import Activity, Person
from aleksis.core.tables import AdditionalFieldsTable, GroupsTable
from aleksis.core.util import messages
from aleksis.core.util.core_helpers import get_site_preferences, objectgetter_optional
from aleksis.core.util.predicates import queryset_rules_filter
from .filters import EventFilter, EventRegistrationFilter, VoucherFilter
from .filters import EventFilter, VoucherFilter
from .forms import (
EditEventForm,
EditEventRegistrationForm,
......@@ -135,28 +135,6 @@ def generate_lists(request: HttpRequest) -> HttpResponse:
return render(request, "paweljong/print/manage.html", context)
@permission_required("paweljong.view_registrations_rule")
def registrations(request: HttpRequest) -> HttpResponse:
"""List view listing all registrations."""
context = {}
# Get all registrations
registrations = queryset_rules_filter(
request.user, EventRegistration.objects.all(), "paweljong.view_registration_rule"
)
# Get filter
registrations_filter = EventRegistrationFilter(request.GET, queryset=registrations)
context["registrations_filter"] = registrations_filter
# Build table
registrations_table = EventRegistrationsTable(registrations_filter.qs)
RequestConfig(request).configure(registrations_table)
context["registrations_table"] = registrations_table
return render(request, "paweljong/event_registration/list.html", context)
@method_decorator(never_cache, name="dispatch")
class EventRegistrationCreateView(PermissionRequiredMixin, AdvancedCreateView):
"""Create view for event registrations."""
......@@ -899,3 +877,40 @@ class RegistrationStateEditView(PermissionRequiredMixin, AdvancedEditView):
template_name = "paweljong/registration_state/edit.html"
success_url = reverse_lazy("registration_states")
success_message = _("The term has been saved.")
class EventDetailView(PermissionRequiredMixin, DetailView):
"""Detail view for an event instance."""
context_object_name = "event"
permission_required = "paweljong.view_event_rule"
template_name = "paweljong/event/detail.html"
model = Event
slug_field = "slug"
def get_queryset(self):
return Event.objects.all()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# Registrations table
registrations = EventRegistration.objects.filter(event=self.object)
registrations_table = EventRegistrationsTable(registrations)
RequestConfig(self.request).configure(registrations_table)
context["registrations_table"] = registrations_table
# Child groups table
child_groups = self.object.linked_group.child_groups.all()
child_groups_table = GroupsTable(child_groups)
RequestConfig(self.request).configure(child_groups_table)
context["child_groups_table"] = child_groups_table
# Additional fields table
additional_fields = self.object.linked_group.additional_fields.all()
additional_fields_table = AdditionalFieldsTable(additional_fields)
RequestConfig(self.request).configure(additional_fields_table)
context["additional_fields_table"] = additional_fields_table
return context
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