diff --git a/src/pretix/presale/checkoutflow.py b/src/pretix/presale/checkoutflow.py index 1ba322f8d8..7c53bbbb4d 100644 --- a/src/pretix/presale/checkoutflow.py +++ b/src/pretix/presale/checkoutflow.py @@ -1026,6 +1026,25 @@ class QuestionsStep(QuestionsViewMixin, CartMixin, TemplateFlowStep): ctx['cart_session'] = self.cart_session ctx['invoice_address_asked'] = self.address_asked + def reduce_initial(v): + if isinstance(v, dict): + # try to flatten objects such as name_parts to a single string to determine whether they have any value set + return ''.join([v for k, v in v.items() if not k.startswith('_')]) + else: + return v + + def is_form_filled(form, ignore_keys=()): + return any([reduce_initial(v) for k, v in form.initial.items() if k not in ignore_keys]) + + ctx['invoice_address_open'] = ( + self.request.event.settings.invoice_address_required or + self.request.event.settings.invoice_name_required or + 'invoice' in self.request.GET or + # Checking for self.invoice_address.pk is not enough as when an invoice_address has been added and later edited to be empty, it’s not None. + # So check initial values as invoice_form can receive pre-filled values from invoice_address, widget-data or overwrites from plug-ins. + is_form_filled(self.invoice_form, ignore_keys=('is_business', 'country')) + ) + if self.cart_customer: if self.address_asked: addresses = self.cart_customer.stored_addresses.all() diff --git a/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html b/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html index ba28273713..f82c2f88b1 100644 --- a/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html +++ b/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html @@ -76,7 +76,7 @@