diff --git a/src/pretix/api/serializers/event.py b/src/pretix/api/serializers/event.py index e2f3b507d9..2e8ba1dc12 100644 --- a/src/pretix/api/serializers/event.py +++ b/src/pretix/api/serializers/event.py @@ -54,7 +54,10 @@ from pretix.base.models.items import SubEventItem, SubEventItemVariation from pretix.base.services.seating import ( SeatProtected, generate_seats, validate_plan_change, ) -from pretix.base.settings import LazyI18nStringList, validate_event_settings +from pretix.base.settings import ( + PERSON_NAME_SALUTATIONS, PERSON_NAME_SCHEMES, PERSON_NAME_TITLE_GROUPS, + LazyI18nStringList, validate_event_settings, +) from pretix.base.signals import api_event_settings_fields logger = logging.getLogger(__name__) @@ -777,6 +780,7 @@ class EventSettingsSerializer(SettingsSerializer): 'logo_image_large', 'logo_show_title', 'og_image', + 'name_scheme', ] def __init__(self, *args, **kwargs): @@ -842,4 +846,25 @@ class DeviceEventSettingsSerializer(EventSettingsSerializer): 'invoice_address_from_country', 'invoice_address_from_tax_id', 'invoice_address_from_vat_id', + 'name_scheme', ] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['_name_scheme_fields'] = serializers.JSONField( + read_only=True, + default=[{"key": k, "label": str(v), "weight": w} for k, v, w, *__ in PERSON_NAME_SCHEMES.get(self.event.settings.name_scheme)['fields']] + ) + self.fields['_name_scheme_salutations'] = serializers.JSONField( + read_only=True, + default=[{"key": k, "label": str(v)} for k, v in PERSON_NAME_SALUTATIONS] + ) + self.fields['_name_scheme_titles'] = serializers.JSONField( + read_only=True, + default=( + [{"key": k, "label": k} + for k in PERSON_NAME_TITLE_GROUPS.get(self.event.settings.name_scheme_titles)[1]] + if self.event.settings.name_scheme_titles + else [] + ) + ) diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index 4c1dbbd08b..f3459a6e10 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -2594,7 +2594,9 @@ Your {organizer} team""")) }, 'name_scheme': { 'default': 'full', # default for new events is 'given_family' - 'type': str + 'type': str, + 'serializer_class': serializers.ChoiceField, + 'serializer_kwargs': {}, }, 'giftcard_length': { 'default': settings.ENTROPY['giftcard_secret'], @@ -2989,6 +2991,9 @@ PERSON_NAME_SCHEMES = OrderedDict([ }, }), ]) + +DEFAULTS['name_scheme']['serializer_kwargs']['choices'] = ((k, k) for k in PERSON_NAME_SCHEMES) + COUNTRIES_WITH_STATE_IN_ADDRESS = { # Source: http://www.bitboost.com/ref/international-address-formats.html # This is not a list of countries that *have* states, this is a list of countries where states