From 1311d843f3361a4c0c3162fb89dadba4387f7700 Mon Sep 17 00:00:00 2001 From: Tom Teichler <tom.teichler@teckids.org> Date: Mon, 5 Oct 2020 20:02:45 +0200 Subject: [PATCH] Rename TeckidsEvent --- aleksis/apps/ticdesk/forms.py | 5 +- aleksis/apps/ticdesk/menus.py | 18 --- .../migrations/0019_auto_20200926_2018.py | 137 ++++++++++++++++++ aleksis/apps/ticdesk/models.py | 10 +- aleksis/apps/ticdesk/predicates.py | 6 +- aleksis/apps/ticdesk/rules.py | 9 +- aleksis/apps/ticdesk/urls.py | 18 --- aleksis/apps/ticdesk/views.py | 32 ++-- 8 files changed, 166 insertions(+), 69 deletions(-) create mode 100644 aleksis/apps/ticdesk/migrations/0019_auto_20200926_2018.py diff --git a/aleksis/apps/ticdesk/forms.py b/aleksis/apps/ticdesk/forms.py index 4258080..e5f87a1 100644 --- a/aleksis/apps/ticdesk/forms.py +++ b/aleksis/apps/ticdesk/forms.py @@ -197,12 +197,13 @@ class EditEventForm(forms.ModelForm): layout = Layout( Fieldset(_("Base data"), Row("group", "description", Row("place"), "published"), - Fieldset(_("Date data"), Row("date_event", "date_registration", "date_retraction"), - Fieldset(_("Feedback aspects"), "feedback_aspects"), + Fieldset(_("Date data"), Row("date_event", "date_registration", "date_retraction")), + Fieldset(_("Feedback aspects"), "feedback_aspects")), ) class Meta: model = TeckidsEvent + exclude = [] class EditVoucherForm(forms.ModelForm): diff --git a/aleksis/apps/ticdesk/menus.py b/aleksis/apps/ticdesk/menus.py index 14a51f2..5958283 100644 --- a/aleksis/apps/ticdesk/menus.py +++ b/aleksis/apps/ticdesk/menus.py @@ -3,24 +3,6 @@ from django.utils.translation import gettext_lazy as _ MENUS = { "NAV_MENU_CORE": [ {"name": _("Events"), "url": "events", "icon": "event",}, - { - "name": _("Keys and mail"), - "url": "#", - "icon": "vpn_key", - "root": True, - "validators": [ - ("aleksis.core.util.predicates.permission_validator", "core.has_person") - ], - "submenu": [ - {"name": _("Mail addresses"), "url": "manage_mail", "icon": "email",}, - {"name": _("SSH keys"), "url": "manage_ssh_keys", "icon": "vpn_key",}, - { - "name": _("PGP keys"), - "url": "manage_pgp_keys", - "icon": "enhanced_encryption", - }, - ], - }, { "name": _("Vouchers"), "url": "#", diff --git a/aleksis/apps/ticdesk/migrations/0019_auto_20200926_2018.py b/aleksis/apps/ticdesk/migrations/0019_auto_20200926_2018.py new file mode 100644 index 0000000..371bc7f --- /dev/null +++ b/aleksis/apps/ticdesk/migrations/0019_auto_20200926_2018.py @@ -0,0 +1,137 @@ +# Generated by Django 3.1.1 on 2020-09-26 20:18 + +import django.contrib.postgres.fields.jsonb +import django.contrib.sites.managers +from django.db import migrations, models +import django.db.models.deletion +import django_iban.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0004_auto_20200728_1145'), + ('sites', '0002_alter_domain_unique'), + ('ticdesk', '0018_auto_20200802_1646'), + ] + + operations = [ + migrations.CreateModel( + name='TeckidsEvent', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('extended_data', django.contrib.postgres.fields.jsonb.JSONField(default=dict, editable=False)), + ('description', models.CharField(max_length=500, verbose_name='Description')), + ('published', models.BooleanField(default=False, verbose_name='Publish')), + ('place', models.CharField(max_length=50, verbose_name='Place')), + ('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')), + ('cost', models.IntegerField(verbose_name='Cost in €')), + ('max_participants', models.IntegerField(verbose_name='Max participants')), + ('feedback_aspects', models.ManyToManyField(related_name='event', to='ticdesk.FeedbackAspect', verbose_name='Feedback aspects')), + ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='event', to='core.group', verbose_name='Group')), + ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.site')), + ], + options={ + 'verbose_name': 'Teckids event', + 'verbose_name_plural': 'Teckids events', + 'ordering': ('date_event',), + }, + managers=[ + ('objects', django.contrib.sites.managers.CurrentSiteManager()), + ], + ), + migrations.RemoveField( + model_name='pgpkey', + name='person', + ), + migrations.RemoveField( + model_name='pgpkey', + name='site', + ), + migrations.AlterUniqueTogether( + name='registrationfield', + unique_together=None, + ), + migrations.RemoveField( + model_name='registrationfield', + name='person', + ), + migrations.RemoveField( + model_name='registrationfield', + name='project', + ), + migrations.RemoveField( + model_name='registrationfield', + name='site', + ), + migrations.RemoveField( + model_name='sshkey', + name='person', + ), + migrations.RemoveField( + model_name='sshkey', + name='site', + ), + migrations.RemoveField( + model_name='teckidsproject', + name='feedback_aspects', + ), + migrations.RemoveField( + model_name='teckidsproject', + name='members', + ), + migrations.RemoveField( + model_name='teckidsproject', + name='owners', + ), + migrations.RemoveField( + model_name='teckidsproject', + name='site', + ), + migrations.RemoveField( + model_name='voucher', + name='project', + ), + migrations.AlterField( + model_name='eventregistration', + name='channel', + field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Channel'), + ), + migrations.AlterField( + model_name='eventregistration', + name='iban', + field=django_iban.fields.IBANField(enforce_database_constraint=True, max_length=34, null=True, verbose_name='IBAN (for SEPA direct debit)'), + ), + migrations.AlterField( + model_name='voucher', + name='used_person_uid', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='used_vouchers', to='core.person', verbose_name='Used by'), + ), + migrations.DeleteModel( + name='MailAddress', + ), + migrations.DeleteModel( + name='PGPKey', + ), + migrations.DeleteModel( + name='RegistrationField', + ), + migrations.DeleteModel( + name='SSHKey', + ), + migrations.AddField( + model_name='voucher', + name='event', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='vouchers', to='ticdesk.teckidsevent', verbose_name='Event'), + ), + migrations.AlterField( + model_name='eventregistration', + name='event', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ticdesk.teckidsevent', verbose_name='Event'), + ), + migrations.DeleteModel( + name='TeckidsProject', + ), + ] diff --git a/aleksis/apps/ticdesk/models.py b/aleksis/apps/ticdesk/models.py index b54c4c0..e2f10aa 100644 --- a/aleksis/apps/ticdesk/models.py +++ b/aleksis/apps/ticdesk/models.py @@ -5,7 +5,7 @@ from django.utils.translation import gettext_lazy as _ from django_iban.fields import IBANField from aleksis.core.mixins import ExtensibleModel, PureDjangoModel -from aleksis.core.models import Person +from aleksis.core.models import Person, Group class TeckidsMember(ExtensibleModel): @@ -122,8 +122,9 @@ class Voucher(ExtensibleModel): event = models.ForeignKey( TeckidsEvent, related_name="vouchers", - verbose_name=_("Project"), + verbose_name=_("Event"), on_delete=models.CASCADE, + null=True, ) person = models.ForeignKey( Person, @@ -134,7 +135,7 @@ class Voucher(ExtensibleModel): discount = models.IntegerField(default=100) used = models.BooleanField(default=False) - used_person_uid = models.ForeignKey(core.Person, on_delete=models.CASCADE, verbose_name=_("Used by"), related_name="used_vouchers") + used_person_uid = models.ForeignKey(Person, on_delete=models.CASCADE, verbose_name=_("Used by"), related_name="used_vouchers", null=True) deleted = models.BooleanField(default=False) def __str__(self) -> str: @@ -194,9 +195,10 @@ class EventRegistration(ExtensibleModel): ) accept_sepa = models.BooleanField(verbose_name=_("SEPA direct debit")) - iban = models.IBANField( + iban = IBANField( verbose_name=_("IBAN (for SEPA direct debit)"), enforce_database_constraint=True, + null=True, ) accept_terms = models.BooleanField( diff --git a/aleksis/apps/ticdesk/predicates.py b/aleksis/apps/ticdesk/predicates.py index a837e64..2619055 100644 --- a/aleksis/apps/ticdesk/predicates.py +++ b/aleksis/apps/ticdesk/predicates.py @@ -5,7 +5,7 @@ from rules import predicate from aleksis.core.models import Group, Person from aleksis.core.util.predicates import check_object_permission -from .models import Voucher +from .models import Voucher, EventRegistration User = get_user_model() @@ -34,7 +34,7 @@ def is_own_voucher(user: User, voucher: Voucher) -> bool: @predicate -def is_own_registration(user: User, registration: Registration) -> bool: - """Predicate which checks if the registration belongs to the user."""" +def is_own_registration(user: User, registration: EventRegistration) -> bool: + """Predicate which checks if the registration belongs to the user.""" return registration.person == user.person diff --git a/aleksis/apps/ticdesk/rules.py b/aleksis/apps/ticdesk/rules.py index 7a7bc50..102ca79 100644 --- a/aleksis/apps/ticdesk/rules.py +++ b/aleksis/apps/ticdesk/rules.py @@ -118,18 +118,11 @@ manage_teckids_members_predicate = has_person & ( ) add_perm("ticdesk.manage_teckids_members", manage_teckids_members_predicate) + # Is own voucher? is_own_voucher_predicate = has_person & (is_own_voucher) add_perm("ticdesk.is_own_voucher", is_own_voucher_predicate) -# Is own ssh key? -is_own_ssh_key_predicate = has_person & (is_own_ssh_key) -add_perm("ticdesk.is_own_ssh_key", is_own_ssh_key_predicate) - -# Is own pgp key? -is_own_pgp_key_predicate = has_person & (is_own_pgp_key) -add_perm("ticdesk.is_own_pgp_key", is_own_pgp_key_predicate) - # View feedback aspects view_feedback_aspects_predicate = has_person & ( diff --git a/aleksis/apps/ticdesk/urls.py b/aleksis/apps/ticdesk/urls.py index ec5744f..b8181e9 100644 --- a/aleksis/apps/ticdesk/urls.py +++ b/aleksis/apps/ticdesk/urls.py @@ -3,11 +3,6 @@ from django.urls import path from . import views urlpatterns = [ - path( - "event/<int:id_>/additional", - views.register_event_additional, - name="register_event_additional_by_id", - ), path("event/<int:id_>/edit", views.edit_event, name="edit_event_by_id"), path("event/<int:id_>/feedback", views.feedback_event, name="feedback_event_by_id"), path("event/<int:id_>/register", views.register_event, name="register_event_by_id"), @@ -21,19 +16,6 @@ urlpatterns = [ path("vouchers/<int:id_>/edit", views.edit_voucher, name="edit_voucher_by_id"), path("vouchers/<int:id_>/print", views.print_voucher, name="print_voucher_by_id"), path("vouchers/", views.vouchers, name="vouchers"), - path("manage/mails", views.manage_mail, name="manage_mail"), - path("manage/ssh_keys", views.manage_ssh_keys, name="manage_ssh_keys"), - path("manage/pgp_keys", views.manage_pgp_keys, name="manage_pgp_keys"), - path( - "manage/ssh_keys/<int:id_>/delete", - views.delete_sshkey, - name="delete_sshkey_by_id", - ), - path( - "manage/pgp_keys/<int:id_>/delete", - views.delete_pgpkey, - name="delete_pgpkey_by_id", - ), path("event/lists/generate", views.generate_lists, name="generate_lists"), path("event/registrations/list", views.registrations, name="registrations"), path( diff --git a/aleksis/apps/ticdesk/views.py b/aleksis/apps/ticdesk/views.py index 84d918e..c2bce51 100644 --- a/aleksis/apps/ticdesk/views.py +++ b/aleksis/apps/ticdesk/views.py @@ -11,9 +11,10 @@ from django.utils.translation import ugettext as _ import pytz import reversion +from reversion.views import create_revision from django_tables2 import RequestConfig from rules.contrib.views import permission_required -from templated_email import send_templated_email +from templated_email import send_templated_mail from aleksis.core.models import Activity, Person from aleksis.core.util import messages @@ -39,9 +40,8 @@ from .forms import ( from .models import ( EventRegistration, FeedbackAspect, - RegistrationField, TeckidsMember, - event, + TeckidsEvent, Voucher, ) from .tables import ( @@ -61,7 +61,7 @@ def events(request): # Get all upcoming events now = timezone.datetime.today() - events = event.objects.filter(date_event__gte=now, published=True) + events = TeckidsEvent.objects.filter(date_event__gte=now, published=True) # Build table events_table = EventsTable(events) @@ -71,7 +71,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 = event.objects.filter(members=current_person) + participated_events = TeckidsEvent.objects.filter(members=current_person) # Build table participated_events_table = ParticipatedEventsTable(participated_events) @@ -80,13 +80,13 @@ def events(request): return render(request, "ticdesk/teckids_event/list.html", context) -@reversion.register() -@person_required +@create_revision +@login_required def register_event(request, id_): context = {} # Get current person and event - event = event.objects.get(id=id_) + event = TeckidsEvent.objects.get(id=id_) context["event"] = event initial = { @@ -173,10 +173,10 @@ def register_event(request, id_): ): guardian = Person.objects.get_or_create( defaults={ - first_name=register_form.cleaned_data["guardian_first_name"], - last_name=register_form.cleaned_data["guardian_last_name"], - mobile_number=register_form.cleaned_data["guardian_mobile_number"], - } + "first_name": register_form.cleaned_data["guardian_first_name"], + "last_name": register_form.cleaned_data["guardian_last_name"], + "mobile_number": register_form.cleaned_data["guardian_mobile_number"], + }, email=register_form.cleaned_data["guardian_email"], ) @@ -242,7 +242,7 @@ def feedback_event(request, id_): # Get current person and event current_person = Person.objects.get(user__username=request.user.username) - event = event.objects.get(id=id_) + event = TeckidsEvent.objects.get(id=id_) context["event"] = event # Prepare the form @@ -311,13 +311,13 @@ def feedback_event(request, id_): @permission_required( - "ticdesk.edit_event", fn=objectgetter_optional(event, None, False) + "ticdesk.edit_event", fn=objectgetter_optional(TeckidsEvent, None, False) ) def edit_event(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: """View to edit or create an event.""" context = {} - event = objectgetter_optional(event, None, False)(request, id_) + event = objectgetter_optional(TeckidsEvent, None, False)(request, id_) context["event"] = event if id_: @@ -358,7 +358,7 @@ def manage_events(request): # Get all upcoming events now = timezone.datetime.today() - events = event.objects.filter(date_event__gte=now) + events = TeckidsEvent.objects.filter(date_event__gte=now) # Build table manage_events_table = ManageEventsTable(events) -- GitLab