Skip to content

Products overhaul #77

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 36 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 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
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
- ...
291 changes: 291 additions & 0 deletions docs/guides/products/discounts.md

Large diffs are not rendered by default.

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

Large diffs are not rendered by default.

28 changes: 28 additions & 0 deletions docs/guides/products/restricted-audience.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# 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 only to a specific, invited group.
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, e.g. people with a given profession, edit your admission products 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.

Navigate to :navpath:Your event → :fa3-shopping-cart: Orders → All orders: and 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.
On the other hand, 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).
116 changes: 116 additions & 0 deletions docs/guides/products/sessions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# 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 several methods to do this: simply adding a mandatory question to be asked with every order, add-on products with fixed time slots, or a plugin with advanced functions for variable time slots.
This article will guide you through all three of them.

If your event's schedule is small and straightforward, all sessions are included in the basic admission price, and you do not need to keep track of who attends which session, you should use [questions](sessions.md#option-a-questions).

If your event's schedule is large, 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-b-add-on-products-with-fixed-time-slots).

If the above conditions apply 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-c-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: Questions

If you are only offering a limited number of sessions and are not faced with a realistic risk of overcrowding in any of them, you can create a multiple-choice question.
Customers will be prompted to answer this question while placing their order.
This has the upside of making it easy for users to change their mind later on.
It can also be set up fairly quickly.
However, this method will not allow you to restrict the number of attendees signing up for a given session.
It will also not allow you to charge extra for any of the sessions.

![Question set up according to the instructions below, with answer options for "Workshop A" and "Workshop B"](../../assets/screens/products/question-sessions.png "Question for sessions")

In order to set up a question, navigate to :navpath:Event → :fa3-ticket: Products → Questions: and click the :btn-icon:fa3-plus:Create a new question: button.
Under "Question", add text for each language that your shop uses.
This text will be displayed to the customer while they are making their purchase.
The "Question" could read something like: "Which workshop do you want to attend in the 10 AM time slot?"

For "Question type", select "Choose one from a list".
For "Products", select every product during the purchase of which the question should be asked—typically, this wil apply to any basic admission product for your event.
If you check the box next to "Required question", then your customers will be forced to make a choice here.
Your ticket shop will not allow them to proceed without making a selection.
Click :btn-icon:fa3-plus:Add a new option: and add an answer option for each session that is going to be offered at your event.

## Option B: 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 C: Add-on products with variable time slots

<!-- md:hosted -->

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 B](sessions.md#option-b-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 attendants for each session.

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.

!!! Note

The agenda constraints plugin is currently only available on pretix Hosted.
If you are interested in using it with pretix Enterprise, please contact sales@pretix.eu.
51 changes: 47 additions & 4 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 @@ -158,7 +158,7 @@ Confirm your choices by clicking the :btn:Perform changes: button.
Modifying tax status back and forth may introduce rounding errors of up to one cent from the intended price.
This is unavoidable due to the flexible nature in which prices are being calculated.

### Assigning tax rules
sp### Assigning tax rules

![Create product dialog. The last option is a dropdown menu labeled 'Sales tax'. The current selection is 'No taxation'. At the bottom of the page, there is a button labeled 'Save and continue with more settings'.](../assets/screens/tax/create-product.png "Create product dialog" )

Expand All @@ -178,6 +178,49 @@ 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

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

This section explains how to implement a mixed tax situation for a single product.
pretix allows you to do this by combining several products, each with their own tax rate, into a single bundle.

Create one product for each relevant tax rate.
Assign each product a different tax rate.
For all products except one, 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.
Skip this step for the last of the products you created.

Assign this product the total price of the combination of differently taxed products.
Its price represents the full price of the bundle.
The price does **not** result out of the addition of the price parts.

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".
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, let's say 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% that event.
However, the admission ticket price also includes catering, which is still taxed at a rate of 19.00%.
The tax situation may look something like this:

- event ticket price: €450 (including €150 for food)

- including €19.63 VAT at 7.00%
- incl. €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%, just as intended.

## Troubleshooting

### International business customer places order without VAT ID
Expand Down