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