Release 4.4.0 of pretix

Oct. 29, 2021

Today, we are releasing pretix 4.4.0. The major improvements in this release aren't directly visible, but prepare us for our next big steps. Of course we've added in lots of minor improvements throughout the system.

Big thanks go to Adri, cpoisnel, DJG Bayern, Fabian Rodriguez, ityd, Jaakko Rinta-Filppula, Maarten van den Berg, and Tony Pavlik who contributed to this release. ❤️

pretix 4.4.0 is now available for installation via pip. The new Docker images will appear on Docker over the next few hours. All customers of pretix Hosted are already using the new version and do not need to take any action.

If you run your own pretix installation, this update requires a special manual step, which is documented on our new Update notes documentation page. It also requires manual action from plugin authors in many cases (see below).

Improved accessibility

Over the past year, we've spent a lot of time restructuring the implementation of the checkout process to improve accessibility. Our end goal is that buying tickets with pretix will be as smooth for e.g. visually impaired users as it is for everyone else. There's still a long way to go until we reach this goal in all circumstances, but this release contains the majority of the structural changes we need to make.

Along the way, we've improved many details of our layout and design to increase contrast, improve readability and make it easier to tell what's important.

Transaction history

pretix 4.4 introduces the new concept of "order transactions", which are basically a representation of how a specific order changed over time. pretix has always offered extensive logging and was always audit-proof, but the existing logs are mainly suitable for human analysis and cannot be properly used for reporting purposes. With transactions, every change to the fiscally relevant data of an order (product, price, tax rate) will be recorded separately.

With pretix 4.4, you can inspect the transactions manually within the detail view of an order. The data is not yet used anywhere since we first want to ensure the feature works properly in combination with all different setups. In upcoming releases, we'll add additional reporting capabilities based on this data or change existing reports to use this data in the future.

Introducing this feature requires extra caution from system administrators (see above) and plugin authors (see below).

Smaller changes and bugfixes

Ticket shop and widget

  • The voucher redemption page now shows the number of remaining tickets if this information is publicly available.

  • The "start of presale" date is now shown in the user's local time as well if the local time is different from the event location's time.

  • If VAT ID input is enabled for invoice addresses, the VAT ID is now also asked from Swiss customers and validated against the Swiss government's API.

  • A race condition has been fixed that caused Stripe payments to be considered failed even though they were successful.

  • A few millimeters of spacing have been removed from the default invoice layout to prevent the text flowing to a second page in very common cases.

Ticketing backend and configuration

  • Products and categories can now be sorted using drag and drop actions instead of manually clicking "up" and "down".

  • If you have a product that requires an active membership, you can now optionally configure that it will be hidden completely if a customer without a matching membership visits your shop.

  • A new organizer-level export has been added to allow downloading all changes to gift cards.

  • The order JSON export now includes a lot more information.

  • The backend now shows whether an invoice has ever been sent to the customer via e-mail.

  • The web-based check-in now shows the date of a ticket when used with an event series.

  • The numbering of invoices has been changed in case the number scheme is changed mid-event to prevent situations that look like number gaps with missing invoices.

  • When manually sending emails to customers or attendees, you can now select to attach tickets or invoice files.

  • A new placeholder {voucher_url_list} is available when bulk-creating vouchers.

  • When cloning dates in an event series, the quota configuration option to ignore the quota for the event's availability is now copied as well.

  • Filtering the order data export by event date now behaves correctly.

  • A workaround has been added to deal with old pretixSCAN incorrectly serializing ticket secrets with spaces.

  • Logging of failed emails has been improved.

Runtime and server environment

  • The email sending routine has been extended with special-case error handling for Microsoft Exchange's rate limiting of up to three concurrent SMTP connections.

Updates to official plugins and tools

  • The COVID Certificates plugin has been released in version 1.2.0 to support storing the validity date of the certificate and requiring a new certificate once this date passed.

  • The Mailchimp plugin has been released in version 1.5.0 to support transmitting names.

  • The Offline Sales plugin has been released in version 1.1.0 to support the new transaction feature.

  • The pretixPOS backend plugin has been released in version 2.3.0 to support limiting who can open the cash drawer without performing a sale.

  • The Seating plugin has been released in version 1.6.8 to fix a permission issue.

  • The SEPA debit plugin has been released in version 2.0.1 to fix a minor bug.

  • The Shared report plugin has been released in version 1.4.1 to fix a caching issue.

  • The Tracking plugin has been released in version 2.2.0 to support Piwik Pro and improve Google Ads integration.

Plugin API changes

We expect the introduction of the Transaction data model to require changes in many plugins. Every plugin that programatically creates orders or directly updates Order, OrderPosition, or OrderFee objects will now need to call order.create_transactions() at the end of its operations to automatically create the necessary records.

We've added a few tools to make testing this easier. First, the new management command python check_order_transactions allows you to inspect your local database and compare (a) the and order.status values, (b) the sum of all positions and fees of the order and (c) the sum of all transactions of the order. If there is a mismatch, a line with details will be printed.

Second, we've added code that automatically detects most situations of missing order.create_transactions() calls. If such a situation is detected, an exception will be raised in debug mode, and a warning will be logged to pretix.log in non-debug mode. This should make it fairly easy to find affected code since the features will just start crashing in debug mode. We plan to also raise the exception in non-debug mode in future releases that introduce relevant reporting using this data.

REST API changes

  • The order list now supports filtering by product and variation.

  • The setting mail_days_order_expire_warning can now be configured through the API.

Raphael Michel

Raphael is the founder and main developer of pretix. He is passionate about user-friendly, elegant software, and when he's not busy building software for conference organizers, he enjoys co-organizing con​fer​en​ces himself.

Read more blog posts

Any questions?
+49 6221 32177-50 Mo-Fr 09:00-17:00 Uhr