Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
67ee072
create directory for products, move products.md there, rename to inde…
mschrumpf Feb 17, 2025
e37086f
fix broken links
mschrumpf Feb 17, 2025
3890648
fix broken links
mschrumpf Feb 17, 2025
3c14387
fix more broken links
mschrumpf Feb 17, 2025
166af48
fix more broken links
mschrumpf Feb 17, 2025
65c08c6
add .pages; move "Mixed taxation" to taxes.md, edit and expand
mschrumpf Feb 18, 2025
0b9f674
discounts.md: overhaul chapter on early bird tickets
mschrumpf Feb 18, 2025
ea8191e
fix formatting
mschrumpf Feb 19, 2025
5059c54
overhaul section on combination products, add screenshot
mschrumpf Feb 19, 2025
58bfcf3
add explanation of check-in rule logic
mschrumpf Feb 19, 2025
b66c5a6
overhaul section on add-ons and bundles
mschrumpf Feb 20, 2025
3c23ea9
overhaul section on add-ons and bundles
mschrumpf Feb 20, 2025
97fa71a
start overhauling section on group discounts
mschrumpf Feb 20, 2025
316efb7
overhaul section on discounts
mschrumpf Feb 21, 2025
9c3dabc
overhaul section on minimum order amount
mschrumpf Feb 21, 2025
f035999
create sessions.md; move "workshops at a conference" there; overhaul …
mschrumpf Feb 21, 2025
21d15d8
sessions.md: start overhauling option b
mschrumpf Feb 24, 2025
db012ba
sessions.md: overhault option c and intro
mschrumpf Feb 25, 2025
67c48c4
overhaul restricted-audience.md
mschrumpf Feb 26, 2025
b02aa8e
index.md: improve section on mixed taxation
mschrumpf Feb 26, 2025
388c996
fix formatting
mschrumpf Feb 26, 2025
cb3cbd7
add screenshots for sessions.md
mschrumpf Feb 26, 2025
11d5994
minor corrections
mschrumpf Feb 26, 2025
1de36e9
discounts.md: implement comments
mschrumpf Mar 21, 2025
8892a6b
taxes.md: implement comments
mschrumpf Mar 21, 2025
194f760
sessions.md: implement comments
mschrumpf Mar 21, 2025
565c598
rewrite section on categories; make it clear that categories are opti…
mschrumpf Apr 7, 2025
ccf652e
rewrite section on categories; make it clear that categories are opti…
mschrumpf Apr 7, 2025
282c029
overhaul ### Time slots , #### Creating slots, and #### Enabling the …
mschrumpf Apr 7, 2025
9056e99
overhaul section #### Check-in
mschrumpf Apr 8, 2025
81b60f5
overhaul section ### Season tickets and #### Option A: Memberships an…
mschrumpf Apr 8, 2025
b88bbe6
overhaul #### Option B: All-access in a single pass
mschrumpf Apr 8, 2025
7e725b1
small corrections
mschrumpf Apr 8, 2025
23d9509
add and update screenshots; improve instructions on creating time slo…
mschrumpf Apr 8, 2025
028f458
add and update screenshots
mschrumpf Apr 8, 2025
7fd9edd
add missing word
mschrumpf Apr 8, 2025
266e149
Apply suggestions from code review
mschrumpf Jun 5, 2025
50a0569
Update docs/guides/products/discounts.md
mschrumpf Jun 5, 2025
242110f
Update docs/guides/products/discounts.md
mschrumpf Jun 5, 2025
93b6c29
discounts.md: Implement comments
mschrumpf Jun 5, 2025
148fa14
index.md: implement comments
mschrumpf Jun 5, 2025
d26672f
Explain difference between cross-selling and add-on products
mschrumpf Jun 5, 2025
54e9225
Reverse order in last segment
mschrumpf Aug 19, 2025
d731b56
Move ### Group discounts to the front
mschrumpf Aug 19, 2025
126292d
Implement comments
mschrumpf Aug 19, 2025
414ac98
Implement comments
mschrumpf Aug 20, 2025
ed4685c
Differentiate ### Season tickets into three options
mschrumpf Aug 20, 2025
c0320f1
Improve ### Season tickets
mschrumpf Aug 21, 2025
49273a0
Add condition to prevent abuse of season pass under option C
mschrumpf Aug 22, 2025
bd4e37a
index.md: Remove tax warning
mschrumpf Sep 8, 2025
a820cb7
Do more work on ### Season tickets
mschrumpf Sep 9, 2025
8766da8
Do more work on ### Season tickets
mschrumpf Sep 10, 2025
9b93d3f
Implement comments
mschrumpf Sep 19, 2025
b8ba9f2
Implement comments
mschrumpf Oct 16, 2025
1ee579f
Implement comments
mschrumpf Oct 16, 2025
981fcdd
Rework 'Mixed taxation' according to comments
mschrumpf Oct 16, 2025
5a0cb39
Archive option A, adapt text accordingly
mschrumpf Oct 16, 2025
eeaa107
Explain Mixed taxation (tax added on top of price)
mschrumpf Oct 17, 2025
729da49
Implement comment
mschrumpf Oct 17, 2025
f04fc8e
Implement comments
mschrumpf Oct 17, 2025
d1a891f
remove old products.md
mschrumpf Oct 23, 2025
72f7b02
Fix link to tax warning
mschrumpf Oct 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/screens/event-series/create-times.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/screens/event/create-series.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/screens/organizer/customer-accounts.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/screens/products/add-on.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/screens/products/membership-type.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/screens/products/require.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
2 changes: 1 addition & 1 deletion docs/guides/plugins/getyourguide.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ First of all, you need to make the decision on how you are planning on selling y

Of course, in addition to creating products, you will also need to add them to a quota for them to be available for sale.
The process for doing this is the very same as for any regular event or event series.
If you want to learn more on how to handle taxes in pretix, refer to our guide on [products](../products.md).
If you want to learn more on how to handle products in pretix, refer to our guide on [products](../products/index.md).

!!! Note
When selling individual tickets through GetYourGuide, you will not be able to offer differing quantities for individual ticket categories.
Expand Down
556 changes: 0 additions & 556 deletions docs/guides/products.md

This file was deleted.

3 changes: 3 additions & 0 deletions docs/guides/products/.pages
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
nav:
- ... | index*.md
- ...
311 changes: 311 additions & 0 deletions docs/guides/products/discounts.md

Large diffs are not rendered by default.

364 changes: 364 additions & 0 deletions docs/guides/products/index.md

Large diffs are not rendered by default.

43 changes: 43 additions & 0 deletions docs/guides/products/restricted-audience.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Restricted audience

Not all events are for everyone.
Sometimes, there is a good reason to restrict access to your event or [parts of your event](sessions.md) only to a specific group of people.
There are several ways to implement this with pretix.
This article will guide you through all of them.

## Option A: Required voucher codes

You can use vouchers to make a product (or multiple products) only available to a select group of invited guests.
Refer to [Vouchers: Exclusive product availability](../vouchers.md#exclusive-product-availability) for detailed instructions.

## Option B: Order approvals

If you do not know individual members of your audience already, but still want to restrict it to a certain group, you can require approval for orders.
This is useful if you are offering discounts or free products for certain groups such as press or students.
Requiring approval allows you to check your customers' status as members of that group before confirming the order.

In order to require approval for a product, navigate to :navpath:Event → :fa3-ticket: Products → Products: and edit your admission products.
On the :btn:General: tab, scroll to the bottom of the page and check the box next to "Buying this product requires approval".
Customers will be able to place an order for such a product, but cannot proceed to payment without you having approved the order.

Orders waiting for approval behave like orders waiting for payment.
Once a customer orders them, they are reserved in the quota and, if a seating plan exists, in the seating plan.

!!! Note
The setting "Buying this product requires approval" affects the whole order.
If a customer orders several products and one or more of them require approval, then the whole order will require approval.
If you have to deny approval, then you may also have to split the order.

In order to review incoming orders, navigate to :navpath:Your event → :fa3-shopping-cart: Orders → All orders:.
Manually approve or decline each order that contains a product that requires approval.
Once you have done that, the customer will receive an email notifying them that their order has been approved and they can proceed to payment.

The main downside of this approach is that your customers will have to interact with the ticket shop twice: once for placing the order, and once for paying.
This downside does not affect entirely free orders because the payment step is not necessary for those.
The main advantage of this method is that it gives you control over who attends the event for each individual order.

## Option C: Registered customers & memberships

You can restrict your event to a certain group by requiring a membership for purchasing a ticket.
Refer to the article on [customer accounts](../customer-accounts.md) for instructions on how to set this up.
You can find more information on granting and requiring memberships under [season tickets](index.md#option-a-memberships-and-multiple-tickets).
99 changes: 99 additions & 0 deletions docs/guides/products/sessions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Sessions

Your event may be made up of several smaller events ("sessions") with more limited capacities, with attendees being able to pick and choose which of these sessions they want to attend.
If you are planning a conference with multiple workshops, a celebration with a variety of activities, or a similar event, you may need a way to control access to those sessions.

pretix offers you two methods to do this.
You can either use add-on products with fixed time slots, or a plugin with advanced functions for variable time slots.
This article will guide you through both methods.

If you have deviating prices for some of the sessions, or each session can only be attended by a limited number of people, you should use [add-on products](sessions.md#option-a-add-on-products-with-fixed-time-slots).

If you have deviating prices and you also have sessions with varying start and end times that cannot be neatly organized into time slots because of overlap, you should use the [agenda constraints plugin](sessions.md#option-b-add-on-products-with-variable-time-slots).

If you are not planning sessions that all take place within the scope of one big main event, but a series of events that can be attended individually, refer to our article on [event series](../event-series.md) instead.

## Option A: Add-on products with fixed time slots

If you are offering a large number of sessions, are working with space constraints at your venue, or want to charge extra for at least one of the sessions, then you should use add-on products with fixed time slots.
This section tells you how to do that.

First, create at least one basic admission product for your event and a category for add-on products.
Then, create a new product for your first time slot.
Add it to the add-on category you just created, select "Product with multiple variations" and set the price to zero.
Open the "Variations" tab and create one variation for each session taking place within that time slot.
Repeat these steps for each time slot and session at your event.

For illustrative purposes, assume you are hosting a conference with workshops that can only be attended by a maximum of 20 people.
The schedule looks like this:

| Time | Room A | Room B |
|---------------------|------------|--------------------------------|
| Wednesday morning | Lecture | |
| Wednesday afternoon | Workshop A | Workshop B |
| Thursday morning | Workshop C | Workshop D (€20 additional charge) |

In addition to the basic admission products for this conference, you also have to create the following products:

- A category called "Workshops" with the box next to "Products in this category are add-on products" checked
- A free product called "Wednesday afternoon" in the "Workshops" category with two variations:
- Workshop A
- Workshop B
- A product called "Thursday morning" in the "Workshops" category with two variations:
- Workshop C (free)
- Workshop D (€20)
- One quota for each additional product (workshop), each with a total capacity of 20

!["Edit product" page, on the "Add-ons" tab. The category "Workshops" is selected. The minimum number is 0 and the maximum is 2](../../assets/screens/products/add-on.png "Add Add-Ons to product")

After you have created these categories, products, and quotas, edit your basic admission tickets and open the :btn:Add-ons: tab.
Add an add-on from the "Workshops" category with "Minimum number" of 0 and a "Maximum number" of 2 and click the :btn:Save: button.
This enables your customers to choose which of the workshops they want to attend.
It also allows you to track planned attendance numbers through the quotas for each workshop.

## Option B: Add-on products with variable time slots

<!-- md:hosted -->
<!-- md:enterprise -->

!!! Note
You can use the agenda constraints plugin on pretix Hosted with no extra charge.
If you are interested in using it with pretix Enterprise, please contact sales@pretix.eu.
You cannot use the agenda constraints plugin on pretix Community.

If the sessions at your event have overlapping start and end times and cannot be neatly organized into time slots, you can solve this issue with the "Agenda constraints" plugin.
One example for a schedule which would necessitate the use of the agenda constraints plugin is the following:

| Time | Room A | Room B |
|-------------|--------------------------|--------------------------|
| 09:00-11:00 | Talk 1 | Workshop 1 (first half) |
| 11:00-13:00 | Talk 2 | Workshop 1 (second half) |
| 14:00-16:00 | Workshop 2 (first half) | Talk 3 |
| 16:00-18:00 | Workshop 2 (second half) | Talk 4 |

In this example, Workshops 1 and 2 are twice as long as the talks.
Thus, it makes no sense to implement this schedule with add-on products as described under [option A](sessions.md#option-a-add-on-products-with-fixed-time-slots).
This would either result in customers having to book each half of the workshops individually, or in allowing them to book combinations of overlapping sessions which they cannot attend.
You can handle more complicated schedules like this one with the agenda constraints plugin.

In order to activate that plugin, navigate to :navpath:Your Event → :fa3-wrench: Settings → Plugins: and open the :btn:Features: tab.
Search for the "Agenda constraints" plugin in the list and click the :btn:Enable: button next to it.

!["Edit product" page, on the "Additional settings" tab. Options for "Start date" and "End date" are displayed, and a date and time has been entered for each.](../../assets/screens/products/agenda-constraints.png "Agenda constraints on product")

Create a category for session tickets and check the box next to "Products in this category are add-on products".
Create a product for each individual session, add it to the sessions category and switch to the :btn:Additional settings: tab.
Use the fields "Start date" and "End date" to define the span of time in which the session is taking place.
Create a quota for each of the session add-on products, with the total capacity of the quota reflecting the maximum number of attendees for each session.

!!! Note
The "Agenda constraints" plugin only checks for scheduling conflicts between products of the same category.
Put all products for sessions that may overlap with each other in the same category.

Edit the basic admission tickets for your event and open the :btn:Add-ons: tab.
Add an add-on from the sessions category with a "Minimum number" of 0 and a "Maximum number" equal to or greater than the largest possible number of workshops a guest can attend.
Click the :btn:Save: button.

This enables your customers to choose which of the workshops they want to attend.
The "Start date" and "End date" you defined for each add-on product will restrict which combinations of sessions your customers can book.
You can limit planned attendance numbers through the quotas for each workshop.
78 changes: 75 additions & 3 deletions docs/guides/taxes.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ Provide a translation for each language you are using.
Optionally, you may choose an "Internal name" that will only be displayed in the backend.

Under "Tax rate", choose a rate in percent.
For example, if your products are sold with the regular value-added tax rate in Germany, set the "Tax rate" to 19%.
For example, if your products are sold with the regular value-added tax rate in Germany, set the "Tax rate" to 19.00%.

The box next to "The configured product prices include the tax amount" determines whether the price of a product with this tax rule is handled as its net price (before tax) or its gross price (after tax).

By default, this box is checked, so all product prices with this tax rule are handled as gross prices (tax is included in the price).
This means that a product with a listed price of €10.00 and a tax rate of 19% has a net price of €8.40, €1.60 worth of value-added tax, and a total gross price of €10.00.
This means that a product with a listed price of €10.00 and a tax rate of 19.00% has a net price of €8.40, €1.60 worth of value-added tax, and a total gross price of €10.00.

If you uncheck this box, all product prices with this tax rule are handled as net prices (tax is added on top of the listed price).
A product with a price of €10.00 and a 19% tax rule will have €1.90 worth of taxes added on top of the net price, leading to a gross price of €11.90.
A product with a price of €10.00 and a 19.00% tax rule will have €1.90 worth of taxes added on top of the net price, leading to a gross price of €11.90.
This setting applies to all products that use this specific tax rule.
It does **not** apply to all products in your shop.

Expand Down Expand Up @@ -178,6 +178,78 @@ In the "Sales tax" drop-down menu, select the tax rule that you want to assign t
This list will use the internal name you specified on the tax rules settings page and the specified percentage.
Once you have made your selection, click the :btn:Save: button.

#### Mixed taxation (tax included in price)

{% include "warning-tax-rules.md" %}

This section explains how to implement a mixed tax situation for a single product.
pretix allows you to do this by creating a product with the full price and one tax rate, and then bundling products with different tax rates into that first product.

!!! Note
This section assumes your shop works with tax included in the product price.
Check the box next to "The configured product prices include the tax amount" on all of your tax rules.
If you have unchecked this box on all of your tax rules, refer to the section [Mixed taxation (tax added on top of price)](taxes.md#mixed-taxation-tax-added-on-top-of-price).

Create a new product.
Give it a descriptive name and assign one of the relevant tax rates.
Which of the tax rates you assign is irrelevant.
Assign this product the total price of the combination of differently taxed products.
This price represents the full price of the bundle.
Neither the prices of the other bundled products nor the "Designated price part" setting have an influence on the total price of the combination.

Create another new product.
Assign it a different tax rate.
The price you assign to this product is irrelevant.
Switch to the :btn:Availability: tab, check the box next to "Only sell this product as part of a bundle" and click the :btn:Save: button.
If you need more than two different tax rates in a single bundle, repeat this step for every additional tax rate.

Edit the ticket with the full price, switch to the :btn:Bundled products: tab and click the :btn-icon:fa3-plus: Add a new bundled product: button.
Choose one of the other products you created under "Bundled product" and set the "Designated price part".
The "Designated price part" determines how much of the bundle's full price is taxed at the rate assigned to the product.
pretix assumes that the "Designated price part" for bundled products already includes tax.

Repeat this step for each product with a diverging tax rate that you want to include in this bundle.
Then, click the :btn:Save: button.

For illustrative purposes, assume you are organizing an educational event for a charitable organization in Germany and you have permission to charge a reduced tax rate of 7.00% for that event.
However, the admission ticket price also automatically includes catering, which is still taxed at a rate of 19.00%.
The tax situation may look something like this:

- event ticket price: €450 gross total (including €150 for food)
- including €19.63 VAT at 7.00%
- including €23.95 VAT at 19.00%

If you want to depict this tax situation using the method described above, create the following two products:

- "Event ticket" with a price of €450 and a tax rate of 7.00%
- "Catering" with a price of €150, a 19.00% tax rule and the box “Only sell this product as part of a bundle" checked

Then, select the "Event ticket" and open the :btn:Bundled products: tab.
Add the "Catering" product and enter a "Designated price part" of €150.

When a customer purchases the event ticket, the catering will be added as a bundled product automatically.
The product price of €450 will be split into the two components.
€300 will be taxed at 7.00% and €150 will be taxed at 19.00%.

#### Mixed taxation (tax added on top of price)

This section explains how to implement mixed taxation if your pretix shop uses tax rules that add tax on top of the displayed price of the products.
Follow the instructions under [Mixed taxation (tax included in price)](taxes.md#mixed-taxation-tax-included-in-price) in everything except pricing.
If the boxes next to "The configured product prices include the tax amount" are unchecked on all of your tax rules, then configuring prices for mixed taxation is more complex.

pretix assumes that the "Designated price part" for bundled products already includes tax.
Thus, you need to calculate price after tax for bundled products yourself.

Multiply the intended price before tax with the applying tax rate.
Add the result to the intended price before tax.
Edit the product into which you are bundling the other products.
Switch to the :btn:Bundled products: tab.
Enter the number you calculated (net price + tax) into the field "Designated price part".

Repeat these steps for every product you are adding to the bundle.
Add all amounts you entered in the "Designated price part" fields to the price before tax of the base ticket.
Then, switch to the :btn:Price: tab and enter the sum of those amounts in the "Default price" field.

## Troubleshooting

### Appropriate tax rule does not appear in the drop-down menu
Expand Down