Release 2023.8.0 of pretix
We're back to monthly releases after our short yearly summer break! Today, we are releasing pretix 2023.8.0. This includes new capabilities for our discounts system, improvements to scheduled emails, and a lot more! Big thanks go out to Alain, Ash So, Aufa Fadhlurohman, Ed Bennett, Felix Freiberger, Felix Hartnagel, Kian Cross, Mahdia Aliyy, Maurice Kaag, Michael, Patrizia Cotza, Rob, Ronan Le Meillat, Rubén Vargas, and Tuomas Savela who contributed to this release. ❤️
pretix 2023.8.0 is now available for installation via pip
. The new Docker images will appear on Docker Hub over the
next few hours. All customers of pretix Hosted are already using the new version and do not need to take any action.
Discounts: Buy X get Y free
In pretix 4.10, we introduced automated discounts based on cart content. For example, you can configure a group discount that automatically reduces all ticket prices by a certain percentage.
We are now taking this one step further by allowing the discount to apply to a different set of products than the products of the group. This allows us to support new scenarios, such as a common one in some industries: If a booking is made e.g. for a school class, one teacher gets in for free for every 10 paid student tickets. Similar scenarios are found in the tourism industry with a bus driver getting in for free with a certain number of tickets etc.
New internal locking mechanism
This release brings a significant, although invisible, change to how pretix works internally. One of the core features of every ticketing system is handling scarcity: Only a certain number of tickets is available in total, every seat is only available once, every voucher can only be used a limited number of times, etc.
To ensure that we do not e.g. sell a seat twice, pretix internally needs to use locking to make sure no two customers can submit a purchase request for the same seat at the exact same time. As a result of a multi-year effort, we have now rolled out a new approach to locking across pretix.
The new approach is more correct than the old one, with the main improvement being increased performance. The exact numbers depend on lots of factors including the server setup and the specific configuration of the event, but in our benchmarks, pretix can now handle significantly more orders within one minute for a specific event, without an error message being shown to a single user.
Smaller changes and bugfixes
Ticket shop and widget
-
You can now select Indonesian as a language option.
-
The invoice address form now pre-selects "individual" or "company/organization" automatically based on the more common choice for the given event and organizer.
-
A bug has been fixed that prevented customers from modifying their order details if the invoice address name was the only available field.
-
An incorrectly used email subject has been fixed.
-
During voucher redemption, the event title will now be shown in a headline in case it is not part of the site header already.
-
Bank transfer: If you allow your customers to send the invoice directly to the accounting department during checkout, this is now also possible after checkout on the order confirmation page, as long as the payment is pending.
-
Widget: The
data-
attributes that can be used to pass user data to the widget can now be changed even after the widget has been initialized (see documentation). -
Widget: The widget now allows different versions of Vue.js running on the same page.
Ticketing backend and configuration
-
"Automated emails" have been renamed to "scheduled emails" and now allow further filtering of recipients, such as only for a specific date or based on check-in status.
-
You can now select multiple orders and execute one of a few bulk operations on them, such as approving or denying these orders.
-
You can now create tax rules that use different tax rates based on country subdivisions, such as US states.
-
You can now use additional variables in custom check-in rules, such as the current entrance gate or the number of check-ins before or after a specific cutoff time.
-
The language selection now contains an indicator of completeness of the respective translations.
-
The placeholders that may be used in an email template can now be easily inserted into the text by clicking on them.
-
You can now set an availability start date for payment providers, in addition to the availability end date that previously existed.
-
You can now configure each payment method to not be included in the automatic payment reminder emails.
-
You can now use the placeholder
{name}
in waiting list emails. -
You can now create phone-number-type questions that are asked during check-in.
-
When splitting an order and the newly created order is not yet paid, the expiry date is now set correctly.
-
A QR code is now offered for voucher redemption URLs.
-
Users with read-only permissions can now open the voucher detail page.
-
Users with read-only permissions can now use the QR code generator for the event URL.
-
The order import now allows import of "False" values for yes/no questions.
-
Various issues have been fixed related to the use of currencies with no decimal places.
-
The navigation context selector now loads quicker and has a loading indicator.
-
The order data export now includes product IDs and variation IDs.
-
The invoice generation options have been improved to better highlight our recommended options.
-
Validation of bulk voucher creation has been improved.
-
The list of check-in lists can now be sorted.
-
PDF editor: The deduplicated list of add-ons now correctly excludes canceled add-on products.
Updates to official plugins and tools
-
The Adyen plugin has been released in version 1.4.0 to update to a new version of Adyen components.
-
The Campaign Tracking plugin has been released in version 1.6.0 to add a QR code generator for campaign links.
-
The Certificates of Attendance plugin has been released in version 1.9.4 to prevent certificate download if only an exit scan has been recorded.
-
The Digital Content plugin has been released in version 1.3.3 to ensure compatibility with future versions of pretix.
-
The Exhibitors plugin has been released in version 1.5.0 to add PDF layout variables.
-
The Offline Sales plugin has been released in version 1.9.0 to add compatibility with our new locking mechanism.
-
The Pages plugin has been released in version 1.6.0 to add a QR code generator for page links.
-
The pretixPOS backend plugin has been released in version 3.13.1 to fix a time zone issue.
-
The Event-spanning customizable reports plugin has been released in version 1.17.0 to allow reporting based on product category.
-
The pretix Reseller networks plugin has been released in version 2.9.1 to fix issues with fee calculation and voucher validation.
-
The Tracking codes plugin has been released in version 2.9.0 to add support for Matomo Tag Manager and improve support for Google Tag Manager.
Runtime and server environment
-
This release requires PostgreSQL 12 or newer.
-
The docker base image has been updated to Debian bookworm.
-
Performance of the
/metrics
endpoint has been improved.
Plugin API changes
-
This release includes an upgrade to Django 4.2. We don't expect this to be as disruptive as the last Django upgrade, but we ask you to carefully review the release notes already and prepare for backwards-incompatible changes.
-
We have changed how locking works in pretix. The
Event.lock()
function no longer exists. Read our new documentation on how to upgrade. -
Similarly to
event_url
, we now provide anevent_pattern
helper to allow fully working with non-regex URLs in Django. -
The signal
item_descriptions
now receives an additional argumentsubevent
. -
PDF text variables can now expose a
evaluate_bulk
function to improve performance.
REST API changes
-
Orders and invoices can now be retrieved for all events within an organizer.
-
New webhook types for changes to customer accounts have been added.
-
The
search
parameter for the organizer-level subevent list now searches for the parent event slug as well. -
A bug in the exporter API has been fixed that prevented time frame filters from being applied correctly.