diff --git a/aleksis/apps/paweljong/forms.py b/aleksis/apps/paweljong/forms.py index 901f6d6dea786c29c0a7a18269e276de3ce30d8f..adf6bd10ca84bb4102d3c713a3fb0a0e19991882 100644 --- a/aleksis/apps/paweljong/forms.py +++ b/aleksis/apps/paweljong/forms.py @@ -8,6 +8,7 @@ from django_select2.forms import ModelSelect2MultipleWidget, ModelSelect2Widget from material import Fieldset, Layout, Row from phonenumber_field.formfields import PhoneNumberField +from aleksis.apps.tezor.models.base import Client from aleksis.apps.tezor.models.invoice import InvoiceGroup from aleksis.core.mixins import ExtensibleForm from aleksis.core.models import Group, Person @@ -349,9 +350,17 @@ class RegisterEventFinancial(ExtensibleForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.fields["payment_method"].choices = InvoiceGroup.objects.get( - name="Hack'n'Fun-Veranstaltungen" - ).get_variant_choices() + # FIXME Maybe do not hard-code this + client, __ = Client.objects.get_or_create(name="Teckids e.V.") + group, __ = InvoiceGroup.objects.get_or_create( + name="Hack'n'Fun-Veranstaltungen", + client=client, + defaults={ + "template_name": "paweljong/invoice_pdf.html", + }, + ) + + self.fields["payment_method"].choices = group.get_variant_choices() class Meta: model = EventRegistration diff --git a/aleksis/apps/paweljong/migrations/0027_paweljongglobalpermissions.py b/aleksis/apps/paweljong/migrations/0027_paweljongglobalpermissions.py new file mode 100644 index 0000000000000000000000000000000000000000..3f366678270ffdb6ea457fbb2eef21cdd4f096e0 --- /dev/null +++ b/aleksis/apps/paweljong/migrations/0027_paweljongglobalpermissions.py @@ -0,0 +1,33 @@ +# Generated by Django 4.2.10 on 2024-03-03 16:20 + +import colorfield.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("paweljong", "0026_drop_sites"), + ] + + operations = [ + migrations.CreateModel( + name="PaweljongGlobalPermissions", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ], + options={ + "permissions": ( + ("generate_lists", "Can generate lists of participants of a group"), + ), + "managed": False, + }, + ), + ] diff --git a/aleksis/apps/paweljong/models.py b/aleksis/apps/paweljong/models.py index 584560172d1ca1b7f806da7b90de1945069c4be3..8f6d10b29393488b3d9cd8346eed94895b7eeae4 100644 --- a/aleksis/apps/paweljong/models.py +++ b/aleksis/apps/paweljong/models.py @@ -15,7 +15,7 @@ from payments import PurchasedItem from aleksis.apps.tezor.models.base import Client from aleksis.apps.tezor.models.invoice import Invoice, InvoiceGroup -from aleksis.core.mixins import ExtensibleModel +from aleksis.core.mixins import ExtensibleModel, GlobalPermissionModel from aleksis.core.models import Group, Person from aleksis.core.util.core_helpers import generate_random_code, get_site_preferences from aleksis.core.util.email import send_email @@ -460,3 +460,11 @@ class Checkpoint(ExtensibleModel): lon = models.DecimalField( max_digits=11, decimal_places=8, verbose_name=_("Longitude of check"), blank=True, null=True ) + + +class PaweljongGlobalPermissions(GlobalPermissionModel): + class Meta: + managed = False + permissions = ( + ("generate_lists", _("Can generate lists of participants of a group")), + ) diff --git a/aleksis/apps/paweljong/rules.py b/aleksis/apps/paweljong/rules.py index c74b3263f7ddce3f91480298cbbd0585fb54341f..a5564586145b6333537a90e97258cc50ef145887 100644 --- a/aleksis/apps/paweljong/rules.py +++ b/aleksis/apps/paweljong/rules.py @@ -238,6 +238,12 @@ create_registration_states_predicate = has_person & ( ) rules.add_perm("paweljong.create_registration_states_rule", create_registration_states_predicate) +# Generate lists +generate_lists_predicate = has_person & ( + has_global_perm("paweljong.generate_lists") +) +rules.add_perm("paweljong.generate_lists_rule", generate_lists_predicate) + # View menu can_view_menu_predicate = ( has_person