From d7d79ec4c56f6ac02ff61092d45d0bfc62921fc1 Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Wed, 3 Feb 2021 22:38:38 +0100
Subject: [PATCH] Make event creation work again

---
 aleksis/apps/ticdesk/.vscode/settings.json    |  5 --
 aleksis/apps/ticdesk/forms.py                 | 15 +++++-
 .../migrations/0020_auto_20210203_2033.py     | 53 +++++++++++++++++++
 .../0021_teckidsevent_display_name.py         | 18 +++++++
 aleksis/apps/ticdesk/models.py                | 13 ++---
 .../templated_email/event_created.email       |  8 +--
 .../templates/ticdesk/teckids_event/edit.html | 12 ++++-
 aleksis/apps/ticdesk/views.py                 | 26 +++++----
 8 files changed, 117 insertions(+), 33 deletions(-)
 delete mode 100644 aleksis/apps/ticdesk/.vscode/settings.json
 create mode 100644 aleksis/apps/ticdesk/migrations/0020_auto_20210203_2033.py
 create mode 100644 aleksis/apps/ticdesk/migrations/0021_teckidsevent_display_name.py

diff --git a/aleksis/apps/ticdesk/.vscode/settings.json b/aleksis/apps/ticdesk/.vscode/settings.json
deleted file mode 100644
index 9fadd3a..0000000
--- a/aleksis/apps/ticdesk/.vscode/settings.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-    "python.linting.pylintEnabled": false,
-    "python.linting.flake8Enabled": true,
-    "python.linting.enabled": true
-}
\ No newline at end of file
diff --git a/aleksis/apps/ticdesk/forms.py b/aleksis/apps/ticdesk/forms.py
index 0603af4..a23810b 100644
--- a/aleksis/apps/ticdesk/forms.py
+++ b/aleksis/apps/ticdesk/forms.py
@@ -4,6 +4,7 @@ from collections import OrderedDict
 from django import forms
 from django.utils.translation import ugettext_lazy as _
 
+from django_select2.forms import ModelSelect2MultipleWidget, ModelSelect2Widget
 import phonenumbers
 from django_starfield import Stars
 from material import Fieldset, Layout, Row
@@ -179,8 +180,9 @@ class EditEventForm(forms.ModelForm):
     layout = Layout(
         Fieldset(
             _("Base data"),
-            Row("group", "description", Row("place"), "published"),
+            "group", Row("display_name", "description"), Row("place", "published"),
             Fieldset(_("Date data"), Row("date_event", "date_registration", "date_retraction")),
+            Fieldset(_("Event details"), Row("cost", "max_participants")),
             Fieldset(_("Feedback aspects"), "feedback_aspects"),
         ),
     )
@@ -188,7 +190,16 @@ class EditEventForm(forms.ModelForm):
     class Meta:
         model = TeckidsEvent
         exclude = []
-
+        widgets = {
+            "group": ModelSelect2Widget(
+                search_fields=["name__icontains", "short_name__icontains"],
+                attrs={"data-minimum-input-length": 0, "class": "browser-default"},
+            ),
+            "feedback_aspects": ModelSelect2MultipleWidget(
+                search_fields=["aspect__icontains"],
+                attrs={"data-minimum-input-length": 0, "class": "browser-default"},
+            ),
+        }
 
 class EditVoucherForm(forms.ModelForm):
     """Form to edit and create vouchers."""
diff --git a/aleksis/apps/ticdesk/migrations/0020_auto_20210203_2033.py b/aleksis/apps/ticdesk/migrations/0020_auto_20210203_2033.py
new file mode 100644
index 0000000..5b40a26
--- /dev/null
+++ b/aleksis/apps/ticdesk/migrations/0020_auto_20210203_2033.py
@@ -0,0 +1,53 @@
+# Generated by Django 3.1.5 on 2021-02-03 20:33
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('ticdesk', '0019_auto_20200926_2018'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='eventregistration',
+            name='extended_data',
+            field=models.JSONField(default=dict, editable=False),
+        ),
+        migrations.AlterField(
+            model_name='feedbackaspect',
+            name='extended_data',
+            field=models.JSONField(default=dict, editable=False),
+        ),
+        migrations.AlterField(
+            model_name='teckidsevent',
+            name='date_event',
+            field=models.DateField(verbose_name='Date of event'),
+        ),
+        migrations.AlterField(
+            model_name='teckidsevent',
+            name='date_registration',
+            field=models.DateField(verbose_name='Registration deadline'),
+        ),
+        migrations.AlterField(
+            model_name='teckidsevent',
+            name='date_retraction',
+            field=models.DateField(verbose_name='Retraction deadline'),
+        ),
+        migrations.AlterField(
+            model_name='teckidsevent',
+            name='extended_data',
+            field=models.JSONField(default=dict, editable=False),
+        ),
+        migrations.AlterField(
+            model_name='teckidsmember',
+            name='extended_data',
+            field=models.JSONField(default=dict, editable=False),
+        ),
+        migrations.AlterField(
+            model_name='voucher',
+            name='extended_data',
+            field=models.JSONField(default=dict, editable=False),
+        ),
+    ]
diff --git a/aleksis/apps/ticdesk/migrations/0021_teckidsevent_display_name.py b/aleksis/apps/ticdesk/migrations/0021_teckidsevent_display_name.py
new file mode 100644
index 0000000..4b15fed
--- /dev/null
+++ b/aleksis/apps/ticdesk/migrations/0021_teckidsevent_display_name.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.1.5 on 2021-02-03 21:11
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('ticdesk', '0020_auto_20210203_2033'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='teckidsevent',
+            name='display_name',
+            field=models.CharField(default='', max_length=255, verbose_name='Display name'),
+        ),
+    ]
diff --git a/aleksis/apps/ticdesk/models.py b/aleksis/apps/ticdesk/models.py
index 0a43cc0..433561d 100644
--- a/aleksis/apps/ticdesk/models.py
+++ b/aleksis/apps/ticdesk/models.py
@@ -52,6 +52,7 @@ class TeckidsEvent(ExtensibleModel):
         verbose_name_plural = _("Teckids events")
 
     # Event details
+    display_name = models.CharField(verbose_name=_("Display name"), max_length=255, default="")
     group = models.ForeignKey(
         Group, on_delete=models.CASCADE, verbose_name=_("Group"), related_name="event"
     )
@@ -60,9 +61,9 @@ class TeckidsEvent(ExtensibleModel):
     place = models.CharField(max_length=50, verbose_name="Place")
 
     # Date details
-    date_event = models.DateTimeField(verbose_name=_("Date of event"))
-    date_registration = models.DateTimeField(verbose_name=_("Registration deadline"))
-    date_retraction = models.DateTimeField(verbose_name=_("Retraction deadline"))
+    date_event = models.DateField(verbose_name=_("Date of event"))
+    date_registration = models.DateField(verbose_name=_("Registration deadline"))
+    date_retraction = models.DateField(verbose_name=_("Retraction deadline"))
 
     # Other details
     cost = models.IntegerField(verbose_name=_("Cost in €"))
@@ -110,7 +111,7 @@ class Voucher(ExtensibleModel):
         verbose_name = _("Vouchers")
         verbose_name_plural = _("Vouchers")
 
-    code = models.CharField(max_length=8, blank=True)
+    code = models.CharField(max_length=8, blank=True, null=True)
     event = models.ForeignKey(
         TeckidsEvent,
         related_name="vouchers",
@@ -166,8 +167,8 @@ class EventRegistration(ExtensibleModel):
     person = models.ForeignKey(Person, on_delete=models.CASCADE, verbose_name=_("Person"))
     date_registred = models.DateTimeField(auto_now_add=True, verbose_name=_("Registration date"))
 
-    comment = models.TextField(verbose_name=_("Comment / remarks"), blank=True)
-    channel = models.CharField(verbose_name=_("Channel"), max_length=255, blank=True)
+    comment = models.TextField(verbose_name=_("Comment / remarks"), blank=True, null=True)
+    channel = models.CharField(verbose_name=_("Channel"), max_length=255, blank=True, null=True)
     voucher = models.ForeignKey(
         Voucher, on_delete=models.CASCADE, verbose_name=_("Voucher"), blank=True, null=True,
     )
diff --git a/aleksis/apps/ticdesk/templates/templated_email/event_created.email b/aleksis/apps/ticdesk/templates/templated_email/event_created.email
index 3603fb3..d82ac83 100644
--- a/aleksis/apps/ticdesk/templates/templated_email/event_created.email
+++ b/aleksis/apps/ticdesk/templates/templated_email/event_created.email
@@ -15,11 +15,11 @@
     * {% trans "Cost" %}: {{ new_event.cost }}
     * {% trans "Max. participants" %}: {{ new_event.max_participants }}
     * {% trans "Owners" %}:
-    {% for owner in new_event.group.owners.all() %}
+    {% for owner in new_event.group.owners.all %}
         * {{ owner }}
     {% endfor %}
     * {% trans "Feedback aspects" %}:
-    {% for aspect in new_event.feedback_aspects.all() %}
+    {% for aspect in new_event.feedback_aspects.all %}
          * {{ aspect }}
     {% endfor %}
 
@@ -48,13 +48,13 @@
             <li> {% trans "Max. participants" %}: {{ new_event.max_participants }}</li>
             <li> {% trans "Owners" %}</li>
             <ul>
-            {% for owner in new_event.group.owners.all() %}
+            {% for owner in new_event.group.owners.all %}
                 <li> {{ owner }}</li>
             {% endfor %}
 	    </ul>
             <li> {% trans "Feedback aspects" %}</li>
             <ul>
-            {% for aspect in new_event.feedback_aspects.all() %}
+            {% for aspect in new_event.feedback_aspects.all %}
                  <li> {{ aspect }}</li>
             {% endfor %}
             </ul>
diff --git a/aleksis/apps/ticdesk/templates/ticdesk/teckids_event/edit.html b/aleksis/apps/ticdesk/templates/ticdesk/teckids_event/edit.html
index 701c1e1..61d7275 100644
--- a/aleksis/apps/ticdesk/templates/ticdesk/teckids_event/edit.html
+++ b/aleksis/apps/ticdesk/templates/ticdesk/teckids_event/edit.html
@@ -1,14 +1,22 @@
 {% extends "core/base.html" %}
-{% load material_form i18n %}
+{% load material_form i18n any_js %}
 
 {% block page_title %}{% blocktrans %}Edit event{% endblocktrans %}{% endblock %}
 {% block browser_title %}{% blocktrans %}Edit event{% endblocktrans %}{% endblock %}
 
+{% block extra_head %}
+    {{ edit_event_form.media.css }}
+    {% include_css "select2-materialize" %}
+{% endblock %}
+
 {% block content %}
+
   <form method="post">
     {% csrf_token %}
-    {% form form=edit_event_form %}{% endform %}
+    {% form form=edit_event_form %}{% form %}
     {% include "core/partials/save_button.html" %}
   </form>
+  {% include_js "select2-materialize" %}
+  {{ edit_event_form.media.js }}
 
 {% endblock %}
diff --git a/aleksis/apps/ticdesk/views.py b/aleksis/apps/ticdesk/views.py
index 6b70b6a..45b0343 100644
--- a/aleksis/apps/ticdesk/views.py
+++ b/aleksis/apps/ticdesk/views.py
@@ -17,7 +17,7 @@ from templated_email import send_templated_mail
 
 from aleksis.core.models import Activity, Person
 from aleksis.core.util import messages
-from aleksis.core.util.core_helpers import objectgetter_optional
+from aleksis.core.util.core_helpers import objectgetter_optional, lazy_preference
 
 from .filters import (
     EventRegistrationFilter,
@@ -62,7 +62,7 @@ def events(request):
     if request.user.is_authenticated:
         # Get all events the person participated in.
         current_person = Person.objects.get(user__username=request.user.username)
-        participated_events = TeckidsEvent.objects.filter(members=current_person)
+        participated_events = TeckidsEvent.objects.filter(group__members=current_person)
 
         # Build table
         participated_events_table = ParticipatedEventsTable(participated_events)
@@ -297,7 +297,7 @@ def edit_event(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse:
     event = objectgetter_optional(TeckidsEvent, None, False)(request, id_)
     context["event"] = event
 
-    if id_:
+    if event:
         # Edit form for existing event
         edit_event_form = EditEventForm(request.POST or None, instance=event)
     else:
@@ -307,17 +307,15 @@ def edit_event(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse:
     if request.method == "POST":
         if edit_event_form.is_valid():
             with reversion.create_revision():
-                new_event = edit_event_form.save(commit=True)
-
-                if not event:
-                    context["new_event"] = new_event
-                    context["person"] = request.user.person
-                    send_templated_mail(
-                        template_name="event_created",
-                        from_email=lazy_preference("mail", "address"),
-                        recipient_list=["orga@teckids.org"],
-                        context=context,
-                    )
+                new_event = edit_event_form.save()
+                context["new_event"] = new_event
+                context["person"] = request.user.person
+                send_templated_mail(
+                    template_name="event_created",
+                    from_email=lazy_preference("mail", "address"),
+                    recipient_list=["orga@teckids.org"],
+                    context=context,
+                )
             messages.success(request, _("The event has been saved."))
 
             return redirect("events")
-- 
GitLab