def __init__(self, *args, **kwargs): self.event = kwargs.pop('event') self.request = kwargs.pop('request') self.all_optional = kwargs.pop('all_optional', False) super().__init__(*args, **kwargs) if self.event.settings.order_email_asked_twice: self.fields['email_repeat'] = forms.EmailField( label=_('E-mail address (repeated)'), help_text= _('Please enter the same email address again to make sure you typed it correctly.' ), ) if self.event.settings.order_phone_asked: with language(get_babel_locale()): default_country = guess_country(self.event) default_prefix = None for prefix, values in _COUNTRY_CODE_TO_REGION_CODE.items(): if str(default_country) in values: default_prefix = prefix try: initial = self.initial.pop('phone', None) initial = PhoneNumber().from_string( initial) if initial else "+{}.".format(default_prefix) except NumberParseException: initial = None self.fields['phone'] = PhoneNumberField( label=_('Phone number'), required=self.event.settings.order_phone_required, help_text=self.event.settings.checkout_phone_helptext, # We now exploit an implementation detail in PhoneNumberPrefixWidget to allow us to pass just # a country code but no number as an initial value. It's a bit hacky, but should be stable for # the future. initial=initial, widget=WrappedPhoneNumberPrefixWidget()) if not self.request.session.get('iframe_session', False): # There is a browser quirk in Chrome that leads to incorrect initial scrolling in iframes if there # is an autofocus field. Who would have thought… See e.g. here: # https://floatboxjs.com/forum/topic.php?post=8440&usebb_sid=2e116486a9ec6b7070e045aea8cded5b#post8440 self.fields['email'].widget.attrs['autofocus'] = 'autofocus' self.fields[ 'email'].help_text = self.event.settings.checkout_email_helptext responses = contact_form_fields.send(self.event, request=self.request) for r, response in responses: for key, value in response.items(): # We need to be this explicit, since OrderedDict.update does not retain ordering self.fields[key] = value if self.all_optional: for k, v in self.fields.items(): v.required = False v.widget.is_required = False
def __init__(self, *args, **kwargs): self.event = kwargs.pop('event') super().__init__(*args, **kwargs) event = self.event if event.settings.waiting_list_names_asked: self.fields['name_parts'] = NamePartsFormField( max_length=255, required=event.settings.waiting_list_names_required, scheme=event.settings.name_scheme, titles=event.settings.name_scheme_titles, label=_('Name'), ) else: del self.fields['name_parts'] if event.settings.waiting_list_phones_asked: with language(get_babel_locale()): default_country = guess_country(self.event) for prefix, values in _COUNTRY_CODE_TO_REGION_CODE.items(): if str(default_country ) in values and not self.initial.get('phone'): # We now exploit an implementation detail in PhoneNumberPrefixWidget to allow us to pass just # a country code but no number as an initial value. It's a bit hacky, but should be stable for # the future. self.initial['phone'] = "+{}.".format(prefix) self.fields['phone'] = PhoneNumberField( label=_("Phone number"), required=event.settings.waiting_list_phones_required, help_text=event.settings. waiting_list_phones_explanation_text, widget=WrappedPhoneNumberPrefixWidget()) else: del self.fields['phone']
def initial(self): return 'static:' + str(guess_country(self.event))
def __init__(self, *args, **kwargs): self.event = kwargs.pop('event') self.channel = kwargs.pop('channel') super().__init__(*args, **kwargs) choices = [('', '')] items, display_add_to_cart = get_grouped_items(self.event, self.instance.subevent, require_seat=None) for i in items: if not i.allow_waitinglist: continue if i.has_variations: for v in i.available_variations: if v.cached_availability[0] == Quota.AVAILABILITY_OK: continue choices.append((f'{i.pk}-{v.pk}', f'{i.name} – {v.value}')) else: if i.cached_availability[0] == Quota.AVAILABILITY_OK: continue choices.append((f'{i.pk}', f'{i.name}')) self.fields['itemvar'] = forms.ChoiceField( label=_('Product'), choices=choices, ) event = self.event if event.settings.waiting_list_names_asked: self.fields['name_parts'] = NamePartsFormField( max_length=255, required=event.settings.waiting_list_names_required, scheme=event.settings.name_scheme, titles=event.settings.name_scheme_titles, label=_('Name'), ) else: del self.fields['name_parts'] if event.settings.waiting_list_phones_asked: with language(get_babel_locale()): default_country = guess_country(self.event) for prefix, values in _COUNTRY_CODE_TO_REGION_CODE.items(): if str(default_country ) in values and not self.initial.get('phone'): # We now exploit an implementation detail in PhoneNumberPrefixWidget to allow us to pass just # a country code but no number as an initial value. It's a bit hacky, but should be stable for # the future. self.initial['phone'] = "+{}.".format(prefix) self.fields['phone'] = PhoneNumberField( label=_("Phone number"), required=event.settings.waiting_list_phones_required, help_text=event.settings. waiting_list_phones_explanation_text, widget=WrappedPhoneNumberPrefixWidget()) else: del self.fields['phone']