diff --git a/dav_event_office/__init__.py b/dav_event_office/__init__.py new file mode 100644 index 0000000..6d3b94b --- /dev/null +++ b/dav_event_office/__init__.py @@ -0,0 +1 @@ +default_app_config = 'dav_event_office.apps.AppConfig' diff --git a/dav_event_office/apps.py b/dav_event_office/apps.py new file mode 100644 index 0000000..5ea50d1 --- /dev/null +++ b/dav_event_office/apps.py @@ -0,0 +1,9 @@ +from dav_base.config.apps import AppConfig as _AppConfig + +DEFAULT_SETTINGS = () + + +class AppConfig(_AppConfig): + name = 'dav_event_office' + verbose_name = u'DAV Touren- & Kursreferat' + default_settings = DEFAULT_SETTINGS diff --git a/dav_event_office/django_project_config/settings-dav_event_office.py b/dav_event_office/django_project_config/settings-dav_event_office.py new file mode 100644 index 0000000..40a96af --- /dev/null +++ b/dav_event_office/django_project_config/settings-dav_event_office.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/dav_event_office/module.json b/dav_event_office/module.json new file mode 100644 index 0000000..5a4ef89 --- /dev/null +++ b/dav_event_office/module.json @@ -0,0 +1,3 @@ +{ + "url_prefix": "office/events" +} \ No newline at end of file diff --git a/dav_event_office/templates/dav_event_office/base.html b/dav_event_office/templates/dav_event_office/base.html new file mode 100644 index 0000000..dc3aa99 --- /dev/null +++ b/dav_event_office/templates/dav_event_office/base.html @@ -0,0 +1,3 @@ +{% extends "dav_base/base.html" %} + +{% block head-title %}Touren- & Kursreferat - {{ block.super }}{% endblock %} diff --git a/dav_event_office/templates/dav_event_office/event_detail.html b/dav_event_office/templates/dav_event_office/event_detail.html new file mode 100644 index 0000000..3c7392f --- /dev/null +++ b/dav_event_office/templates/dav_event_office/event_detail.html @@ -0,0 +1,59 @@ +{% extends 'dav_event_office/base.html' %} +{% load bootstrap3 %} +{% load i18n %} + +{% block head-title %}{{ event }} - {{ block.super }}{% endblock head-title %} + +{% block page-container-fluid %} +
+ +
+ +
+
+ {{ event.render_as_html }} +
+
+
+
+
Status-Log
+ {% for flag in event.flags.all %} +
+
+ {% bootstrap_icon 'check' %} + {{ flag.status.label }}: +
+
+ {{ flag.timestamp|date:'l, d. F Y, H:i' }} {% trans 'Uhr' %}
+ {% trans 'von' %} {{ flag.user.get_full_name|default:flag.user }} +
+
+ {% endfor %} +
+
+
{% trans 'Veröffentlichung' %}
+ {% if event.planned_publication_date %} + {{ event.planned_publication_date|date:'l, d. F Y' }} + {% else %} + {% trans 'Unverzüglich' %} + {% endif %} + {% if event.internal_note %} +
{% trans 'Bearbeitungshinweis' %}
+
{{ event.internal_note|linebreaksbr }}
+ {% endif %} +
+
+
+
+
+
+{% endblock page-container-fluid %} \ No newline at end of file diff --git a/dav_event_office/templates/dav_event_office/event_list.html b/dav_event_office/templates/dav_event_office/event_list.html new file mode 100644 index 0000000..d1b8700 --- /dev/null +++ b/dav_event_office/templates/dav_event_office/event_list.html @@ -0,0 +1,101 @@ +{% extends 'dav_event_office/base.html' %} +{% load bootstrap3 %} +{% load i18n %} +{% load dav_events %} + +{% block page-container-fluid %} +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + {% for event in event_list %} + + {% with number=event.get_number %} + + {% endwith %} + + + + + + {% endfor %} + +
{% trans 'Nummer' %}{% trans 'Titel' %}{% trans 'Trainer' %}{% trans 'Datum' %}{% trans 'Status' %}
+ {{ number }}
+ ({{ event.get_sport_display }}) +
+ {{ event.title }} + + {{ event.get_trainer_full_name }} + {% if event.trainer_email %} +
{{ event.trainer_email}} + {% elif event.trainer_phone %} +
{{ event.trainer_phone}} + {% else %} +
{% trans 'Weder E-Mail-Adresse noch Telefonnummer!' %} + {% endif %} +
+ {{ event.get_numeric_date }} + + {% render_event_status event %} +
+ +
+{% endblock page-container-fluid %} \ No newline at end of file diff --git a/dav_event_office/templates/dav_event_office/home.html b/dav_event_office/templates/dav_event_office/home.html new file mode 100644 index 0000000..e7ef3a3 --- /dev/null +++ b/dav_event_office/templates/dav_event_office/home.html @@ -0,0 +1,8 @@ +{% extends "dav_event_office/base.html" %} +{% load bootstrap3 %} +{% load i18n %} + +{% block page-container-fluid %} +

{% trans 'Touren- & Kursreferat' %}

+{% include './includes/home_tiles.html' %} +{% endblock page-container-fluid %} diff --git a/dav_event_office/templates/dav_event_office/includes/home_tiles.html b/dav_event_office/templates/dav_event_office/includes/home_tiles.html new file mode 100644 index 0000000..c7f9807 --- /dev/null +++ b/dav_event_office/templates/dav_event_office/includes/home_tiles.html @@ -0,0 +1,38 @@ +{% load bootstrap3 %} +{% load i18n %} + +
+
+
+

Veranstaltungen

+

+ Blah. + +

+

+ Veranstaltungen +

+
+
+
+
+

Teilnehmer

+

+ Fasel. + +

+

+ Teilnehmer +

+
+
+
diff --git a/dav_event_office/tests/__init__.py b/dav_event_office/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dav_event_office/urls.py b/dav_event_office/urls.py new file mode 100644 index 0000000..e023335 --- /dev/null +++ b/dav_event_office/urls.py @@ -0,0 +1,9 @@ +from django.conf.urls import url + +from . import views + +urlpatterns = [ + url(r'^home$', views.HomeView.as_view(), name='root'), + url(r'^$', views.EventListView.as_view(), name='event-list'), + url(r'^(?P\d+)/', views.EventDetailView.as_view(), name='event-detail'), +] diff --git a/dav_event_office/views.py b/dav_event_office/views.py new file mode 100644 index 0000000..63a4612 --- /dev/null +++ b/dav_event_office/views.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +from django.contrib.auth.decorators import login_required +from django.core.exceptions import PermissionDenied +from django.utils.decorators import method_decorator +from django.views import generic + +from dav_events.models import Event +from dav_events.roles import has_role + + +class HomeView(generic.TemplateView): + template_name = 'dav_event_office/home.html' + + +class OfficePermissionMixin(object): + def enforce_permission(self, request): + user = request.user + if user.is_superuser: + return None + elif has_role(user, 'manager_super'): + return None + elif has_role(user, 'event_office'): + return None + raise PermissionDenied('event_office') + + +class EventListView(OfficePermissionMixin, generic.ListView): + model = Event + template_name = 'dav_event_office/event_list.html' + + @method_decorator(login_required) + def dispatch(self, request, *args, **kwargs): + self.enforce_permission(request) + return super(EventListView, self).dispatch(request, *args, **kwargs) + + +class EventDetailView(OfficePermissionMixin, generic.DetailView): + model = Event + template_name = 'dav_event_office/event_detail.html' + + @method_decorator(login_required) + def dispatch(self, request, *args, **kwargs): + self.enforce_permission(request) + return super(EventDetailView, self).dispatch(request, *args, **kwargs)