From 435b32a6b86ec8c31e03b9410de4e75f89143f1f Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 27 May 2020 12:36:43 +0200 Subject: [PATCH] Add full attendee address as PDF variable --- src/pretix/base/models/orders.py | 27 +++++++++++++++++++++++++++ src/pretix/base/pdf.py | 6 ++++++ 2 files changed, 33 insertions(+) diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index b79b668e1..4c60b67a2 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -1165,6 +1165,33 @@ class AbstractPosition(models.Model): scheme = PERSON_NAME_SCHEMES[self.event.settings.name_scheme] return scheme['concatenation'](self.attendee_name_parts).strip() + @property + def state_name(self): + sd = pycountry.subdivisions.get(code='{}-{}'.format(self.country, self.state)) + if sd: + return sd.name + return self.state + + @property + def state_for_address(self): + from pretix.base.settings import COUNTRIES_WITH_STATE_IN_ADDRESS + if not self.state or str(self.country) not in COUNTRIES_WITH_STATE_IN_ADDRESS: + return "" + if COUNTRIES_WITH_STATE_IN_ADDRESS[str(self.country)][1] == 'long': + return self.state_name + return self.state + + def address_format(self): + lines = [ + self.attendee_name, + self.company, + self.street, + self.zipcode + ' ' + (self.city or '') + ' ' + (self.state_for_address or ''), + self.country.name + ] + lines = [r.strip() for r in lines if r] + return '\n'.join(lines).strip() + class OrderPayment(models.Model): """ diff --git a/src/pretix/base/pdf.py b/src/pretix/base/pdf.py index 613fc19e7..dcb519cff 100644 --- a/src/pretix/base/pdf.py +++ b/src/pretix/base/pdf.py @@ -114,6 +114,12 @@ DEFAULT_VARIABLES = OrderedDict(( "editor_sample": _("Sample company"), "evaluate": lambda op, order, ev: op.company or (op.addon_to.company if op.addon_to else '') }), + ('shipping_address', { + 'label': _('Full attendee address'), + 'editor_sample': _('John Doe\nSample company\nSesame Street 42\n12345 Any City\nAtlantis'), + 'evaluate': lambda op, order, event: order.shipping_address.format() if hasattr( + order, 'shipping_address') else '' + }), ("attendee_country", { "label": _("Attendee country"), "editor_sample": 'Atlantis',