diff --git a/docs/assets/screens/check-in/advanced.png b/docs/assets/screens/check-in/advanced.png new file mode 100644 index 000000000..a9590cda9 Binary files /dev/null and b/docs/assets/screens/check-in/advanced.png differ diff --git a/docs/assets/screens/check-in/before.png b/docs/assets/screens/check-in/before.png new file mode 100644 index 000000000..6860644c6 Binary files /dev/null and b/docs/assets/screens/check-in/before.png differ diff --git a/docs/assets/screens/check-in/check-in-lists.png b/docs/assets/screens/check-in/check-in-lists.png new file mode 100644 index 000000000..b448ef55c Binary files /dev/null and b/docs/assets/screens/check-in/check-in-lists.png differ diff --git a/docs/assets/screens/check-in/default.png b/docs/assets/screens/check-in/default.png new file mode 100644 index 000000000..06374e0e0 Binary files /dev/null and b/docs/assets/screens/check-in/default.png differ diff --git a/docs/assets/screens/check-in/fast-lane.png b/docs/assets/screens/check-in/fast-lane.png new file mode 100644 index 000000000..79520d0a7 Binary files /dev/null and b/docs/assets/screens/check-in/fast-lane.png differ diff --git a/docs/assets/screens/check-in/merch-table.png b/docs/assets/screens/check-in/merch-table.png new file mode 100644 index 000000000..53820accf Binary files /dev/null and b/docs/assets/screens/check-in/merch-table.png differ diff --git a/docs/assets/screens/check-in/minimum.png b/docs/assets/screens/check-in/minimum.png new file mode 100644 index 000000000..c0a709b83 Binary files /dev/null and b/docs/assets/screens/check-in/minimum.png differ diff --git a/docs/assets/screens/check-in/multiple-full.png b/docs/assets/screens/check-in/multiple-full.png new file mode 100644 index 000000000..34f7a1548 Binary files /dev/null and b/docs/assets/screens/check-in/multiple-full.png differ diff --git a/docs/assets/screens/check-in/multiple-infobox.png b/docs/assets/screens/check-in/multiple-infobox.png new file mode 100644 index 000000000..3c19ff9d3 Binary files /dev/null and b/docs/assets/screens/check-in/multiple-infobox.png differ diff --git a/docs/assets/screens/check-in/multiple-visualization.png b/docs/assets/screens/check-in/multiple-visualization.png new file mode 100644 index 000000000..f3dfb8c92 Binary files /dev/null and b/docs/assets/screens/check-in/multiple-visualization.png differ diff --git a/docs/assets/screens/check-in/single-day.png b/docs/assets/screens/check-in/single-day.png new file mode 100644 index 000000000..a81b09fac Binary files /dev/null and b/docs/assets/screens/check-in/single-day.png differ diff --git a/docs/assets/screens/check-in/time-span.png b/docs/assets/screens/check-in/time-span.png new file mode 100644 index 000000000..2051953be Binary files /dev/null and b/docs/assets/screens/check-in/time-span.png differ diff --git a/docs/assets/screens/check-in/two-days.png b/docs/assets/screens/check-in/two-days.png new file mode 100644 index 000000000..8d1278dd6 Binary files /dev/null and b/docs/assets/screens/check-in/two-days.png differ diff --git a/docs/assets/screens/check-in/visualize.png b/docs/assets/screens/check-in/visualize.png new file mode 100644 index 000000000..edbd3a64e Binary files /dev/null and b/docs/assets/screens/check-in/visualize.png differ diff --git a/docs/assets/screens/check-in/workshop.png b/docs/assets/screens/check-in/workshop.png new file mode 100644 index 000000000..bedff4993 Binary files /dev/null and b/docs/assets/screens/check-in/workshop.png differ diff --git a/docs/assets/screens/event-series/calendar-views.png b/docs/assets/screens/event-series/calendar-views.png new file mode 100644 index 000000000..6303a3972 Binary files /dev/null and b/docs/assets/screens/event-series/calendar-views.png differ diff --git a/docs/assets/screens/event-series/create-multiple-example2.png b/docs/assets/screens/event-series/create-multiple-example2.png new file mode 100644 index 000000000..3696c8a94 Binary files /dev/null and b/docs/assets/screens/event-series/create-multiple-example2.png differ diff --git a/docs/assets/screens/event-series/create-times.png b/docs/assets/screens/event-series/create-times.png new file mode 100644 index 000000000..bad2b3394 Binary files /dev/null and b/docs/assets/screens/event-series/create-times.png differ diff --git a/docs/assets/screens/event/create-series.png b/docs/assets/screens/event/create-series.png new file mode 100644 index 000000000..1f9deb99c Binary files /dev/null and b/docs/assets/screens/event/create-series.png differ diff --git a/docs/assets/screens/organizer/customer-accounts.png b/docs/assets/screens/organizer/customer-accounts.png index 696d6bb63..b5b1bbb2f 100644 Binary files a/docs/assets/screens/organizer/customer-accounts.png and b/docs/assets/screens/organizer/customer-accounts.png differ diff --git a/docs/assets/screens/products/add-on.png b/docs/assets/screens/products/add-on.png new file mode 100644 index 000000000..537f2bcd0 Binary files /dev/null and b/docs/assets/screens/products/add-on.png differ diff --git a/docs/assets/screens/products/agenda-constraints.png b/docs/assets/screens/products/agenda-constraints.png new file mode 100644 index 000000000..0a0f3d5ff Binary files /dev/null and b/docs/assets/screens/products/agenda-constraints.png differ diff --git a/docs/assets/screens/products/check-in-rules-combination-products.png b/docs/assets/screens/products/check-in-rules-combination-products.png new file mode 100644 index 000000000..7a3efd8d7 Binary files /dev/null and b/docs/assets/screens/products/check-in-rules-combination-products.png differ diff --git a/docs/assets/screens/products/membership-type.png b/docs/assets/screens/products/membership-type.png new file mode 100644 index 000000000..229c00f22 Binary files /dev/null and b/docs/assets/screens/products/membership-type.png differ diff --git a/docs/assets/screens/products/product-creates-membership.png b/docs/assets/screens/products/product-creates-membership.png new file mode 100644 index 000000000..467a63339 Binary files /dev/null and b/docs/assets/screens/products/product-creates-membership.png differ diff --git a/docs/assets/screens/products/question-sessions.png b/docs/assets/screens/products/question-sessions.png new file mode 100644 index 000000000..c66420768 Binary files /dev/null and b/docs/assets/screens/products/question-sessions.png differ diff --git a/docs/assets/screens/products/require.png b/docs/assets/screens/products/require.png new file mode 100644 index 000000000..d2ced19b6 Binary files /dev/null and b/docs/assets/screens/products/require.png differ diff --git a/docs/assets/screens/products/time-slot-check-in-rule.png b/docs/assets/screens/products/time-slot-check-in-rule.png new file mode 100644 index 000000000..826b17fa1 Binary files /dev/null and b/docs/assets/screens/products/time-slot-check-in-rule.png differ diff --git a/docs/assets/screens/products/timeslots_checkinlists1.png b/docs/assets/screens/products/timeslots_checkinlists1.png deleted file mode 100644 index 0c6ec34e8..000000000 Binary files a/docs/assets/screens/products/timeslots_checkinlists1.png and /dev/null differ diff --git a/docs/guides/check-in/.nav.yml b/docs/guides/check-in/.nav.yml new file mode 100644 index 000000000..244d7aa5f --- /dev/null +++ b/docs/guides/check-in/.nav.yml @@ -0,0 +1,5 @@ +title: Check-In + +nav: + - Check-In: index.md + - "*" \ No newline at end of file diff --git a/docs/guides/check-in/check-in-lists.md b/docs/guides/check-in/check-in-lists.md new file mode 100644 index 000000000..e202c261a --- /dev/null +++ b/docs/guides/check-in/check-in-lists.md @@ -0,0 +1,157 @@ +# Check-In Lists + +This article tells you how to create, configure, and use check-in lists. +Check-in lists keep track of who attends your event. +In most cases, you need one check-in list for every separate area with its own entrance at your event. +If there is one venue with multiple entrances, then one shared check-in list for all entrances is enough. +If you have separate entrances for separate products, such as fast lane access or VIP tickets, then you will need one check-in list for every entrance. + +Check-in lists operate independently from one another. +A ticket is valid once on every check-in list that includes it. +If you are hosting subevents with more exclusive attendance, then each of those subevents will need its own check-in list. + +We recommend using the [pretixSCAN](https://pretix.eu/about/en/scan) app running on dedicated devices for your check-in. +It is by far the most convenient method. +You can also do a manual check-in through the backend, or you can print your lists and check people in with a pen and paper. + +## Prerequisites + +Check-in lists are handled on the event level, so you have to create an event first. + +## General usage + +This section explains how to set up and configure check-in lists. + +Creating an event also automatically creates a check-in list named "Default". +This check-in list includes all your products. +If your event only has one area and there are no separate merch tables, no separate sessions, no fast lane access and no VIP tickets, then this list is enough. +You do not need to make any changes to it. + +However, if your event does include any of those things, then you need to configure the default check-in list and create new check-in lists. + +In order to view the "Default" list, make changes to it, or create new lists, navigate to :navpath:Your event → :fa3-check-square-o: Check-in:. +This lands you on the "Check-in lists" page. + +!['Check-in lists' page, including a text explanation and buttons for creating new lists, viewing connected devices, and resetting the check-in. There is a list of check-in lists that only contains the entry 'Default' with buttons for viewing, cloning, simulating, editing, and deleting the entry.](../../assets/screens/check-in/check-in-lists.png "Check-in lists page") + +The following sections guide you through the configuration of check-in lists for straightforward use cases and for more complex applications. +Assume, for example, that you are selling the following types of products: + + - basic access tickets + - fast lane tickets + - merchandise that your staff distributes to customers at a designated merch table + - registrations for exclusive workshops + - gift cards + +The following sections explain how to set up check-in lists to support all of these things. + +### Configuring a check-in list + +In order to configure a check-in list, click the :btn-icon:fa3-wrench:: button next to it. + +If you also want attendees who have not yet completed the payment for their order to be able to check in at your event, check the box next to "Include pending orders". + +The box next to "All products (including newly created ones)" is checked by default. +If all your products are admission products and there are no separate areas with their own entrances at your event, then you do not need to change that. +In any other case, uncheck the box and check the products you want to include on the list under "Limit to products". + +If you want to implement a use case similar to the example provided above, check the boxes next to your basic access tickets and leave all other boxes unchecked. +You would then use this list at the main entrance to your event. + +!['Check-in lists' page on the 'General' tab, displaying 'Default' in the name field and checkboxes for including pending orders, all products, or limiting the list to certain products. The standard ticket and discount ticket are checked and everything else is unchecked.](../../assets/screens/check-in/default.png "Edit check-in list default") + +Once you are done, click the :btn:Save: button. + +### Creating a new check-in list + +In order to create a new check-in list, navigate back to :navpath:Your event → :fa3-check-square-o: Check-in:. +Click the :btn-icon:fa3-plus: Create a new check-in list: button. +Enter a name for the new check-in list and check the boxes next to any tickets you want to include on it. + +If you want to implement a use case similar to the example provided above, name the check-in list "Fast lane". +Uncheck the box next to "All products (including newly created ones)" and under "Limit to products", check the boxes next to your fast lane tickets. +You would then use this list at the fast lane entrance at your event. + +!['Check-in list' page on the 'General' tab, displaying 'Fast lane' in the name field and checkboxes for including pending orders, all products, or limiting the list to certain products. The fast lane ticket is checked and everything else is unchecked.](../../assets/screens/check-in/fast-lane.png "Edit check-in list fast lane") + +Click the :btn:Save: button. + +A merchandise table may seem like a very different use case from a check-in, but a check-in list is still useful for keeping track of who has bought which merch, and who has picked it up already. + +If you want to create a check-in list for the merchandise table, repeat the creation process described above, name it "Merchandise" or something similar, and limit it to the merchandise products. + +!['Check-in list' page on the 'General' tab, displaying 'Merch table' in the name field and checkboxes for including pending orders, all products, or limiting the list to certain products. The sticker product is checked and everything else is unchecked.](../../assets/screens/check-in/merch-table.png "Edit check-in list merch table") + +If your event offers exclusive additional sessions such as workshops, create another check-in list for each of those workshops. +Give it a descriptive name and limit it to the workshop registration products. + +!['Check-in list' page on the 'General' tab, displaying 'Workshop' in the name field and checkboxes for including pending orders, all products, or limiting the list to certain products. The workshop registration product is checked and everything else is unchecked.](../../assets/screens/check-in/workshop.png "Edit check-in list merch table") + +Finally, since gift cards are only relevant for purchases and not for access to your event, you do **not** include gift cards on any of your check-in lists. + +## Applications + +This section explains how you can use check-in lists to manage the check-in at your event. + +### Check-in via pretixSCAN + +The most convenient and powerful method for checking in customers is using the pretixSCAN app. +Acquire a device with a scanner or camera, install pretixSCAN on it, connect it to your organizer account, and place it at the entrance to your event. +We will cover the specifics of using pretixSCAN in a dedicated article. + +### Manual check-in via backend + +!!! Note + This method is slow and only feasible if you are dealing with a low volume of customers. + We recommend using pretixSCAN instead. + +If you want to perform manual checks using the pretix backend, place a computer at the check-in. +You will need a stable internet connection and access to the pretix backend from that computer. +Take appropriate security measures so that only authorized personnel can use the computer. + +On that computer, open the pretix backend and navigate to :navpath:Your event → :fa3-check-square-o: Check-in → Check-in lists:. +In the list, click the check-in list on which you want to record check-ins. +The next page displays a list with all issued tickets. + +Ask attendees their name, email address, ticket code, or order code. +Use the "Search attendee" function or browse the list to locate the corresponding entry. +Check the box next to that entry and click the :btn-icon:fa3-sign-in: Check-In selected attendees (#): button. +It is possible to select multiple attendees and check them all in at once. + +### Paper check-in + +!!! Note + This method is slow and only feasible if you are dealing with a low volume of customers. + We recommend using pretixSCAN instead. + +If you want to print a check-in list, navigate to :navpath:Your event → :fa3-check-square-o: Check-in → Check-in lists:. +In the list, click the check-in list you want to print. +On the next page, click the :btn-icon:fa3-download: PDF: button. + +Alternatively, navigate to :navpath:Your event → :fa3-shopping-cart: Orders → Export: and click :btn:Check-in list (PDF):. + +Regardless of which path you take, you will land on a page titled "Data export – Check-in List (PDF)". +Under "Check-in list", select the list you want to export. +You can use the settings on this page to filter and sort the file export by certain parameters. +If you want to use the export for manual check-in, then you probably want an alphabetical list of all ticket holders. +Under "Check-in status", select "All attendees". +"Sort by" one of the attendee name options. + +Under "Include questions", select any questions that are relevant for check-in. +Once you are satisfied with your settings, click the :btn-icon:fa3-download: Start export: button. +Your browser will now download a PDF of the list or open it in a new tab. +The list includes the following columns: + + - a column containing a double exclamation mark `‼` for products that require special attention. + This cell is empty for products that do not have the "Requires special attention" setting activated. + - a box for checking off tickets. + This box will be checked for tickets that were already checked in via pretixSCAN or the backend before you exported the list. + - "Paid" contains a check for orders that have been paid. + - "Order" contains the order code. + - "Name" contains the attendee's name. + - "Product / Price" contains the name of the product and the price in parentheses. + - optional columns for questions you chose to include in the export + +Print the exported list, place it at your check-in, and check entries off the list manually as visitors appear. + +If you are looking for a faster method, we recommend using [pretixSCAN](https://pretix.eu/about/en/scan). \ No newline at end of file diff --git a/docs/guides/check-in/custom.md b/docs/guides/check-in/custom.md new file mode 100644 index 000000000..774b6ad1a --- /dev/null +++ b/docs/guides/check-in/custom.md @@ -0,0 +1,256 @@ +# Custom check-in rules + +This article explains how to set up custom check-in rules. +A custom check-in rule is always specific to one check-in list. +You can use custom check-in rules to place restrictions on the validity of tickets based on time, number of previous entries, ticket type, gate, and other conditions. +pretixSCAN will interpret these rules when scanning the ticket and arrive at the correct result automatically. + +## Prerequisites + +This article assumes that you have read [check-in lists](check-in-lists.md) and set up one or more basic check-in lists. +A basic understanding of predicate logic is helpful. +If the proposition `∀xP(x)` is meaningless to you, ask a philosopher, a linguist, an electrical engineer, or a programmer. +Alternatively, contact our support. +Do **not** ask a Sherlock Holmes fan. +They do not know the difference between induction and deduction. + +## General usage + +In order to add custom rules to a check-in list, navigate to :navpath:Your event → :fa3-check-square-o: Check-in:. +Click the change button :btn-icon:fa3-wrench:: next to the check-in list you want to edit. + +By default, pretixSCAN will recognize any ticket on the check-in list as valid as long as the ticket has been paid for and either the ticket has not been scanned before. +The app will also recognize the ticket as valid if it has been scanned and then scanned for exit, meaning the entry status is `absent`. +The exact behavior depends on your settings on the :btn:General: and :btn:Advanced: tabs on this page. + +!['Check-in lists' page on the 'Advanced' tab, displaying an infobox and a warning box. There are checkboxes for optional settings and an empty field labeled 'Automatically check out everyone at'.](../../assets/screens/check-in/advanced.png "Advanced options for check-in list default") + +If you want to place additional restrictions on a ticket for pretixSCAN to recognize it as valid, set up a custom check-in rule. +In order to do so, under "Custom check-in rule", on the :btn-icon:fa3-edit: Edit: tab, click the :btn-icon:fa3-plus-circle: Add condition: button. +A dropdown menu appears, listing types of conditions. + +### Adding a simple condition + +All conditions **except** `All of the conditions below (AND)` and `At least one of the conditions below (OR)` are simple conditions. +Depending on your use case, you may only need a single one of these simple conditions for your custom check-in rule. +If you need to set up more than one condition, then you need to organize these conditions using [AND- and OR-conditions](custom.md#organizing-conditions-with-and--and-or-brackets). + +Select a condition from the dropdown menu, for instance, `Current day of the week (1 = Monday, 7 = Sunday)`. +The page now displays an additional dropdown menu listing mathematical symbols for "equals", "greater than", "smaller than or equal to" and so on. +Select a symbol, for example, `<`. +The page now displays an additional field in which you can enter a number. +Enter a number, for example, `6`. +Click the :btn:Save: button. + +If you set up a condition as described in the example, then pretixSCAN will only recognize a ticket as valid if the current day of the week is less than 6, or in other words, only Monday through Friday. +pretixSCAN will reject tickets scanned on Saturday or Sunday. + +You can remove a simple condition by clicking the :btn-icon:fa3-trash:: delete button. +You can duplicate it by clicking the :btn-icon:fa3-copy:: clone button. + +### Organizing conditions with AND- and OR-brackets + +The most important types of conditions are `All of the conditions below (AND)` and `At least one of the conditions below (OR)`. +These conditions are special because they allow you to organize conditions into a complex logic for the check-in. +Adding one of these two conditions creates an AND-bracket or an OR-bracket to which you can add more conditions. + +If you select `All of the conditions below (AND)` from the dropdown menu and add conditions to the resulting AND-bracket, then all of those conditions must be fulfilled for pretixSCAN to recognize the ticket as valid. + +If you select `At least one of the conditions below (OR)` and add conditions to the resulting OR-bracket, then at least one of those conditions must be fulfilled for pretixSCAN to recognize the ticket as valid. +If multiple or even all conditions within the OR-bracket are fulfilled, then pretixSCAN will still recognize the ticket as valid. + +This may be counter-intuitive. +The condition `At least one of the conditions below (OR)` represents an [inclusive or](https://en.wikipedia.org/wiki/Logical_disjunction). +This is distinct from an [exclusive or](https://en.wikipedia.org/wiki/Exclusive_or), also known as XOR ("either one or the other"). +The custom check-in rule feature does not offer an "exclusive or" condition because its use would be very limited. + +You can create an AND- or an OR-bracket around an existing condition by clicking :btn:OR: or :btn:AND: next to the condition. +When hovering the mouse over nested brackets, the website will highlight AND-brackets in red, OR-brackets in green, and other conditions in purple. + +You can remove an AND- or OR-bracket **without** removing its contents by clicking the :btn-icon:fa3-cut:: cut button next to it. +You can remove it **along with all rules nested within it** by clicking the :btn-icon:fa3-trash:: delete button. +You can duplicate it along with all rules nested within it by clicking the :btn-icon:fa3-copy:: clone button. + +### Allowing multiple entries + +By default, pretixSCAN will only recognize a ticket as valid **once** if it has not been checked out in the meantime. +If you set up custom check-in rules that allow tickets to be used multiple times, then you also need to check the box next to "Allow multiple entries per ticket" further up on the same page. + +### Setting conditions specific to products or variations + +Whenever you set up a custom check-in rule using the condition "Product" or "Product variations", then you need to cover all products or product variations on the check-in list in that rule. + +For illustrative purposes, assume you have a check-in list called "Default" containing the products "Standard ticket" and "Discount ticket". +You set up a custom check-in rule with the condition `Product` `is one of` `Standard ticket`. +The page will now display the following infobox: + +> Your rule always filters by product or variation, but the following products or variations are not contained in any of your rule parts so people with these tickets will not get in: +> +> - Discount ticket. +> +> Please double-check if this was intentional. + +If you want the same conditions to apply to all products, add all remaining products to the condition you have already set up. +Click the field that already lists a product and select all products that are on this check-in list from the dropdown menu. + +If you want different conditions to apply to the other products, set up an OR-bracket at the base level. +Add an AND-bracket within that OR-bracket. +Add the following condition within the AND-bracket: `Product` `is one of` and then select all remaining products on the check-in list. +Add another simple condition of your choosing to the end-bracket. + +As soon as the custom check-in rule mentions every product on the check-in list at least once, the infobox will disappear. +pretixSCAN will not reject products outright anymore, but will recognize them as valid or invalid depending on the rule you set up. + +### Visualizing rules + +Visualizing rules can help you better understand the logic you set up. +It aids you in comprehending the possible conditional paths a ticket scan can take. + +After setting up your check-in rule, open the :btn-icon:fa3-eye: Visualize: tab. +This tab displays your custom check-in rule as a flowchart. +OR-brackets take the shape of branching paths. +AND-brackets are listed one after the other on the same path. +All paths end in a green :fa3-check-circle: checkmark, representing a successful validation. + +!['Check-in lists' page on the 'Advanced' tab, displaying a visualization of the custom rule. The path starts on the left and branches into two. Both paths contain two boxes and end in green checkmarks. The boxes on the top path read 'Product Season ticket' and 'Number of previous entries < 10'. The boxes on the bottom path read 'Product: Standard ticket, Discount ticket' and 'Number of previous entries = 0'.](../../assets/screens/check-in/visualize.png "Custom check-in rule visualization") + +If you want a full-screen view of the visualization, hover the mouse over the flowchart and click the :fa3-window-maximize: maximize button on the right. + +You cannot make any changes to the visualization itself. +If you want to make any further changes to your rule, click the btn-icon:fa3-edit: Edit:. + +### Date and time tolerances + +The condition`Current date and time` allows you to set tolerances. +This section explains how those tolerances work. + +A tolerance always extends to the opposite direction of the restriction you set. +The deciding factor is the selection you make in the second dropdown menu: `is before` or `is after`. +Assume, for example, that you select `Current date and time`, then `is after`, then `Event start` and set a tolerance of `10`. +In this case, attendees will be admitted up to ten minutes **before** the event has started. + +Assume, for example, that you select `Current date and time`, then `is before`, then `Event start` and set a tolerance of `10`. +In this case, attendees will be admitted up to ten minutes **after** the event has started. + +If you enter a tolerance of `0`, then pretixSCAN will recognize tickets in the exact time frame you define. + +## Applications + +This section guides you through some useful applications of custom check-in rules. + +### Allowing a specific number of entries per ticket + +This section explains how to set up a custom check-in rule to allow a certain number of entries per ticket. +Check the box next to "Allow multiple entries per ticket". + +Create an AND-bracket and add a condition within that bracket. +Select `Product`, then `is one of`, and then choose the products in question. +Add another condition, select `Number of previous entries` and then `<`. +Enter the number of total entries you want to allow, for instance, `10`. + +If your check-in list also contains products that the condition above does not include, then the page will now display an information box listing those products. +The logic now only allows entry for one type of product. + +![Custom check-in rule allowing entry if 'Product' 'is one of' 'Season ticket' AND 'Number of previous entries' '<' '9'. There is a blue infobox saying: 'Your rule always filters by product or variation, but the following products or variations are not contained in any of your rule parts so people with these tickets will not get in: Standard ticket, Discount ticket. Please double-check if this was intentional.](../../assets/screens/check-in/multiple-infobox.png "Custom check-in rule for multiple entries with infobox") + +In order to solve this problem, you need to add conditions that include the other tickets. +Click the :btn:OR: button in the top right. +This creates an OR-bracket around the conditions you previously created. + +Click the :btn-icon:fa3-plus-circle: Add condition: button located within the OR-bracket, but not within the AND-bracket. +Select `All of the conditions below (AND)` and add another condition directly below. +Select `Product`, then `is one of`, and then choose those products that the rule above does not cover. +Add another condition immediately below. +Select `Number of previous entries`, then `=`, and then `0`. + +![Custom check-in rule allowing entry if 'Product' 'is one of' 'Season ticket' AND 'Number of previous entries' '<' '9', or if 'Product' 'is one of' 'Standard ticket' or 'Discount ticket' AND 'Number of previous entries' '=' '0'.](../../assets/screens/check-in/multiple-full.png "Full custom check-in rule for multiple entries") + +With the setup in the screenshot, pretixSCAN will recognize the product "Season ticket" as valid as long as it has been used to enter less than ten times. +This allows up to ten uses of the ticket. +pretixSCAN will recognize the products "Standard ticket" and "Discount ticket" if they have been used 0 times, so only once in total. + +![Visualization of custom check-in rule with two paths. The first path has 'Product: Season ticket' and 'Number of previous entries < 10'. The second path has 'Product: Standard ticket, discount ticket' and 'Number of previous entries = 0'. Both paths end with green checkmarks.](../../assets/screens/check-in/multiple-visualization.png "Visualization of full custom check-in rule for multiple entries") + +### Allowing unlimited entries on a single day + +This section explains how to set up a custom check-in rule to allow a certain number of entries per ticket. +Check the box next to "Allow multiple entries per ticket". + +Create an AND-bracket and add a condition within that bracket. +Select `Product`, then `is one of`, and then choose the products in question. +Add an OR-bracket below. +Add a condition within the OR-bracket, select `Number of previous entries`, then `=`, and then `0`. +Add another condition within the OR-bracket, select `Number of previous entries since midnight`, then `≥`, and then `1`. + +![Custom check-in rule allowing entry if 'Product' 'is one of' 'Fast lane ticket' AND 'Number of previous entries' '=' '0', or 'Number of previous entries since midnight' '≥' '1'.](../../assets/screens/check-in/single-day.png "Custom check-in rule for unlimited entries on a single day") + +With the setup in the screenshot, pretixSCAN will recognize a product if it is being used for the first time, or if it has been used previously on the same day. +This allows for unlimited entries on a singular calendar day of the ticket holder's choosing. + +### Allowing entries on a specific number of days + +This section explains how to set up a custom check-in rule to allow entry on any specific number of days. +Check the box next to "Allow multiple entries per ticket". + +Create an AND-bracket and add a condition within that bracket. +Select `Product`, then `is one of`, and then choose the products in question. +Add an OR-bracket below. + +Add a condition within the OR-bracket, select `Number of days with a previous entry`, then `<`, and select the number of days on which you want to allow entry. +For instance, if you want to allow entry on any two days, select `2`. +Add another condition within the OR-bracket, select `Number of previous entries since midnight`, then `≥`, and then `1`. + +![Custom check-in rule allowing entry if 'Product' 'is one of' 'Standard ticket' or 'Discount ticket' AND 'Number of days with a previous entry' '<' '2', or 'Number of previous entries since midnight' '≥' '1'.](../../assets/screens/check-in/two-days.png "Custom check-in rule for unlimited entries on a specific number of days") + +With this setup, the ticket holder can enter as many times as they like, but only on two days of the event. + +### Setting a minimum time between entries + +This section explains how to set up a custom check-in rule to allow unlimited entries if a certain period of time has passed between entries. +Check the box next to "Allow multiple entries per ticket". + +Create an AND-bracket and add a condition within that bracket. +Select `Product`, then `is one of`, and then choose the products in question. +Add an OR-bracket below. +Add a condition within the OR-bracket, select `Number of previous entries`, then `=`, and then `0`. +Add another condition within the OR-bracket, select `Minutes since last entry (-1 on first entry)`, and then `>` + +Enter the number of minutes for the minimum period of time that must pass between entries. +For instance, if you want to allow entry after at least 2 hours, select `120`. + +![Custom check-in rule allowing entry if 'Product' 'is one of' 'Standard ticket' or 'Discount ticket' AND 'Number of previous entries' '=' '0', or 'Minutes since last entry (-1 on first entry)' '>' '120'.](../../assets/screens/check-in/minimum.png "Custom check-in rule for unlimited entries with a time of at least 120 minutes between them") + +With this setup, the ticket holder can enter as many times as they like, but only if 120 minutes or more have passed since the previous scan. + +### Allow entries for a specific time span + +This section explains how to set up a custom check-in rule to allow entries for a limited period of time after the first entry. +Check the box next to "Allow multiple entries per ticket". + +Create an OR-bracket and add a condition within that bracket. +Select `Product`, then `is one of`, and then choose the products in question. +Add another condition, select `Minutes since last first (-1 on first entry)`, and then `≤` + +Enter the number of minutes for which you want to allow entry after the ticket holder has had their ticket validated for the first time. +For instance, if you want to allow entry for 2 hours, select `120`. + +![Custom check-in rule allowing entry if 'Product' 'is one of' 'Standard ticket' or 'Discount ticket' AND 'Number of previous entries' '=' '0', or 'Minutes since last entry (-1 on first entry)' '≤' '120'.](../../assets/screens/check-in/time-span.png "Custom check-in rule for unlimited entries within a time span of 120 minutes") + +With this setup, the ticket holder can enter as many times as they like for 120 minutes after the first successful scan. + +### Allow unlimited entries only before the actual event + +This section explains how to set up a custom check-in rule to allow unlimited entries **before** the start of the event, but only limited entries during the event itself. +This can be useful if you want attendees to be able to access the venue while the event is being set up. +Check the box next to "Allow multiple entries per ticket". + +Create an OR-bracket and add a condition within that bracket. +Select `Current date and time`, then `is before`, then `Event start`, and enter a tolerance of `0`. +Create an AND-bracket below and add a new condition within that bracket. +Select `Current date and time`, then `is after`, then `Event start`, and enter a tolerance of `0`. +Create another condition within the AND-bracket. +Select `Number of previous entries since`, then `Event start`, then `=` and enter a tolerance of `0`. + +![Custom check-in rule allowing entry if 'Current date and time' 'is before' 'Event start' OR 'Current date and time' 'is after' 'Event start' AND 'Number of previous entries since' 'Event start' '=' '0'.](../../assets/screens/check-in/before.png "Custom check-in rule for unlimited entries before the event") + +With this setup, ticket holders will be able to enter however often they want before the start of the event, but only once after the event has started. \ No newline at end of file diff --git a/docs/guides/check-in/index.md b/docs/guides/check-in/index.md new file mode 100644 index 000000000..89e3d0bbb --- /dev/null +++ b/docs/guides/check-in/index.md @@ -0,0 +1,7 @@ +# Check-In + +The articles in this section explain how to use the tools that pretix offers you to set up the check-in at your event according to your requirements. + +**Check-in lists** keep track of who attends your event. +You need one check-in list for every entrance with a separate function at your event. +See the article on [check-in lists](check-in-lists.md) to learn more. \ No newline at end of file diff --git a/docs/guides/plugins/getyourguide.md b/docs/guides/plugins/getyourguide.md index e97269f5a..7a3923191 100644 --- a/docs/guides/plugins/getyourguide.md +++ b/docs/guides/plugins/getyourguide.md @@ -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. diff --git a/docs/guides/products.md b/docs/guides/products.md deleted file mode 100644 index 97f1ecf1f..000000000 --- a/docs/guides/products.md +++ /dev/null @@ -1,556 +0,0 @@ -# Product structure - -A product is anything sold via pretix: tickets, gift cards, conference t-shirts and so on. -pretix offers you almost unlimited possibilities for configuring and structuring products. -This article guides you through the basic process of creating a product and explains several practical applications of some of the more advanced features of pretix. - -## Prerequisites - -Products are configured on the event level, so you have to create an event first. - -## General usage - -This section guides you through the basic process of product creation. -This involves first creating categories, then the products themselves, and finally quotas. -You cannot create a product without choosing a category for it. -You cannot create a quota without adding at least one product to it. -Thus, this guide will explain those steps in that order. - -### Creating and editing categories - -![Page titled 'Product categories', showing a list of categories only containing 'Tickets' and a button for creating a new category.](../assets/screens/products/categories.png "Product categories screenshot") - -Categories separate standalone products from additional products. -If you want to sell not only admission tickets, but also extras such as stickers, you have to have at least two different categories. -You also need an extra category if you are planning to use the cross-selling feature. -Sorting products into categories can help you better keep track of them in the backend. -Finally, your shop page will display products grouped by categories which can help customers find the article they are looking for more easily. - -In order to edit categories, navigate to :navpath:Your event → :fa3-ticket: Products → Categories:. -This page shows the list of all product categories. - -Click the :btn-icon:fa3-plus: Create a new category: button and give the new category a descriptive name. -Choose the category type depending on the type of products in this category: normal, add-on, cross-selling, or normal + cross-selling. - -Normal products are standalone products that can be purchased directly. -Add-on products are products that are only offered as add-ons to normal products. -Cross-selling products are products that are only offered in the cross-selling step as a customer is purchasing other products. -Finally, products in the "normal + cross-selling" category are both offered as standalone products and in the cross-selling step. -The "Cross-selling condition" setting below determines how products in cross-selling and normal + cross-selling categories are offered in your shop. - -Click the :btn:Save: button at the bottom of the page. -This takes you back to the product categories page, which now also lists the newly created category. - -You can also edit an already existing category and change its name, description and type by clicking its name or the :btn-icon:fa3-edit:: edit button next to it in the list. - -### Creating and editing products - -![Page titled 'Products', showing a list of products containing two entries and a button for creating a new product.](../assets/screens/products/products.png "Products screenshot") - -If you want to create or edit products, navigate to :navpath:Event → :fa3-ticket: Products → Products:. -This page shows the list of all products. -Click the :btn-icon:fa3-plus: Create a new product: button. -Choose a name, a description, a default price and a sales tax and click the :btn:Save: button. - -You can also edit an already existing product by clicking its name or the :btn-icon:fa3-edit:: edit button next to it in the list. - -### Creating and editing quotas - -A quota determines how many instances of your product can be sold. -Every product has to be part of at least one quota before it becomes available in the shop. - -If you want to create or edit quotas, navigate to :navpath:Event → :fa3-ticket: Products → Quotas:. -This page shows the list of all quotas for the event as well as the total capacity and how many items are left for each quota. - -Click the :btn-icon:fa3-plus: Create a new quota: button. -Choose a name and a capacity, check the products to be contained in this quota, and any advanced options, and then click the :btn:Save: button. - -You can also edit an already existing quota by clicking its name or the :btn-icon:fa3-edit:: edit button next to it in the list. - -## Applications - -This section covers advanced use cases and how to implement them using the options pretix offers for customizing products. - -### Multiple price levels - -You may need more than a single price for admission tickets for your event—for example, if you are selling discount tickets for pensioners or students. -In order to do so, first create the basic admission ticket and configure it according to your requirements. -Then, clone the ticket once for each differing price level. -Adjust the name and the price of each cloned ticket. - -Add all products to one general quota. -Set the capacity of the quota to the maximum number of tickets you want to sell. - -If you want to place an additional limit on the number of discount tickets available, create another quota and set the capacity to the maximum number of discount tickets you want to sell. -Add only the discount tickets to this quota. -pretix will subtract from both quotas whenever a discount ticket is sold, and only subtract from the general quota when a regular ticket is sold. - -### Early-bird tiers based on dates - -Let's say you run a conference with the following pricing scheme: - - - 12 to 6 months before the event: € 450 - - 6 to 3 months before the event: € 550 - - closer than 3 months to the event: € 650 - -Of course, you could just set up one product and change its price at the given dates manually, but if you want to set this up automatically, here's how: - -Create three products (e.g. "super early bird", "early bird", "regular ticket") with the respective prices and one shared quota of your total event capacity. -Then, set the "available from" and "available until" configuration fields of the products to automatically activate and deactivate them for sale based on the current date. - -If you're in an event series, this will likely not help you since these dates would need to be the same for all dates in your series. -As an alternative, you can go to the "Dates" section of your event series, select one or more dates, and scroll down to the "product settings" section. -Here, you can also define availability times for individual products just for this date individually. - -### Early-bird tiers based on ticket numbers - -Let's say you run a conference with 400 tickets with the following pricing scheme: - - - First 100 tickets ("super early bird"): € 450 - - Next 100 tickets ("early bird"): € 550 - - Remaining tickets ("regular"): € 650 - -First of all, create three products: - - - "Super early bird ticket" - - "Early bird ticket" - - "Regular ticket" - -Then, create three quotas: - - - "Super early bird" with a size of 100 and the "Super early bird ticket" product selected. - At "Advanced options", select the box "Close this quota permanently once it is sold out". - - "Early bird and lower" with a size of 200 and both of the "Super early bird ticket" and "Early bird ticket" products selected. - At "Advanced options", select the box "Close this quota permanently once it is sold out". - - "All participants" with a size of 400, all three products selected and no additional options. - -Next, modify the product "Regular ticket". -In the section "Availability", you should look for the option "Only show after sellout of" and select your quota "Early bird and lower". -Do the same for the "Early bird ticket" with the quota "Super early bird ticket". - -This will ensure the following things: - - - Each ticket level is only visible after the previous level is sold out. - - As soon as one level is really sold out, it's not coming back, because the quota "closes", i.e. locks in place. - - By creating a total quota of 400 with all tickets included, you can still make sure to sell the maximum number of tickets, even if e.g. early-bird tickets are canceled. - -Optionally, if you want to hide the early bird prices once they are sold out, go to "Settings", then "Display" and select "Hide all products that are sold out". -Of course, it might be a nice idea to keep showing the prices to remind people to buy earlier next time ;) - -Please note that there might be short time intervals where the prices switch back and forth: -When the last early bird tickets are in someone's cart (but not yet sold!), the early bird tickets will show as "Reserved" and the regular tickets start showing up. -However, if the customers holding the reservations do not complete their order, the early bird tickets will become available again. -This is not avoidable if we want to prevent malicious users from blocking all the cheap tickets without an actual sale happening. - -### Workshops at a conference - -When running a conference, you might also organize a number of workshops with smaller capacity. -To be able to plan, it would be great to know which workshops an attendee plans to attend. - -#### Option A: Questions - -Your first and simplest option is to just create a multiple-choice question. -This has the upside of making it easy for users to change their mind later on, but will not allow you to restrict the number of attendees signing up for a given workshop – or even charge extra for a given workshop. - -#### Option B: Add-on products with fixed time slots - -The usually better option is to go with add-on products. -Let's take for example the following conference schedule, in which the lecture can be attended by anyone, but the workshops only have space for 20 persons each: - -| Time | Room A | Room B | -|---------------------|------------|--------------------------------| -| Wednesday morning | Lecture | | -| Wednesday afternoon | Workshop A | Workshop B | -| Thursday morning | Workshop C | Workshop D (20 € extra charge) | - -Assuming you already created one or more products for your general conference admission, we suggest that you additionally create: - - - A category called "Workshops" with the checkbox "Products in this category are add-on products" activated - - A free product called "Wednesday afternoon" within the category "Workshops" and with two variations: - - Workshop A - - Workshop B - - A free product called "Thursday morning" within the category "Workshops" and with two variations: - - Workshop C - - Workshop D with a price of 20 € - - Four quotas for each of the workshops - - One add-on configuration on your base product that allows users to choose between 0 and 2 products from the category "Workshops" - -#### Option C: Add-on products with variable time slots - -The above option only works if your conference uses fixed time slots and every workshop uses exactly one time slot. -If your schedule looks like this, it's not going to work great: - -| 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 | - -This issue can be solved 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. -Seek out the "Agenda constraints" plugin in the list and click the :btn:Enable: button next to it. - -Then, create a product (without variations) for every single part that should be bookable (talks 1-4 and long workshops 1 and 2) as well as appropriate quotas for each of them. - -All of these products should be part of the same category. -In your base product (e.g. your conference ticket), you can then create an add-on product configuration allowing users to add products from this category. - -If you edit these products, you will be able to enter the "Start date" and "End date" of the talk or workshop close to the bottom of the page. -If you fill in these values, pretix will automatically ensure no overlapping talks are booked. - -!!! Note - - This option is currently only available on pretix Hosted. - If you are interested in using it with pretix Enterprise, please contact sales@pretix.eu. - -### Discount packages - -Imagine you run a trade show that opens on three consecutive days and you want to have the following pricing: - - - Single day: € 10 - - Any two days: € 17 - - All three days: € 25 - -In this case, there are multiple different ways you could set this up with pretix. - -#### Option A: Combination products - -With this option, you just set up all the different combinations someone could by as a separate product. -In this case, you would need 7 products: - - - Day 1 pass - - Day 2 pass - - Day 3 pass - - Day 1+2 pass - - Day 2+3 pass - - Day 1+3 pass - - All-day pass - -Then, you create three quotas, each one with the maximum capacity of your venue on any given day: - - - Day 1 quota, linked to "Day 1 pass", "Day 1+2 pass", "Day 1+3 pass", and "All-day pass" - - Day 2 quota, linked to "Day 2 pass", "Day 1+2 pass", "Day 2+3 pass", and "All-day pass" - - Day 3 quota, linked to "Day 3 pass", "Day 2+3 pass", "Day 1+3 pass", and "All-day pass" - -This way, every person gets exactly one ticket that they can use for all days that they attend. -You can later set up check-in lists appropriately to make sure only tickets valid for a certain day can be scanned on that day. - -The benefit of this option is that your product structure and order structure stays very simple. -However, the two-day packages scale badly when you need many products. - -We recommend this setup for most setups in which the number of possible combinations does not exceed the number of parts (here: number of days) by much. - -#### Option B: Add-ons and bundles - -We can combine the two features "product add-ons" and "product bundles" to set this up in a different way. -Here, you would create the following five products: - - - Day 1 pass in a category called "Day passes" - - Day 2 pass in a category called "Day passes" - - Day 3 pass in a category called "Day passes" - - Two-day pass - - All-day pass - -This time, you will need five quotas: - - Day 1 quota, linked to "Day 1 pass" - - Day 2 quota, linked to "Day 2 pass" - - Day 3 quota, linked to "Day 3 pass" - - Two-day pass quota, linked to "Two-day pass" (can be unlimited) - - All-day pass quota, linked to "All-day pass" (can be unlimited) - -Then, you open the "Add-On" tab in the settings of the Two-day pass product and create a new add-on configuration specifying the following options: - - - Category: "Day passes" - - Minimum number: 2 - - Maximum number: 2 - - Add-Ons are included in the price: Yes - -This way, when buying a two-day pass, the user will be able to select exactly two days for free, which will then be added to the cart. -Depending on your specific configuration, the user will now receive two separate tickets, one for each day. - -For the all-day pass, you open the "Bundled products" tab in the settings of the All-day pass product and add three new bundled items with the following options: - - - Bundled product: "Day 1/2/3" - - Bundled variation: None - - Count: 1 - - Designated price: 0 - -This way, when buying an all-day pass, three free day passes will automatically be added to the cart. -Depending on your specific configuration, the user will now receive three separate tickets, one for each day. - -This approach makes your order data more complicated, since e.g. someone who buys an all-day pass now technically bought four products. -However, this option allows for more flexibility when you have lots of options to choose from. - -!!! Tip - - Depending on the packages you offer, you might not need both the add-on and the bundle feature, i.e. you only need the add-on feature for the two-day pass and only the bundle feature for the all-day pass. - You could also set up the two-day pass like we showed here, but the all-day pass like in option A! - -### Group discounts - -This section explains how to give discounts for whole groups attending your event. - -#### Automatic discounts - -pretix can automatically grant discounts if a certain condition is met, such as a specific group size. - -To set this up, navigate to :navpath:Your event → :fa3-ticket: Products → Discounts: and click the :btn-icon:fa3-plus: Create a new discount: button. -You can choose a descriptive name such as "Discount for school classes" so you can find this again later. -You can also optionally restrict the discount to a specific time frame or a specific sales channel. - -Next, either select **Apply to all products** or create a selection of products that are eligible for the discount. - -For a **percentual group discount** similar to “if you buy at least 5 tickets, you get 20 percent off", set **Minimum number of matching products** to “5" and **Percentual discount on matching products** to “20.00". - -For a **buy-X-get-Y discount**, e.g. “if you buy 5 tickets, you get one free", set **Minimum number of matching products** to “5", **Percentual discount on matching products** to “100.00", and **Apply discount only to this number of matching products** to “1". - -#### Fixed group packages - -If you want to sell group tickets in fixed sizes, e.g. a table of eight at your gala dinner, you can use product bundles. -Assuming you already set up a ticket for admission of individual persons, you then set up a second product **Table (8 persons)** with a discounted full price. -Then, head to the **Bundled products** tab of that product and add one bundle configuration to include the single admission product **eight times**. -Next, create an unlimited quota mapped to the new product. - -This way, the purchase of a table will automatically create eight tickets, leading to a correct calculation of your total quota and, as expected, eight persons on your check-in list. -You can even ask for the individual names of the persons during checkout. - -#### Minimum order amount - -If you want to promote discounted group tickets in your price list, you can also do so by creating a special **Group ticket** at the reduced per-person price and set the **Minimum amount per order** option of the ticket to the minimal group size. - -For more complex use cases, you can also use add-on products that can be chosen multiple times. - -This way, your ticket can be bought an arbitrary number of times – but no less than the given minimal amount per order. - -### 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 three ways to implement this with pretix: - -#### 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, you can check the "Buying this product requires approval" in the settings of your product. -If a customer tries to buy such a product, they will be able to place their order but cannot proceed to payment. -Instead, you will be asked to approve or deny the order and only if you approve it, we will send a payment link to the customer. - -This requires the customer to interact with the ticket shop twice (once for the order, once for the payment) which adds a little more friction, but gives you full control over who attends the event. - -#### Option C: Registered customers & memberships - -You can also do this by requiring that customers have a [customer account](customer-accounts.md) and an active membership. -You can find more information on this mechanism under [season tickets](products.md#season-tickets). - -### Time slots - -A more advanced use case of pretix is using pretix for time-slot-based access to an area with a limited visitor capacity, such as a museum or other attraction. -This guide will show you the quickest way to set up such an event with pretix. - -First of all, when creating your event, you need to select that your event represents an "event series": - -![](../assets/screens/products/create_step11.png "Create step 11") - -For general instructions on how to set up an event series with pretix, refer to our guide on [event series](event-series.md). - -#### Creating slots - -To create the time slots, you need to create a number of "dates" in the event series. -Navigate to :navpath:Your event → :fa3-calendar: Dates: and click the :btn-icon:fa3-plus:Create many new dates: button. -Then, first enter the pattern of your opening days. -In the example, the museum is open week Tuesday to Sunday. -We recommend to create the slots for a few weeks at a time, but not e.g. for a full year, since it will be more complicated to change things later. - -![](../assets/screens/products/timeslots_create1.png "Timeslots create 1") - -Then, scroll to the times section and create your time slots. -You can do any interval you like. -If you have different opening times on different days of the week, you will need to go through the creation process multiple times. - -![](../assets/screens/products/timeslots_create_21.png "Timeslots create 21") - -Scroll further down and create one or multiple quotas that define how many people can book a ticket for that time slot. -In this example, 50 people in total are allowed to enter within every slot: - -![](../assets/screens/products/timeslots_create_31.png "Timeslots create 31") - -Do **not** create a check-in list at this point. -We will deal with this further below in the guide. -Now, press "Save" to create your slots. - -!!! Warning - - If you create a lot of time slots at once, the server might need a few minutes to create them all in our system. - If you receive an error page because it took too long, please do not try again immediately but wait for a few minutes. - Most likely, the slots will be created successfully even though you saw an error. - -#### Event settings - -We recommend that you navigate to :navpath:Your Event → :fa3-wrench: Settings → General:. -Open the :btn:Display: tab and set "Default overview style" to "Week calendar": - -![](../assets/screens/products/timeslots_settings_11.png "Timeslots settings 11") - -Now, your ticket shop should give users a nice weekly overview over all time slots and their availability: - -![](../assets/screens/products/timeslots_presale1.png "Timeslots presale 1") - -#### Check-in - -If you want to scan tickets at the entrance to your event and only admit the ticket holders at their designated time, we recommend the following setup: -Go to "Check-in" in the main navigation on the left and create a new check-in list. -Give it a name and do not choose a specific data. -We will use one check-in list for all dates. -Then, go to the "Advanced" tab at the top and set up two restrictions to make sure people can only get in during the time slot they registered for. - -Under "Custom check-in rule", click the :btn-icon:fa3-plus-circle: Add condition: button and select "All of the conditions below (AND)" from the dropdown menu. -Click :btn-icon:fa3-plus-circle: Add condition: again and select "Current date and time", then "is after", then "Event start". -Leave the "Tolerance (minutes)" field empty. -Click :btn-icon:fa3-plus-circle: Add condition: again and select "Current date and time", then "is before", then "Event end". -Again, leave the "Tolerance (minutes)" field empty. -Your custom check-in rule should now look like the one in the following screenshot: - -![Custom check-in rule page set up according to the instructions above.](../assets/screens/products/timeslots_checkinlists1.png "Timeslots check-in lists 1") - -If you want, you can enter a tolerance of e.g. "10" if you want to be a little bit more relaxed and admit people up to 10 minutes before or after their time slot. - -Now, download our Android or Desktop app and register it to your account. -The app will ask you to select one of the time slots, but it does not matter, you can select any one of them and then select your newly created check-in list. -That's it, you're good to go! - -### Season tickets - -Season tickets and similar time-based tickets are popular for swimming pools, sports clubs, theaters and lots of other types of venues. -In this article, we show you different ways to set them up with pretix. -Of course, other types of tickets such as week tickets, month tickets or tickets of ten can be created with the same mechanism. - -There is a big difference between the two ways we show below. - -With Option A, a customer who purchases a season ticket creates an account with their email address and a password and the season ticket will be saved in that account. -If the customer wants to use the season ticket, they need to buy an additional free ticket for the specific event they want to visit. -This makes sense for all events or venues with limited capacity or reserved seating, because it still allows you to set an upper limit of people showing up for a specific event or time slot. - -With Option B, a customer who purchases a season ticket receives a single ticket with a single QR code that can be used an unlimited number of times. -This makes sense if the capacity of your venue is virtually unlimited and you do not need to know in advance how many season ticket holders will show up. - -#### Option A: Memberships and multiple tickets - -Since this approach requires customers to be identified with a customer account, you first need to enable the customer accounts feature in your organizer settings in the "Customer accounts" tab. -See also: [Customer accounts](customer-accounts.md) - -![](../assets/screens/products/seasontickets_orgsettings1.png "Season tickets organizer settings 1") - -After doing so, a new menu item "Customer accounts" will also show up in the main menu of your organizer account on the left. -Open its menu and click "Membership types". -Then, select to "create a new membership type". - -You can name the membership type in a way that clearly explains where it is valid, e.g. "season pass main location" or "season pass all locations". -There are a few details you can configure on this page, such as whether the season pass can be used by multiple different persons, or if the season pass can be used for multiple tickets for the same time slot. -You can also define a maximum number of usages, which is useful if you e.g. use this feature to add a "ticket of ten". - -![](../assets/screens/products/seasontickets_membershiptype1.png "Season tickets membership type 1") - -Next, you need a way of selling these season passes. -Theoretically this can be done through the same event series that you usually use, but it's probably cleaner and easier to find for customers if you create a new event that you only use to sell season passes. -The start and end date of the new event should correspond to the dates of your season. - -Inside the new event, you only need to create a single product which you can call "season ticket". -Inside that product's settings, head to the "Additional settings" section and look for the option "This product creates a membership of type". -Select the membership type you just created. -By default, the checkbox "The duration of the membership is the same as the duration of the event or event series date" is active, which is fine for our season ticket example, but you might need to unset it and provide custom timing for other ticket types such as week passes. - -![](../assets/screens/products/seasontickets_issue1.png "Season tickets issue 1") - -To prevent confusion, it might be useful to turn off ticket downloading at "Settings" → "Tickets" for your new event. -That's it, you are now ready to sell season tickets! - -We can now deal with how to use the season tickets. -Move back to your existing event and create a new product or product variation of your regular product which you call "ticket for season ticket holders" and assign a price of zero. -In the "Availability" section of the product or variation settings, check the option "Require a valid membership" and again select the membership type you created. -You can of course repeat this with all events the season ticket holder should have access to. - -![](../assets/screens/products/seasontickets_require1.png "Season tickets require 1") - -#### Option B: All-access in a single pass - -If you have only a single event series with many time slots and you do not care how many season ticket holders show up, there's a solution that does not require your customers to set up accounts and book a new ticket on every visit. - -Instead, you can just create an additional product "Season ticket" that you enable either in a "special" date of your event series just created for this purpose, or in all of your dates so it can be easily found by customers. - -Then, you can set up your check-in lists with custom logic in the "Advanced" tab of your check-in list settings. -The logic needs to ensure the following requirements: - - - Regular ticket holders can only get in during their assigned time frame and when they haven't used their ticket before. - - Season ticket holders can always get in. - -Here's an example on how to set this up: -Create an OR-bracket (At least one of the conditions below). -Within that OR-condition, create two AND-brackets (All of the conditions below). -Within the first AND-bracket, create the following conditions: - - - "Product" "is one of" "Day pass" - - "Current date and time" "is after" "Event start" with a tolerance of 0 - - "Current date and time" "is before" "Event end" with a tolerance of 0 - - "Number of previous entries" equals 0 - -Then, within the second AND-bracket, create the following condition: -"Product" "is one of" "Season pass". - -![Custom check-in rule page set up according to the instructions above.](../assets/screens/products/seasontickets_rules1.png "Season tickets rules 1") - -### Mixed taxation - -{% include "warning-tax.md" %} - -For general information on how to set up taxation in pretix, refer to our article on [taxes](taxes.md). - -Let's say you are a charitable organization in Germany and are allowed to charge a reduced tax rate of 7% for your educational event. -However, your event includes a significant amount of food, you might need to charge a 19% tax rate on that portion. -For example, your desired tax structure might then look like this: - - - Conference ticket price: € 450 (incl. € 150 for food) - - - incl. € 19.63 VAT at 7% - - - incl. € 23.95 VAT at 19% - -You can implement this in pretix using product bundles. -In order to do so, you should create the following two products: - - - Conference ticket at € 450 with a 7% tax rule - - - Conference food at € 150 with a 19% tax rule and the option “Only sell this product as part of a bundle" set - -In addition to your normal conference quota, you need to create an unlimited quota for the food product. - -Then, head to the Bundled products tab of the “conference ticket" and add the “conference food" as a bundled product with a designated price of € 150. - -Once a customer tries to buy the € 450 conference ticket, a sub-product will be added and the price will automatically be split into the two components, leading to a correct computation of taxes. - -## Troubleshooting - -### A product does not appear in the ticket shop - -If you have created a product and it is not displayed in your ticket shop, perform the following checks: - - 1. Check if the product's "active" checkbox is enabled. - - 2. Check if the product's "Available from" or "Available until" settings restrict it to a date range. - - 3. Check if the product's checkbox "This product will only be shown if a voucher matching the product is redeemed." is enabled. - If this is the case, the product will only be shown if the customer redeems a voucher that directly matches to this product. - It will not be shown if the voucher only is configured to match a quota that contains the product. - - 4. Check if the product is in a category that has the "Products in this category are add-on products" checkbox enabled. - If this is the case, the product won't show up on the shop front page, but only in the first step of checkout when a product in the cart allows to add add-on products from this category. - - 5. Check that a quota exists that contains this product. - If your product has variations, check that at least one variation is contained in a quota. - If your event is an event series, make sure that the product is contained in a quota that is assigned to the series date that you access the shop for. - - 6. If the sale period has not started yet or is already over, check the "Show items outside presale period" setting of your event. \ No newline at end of file diff --git a/docs/guides/products/.pages b/docs/guides/products/.pages new file mode 100644 index 000000000..131a14afe --- /dev/null +++ b/docs/guides/products/.pages @@ -0,0 +1,3 @@ +nav: + - ... | index*.md + - ... \ No newline at end of file diff --git a/docs/guides/products/discounts.md b/docs/guides/products/discounts.md new file mode 100644 index 000000000..8d5538e1a --- /dev/null +++ b/docs/guides/products/discounts.md @@ -0,0 +1,291 @@ +# Discounts + +pretix has several different ways methods offering your customers discounts on their purchase under certain conditions. +This article explains several different types of discounts as well as common use cases: +c + - [different price levels](discounts.md#different-price-levels) + - [early bird prices](discounts.md#early-bird-tickets) + - [discount packages](discounts.md#discount-packages) + - [group discounts](discounts.md#group-discounts). + +## Prerequisites + +Most of the methods described here are handled on the event level, so you have to create an event first. +The article assumes some general knowledge on how to create and edit products, so it makes sense to take a look at the guide on [products](index.md) first. + +## How To + +pretix allows you to create as many different products with different price levels as you need. +This approach is explained under the section [different price levels](discounts.md#different-price-levels). +The sections after that will guide you through some more advanced methods for offering discounts based on certain conditions, such as [early bird prices](discounts.md#early-bird-tickets), [discount packages](discounts.md#discount-packages), and [group discounts](discounts.md#group-discounts). + +### Different price levels + +The most straightforward way to offer a discount is to create two or more admission products with different price levels. +This makes sense if, for example, you are selling discount tickets for pensioners or students. +In order to do so, first create the basic admission ticket and configure it according to your requirements. + +Then, clone the ticket once for each differing price level. +Adjust the name and the price of each cloned ticket. +In the "Description" field, add an informative text along the following lines: +"This ticket is only valid if you provide a student ID during check-in." +Switch to the :btn:Check-in & Validity: tab and add a "Check-in text" with instructions for the person scanning the ticket, for example: +"Check for student ID". + +Add all products to one general quota. +Set the capacity of the quota to the maximum number of tickets you want to sell. + +If you want to place an additional limit on the number of discount tickets available, create another quota and set the capacity to the maximum number of discount tickets you want to sell. +Add only the discount tickets to this quota. +pretix will subtract from both quotas whenever a discount ticket is sold, and subtract from the general quota only when a regular ticket is sold. + +### Early bird tickets + +This section explains how to offer early bird tickets that can only be bought far in advance of the event and which become unavailable in favor of more expensive tickets at some point. +It is possible to create a ticket and manually increase the price as the event approaches. + +But pretix also offers two methods for automating this: +You can offer different pricing tiers based on date, or based on the number of tickets that are still available. +Regardless of which method you use, the first step is creating one admission ticket for each price tier. + +#### Early bird tickets based on time for singular events + +If you want to offer early bird tickets based on the current time for a singular event, edit one of the products and switch to the :btn:Availability: tab. +Use the "Available from" and "Available until" fields to define the period of time in which the product can be purchased. +Repeat this step for each product. + +Make sure that the "Available until" option for the first ticket has the same date and time as the "Available from" option for the following ticket. +This is to ensure that there is no overlap during which more than one pricing tier is available, and no gap during which no tickets are available. + +#### Early bird tickets based on time for dates within an event series + +The method described above does not work for an event series with dates repeating over a large span of time. +If you want to offer early bird tickets based on the time for a date within an event series, navigate to :navpath:Your event series → :fa3-calendar: Dates: and edit one of the dates. +Under "Product settings", use the "Available from" and "Available until" fields to define the period of time in which the product can be purchased for this individual date. + +If you want to set the same availability for multiple dates, navigate to :navpath:Your event series → :fa3-calendar: Dates:, check the box next to each date you want to edit and click the :btn-icon:fa3-edit: Edit selected: button. +Under "Item prices", use the "Available from" and "Available until" fields to define the period of time in which the product can be purchased for the selected dates. +Check the boxes labeled "change" next to "Available from" and "Available until" to ensure that the product settings are overridden. + +#### Early bird tickets based on ticket numbers + +If you want to offer early bird tickets based on the number of tickets already sold for a singular event, create one quota for each price level. +For all price tiers except the last one, enter a limited number in the "Total capacity" field and check the box next to "Close this quota permanently once it is sold out". +This means that once one price tier is sold out, the shop will **not** move back to a previous price tier even if orders are canceled and spots in the quota open up. +Whether you also need to limit the "Total capacity" of the last quota and enable the "Close this quota permanently once it is sold out" option for the last quota depends on your individual use case. + +Add only the first product to the first quota. +Add the first **and** second product to the second quota and set the "Total capacity" so that it includes the capacity of the first quota plus the amount of the second ticket that you want to sell. +Continue like this until you arrive at the last quota, which should contain all relevant products. +This quota setup ensures that you can still sell the maximum number of tickets for your event, even if orders for tickets in the earlier quotas are canceled. + +Navigate to :navpath:Event → :fa3-ticket: Products → Products: and edit the second product in the sequence. +Switch to the :btn:Availability: tab. +Under "Only show after sellout of", select the first quota. +Repeat this process for each following product, always selecting the previous quota. +This means that each price tier is only displayed in the shop after the previous price tier is sold out (the quota is empty). + +If you want to hide the prices for the previous tickets, navigate to :navpath:Your event → :fa3-wrench: Settings → General: and switch to the :btn:Display: tab. +Under "Product list", check the box next to "Hide all products that are sold out". + +!!! Note + There are some rare cases in which prices in your shop may switch back and forth between price tiers. + If a customer places the last products of one price tier in their cart but does not buy them yet, these tickets will be marked as "Reserved" and the next price tier will be displayed. + If the customer does not actually place the order, the previously reserved tickets will be displayed in the shop again and the tickets of the following price tier will disappear. + + This behavior is preferable to a situation in which a malicious user would be able to reserve all tickets of a cheaper tier without buying them. + +For illustrative purposes, assume you intend to sell 400 tickets in three price tiers. +First of all, create three products with different prices: + + - "Super early bird ticket" + - "Early bird ticket" + - "Regular ticket" + +Then, create three quotas: + + - "Super early bird" with a total capacity of 100 and the "Super early bird ticket" product selected. + - "Early bird and lower" with a total capacity of 200 and both the "Super early bird ticket" and the "Early bird ticket" products selected. + - "All participants" with a total capacity of 400, all three products selected and no additional options. + +Next, modify the product "Regular ticket" and switch to the :btn:Availability: tab. +Under "Only show after sellout of", select your quota "Early bird and lower". +Do the same for the "Early bird ticket" with the quota "Super early bird ticket". + +### Discount packages + +This section explains how to offer combinations of several products at lower prices than the sum of the prices of each individual product. +This is useful whenever you are offering several products, expect customers to purchase different combinations of those products, and want to offer lower prices for larger combinations. +You can apply this, for example, to any of the following use cases: + + - a trade fair or festival opening on three consecutive days with different pricing for single-day, two-day, and three-day passes + - different levels of merch packages with larger packages offered at reduced rates + - different offers such as in-person workshops, online content, and a networking event, which are offered at a cheaper price if purchased in combination + +There are two methods to implement this using pretix: +One method uses [combination products](discounts.md#option-a-combination-products). +It has the advantage of keeping your products and possible orders fairly straightforward. +However, this method is only feasible if there are no more than three or four basic products. + +The other method uses [add-ons and bundles](discounts.md#option-b-add-ons-and-bundles). +This option starts out relatively complex, but the complexity does not grow exponentially with an increasing number of basic products, as it does in the first method. + +Generally speaking, the first option makes more sense if you have a small number of basic products, and the second option makes more sense if that number is larger than four or five. +Both methods will be explained in the following subsections. + +If you want to offer a discount for large orders regardless of which products are purchased, refer to the section on [group discounts](discounts.md#group-discounts) instead. + +#### Option A: Combination products + +One option is to create the basic products and quotas, and to then create separate products for all possible combinations of basic products. +This has the advantage of keeping your products and possible orders fairly straightforward. +It can be implemented without touching the add-ons or bundles features. + +However, this method is only feasible if the total number of possible combinations is rather small. +The number of products you need to offer in your shop is `2ⁿ-1`, where `n` is the number of basic products. +This number grows exponentially with every additional basic product. +If you have three basic products, it results in seven products having to be offered in your shop. +If you have four basic products, it results in fifteen products. +For this level of complexity and beyond, the [method using bundles](discounts.md#option-b-add-ons-and-bundles) described below may be more suitable. + +For illustrative purposes, assume you are hosting a three-day trade fair. +Create a basic ticket for each day of the trade fair, three combination tickets for two days, and one combination ticket for all three days: + + - Day 1 ticket + - Day 2 ticket + - Day 3 ticket + - Day 1 + day 2 ticket + - Day 1 + day 3 ticket + - Day 2 + day 3 ticket + - Ticket for all three days + +Then, create three quotas, each one with a total capacity equal to your venue's maximum capacity on any given day: + + - Day 1 quota, linked to "Day 1 ticket", "Day 1 + day 2 ticket", "Day 1 + day 3 ticket", and "Ticket for all three days" + - Day 2 quota, linked to "Day 2 ticket", "Day 1 + day 2 ticket", "Day 1 + day 2 ticket", and "Ticket for all three days" + - Day 3 quota, linked to "Day 3 ticket", "Day 1 + day 3 ticket", "Day 2 + day 3 ticket", and "Ticket for all three days" + +This way, every attendee can order exactly one ticket that they can use for all days that they are going to attend. +Finally, navigate to :navpath:Your event → :fa3-check-square-o: Check-in:, edit your check-in list and switch to the :btn:Advanced: tab. +Define custom check-in rules so that the tickets in the first quota are valid on the first day of the event; the tickets in the second quota are valid on the second day; and the tickets in the third quota are valid on the third day. + +You can do this either using the "Current day of the week" or the "Current date and time" condition. +The check-in rule could look similar to the one in the screenshot below. +The logic looks like this: + +At least one of the conditions below (OR) + + - All of the conditions below (AND) + - Product is one of "Day 1 ticket", "Day 1 + day 2 ticket", "Day 1 + day 3 ticket", or "Ticket for all three days" + - Current day of the week = 1 (Monday) + - All of the conditions below (AND) + - Product is one of "Day 2 ticket", "Day 1 + day 2 ticket", "Day 1 + day 2 ticket", or "Ticket for all three days" + - Current day of the week = 2 (Tuesday) + - All of the conditions below (AND) + - Product is one of "Day 3 ticket", "Day 1 + day 3 ticket", "Day 2 + day 3 ticket", or "Ticket for all three days" + - Current day of the week = 3 (Wednesday) + +![Custom check-in rule with three sets of AND-conditions. The first one demands that the product is one of the products for day one AND that the current day of the week is Monday. The second and third set do the same thing, but for day 2 and Tuesday as well as day 3 and Wednesday respectively. The three sets of AND-conditions are all included in one OR-condition.](../../assets/screens/products/check-in-rules-combination-products.png "Custom check-in rule") + +#### Option B: Add-ons and bundles + +Another option is to create the basic products and quotas, and to then create products with mandatory add-ons for all possible combinations. +An exception can be made for the combination product containing **all** basic products. +The full combination product can either be set up as described above in the section [Option A: Combination products](discounts.md#option-a-combination-products), or as a bundle. +The approach using the bundle will also be described in this section. + +This option has the advantage that the number of products needed does not grow exponentially with the number of basic products. +The main disadvantage is that orders become more complex because every order containing a product with mandatory add-ons will contain at least three products. + +For illustrative purposes, assume you are hosting a three-day trade fair. +First, create a category for "Day tickets". +Then, create a basic admission ticket for each day of the trade fair, one non-admission product for any two days, and one non-admission product for all three days: + + - Day 1 ticket + - Day 2 ticket + - Day 3 ticket + - Ticket for two days + - Ticket for all three days + +Add the tickets for day 1, 2 and 3 to the "Day tickets" category. +Do **not** add any other tickets to that category. +Then, create one quota for each of the admission tickets. +When creating the quotas for each single day ticket, set the "Total capacity" to a number equal to the capacity of your venue for each day. +The quotas for the two-day and three-day ticket can be unlimited. + +Edit the "Ticket for two days", switch to the :btn:Add-on: tab and click the :btn-icon:fa3-plus: Add a new add-on: button. +Select the category "Day tickets", set the minimum and maximum number to 2 and check the box next to "Add-ons are included in the price". +Click the :btn:Save: button. +With this configuration, a customer purchasing the "Ticket for two days" will be prompted to add two tickets from the "Day tickets" category to their purchase as add-ons. +The customer will receive two tickets: one for each day of the event that they selected. + +It does not make sense to set up the "Ticket for all three days" the same way because then the customer would have to select all three day tickets manually. +If you want to set up the "Ticket for all three days" as a bundle, edit it and open the :btn:Bundled products: tab. +Click the :btn-icon:fa3-plus: Add a new bundled product: button. +For the "Bundled product, choose the "Day 1 ticket". +Leave the "Quantity" at 1 and the "Designated price part" at 0.00. +Repeat the same process for "Day 2 ticket" and "Day 3 ticket". + +This configuration means that when a customer purchases the "Ticket for all three days", the three day tickets will be added to their cart automatically for free. +The customer will receive three tickets: one for each day of the event. + +Finally, navigate to :navpath:Your event → :fa3-check-square-o: Check-in:, edit your check-in list and switch to the :btn:Advanced: tab. +Define custom check-in rules so that the "Day 1 ticket" is only valid on the first day of the event; the "Day 2 ticket" is only valid on the second day; and the "Day 3 ticket" is only valid on the third day. +If you have set up the "Ticket for all three days" as a combination product, define the rule so that it is also valid on each day. +You can do this either using the "Current day of the week" or the "Current date and time" condition. +The logic looks like this: + +At least one of the conditions below (OR) + + - All of the conditions below (AND) + - Product is one of "Day 1 ticket" or "Ticket for all three days" + - Current day of the week = 1 (Monday) + - All of the conditions below (AND) + - Product is one of "Day 2 ticket" or "Ticket for all three days" + - Current day of the week = 2 (Tuesday) + - All of the conditions below (AND) + - Product is one of "Day 3 ticket" + - Current day of the week = 3 (Wednesday) + +!!! Note + You can also set up the "Ticket for all three days" as described in the section [Option A: Combination products](discounts.md#option-a-combination-products). + If you decide to do so, also include this ticket in each condition starting with "Product is one of". + +### Group discounts + +pretix gives you several methods for offering discounts to whole groups of people attending your event. +You can either set up a rule for discounts that is applied automatically if a purchase meets certain conditions; offer fixed group packages at reduced prices; or offer cheaper tickets tied to a minimum order amount. +The following subsections will explain each method. + +#### Automatic discounts + +You can use pretix to automatically grant a discount on an order if a certain condition is met, such as a certain group size. + +To set this up, navigate to :navpath:Your event → :fa3-ticket: Products → Discounts: and click the :btn-icon:fa3-plus: Create a new discount: button. +Choose an "Internal name" for the discount. +For a percentage discount such as "20 percent off if you buy 5 tickets", set the "Minimum number of matching products" to 5 and the "Percentual discount on matching products" to 20.00. + +For a discount such as “buy 5, get one free", set the "Minimum number of matching products" to 5, "Percentual discount on matching products" to 100.00, and "Apply discount only to this number of matching products" to 1. + +#### Fixed group packages + +You can use bundles to sell group tickets with fixed sizes, for example a table of eight at your gala dinner. + +First, create a basic admission ticket for a single person. +Then, create a non-admission product with a price lower than the full price for eight individual tickets. +Open the :btn:Bundled products: tab of that product and click the :btn-icon:fa3-plus: Add a new bundled product: button. +Choose your basic admission ticket as the "Bundled product", set "Quantity" to 8 and click the :btn:Save: button. + +Create a quota that includes only the eight person bundle. +This quota can have an unlimited capacity. + +This configuration means that whenever one of the bundles is purchased, pretix creates eight individual tickets. +This results in the proper number being subtracted from the basic product quota and eight new entries for attendees on your check-in list. +If you need each individual attendee's personal data, navigate to :navpath:Your Event → :fa3-wrench: Settings → General:, open the :btn:Customer and attendee data: tab and edit the settings under "Attendee data (once per personalized ticket)". + +#### Minimum order amount + +You can use the minimum order amount feature to promote discounted group tickets. +In order to do so, create a single-person ticket at a reduced price. +Open the :btn:Availability: tab and set the "Minimum amount per order" to the minimal group size for which you want to grant the discount. +This way, your ticket can be bought an arbitrary number of times – but no less than the given minimal amount per order. diff --git a/docs/guides/products/index.md b/docs/guides/products/index.md new file mode 100644 index 000000000..fa1a0afb7 --- /dev/null +++ b/docs/guides/products/index.md @@ -0,0 +1,292 @@ +# Products + +A product is anything sold via pretix: tickets, gift cards, conference t-shirts and so on. +pretix offers you almost unlimited possibilities for configuring and structuring products. +This article guides you through the basic process of creating a product and explains several practical applications of some of the more advanced features of pretix. + +## Prerequisites + +Products are configured on the event level, so you have to create an event first. + +## General usage + +This section guides you through the basic process of product creation. +This involves first creating categories, then the products themselves, and finally quotas. +You cannot create add-on products or products for cross-selling without choosing a category for them. +You cannot create a quota without adding at least one product to it. +Thus, this guide will explain those steps in that order. + +### Creating and editing categories + +![Page titled 'Product categories', showing a list of categories only containing 'Tickets' and a button for creating a new category.](../../assets/screens/products/categories.png "Product categories screenshot") + +Categories do several things. +They help you group products into sensible categories both in the backend and in your shop. +Your shop page will display products grouped by categories which can help customers find the item they are looking for more easily. +Sorting products into categories can help you keep track of them in the backend. + +Categories also separate normal products, which can be purchased directly, from additional products, which are only offered as add-ons to normal products. +If you want to sell not only admission tickets, but also extras such as merchandise, you have create a category for add-on products. +You also need an extra category if you are planning to use the cross-selling feature. + +In order to edit categories, navigate to :navpath:Your event → :fa3-ticket: Products → Categories:. +This page shows the list of all product categories. + +Click the :btn-icon:fa3-plus: Create a new category: button and give the new category a name. +Choose the category type depending on the type of products in this category: normal, add-on, cross-selling, or normal + cross-selling. + +Normal products are standalone products that can be purchased directly. +Add-on products are products that are only offered as add-ons to normal products. +Cross-selling products are products that are only offered in the cross-selling step as a customer is purchasing other products. +Finally, products in the "normal + cross-selling" category are both offered as standalone products and in the cross-selling step. +The "Cross-selling condition" setting below determines how products in the "cross-selling" and "normal + cross-selling" categories are offered in your shop. + +Click the :btn:Save: button at the bottom of the page. +This takes you back to the product categories page, which now also lists the newly created category. + +You can also edit an already existing category and change its name, description, and type, by clicking its name or the :btn-icon:fa3-edit:: edit button next to it in the list. + +### Creating and editing products + +![Page titled 'Products', showing a list of products containing two entries and a button for creating a new product.](../../assets/screens/products/products.png "Products screenshot") + +If you want to create or edit products, navigate to :navpath:Event → :fa3-ticket: Products → Products:. +This page shows the list of all products. +Click the :btn-icon:fa3-plus: Create a new product: button. +Choose a name, a description, a default price and a sales tax and click the :btn:Save: button. + +You can also edit an already existing product by clicking its name or the :btn-icon:fa3-edit:: edit button next to it in the list. + +### Creating and editing quotas + +A quota determines how many instances of your product can be sold. +Every product has to be part of at least one quota before it becomes available in the shop. + +If you want to create or edit quotas, navigate to :navpath:Event → :fa3-ticket: Products → Quotas:. +This page shows the list of all quotas for the event as well as the total capacity and how many items are left for each quota. + +Click the :btn-icon:fa3-plus: Create a new quota: button. +Choose a name and a capacity, check the products to be contained in this quota, and any advanced options, and then click the :btn:Save: button. + +You can also edit an already existing quota by clicking its name or the :btn-icon:fa3-edit:: edit button next to it in the list. + +## Applications + +This section covers advanced use cases and how to implement them using the options pretix offers for customizing products. + +### Time slots + +You can use pretix to set up access to a venue with a limited visitor capacity, such as a museum, based on time slots. +This guide shows you how to create an event with time slots. + +Create a new event. +Under "Event type", select "Event series or time slot booking". + +![Page titled 'Create a new event (Step 1)'. Under 'Event type' the option 'Event series or time slot booking' is selected' ](../../assets/screens/event/create-series.png "Create a new event") + +For general instructions on how to set up an event series with pretix, refer to our guide on [event series](../event-series.md). + +#### Creating slots + +In order to create time slots, you have to create a number of "dates" in the event series. +Navigate to :navpath:Your event → :fa3-calendar: Dates: and click the :btn-icon:fa3-plus:Create many new dates: button. +Enter a pattern for your opening days. +If your venue opens every week from Tuesday to Sunday in January of 2027, enter the following pattern: +"Repeat every `1` `week(s)`, starting at `2027-01-01`" +Check the boxes for Tuesday, Wednesday, Thursday, Friday, and Saturday. +Select "Repeat until" and enter `2027-01-31` into the field. + +It makes sense to create time slots for a few weeks at a time. +Do not create time slots for a full year or an even longer period of time. +Doing so would make it too complicated to make changes later. + +![Page titled 'Create multiple dates', with selections made as described above. A preview listing all dates to be created is displayed on the right.](../../assets/screens/event-series/create-multiple-example2.png "Create multiple dates") + +Under "Times", specify the time slots for each opening day. +If your venue opens every day from 10 AM to 6 PM and each time slot corresponds to a full hour, you can click the :btn-icon:fa3-calendar: Add many time slots: button. +Specify "Start of first slot" as "10:00:00", "End of time slots" as "18:00:00", "Length of slots" as "60" and "Break between slots" as "0". +Then, click the :btn-icon:fa3-check: Create: button. +If your time slot pattern is more irregular or complex, use the :btn-icon:fa3-plus: Add a single time slot: button and edit each line individually. + +If you have different opening times on different days of the week, you will need to go through the creation process multiple times. + +![Page displaying the headline 'Times' and eight time slots ranging from 10 AM to 6 PM, each lasting an hour with no admission time specified.](../../assets/screens/event-series/create-times.png "Create multiple dates–Times") + +Under "Quotas, create one or multiple quotas. +These quotas determine how many people can book a ticket for each time slot. +If you want each time slot to be attended by a maximum of 50 people, set the "Total capacity" to `50` +Once you are happy with your choices, click the :btn:Save: button. + +!!! Note + If you create a large number of time slots at once, it may take a moment until all of them can be displayed. + If you encounter an error message during this stage, wait a few minutes for the server to finish the task. + Do **not** try again immediately. + In most cases, the dates will be created successfully even if an error message is displayed. + +#### Enabling the week calendar view + +For an event series or time slot booking, it makes sense to enable the "Week calendar" overview style for the shop page. +In order to do so, navigate to :navpath:Your Event → :fa3-wrench: Settings → General:. +Open the :btn:Display: tab and set "Default overview style" to "Week calendar": + +![Page displaying the headline 'Calendar list and views'. Under 'Default overview style', the option 'Week calendar' has been selected.](../../assets/screens/event-series/calendar-views.png "Display–Calendar list and views") + +Your ticket shop will now display a weekly overview over all time slots and their availability. + +#### Check-in + +If you are selling tickets for certain time slots, then you also want customers to be admitted to the event only if their ticket matches the current time slot. +This section explains how to set this up using custom check-in rules. +Navigate to :navpath:Your event → :fa3-check-square-o: Check-in → Check-in lists: and click the :btn-icon:fa3-plus: Create a new check-in list: button. + +Specify a name, but do **not** choose a specific date. +This check-in list will apply to all dates. +Open the :btn:Advanced: tab. + +Under "Custom check-in rule", click the :btn-icon:fa3-plus-circle: Add condition: button and select "All of the conditions below (AND)" from the dropdown menu. +Click :btn-icon:fa3-plus-circle: Add condition: again and select "Current date and time", then "is after", then "Event start". +Click :btn-icon:fa3-plus-circle: Add condition: again and select "Current date and time", then "is before", then "Event end". +You can leave the "Tolerance (minutes)" fields empty or specify a tolerance of a few minutes for some leniency. + +![Custom check-in rule page set up according to the instructions above.](../../assets/screens/products/time-slot-check-in-rule.png "Custom check-in rule") + +With these two restrictions, customers can only access your event during the time slot for which they bought a ticket. +Once you are happy with your choices, click the :btn:Save: button. + +When using pretixSCAN with this setup, the app will ask you to select one of the time slots. +The choice does not matter. +It is only important that you select the check-in list you just set up. +Select any time slot that is part of the event series and then select the check-in list described above. + +### Season tickets + +Season tickets are often used for public swimming pools, sports clubs, theaters, and other types of venues. +This section explains two methods for setting them up in pretix. +These methods can be used for any ticket that grants access to all events during a certain time period. +It does not matter whether that time period spans several years or just a single day. + +The first method, option A, uses memberships. +The second method, option B, uses a single season ticket. + +With **Option A**, a customer who purchases a season ticket creates an account with their email address and a password. +The season ticket will be stored in that account. +Whenever the customer wants to use the season ticket, they need to purchase a ticket for that event. +Their membership allows them to get that ticket for free. +If your venue has limited capacity or reserved seating, use option A. +This method allows you to control the total number of people that can be admitted to an event or time slot using quotas. + +With **Option B**, a customer who purchases a season ticket receives a single ticket with a single ticket secret that can be used an unlimited number of times. +Use option B if you are only hosting a single event or event series, the capacity of your venue is virtually unlimited, and you do not need to know in advance how many season ticket holders will show up. + +#### Option A: Memberships and multiple tickets + +Option A requires customers to be identified with a customer account. +Thus, you first need to enable the customer accounts feature in your organizer settings in the "Customer accounts" tab. +See also: [Customer accounts](../customer-accounts.md) + +![Organizer settings page, on the Customer accounts tab. The boxes next to 'Allow customers to create accounts', 'Allow customers to create accounts', and 'Allow customers to log in with email address and password' have been checked.](../../assets/screens/organizer/customer-accounts.png "Organizer settings–Customer accounts") + +Once you have done that, navigate to :navpath:Your organizer → :fa3-user: Customer accounts → Membership types:. +Click the :btn-icon:fa3-plus: Create a new membership type: button. + +Give the new membership type a distinct and informative name. +If you want the membership to allow purchase of tickets for multiple different people, check the box next to "Membership is transferable". +If you want the membership to allow purchase for multiple different events or dates with the same start time, check the box next to "Parallel usage is allowed". + +If you want to limit the membership to a certain number of purchases, specify that number in the "Maximum usages" field. +If you want to allow unlimited purchases within the specified time frame, leave this field empty. +Once you are happy with your choices, click the :btn:Save: button. + +![Page titled Create a new membership type. The name is specified as Season pass 2027-1. The boxes next to 'Membership is transferable' and 'Parallel usage is allowed' are checked. The 'Maximum usages' field is empty.](../../assets/screens/products/membership-type.png "Create a new membership type") + +Once you have created the membership type, you also need a way to sell these memberships. +Create a new event with start and end dates corresponding to the duration of the season for which you want to sell season passes. +Navigate to :navpath:Your event → :fa3-ticket: Products: and click the :btn-icon:fa3-plus: Create a new product: button. +Choose a name such as "Season pass" and a price, and then click the :btn:Save and continue with more settings: button. + +Then, open the :btn:Additional settings: tab. +Under "This product creates a membership of type", select the membership you just created. +By default, the box next to "The duration of the membership is the same as the duration of the event or event series date" is checked. +If you are selling multiple time-based passes with different periods of validity which do not match the duration of the event, uncheck the box. + +![Page titled Modify product: Season pass, on the Additional settings tab. Under 'This product creates a membership of type', the membership 'Season pass 2027-1' is selected. The checkbox next to ' The duration of the membership is the same as the duration of the event or event series date' is checked.](../../assets/screens/products/product-creates-membership.png "Modify product: Season pass") + +In order to prevent customers from confusing their season pass with their ticket, it makes sense to disable ticket downloads. +Navigate to :navpath:Your event → :fa3-wrench: Settings: and uncheck the box next to "Allow users to download tickets". + +Once the season pass shop has been set up, you need to create free products that can only be purchased with the season pass for each applicable event. +Clone an existing admission ticket, append a descriptor such as "for season ticket holders" to the name, and set the price to zero. +Click the :btn:Save and continue with more settings: button and then open the :btn:Availability: tab. +Check the box next to "Require a valid membership" and select the membership type you created. +If you want to display this product only to customers who already have an active membership in your shop, check the box next to "Hide without a valid membership". + +Repeat these steps for every product you want to make available for free for season pass holders. +If you want season pass holders to be able to attend multiple of your events for free, repeat these steps for every applicable event. + +![Page displaying the option 'Require a valid membership', which is checked, and 'Allowed membership types', under which 'Season pass 2027-1' is selected. The box next to 'Hide without a valid membership' is checked.](../../assets/screens/products/require.png "Require a valid membership") + +#### Option B: All-access in a single pass + +Option B is setting up a single all-access pass. +This is less complicated to set up than option A because it does not require your customers to set up accounts and book a new ticket on every visit. +However, you can only use option B if you have only a single event series, and no space limitations at your venue. + +In order to set up a single all-access pass, navigate to :navpath:Your event → :fa3-ticket: Products: and click the :btn-icon:fa3-plus: Create a new product: button. +Give the new product a name such as "Season ticket". +Enable this product for all dates in your event series. + +You have to set up custom check-in rules to allow customers access to all dates with the season pass. +Navigate to :navpath:Your event → :fa3-check-square-o: Check-in → Check-in lists: and click the :btn-icon:fa3-plus: Create a new check-in list: button. + +Specify a name, but do **not** choose a specific date. +This check-in list will apply to all dates. +Open the :btn:Advanced: tab. + +Under "Custom check-in rule", click the :btn-icon:fa3-plus-circle: Add condition: button and select "At least one of the conditions below (OR)" from the dropdown menu. +Click the :btn-icon:fa3-plus-circle: Add condition: button again and select "All of the conditions below (AND)" from the dropdown menu. +You now have an OR-bracket with an AND-bracket inside it. + +Click the :btn-icon:fa3-plus-circle: Add condition: button **within the AND-bracket** and select "Product", then "is one of", and then all admission tickets **other than** the season pass. +Click the :btn-icon:fa3-plus-circle: Add condition: button within the AND-bracket again and select "Current date and time", then "is after", then "Event start". +Click the :btn-icon:fa3-plus-circle: Add condition: button within the AND-bracket again and select "Current date and time", then "is before", then "Event end". +You can leave the "Tolerance (minutes)" fields empty or specify a tolerance of a few minutes for some leniency. +Click the :btn-icon:fa3-plus-circle: Add condition: button within the AND-bracket a final time and select "Number of previous entries", then "=", then "0". + +Then, click the :btn-icon:fa3-plus-circle: Add condition: button that is located within the OR-bracket, but **not** within the AND-bracket. +It should be further down on the page. +Select "Product", then "is one of", and then your season pass product. + +![Custom check-in rule page set up according to the instructions above.](../../assets/screens/products/seasontickets_rules1.png "Season tickets rules 1") + +The logic is depicted in the screenshot above. +These rules ensure that regular tickets holders are only admitted to their chosen date and if their ticket has not been used before. +They also ensure that season ticket holders are always admitted. + +### Mixed taxation + +{% include "warning-tax.md" %} + +The article on [taxes](../taxes.md) has a section explaining how to set up products with [mixed taxation](../taxes.md#mixed-taxation) using bundles. + +## Troubleshooting + +### A product does not appear in the ticket shop + +If you have created a product and it is not displayed in your ticket shop, perform the following checks: + + 1. Check if the product's "active" checkbox is enabled. + + 2. Check if the product's "Available from" or "Available until" settings restrict it to a date range. + + 3. Check if the product's checkbox "This product will only be shown if a voucher matching the product is redeemed." is enabled. + If this is the case, the product will only be shown if the customer redeems a voucher that directly matches to this product. + It will not be shown if the voucher only is configured to match a quota that contains the product. + + 4. Check if the product is in a category that has the "Products in this category are add-on products" checkbox enabled. + If this is the case, the product won't show up on the shop front page, but only in the first step of checkout when a product in the cart allows to add add-on products from this category. + + 5. Check that a quota exists that contains this product. + If your product has variations, check that at least one variation is contained in a quota. + If your event is an event series, make sure that the product is contained in a quota that is assigned to the series date that you access the shop for. + + 6. If the sale period has not started yet or is already over, check the "Show items outside presale period" setting of your event. \ No newline at end of file diff --git a/docs/guides/products/restricted-audience.md b/docs/guides/products/restricted-audience.md new file mode 100644 index 000000000..00db9e48e --- /dev/null +++ b/docs/guides/products/restricted-audience.md @@ -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). diff --git a/docs/guides/products/sessions.md b/docs/guides/products/sessions.md new file mode 100644 index 000000000..a1e9630f9 --- /dev/null +++ b/docs/guides/products/sessions.md @@ -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 + + + +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. diff --git a/docs/guides/taxes.md b/docs/guides/taxes.md index 319a42a21..bc8b857af 100644 --- a/docs/guides/taxes.md +++ b/docs/guides/taxes.md @@ -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. @@ -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" ) @@ -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