From 15d4676f98e34e6e9db8fe03e405927c451f7ecc Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 27 May 2026 18:16:01 +0200 Subject: [PATCH 01/96] Bump version to 2026.6.0.dev0 --- src/pretix/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pretix/__init__.py b/src/pretix/__init__.py index 8c102ccb6..77eeac95a 100644 --- a/src/pretix/__init__.py +++ b/src/pretix/__init__.py @@ -19,4 +19,4 @@ # You should have received a copy of the GNU Affero General Public License along with this program. If not, see # . # -__version__ = "2026.5.0" +__version__ = "2026.6.0.dev0" -- 2.52.0 From 5cd1775e1d0961a0c20c2945ddf1f14330a1ccaa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 May 2026 21:10:59 +0000 Subject: [PATCH 02/96] Update fakeredis requirement from ==2.35.* to ==2.36.* Updates the requirements on [fakeredis](https://github.com/cunla/fakeredis-py) to permit the latest version. - [Release notes](https://github.com/cunla/fakeredis-py/releases) - [Commits](https://github.com/cunla/fakeredis-py/compare/v2.35.0...v2.36.0) --- updated-dependencies: - dependency-name: fakeredis dependency-version: 2.36.0 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 98eeecd1b..9444b6ce7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -111,7 +111,7 @@ dev = [ "aiohttp==3.13.*", "coverage", "coveralls", - "fakeredis==2.35.*", + "fakeredis==2.36.*", "flake8==7.3.*", "freezegun", "isort==8.0.*", -- 2.52.0 From d648c83e4c4afa6ce9ec24aaddceeb94bebee736 Mon Sep 17 00:00:00 2001 From: CVZ-es Date: Fri, 29 May 2026 11:04:33 +0200 Subject: [PATCH 03/96] Translations: Update French Currently translated at 100.0% (6302 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/fr/ powered by weblate --- src/pretix/locale/fr/LC_MESSAGES/django.po | 124 +++++++-------------- 1 file changed, 43 insertions(+), 81 deletions(-) diff --git a/src/pretix/locale/fr/LC_MESSAGES/django.po b/src/pretix/locale/fr/LC_MESSAGES/django.po index 93380fce5..9163e25c4 100644 --- a/src/pretix/locale/fr/LC_MESSAGES/django.po +++ b/src/pretix/locale/fr/LC_MESSAGES/django.po @@ -4,16 +4,16 @@ msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2026-05-08 04:00+0000\n" -"Last-Translator: corentin-spec \n" -"Language-Team: French \n" +"PO-Revision-Date: 2026-05-29 17:00+0000\n" +"Last-Translator: CVZ-es \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.17.1\n" +"X-Generator: Weblate 2026.5\n" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670 #: pretix/control/templates/pretixcontrol/events/index.html:166 @@ -618,16 +618,17 @@ msgstr "" "aux objets imbriqués tels que les variantes ou les lots." #: pretix/api/webhooks.py:413 -#, fuzzy -#| msgid "Quota handling" msgid "Quota changed" -msgstr "Traitement des quotas" +msgstr "Quota modifié" #: pretix/api/webhooks.py:414 msgid "" "This includes related events like creation, deletion, opening or closing of " "quotas. No webhook is sent for changes to the resulting availability." msgstr "" +"Cela inclut les événements associés, tels que la création, la suppression, " +"l'ouverture ou la suppression de quotas. Aucun webhook n'est envoyé en cas " +"de modification de la disponibilité qui en résulte." #: pretix/api/webhooks.py:419 msgid "Shop taken live" @@ -3422,11 +3423,13 @@ msgid "" "The field \"%(label)s\" may not contain special characters such as " "\"%(chars)s\"." msgstr "" +"Le champ « %(label)s » ne doit pas contenir de caractères spéciaux tels que " +"«%(chars)s »." #: pretix/base/forms/questions.py:305 #, python-format msgid "The field \"%(label)s\" may not contain an URL (%(url)s)." -msgstr "" +msgstr "Le champ « %(label)s » ne doit pas contenir d'URL (%(url)s)." #: pretix/base/forms/questions.py:338 msgctxt "phonenumber" @@ -8409,19 +8412,14 @@ msgid "Program times" msgstr "Horaires du programme" #: pretix/base/pdf.py:503 -#, fuzzy -#| msgid "" -#| "2017-05-31 10:00 – 12:00\n" -#| "2017-05-31 14:00 – 16:00\n" -#| "2017-05-31 14:00 – 2017-06-01 14:00" msgid "" "2017-05-31 10:00 – 12:00, Room 1\n" "2017-05-31 14:00 – 16:00, Room 2\n" "2017-05-31 14:00 – 2017-06-01 14:00, Building A" msgstr "" -"2017-05-31 10:00 – 12:00\n" -"2017-05-31 14:00 – 16:00\n" -"2017-05-31 14:00 – 2017-06-01 14:00" +"31 mai 2017, de 10 h à 12 h, salle 1\n" +"31 mai 2017, de 14 h à 16 h, salle 2\n" +"Du 31 mai 2017 à 1 h du matin au 1er juin 2017 à 14 h, bâtiment A" #: pretix/base/pdf.py:507 msgid "Reusable Medium ID" @@ -8957,13 +8955,7 @@ msgid "This voucher code is not known in our database." msgstr "Ce code promotionnel n'est pas connu dans notre base de données." #: pretix/base/services/cart.py:165 -#, fuzzy, python-format -#| msgid "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products." -#| msgid_plural "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products." +#, python-format msgid "" "The voucher code \"%(voucher)s\" can only be used if you select at least " "%(number)s matching product." @@ -8971,22 +8963,14 @@ msgid_plural "" "The voucher code \"%(voucher)s\" can only be used if you select at least " "%(number)s matching products." msgstr[0] "" -"Le code promo \"%(voucher)s\" ne peut être utilisé que si vous sélectionnez " +"Le code promo « %(voucher)s » ne peut être utilisé que si vous sélectionnez " "au moins %(number)s produit correspondant." msgstr[1] "" -"Le code promo \"%(voucher)s\" ne peut être utilisé que si vous sélectionnez " +"Le code promo « %(voucher)s » ne peut être utilisé que si vous sélectionnez " "au moins %(number)s produits correspondants." #: pretix/base/services/cart.py:170 -#, fuzzy, python-format -#| msgid "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products. We have therefore removed some positions " -#| "from your cart that can no longer be purchased like this." -#| msgid_plural "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products. We have therefore removed some positions " -#| "from your cart that can no longer be purchased like this." +#, python-format msgid "" "The voucher code \"%(voucher)s\" can only be used if you select at least " "%(number)s matching product. We have therefore removed some positions from " @@ -14379,6 +14363,8 @@ msgid "" "You entered an URL, which is not allowed. Please remove %(match)s from your " "input." msgstr "" +"Vous avez saisi une URL, ce qui n'est pas autorisé. Veuillez supprimer %" +"(match)s de votre saisie." #: pretix/base/views/errors.py:48 msgid "" @@ -16328,14 +16314,8 @@ msgid "inactive" msgstr "inactif" #: pretix/control/forms/item.py:1414 -#, fuzzy -#| msgid "" -#| "Sample Conference Center\n" -#| "Heidelberg, Germany" msgid "Sample Conference Center, Heidelberg, Germany" -msgstr "" -"Exemple de centre de conférence\n" -"Centre des Congrès, France" +msgstr "Centre de conférences d'exemple, Heidelberg, Allemagne" #: pretix/control/forms/mailsetup.py:42 msgid "Hostname" @@ -23831,11 +23811,8 @@ msgid "Quota history" msgstr "Historique des quotas" #: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:6 -#, fuzzy -#| msgctxt "subevent" -#| msgid "Change multiple dates" msgid "Change multiple quotas" -msgstr "Modifier plusieurs dates" +msgstr "Modifier plusieurs quotas" #: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:8 #: pretix/control/templates/pretixcontrol/organizers/device_bulk_edit.html:8 @@ -23883,18 +23860,15 @@ msgstr "Les produits suivants pourraient ne plus être disponibles à la vente #: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:4 #: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:6 -#, fuzzy -#| msgid "Delete quota" msgid "Delete quotas" -msgstr "Supprimer le quota" +msgstr "Supprimer les quotas" #: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:10 -#, fuzzy, python-format -#| msgid "Are you sure you want to delete the following dates?" +#, python-format msgid "Are you sure you want to delete the following quota?" msgid_plural "Are you sure you want to delete the following %(num)s quotas?" -msgstr[0] "Voulez-vous vraiment supprimer les dates suivantes ?" -msgstr[1] "Voulez-vous vraiment supprimer les dates suivantes ?" +msgstr[0] "Êtes-vous sûr de vouloir supprimer le quota suivant ?" +msgstr[1] "Êtes-vous sûr de vouloir supprimer les %(num)s quotas suivants ?" #: pretix/control/templates/pretixcontrol/items/quotas.html:9 msgid "" @@ -24503,12 +24477,15 @@ msgid "" "generated once the customer pays the invoice or selects a payment method " "that requires an invoice." msgstr "" +"Cette commande a été modifiée après l'émission de la dernière facture. " +"Aucune nouvelle facture n'a encore été générée, car les factures sont " +"configurées pour être émises lors du paiement ou si le mode de paiement " +"l'exige. Une nouvelle facture sera générée dès que le client aura réglé la " +"facture ou choisi un mode de paiement nécessitant une facture." #: pretix/control/templates/pretixcontrol/order/index.html:152 -#, fuzzy -#| msgid "Request invoice" msgid "Reissue invoice" -msgstr "Demande de facture" +msgstr "Réémettre une facture" #: pretix/control/templates/pretixcontrol/order/index.html:161 #: pretix/control/templates/pretixcontrol/order/index.html:413 @@ -24942,25 +24919,17 @@ msgid "How should the refund be sent?" msgstr "Comment le remboursement doit-il être envoyé ?" #: pretix/control/templates/pretixcontrol/order/refund_choose.html:25 -#, fuzzy -#| msgid "" -#| "Any payments that you selected for automatical refunds will be " -#| "immediately communicate the refund request to the respective payment " -#| "provider. Manual refunds will be created as pending refunds, you can then " -#| "later mark them as done once you actually transferred the money back to " -#| "the customer." msgid "" "Any payments you selected for automatic refunds will have the refund request " "sent immediately to the respective payment provider. Manual refunds will be " "created as pending refunds, which you can later mark as done once you have " "actually transferred the money back to the customer." msgstr "" -"Tous les paiements que vous avez sélectionnés pour des remboursements " -"automatiques seront immédiatement communiqués à la demande de remboursement " -"au fournisseur de paiement respectif. Les remboursements manuels seront " -"créés en tant que remboursements en attente, vous pourrez ensuite les " -"marquer comme terminés une fois que vous aurez effectivement transféré " -"l’argent au client." +"Pour tous les paiements que vous avez sélectionnés pour un remboursement " +"automatique, la demande de remboursement sera immédiatement transmise au " +"prestataire de paiement concerné. Les remboursements manuels seront " +"enregistrés comme remboursements en attente ; vous pourrez les marquer comme " +"effectués une fois que vous aurez effectivement reversé l'argent au client." #: pretix/control/templates/pretixcontrol/order/refund_choose.html:32 msgid "Refund to original payment method" @@ -29558,11 +29527,8 @@ msgid "The new question has been created." msgstr "La nouvelle question a été créée." #: pretix/control/views/item.py:918 -#, fuzzy -#| msgctxt "subevent" -#| msgid "The selected dates have been deleted or disabled." msgid "The selected quotas have been deleted or disabled." -msgstr "Les dates sélectionnées ont été supprimées ou désactivées." +msgstr "Les quotas sélectionnés ont été supprimés ou désactivés." #: pretix/control/views/item.py:1074 msgid "The new quota has been created." @@ -30302,12 +30268,9 @@ msgstr "" "Ce plugin n'est actuellement pas autorisé pour ce compte d'organisateur." #: pretix/control/views/organizer.py:832 -#, fuzzy, python-brace-format -#| msgid "This plugin can be enabled or disabled for events individually." +#, python-brace-format msgid "This plugin cannot be activated for event {}." -msgstr "" -"Ce plugin peut être activé ou désactivé individuellement pour chaque " -"événement." +msgstr "Ce plugin ne peut pas être activé pour l'événement {}." #: pretix/control/views/organizer.py:901 msgid "The team has been created. You can now add members to the team." @@ -31362,10 +31325,9 @@ msgid "{width} x {height} mm label" msgstr "{width} x {height} mm étiquette" #: pretix/plugins/badges/templates.py:265 -#, fuzzy, python-brace-format -#| msgid "{width} x {height} mm label" +#, python-brace-format msgid "{width} x {height} inch label" -msgstr "{width} x {height} mm étiquette" +msgstr "{width} x {height} pouce étiquette" #: pretix/plugins/badges/templates/pretixplugins/badges/control_order_info.html:16 #: pretix/plugins/badges/templates/pretixplugins/badges/index.html:27 -- 2.52.0 From ac8f40353e302fb92bf660a9339a376c8fa35f43 Mon Sep 17 00:00:00 2001 From: CVZ-es Date: Fri, 29 May 2026 11:11:15 +0200 Subject: [PATCH 04/96] Translations: Update Spanish Currently translated at 100.0% (6302 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/ powered by weblate --- src/pretix/locale/es/LC_MESSAGES/django.po | 134 ++++++++------------- 1 file changed, 50 insertions(+), 84 deletions(-) diff --git a/src/pretix/locale/es/LC_MESSAGES/django.po b/src/pretix/locale/es/LC_MESSAGES/django.po index 5f6b601cd..223c96b35 100644 --- a/src/pretix/locale/es/LC_MESSAGES/django.po +++ b/src/pretix/locale/es/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2026-05-01 21:00+0000\n" -"Last-Translator: Paul Berschick \n" +"PO-Revision-Date: 2026-05-29 17:00+0000\n" +"Last-Translator: CVZ-es \n" "Language-Team: Spanish \n" "Language: es\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17\n" +"X-Generator: Weblate 2026.5\n" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670 #: pretix/control/templates/pretixcontrol/events/index.html:166 @@ -620,16 +620,17 @@ msgstr "" "como variaciones o paquetes." #: pretix/api/webhooks.py:413 -#, fuzzy -#| msgid "Quota handling" msgid "Quota changed" -msgstr "Gestión de cuotas" +msgstr "Se ha modificado la cuota" #: pretix/api/webhooks.py:414 msgid "" "This includes related events like creation, deletion, opening or closing of " "quotas. No webhook is sent for changes to the resulting availability." msgstr "" +"Esto incluye acciones relacionadas, como la creación, la eliminación, la " +"apertura o el cierre de cuotas. No se envía ningún webhook cuando se " +"producen cambios en la disponibilidad resultante." #: pretix/api/webhooks.py:419 msgid "Shop taken live" @@ -3418,11 +3419,13 @@ msgid "" "The field \"%(label)s\" may not contain special characters such as " "\"%(chars)s\"." msgstr "" +"El campo «%(label)s» no puede contener caracteres especiales como «%(chars)s" +"»." #: pretix/base/forms/questions.py:305 #, python-format msgid "The field \"%(label)s\" may not contain an URL (%(url)s)." -msgstr "" +msgstr "El campo «%(label)s» no puede contener una URL (%(url)s)." #: pretix/base/forms/questions.py:338 msgctxt "phonenumber" @@ -8361,19 +8364,14 @@ msgid "Program times" msgstr "Horarios del programa" #: pretix/base/pdf.py:503 -#, fuzzy -#| msgid "" -#| "2017-05-31 10:00 – 12:00\n" -#| "2017-05-31 14:00 – 16:00\n" -#| "2017-05-31 14:00 – 2017-06-01 14:00" msgid "" "2017-05-31 10:00 – 12:00, Room 1\n" "2017-05-31 14:00 – 16:00, Room 2\n" "2017-05-31 14:00 – 2017-06-01 14:00, Building A" msgstr "" -"2017-05-31 10:00 – 12:00\n" -"2017-05-31 14:00 – 16:00\n" -"2017-05-31 14:00 – 2017-06-01 14:00" +"31 de mayo de 2017, de 10:00 a 12:00, Sala 1\n" +"31 de mayo de 2017, de 14:00 a 16:00, Sala 2\n" +"31 de mayo de 2017, de 14:00 a 1 de junio de 2017, 14:00, Edificio A" #: pretix/base/pdf.py:507 msgid "Reusable Medium ID" @@ -8903,13 +8901,7 @@ msgid "This voucher code is not known in our database." msgstr "Este vale de compra no se conoce en nuestra base de datos." #: pretix/base/services/cart.py:165 -#, fuzzy, python-format -#| msgid "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products." -#| msgid_plural "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products." +#, python-format msgid "" "The voucher code \"%(voucher)s\" can only be used if you select at least " "%(number)s matching product." @@ -8917,22 +8909,14 @@ msgid_plural "" "The voucher code \"%(voucher)s\" can only be used if you select at least " "%(number)s matching products." msgstr[0] "" -"El vale de compra \"%(voucher)s\" solo se puede utilizar si selecciona al " -"menos %(number)s productos coincidentes." +"El código de descuento «%(voucher)s» solo se puede utilizar si seleccionas " +"al menos%(number)s productos que cumplan los requisitos." msgstr[1] "" -"Los vales de compra \"%(voucher)s\" solo se pueden utilizar si selecciona al " -"menos %(number)s productos coincidentes." +"El código de descuento «%(voucher)s» solo se puede utilizar si seleccionas " +"al menos %(number)s productos que cumplan los requisitos." #: pretix/base/services/cart.py:170 -#, fuzzy, python-format -#| msgid "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products. We have therefore removed some positions " -#| "from your cart that can no longer be purchased like this." -#| msgid_plural "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products. We have therefore removed some positions " -#| "from your cart that can no longer be purchased like this." +#, python-format msgid "" "The voucher code \"%(voucher)s\" can only be used if you select at least " "%(number)s matching product. We have therefore removed some positions from " @@ -8942,13 +8926,15 @@ msgid_plural "" "%(number)s matching products. We have therefore removed some positions from " "your cart that can no longer be purchased like this." msgstr[0] "" -"El vale de compra \"%(voucher)s\" solo se puede utilizar si selecciona al " -"menos %(number)s productos coincidentes. Por lo tanto, hemos eliminado " -"algunas posiciones de su carrito que ya no se pueden comprar así." +"El código promocional «%(voucher)s» solo se puede utilizar si seleccionas al " +"menos %(number)s producto que cumpla los requisitos. Por lo tanto, hemos " +"eliminado de tu carrito algunos artículos que ya no se pueden comprar de " +"esta forma." msgstr[1] "" -"Los vale de compra \"%(voucher)s\" solo se pueden utilizar si selecciona al " -"menos %(number)s productos coincidentes. Por lo tanto, hemos eliminado " -"algunas posiciones de su carrito que ya no se pueden comprar así." +"El código promocional «%(voucher)s» solo se puede utilizar si seleccionas al " +"menos %(number)s productos que cumplan los requisitos. Por lo tanto, hemos " +"eliminado de tu carrito algunos artículos que ya no se pueden comprar de " +"esta forma." #: pretix/base/services/cart.py:176 msgid "" @@ -14254,6 +14240,8 @@ msgid "" "You entered an URL, which is not allowed. Please remove %(match)s from your " "input." msgstr "" +"Ha introducido una URL que no está permitida. Elimina %(match)s de su " +"entrada." #: pretix/base/views/errors.py:48 msgid "" @@ -16194,14 +16182,8 @@ msgid "inactive" msgstr "inactivo" #: pretix/control/forms/item.py:1414 -#, fuzzy -#| msgid "" -#| "Sample Conference Center\n" -#| "Heidelberg, Germany" msgid "Sample Conference Center, Heidelberg, Germany" -msgstr "" -"Ejemplo de Centro de Conferencia \n" -"Heidelberg, Alemania" +msgstr "Ejemplo de Centro de Conferencia : Heidelberg, Alemania" #: pretix/control/forms/mailsetup.py:42 msgid "Hostname" @@ -23659,11 +23641,8 @@ msgid "Quota history" msgstr "Historial de cuotas" #: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:6 -#, fuzzy -#| msgctxt "subevent" -#| msgid "Change multiple dates" msgid "Change multiple quotas" -msgstr "Cambiar varias fechas" +msgstr "Modificar varias cuotas" #: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:8 #: pretix/control/templates/pretixcontrol/organizers/device_bulk_edit.html:8 @@ -23713,18 +23692,15 @@ msgstr "" #: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:4 #: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:6 -#, fuzzy -#| msgid "Delete quota" msgid "Delete quotas" -msgstr "Borrar cuota" +msgstr "Eliminar cuotas" #: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:10 -#, fuzzy, python-format -#| msgid "Are you sure you want to delete the following dates?" +#, python-format msgid "Are you sure you want to delete the following quota?" msgid_plural "Are you sure you want to delete the following %(num)s quotas?" -msgstr[0] "¿Está seguro de que desea borrar las fechas siguientes?" -msgstr[1] "¿Está seguro de que desea borrar las fechas siguientes?" +msgstr[0] "¿Está seguro de que desea eliminar la siguiente cuota?" +msgstr[1] "¿Está seguro de que desea eliminar las siguientes %(num)s cuotas?" #: pretix/control/templates/pretixcontrol/items/quotas.html:9 msgid "" @@ -24329,12 +24305,15 @@ msgid "" "generated once the customer pays the invoice or selects a payment method " "that requires an invoice." msgstr "" +"Este pedido se modificó después de que se generara la última factura. Aún no " +"se ha generado una nueva factura, ya que las facturas están configuradas " +"para generarse al realizar el pago o si así lo exige la forma de pago. Se " +"generará una nueva factura una vez que el cliente abone la factura o " +"seleccione una forma de pago que requiera una factura." #: pretix/control/templates/pretixcontrol/order/index.html:152 -#, fuzzy -#| msgid "Request invoice" msgid "Reissue invoice" -msgstr "Solicitar factura" +msgstr "Reemitir factura" #: pretix/control/templates/pretixcontrol/order/index.html:161 #: pretix/control/templates/pretixcontrol/order/index.html:413 @@ -24765,23 +24744,16 @@ msgid "How should the refund be sent?" msgstr "¿Cómo se debe de realizar este reembolso?" #: pretix/control/templates/pretixcontrol/order/refund_choose.html:25 -#, fuzzy -#| msgid "" -#| "Any payments that you selected for automatical refunds will be " -#| "immediately communicate the refund request to the respective payment " -#| "provider. Manual refunds will be created as pending refunds, you can then " -#| "later mark them as done once you actually transferred the money back to " -#| "the customer." msgid "" "Any payments you selected for automatic refunds will have the refund request " "sent immediately to the respective payment provider. Manual refunds will be " "created as pending refunds, which you can later mark as done once you have " "actually transferred the money back to the customer." msgstr "" -"Cualquier pago que haya seleccionado de manera automática para reembolso " -"será comunicado inmediatamente a la entidad de pago correspondiente. Los " -"devoluciones manuales se crearán como reembolsos pendientes, podrá marcarlos " -"como hechos una vez que se haya transferido el dinero al cliente." +"Los pagos que hayas seleccionado para reembolsos automáticos se enviarán " +"inmediatamente al proveedor de pagos correspondiente. Los reembolsos " +"manuales se crearán como reembolsos pendientes, que podrás marcar como " +"completados más adelante, una vez que hayas devuelto el dinero al cliente." #: pretix/control/templates/pretixcontrol/order/refund_choose.html:32 msgid "Refund to original payment method" @@ -29337,11 +29309,8 @@ msgid "The new question has been created." msgstr "La nueva pregunta ha sido creada." #: pretix/control/views/item.py:918 -#, fuzzy -#| msgctxt "subevent" -#| msgid "The selected dates have been deleted or disabled." msgid "The selected quotas have been deleted or disabled." -msgstr "Las fechas seleccionadas se han borrado o desactivado." +msgstr "Las cuotas seleccionadas se han eliminado o desactivado." #: pretix/control/views/item.py:1074 msgid "The new quota has been created." @@ -30073,11 +30042,9 @@ msgstr "" "Este plugin no está permitido actualmente para su cuenta de organizador." #: pretix/control/views/organizer.py:832 -#, fuzzy, python-brace-format -#| msgid "This plugin can be enabled or disabled for events individually." +#, python-brace-format msgid "This plugin cannot be activated for event {}." -msgstr "" -"Este plugin se puede activar o desactivar para eventos de forma individual." +msgstr "Este complemento no se puede activar para el evento {}." #: pretix/control/views/organizer.py:901 msgid "The team has been created. You can now add members to the team." @@ -31122,10 +31089,9 @@ msgid "{width} x {height} mm label" msgstr "etiqueta {width} x {height} mm" #: pretix/plugins/badges/templates.py:265 -#, fuzzy, python-brace-format -#| msgid "{width} x {height} mm label" +#, python-brace-format msgid "{width} x {height} inch label" -msgstr "etiqueta {width} x {height} mm" +msgstr "Etiqueta de {width} x {height} pulgadas" #: pretix/plugins/badges/templates/pretixplugins/badges/control_order_info.html:16 #: pretix/plugins/badges/templates/pretixplugins/badges/index.html:27 -- 2.52.0 From 4361641857f361547d4342bcd5e71eeeadc8a6ae Mon Sep 17 00:00:00 2001 From: Hijiri Umemoto Date: Mon, 1 Jun 2026 02:51:56 +0200 Subject: [PATCH 05/96] Translations: Update Japanese Currently translated at 100.0% (6302 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ja/ powered by weblate --- src/pretix/locale/ja/LC_MESSAGES/django.po | 105 +++++++-------------- 1 file changed, 34 insertions(+), 71 deletions(-) diff --git a/src/pretix/locale/ja/LC_MESSAGES/django.po b/src/pretix/locale/ja/LC_MESSAGES/django.po index fb14f77e4..d9ea4f2bd 100644 --- a/src/pretix/locale/ja/LC_MESSAGES/django.po +++ b/src/pretix/locale/ja/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2026-05-12 06:34+0000\n" -"Last-Translator: Yasunobu YesNo Kawaguchi \n" +"PO-Revision-Date: 2026-06-01 09:00+0000\n" +"Last-Translator: Hijiri Umemoto \n" "Language-Team: Japanese \n" "Language: ja\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.17.1\n" +"X-Generator: Weblate 2026.5\n" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670 #: pretix/control/templates/pretixcontrol/events/index.html:166 @@ -608,20 +608,20 @@ msgstr "" "更を含みます。" #: pretix/api/webhooks.py:413 -#, fuzzy -#| msgid "Quota handling" msgid "Quota changed" -msgstr "クォータの処理" +msgstr "クォータが変更されました" #: pretix/api/webhooks.py:414 msgid "" "This includes related events like creation, deletion, opening or closing of " "quotas. No webhook is sent for changes to the resulting availability." msgstr "" +"これには、クォータの作成、削除、開始または終了といった関連イベントが含まれま" +"す。結果として得られる可用性の変更については、Webhookが送信されません。" #: pretix/api/webhooks.py:419 msgid "Shop taken live" -msgstr "ショップが公開中になりました" +msgstr "ショップがオンラインになりました" #: pretix/api/webhooks.py:423 msgid "Shop taken offline" @@ -3394,11 +3394,13 @@ msgid "" "The field \"%(label)s\" may not contain special characters such as " "\"%(chars)s\"." msgstr "" +"フィールド「%(label)s」には、\"%(chars)s\" のような特殊文字を含めることはでき" +"ません。" #: pretix/base/forms/questions.py:305 #, python-format msgid "The field \"%(label)s\" may not contain an URL (%(url)s)." -msgstr "" +msgstr "フィールド「%(label)s」には URL (%(url)s) を含めることができません。" #: pretix/base/forms/questions.py:338 msgctxt "phonenumber" @@ -8189,19 +8191,14 @@ msgid "Program times" msgstr "プログラム時間" #: pretix/base/pdf.py:503 -#, fuzzy -#| msgid "" -#| "2017-05-31 10:00 – 12:00\n" -#| "2017-05-31 14:00 – 16:00\n" -#| "2017-05-31 14:00 – 2017-06-01 14:00" msgid "" "2017-05-31 10:00 – 12:00, Room 1\n" "2017-05-31 14:00 – 16:00, Room 2\n" "2017-05-31 14:00 – 2017-06-01 14:00, Building A" msgstr "" -"2017-05-31 10:00 – 12:00\n" -"2017-05-31 14:00 – 16:00\n" -"2017-05-31 14:00 – 2017-06-01 14:00" +"2017-05-31 10:00 – 12:00、部屋1\n" +"2017-05-31 14:00 – 16:00、部屋2\n" +"2017-05-31 14:00 – 2017-06-01 14:00、ビルA" #: pretix/base/pdf.py:507 msgid "Reusable Medium ID" @@ -8710,13 +8707,7 @@ msgid "This voucher code is not known in our database." msgstr "このバウチャーコードは、当社のデータベースには登録されていません。" #: pretix/base/services/cart.py:165 -#, fuzzy, python-format -#| msgid "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products." -#| msgid_plural "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products." +#, python-format msgid "" "The voucher code \"%(voucher)s\" can only be used if you select at least " "%(number)s matching product." @@ -8728,15 +8719,7 @@ msgstr[0] "" "した場合にのみ使用できます。" #: pretix/base/services/cart.py:170 -#, fuzzy, python-format -#| msgid "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products. We have therefore removed some positions " -#| "from your cart that can no longer be purchased like this." -#| msgid_plural "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products. We have therefore removed some positions " -#| "from your cart that can no longer be purchased like this." +#, python-format msgid "" "The voucher code \"%(voucher)s\" can only be used if you select at least " "%(number)s matching product. We have therefore removed some positions from " @@ -13837,6 +13820,8 @@ msgid "" "You entered an URL, which is not allowed. Please remove %(match)s from your " "input." msgstr "" +"URL を入力しましたが、許可されていません。入力から %(match)s を削除してくださ" +"い。" #: pretix/base/views/errors.py:48 msgid "" @@ -15733,14 +15718,8 @@ msgid "inactive" msgstr "無効" #: pretix/control/forms/item.py:1414 -#, fuzzy -#| msgid "" -#| "Sample Conference Center\n" -#| "Heidelberg, Germany" msgid "Sample Conference Center, Heidelberg, Germany" -msgstr "" -"サンプル・カンファレンスセンター\n" -"ドイツ、ハイデルベルク" +msgstr "サンプル・カンファレンスセンター, ドイツ, ハイデルベルク" #: pretix/control/forms/mailsetup.py:42 msgid "Hostname" @@ -22981,11 +22960,8 @@ msgid "Quota history" msgstr "クォータ履歴" #: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:6 -#, fuzzy -#| msgctxt "subevent" -#| msgid "Change multiple dates" msgid "Change multiple quotas" -msgstr "複数の日付を変更" +msgstr "複数のクォータを変更" #: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:8 #: pretix/control/templates/pretixcontrol/organizers/device_bulk_edit.html:8 @@ -23031,17 +23007,14 @@ msgstr "以下の製品は販売できなくなる可能性があります:" #: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:4 #: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:6 -#, fuzzy -#| msgid "Delete quota" msgid "Delete quotas" msgstr "クォータを削除" #: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:10 -#, fuzzy, python-format -#| msgid "Are you sure you want to delete the following dates?" +#, python-format msgid "Are you sure you want to delete the following quota?" msgid_plural "Are you sure you want to delete the following %(num)s quotas?" -msgstr[0] "以下の日付を削除してもよろしいですか?" +msgstr[0] "以下の%(num)sのクォータを削除してもよろしいですか?" #: pretix/control/templates/pretixcontrol/items/quotas.html:9 msgid "" @@ -23634,12 +23607,14 @@ msgid "" "generated once the customer pays the invoice or selects a payment method " "that requires an invoice." msgstr "" +"この注文は、最後の請求書が生成された後に変更されました。新しい請求書はまだ作" +"成されていません。請求書は支払い時に生成されるか、支払方法によって必要とされ" +"る場合に設定されているためです。お客様が請求書を支払うか、請求書が必要な支払" +"方法を選択すると、新しい請求書が生成されます。" #: pretix/control/templates/pretixcontrol/order/index.html:152 -#, fuzzy -#| msgid "Request invoice" msgid "Reissue invoice" -msgstr "請求書を要求" +msgstr "請求書を再発行する" #: pretix/control/templates/pretixcontrol/order/index.html:161 #: pretix/control/templates/pretixcontrol/order/index.html:413 @@ -24064,22 +24039,15 @@ msgid "How should the refund be sent?" msgstr "どのように払い戻しますか?" #: pretix/control/templates/pretixcontrol/order/refund_choose.html:25 -#, fuzzy -#| msgid "" -#| "Any payments that you selected for automatical refunds will be " -#| "immediately communicate the refund request to the respective payment " -#| "provider. Manual refunds will be created as pending refunds, you can then " -#| "later mark them as done once you actually transferred the money back to " -#| "the customer." msgid "" "Any payments you selected for automatic refunds will have the refund request " "sent immediately to the respective payment provider. Manual refunds will be " "created as pending refunds, which you can later mark as done once you have " "actually transferred the money back to the customer." msgstr "" -"自動払い戻しに選択した支払いは、該当する決済プロバイダーに払い戻し要求が即座" -"に通知されます。手動払い戻しは保留中の払い戻しとして作成され、実際に顧客に送" -"金した後で完了済みとしてマークできます。" +"自動返金をご選択いただいたすべての支払いについては、返金リクエストが直ちに該" +"当する決済プロバイダーへ送信されます。手動返金は保留中の返金として作成され、" +"実際に顧客に返金した後で完了としてマークできます。" #: pretix/control/templates/pretixcontrol/order/refund_choose.html:32 msgid "Refund to original payment method" @@ -28504,11 +28472,8 @@ msgid "The new question has been created." msgstr "新しい質問が作成されました。" #: pretix/control/views/item.py:918 -#, fuzzy -#| msgctxt "subevent" -#| msgid "The selected dates have been deleted or disabled." msgid "The selected quotas have been deleted or disabled." -msgstr "選択した日付は削除されたか無効になっています。" +msgstr "選択したクォータは削除されたか無効です。" #: pretix/control/views/item.py:1074 msgid "The new quota has been created." @@ -29215,10 +29180,9 @@ msgid "This plugin is currently not allowed for this organizer account." msgstr "このプラグインは現在、この主催者アカウントでは許可されていません。" #: pretix/control/views/organizer.py:832 -#, fuzzy, python-brace-format -#| msgid "This plugin can be enabled or disabled for events individually." +#, python-brace-format msgid "This plugin cannot be activated for event {}." -msgstr "このプラグインは、イベントごとに個別に有効化または無効化できます。" +msgstr "このプラグインは、イベント{}に対してアクティベートできません。" #: pretix/control/views/organizer.py:901 msgid "The team has been created. You can now add members to the team." @@ -30236,10 +30200,9 @@ msgid "{width} x {height} mm label" msgstr "{width} x {height} mm ラベル" #: pretix/plugins/badges/templates.py:265 -#, fuzzy, python-brace-format -#| msgid "{width} x {height} mm label" +#, python-brace-format msgid "{width} x {height} inch label" -msgstr "{width} x {height} mm ラベル" +msgstr "{width} x {height} インチラベル" #: pretix/plugins/badges/templates/pretixplugins/badges/control_order_info.html:16 #: pretix/plugins/badges/templates/pretixplugins/badges/index.html:27 -- 2.52.0 From 7c00383b62e34a39025ffd7cc3d2ef25fff3e9c8 Mon Sep 17 00:00:00 2001 From: Hijiri Umemoto Date: Mon, 1 Jun 2026 02:57:02 +0200 Subject: [PATCH 06/96] Translations: Update Korean Currently translated at 49.3% (3113 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ko/ powered by weblate --- src/pretix/locale/ko/LC_MESSAGES/django.po | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/pretix/locale/ko/LC_MESSAGES/django.po b/src/pretix/locale/ko/LC_MESSAGES/django.po index fe7e25efd..2278a2d65 100644 --- a/src/pretix/locale/ko/LC_MESSAGES/django.po +++ b/src/pretix/locale/ko/LC_MESSAGES/django.po @@ -8,16 +8,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2026-02-01 21:00+0000\n" -"Last-Translator: z3rrry \n" -"Language-Team: Korean \n" +"PO-Revision-Date: 2026-06-01 09:00+0000\n" +"Last-Translator: Hijiri Umemoto \n" +"Language-Team: Korean \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.15.2\n" +"X-Generator: Weblate 2026.5\n" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670 #: pretix/control/templates/pretixcontrol/events/index.html:166 @@ -48,7 +48,7 @@ msgstr "사전판매 시작하지 않음" #: pretix/control/templates/pretixcontrol/subevents/index.html:176 #: pretix/control/views/dashboards.py:549 msgid "On sale" -msgstr "" +msgstr "세일 중" #: pretix/_base_settings.py:89 msgid "English" @@ -427,10 +427,8 @@ msgstr "" #: pretix/api/serializers/organizer.py:495 #: pretix/control/views/organizer.py:1035 -#, fuzzy -#| msgid "pretix account invitation" msgid "Account invitation" -msgstr "프레틱스 계정 초대" +msgstr "계정 초대" #: pretix/api/serializers/organizer.py:516 #: pretix/control/views/organizer.py:1134 @@ -18087,10 +18085,8 @@ msgid "A payment has been performed." msgstr "수동 거래가 수행되었습니다." #: pretix/control/logdisplay.py:807 -#, fuzzy -#| msgid "A manual transaction has been performed." msgid "A refund has been performed. " -msgstr "수동 거래가 수행되었습니다." +msgstr "환불이 처리되었습니다. " #: pretix/control/logdisplay.py:808 #, python-brace-format -- 2.52.0 From 5920419e6b980a0dcbb3b894a277367ee10b08a4 Mon Sep 17 00:00:00 2001 From: Hijiri Umemoto Date: Mon, 1 Jun 2026 02:54:35 +0200 Subject: [PATCH 07/96] Translations: Update Chinese (Traditional Han script) Currently translated at 90.0% (5677 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/zh_Hant/ powered by weblate --- .../locale/zh_Hant/LC_MESSAGES/django.po | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/pretix/locale/zh_Hant/LC_MESSAGES/django.po b/src/pretix/locale/zh_Hant/LC_MESSAGES/django.po index 6d7e15bd9..f28e56a8a 100644 --- a/src/pretix/locale/zh_Hant/LC_MESSAGES/django.po +++ b/src/pretix/locale/zh_Hant/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2026-05-21 15:08+0000\n" +"PO-Revision-Date: 2026-06-01 09:00+0000\n" "Last-Translator: Hijiri Umemoto \n" "Language-Team: Chinese (Traditional Han script) \n" @@ -595,16 +595,16 @@ msgid "" msgstr "這包括新增或刪除的產品,以及對變體或捆綁等巢狀物件的更改。" #: pretix/api/webhooks.py:413 -#, fuzzy -#| msgid "Quota handling" msgid "Quota changed" -msgstr "額度處理" +msgstr "配額改變了" #: pretix/api/webhooks.py:414 msgid "" "This includes related events like creation, deletion, opening or closing of " "quotas. No webhook is sent for changes to the resulting availability." msgstr "" +"這包括建立、刪除、開啟或關閉配額等相關事件。 沒有傳送webhook來更改結果的可用" +"性。" #: pretix/api/webhooks.py:419 msgid "Shop taken live" @@ -650,7 +650,7 @@ msgstr "優惠券已更改" msgid "" "Only includes explicit changes to the voucher, not e.g. an increase of the " "number of redemptions." -msgstr "" +msgstr "僅包括對代金券的明確更改,例如不包括兌換次數的增加。" #: pretix/api/webhooks.py:460 msgid "Voucher deleted" @@ -669,22 +669,16 @@ msgid "Customer account anonymized" msgstr "客戶帳戶已匿名化" #: pretix/api/webhooks.py:476 -#, fuzzy -#| msgid "Gift card code" msgid "Gift card added" -msgstr "禮品卡代碼" +msgstr "添加了禮品卡" #: pretix/api/webhooks.py:480 -#, fuzzy -#| msgid "Gift card code" msgid "Gift card modified" -msgstr "禮品卡代碼" +msgstr "禮品卡修改了" #: pretix/api/webhooks.py:484 -#, fuzzy -#| msgid "Gift card transactions" msgid "Gift card used in transaction" -msgstr "禮品卡交易" +msgstr "交易中使用的禮品卡" #: pretix/base/addressvalidation.py:100 pretix/base/addressvalidation.py:103 #: pretix/base/addressvalidation.py:108 pretix/base/forms/questions.py:1074 -- 2.52.0 From 759ced72685c0b46ace8db2668a5870565ccd605 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 May 2026 20:08:15 +0000 Subject: [PATCH 08/96] Update sentry-sdk requirement from ==2.60.* to ==2.61.* Updates the requirements on [sentry-sdk](https://github.com/getsentry/sentry-python) to permit the latest version. - [Release notes](https://github.com/getsentry/sentry-python/releases) - [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-python/compare/2.60.0...2.61.0) --- updated-dependencies: - dependency-name: sentry-sdk dependency-version: 2.61.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9444b6ce7..ce5b7e278 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -93,7 +93,7 @@ dependencies = [ "redis==7.4.*", "reportlab==4.5.*", "requests==2.32.*", - "sentry-sdk==2.60.*", + "sentry-sdk==2.61.*", "sepaxml==2.7.*", "stripe==7.9.*", "text-unidecode==1.*", -- 2.52.0 From 21225e7753ee0cfce804e9adda8bc0399b41817a Mon Sep 17 00:00:00 2001 From: George Hickman Date: Tue, 2 Jun 2026 07:25:36 +0100 Subject: [PATCH 09/96] Add the order_approve_info signal (#6228) --- doc/development/api/general.rst | 4 ++-- src/pretix/control/signals.py | 10 ++++++++++ .../control/templates/pretixcontrol/order/approve.html | 4 ++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/doc/development/api/general.rst b/doc/development/api/general.rst index f565da5c1..18f446a5a 100644 --- a/doc/development/api/general.rst +++ b/doc/development/api/general.rst @@ -64,8 +64,8 @@ Backend .. automodule:: pretix.control.signals :members: nav_event, html_head, html_page_start, quota_detail_html, nav_topbar, nav_global, nav_organizer, nav_event_settings, - order_info, event_settings_widget, oauth_application_registered, order_position_buttons, subevent_forms, - item_formsets, order_search_filter_q, order_search_forms + order_info, order_approve_info, event_settings_widget, oauth_application_registered, + order_position_buttons, subevent_forms, item_formsets, order_search_filter_q, order_search_forms .. automodule:: pretix.base.signals :no-index: diff --git a/src/pretix/control/signals.py b/src/pretix/control/signals.py index 504aa2a82..5ce67198f 100644 --- a/src/pretix/control/signals.py +++ b/src/pretix/control/signals.py @@ -261,6 +261,16 @@ As with all event plugin signals, the ``sender`` keyword argument will contain t Additionally, the argument ``order`` and ``request`` are available. """ +order_approve_info = EventPluginSignal() +""" +Arguments: ``order``, ``request`` + +This signal is sent out to display additional information on the order approve page + +As with all event plugin signals, the ``sender`` keyword argument will contain the event. +Additionally, the argument ``order`` and ``request`` are available. +""" + order_position_buttons = EventPluginSignal() """ Arguments: ``order``, ``position``, ``request`` diff --git a/src/pretix/control/templates/pretixcontrol/order/approve.html b/src/pretix/control/templates/pretixcontrol/order/approve.html index ef9e19b18..77df8a6a1 100644 --- a/src/pretix/control/templates/pretixcontrol/order/approve.html +++ b/src/pretix/control/templates/pretixcontrol/order/approve.html @@ -1,4 +1,5 @@ {% extends "pretixcontrol/event/base.html" %} +{% load eventsignal %} {% load i18n %} {% block title %} {% trans "Approve order" %} @@ -7,6 +8,9 @@

{% trans "Approve order" %}

+ + {% eventsignal request.event "pretix.control.signals.order_approve_info" order=order request=request %} +

{% blocktrans trimmed %} Do you really want to approve this order? {% endblocktrans %}

-- 2.52.0 From 375c42dff59511b08e903c043729dcb4742f509e Mon Sep 17 00:00:00 2001 From: pajowu Date: Tue, 2 Jun 2026 08:36:52 +0200 Subject: [PATCH 10/96] Add pretix.cfg to django autoreloader files (#6236) --- src/pretix/settings.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/pretix/settings.py b/src/pretix/settings.py index 646972af7..efe925849 100644 --- a/src/pretix/settings.py +++ b/src/pretix/settings.py @@ -58,10 +58,11 @@ from django.utils.translation import gettext_lazy as _ # NOQA _config = configparser.RawConfigParser() if 'PRETIX_CONFIG_FILE' in os.environ: - _config.read_file(open(os.environ.get('PRETIX_CONFIG_FILE'), encoding='utf-8')) + config_files = [os.environ['PRETIX_CONFIG_FILE']] else: - _config.read(['/etc/pretix/pretix.cfg', os.path.expanduser('~/.pretix.cfg'), 'pretix.cfg'], - encoding='utf-8') + config_files = ['/etc/pretix/pretix.cfg', os.path.expanduser('~/.pretix.cfg'), 'pretix.cfg'] + +_config.read(config_files, encoding='utf-8') config = EnvOrParserConfig(_config) CONFIG_FILE = config @@ -704,7 +705,7 @@ if config.has_option('sentry', 'dsn') and not any(c in sys.argv for c in ('shell from sentry_sdk.integrations.logging import ( LoggingIntegration, ignore_logger, ) - from sentry_sdk.scrubber import EventScrubber, DEFAULT_DENYLIST + from sentry_sdk.scrubber import DEFAULT_DENYLIST, EventScrubber from .sentry import PretixSentryIntegration, setup_custom_filters @@ -895,3 +896,14 @@ VITE_DEV_SERVER = f"http://localhost:{VITE_DEV_SERVER_PORT}" VITE_DEV_MODE = DEBUG VITE_IGNORE = False # Used to ignore `collectstatic`/`rebuild` PRETIX_WIDGET_VITE = os.environ.get('PRETIX_WIDGET_VITE', '') not in ('', '0') + +if DEBUG: + # Reload if settings file changes + config_files_to_watch = [Path(x).absolute() for x in config_files] + + from django.dispatch import receiver + from django.utils.autoreload import BaseReloader, autoreload_started + + @receiver(autoreload_started, dispatch_uid="pretix_watch_config_file") + def watch_config_file(sender: BaseReloader, *args, **kwargs): + sender.extra_files.update(config_files_to_watch) -- 2.52.0 From d555b232755f2f1e0d57e6ae48527d16fa282181 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Tue, 2 Jun 2026 12:23:25 +0200 Subject: [PATCH 11/96] Add _none-option to ModelChoiceField and filters for organizer and event-permission in event-typeahead (#6224) * Add optional filters for organizer and event-permission on event-typeahead * include _none option only if no search query given Co-authored-by: luelista * allow _none in Select2, add ModelChoiceFieldWithNone * fix flake8 --------- Co-authored-by: luelista --- src/pretix/control/forms/__init__.py | 28 +++++++++++++++ src/pretix/control/forms/widgets.py | 35 +++++++++++++------ src/pretix/control/views/typeahead.py | 31 ++++++++++++---- src/pretix/static/pretixcontrol/js/ui/main.js | 12 ++++--- 4 files changed, 84 insertions(+), 22 deletions(-) diff --git a/src/pretix/control/forms/__init__.py b/src/pretix/control/forms/__init__.py index 6f5fb6c08..a4adbe3d9 100644 --- a/src/pretix/control/forms/__init__.py +++ b/src/pretix/control/forms/__init__.py @@ -461,3 +461,31 @@ class SalesChannelCheckboxSelectMultiple(forms.CheckboxSelectMultiple): **super().create_option(name, value, label, selected, index, subindex, attrs), "plugin_missing": plugin and plugin not in self.event.get_plugins(), } + + +class ModelChoiceIteratorWithNone(forms.models.ModelChoiceIterator): + # see django.forms.models.ModelChoiceIterator for original implementation + def __iter__(self): + if self.field.empty_label is not None: + yield ("", self.field.empty_label) + if self.field.none_label is not None: + yield ("_none", self.field.none_label) + queryset = self.queryset + # Can't use iterator() when queryset uses prefetch_related() + if not queryset._prefetch_related_lookups: + queryset = queryset.iterator() + for obj in queryset: + yield self.choice(obj) + + +class ModelChoiceFieldWithNone(forms.ModelChoiceField): + iterator = ModelChoiceIteratorWithNone + + def __init__(self, *args, **kwargs): + self.none_label = kwargs.pop("none_label", None) + super().__init__(*args, **kwargs) + + def to_python(self, value): + if value == "_none": + return value + return super().to_python(value) diff --git a/src/pretix/control/forms/widgets.py b/src/pretix/control/forms/widgets.py index d054be63a..5773a8069 100644 --- a/src/pretix/control/forms/widgets.py +++ b/src/pretix/control/forms/widgets.py @@ -29,17 +29,30 @@ class Select2Mixin: super().__init__(*args, **kwargs) def options(self, name, value, attrs=None): - if value and value[0]: - for i, selected in enumerate(self.choices.queryset.filter(pk__in=value)): - yield self.create_option( - None, - self.choices.field.prepare_value(selected), - self.choices.field.label_from_instance(selected), - True, - i, - subindex=None, - attrs=attrs - ) + if not value or not value[0]: + return + has_none = "_none" in value + if has_none: + value = [v for v in value if v != "_none"] + yield self.create_option( + None, + "_none", + self.choices.field.none_label, + True, + 0, + subindex=None, + attrs=attrs + ) + for i, selected in enumerate(self.choices.queryset.filter(pk__in=value)): + yield self.create_option( + None, + self.choices.field.prepare_value(selected), + self.choices.field.label_from_instance(selected), + True, + i + (1 if has_none else 0), + subindex=None, + attrs=attrs + ) return def optgroups(self, name, value, attrs=None): diff --git a/src/pretix/control/views/typeahead.py b/src/pretix/control/views/typeahead.py index 30fa68315..e15c74379 100644 --- a/src/pretix/control/views/typeahead.py +++ b/src/pretix/control/views/typeahead.py @@ -145,11 +145,21 @@ def event_list(request): if 'can_copy' in request.GET: qs = EventWizardCopyForm.copy_from_queryset(request.user, request.session) else: - qs = request.user.get_events_with_any_permission(request) + permission = request.GET.get('permission') + if permission: + qs = request.user.get_events_with_permission(permission, request) + else: + qs = request.user.get_events_with_any_permission(request) + + name_slug_q = Q(name__icontains=i18ncomp(query)) | Q(slug__icontains=query) + organizer = request.GET.get('organizer') + if organizer: + qs = qs.filter(organizer__slug=organizer) + else: + name_slug_q |= Q(organizer__name__icontains=i18ncomp(query)) | Q(organizer__slug__icontains=query) qs = qs.filter( - Q(name__icontains=i18ncomp(query)) | Q(slug__icontains=query) | - Q(organizer__name__icontains=i18ncomp(query)) | Q(organizer__slug__icontains=query) + name_slug_q ).annotate( min_from=Min('subevents__date_from'), max_from=Max('subevents__date_from'), @@ -162,10 +172,19 @@ def event_list(request): total = qs.count() pagesize = 20 offset = (page - 1) * pagesize + results = [] + if page == 1 and 'include_none' in request.GET and not query: + results.append({ + 'id': "_none", + 'text': _("No event"), + 'name': _("No event"), + 'type': "event", + }) + results += [ + serialize_event(e) for e in qs.select_related('organizer')[offset:offset + pagesize] + ] doc = { - 'results': [ - serialize_event(e) for e in qs.select_related('organizer')[offset:offset + pagesize] - ], + 'results': results, 'pagination': { "more": total >= (offset + pagesize) } diff --git a/src/pretix/static/pretixcontrol/js/ui/main.js b/src/pretix/static/pretixcontrol/js/ui/main.js index 06c436192..9b48016b5 100644 --- a/src/pretix/static/pretixcontrol/js/ui/main.js +++ b/src/pretix/static/pretixcontrol/js/ui/main.js @@ -639,11 +639,13 @@ var form_handlers = function (el) { ).append(" ").append($("
").text(res.organizer).html()) ); } - $ret.append( - $("").addClass("event-daterange").append( - $("").addClass("fa fa-calendar fa-fw") - ).append(" ").append(res.date_range) - ); + if (res.date_range) { + $ret.append( + $("").addClass("event-daterange").append( + $("").addClass("fa fa-calendar fa-fw") + ).append(" ").append(res.date_range) + ); + } return $ret; }, }).on("select2:select", function () { -- 2.52.0 From 6f1512f2009668e2d522d5214815439d4abd9fc3 Mon Sep 17 00:00:00 2001 From: Phin Wolkwitz Date: Tue, 2 Jun 2026 15:58:41 +0200 Subject: [PATCH 12/96] Fix #6232 - Remove pagination on categories and discounts (#6237) --- src/pretix/control/views/discounts.py | 4 ++-- src/pretix/control/views/item.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pretix/control/views/discounts.py b/src/pretix/control/views/discounts.py index 3b9055a6d..2ba19dd02 100644 --- a/src/pretix/control/views/discounts.py +++ b/src/pretix/control/views/discounts.py @@ -44,7 +44,7 @@ from pretix.control.permissions import ( from pretix.helpers.models import modelcopy from ...helpers.compat import CompatDeleteView -from . import CreateView, PaginationMixin, UpdateView +from . import CreateView, UpdateView class DiscountDelete(EventPermissionRequiredMixin, CompatDeleteView): @@ -183,7 +183,7 @@ class DiscountCreate(EventPermissionRequiredMixin, CreateView): return super().form_invalid(form) -class DiscountList(PaginationMixin, ListView): +class DiscountList(ListView): model = Discount context_object_name = 'discounts' template_name = 'pretixcontrol/items/discounts.html' diff --git a/src/pretix/control/views/item.py b/src/pretix/control/views/item.py index 624999f4f..a899800f1 100644 --- a/src/pretix/control/views/item.py +++ b/src/pretix/control/views/item.py @@ -335,7 +335,7 @@ class CategoryCreate(EventPermissionRequiredMixin, CreateView): return super().form_invalid(form) -class CategoryList(PaginationMixin, ListView): +class CategoryList(ListView): model = ItemCategory context_object_name = 'categories' template_name = 'pretixcontrol/items/categories.html' -- 2.52.0 From 3a25af6496b99812bd516c4f7667c3d800a844f4 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Tue, 2 Jun 2026 16:10:15 +0200 Subject: [PATCH 13/96] =?UTF-8?q?Control:=20fix=20button-width=20in=20even?= =?UTF-8?q?t=E2=80=99s=20dangerzone=20(#6234)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pretixcontrol/event/dangerzone.html | 66 ++++++++++--------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/src/pretix/control/templates/pretixcontrol/event/dangerzone.html b/src/pretix/control/templates/pretixcontrol/event/dangerzone.html index dc08123fc..dc2773bbe 100644 --- a/src/pretix/control/templates/pretixcontrol/event/dangerzone.html +++ b/src/pretix/control/templates/pretixcontrol/event/dangerzone.html @@ -9,23 +9,24 @@

{% trans "Go offline" %}

-
+
+

{% blocktrans trimmed %} You can take your event offline. Nobody except your team will be able to see or access it any more. {% endblocktrans %} -

-
-
- {% csrf_token %} - +

+
+ + {% csrf_token %} + - - -
+ +
@@ -34,22 +35,24 @@

{% trans "Cancel event" %}

-
+
+

{% blocktrans trimmed %} If you need to call off your event you want to cancel and refund all tickets, you can do so through this option. {% endblocktrans %} +

-
- {% if "event:cancel" in request.eventpermset %} - - +
+ + + {% if "event:cancel" in request.eventpermset %} {% trans "Cancel event" %} - - {% else %} - {% trans "No permission" %} - {% endif %} + {% else %} + {% trans "No permission" %} + {% endif %} +
@@ -59,15 +62,16 @@

{% trans "Delete personal data" %}

-
+
+

{% blocktrans trimmed %} You can remove personal data such as names and email addresses from your event and only retain the financial information such as the number and type of tickets sold. {% endblocktrans %} +

-
- +
+ {% trans "Delete personal data" %} @@ -80,15 +84,17 @@

{% trans "Delete event" %}

-
+
+

{% blocktrans trimmed %} You can delete your event completely only as long as it does not contain any undeletable data, such as orders not performed in test mode. {% endblocktrans %} +

-
+
+ class="btn btn-danger btn-lg {% if not request.event.allow_delete %}disabled{% endif %}"> {% trans "Delete event" %} -- 2.52.0 From d3151f978d3b836255d16e204cda7fcefb4a4d6d Mon Sep 17 00:00:00 2001 From: pajowu Date: Tue, 2 Jun 2026 18:41:47 +0200 Subject: [PATCH 14/96] Fix failing e2e test (#6238) Creating 15 events spaced 2 days apart only fills more than a month if the month is <= 30 days long. July isn't --- src/tests/e2e/conftest.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/tests/e2e/conftest.py b/src/tests/e2e/conftest.py index d09a151cc..053073da6 100644 --- a/src/tests/e2e/conftest.py +++ b/src/tests/e2e/conftest.py @@ -731,11 +731,13 @@ def event_series(organizer): """Create an event series with multiple subevents, items, and quotas.""" from pretix.base.models import ItemCategory + base_date = _future_dt(days=30, hour=19) + event = Event.objects.create( organizer=organizer, name='Concert Series', slug='concert-series', - date_from=_future_dt(days=30, hour=19), + date_from=base_date, has_subevents=True, currency='EUR', live=True, @@ -760,9 +762,8 @@ def event_series(organizer): ) subevents = [] - base_date = _future_dt(days=30, hour=19) - for i in range(15): + for i in range(20): se = SubEvent.objects.create( event=event, name=f'Concert Night {i + 1}', -- 2.52.0 From 721b1795216ae5e77ad542330667de32e587bc23 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Wed, 3 Jun 2026 09:12:24 +0200 Subject: [PATCH 15/96] Add support for multiple linked_orderpositions on reusable media (#5666) * change linked orderpositions to many-to-many * Update media views to list ops * return last op as fallback for linked_orderposition * add multi-op to export * update media-API * fix media-view filter * update control media forms * fix API orders * fix API orders matching media * remove cached_property linked_orderposition - keep only in API * fix media-issue signal * adapt checkin API for multiple orderpositions * remove unneeded comment * fix create/update logging * fix tests * fix more tests * fix code style * add label to reusablemedium * fix migration NOT NULL * fix tests * update docs * clarify docs updating multiple linked_orderpositions * clarify docs * no need to prefetch linked_orderpositions * improve readability * select_related order instead prefetch * add filter based on op.valid_from/until * rename secret to claim_token * Update docs for claim_token * unifiy deprecated style * Update reusablemedia.rst * Update reusablemedia.rst * Update reusablemedia.rst * fix missing claim_token in serializer * fix flake8 * add add_to_reusable_medium to order-serializer * fix tests regarding claim_token * fix flake8 * Clarify docs * list ops comma-separated in export * Add test for order-API add_to_reusable_medium * fix linked_orderpositions filter in checkinrpc * add test * Add help-text * fix multi-op media filter * fix flake8 * improve check * Fix sorting of reusable media type in overview * Add copy and qr button to reusable medium detail view * Rebase against origin/master * Add logentrytype reusable_medium.linked_orderposition.removed * add missing label_from_instance for SafeOrderPositionMultipleChoiceField * add tests for create with linked_orderposition * API add test for fallback-values in medium patch * fix flake8 * Fix indentation * fix migrations numbering * fix test * unify qutation marks * fix flake8 * micro-improve linked_op-removal-logging * simplify filter instead of annotate/get * Do not translate API-errors Co-authored-by: Raphael Michel * Fix typos in doc Co-authored-by: Raphael Michel * Update versionchanged in docs Co-authored-by: Raphael Michel * Change log to always added not changed * Add test for checkinrpc for ops out of timerang or canceled * improve tests mixing ops from different organizers * Fix logging of changed order_positions * properly log added/removed when using UI * refactor logging code * unify logging adding/removing ops via API * fix flake8 * remove unnecessary prefetch as already prefetched * optimize fetching ops * combine addon match and time-based validity match * fix combined valid and product check * re-number migrations * Apply suggestion from @raphaelm Co-authored-by: Raphael Michel * fix flake8 * New attempt at logic * Improve op_candidate-selection for error message if no op matches check-in * Fix typo * fix valid_from start time being included * use the datetime parameter for the comparison time so that the simulator works too --------- Co-authored-by: Maximilian Richt Co-authored-by: Martin Gross Co-authored-by: Raphael Michel Co-authored-by: Raphael Michel --- doc/api/resources/carts.rst | 2 +- doc/api/resources/orders.rst | 1 + doc/api/resources/reusablemedia.rst | 39 +++- src/pretix/api/serializers/media.py | 66 +++++-- src/pretix/api/serializers/order.py | 40 +++- src/pretix/api/views/checkin.py | 109 ++++++++--- src/pretix/api/views/media.py | 45 ++++- src/pretix/api/views/order.py | 4 +- src/pretix/base/exporters/reusablemedia.py | 12 +- .../0300_add_reusablemedium_label.py | 35 ++++ ...301_reusablemedium_remove_orderposition.py | 44 +++++ src/pretix/base/models/media.py | 20 +- src/pretix/base/services/orders.py | 2 +- src/pretix/control/forms/filter.py | 2 +- src/pretix/control/forms/organizer.py | 27 ++- src/pretix/control/logdisplay.py | 2 + .../organizers/reusable_media.html | 12 +- .../organizers/reusable_medium.html | 60 +++--- src/pretix/control/views/organizer.py | 47 ++++- src/tests/api/test_checkinrpc.py | 81 +++++++- src/tests/api/test_order_create.py | 73 +++++++- src/tests/api/test_reusable_media.py | 175 +++++++++++++++++- 22 files changed, 768 insertions(+), 130 deletions(-) create mode 100644 src/pretix/base/migrations/0300_add_reusablemedium_label.py create mode 100644 src/pretix/base/migrations/0301_reusablemedium_remove_orderposition.py diff --git a/doc/api/resources/carts.rst b/doc/api/resources/carts.rst index 74afdc456..b725cc5a7 100644 --- a/doc/api/resources/carts.rst +++ b/doc/api/resources/carts.rst @@ -192,7 +192,7 @@ Cart position endpoints * ``attendee_email`` (optional) * ``subevent`` (optional) * ``expires`` (optional) - * ``includes_tax`` (optional, **deprecated**, do not use, will be removed) + * ``includes_tax`` (optional, **DEPRECATED**, do not use, will be removed) * ``sales_channel`` (optional) * ``voucher`` (optional, expect a voucher code) * ``addons`` (optional, expect a list of nested objects of cart positions) diff --git a/doc/api/resources/orders.rst b/doc/api/resources/orders.rst index fe98d93e9..d34554150 100644 --- a/doc/api/resources/orders.rst +++ b/doc/api/resources/orders.rst @@ -1070,6 +1070,7 @@ Creating orders * ``valid_until`` (optional, if both ``valid_from`` and ``valid_until`` are **missing** (not ``null``) the availability will be computed from the given product) * ``requested_valid_from`` (optional, can be set **instead** of ``valid_from`` and ``valid_until`` to signal a user choice for the start time that may or may not be respected) * ``use_reusable_medium`` (optional, causes the new ticket to take over the given reusable medium, identified by its ID) + * ``add_to_reusable_medium`` (optional, causes the new ticket to be added to the given reusable medium, identified by its ID) * ``discount`` (optional, only possible if ``price`` is set; attention: if this is set to not-``null`` on any position, automatic calculation of discounts will not run) * ``answers`` diff --git a/doc/api/resources/reusablemedia.rst b/doc/api/resources/reusablemedia.rst index e0618a5b4..666a4f2c4 100644 --- a/doc/api/resources/reusablemedia.rst +++ b/doc/api/resources/reusablemedia.rst @@ -21,12 +21,16 @@ id integer Internal ID of type string Type of medium, e.g. ``"barcode"``, ``"nfc_uid"`` or ``"nfc_mf0aes"``. organizer string Organizer slug of the organizer who "owns" this medium. identifier string Unique identifier of the medium. The format depends on the ``type``. +claim_token string Secret token to claim ownership of the medium (or ``null``) +label string Label to identify the medium, usually something human readable (or ``null``) active boolean Whether this medium may be used. created datetime Date of creation updated datetime Date of last modification expires datetime Expiry date (or ``null``) customer string Identifier of a customer account this medium belongs to. -linked_orderposition integer Internal ID of a ticket this medium is linked to. +linked_orderpositions list of integers Internal IDs of tickets this medium is linked to. +linked_orderposition integer **DEPRECATED.** ID of the ticket the medium is linked to, if it is linked to + only one ticket. ``null``, if the medium is linked to none or multiple tickets. linked_giftcard integer Internal ID of a gift card this medium is linked to. info object Additional data, content depends on the ``type``. Consider this internal to the system and don't use it for your own data. @@ -39,6 +43,14 @@ Existing media types are: - ``nfc_uid`` - ``nfc_mf0aes`` + +.. versionchanged:: 2026.5 + + The ``claim_token``, ``label``, ``linked_orderpositions`` attributes have been added, the ``linked_orderposition`` attribute has been + deprecated. Note: To maintain backwards compatibility ``linked_orderposition`` contains the internal ID of the linked order position + if the medium has exactly one order position in ``linked_orderpositions``. + + Endpoints --------- @@ -77,6 +89,7 @@ Endpoints "active": True, "expires": None, "customer": None, + "linked_orderpositions": [], "linked_orderposition": None, "linked_giftcard": None, "notes": None, @@ -92,10 +105,13 @@ Endpoints :query string customer: Only show media linked to the given customer. :query string created_since: Only show media created since a given date. :query string updated_since: Only show media updated since a given date. + :query integer linked_orderpositions: Only show media linked to the given tickets. Note: you can pass multiple ticket IDs by passing + ``linked_orderpositions`` multiple times. Any medium matching any linked orderposition will be returned. :query integer linked_orderposition: Only show media linked to the given ticket. :query integer linked_giftcard: Only show media linked to the given gift card. - :query string expand: If you pass ``"linked_giftcard"``, ``"linked_giftcard.owner_ticket"``, ``"linked_orderposition"``, - or ``"customer"``, the respective field will be shown as a nested value instead of just an ID. + :query string expand: If you pass ``"linked_giftcard"``, ``"linked_giftcard.owner_ticket"``, ``"linked_orderpositions"``, + ``"linked_orderposition"`` (**DEPRECATED**), or ``"customer"``, the respective field will be shown + as a nested value instead of just an ID. The nested objects are identical to the respective resources, except that order positions will have an attribute of the format ``"order": {"code": "ABCDE", "event": "eventslug"}`` to make matching easier. The parameter can be given multiple times. @@ -134,6 +150,7 @@ Endpoints "active": True, "expires": None, "customer": None, + "linked_orderpositions": [], "linked_orderposition": None, "linked_giftcard": None, "notes": None, @@ -191,6 +208,7 @@ Endpoints "active": True, "expires": None, "customer": None, + "linked_orderpositions": [], "linked_orderposition": None, "linked_giftcard": None, "notes": None, @@ -198,9 +216,9 @@ Endpoints } :param organizer: The ``slug`` field of the organizer to look up a medium for - :query string expand: If you pass ``"linked_giftcard"``, ``"linked_orderposition"``, oder ``"customer"``, the respective + :query string expand: If you pass ``"linked_giftcard"``, ``"linked_orderpositions"``, or ``"customer"``, the respective field will be shown as a nested value instead of just an ID. The nested objects are identical to - the respective resources, except that the ``linked_orderposition`` will have an attribute of the + the respective resources, except that the ``linked_orderpositions`` each will have an attribute of the format ``"order": {"code": "ABCDE", "event": "eventslug"}`` to make matching easier. The parameter can be given multiple times. :statuscode 201: no error @@ -227,6 +245,7 @@ Endpoints "active": True, "expires": None, "customer": None, + "linked_orderpositions": [], "linked_orderposition": None, "linked_giftcard": None, "notes": None, @@ -251,6 +270,7 @@ Endpoints "active": True, "expires": None, "customer": None, + "linked_orderpositions": [], "linked_orderposition": None, "linked_giftcard": None, "notes": None, @@ -258,7 +278,7 @@ Endpoints } :param organizer: The ``slug`` field of the organizer to create a medium for - :query string expand: If you pass ``"linked_giftcard"``, ``"linked_orderposition"``, oder ``"customer"``, the respective + :query string expand: If you pass ``"linked_giftcard"``, ``"linked_orderpositions"``, or ``"customer"``, the respective field will be shown as a nested value instead of just an ID. The nested objects are identical to the respective resources, except that the ``linked_orderposition`` will have an attribute of the format ``"order": {"code": "ABCDE", "event": "eventslug"}`` to make matching easier. The parameter @@ -287,7 +307,7 @@ Endpoints Content-Length: 94 { - "linked_orderposition": 13 + "linked_orderpositions": [13, 29] } **Example response**: @@ -308,7 +328,8 @@ Endpoints "active": True, "expires": None, "customer": None, - "linked_orderposition": 13, + "linked_orderpositions": [13, 29], + "linked_orderposition": None, "linked_giftcard": None, "notes": None, "info": {} @@ -316,7 +337,7 @@ Endpoints :param organizer: The ``slug`` field of the organizer to modify :param id: The ``id`` field of the medium to modify - :query string expand: If you pass ``"linked_giftcard"``, ``"linked_orderposition"``, oder ``"customer"``, the respective + :query string expand: If you pass ``"linked_giftcard"``, ``"linked_orderpositions"``, or ``"customer"``, the respective field will be shown as a nested value instead of just an ID. The nested objects are identical to the respective resources, except that the ``linked_orderposition`` will have an attribute of the format ``"order": {"code": "ABCDE", "event": "eventslug"}`` to make matching easier. The parameter diff --git a/src/pretix/api/serializers/media.py b/src/pretix/api/serializers/media.py index d759f1468..cce6e8618 100644 --- a/src/pretix/api/serializers/media.py +++ b/src/pretix/api/serializers/media.py @@ -66,13 +66,14 @@ class ReusableMediaSerializer(I18nAwareModelSerializer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + expand_nested = self.context['request'].query_params.getlist('expand') - if 'linked_giftcard' in self.context['request'].query_params.getlist('expand'): + if 'linked_giftcard' in expand_nested: if not self.context["can_read_giftcards"]: raise PermissionDenied("No permission to access gift card details.") self.fields['linked_giftcard'] = NestedGiftCardSerializer(read_only=True, context=self.context) - if 'linked_giftcard.owner_ticket' in self.context['request'].query_params.getlist('expand'): + if 'linked_giftcard.owner_ticket' in expand_nested: self.fields['linked_giftcard'].fields['owner_ticket'] = NestedOrderPositionSerializer(read_only=True, context=self.context) else: self.fields['linked_giftcard'] = serializers.PrimaryKeyRelatedField( @@ -81,17 +82,27 @@ class ReusableMediaSerializer(I18nAwareModelSerializer): queryset=self.context['organizer'].issued_gift_cards.all() ) - if 'linked_orderposition' in self.context['request'].query_params.getlist('expand'): - # Permission Check performed in to_representation - self.fields['linked_orderposition'] = NestedOrderPositionSerializer(read_only=True) + # keep linked_orderposition (singular) for backwards compatibility, will be overwritten in self.validate + self.fields['linked_orderposition'] = serializers.PrimaryKeyRelatedField( + required=False, + allow_null=True, + queryset=OrderPosition.all.filter(order__event__organizer=self.context['organizer']), + ) + + if 'linked_orderposition' in expand_nested or 'linked_orderpositions' in expand_nested: + self.fields['linked_orderpositions'] = NestedOrderPositionSerializer( + many=True, + read_only=True + ) else: - self.fields['linked_orderposition'] = serializers.PrimaryKeyRelatedField( + self.fields['linked_orderpositions'] = serializers.PrimaryKeyRelatedField( + many=True, required=False, allow_null=True, queryset=OrderPosition.all.filter(order__event__organizer=self.context['organizer']), ) - if 'customer' in self.context['request'].query_params.getlist('expand'): + if 'customer' in expand_nested: if not self.context["can_read_customers"]: raise PermissionDenied("No permission to access customer details.") @@ -106,6 +117,21 @@ class ReusableMediaSerializer(I18nAwareModelSerializer): def validate(self, data): data = super().validate(data) + if 'linked_orderposition' in data: + linked_orderposition = data['linked_orderposition'] + # backwards-compatibility + if 'linked_orderpositions' in data: + raise ValidationError({ + 'linked_orderposition': 'You cannot use linked_orderposition and linked_orderpositions at the same time.' + }) + if self.instance and self.instance.linked_orderpositions.count() > 1: + raise ValidationError({ + 'linked_orderposition': 'There are more than one linked_orderposition. You need to use linked_orderpositions.' + }) + + data['linked_orderpositions'] = [linked_orderposition] if linked_orderposition else [] + del data['linked_orderposition'] + if 'type' in data and 'identifier' in data: qs = self.context['organizer'].reusable_media.filter( identifier=data['identifier'], type=data['type'] @@ -121,14 +147,28 @@ class ReusableMediaSerializer(I18nAwareModelSerializer): def to_representation(self, instance): r = super().to_representation(instance) request = self.context.get('request') + + ops = r.get('linked_orderpositions', []) # late permission evaluations for checks that depend on the actual linked events expand_nested = self.context['request'].query_params.getlist('expand') perm_holder = request.auth if isinstance(request.auth, (Device, TeamAPIToken)) else request.user - if 'linked_orderposition' in expand_nested: - if instance.linked_orderposition is not None: - event = instance.linked_orderposition.order.event + if ops and 'linked_orderposition' in expand_nested or 'linked_orderpositions' in expand_nested: + ops_noperm = [] + for lop in instance.linked_orderpositions.all(): + event = lop.order.event if not perm_holder.has_event_permission(event.organizer, event, 'event.orders:read', request): - r['linked_orderposition'] = {'id': instance.linked_orderposition.id} + ops_noperm.append(lop.id) + if ops_noperm: + ops = [ + {'id': op['id']} if op['id'] in ops_noperm + else op + for op in ops + ] + r['linked_orderpositions'] = ops + + # add linked_orderposition (singular) for backwards compatibility + if len(ops) < 2: + r['linked_orderposition'] = ops[0] if ops else None if 'linked_giftcard.owner_ticket' in expand_nested: gc = instance.linked_giftcard @@ -148,10 +188,12 @@ class ReusableMediaSerializer(I18nAwareModelSerializer): 'updated', 'type', 'identifier', + 'claim_token', + 'label', 'active', 'expires', 'customer', - 'linked_orderposition', + 'linked_orderpositions', 'linked_giftcard', 'info', 'notes', diff --git a/src/pretix/api/serializers/order.py b/src/pretix/api/serializers/order.py index 9fa6b5ce9..0cfcb3a46 100644 --- a/src/pretix/api/serializers/order.py +++ b/src/pretix/api/serializers/order.py @@ -1043,13 +1043,15 @@ class OrderPositionCreateSerializer(I18nAwareModelSerializer): requested_valid_from = serializers.DateTimeField(required=False, allow_null=True) use_reusable_medium = serializers.PrimaryKeyRelatedField(queryset=ReusableMedium.objects.none(), required=False, allow_null=True) + add_to_reusable_medium = serializers.PrimaryKeyRelatedField(queryset=ReusableMedium.objects.none(), + required=False, allow_null=True) class Meta: model = OrderPosition fields = ('positionid', 'item', 'variation', 'price', 'attendee_name', 'attendee_name_parts', 'attendee_email', 'company', 'street', 'zipcode', 'city', 'country', 'state', 'is_bundled', 'secret', 'addon_to', 'subevent', 'answers', 'seat', 'voucher', 'valid_from', 'valid_until', - 'requested_valid_from', 'use_reusable_medium', 'discount') + 'requested_valid_from', 'use_reusable_medium', 'add_to_reusable_medium', 'discount') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -1061,6 +1063,8 @@ class OrderPositionCreateSerializer(I18nAwareModelSerializer): with scopes_disabled(): if 'use_reusable_medium' in self.fields: self.fields['use_reusable_medium'].queryset = ReusableMedium.objects.all() + if 'add_to_reusable_medium' in self.fields: + self.fields['add_to_reusable_medium'].queryset = ReusableMedium.objects.all() def validate_secret(self, secret): if secret and OrderPosition.all.filter(order__event=self.context['event'], secret=secret).exists(): @@ -1076,6 +1080,9 @@ class OrderPositionCreateSerializer(I18nAwareModelSerializer): ) return m + def validate_add_to_reusable_medium(self, m): + return self.validate_use_reusable_medium(m) + def validate_item(self, item): if item.event != self.context['event']: raise ValidationError( @@ -1149,6 +1156,13 @@ class OrderPositionCreateSerializer(I18nAwareModelSerializer): raise ValidationError( {'discount': ['You can only specify a discount if you do the price computation, but price is not set.']} ) + + if 'use_reusable_medium' in data and 'add_to_reusable_medium' in data: + raise ValidationError({ + 'use_reusable_medium': ['You can only specify either use_reusable_medium or add_to_reusable_medium.'], + 'add_to_reusable_medium': ['You can only specify either use_reusable_medium or add_to_reusable_medium.'], + }) + return data @@ -1588,7 +1602,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer): pos_data['attendee_name_parts'] = { '_legacy': attendee_name } - pos = OrderPosition(**{k: v for k, v in pos_data.items() if k != 'answers' and k != '_quotas' and k != 'use_reusable_medium'}) + pos = OrderPosition(**{k: v for k, v in pos_data.items() if k not in ('answers', '_quotas', 'use_reusable_medium', 'add_to_reusable_medium')}) if simulate: pos.order = order._wrapped else: @@ -1662,6 +1676,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer): for pos_data in positions_data: answers_data = pos_data.pop('answers', []) use_reusable_medium = pos_data.pop('use_reusable_medium', None) + add_to_reusable_medium = pos_data.pop('add_to_reusable_medium', None) pos = pos_data['__instance'] pos._calculate_tax(invoice_address=ia) @@ -1703,10 +1718,25 @@ class OrderCreateSerializer(I18nAwareModelSerializer): answ.options.add(*options) if use_reusable_medium: - use_reusable_medium.linked_orderposition = pos - use_reusable_medium.save(update_fields=['linked_orderposition']) + for op_pk in use_reusable_medium.linked_orderpositions.values_list('pk', flat=True): + use_reusable_medium.log_action( + 'pretix.reusable_medium.linked_orderposition.removed', + data={ + 'linked_orderposition': op_pk, + } + ) + use_reusable_medium.linked_orderpositions.set([pos]) use_reusable_medium.log_action( - 'pretix.reusable_medium.linked_orderposition.changed', + 'pretix.reusable_medium.linked_orderposition.added', + data={ + 'by_order': order.code, + 'linked_orderposition': pos.pk, + } + ) + elif add_to_reusable_medium: + add_to_reusable_medium.linked_orderpositions.add(pos) + add_to_reusable_medium.log_action( + 'pretix.reusable_medium.linked_orderposition.added', data={ 'by_order': order.code, 'linked_orderposition': pos.pk, diff --git a/src/pretix/api/views/checkin.py b/src/pretix/api/views/checkin.py index c6567a4d5..20d9ff851 100644 --- a/src/pretix/api/views/checkin.py +++ b/src/pretix/api/views/checkin.py @@ -491,6 +491,7 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, ) raw_barcode_for_checkin = None from_revoked_secret = False + reusable_medium_used = None if simulate: common_checkin_args['__fake_arg_to_prevent_this_from_being_saved'] = True @@ -521,11 +522,12 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, # with respecting the force option), or it's a reusable medium (-> proceed with that) if not op_candidates: try: - media = ReusableMedium.objects.select_related('linked_orderposition').active().get( + media = ReusableMedium.objects.active().filter( + Exists(ReusableMedium.linked_orderpositions.through.objects.filter(reusablemedium_id=OuterRef('pk'))) + ).get( organizer_id=checkinlists[0].event.organizer_id, type=source_type, identifier=raw_barcode, - linked_orderposition__isnull=False, ) raw_barcode_for_checkin = raw_barcode except ReusableMedium.DoesNotExist: @@ -628,7 +630,9 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, 'list': MiniCheckinListSerializer(list_by_event[revoked_matches[0].event_id]).data, }, status=400) else: - if media.linked_orderposition.order.event_id not in list_by_event: + linked_ops = media.linked_orderpositions.all().select_related("order").prefetch_related("addons") + linked_event_ids = {op.order.event_id for op in linked_ops} + if not any(event_id in list_by_event for event_id in linked_event_ids): # Medium exists but connected ticket is for the wrong event if not simulate: checkinlists[0].event.log_action('pretix.event.checkin.unknown', data={ @@ -654,28 +658,91 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, 'checkin_texts': [], 'list': MiniCheckinListSerializer(checkinlists[0]).data, }, status=404) - op_candidates = [media.linked_orderposition] - if list_by_event[media.linked_orderposition.order.event_id].addon_match: - op_candidates += list(media.linked_orderposition.addons.all()) + op_candidates = [] + for op in linked_ops: + if op.order.event_id in list_by_event: + reusable_medium_used = media + op_candidates.append(op) + if list_by_event[op.order.event_id].addon_match: + op_candidates += list(op.addons.all()) # 3. Handle the "multiple options found" case: Except for the unlikely case of a secret being also a valid primary - # key on the same list, we're probably dealing with the ``addon_match`` case here and need to figure out - # which add-on has the right product. + # key on the same list, we're probably dealing with multiple linked_orderpositions or the ``addon_match`` case + # here and need to figure out which op has the right product. This basically is a valid-for-checkin-test on every op. if len(op_candidates) > 1: - op_candidates_matching_product = [ - op for op in op_candidates - if ( - (list_by_event[op.order.event_id].addon_match or op.secret == raw_barcode or legacy_url_support) and - (list_by_event[op.order.event_id].all_products or op.item_id in {i.pk for i in list_by_event[op.order.event_id].limit_products.all()}) - ) - ] - if len(op_candidates_matching_product) == 0: - # None of the found add-ons has the correct product, too bad! We could just error out here, but + if not reusable_medium_used: + # 3a. First, we clean up that we made an imprecise query above. If a scan is made for multiple check-in lists, + # we have queried ``addon_to__secret=raw_barcode``, even if some of the lists in question do not allow addon + # matching. So we accept all candidates that match one of these cases: + # - Exactly the ticket secret we scanned (because that's always a possible result) + # - Exactly the ticket pk we scanned (on legacy endpoints) + # - An add-on on a list that allows add-on matching + # This is not necessary when a reusable media was used, since in that case we already obeyed list.addon_match + # correctly above. + op_candidates_filtered = [ + op for op in op_candidates + if ( + op.secret == raw_barcode or + list_by_event[op.order.event_id].addon_match or + (str(op.pk) == raw_barcode and legacy_url_support and not untrusted_input) + ) + ] + else: + op_candidates_filtered = op_candidates + + if len(op_candidates_filtered) > 1: + # 3b. If we still have multiple candidates, we filter by product based on the check-in list configuration. + # This is relevant for the addon_match scenario where the scanned ticket has multiple add-ons, but only + # one is contained in the check-in list used to scan. It makes sense to filter this first, since it is a + # "static" check, i.e. scanning the same QR code on the same check-in list will always do the same, no matter + # when I scan it, and it is "intentional" filtering in the sense that the admin configured this behaviour + # into the check-in list. + op_candidates_filtered = [ + op for op in op_candidates_filtered + if list_by_event[op.order.event_id].all_products or op.item_id in {i.pk for i in list_by_event[op.order.event_id].limit_products.all()} + ] + + if len(op_candidates_filtered) > 1: + # 3c. If we still have multiple candidates, we filter by validity date. This was introduced for the case where + # a reusable media refers to two tickets, one currently valid and one expired or in the future. Howeer, + # it could in theory also happen with two add-ons being on the same check-in list but without overlapping + # validity. It makes sense to filter this "after" the previous checks since it is not "intentional" filtering + # configured by the admin but "accidental" filtering that depends on the time of execution. + op_candidates_filtered = [ + op for op in op_candidates_filtered + if ( + (not op.valid_from or op.valid_from <= datetime) and + (not op.valid_until or op.valid_until > datetime) + ) + ] + + if len(op_candidates_filtered) == 0: + # None of the ops is valid today or has the correct product, too bad! We could just error out here, but # instead we just continue with *any* product and have it rejected by the check in perform_checkin. - # This has the advantage of a better error message. - op_candidates = [op_candidates[0]] - elif len(op_candidates_matching_product) > 1: + # To improve the error message, we select the op that will "work next" or - if none matches - "worked last". + op_candidate = None + for op in op_candidates: + if ( + op.valid_from and op.valid_from > datetime and + (not op_candidate or op.valid_from < op_candidate.valid_from) + ): + op_candidate = op + + if not op_candidate: + # no candidate in the future, get closest in the past + for op in op_candidates: + if ( + op.valid_until and op.valid_until < datetime and + (not op_candidate or op.valid_until > op_candidate.valid_until) + ): + op_candidate = op + + if not op_candidate: + op_candidate = op_candidates[0] + + op_candidates = [op_candidate] + elif len(op_candidates_filtered) > 1: # It's still ambiguous, we'll error out. # We choose the first match (regardless of product) for the logging since it's most likely to be the # base product according to our order_by above. @@ -709,7 +776,7 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, 'list': MiniCheckinListSerializer(list_by_event[op.order.event_id]).data, }, status=400) else: - op_candidates = op_candidates_matching_product + op_candidates = op_candidates_filtered op = op_candidates[0] common_checkin_args['list'] = list_by_event[op.order.event_id] diff --git a/src/pretix/api/views/media.py b/src/pretix/api/views/media.py index 7b3be781f..7b1509128 100644 --- a/src/pretix/api/views/media.py +++ b/src/pretix/api/views/media.py @@ -53,10 +53,12 @@ with scopes_disabled(): customer = django_filters.CharFilter(field_name='customer__identifier') updated_since = django_filters.IsoDateTimeFilter(field_name='updated', lookup_expr='gte') created_since = django_filters.IsoDateTimeFilter(field_name='created', lookup_expr='gte') + # backwards-compatible + linked_orderposition = django_filters.NumberFilter(field_name='linked_orderpositions__id') class Meta: model = ReusableMedium - fields = ['identifier', 'type', 'active', 'customer', 'linked_orderposition', 'linked_giftcard'] + fields = ['identifier', 'type', 'active', 'customer', 'linked_orderpositions', 'linked_giftcard'] class ReusableMediaViewSet(viewsets.ModelViewSet): @@ -75,7 +77,7 @@ class ReusableMediaViewSet(viewsets.ModelViewSet): ).order_by().values('card').annotate(s=Sum('value')).values('s') return self.request.organizer.reusable_media.prefetch_related( Prefetch( - 'linked_orderposition', + 'linked_orderpositions', queryset=OrderPosition.objects.select_related( 'order', 'order__event', 'order__event__organizer', 'seat', ).prefetch_related( @@ -117,14 +119,38 @@ class ReusableMediaViewSet(viewsets.ModelViewSet): @transaction.atomic() def perform_update(self, serializer): - ReusableMedium.objects.select_for_update(of=OF_SELF).get(pk=self.get_object().pk) + rm = ReusableMedium.objects.select_for_update(of=OF_SELF).get(pk=self.get_object().pk) + prev_linked_ops_pks = list(rm.linked_orderpositions.values_list("pk", flat=True)) inst = serializer.save(identifier=serializer.instance.identifier, type=serializer.instance.type) - inst.log_action( - 'pretix.reusable_medium.changed', - user=self.request.user, - auth=self.request.auth, - data=self.request.data, - ) + linked_ops_pks = inst.linked_orderpositions.values_list("pk", flat=True) + for op_pk in prev_linked_ops_pks: + if op_pk not in linked_ops_pks: + inst.log_action( + 'pretix.reusable_medium.linked_orderposition.removed', + user=self.request.user, + auth=self.request.auth, + data={ + 'linked_orderposition': op_pk, + } + ) + for op_pk in linked_ops_pks: + if op_pk not in prev_linked_ops_pks: + inst.log_action( + 'pretix.reusable_medium.linked_orderposition.added', + user=self.request.user, + auth=self.request.auth, + data={ + 'linked_orderposition': op_pk, + } + ) + data = {k: v for k, v in self.request.data.items() if k not in ('linked_orderposition', 'linked_orderpositions')} + if data: + inst.log_action( + 'pretix.reusable_medium.changed', + user=self.request.user, + auth=self.request.auth, + data=data, + ) return inst def perform_destroy(self, instance): @@ -157,7 +183,6 @@ class ReusableMediaViewSet(viewsets.ModelViewSet): type=s.validated_data["type"], identifier=s.validated_data["identifier"], ) - m.linked_orderposition = None # not relevant for cross-organizer m.customer = None # not relevant for cross-organizer s = self.get_serializer(m) return Response({"result": s.data}) diff --git a/src/pretix/api/views/order.py b/src/pretix/api/views/order.py index 850ff0661..31a81ed0b 100644 --- a/src/pretix/api/views/order.py +++ b/src/pretix/api/views/order.py @@ -194,7 +194,7 @@ with scopes_disabled(): ) ).values('id') - matching_media = ReusableMedium.objects.filter(identifier=u).values_list('linked_orderposition__order_id', flat=True) + matching_media = ReusableMedium.objects.filter(identifier=u).values_list('linked_orderpositions__order_id', flat=True) mainq = ( code @@ -1034,7 +1034,7 @@ with scopes_disabled(): search = django_filters.CharFilter(method='search_qs') def search_qs(self, queryset, name, value): - matching_media = ReusableMedium.objects.filter(identifier=value).values_list('linked_orderposition', flat=True) + matching_media = ReusableMedium.objects.filter(identifier=value).values_list('linked_orderpositions', flat=True) return queryset.filter( Q(secret__istartswith=value) | Q(attendee_name_cached__icontains=value) diff --git a/src/pretix/base/exporters/reusablemedia.py b/src/pretix/base/exporters/reusablemedia.py index fbc600590..10f951379 100644 --- a/src/pretix/base/exporters/reusablemedia.py +++ b/src/pretix/base/exporters/reusablemedia.py @@ -20,12 +20,13 @@ # . # +from django.db.models import Prefetch from django.dispatch import receiver from django.utils.formats import date_format from django.utils.translation import gettext_lazy as _, pgettext, pgettext_lazy from ..exporter import ListExporter, OrganizerLevelExportMixin -from ..models import ReusableMedium +from ..models import OrderPosition, ReusableMedium from ..signals import register_multievent_data_exporters @@ -44,7 +45,9 @@ class ReusableMediaExporter(OrganizerLevelExportMixin, ListExporter): media = ReusableMedium.objects.filter( organizer=self.organizer, ).select_related( - 'customer', 'linked_orderposition', 'linked_giftcard', + 'customer', 'linked_giftcard', + ).prefetch_related( + Prefetch('linked_orderpositions', queryset=OrderPosition.objects.select_related("order")) ).order_by('created') headers = [ @@ -62,17 +65,16 @@ class ReusableMediaExporter(OrganizerLevelExportMixin, ListExporter): yield self.ProgressSetTotal(total=media.count()) for medium in media.iterator(chunk_size=1000): - row = [ + yield [ medium.type, medium.identifier, _('Yes') if medium.active else _('No'), date_format(medium.expires, 'SHORT_DATETIME_FORMAT') if medium.expires else '', medium.customer.identifier if medium.customer_id else '', - f"{medium.linked_orderposition.order.code}-{medium.linked_orderposition.positionid}" if medium.linked_orderposition_id else '', + ', '.join([f"{op.order.code}-{op.positionid}" for op in medium.linked_orderpositions.all()]), medium.linked_giftcard.secret if medium.linked_giftcard_id else '', medium.notes, ] - yield row def get_filename(self): return f'{self.organizer.slug}_media' diff --git a/src/pretix/base/migrations/0300_add_reusablemedium_label.py b/src/pretix/base/migrations/0300_add_reusablemedium_label.py new file mode 100644 index 000000000..0352c50b8 --- /dev/null +++ b/src/pretix/base/migrations/0300_add_reusablemedium_label.py @@ -0,0 +1,35 @@ +# Generated by Django 4.2.26 on 2025-11-24 11:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("pretixbase", "0299_itemprogramtime_location"), + ] + + operations = [ + migrations.AddField( + model_name="reusablemedium", + name="claim_token", + field=models.CharField(max_length=200, null=True), + ), + migrations.AddField( + model_name="reusablemedium", + name="label", + field=models.CharField(max_length=200, null=True), + ), + # use temporary related_name "linked_mediums" for ManyToManyField, so we can migrate existing data + migrations.AddField( + model_name="reusablemedium", + name="linked_orderpositions", + field=models.ManyToManyField( + related_name="linked_mediums", to="pretixbase.orderposition" + ), + ), + migrations.RunSQL( + sql="INSERT INTO pretixbase_reusablemedium_linked_orderpositions (reusablemedium_id, orderposition_id) SELECT id, linked_orderposition_id FROM pretixbase_reusablemedium WHERE linked_orderposition_id IS NOT NULL;", + reverse_sql="DELETE FROM pretixbase_reusablemedium_linked_orderpositions;", + ), + ] diff --git a/src/pretix/base/migrations/0301_reusablemedium_remove_orderposition.py b/src/pretix/base/migrations/0301_reusablemedium_remove_orderposition.py new file mode 100644 index 000000000..8ba0a64b8 --- /dev/null +++ b/src/pretix/base/migrations/0301_reusablemedium_remove_orderposition.py @@ -0,0 +1,44 @@ +# Generated by Django 4.2.26 on 2025-11-24 11:32 + +from django.db import migrations, models + + +def reverse(apps, schema_editor): + ReusableMedium = apps.get_model('pretixbase', 'ReusableMedium') + + qs = ReusableMedium.linked_orderpositions.through.objects + objs = [] + # get last added orderposition from linked_orderpositions + for rm_id, op_id in qs.filter(id__in=qs.values("reusablemedium_id").annotate(max_id=models.Max('id')).values('max_id')).values_list("reusablemedium_id", "orderposition_id"): + obj = ReusableMedium( + id=rm_id, + linked_orderposition_id=op_id, + ) + objs.append(obj) + + ReusableMedium.objects.bulk_update(objs, ['linked_orderposition_id']) + + +class Migration(migrations.Migration): + + dependencies = [ + ("pretixbase", "0300_add_reusablemedium_label"), + ] + + operations = [ + # according to the docs, UPDATE FROM should run similarly on sqlite and postgres, but I could not get it to work + # so roll back the data migration with code before deleting data from through-table in 0297 + migrations.RunPython(migrations.RunPython.noop, reverse), + migrations.RemoveField( + model_name="reusablemedium", + name="linked_orderposition", + ), + # change related_name for new ManyToManyField to previously used linked_media + migrations.AlterField( + model_name="reusablemedium", + name="linked_orderpositions", + field=models.ManyToManyField( + related_name="linked_media", to="pretixbase.orderposition" + ), + ), + ] diff --git a/src/pretix/base/models/media.py b/src/pretix/base/models/media.py index d14dbdcc1..eabefae59 100644 --- a/src/pretix/base/models/media.py +++ b/src/pretix/base/models/media.py @@ -72,6 +72,16 @@ class ReusableMedium(LoggedModel): max_length=200, verbose_name=pgettext_lazy('reusable_medium', 'Identifier'), ) + claim_token = models.CharField( + max_length=200, + verbose_name=pgettext_lazy('reusable_medium', 'Claim token'), + null=True, blank=True + ) + label = models.CharField( + max_length=200, + verbose_name=pgettext_lazy('reusable_medium', 'Label'), + null=True, blank=True + ) active = models.BooleanField( verbose_name=_('Active'), @@ -89,12 +99,14 @@ class ReusableMedium(LoggedModel): on_delete=models.SET_NULL, verbose_name=_('Customer account'), ) - linked_orderposition = models.ForeignKey( + linked_orderpositions = models.ManyToManyField( OrderPosition, - null=True, blank=True, related_name='linked_media', - on_delete=models.SET_NULL, - verbose_name=_('Linked ticket'), + verbose_name=_('Linked tickets'), + help_text=_( + 'If you link to more than one ticket, make sure there is no overlap in validity. ' + 'If multiple tickets are valid at once, this will lead to failed check-ins.' + ) ) linked_giftcard = models.ForeignKey( GiftCard, diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 8fe2d3f1a..cdd0cd2f5 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -3515,8 +3515,8 @@ def signal_listener_issue_media(sender: Event, order: Order, **kwargs): identifier=mt.generate_identifier(sender.organizer), active=True, customer=order.customer, - linked_orderposition=p, ) + rm.linked_orderpositions.add(p) rm.log_action( 'pretix.reusable_medium.created', data={ diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index fda7545a0..b4ce01649 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -1871,7 +1871,7 @@ class ReusableMediaFilterForm(FilterForm): Q(identifier__icontains=query) | Q(customer__identifier__icontains=query) | Q(customer__external_identifier__istartswith=query) - | Q(linked_orderposition__order__code__icontains=query) + | Q(linked_orderpositions__order__code__icontains=query) | Q(linked_giftcard__secret__icontains=query) ) diff --git a/src/pretix/control/forms/organizer.py b/src/pretix/control/forms/organizer.py index d0c48fc3d..a1e39981b 100644 --- a/src/pretix/control/forms/organizer.py +++ b/src/pretix/control/forms/organizer.py @@ -86,7 +86,7 @@ from pretix.control.forms import ExtFileField, SplitDateTimeField from pretix.control.forms.event import ( SafeEventMultipleChoiceField, multimail_validate, ) -from pretix.control.forms.widgets import Select2 +from pretix.control.forms.widgets import Select2, Select2Multiple from pretix.multidomain.models import KnownDomain from pretix.multidomain.urlreverse import build_absolute_uri @@ -249,6 +249,15 @@ class SafeOrderPositionChoiceField(forms.ModelChoiceField): return f'{op.order.code}-{op.positionid} ({str(op.item) + ((" - " + str(op.variation)) if op.variation else "")})' +class SafeOrderPositionMultipleChoiceField(forms.ModelMultipleChoiceField): + def __init__(self, queryset, **kwargs): + queryset = queryset.model.all.none() + super().__init__(queryset, **kwargs) + + def label_from_instance(self, op): + return f'{op.order.code}-{op.positionid} ({str(op.item) + ((" - " + str(op.variation)) if op.variation else "")})' + + class EventMetaPropertyForm(I18nModelForm): class Meta: model = EventMetaProperty @@ -963,12 +972,12 @@ class ReusableMediumUpdateForm(forms.ModelForm): class Meta: model = ReusableMedium - fields = ['active', 'expires', 'customer', 'linked_giftcard', 'linked_orderposition', 'notes'] + fields = ['active', 'expires', 'customer', 'linked_giftcard', 'linked_orderpositions', 'notes'] field_classes = { 'expires': SplitDateTimeField, 'customer': SafeModelChoiceField, 'linked_giftcard': SafeModelChoiceField, - 'linked_orderposition': SafeOrderPositionChoiceField, + 'linked_orderpositions': SafeOrderPositionMultipleChoiceField, } widgets = { 'expires': SplitDateTimePickerWidget, @@ -978,8 +987,8 @@ class ReusableMediumUpdateForm(forms.ModelForm): super().__init__(*args, **kwargs) organizer = self.instance.organizer - self.fields['linked_orderposition'].queryset = OrderPosition.all.filter(order__event__organizer=organizer).all() - self.fields['linked_orderposition'].widget = Select2( + self.fields['linked_orderpositions'].queryset = OrderPosition.all.filter(order__event__organizer=organizer).all() + self.fields['linked_orderpositions'].widget = Select2Multiple( attrs={ 'data-model-select2': 'generic', 'data-select2-url': reverse('control:organizer.ticket_select2', kwargs={ @@ -987,8 +996,8 @@ class ReusableMediumUpdateForm(forms.ModelForm): }), } ) - self.fields['linked_orderposition'].widget.choices = self.fields['linked_orderposition'].choices - self.fields['linked_orderposition'].required = False + self.fields['linked_orderpositions'].widget.choices = self.fields['linked_orderpositions'].choices + self.fields['linked_orderpositions'].required = False self.fields['linked_giftcard'].queryset = organizer.issued_gift_cards.all() self.fields['linked_giftcard'].widget = Select2( @@ -1042,12 +1051,12 @@ class ReusableMediumCreateForm(ReusableMediumUpdateForm): class Meta: model = ReusableMedium - fields = ['active', 'type', 'identifier', 'expires', 'linked_orderposition', 'linked_giftcard', 'customer', 'notes'] + fields = ['active', 'type', 'identifier', 'expires', 'linked_orderpositions', 'linked_giftcard', 'customer', 'notes'] field_classes = { 'expires': SplitDateTimeField, 'customer': SafeModelChoiceField, 'linked_giftcard': SafeModelChoiceField, - 'linked_orderposition': SafeOrderPositionChoiceField, + 'linked_orderpositions': SafeOrderPositionMultipleChoiceField, } widgets = { 'expires': SplitDateTimePickerWidget, diff --git a/src/pretix/control/logdisplay.py b/src/pretix/control/logdisplay.py index 12fb8455d..84e3365ae 100644 --- a/src/pretix/control/logdisplay.py +++ b/src/pretix/control/logdisplay.py @@ -743,6 +743,8 @@ class CoreUserImpersonatedLogEntryType(UserImpersonatedLogEntryType): 'pretix.reusable_medium.created': _('The reusable medium has been created.'), 'pretix.reusable_medium.created.auto': _('The reusable medium has been created automatically.'), 'pretix.reusable_medium.changed': _('The reusable medium has been changed.'), + 'pretix.reusable_medium.linked_orderposition.added': _('A new ticket has been added to the medium.'), + 'pretix.reusable_medium.linked_orderposition.removed': _('A ticket has been removed from the medium.'), 'pretix.reusable_medium.linked_orderposition.changed': _('The medium has been connected to a new ticket.'), 'pretix.reusable_medium.linked_giftcard.changed': _('The medium has been connected to a new gift card.'), 'pretix.email.error': _('Sending of an email has failed.'), diff --git a/src/pretix/control/templates/pretixcontrol/organizers/reusable_media.html b/src/pretix/control/templates/pretixcontrol/organizers/reusable_media.html index 9b96fc8af..6b2f9e2c7 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/reusable_media.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/reusable_media.html @@ -58,8 +58,8 @@ {% trans "Media type" context "reusable_media" %} - - + + {% trans "Connections" context "reusable_media" %} @@ -90,13 +90,13 @@ {% endif %} {% endif %} - {% if m.linked_orderposition %} + {% for op in m.linked_orderpositions.all %} - - {{ m.linked_orderposition.order.code }}-{{ m.linked_orderposition.positionid }} + + {{ op.order.code }}-{{ op.positionid }} - {% endif %} + {% endfor %} {% if m.linked_giftcard %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/reusable_medium.html b/src/pretix/control/templates/pretixcontrol/organizers/reusable_medium.html index f53ebbf0c..4cac9db0a 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/reusable_medium.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/reusable_medium.html @@ -26,7 +26,19 @@
{% trans "Media type" context "reusable_media" %}
{{ medium.get_type_display }}
{% trans "Identifier" context "reusable_media" %}
-
{{ medium.identifier }}
+
+ {{ medium.identifier }} + + {% if medium.type == "barcode" %} + + {% endif %} +
{% trans "Status" %}
{% if not medium.active %} @@ -41,34 +53,34 @@
{% if medium.customer %} - - {% if "organizer.customers:read" in request.orgapermset %} - + + {% if "organizer.customers:read" in request.orgapermset %} + + {{ medium.customer }} + + {% else %} {{ medium.customer }} - - {% else %} - {{ medium.customer }} - {% endif %} - + {% endif %} + {% endif %} - {% if medium.linked_orderposition %} + {% for op in medium.linked_orderpositions.all %} - - - {{ medium.linked_orderposition.order.code }}-{{ medium.linked_orderposition.positionid }} - - {% endif %} + + + {{ op.order.code }}-{{ op.positionid }} + + {% endfor %} {% if medium.linked_giftcard %} - - {% if "organizer.giftcards:read" in request.orgapermset %} - - {{ medium.linked_giftcard.secret }} - - {% else %} - {{ medium.linked_giftcard.secret|slice:":3" }}… - {% endif %} - + + {% if "organizer.giftcards:read" in request.orgapermset %} + + {{ medium.linked_giftcard.secret }} + + {% else %} + {{ medium.linked_giftcard.secret|slice:":3" }}… + {% endif %} + {% endif %}
{% if medium.notes %} diff --git a/src/pretix/control/views/organizer.py b/src/pretix/control/views/organizer.py index e4854b24c..c7c64fc90 100644 --- a/src/pretix/control/views/organizer.py +++ b/src/pretix/control/views/organizer.py @@ -3384,8 +3384,10 @@ class ReusableMediaListView(OrganizerDetailViewMixin, OrganizerPermissionRequire def get_queryset(self): qs = self.request.organizer.reusable_media.select_related( - 'customer', 'linked_orderposition', 'linked_orderposition__order', 'linked_orderposition__order__event', - 'linked_giftcard' + 'customer', + 'linked_giftcard', + ).prefetch_related( + Prefetch('linked_orderpositions', queryset=OrderPosition.objects.select_related("order", "order__event")) ) if self.filter_form.is_valid(): qs = self.filter_form.filter_qs(qs) @@ -3433,10 +3435,14 @@ class ReusableMediumCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequ @transaction.atomic def form_valid(self, form): r = super().form_valid(form) - form.instance.log_action('pretix.reusable_medium.created', user=self.request.user, data={ + + data = { k: getattr(form.instance, k) for k in form.changed_data - }) + } + if "linked_orderpositions" in data: + data["linked_orderpositions"] = data["linked_orderpositions"].values_list("pk", flat=True) + form.instance.log_action('pretix.reusable_medium.created', user=self.request.user, data=data) messages.success(self.request, _('Your changes have been saved.')) return r @@ -3461,13 +3467,40 @@ class ReusableMediumUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequ @transaction.atomic def form_valid(self, form): + prev_linked_ops_pks = list(getattr(self.object, "linked_orderpositions").values_list("pk", flat=True)) + result = super().form_valid(form) if form.has_changed(): - self.object.log_action('pretix.reusable_medium.changed', user=self.request.user, data={ + data = { k: getattr(self.object, k) for k in form.changed_data - }) + } + if "linked_orderpositions" in data: + # handle changes to linked_orderpositions separately + linked_ops_pks = data["linked_orderpositions"].values_list("pk", flat=True) + del data["linked_orderpositions"] + for op_pk in prev_linked_ops_pks: + if op_pk not in linked_ops_pks: + self.object.log_action( + 'pretix.reusable_medium.linked_orderposition.removed', + user=self.request.user, + data={ + 'linked_orderposition': op_pk, + } + ) + for op_pk in linked_ops_pks: + if op_pk not in prev_linked_ops_pks: + self.object.log_action( + 'pretix.reusable_medium.linked_orderposition.added', + user=self.request.user, + data={ + 'linked_orderposition': op_pk, + } + ) + if data: + # log change-action only for changes other than linked_orderpositions + self.object.log_action('pretix.reusable_medium.changed', user=self.request.user, data=data) messages.success(self.request, _('Your changes have been saved.')) - return super().form_valid(form) + return result def get_success_url(self): return reverse('control:organizer.reusable_medium', kwargs={ diff --git a/src/tests/api/test_checkinrpc.py b/src/tests/api/test_checkinrpc.py index 44e278a93..78885344a 100644 --- a/src/tests/api/test_checkinrpc.py +++ b/src/tests/api/test_checkinrpc.py @@ -286,12 +286,12 @@ def test_by_secret_special_chars(token_client, organizer, clist, event, order): @pytest.mark.django_db def test_by_medium(token_client, organizer, clist, event, order): with scopes_disabled(): - ReusableMedium.objects.create( + rm = ReusableMedium.objects.create( type="barcode", identifier="abcdef", organizer=organizer, - linked_orderposition=order.positions.first(), ) + rm.linked_orderpositions.add(order.positions.first()) resp = _redeem(token_client, organizer, clist, "abcdef", {"source_type": "barcode"}) assert resp.status_code == 201 assert resp.data['status'] == 'ok' @@ -301,6 +301,71 @@ def test_by_medium(token_client, organizer, clist, event, order): assert ci.raw_source_type == "barcode" +@pytest.mark.django_db +def test_by_medium_multiple_orderpositions(token_client, organizer, clist_all, event, order): + with scopes_disabled(): + rm = ReusableMedium.objects.create( + type="barcode", + identifier="abcdef", + organizer=organizer, + ) + op_item_first = order.positions.first() + rm.linked_orderpositions.add(op_item_first) + op_item_other = order.positions.all()[1] + rm.linked_orderpositions.add(op_item_other) + + # multiple tickets are valid => no check-in + resp = _redeem(token_client, organizer, clist_all, "abcdef", {"source_type": "barcode"}) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'ambiguous' + + with scopes_disabled(): + op_item_other.valid_from = datetime.datetime(2020, 1, 1, 12, 0, 0, tzinfo=event.timezone) + op_item_other.valid_until = datetime.datetime(2020, 1, 1, 15, 0, 0, tzinfo=event.timezone) + op_item_other.save() + + with freeze_time("2020-01-01 13:45:00"): + # multiple tickets are valid => no check-in + resp = _redeem(token_client, organizer, clist_all, "abcdef", {"source_type": "barcode"}) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'ambiguous' + + with freeze_time("2020-01-01 10:45:00"): + resp = _redeem(token_client, organizer, clist_all, "abcdef", {"source_type": "barcode"}) + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + + with freeze_time("2020-01-01 15:45:00"): + resp = _redeem(token_client, organizer, clist_all, "abcdef", {"source_type": "barcode"}) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'already_redeemed' + + with scopes_disabled(): + op_item_first.valid_from = datetime.datetime(2020, 1, 1, 10, 0, 0, tzinfo=event.timezone) + op_item_first.valid_until = datetime.datetime(2020, 1, 1, 12, 0, 0, tzinfo=event.timezone) + op_item_first.save() + + with freeze_time("2020-01-01 15:45:00"): + resp = _redeem(token_client, organizer, clist_all, "abcdef", {"source_type": "barcode"}) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'invalid_time' + + with scopes_disabled(): + op_item_first.canceled = True + op_item_first.save() + op_item_other.canceled = True + op_item_other.save() + + resp = _redeem(token_client, organizer, clist_all, "abcdef", {"source_type": "barcode"}) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'canceled' + + @pytest.mark.django_db def test_by_medium_not_connected(token_client, organizer, clist, event, order): with scopes_disabled(): @@ -318,12 +383,12 @@ def test_by_medium_not_connected(token_client, organizer, clist, event, order): @pytest.mark.django_db def test_by_medium_wrong_event(token_client, organizer, clist, event, order2): with scopes_disabled(): - ReusableMedium.objects.create( + rm = ReusableMedium.objects.create( type="barcode", identifier="abcdef", organizer=organizer, - linked_orderposition=order2.positions.first(), ) + rm.linked_orderpositions.add(order2.positions.first()) resp = _redeem(token_client, organizer, clist, "abcdef", {"source_type": "barcode"}) assert resp.status_code == 404 assert resp.data['status'] == 'error' @@ -337,12 +402,12 @@ def test_by_medium_wrong_event(token_client, organizer, clist, event, order2): @pytest.mark.django_db def test_by_medium_wrong_type(token_client, organizer, clist, event, order): with scopes_disabled(): - ReusableMedium.objects.create( + rm = ReusableMedium.objects.create( type="nfc_uid", identifier="abcdef", organizer=organizer, - linked_orderposition=order.positions.first(), ) + rm.linked_orderpositions.add(order.positions.first()) resp = _redeem(token_client, organizer, clist, "abcdef", {"source_type": "barcode"}) assert resp.status_code == 404 assert resp.data['status'] == 'error' @@ -355,13 +420,13 @@ def test_by_medium_wrong_type(token_client, organizer, clist, event, order): @pytest.mark.django_db def test_by_medium_inactive(token_client, organizer, clist, event, order): with scopes_disabled(): - ReusableMedium.objects.create( + rm = ReusableMedium.objects.create( type="barcode", identifier="abcdef", organizer=organizer, active=False, - linked_orderposition=order.positions.first(), ) + rm.linked_orderpositions.add(order.positions.first()) resp = _redeem(token_client, organizer, clist, "abcdef", {"source_type": "barcode"}) assert resp.status_code == 404 assert resp.data['status'] == 'error' diff --git a/src/tests/api/test_order_create.py b/src/tests/api/test_order_create.py index fe0377946..686405c5d 100644 --- a/src/tests/api/test_order_create.py +++ b/src/tests/api/test_order_create.py @@ -3121,9 +3121,78 @@ def test_order_create_use_medium(token_client, organizer, event, item, quota, qu with scopes_disabled(): o = Order.objects.get(code=resp.data['code']) medium.refresh_from_db() - assert o.positions.first() == medium.linked_orderposition + assert o.positions.first() == medium.linked_orderpositions.first() assert resp.data['positions'][0]['pdf_data']['medium_identifier'] == medium.identifier + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/orders/?pdf_data=true'.format( + organizer.slug, event.slug + ), format='json', data=res + ) + assert resp.status_code == 201 + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + medium.refresh_from_db() + assert medium.linked_orderpositions.count() == 1 + assert o.positions.first() == medium.linked_orderpositions.first() + assert resp.data['positions'][0]['pdf_data']['medium_identifier'] == medium.identifier + + +@pytest.mark.django_db +def test_order_create_add_to_medium(token_client, organizer, event, item, quota, question, medium): + item.media_type = medium.type + item.media_policy = Item.MEDIA_POLICY_REUSE_OR_NEW + item.save() + res = copy.deepcopy(ORDER_CREATE_PAYLOAD) + res['positions'][0]['item'] = item.pk + res['positions'][0]['use_reusable_medium'] = medium.pk + res['positions'][0]['add_to_reusable_medium'] = medium.pk + res['positions'][0]['answers'][0]['question'] = question.pk + + # do not use use_reusable_medium and add_to_reusable_medium + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/orders/?pdf_data=true'.format( + organizer.slug, event.slug + ), format='json', data=res + ) + assert resp.status_code == 400 + + del res['positions'][0]['use_reusable_medium'] + + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/orders/?pdf_data=true'.format( + organizer.slug, event.slug + ), format='json', data=res + ) + assert resp.status_code == 201 + with scopes_disabled(): + medium.refresh_from_db() + assert medium.linked_orderpositions.count() == 1 + + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/orders/?pdf_data=true'.format( + organizer.slug, event.slug + ), format='json', data=res + ) + assert resp.status_code == 201 + with scopes_disabled(): + medium.refresh_from_db() + assert medium.linked_orderpositions.count() == 2 + + res['positions'][0]['use_reusable_medium'] = medium.pk + del res['positions'][0]['add_to_reusable_medium'] + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/orders/?pdf_data=true'.format( + organizer.slug, event.slug + ), format='json', data=res + ) + assert resp.status_code == 201 + with scopes_disabled(): + o = Order.objects.get(code=resp.data['code']) + medium.refresh_from_db() + assert medium.linked_orderpositions.count() == 1 + assert o.positions.first() == medium.linked_orderpositions.first() + @pytest.mark.django_db def test_order_create_use_medium_other_organizer(token_client, organizer, event, item, quota, question, medium2): @@ -3168,7 +3237,7 @@ def test_order_create_create_medium(token_client, organizer, event, item, quota, i = resp.data['positions'][0]['pdf_data']['medium_identifier'] assert i m = organizer.reusable_media.get(identifier=i) - assert m.linked_orderposition == o.positions.first() + assert m.linked_orderpositions.first() == o.positions.first() assert m.type == "barcode" diff --git a/src/tests/api/test_reusable_media.py b/src/tests/api/test_reusable_media.py index 18ee325a5..2646d2a2d 100644 --- a/src/tests/api/test_reusable_media.py +++ b/src/tests/api/test_reusable_media.py @@ -89,10 +89,13 @@ TEST_MEDIUM_RES = { "organizer": "dummy", "identifier": "ABCDEFGH", "type": "barcode", + "claim_token": None, + "label": None, "active": True, "expires": None, "customer": None, "linked_orderposition": None, + "linked_orderpositions": [], "linked_giftcard": None, "notes": None, "info": {}, @@ -170,7 +173,7 @@ def test_medium_detail(token_client, organizer, event, medium, giftcard, custome ticket = event.items.create(name='Early-bird ticket', category=None, default_price=23, admission=True, personalized=True) op = o.positions.create(item=ticket, price=Decimal("14")) - medium.linked_orderposition = op + medium.linked_orderpositions.add(op) medium.linked_giftcard = giftcard medium.customer = customer medium.save() @@ -273,7 +276,7 @@ def test_medium_detail_event_permission_missing(token_client, organizer, event, ticket = event.items.create(name='Early-bird ticket', category=None, default_price=23, admission=True, personalized=True) op = o.positions.create(item=ticket, price=Decimal("14")) - medium.linked_orderposition = op + medium.linked_orderpositions.add(op) medium.linked_giftcard = giftcard medium.customer = customer medium.save() @@ -352,6 +355,110 @@ def test_medium_create(token_client, organizer, giftcard): assert m.updated > now() - timedelta(minutes=10) +@pytest.mark.django_db +def test_medium_create_linked_orderposition(token_client, organizer, event, org2_event, medium): + with scopes_disabled(): + o = Order.objects.create( + code='FOO', event=event, email='dummy@dummy.test', + status=Order.STATUS_PENDING, datetime=now(), expires=now() + timedelta(days=10), + sales_channel=event.organizer.sales_channels.get(identifier="web"), + total=14, locale='en' + ) + ticket = event.items.create(name='Early-bird ticket', category=None, default_price=23, admission=True, + personalized=True) + op = o.positions.create(item=ticket, price=Decimal("14")) + op2 = o.positions.create(item=ticket, price=Decimal("14")) + + org2_o = Order.objects.create( + code='FOO', event=org2_event, email='dummy@dummy.test', + status=Order.STATUS_PENDING, datetime=now(), expires=now() + timedelta(days=10), + sales_channel=org2_event.organizer.sales_channels.get(identifier="web"), + total=14, locale='en' + ) + org2_ticket = org2_event.items.create(name='Early-bird ticket', category=None, default_price=23, admission=True, + personalized=True) + org2_op = org2_o.positions.create(item=org2_ticket, price=Decimal("14")) + + payload = dict(TEST_MEDIUM_CREATE_PAYLOAD) + + # wrong orderposition for organizer + payload['linked_orderposition'] = org2_op.pk + resp = token_client.post( + '/api/v1/organizers/{}/reusablemedia/'.format(organizer.slug), + payload, + format='json' + ) + assert resp.status_code == 400 + + # unkown orderposition + payload['linked_orderposition'] = "unknown" + resp = token_client.post( + '/api/v1/organizers/{}/reusablemedia/'.format(organizer.slug), + payload, + format='json' + ) + assert resp.status_code == 400 + + # create with linked_orderposition + payload['linked_orderposition'] = op.pk + resp = token_client.post( + '/api/v1/organizers/{}/reusablemedia/'.format(organizer.slug), + payload, + format='json' + ) + assert resp.status_code == 201 + with scopes_disabled(): + m = ReusableMedium.objects.get(pk=resp.data['id']) + assert list(m.linked_orderpositions.values_list('pk', flat=True)) == [op.pk] + + # double-check API-response for fallback-values + resp = token_client.get( + '/api/v1/organizers/{}/reusablemedia/{}/'.format(organizer.slug, resp.data['id']) + ) + assert resp.status_code == 200 + assert resp.data['linked_orderposition'] == op.pk + assert resp.data['linked_orderpositions'] == [op.pk] + + # create with linked_orderposition and linked_orderpositions (not allowed) + payload['identifier'] = "FOOBAZ" + payload['linked_orderpositions'] = [op.pk, org2_op.pk] + resp = token_client.post( + '/api/v1/organizers/{}/reusablemedia/'.format(organizer.slug), + payload, + format='json' + ) + assert resp.status_code == 400 + + # multiple linked_orderpositions, but from different organizers + del payload['linked_orderposition'] + resp = token_client.post( + '/api/v1/organizers/{}/reusablemedia/'.format(organizer.slug), + payload, + format='json' + ) + assert resp.status_code == 400 + + # multiple linked_orderpositions from same organizer + payload['linked_orderpositions'] = [op.pk, op2.pk] + resp = token_client.post( + '/api/v1/organizers/{}/reusablemedia/'.format(organizer.slug), + payload, + format='json' + ) + assert resp.status_code == 201 + with scopes_disabled(): + m = ReusableMedium.objects.get(pk=resp.data['id']) + assert list(m.linked_orderpositions.values_list('pk', flat=True)) == [op.pk, op2.pk] + + # double-check API-response for fallback-values + resp = token_client.get( + '/api/v1/organizers/{}/reusablemedia/{}/'.format(organizer.slug, resp.data['id']) + ) + assert resp.status_code == 200 + assert resp.data['linked_orderposition'] is None + assert resp.data['linked_orderpositions'] == [op.pk, op2.pk] + + @pytest.mark.django_db def test_medium_foreignkeyval(token_client, organizer, giftcard2): payload = dict(TEST_MEDIUM_CREATE_PAYLOAD) @@ -398,6 +505,68 @@ def test_medium_patch(token_client, organizer, event, medium, giftcard, customer assert medium.info == {'test': 2} assert medium.identifier == "ABCDEFGH" + # test patch with linked_orderpositions + with scopes_disabled(): + o = Order.objects.create( + code='FOO', event=event, email='dummy@dummy.test', + status=Order.STATUS_PENDING, datetime=now(), expires=now() + timedelta(days=10), + sales_channel=event.organizer.sales_channels.get(identifier="web"), + total=14, locale='en' + ) + ticket = event.items.create(name='Early-bird ticket', category=None, default_price=23, admission=True, + personalized=True) + op = o.positions.create(item=ticket, price=Decimal("14")) + op2 = o.positions.create(item=ticket, price=Decimal("14")) + + resp = token_client.patch( + '/api/v1/organizers/{}/reusablemedia/{}/'.format(organizer.slug, medium.pk), + { + 'linked_orderposition': op.pk, + }, + format='json' + ) + assert resp.status_code == 200 + medium.refresh_from_db() + with scopes_disabled(): + assert list(medium.linked_orderpositions.values_list('pk', flat=True)) == [op.pk] + assert medium.all_logentries().count() == 2 + + resp = token_client.patch( + '/api/v1/organizers/{}/reusablemedia/{}/'.format(organizer.slug, medium.pk), + { + 'linked_orderpositions': [op.pk, op2.pk], + }, + format='json' + ) + assert resp.status_code == 200 + medium.refresh_from_db() + with scopes_disabled(): + assert list(medium.linked_orderpositions.values_list('pk', flat=True)) == [op.pk, op2.pk] + assert medium.all_logentries().count() == 3 + + resp = token_client.patch( + '/api/v1/organizers/{}/reusablemedia/{}/'.format(organizer.slug, medium.pk), + { + 'linked_orderpositions': [op2.pk], + }, + format='json' + ) + assert resp.status_code == 200 + medium.refresh_from_db() + with scopes_disabled(): + assert list(medium.linked_orderpositions.values_list('pk', flat=True)) == [op2.pk] + assert medium.all_logentries().count() == 4 + + resp = token_client.patch( + '/api/v1/organizers/{}/reusablemedia/{}/'.format(organizer.slug, medium.pk), + { + 'linked_orderposition': op.pk, + 'linked_orderpositions': [op.pk, op2.pk], + }, + format='json' + ) + assert resp.status_code == 400 + @pytest.mark.django_db def test_medium_no_deletion(token_client, organizer, event, medium): @@ -538,7 +707,7 @@ def test_medium_lookup_cross_organizer(token_client, organizer, organizer2, org2 ticket = org2_event.items.create(name='Early-bird ticket', category=None, default_price=23, admission=True, personalized=True) op = o.positions.create(item=ticket, price=Decimal("14")) - medium2.linked_orderposition = op + medium2.linked_orderpositions.add(op) medium2.linked_giftcard = giftcard2 medium2.save() -- 2.52.0 From 748054de56b731483c696d8dd91b34971bb12116 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 4 Jun 2026 11:19:04 +0200 Subject: [PATCH 16/96] Add read-only details page for subevents (#6151) * Add read-only details page for subevents * Document signal * Review notes * Fix incorrect subquery --- doc/development/api/general.rst | 2 +- src/pretix/control/signals.py | 10 + .../pretixcontrol/subevents/detail.html | 554 +++++++++--------- .../pretixcontrol/subevents/edit.html | 296 ++++++++++ .../pretixcontrol/subevents/index.html | 6 +- src/pretix/control/urls.py | 3 +- src/pretix/control/views/subevents.py | 89 ++- src/tests/control/test_permissions.py | 6 +- src/tests/control/test_subevents.py | 4 +- 9 files changed, 684 insertions(+), 286 deletions(-) create mode 100644 src/pretix/control/templates/pretixcontrol/subevents/edit.html diff --git a/doc/development/api/general.rst b/doc/development/api/general.rst index 18f446a5a..37d6ed224 100644 --- a/doc/development/api/general.rst +++ b/doc/development/api/general.rst @@ -65,7 +65,7 @@ Backend .. automodule:: pretix.control.signals :members: nav_event, html_head, html_page_start, quota_detail_html, nav_topbar, nav_global, nav_organizer, nav_event_settings, order_info, order_approve_info, event_settings_widget, oauth_application_registered, - order_position_buttons, subevent_forms, item_formsets, order_search_filter_q, order_search_forms + order_position_buttons, subevent_forms, item_formsets, order_search_filter_q, order_search_forms, subevent_detail_html .. automodule:: pretix.base.signals :no-index: diff --git a/src/pretix/control/signals.py b/src/pretix/control/signals.py index 5ce67198f..2a20f685e 100644 --- a/src/pretix/control/signals.py +++ b/src/pretix/control/signals.py @@ -213,6 +213,16 @@ quota as argument in the ``quota`` keyword argument. As with all event plugin signals, the ``sender`` keyword argument will contain the event. """ +subevent_detail_html = EventPluginSignal() +""" +Arguments: 'subevent' + +This signal allows you to append HTML to a SubEvent's detail view. You receive the +subevent as argument in the ``subevent`` keyword argument. + +As with all event plugin signals, the ``sender`` keyword argument will contain the event. +""" + organizer_edit_tabs = DeprecatedSignal() """ Arguments: 'organizer', 'request' diff --git a/src/pretix/control/templates/pretixcontrol/subevents/detail.html b/src/pretix/control/templates/pretixcontrol/subevents/detail.html index 5bce7afbb..a346730cd 100644 --- a/src/pretix/control/templates/pretixcontrol/subevents/detail.html +++ b/src/pretix/control/templates/pretixcontrol/subevents/detail.html @@ -4,290 +4,306 @@ {% load formset_tags %} {% load eventsignal %} {% load static %} -{% block title %}{% trans "Date" context "subevent" %}{% endblock %} +{% load money %} +{% load icon %} +{% block title %}{% blocktrans trimmed with name=subevent.name context "subevent" %}Date: {{ name }} +{% endblocktrans %}{% endblock %} {% block content %} - {% if not subevent.pk %} -

{% trans "Create date" context "subevent" %}

- {% else %} -

{% trans "Date" context "subevent" %}

- {% endif %} -
- {% csrf_token %} - {% bootstrap_form_errors form %} - {% for f in itemvar_forms %} - {% bootstrap_form_errors f %} - {% endfor %} -
-
-
- {% trans "General information" %} - {% bootstrap_field form.name layout="control" %} - {% bootstrap_field form.active layout="control" %} - {% bootstrap_field form.date_from layout="control" %} - {% bootstrap_field form.date_to layout="control" %} - {% include "pretixcontrol/event/fragment_geodata.html" %} - {% bootstrap_field form.date_admission layout="control" %} - {% bootstrap_field form.frontpage_text layout="control" %} - {% bootstrap_field form.is_public layout="control" %} - {% bootstrap_field form.comment layout="control" %} - {% if meta_forms %} - +

+ {% blocktrans trimmed with name=subevent.name context "subevent" %}Date: {{ name }}{% endblocktrans %} + {% if 'event.subevents:write' in request.eventpermset %} + + + {% trans "Edit" %} + + {% endif %} +

+
+
+
+ {% trans "General information" %} +
+
{% trans "Name" %}
+
{{ subevent.name }}
+
{% trans "ID" %}
+
#{{ subevent.pk }}
+
{% trans "Status" %}
+
+ {% if not subevent.active %} + {% trans "Disabled" %} + {% elif subevent.presale_has_ended %} + {% trans "Presale over" %} + {% elif not subevent.presale_is_running %} + {% trans "Presale not started" %} + {% else %} + {% trans "On sale" %} + {% endif %} +
+
{% trans "Event start time" %}
+
{{ subevent.date_from|date:"SHORT_DATETIME_FORMAT" }}
+
{% trans "Event end time" %}
+
{{ subevent.date_to|date:"SHORT_DATETIME_FORMAT" }}
+ {% if subevent.date_admission %} +
{% trans "Admission time" %}
+
{{ subevent.date_admission|date:"SHORT_DATETIME_FORMAT" }}
{% endif %} -
-
- {% trans "Timeline" %} - {% bootstrap_field form.presale_start layout="control" %} - {% bootstrap_field form.presale_end layout="control" %} -
-
- {% trans "Quotas" %} -
- {{ formset.management_form }} - {% bootstrap_formset_errors formset %} -
- {% for form in formset %} -
-
- {{ form.id }} - {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} -
-
-

-
-
- {% bootstrap_field form.name layout='inline' form_group_class="" %} -
-
- -
-
-

-
-
- {% bootstrap_form_errors form %} - {% bootstrap_field form.size layout="control" %} - {% bootstrap_field form.itemvars layout="control" %} - {% bootstrap_field form.release_after_exit layout="control" %} - {% bootstrap_field form.ignore_for_event_availability layout="control" %} -
-
- {% endfor %} -
- -

- -

-
-
- {% trans "Product settings" %} -

- {% trans "These settings are optional, if you leave them empty, the default values from the product settings will be used." %} -

- {% for f in itemvar_forms %} -
- {% bootstrap_form_errors f %} -
- -
-
- {% bootstrap_field f.price addon_after=request.event.currency form_group_class="" layout="inline" %} -
-
-
- {% bootstrap_field f.disabled layout="inline" form_group_class="" %} -
-
-
-
- - {% include "pretixcontrol/subevents/fragment_unavail_mode_indicator.html" with mode=f.available_from_mode %}
- {% bootstrap_field f.available_from form_group_class="foo" layout="inline" %} -
-
- - {% include "pretixcontrol/subevents/fragment_unavail_mode_indicator.html" with mode=f.available_until_mode %}
- {% bootstrap_field f.available_until form_group_class="" layout="inline" %} -
-
-
+ {% if subevent.presale_start %} +
{% trans "Start of presale" %}
+
{{ subevent.presale_start|date:"SHORT_DATETIME_FORMAT" }}
+ {% endif %} + {% if subevent.presale_end %} +
{% trans "End of presale" %}
+
{{ subevent.presale_end|date:"SHORT_DATETIME_FORMAT" }}
+ {% endif %} + {% if subevent.location %} +
{% trans "Location" %}
+
{{ subevent.location|linebreaksbr }}
+ {% endif %} +
{% trans "Show in lists" %}
+
{{ subevent.is_public|yesno }}
+ {% for k, v in subevent.meta_data.items %} +
{{ k }}
+
{{ v }}
{% endfor %} -
+ {% if subevent.comment %} +
{% trans "Internal comment" %}
+
{{ subevent.comment|linebreaksbr }}
+ {% endif %} + +
+
+ {% trans "Quotas" %} +
+ + + + + + + + + + + + {% for q in quotas %} + + + + + + + + {% endfor %} + +
{% trans "Quota name" %}{% trans "Products" %}{% trans "Total capacity" %}{% trans "Capacity left" %}
+ {{ q.name }} + {% if q.ignore_for_event_availability %} + + {% endif %} + +
    + {% for item in q.cached_items %} + {% if not item.has_variations %} +
  • + {{ item }} +
  • + {% endif %} + {% endfor %} + {% for v in q.variations.all %} +
  • + + {{ v.item }} – {{ v }}
  • + {% endfor %} +
+
{% if q.size == None %}Unlimited{% else %}{{ q.size }}{% endif %}{% include "pretixcontrol/items/fragment_quota_availability.html" with availability=q.cached_avail closed=q.closed %} + {% if 'event.items:write' in request.eventpermset %} + + {% endif %} +
+
+
+ {% if checkinlists %}
{% trans "Check-in lists" %} -

- {% blocktrans trimmed %} - You can choose to either add one or more check-in lists for every date in your series individually, - or use just one check-in list for all your dates and limit admission through check-in rules. Which - approach is better depends on multiple factors, such as the number of dates in your series. For a - series with one or less event date per day, individual lists are usually more helpful. If you - use dates to represent many time slots on the same day, or even overlapping time slots, working with - just one large check-in list will be easier. - {% endblocktrans %} -

-
- {{ cl_formset.management_form }} - {% bootstrap_formset_errors cl_formset %} -
- {% for form in cl_formset %} -
-
- {{ form.id }} - {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} -
-
-

-
-
- {% bootstrap_field form.name layout='inline' form_group_class="" %} +
+ + + + + {% if "event.orders:read" in request.eventpermset %} + + {% endif %} + + + + + + {% for cl in checkinlists %} + + + {% if "event.orders:read" in request.eventpermset %} + + {% endif %} + + + {% endfor %} - - -

- -

+ +
{% trans "Name" %}{% trans "Checked in" %}{% trans "Products" %}
+ {{ cl.name }} + +
+
+
+
-
- +
+ {{ cl.checkin_count|default_if_none:"0" }} / + {{ cl.position_count|default_if_none:"0" }}
- -
-
- {% bootstrap_form_errors form %} - {% bootstrap_field form.include_pending layout="control" %} - {% bootstrap_field form.all_products layout="control" %} - {% bootstrap_field form.limit_products layout="control" %} - {% bootstrap_field form.allow_entry_after_exit layout="control" %} - {% if form.gates %} - {% bootstrap_field form.gates layout="control" %} +
+ {% if cl.all_products %} + {% trans "All" %} + {% else %} +
    + {% for item in cl.limit_products.all %} +
  • + {{ item }} +
  • + {% endfor %} +
{% endif %} - - +
+ {% if "event.orders:read" in request.eventpermset %} + + {% endif %} + {% if "event.settings.general:write" in request.eventpermset %} + + + + {% endif %} +

- {% for f in plugin_forms %} - {% if f.title %} -
- {{ f.title }} - {% if f.template %} - {% include f.template with form=f %} - {% else %} - {% bootstrap_form f layout="control" %} - {% endif %} -
- {% endif %} - {% endfor %} + {% endif %} + {% eventsignal request.event "pretix.control.signals.subevent_detail_html" quota=quota %} +
+ {% if "event.orders:read" in request.eventpermset %} +
- {% trans "Additional settings" %} - {% for f in plugin_forms %} - {% if not f.title %} - {% if f.template %} - {% include f.template with form=f %} - {% else %} - {% bootstrap_form f layout="control" %} - {% endif %} + + {% trans "Orders" %} + + {{ order_count }} + + + {% if order_count %} +
+ + + + + + + + + {% for o in orders %} + + + + + {% endfor %} + +
{% trans "Order code" %}{% trans "Details" %}
+ + + {{ o.code }} + + +
+ {% if o.testmode %} + {% trans "TEST MODE" %} + {% endif %} + {% if o.status == "p" and o.pcnt == 0 %} + {# Everything related to this subevent is canceled #} + + + {% trans "partially canceled" %} + + {% else %} + {% include "pretixcontrol/orders/fragment_order_status.html" with order=o %} + {% endif %} +
+ {% if "." in o.sales_channel.icon %} + + {% else %} + + {% endif %} + {{ o.datetime|date:"SHORT_DATETIME_FORMAT" }} + {% if o.email %} +
{% icon "envelope-o fa-fw text-muted" %} + {{ o.email|default_if_none:"" }} + {% endif %} + {% if o.invoice_address.name %} +
{% icon "user fa-fw text-muted" %} {{ o.invoice_address.name }} + {% endif %} +
{% icon "ticket text-muted fa-fw" %} {{ o.pcnt }} + {% if o.comment %} +
+ + {{ o.comment|linebreaksbr }} + + {% endif %} + {% if o.custom_followup_due %} +
+ {% blocktrans trimmed with date=o.custom_followup_at|date:"SHORT_DATE_FORMAT" context "followup" %} + TODO {{ date }}{% endblocktrans %} + {% elif o.custom_followup_at %} +
+ {% blocktrans trimmed with date=o.custom_followup_at|date:"SHORT_DATE_FORMAT" context "followup" %} + TODO {{ date }}{% endblocktrans %} + {% endif %} +
+
+ {% if order_count > 10 %} +

+ + {% trans "View all" %} + +

{% endif %} - {% endfor %} + {% else %} +
+

+ {% blocktrans trimmed %} + No orders found. + {% endblocktrans %} +

+
+ {% endif %}
- {% if subevent.pk %} -
-
-
-

- {% trans "Date history" context "subevent" %} -

-
- {% include "pretixcontrol/includes/logs.html" with obj=subevent %} -
+ {% endif %} +
+
+
+

+ {% trans "Date history" context "subevent" %} +

- {% endif %} + {% include "pretixcontrol/includes/logs.html" with obj=subevent %} +
-
- -
- +
{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/subevents/edit.html b/src/pretix/control/templates/pretixcontrol/subevents/edit.html new file mode 100644 index 000000000..eccbe5425 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/subevents/edit.html @@ -0,0 +1,296 @@ +{% extends "pretixcontrol/event/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% load formset_tags %} +{% load eventsignal %} +{% load static %} +{% block title %}{% trans "Date" context "subevent" %}{% endblock %} +{% block content %} + {% if not subevent.pk %} +

{% trans "Create date" context "subevent" %}

+ {% else %} +

{% trans "Date" context "subevent" %}

+ {% endif %} +
+ {% csrf_token %} + {% bootstrap_form_errors form %} + {% for f in itemvar_forms %} + {% bootstrap_form_errors f %} + {% endfor %} +
+
+
+ {% trans "General information" %} + {% bootstrap_field form.name layout="control" %} + {% bootstrap_field form.active layout="control" %} + {% bootstrap_field form.date_from layout="control" %} + {% bootstrap_field form.date_to layout="control" %} + {% include "pretixcontrol/event/fragment_geodata.html" %} + {% bootstrap_field form.date_admission layout="control" %} + {% bootstrap_field form.frontpage_text layout="control" %} + {% bootstrap_field form.is_public layout="control" %} + {% bootstrap_field form.comment layout="control" %} + {% if meta_forms %} + + {% endif %} +
+
+ {% trans "Timeline" %} + {% bootstrap_field form.presale_start layout="control" %} + {% bootstrap_field form.presale_end layout="control" %} +
+
+ {% trans "Quotas" %} +
+ {{ formset.management_form }} + {% bootstrap_formset_errors formset %} +
+ {% for form in formset %} +
+
+ {{ form.id }} + {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} +
+
+

+
+
+ {% bootstrap_field form.name layout='inline' form_group_class="" %} +
+
+ +
+
+

+
+
+ {% bootstrap_form_errors form %} + {% bootstrap_field form.size layout="control" %} + {% bootstrap_field form.itemvars layout="control" %} + {% bootstrap_field form.release_after_exit layout="control" %} + {% bootstrap_field form.ignore_for_event_availability layout="control" %} +
+
+ {% endfor %} +
+ +

+ +

+
+
+ {% trans "Product settings" %} +

+ {% trans "These settings are optional, if you leave them empty, the default values from the product settings will be used." %} +

+ {% for f in itemvar_forms %} +
+ {% bootstrap_form_errors f %} +
+ +
+
+ {% bootstrap_field f.price addon_after=request.event.currency form_group_class="" layout="inline" %} +
+
+
+ {% bootstrap_field f.disabled layout="inline" form_group_class="" %} +
+
+
+
+ + {% include "pretixcontrol/subevents/fragment_unavail_mode_indicator.html" with mode=f.available_from_mode %}
+ {% bootstrap_field f.available_from form_group_class="foo" layout="inline" %} +
+
+ + {% include "pretixcontrol/subevents/fragment_unavail_mode_indicator.html" with mode=f.available_until_mode %}
+ {% bootstrap_field f.available_until form_group_class="" layout="inline" %} +
+
+
+ {% endfor %} +
+
+ {% trans "Check-in lists" %} +

+ {% blocktrans trimmed %} + You can choose to either add one or more check-in lists for every date in your series individually, + or use just one check-in list for all your dates and limit admission through check-in rules. Which + approach is better depends on multiple factors, such as the number of dates in your series. For a + series with one or less event date per day, individual lists are usually more helpful. If you + use dates to represent many time slots on the same day, or even overlapping time slots, working with + just one large check-in list will be easier. + {% endblocktrans %} +

+
+ {{ cl_formset.management_form }} + {% bootstrap_formset_errors cl_formset %} +
+ {% for form in cl_formset %} +
+
+ {{ form.id }} + {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} +
+
+

+
+
+ {% bootstrap_field form.name layout='inline' form_group_class="" %} +
+
+ +
+
+

+
+
+ {% bootstrap_form_errors form %} + {% bootstrap_field form.include_pending layout="control" %} + {% bootstrap_field form.all_products layout="control" %} + {% bootstrap_field form.limit_products layout="control" %} + {% bootstrap_field form.allow_entry_after_exit layout="control" %} + {% if form.gates %} + {% bootstrap_field form.gates layout="control" %} + {% endif %} +
+
+ {% endfor %} +
+ +

+ +

+
+ {% for f in plugin_forms %} + {% if f.title %} +
+ {{ f.title }} + {% if f.template %} + {% include f.template with form=f %} + {% else %} + {% bootstrap_form f layout="control" %} + {% endif %} +
+ {% endif %} + {% endfor %} +
+ {% trans "Additional settings" %} + {% for f in plugin_forms %} + {% if not f.title %} + {% if f.template %} + {% include f.template with form=f %} + {% else %} + {% bootstrap_form f layout="control" %} + {% endif %} + {% endif %} + {% endfor %} +
+
+ {% if subevent.pk %} +
+
+
+

+ {% trans "Date history" context "subevent" %} +

+
+ {% include "pretixcontrol/includes/logs.html" with obj=subevent %} +
+
+ {% endif %} +
+
+ + {% trans "Cancel" %} + + +
+
+{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/subevents/index.html b/src/pretix/control/templates/pretixcontrol/subevents/index.html index 52ac83fdf..60c235dcb 100644 --- a/src/pretix/control/templates/pretixcontrol/subevents/index.html +++ b/src/pretix/control/templates/pretixcontrol/subevents/index.html @@ -133,7 +133,7 @@ {% endif %} - + {{ s.name }}
#{{ s.pk }} @@ -182,7 +182,7 @@ {% endif %} {% if "event.subevents:write" in request.eventpermset %} - +
- + {% endif %} diff --git a/src/pretix/control/urls.py b/src/pretix/control/urls.py index 1d9576126..31075eb77 100644 --- a/src/pretix/control/urls.py +++ b/src/pretix/control/urls.py @@ -308,7 +308,8 @@ urlpatterns = [ re_path(r'^pdf/editor/(?P[^/]+).pdf$', pdf.PdfView.as_view(), name='pdf.background'), re_path(r'^subevents/$', subevents.SubEventList.as_view(), name='event.subevents'), re_path(r'^subevents/select2$', typeahead.subevent_select2, name='event.subevents.select2'), - re_path(r'^subevents/(?P\d+)/$', subevents.SubEventUpdate.as_view(), name='event.subevent'), + re_path(r'^subevents/(?P\d+)/$', subevents.SubEventDetail.as_view(), name='event.subevent'), + re_path(r'^subevents/(?P\d+)/edit$', subevents.SubEventUpdate.as_view(), name='event.subevent.edit'), re_path(r'^subevents/(?P\d+)/delete$', subevents.SubEventDelete.as_view(), name='event.subevent.delete'), re_path(r'^subevents/add$', subevents.SubEventCreate.as_view(), name='event.subevents.add'), diff --git a/src/pretix/control/views/subevents.py b/src/pretix/control/views/subevents.py index c06be5261..8a91e1aa8 100644 --- a/src/pretix/control/views/subevents.py +++ b/src/pretix/control/views/subevents.py @@ -41,7 +41,9 @@ from django.contrib import messages from django.core.exceptions import ValidationError from django.core.files import File from django.db import transaction -from django.db.models import Count, F, Prefetch, ProtectedError +from django.db.models import ( + Count, Exists, F, OuterRef, Prefetch, ProtectedError, Subquery, +) from django.db.models.functions import Coalesce, TruncDate, TruncTime from django.forms import inlineformset_factory from django.http import Http404, HttpResponse, HttpResponseRedirect @@ -49,17 +51,21 @@ from django.shortcuts import redirect, render from django.urls import reverse from django.utils.formats import get_format from django.utils.functional import cached_property +from django.utils.http import url_has_allowed_host_and_scheme from django.utils.timezone import make_aware, now from django.utils.translation import gettext_lazy as _, pgettext_lazy from django.views import View -from django.views.generic import CreateView, FormView, ListView, UpdateView +from django.views.generic import ( + CreateView, DetailView, FormView, ListView, UpdateView, +) -from pretix.base.models import CartPosition, LogEntry +from pretix.base.models import CartPosition, LogEntry, OrderPosition from pretix.base.models.checkin import CheckinList from pretix.base.models.event import SubEvent, SubEventMetaValue from pretix.base.models.items import ( - ItemVariation, Quota, SubEventItem, SubEventItemVariation, + Item, ItemVariation, Quota, SubEventItem, SubEventItemVariation, ) +from pretix.base.models.orders import CancellationRequest from pretix.base.reldate import RelativeDate, RelativeDateWrapper from pretix.base.services import tickets from pretix.base.services.quotas import QuotaAvailability @@ -505,9 +511,68 @@ class SubEventEditorMixin(MetaDataEditorMixin): ) and self.cl_formset.is_valid() and all(f.is_valid() for f in self.plugin_forms) -class SubEventUpdate(EventPermissionRequiredMixin, SubEventEditorMixin, UpdateView): +class SubEventDetail(EventPermissionRequiredMixin, DetailView): model = SubEvent template_name = 'pretixcontrol/subevents/detail.html' + permission = None + context_object_name = 'subevent' + + def get_object(self, queryset=None) -> SubEvent: + try: + return self.request.event.subevents.get( + id=self.kwargs['subevent'] + ) + except SubEvent.DoesNotExist: + raise Http404(pgettext_lazy("subevent", "The requested date does not exist.")) + + def get_context_data(self, **kwargs): + oqs = self.request.event.orders.filter( + Exists( + OrderPosition.objects.filter( + subevent=self.object, + order_id=OuterRef("id"), + ) + ) + ).annotate( + pcnt=Subquery( + OrderPosition.objects.filter( + subevent=self.object, + ).values("subevent").annotate(c=Count("*")).values("c") + ), + has_cancellation_request=Exists(CancellationRequest.objects.filter(order=OuterRef("pk"))), + ).select_related("invoice_address").prefetch_related("sales_channel") + ctx = { + "quotas": self.object.quotas.prefetch_related( + Prefetch( + "items", + queryset=Item.objects.annotate( + has_variations=Exists(ItemVariation.objects.filter(item=OuterRef("pk"))) + ), + to_attr="cached_items" + ), + "variations", + "variations__item", + ).order_by("name", "pk"), + "checkinlists": self.object.checkinlist_set.prefetch_related("limit_products"), + "orders": oqs[:11], + "order_count": oqs.count(), + } + + qa = QuotaAvailability() + qa.queue(*ctx["quotas"]) + qa.compute() + for quota in ctx["quotas"]: + quota.cached_avail = qa.results[quota] + + return super().get_context_data( + **kwargs, + **ctx, + ) + + +class SubEventUpdate(EventPermissionRequiredMixin, SubEventEditorMixin, UpdateView): + model = SubEvent + template_name = 'pretixcontrol/subevents/edit.html' permission = 'event.subevents:write' context_object_name = 'subevent' form_class = SubEventForm @@ -573,20 +638,28 @@ class SubEventUpdate(EventPermissionRequiredMixin, SubEventEditorMixin, UpdateVi return HttpResponseRedirect(self.get_success_url()) def get_success_url(self) -> str: - return reverse('control:event.subevents', kwargs={ + if "next" in self.request.GET and url_has_allowed_host_and_scheme(self.request.GET.get("next"), allowed_hosts=None): + return self.request.GET.get("next") + return reverse('control:event.subevent', kwargs={ 'organizer': self.request.event.organizer.slug, 'event': self.request.event.slug, - }) + ('?' + self.request.GET.get('returnto') if 'returnto' in self.request.GET else '') + 'subevent': self.object.pk, + }) def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs['event'] = self.request.event return kwargs + def get_context_data(self, **kwargs): + return super().get_context_data( + next_url=self.get_success_url() + ) + class SubEventCreate(SubEventEditorMixin, EventPermissionRequiredMixin, CreateView): model = SubEvent - template_name = 'pretixcontrol/subevents/detail.html' + template_name = 'pretixcontrol/subevents/edit.html' permission = 'event.subevents:write' context_object_name = 'subevent' form_class = SubEventForm diff --git a/src/tests/control/test_permissions.py b/src/tests/control/test_permissions.py index aaff20d9e..83f68da87 100644 --- a/src/tests/control/test_permissions.py +++ b/src/tests/control/test_permissions.py @@ -137,6 +137,7 @@ event_urls = [ "subevents/select2", "subevents/add", "subevents/2/delete", + "subevents/2/edit", "subevents/2/", "quotas/", "quotas/2/delete", @@ -360,8 +361,9 @@ event_permission_urls = [ ("event.items:write", "discounts/reorder", 400, HTTP_POST), ("event.items:write", "discounts/add", 200, HTTP_GET), (None, "subevents/", 200, HTTP_GET), - ("event.subevents:write", "subevents/2/", 404, HTTP_GET), - ("event.subevents:write", "subevents/2/", 404, HTTP_POST), + (None, "subevents/2/", 404, HTTP_GET), + ("event.subevents:write", "subevents/2/edit", 404, HTTP_GET), + ("event.subevents:write", "subevents/2/edit", 404, HTTP_POST), ("event.subevents:write", "subevents/2/delete", 404, HTTP_GET), ("event.subevents:write", "subevents/add", 200, HTTP_GET), ("event.subevents:write", "subevents/bulk_add", 200, HTTP_GET), diff --git a/src/tests/control/test_subevents.py b/src/tests/control/test_subevents.py index 5e58e0ebf..1089e9891 100644 --- a/src/tests/control/test_subevents.py +++ b/src/tests/control/test_subevents.py @@ -110,9 +110,9 @@ class SubEventsTest(SoupTest): assert se.checkinlist_set.count() == 1 def test_modify(self): - doc = self.get_doc('/control/event/ccc/30c3/subevents/%d/' % self.subevent1.pk) + doc = self.get_doc('/control/event/ccc/30c3/subevents/%d/edit' % self.subevent1.pk) assert doc.select("input[name=quotas-TOTAL_FORMS]") - doc = self.post_doc('/control/event/ccc/30c3/subevents/%d/' % self.subevent1.pk, { + doc = self.post_doc('/control/event/ccc/30c3/subevents/%d/edit' % self.subevent1.pk, { 'name_0': 'SE2', 'active': 'on', 'date_from_0': '2017-07-01', -- 2.52.0 From 329b1188101f5b8c94fd024a60d75045b975d939 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jun 2026 15:19:47 +0200 Subject: [PATCH 17/96] Update aiohttp requirement from ==3.13.* to ==3.14.* (#6245) --- updated-dependencies: - dependency-name: aiohttp dependency-version: 3.14.0 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ce5b7e278..10de2022e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -108,7 +108,7 @@ dependencies = [ [project.optional-dependencies] memcached = ["pylibmc"] dev = [ - "aiohttp==3.13.*", + "aiohttp==3.14.*", "coverage", "coveralls", "fakeredis==2.36.*", -- 2.52.0 From 93469d33e53785fd5a4a04fb4875a2a00139daa9 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 5 Jun 2026 11:42:45 +0200 Subject: [PATCH 18/96] SubEvent details: Fix incorrect signal usage --- .../control/templates/pretixcontrol/subevents/detail.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pretix/control/templates/pretixcontrol/subevents/detail.html b/src/pretix/control/templates/pretixcontrol/subevents/detail.html index a346730cd..5ffd541b0 100644 --- a/src/pretix/control/templates/pretixcontrol/subevents/detail.html +++ b/src/pretix/control/templates/pretixcontrol/subevents/detail.html @@ -194,7 +194,7 @@ {% endif %} - {% eventsignal request.event "pretix.control.signals.subevent_detail_html" quota=quota %} + {% eventsignal request.event "pretix.control.signals.subevent_detail_html" subevent=subevent %}
{% if "event.orders:read" in request.eventpermset %}
-- 2.52.0 From f16034d0ccb603b28e81263a5e6b311c7ec755d5 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 8 Jun 2026 14:25:50 +0200 Subject: [PATCH 19/96] Check-in: Fix handling of optional file questions (Z#23236493) (#6251) --- src/pretix/api/views/checkin.py | 5 ++++- src/tests/api/test_checkin.py | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/pretix/api/views/checkin.py b/src/pretix/api/views/checkin.py index 20d9ff851..6652b96c9 100644 --- a/src/pretix/api/views/checkin.py +++ b/src/pretix/api/views/checkin.py @@ -788,7 +788,10 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, if str(q.pk) in answers_data: try: if q.type == Question.TYPE_FILE: - given_answers[q] = _handle_file_upload(answers_data[str(q.pk)], user, auth) + if answers_data[str(q.pk)]: + given_answers[q] = _handle_file_upload(answers_data[str(q.pk)], user, auth) + else: + given_answers[q] = None else: given_answers[q] = q.clean_answer(answers_data[str(q.pk)]) except (ValidationError, BaseValidationError): diff --git a/src/tests/api/test_checkin.py b/src/tests/api/test_checkin.py index 63c38df34..88115b40e 100644 --- a/src/tests/api/test_checkin.py +++ b/src/tests/api/test_checkin.py @@ -1098,6 +1098,27 @@ def test_question_upload(token_client, organizer, clist, event, order, question) assert order.positions.first().answers.get(question=question[0]).file +@pytest.mark.django_db +def test_question_upload_optional(token_client, organizer, clist, event, order, question): + with scopes_disabled(): + p = order.positions.first() + question[0].type = 'F' + question[0].required = False + question[0].save() + + resp = _redeem(token_client, organizer, clist, p.pk, {}) + assert resp.status_code == 400 + assert resp.data['status'] == 'incomplete' + with scopes_disabled(): + assert resp.data['questions'] == [QuestionSerializer(question[0]).data] + + resp = _redeem(token_client, organizer, clist, p.pk, {'answers': {question[0].pk: ""}}) + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + with scopes_disabled(): + assert not order.positions.first().answers.filter(question=question[0]).exists() + + @pytest.mark.django_db def test_store_failed(token_client, organizer, clist, event, order): with scopes_disabled(): -- 2.52.0 From c384bc2e7a7d5874ec20798b78599c94bf1ec9dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 17:33:50 +0200 Subject: [PATCH 20/96] Update bleach requirement from ==6.3.* to ==6.4.* (#6249) Updates the requirements on [bleach](https://github.com/mozilla/bleach) to permit the latest version. - [Changelog](https://github.com/mozilla/bleach/blob/main/CHANGES) - [Commits](https://github.com/mozilla/bleach/compare/v6.3.0...v6.4.0) --- updated-dependencies: - dependency-name: bleach dependency-version: 6.4.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 10de2022e..7a0a318b4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ dependencies = [ "arabic-reshaper==3.0.1", # Support for Arabic in reportlab "babel", "BeautifulSoup4==4.14.*", - "bleach==6.3.*", + "bleach==6.4.*", "celery==5.6.*", "chardet==5.2.*", "cryptography>=48.0.0", -- 2.52.0 From edf97a13cd0b47ea531f89a376ef16ece817adbe Mon Sep 17 00:00:00 2001 From: luelista Date: Tue, 9 Jun 2026 12:48:03 +0200 Subject: [PATCH 21/96] Don't show warning if inactive products are used in checkin-rules (Z#23236197) (#6242) --- src/pretix/control/views/checkin.py | 3 ++- .../static/pretixcontrol/js/ui/checkinrules/App.vue | 6 +++--- .../pretixcontrol/js/ui/checkinrules/django-interop.ts | 10 ++++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/pretix/control/views/checkin.py b/src/pretix/control/views/checkin.py index 3c640ce12..51775210c 100644 --- a/src/pretix/control/views/checkin.py +++ b/src/pretix/control/views/checkin.py @@ -401,13 +401,14 @@ class CheckinListUpdate(EventPermissionRequiredMixin, UpdateView): { 'id': i.pk, 'name': str(i), + 'active': i.active, 'variations': [ { 'id': v.pk, 'name': str(v.value) } for v in i.variations.all() ] - } for i in self.request.event.items.filter(active=True).prefetch_related('variations') + } for i in self.request.event.items.prefetch_related('variations') ], **super().get_context_data(), } diff --git a/src/pretix/static/pretixcontrol/js/ui/checkinrules/App.vue b/src/pretix/static/pretixcontrol/js/ui/checkinrules/App.vue index 7c6f5c5cf..d23acfcf5 100644 --- a/src/pretix/static/pretixcontrol/js/ui/checkinrules/App.vue +++ b/src/pretix/static/pretixcontrol/js/ui/checkinrules/App.vue @@ -1,6 +1,6 @@ + -- 2.52.0 From 775fdd1ccb1c754a230564a5999234e79643f475 Mon Sep 17 00:00:00 2001 From: Martin Gross Date: Thu, 11 Jun 2026 16:25:13 +0200 Subject: [PATCH 25/96] Check-in API: Add reusable media exchange (#6115) * Add Reusable Media Exchange to Checkin API * isort * Remove debugging leftover * Apply suggestions from code review Co-authored-by: robbi5 * Add media_exchange_supported to CheckinRPCRedeemInputSerializer * SecurityProfiles: Add api-v1:reusablemedia-lookup and -detail for SCAN * Simplify media exchange checks * Apply suggestions from code review Co-authored-by: Raphael Michel * Wording: re-usable --> reusable * Deny checkins if media-exchange is required but device does not support it. * Remove media_exchange_supported-Flag: Checkin will always be denied if media needs to be exchanged; apps will fall back to explanation text * CheckinRPC: Also perform media exchange * Use media_policy from item, not as a checkinrpc parameter * my own review notes * Fixes, cleanup, rebase * block expired media * Fix query * add logging * Refactor link_action into media policy, gift card support * Block illegal policy-type combination * Drop add_to_reusable_medium, decide all by policy * Fix test failure * fix test on postgres * Expose reusable_media_usage_enforced to devies * Explicitly set update view --------- Co-authored-by: robbi5 Co-authored-by: Maximilian Richt Co-authored-by: Raphael Michel Co-authored-by: Raphael Michel Co-authored-by: Raphael Michel --- doc/api/resources/checkin.rst | 9 +- doc/api/resources/checkinlists.rst | 6 +- doc/api/resources/items.rst | 2 +- doc/api/resources/orders.rst | 3 +- src/pretix/api/auth/devicesecurity.py | 2 + src/pretix/api/serializers/checkin.py | 8 + src/pretix/api/serializers/event.py | 3 + src/pretix/api/serializers/order.py | 47 +- src/pretix/api/serializers/organizer.py | 1 + src/pretix/api/views/checkin.py | 54 +- src/pretix/api/views/media.py | 2 +- src/pretix/base/media.py | 34 +- src/pretix/base/models/checkin.py | 6 + src/pretix/base/models/items.py | 22 +- src/pretix/base/models/media.py | 5 +- src/pretix/base/services/cart.py | 4 +- src/pretix/base/services/checkin.py | 32 +- src/pretix/base/services/media.py | 178 ++++++- src/pretix/base/services/orders.py | 2 +- src/pretix/base/settings.py | 19 +- src/pretix/control/forms/organizer.py | 1 + src/pretix/control/logdisplay.py | 1 + .../pretixcontrol/checkin/simulator.html | 10 + .../pretixcontrol/organizers/edit.html | 1 + src/pretix/control/views/checkin.py | 4 +- src/pretix/static/jsi18n/en/djangojs.js | 1 - .../static/pretixcontrol/scss/main.scss | 3 + src/tests/api/test_checkinrpc.py | 488 +++++++++++++++++- src/tests/api/test_order_create.py | 16 +- src/tests/base/test_checkin.py | 2 +- src/tests/base/test_orders.py | 4 +- 31 files changed, 875 insertions(+), 95 deletions(-) diff --git a/doc/api/resources/checkin.rst b/doc/api/resources/checkin.rst index 479fa28a3..c4571ade2 100644 --- a/doc/api/resources/checkin.rst +++ b/doc/api/resources/checkin.rst @@ -46,12 +46,14 @@ Checking a ticket in this request twice with the same nonce, the second request will also succeed but will always create only one check-in object even when the previous request was successful as well. This allows for a certain level of idempotency and enables you to re-try after a connection failure. + :json string status: ``"ok"``, ``"incomplete"``, or ``"error"`` + :>json string status: ``"ok"``, ``"incomplete"``, ``"exchange"``, or ``"error"`` :>json string reason: Reason code, only set on status ``"error"``, see below for possible values. :>json string reason_explanation: Human-readable explanation, only set on status ``"error"`` and reason ``"rules"``, can be null. :>json object position: Copy of the matching order position (if any was found). The contents are the same as the @@ -67,6 +69,8 @@ Checking a ticket in :>json object list: Excerpt of information about the matching :ref:`check-in list ` (if any was found), including the attributes ``id``, ``name``, ``event``, ``subevent``, and ``include_pending``. :>json object questions: List of questions to be answered for check-in, only set on status ``"incomplete"``. + :>json object media_policy: Reusable media policy (see documentation on items), only set on status ``"exchange"``. + :>json object media_type: Reusable media type (see documentation on items), only set on status ``"exchange"``. **Example request**: @@ -224,6 +228,9 @@ Checking a ticket in * ``ambiguous`` - Multiple tickets match scan, rejected. * ``revoked`` - Ticket code has been revoked. * ``unapproved`` - Order has not yet been approved. + * ``already_exchanged`` - Ticket already has been exchanged for a reusable medium that must now be used for check-in. + * ``medium_invalid`` - Reusable medium identifier given was not found or is not valid. + * ``medium_exists`` - Reusable medium identifier already exists, but expected to be new. * ``error`` - Internal error. In case of reason ``rules`` and ``invalid_time``, there might be an additional response field ``reason_explanation`` diff --git a/doc/api/resources/checkinlists.rst b/doc/api/resources/checkinlists.rst index 6090772b5..3b6f506f4 100644 --- a/doc/api/resources/checkinlists.rst +++ b/doc/api/resources/checkinlists.rst @@ -602,7 +602,8 @@ Order position endpoints We no longer recommend using this API if you're building a ticket scanning application, as it has a few design flaws that can lead to `security issues`_ or compatibility issues due to barcode content characters that are not - URL-safe. We recommend to use our new :ref:`check-in API ` instead. + URL-safe. We recommend to use our new :ref:`check-in API ` instead. Advanced features like medium + exchange are only supported on the new API. :query boolean untrusted_input: If set to true, the lookup parameter is **always** interpreted as a ``secret``, never as an ``id``. This should be always set if you are passing through untrusted, scanned @@ -741,6 +742,9 @@ Order position endpoints * ``ambiguous`` - Multiple tickets match scan, rejected. * ``revoked`` - Ticket code has been revoked. * ``unapproved`` - Order has not yet been approved. + * ``already_exchanged`` - Ticket already has been exchanged for a reusable medium that must now be used for check-in. + * ``medium_invalid`` - Reusable medium identifier given was not found and could not be automatically created. + * ``medium_exists`` - Reusable medium identifier already exists, but expected to be new. In case of reason ``rules`` or ``invalid_time``, there might be an additional response field ``reason_explanation`` with a human-readable description of the violated rules. However, that field can also be missing or be ``null``. diff --git a/doc/api/resources/items.rst b/doc/api/resources/items.rst index a8a5a1482..ed81af0fe 100644 --- a/doc/api/resources/items.rst +++ b/doc/api/resources/items.rst @@ -131,7 +131,7 @@ allow_waitinglist boolean If ``false``, product when it is sold out. issue_giftcard boolean If ``true``, buying this product will yield a gift card. media_policy string Policy on how to handle reusable media (experimental feature). - Possible values are ``null``, ``"new"``, ``"reuse"``, and ``"reuse_or_new"``. + Possible values are ``null``, ``"new"``, ``"reuse"``, ``"reuse_or_new"``, ``"append"``, and ``"append_or_new"``. media_type string Type of reusable media to work on (experimental feature). See :ref:`rest-reusablemedia` for possible choices. show_quota_left boolean Publicly show how many tickets are still available. If this is ``null``, the event default is used. diff --git a/doc/api/resources/orders.rst b/doc/api/resources/orders.rst index d34554150..8f0ff758a 100644 --- a/doc/api/resources/orders.rst +++ b/doc/api/resources/orders.rst @@ -1069,8 +1069,7 @@ Creating orders * ``valid_from`` (optional, if both ``valid_from`` and ``valid_until`` are **missing** (not ``null``) the availability will be computed from the given product) * ``valid_until`` (optional, if both ``valid_from`` and ``valid_until`` are **missing** (not ``null``) the availability will be computed from the given product) * ``requested_valid_from`` (optional, can be set **instead** of ``valid_from`` and ``valid_until`` to signal a user choice for the start time that may or may not be respected) - * ``use_reusable_medium`` (optional, causes the new ticket to take over the given reusable medium, identified by its ID) - * ``add_to_reusable_medium`` (optional, causes the new ticket to be added to the given reusable medium, identified by its ID) + * ``use_reusable_medium`` (optional, causes the new ticket to be connected to the given reusable medium, identified by its ID) * ``discount`` (optional, only possible if ``price`` is set; attention: if this is set to not-``null`` on any position, automatic calculation of discounts will not run) * ``answers`` diff --git a/src/pretix/api/auth/devicesecurity.py b/src/pretix/api/auth/devicesecurity.py index 18a99336b..7fc06e952 100644 --- a/src/pretix/api/auth/devicesecurity.py +++ b/src/pretix/api/auth/devicesecurity.py @@ -110,6 +110,8 @@ class PretixScanSecurityProfile(AllowListSecurityProfile): ('POST', 'api-v1:checkinrpc.redeem'), ('GET', 'api-v1:checkinrpc.search'), ('GET', 'api-v1:reusablemedium-list'), + ('POST', 'api-v1:reusablemedium-lookup'), + ('PATCH', 'api-v1:reusablemedium-detail') ) diff --git a/src/pretix/api/serializers/checkin.py b/src/pretix/api/serializers/checkin.py index 63759c016..db716a315 100644 --- a/src/pretix/api/serializers/checkin.py +++ b/src/pretix/api/serializers/checkin.py @@ -88,11 +88,19 @@ class CheckinRPCRedeemInputSerializer(serializers.Serializer): nonce = serializers.CharField(required=False, allow_null=True) datetime = serializers.DateTimeField(required=False, allow_null=True) answers = serializers.JSONField(required=False, allow_null=True) + exchange_medium_type = serializers.ChoiceField(required=False, choices=MEDIA_TYPES) + exchange_medium_identifier = serializers.CharField(required=False) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['lists'].child_relation.queryset = CheckinList.objects.filter(event__in=self.context['events']).select_related('event') + def validate(self, attrs): + exchange_fields = ["exchange_medium_type", "exchange_medium_identifier"] + if any(attrs.get(k) is None for k in exchange_fields) and not all(attrs.get(k) is None for k in exchange_fields): + raise ValidationError("If you set any of exchange_medium_type or exchange_medium_identifier, you need to set both of them.") + return attrs + class MiniCheckinListSerializer(I18nAwareModelSerializer): event = serializers.SlugRelatedField(slug_field='slug', read_only=True) diff --git a/src/pretix/api/serializers/event.py b/src/pretix/api/serializers/event.py index ca163f0d3..52411e8fd 100644 --- a/src/pretix/api/serializers/event.py +++ b/src/pretix/api/serializers/event.py @@ -871,6 +871,7 @@ class EventSettingsSerializer(SettingsSerializer): 'og_image', 'name_scheme', 'reusable_media_active', + 'reusable_media_usage_enforced', 'reusable_media_type_barcode', 'reusable_media_type_barcode_identifier_length', 'reusable_media_type_nfc_uid', @@ -885,6 +886,7 @@ class EventSettingsSerializer(SettingsSerializer): readonly_fields = [ # These are read-only since they are currently only settable on organizers, not events 'reusable_media_active', + 'reusable_media_usage_enforced', 'reusable_media_type_barcode', 'reusable_media_type_barcode_identifier_length', 'reusable_media_type_nfc_uid', @@ -970,6 +972,7 @@ class DeviceEventSettingsSerializer(EventSettingsSerializer): 'reusable_media_type_nfc_uid', 'reusable_media_type_nfc_mf0aes', 'reusable_media_type_nfc_mf0aes_random_uid', + 'reusable_media_usage_enforced', 'system_question_order', 'tax_rule_payment', 'tax_rule_cancellation', diff --git a/src/pretix/api/serializers/order.py b/src/pretix/api/serializers/order.py index 0cfcb3a46..7ce4c567d 100644 --- a/src/pretix/api/serializers/order.py +++ b/src/pretix/api/serializers/order.py @@ -1043,15 +1043,13 @@ class OrderPositionCreateSerializer(I18nAwareModelSerializer): requested_valid_from = serializers.DateTimeField(required=False, allow_null=True) use_reusable_medium = serializers.PrimaryKeyRelatedField(queryset=ReusableMedium.objects.none(), required=False, allow_null=True) - add_to_reusable_medium = serializers.PrimaryKeyRelatedField(queryset=ReusableMedium.objects.none(), - required=False, allow_null=True) class Meta: model = OrderPosition fields = ('positionid', 'item', 'variation', 'price', 'attendee_name', 'attendee_name_parts', 'attendee_email', 'company', 'street', 'zipcode', 'city', 'country', 'state', 'is_bundled', 'secret', 'addon_to', 'subevent', 'answers', 'seat', 'voucher', 'valid_from', 'valid_until', - 'requested_valid_from', 'use_reusable_medium', 'add_to_reusable_medium', 'discount') + 'requested_valid_from', 'use_reusable_medium', 'discount') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -1063,8 +1061,6 @@ class OrderPositionCreateSerializer(I18nAwareModelSerializer): with scopes_disabled(): if 'use_reusable_medium' in self.fields: self.fields['use_reusable_medium'].queryset = ReusableMedium.objects.all() - if 'add_to_reusable_medium' in self.fields: - self.fields['add_to_reusable_medium'].queryset = ReusableMedium.objects.all() def validate_secret(self, secret): if secret and OrderPosition.all.filter(order__event=self.context['event'], secret=secret).exists(): @@ -1080,9 +1076,6 @@ class OrderPositionCreateSerializer(I18nAwareModelSerializer): ) return m - def validate_add_to_reusable_medium(self, m): - return self.validate_use_reusable_medium(m) - def validate_item(self, item): if item.event != self.context['event']: raise ValidationError( @@ -1157,12 +1150,6 @@ class OrderPositionCreateSerializer(I18nAwareModelSerializer): {'discount': ['You can only specify a discount if you do the price computation, but price is not set.']} ) - if 'use_reusable_medium' in data and 'add_to_reusable_medium' in data: - raise ValidationError({ - 'use_reusable_medium': ['You can only specify either use_reusable_medium or add_to_reusable_medium.'], - 'add_to_reusable_medium': ['You can only specify either use_reusable_medium or add_to_reusable_medium.'], - }) - return data @@ -1602,7 +1589,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer): pos_data['attendee_name_parts'] = { '_legacy': attendee_name } - pos = OrderPosition(**{k: v for k, v in pos_data.items() if k not in ('answers', '_quotas', 'use_reusable_medium', 'add_to_reusable_medium')}) + pos = OrderPosition(**{k: v for k, v in pos_data.items() if k not in ('answers', '_quotas', 'use_reusable_medium')}) if simulate: pos.order = order._wrapped else: @@ -1676,7 +1663,6 @@ class OrderCreateSerializer(I18nAwareModelSerializer): for pos_data in positions_data: answers_data = pos_data.pop('answers', []) use_reusable_medium = pos_data.pop('use_reusable_medium', None) - add_to_reusable_medium = pos_data.pop('add_to_reusable_medium', None) pos = pos_data['__instance'] pos._calculate_tax(invoice_address=ia) @@ -1718,14 +1704,17 @@ class OrderCreateSerializer(I18nAwareModelSerializer): answ.options.add(*options) if use_reusable_medium: - for op_pk in use_reusable_medium.linked_orderpositions.values_list('pk', flat=True): - use_reusable_medium.log_action( - 'pretix.reusable_medium.linked_orderposition.removed', - data={ - 'linked_orderposition': op_pk, - } - ) - use_reusable_medium.linked_orderpositions.set([pos]) + if pos.item.media_policy not in (Item.MEDIA_POLICY_APPEND, Item.MEDIA_POLICY_APPEND_OR_NEW): + for op_pk in use_reusable_medium.linked_orderpositions.values_list('pk', flat=True): + use_reusable_medium.log_action( + 'pretix.reusable_medium.linked_orderposition.removed', + data={ + 'linked_orderposition': op_pk, + } + ) + use_reusable_medium.linked_orderpositions.set([pos]) + else: + use_reusable_medium.linked_orderpositions.add(pos) use_reusable_medium.log_action( 'pretix.reusable_medium.linked_orderposition.added', data={ @@ -1733,15 +1722,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer): 'linked_orderposition': pos.pk, } ) - elif add_to_reusable_medium: - add_to_reusable_medium.linked_orderpositions.add(pos) - add_to_reusable_medium.log_action( - 'pretix.reusable_medium.linked_orderposition.added', - data={ - 'by_order': order.code, - 'linked_orderposition': pos.pk, - } - ) + use_reusable_medium.touch() if not simulate: for cp in delete_cps: diff --git a/src/pretix/api/serializers/organizer.py b/src/pretix/api/serializers/organizer.py index 47c141aee..9d595f762 100644 --- a/src/pretix/api/serializers/organizer.py +++ b/src/pretix/api/serializers/organizer.py @@ -605,6 +605,7 @@ class OrganizerSettingsSerializer(SettingsSerializer): 'cookie_consent_dialog_button_yes', 'cookie_consent_dialog_button_no', 'reusable_media_active', + 'reusable_media_usage_enforced', 'reusable_media_type_barcode', 'reusable_media_type_barcode_identifier_length', 'reusable_media_type_nfc_uid', diff --git a/src/pretix/api/views/checkin.py b/src/pretix/api/views/checkin.py index 6652b96c9..5016d54f9 100644 --- a/src/pretix/api/views/checkin.py +++ b/src/pretix/api/views/checkin.py @@ -69,8 +69,10 @@ from pretix.base.models import ( from pretix.base.models.orders import PrintLog from pretix.base.permissions import AnyPermissionOf from pretix.base.services.checkin import ( - CheckInError, RequiredQuestionsError, SQLLogic, perform_checkin, + CheckInError, RequiredMediaExchangeError, RequiredQuestionsError, SQLLogic, + perform_checkin, ) +from pretix.base.services.media import perform_media_exchange from pretix.base.signals import checkin_annulled from pretix.helpers import OF_SELF @@ -454,7 +456,8 @@ def _checkin_list_position_queryset(checkinlists, ignore_status=False, ignore_pr def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, checkin_type, ignore_unpaid, nonce, untrusted_input, user, auth, expand, pdf_data, request, questions_supported, canceled_supported, - source_type='barcode', legacy_url_support=False, simulate=False, gate=None, use_order_locale=False): + source_type='barcode', legacy_url_support=False, simulate=False, gate=None, use_order_locale=False, + exchange_medium_type=None, exchange_medium_identifier=None): if not checkinlists: raise ValidationError('No check-in list passed.') @@ -463,6 +466,7 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, device = auth if isinstance(auth, Device) else None gate = gate or (auth.gate if isinstance(auth, Device) else None) + medium = None context = { 'request': request, @@ -522,7 +526,7 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, # with respecting the force option), or it's a reusable medium (-> proceed with that) if not op_candidates: try: - media = ReusableMedium.objects.active().filter( + medium = ReusableMedium.objects.active().filter( Exists(ReusableMedium.linked_orderpositions.through.objects.filter(reusablemedium_id=OuterRef('pk'))) ).get( organizer_id=checkinlists[0].event.organizer_id, @@ -630,7 +634,7 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, 'list': MiniCheckinListSerializer(list_by_event[revoked_matches[0].event_id]).data, }, status=400) else: - linked_ops = media.linked_orderpositions.all().select_related("order").prefetch_related("addons") + linked_ops = medium.linked_orderpositions.all().select_related("order").prefetch_related("addons") linked_event_ids = {op.order.event_id for op in linked_ops} if not any(event_id in list_by_event for event_id in linked_event_ids): # Medium exists but connected ticket is for the wrong event @@ -661,7 +665,7 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, op_candidates = [] for op in linked_ops: if op.order.event_id in list_by_event: - reusable_medium_used = media + reusable_medium_used = medium op_candidates.append(op) if list_by_event[op.order.event_id].addon_match: op_candidates += list(op.addons.all()) @@ -804,7 +808,14 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, locale = op.order.event.settings.locale with language(locale): try: - perform_checkin( + if exchange_medium_identifier and medium: + # Cannot scan a medium and then request to exchange it + raise CheckInError( + gettext('You cannot exchange a medium for a medium.'), + 'error' + ) + + checkin_args = dict( op=op, clist=list_by_event[op.order.event_id], given_answers=given_answers, @@ -822,7 +833,25 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, from_revoked_secret=from_revoked_secret, simulate=simulate, gate=gate, + reusable_medium=medium, ) + + if exchange_medium_identifier: # other fields are filled, see CheckinRPCRedeemInputSerializer.validate + with transaction.atomic(): + # Do exchange and check-in atomically, i.e. both succeed or both fail + medium = perform_media_exchange( + organizer=request.organizer, + media_type=exchange_medium_type, + identifier=exchange_medium_identifier, + link_orderposition=op, + user=user, + auth=auth, + ) + source_type = medium.media_type.identifier + checkin_args['reusable_medium'] = medium + perform_checkin(**checkin_args) + else: + perform_checkin(**checkin_args) except RequiredQuestionsError as e: return Response({ 'status': 'incomplete', @@ -834,6 +863,17 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, ], 'list': MiniCheckinListSerializer(list_by_event[op.order.event_id]).data, }, status=400) + except RequiredMediaExchangeError as e: + return Response({ + 'status': 'exchange', + 'require_attention': op.require_checkin_attention, + 'checkin_texts': op.checkin_texts, + 'position': CheckinListOrderPositionSerializer(op, context=_make_context(context, op.order.event)).data, + 'media_policy': e.media_policy, + 'media_type': e.media_type, + 'list': MiniCheckinListSerializer(list_by_event[op.order.event_id]).data, + 'reason_explanation': e.msg, + }, status=400) except CheckInError as e: if not simulate: op.order.log_action('pretix.event.checkin.denied', data={ @@ -1021,6 +1061,8 @@ class CheckinRPCRedeemView(views.APIView): canceled_supported=True, request=self.request, # this is not clean, but we need it in the serializers for URL generation legacy_url_support=False, + exchange_medium_type=s.validated_data.get('exchange_medium_type'), + exchange_medium_identifier=s.validated_data.get('exchange_medium_identifier'), ) diff --git a/src/pretix/api/views/media.py b/src/pretix/api/views/media.py index 7b1509128..5c2007930 100644 --- a/src/pretix/api/views/media.py +++ b/src/pretix/api/views/media.py @@ -196,7 +196,7 @@ class ReusableMediaViewSet(viewsets.ModelViewSet): return Response({"result": None}) - @scopes_disabled() # we are sure enough that get_queryset() is correct, so we save some perforamnce + @scopes_disabled() # we are sure enough that get_queryset() is correct, so we save some performance def list(self, request, **kwargs): date = serializers.DateTimeField().to_representation(now()) queryset = self.filter_queryset(self.get_queryset()) diff --git a/src/pretix/base/media.py b/src/pretix/base/media.py index 47a1be987..f6a4b24fd 100644 --- a/src/pretix/base/media.py +++ b/src/pretix/base/media.py @@ -26,6 +26,7 @@ from django.utils.translation import gettext_lazy as _ class BaseMediaType: medium_created_by_server = False + medium_created_from_unknown_supported = False supports_orderposition = False supports_giftcard = False @@ -56,7 +57,7 @@ class BaseMediaType: def is_active(self, organizer): return organizer.settings.get(f'reusable_media_type_{self.identifier}', as_type=bool, default=False) - def handle_unknown(self, organizer, identifier, user, auth): + def handle_unknown(self, organizer, identifier, user, auth, force_create=False): pass def handle_new(self, organizer, medium, user, auth): @@ -88,23 +89,32 @@ class NfcUidMediaType(BaseMediaType): verbose_name = _('NFC UID-based') icon = 'pretixbase/img/media/nfc_uid.svg' medium_created_by_server = False + medium_created_from_unknown_supported = True supports_giftcard = True - supports_orderposition = False + supports_orderposition = True - def handle_unknown(self, organizer, identifier, user, auth): + def handle_unknown(self, organizer, identifier, user, auth, force_create=False): from pretix.base.models import GiftCard, ReusableMedium - if organizer.settings.get(f'reusable_media_type_{self.identifier}_autocreate_giftcard', as_type=bool): + create_giftcard = organizer.settings.get(f'reusable_media_type_{self.identifier}_autocreate_giftcard', as_type=bool) + if create_giftcard or force_create: if identifier.startswith("08"): # Don't create gift cards for NFC UIDs that start with 08, which represents NFC cards that issue random # UIDs on every read, so they won't be useful. return with transaction.atomic(): - gc = GiftCard.objects.create( - issuer=organizer, - expires=organizer.default_gift_card_expiry, - currency=organizer.settings.get(f'reusable_media_type_{self.identifier}_autocreate_giftcard_currency'), - ) + if create_giftcard: + gc = GiftCard.objects.create( + issuer=organizer, + expires=organizer.default_gift_card_expiry, + currency=organizer.settings.get(f'reusable_media_type_{self.identifier}_autocreate_giftcard_currency'), + ) + gc.log_action( + 'pretix.giftcards.created', + user=user, auth=auth, + ) + else: + gc = None m = ReusableMedium.objects.create( type=self.identifier, identifier=identifier, @@ -116,10 +126,6 @@ class NfcUidMediaType(BaseMediaType): 'pretix.reusable_medium.created.auto', user=user, auth=auth, ) - gc.log_action( - 'pretix.giftcards.created', - user=user, auth=auth, - ) return m @@ -129,7 +135,7 @@ class NfcMf0aesMediaType(BaseMediaType): icon = 'pretixbase/img/media/nfc_secure.svg' medium_created_by_server = False supports_giftcard = True - supports_orderposition = False + supports_orderposition = True def handle_new(self, organizer, medium, user, auth): from pretix.base.models import GiftCard diff --git a/src/pretix/base/models/checkin.py b/src/pretix/base/models/checkin.py index 0926cedee..bd06bb11e 100644 --- a/src/pretix/base/models/checkin.py +++ b/src/pretix/base/models/checkin.py @@ -346,11 +346,14 @@ class Checkin(models.Model): REASON_INCOMPLETE = 'incomplete' REASON_ALREADY_REDEEMED = 'already_redeemed' REASON_AMBIGUOUS = 'ambiguous' + REASON_MEDIUM_INVALID = 'medium_invalid' + REASON_MEDIUM_EXISTS = 'medium_exists' REASON_ERROR = 'error' REASON_BLOCKED = 'blocked' REASON_UNAPPROVED = 'unapproved' REASON_INVALID_TIME = 'invalid_time' REASON_ANNULLED = 'annulled' + REASON_ALREADY_EXCHANGED = 'already_exchanged' REASONS = ( (REASON_CANCELED, _('Order canceled')), (REASON_INVALID, _('Unknown ticket')), @@ -366,6 +369,9 @@ class Checkin(models.Model): (REASON_UNAPPROVED, _('Order not approved')), (REASON_INVALID_TIME, _('Ticket not valid at this time')), (REASON_ANNULLED, _('Check-in annulled')), + (REASON_ALREADY_EXCHANGED, _('Ticket already exchanged')), + (REASON_MEDIUM_INVALID, _('Reusable medium invalid')), + (REASON_MEDIUM_EXISTS, _('Reusable medium already exists')), ) successful = models.BooleanField( diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index feb7dec8a..79f1229d1 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -452,11 +452,16 @@ class Item(LoggedModel): MEDIA_POLICY_REUSE = 'reuse' MEDIA_POLICY_NEW = 'new' MEDIA_POLICY_REUSE_OR_NEW = 'reuse_or_new' + MEDIA_POLICY_APPEND = 'append' + MEDIA_POLICY_APPEND_OR_NEW = 'append_or_new' MEDIA_POLICIES = ( - (None, _("Don't use re-usable media, use regular one-off tickets")), - (MEDIA_POLICY_REUSE, _('Require an existing medium to be re-used')), + (None, _("Don't use reusable media, use regular one-off tickets")), (MEDIA_POLICY_NEW, _('Require a previously unknown medium to be newly added')), - (MEDIA_POLICY_REUSE_OR_NEW, _('Require either an existing or a new medium to be used')), + (MEDIA_POLICY_REUSE, _('Require an existing medium to be reused, replacing any previous tickets')), + (MEDIA_POLICY_REUSE_OR_NEW, _('Require either an existing or a new medium to be used, replacing any previous tickets')), + (MEDIA_POLICY_APPEND, _('Require an existing medium to be reused, adding to any previous tickets')), + (MEDIA_POLICY_APPEND_OR_NEW, + _('Require either an existing or a new medium to be used, adding to any previous tickets')), ) objects = ItemQuerySetManager() @@ -769,7 +774,7 @@ class Item(LoggedModel): null=True, blank=True, max_length=16, verbose_name=_('Reusable media policy'), help_text=_( - 'If this product should be stored on a re-usable physical medium, you can attach a physical media policy. ' + 'If this product should be stored on a reusable physical medium, you can attach a physical media policy. ' 'This is not required for regular tickets, which just use a one-time barcode, but only for products like ' 'renewable season tickets or re-chargeable gift card wristbands. ' 'This is an advanced feature that also requires specific configuration of ticketing and printing settings.' @@ -778,7 +783,7 @@ class Item(LoggedModel): media_type = models.CharField( max_length=100, null=True, blank=True, - choices=[(None, _("Don't use re-usable media, use regular one-off tickets"))] + [(k, v) for k, v in MEDIA_TYPES.items()], + choices=[(None, _("Don't use reusable media, use regular one-off tickets"))] + [(k, v) for k, v in MEDIA_TYPES.items()], verbose_name=_('Reusable media type'), help_text=_( 'Select the type of physical medium that should be used for this product. Note that not all media types ' @@ -995,6 +1000,11 @@ class Item(LoggedModel): raise ValidationError(_('The selected media type does not support usage for tickets currently.')) if not mt.supports_giftcard and issue_giftcard: raise ValidationError(_('The selected media type does not support usage for gift cards currently.')) + if media_policy in (Item.MEDIA_POLICY_NEW, Item.MEDIA_POLICY_APPEND_OR_NEW, Item.MEDIA_POLICY_REUSE_OR_NEW): + if not mt.medium_created_by_server and not mt.medium_created_from_unknown_supported: + raise ValidationError(_('The selected media type requires all media to be registered in the system ' + 'prior to their usage. Therefore, the selected media policy does not make ' + 'sense for this media type.')) if issue_giftcard: raise ValidationError(_('You currently cannot create gift cards with a reusable media policy. Instead, ' 'gift cards for some reusable media types can be created or re-charged directly ' @@ -2220,7 +2230,7 @@ class Quota(LoggedModel): class ItemMetaProperty(LoggedModel): """ An event can have ItemMetaProperty objects attached to define meta information fields - for its items. This information can be re-used for example in ticket layouts. + for its items. This information can be reused for example in ticket layouts. :param event: The event this property is defined for. :type event: Event diff --git a/src/pretix/base/models/media.py b/src/pretix/base/models/media.py index eabefae59..097c7803f 100644 --- a/src/pretix/base/models/media.py +++ b/src/pretix/base/models/media.py @@ -129,7 +129,10 @@ class ReusableMedium(LoggedModel): @property def is_expired(self): - return self.expires and self.expires > now() + return self.expires and self.expires < now() + + def touch(self): + self.save(update_fields=['updated']) class Meta: unique_together = (("identifier", "type", "organizer"),) diff --git a/src/pretix/base/services/cart.py b/src/pretix/base/services/cart.py index 99604e637..c9ddf51a9 100644 --- a/src/pretix/base/services/cart.py +++ b/src/pretix/base/services/cart.py @@ -287,11 +287,11 @@ def _check_position_constraints( raise CartPositionError(error_messages['unavailable']) # Invalid media policy for online sale - if item.media_policy in (Item.MEDIA_POLICY_NEW, Item.MEDIA_POLICY_REUSE_OR_NEW): + if item.media_policy in (Item.MEDIA_POLICY_NEW, Item.MEDIA_POLICY_REUSE_OR_NEW, Item.MEDIA_POLICY_APPEND_OR_NEW, Item.MEDIA_POLICY_REUSE_OR_NEW): mt = MEDIA_TYPES[item.media_type] if not mt.medium_created_by_server: raise CartPositionError(error_messages['media_usage_not_implemented']) - elif item.media_policy == Item.MEDIA_POLICY_REUSE: + elif item.media_policy in (Item.MEDIA_POLICY_REUSE, Item.MEDIA_POLICY_APPEND): raise CartPositionError(error_messages['media_usage_not_implemented']) # Item removed from sales channel diff --git a/src/pretix/base/services/checkin.py b/src/pretix/base/services/checkin.py index ecf4cf7a9..3ac7b6792 100644 --- a/src/pretix/base/services/checkin.py +++ b/src/pretix/base/services/checkin.py @@ -867,6 +867,15 @@ class RequiredQuestionsError(Exception): super().__init__(msg) +class RequiredMediaExchangeError(Exception): + def __init__(self, msg, code, media_policy, media_type): + self.msg = msg + self.code = code + self.media_policy = media_policy + self.media_type = media_type + super().__init__(msg) + + def _save_answers(op, answers, given_answers): def _create_answer(question, answer): try: @@ -939,7 +948,7 @@ def perform_checkin(op: OrderPosition, clist: CheckinList, given_answers: dict, ignore_unpaid=False, nonce=None, datetime=None, questions_supported=True, user=None, auth=None, canceled_supported=False, type=Checkin.TYPE_ENTRY, raw_barcode=None, raw_source_type=None, from_revoked_secret=False, simulate=False, - gate=None): + gate=None, reusable_medium=None): """ Create a checkin for this particular order position and check-in list. Fails with CheckInError if the check in is not valid at this time. @@ -955,6 +964,7 @@ def perform_checkin(op: OrderPosition, clist: CheckinList, given_answers: dict, :param datetime: The datetime of the checkin, defaults to now. :param simulate: If true, the check-in is not saved. :param gate: The gate the check-in was performed at. + :param reusable_medium: The medium that is available for an exchange """ # !!!!!!!!! @@ -1035,7 +1045,7 @@ def perform_checkin(op: OrderPosition, clist: CheckinList, given_answers: dict, with transaction.atomic(): # Lock order positions, if it is an entry. We don't need it for exits, as a race condition wouldn't be problematic - opqs = OrderPosition.all + opqs = OrderPosition.all.select_related("order", "item") if type != Checkin.TYPE_EXIT: opqs = opqs.select_for_update(of=OF_SELF) op = opqs.get(pk=op.pk) @@ -1101,6 +1111,24 @@ def perform_checkin(op: OrderPosition, clist: CheckinList, given_answers: dict, require_answers ) + required_media_policy = op.item.media_policy + required_media_type = op.item.media_type + require_a_medium = required_media_policy and required_media_type + linked_media = op.linked_media + if require_a_medium and not reusable_medium and not force: + if not linked_media.exists(): + raise RequiredMediaExchangeError( + _('Ticket needs to be exchanged to a suitable medium.'), + 'exchange', + required_media_policy, + required_media_type + ) + elif op.organizer.settings.reusable_media_usage_enforced: + raise CheckInError( + _('This ticket has already been exchanged for a reusable medium that now needs to be used instead.'), + 'already_exchanged', + ) + device = None if isinstance(auth, Device): device = auth diff --git a/src/pretix/base/services/media.py b/src/pretix/base/services/media.py index c431e79ae..632724219 100644 --- a/src/pretix/base/services/media.py +++ b/src/pretix/base/services/media.py @@ -23,10 +23,13 @@ import secrets from django.db import IntegrityError from django.db.models import Q +from django.utils.translation import gettext as _ from django_scopes import scopes_disabled -from pretix.base.models import GiftCardAcceptance -from pretix.base.models.media import MediumKeySet +from pretix.base.media import MEDIA_TYPES +from pretix.base.models import Checkin, GiftCardAcceptance, Item +from pretix.base.models.media import MediumKeySet, ReusableMedium +from pretix.base.services.checkin import CheckInError def create_nfc_mf0aes_keyset(organizer): @@ -70,3 +73,174 @@ def get_keysets_for_organizer(organizer): if new_set: sets.append(new_set) return sets + + +def perform_media_exchange(organizer, media_type, identifier, link_orderposition, user, auth): + """ + Create or retrieve a medium, then link the order position to it. Expected to be called in a transaction. + + :param organizer: Organizer to operate in + :param media_type: Type of medium to operate with + :param identifier: Identifier of the medium + :param link_orderposition: Position to link to the medium + :return: ReusableMedium + """ + medium = None + media_policy = link_orderposition.item.media_policy + + if media_type not in MEDIA_TYPES: # should be caught by serializer already + raise CheckInError( + _('Invalid medium type.'), + Checkin.REASON_ERROR, + reason=_('Invalid medium type.'), + ) + + if not MEDIA_TYPES[media_type].is_active(organizer): + raise CheckInError( + _('Medium type is not enabled for organizer.'), + Checkin.REASON_ERROR, + reason=_('Medium type is not enabled for organizer.'), + ) + + if link_orderposition.item.media_type != media_type: + raise CheckInError( + _('Incorrect medium type for product.'), + Checkin.REASON_PRODUCT, + reason=_('Incorrect medium type for product.'), + ) + + if link_orderposition.linked_media.exists(): + raise CheckInError( + _('Ticket is already exchanged for reusable medium.'), + Checkin.REASON_ALREADY_EXCHANGED, + reason=_('Ticket is already exchanged for reusable medium.'), + ) + + if media_policy in (Item.MEDIA_POLICY_APPEND, Item.MEDIA_POLICY_APPEND_OR_NEW, Item.MEDIA_POLICY_NEW): + link_action = "append" + else: + link_action = "replace" + + if media_policy in (Item.MEDIA_POLICY_REUSE, Item.MEDIA_POLICY_APPEND): + try: + medium = ReusableMedium.objects.get( + type=media_type, + identifier=identifier, + organizer=organizer, + ) + except ReusableMedium.DoesNotExist: + raise CheckInError( + _('Reusable medium not found.'), + Checkin.REASON_MEDIUM_INVALID, + reason=_('Reusable medium not found.'), + ) + else: + if medium.is_expired or not medium.active: + raise CheckInError( + _('Reusable medium is inactive or expired.'), + Checkin.REASON_MEDIUM_INVALID, + reason=_('Reusable medium is inactive or expired.'), + ) + + elif media_policy in (Item.MEDIA_POLICY_REUSE_OR_NEW, Item.MEDIA_POLICY_APPEND_OR_NEW): + try: + medium = ReusableMedium.objects.get( + type=media_type, + identifier=identifier, + organizer=organizer, + ) + except ReusableMedium.DoesNotExist: + if not MEDIA_TYPES[media_type].medium_created_from_unknown_supported: + raise CheckInError( + _('Reusable medium not found and could not be created.'), + Checkin.REASON_MEDIUM_INVALID, + ) + + medium = MEDIA_TYPES[media_type].handle_unknown(organizer, identifier, user, auth, force_create=True) + if not medium: + raise CheckInError( + _('Reusable medium not found and could not be created.'), + Checkin.REASON_MEDIUM_INVALID, + ) + + if medium.is_expired or not medium.active: + raise CheckInError( + _('Reusable medium is inactive or expired.'), + Checkin.REASON_MEDIUM_INVALID, + reason=_('Reusable medium is inactive or expired.'), + ) + + elif media_policy == Item.MEDIA_POLICY_NEW: + if not MEDIA_TYPES[media_type].medium_created_from_unknown_supported: + raise CheckInError( + _('Reusable medium not found and could not be created.'), + Checkin.REASON_MEDIUM_INVALID, + ) + try: + medium = MEDIA_TYPES[media_type].handle_unknown(organizer, identifier, user, auth, force_create=True) + except IntegrityError: + raise CheckInError( + _('Reusable medium already exists.'), + Checkin.REASON_MEDIUM_EXISTS, + ) + else: + if not medium: + raise CheckInError( + _('Reusable medium could not be created.'), + Checkin.REASON_MEDIUM_INVALID, + ) + + else: + raise CheckInError( + _('Product does not support medium exchange.'), + Checkin.REASON_PRODUCT, + reason=_('Product does not support medium exchange.'), + ) + + if link_action == 'append': + medium.linked_orderpositions.add(link_orderposition) + medium.log_action( + 'pretix.reusable_medium.linked_orderposition.added', + user=user, + auth=auth, + data={ + 'linked_orderposition': link_orderposition, + } + ) + elif link_action == 'replace': + already_found = False + for op_pk in medium.linked_orderpositions.values_list('pk', flat=True): + if op_pk == link_orderposition.pk: + already_found = True + continue + else: + medium.log_action( + 'pretix.reusable_medium.linked_orderposition.removed', + data={ + 'linked_orderposition': op_pk, + } + ) + if not already_found: + medium.linked_orderpositions.set([link_orderposition]) + medium.log_action( + 'pretix.reusable_medium.linked_orderposition.added', + user=user, + auth=auth, + data={ + 'linked_orderposition': link_orderposition, + } + ) + + link_orderposition.order.log_action( + 'pretix.reusable_medium.exchanged', + data={ + 'position': link_orderposition.pk, + 'positionid': link_orderposition.positionid, + 'medium': medium.pk, + 'medium_identifier': medium.identifier, + 'medium_type': medium.media_type.identifier, + } + ) + medium.touch() + + return medium diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index cdd0cd2f5..dc7336330 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -3506,7 +3506,7 @@ def signal_listener_issue_media(sender: Event, order: Order, **kwargs): from pretix.base.models import ReusableMedium for p in order.positions.all(): - if p.item.media_policy in (Item.MEDIA_POLICY_NEW, Item.MEDIA_POLICY_REUSE_OR_NEW): + if p.item.media_policy in (Item.MEDIA_POLICY_NEW, Item.MEDIA_POLICY_REUSE_OR_NEW, Item.MEDIA_POLICY_APPEND_OR_NEW): mt = MEDIA_TYPES[p.item.media_type] if mt.medium_created_by_server and not p.linked_media.exists(): rm = ReusableMedium.objects.create( diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index f3170a0b9..ec6224e76 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -211,12 +211,25 @@ DEFAULTS = { 'form_class': forms.BooleanField, 'serializer_class': serializers.BooleanField, 'form_kwargs': dict( - label=_("Activate re-usable media"), - help_text=_("The re-usable media feature allows you to connect tickets and gift cards with physical media " - "such as wristbands or chip cards that may be re-used for different tickets or gift cards " + label=_("Activate reusable media"), + help_text=_("The reusable media feature allows you to connect tickets and gift cards with physical media " + "such as wristbands or chip cards that may be reused for different tickets or gift cards " "later.") ) }, + 'reusable_media_usage_enforced': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Enforce the usage of issued reusable media for check-in"), + help_text=_("If enabled, a ticket barcode will not be accepted anymore, if a reusable medium has been " + "created and linked to a ticket. Keeping this option turned off will treat the reusable " + "medium and ticket as equals."), + widget=forms.CheckboxInput(attrs={'data-display-dependency': '#id_settings-reusable_media_active'}), + ) + }, 'reusable_media_type_barcode': { 'default': 'False', 'type': bool, diff --git a/src/pretix/control/forms/organizer.py b/src/pretix/control/forms/organizer.py index a1e39981b..f4175ddcd 100644 --- a/src/pretix/control/forms/organizer.py +++ b/src/pretix/control/forms/organizer.py @@ -636,6 +636,7 @@ class OrganizerSettingsForm(SettingsForm): 'cookie_consent_dialog_button_yes', 'cookie_consent_dialog_button_no', 'reusable_media_active', + 'reusable_media_usage_enforced', 'reusable_media_type_barcode', 'reusable_media_type_barcode_identifier_length', 'reusable_media_type_nfc_uid', diff --git a/src/pretix/control/logdisplay.py b/src/pretix/control/logdisplay.py index 84e3365ae..1204fcc83 100644 --- a/src/pretix/control/logdisplay.py +++ b/src/pretix/control/logdisplay.py @@ -746,6 +746,7 @@ class CoreUserImpersonatedLogEntryType(UserImpersonatedLogEntryType): 'pretix.reusable_medium.linked_orderposition.added': _('A new ticket has been added to the medium.'), 'pretix.reusable_medium.linked_orderposition.removed': _('A ticket has been removed from the medium.'), 'pretix.reusable_medium.linked_orderposition.changed': _('The medium has been connected to a new ticket.'), + 'pretix.reusable_medium.exchanged': _('The ticket #{positionid} was exchanged for reusable medium {medium_identifier}.'), 'pretix.reusable_medium.linked_giftcard.changed': _('The medium has been connected to a new gift card.'), 'pretix.email.error': _('Sending of an email has failed.'), 'pretix.event.comment': _('The event\'s internal comment has been updated.'), diff --git a/src/pretix/control/templates/pretixcontrol/checkin/simulator.html b/src/pretix/control/templates/pretixcontrol/checkin/simulator.html index 2ebb94a30..48b5c5e24 100644 --- a/src/pretix/control/templates/pretixcontrol/checkin/simulator.html +++ b/src/pretix/control/templates/pretixcontrol/checkin/simulator.html @@ -54,6 +54,8 @@ {% elif result.status == "incomplete" %} + {% elif result.status == "exchange" %} + {% elif result.status == "error" %} {% if result.reason == "already_redeemed" %} @@ -79,6 +81,14 @@ {% endfor %} + {% elif result.status == "exchange" %} +

{% trans "Media exchange required" %}

+

+ {% blocktrans trimmed with media_policy=media_policies|getitem:result.media_policy media_type=media_types|getitem:result.media_type %} + This ticket needs to be exchanged into a {{ media_type }} reusable medium. + {{ media_policy }}. + {% endblocktrans %} +

{% elif result.status == "error" %}

{{ reason_labels|getitem:result.reason }}

{% if result.reason_explanation %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/edit.html b/src/pretix/control/templates/pretixcontrol/organizers/edit.html index 2cfb241a7..960c6fb4f 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/edit.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/edit.html @@ -222,6 +222,7 @@
{% trans "Reusable media" %} {% bootstrap_field sform.reusable_media_active layout="control" %} + {% bootstrap_field sform.reusable_media_usage_enforced layout="control" %}
diff --git a/src/pretix/control/views/checkin.py b/src/pretix/control/views/checkin.py index 51775210c..446aad273 100644 --- a/src/pretix/control/views/checkin.py +++ b/src/pretix/control/views/checkin.py @@ -50,7 +50,7 @@ from i18nfield.strings import LazyI18nString from pretix.api.views.checkin import _redeem_process from pretix.base.media import MEDIA_TYPES -from pretix.base.models import Checkin, LogEntry, Order, OrderPosition +from pretix.base.models import Checkin, Item, LogEntry, Order, OrderPosition from pretix.base.models.checkin import CheckinList from pretix.base.models.orders import PrintLog from pretix.base.permissions import AnyPermissionOf @@ -533,6 +533,8 @@ class CheckInListSimulator(EventPermissionRequiredMixin, FormView): checkinlist=self.list, result=self.result, reason_labels=dict(Checkin.REASONS), + media_policies=dict(Item.MEDIA_POLICIES), + media_types=dict(MEDIA_TYPES), ) def form_valid(self, form): diff --git a/src/pretix/static/jsi18n/en/djangojs.js b/src/pretix/static/jsi18n/en/djangojs.js index 5dee27a8f..4d833a713 100644 --- a/src/pretix/static/jsi18n/en/djangojs.js +++ b/src/pretix/static/jsi18n/en/djangojs.js @@ -1,5 +1,4 @@ - 'use strict'; { const globals = this; diff --git a/src/pretix/static/pretixcontrol/scss/main.scss b/src/pretix/static/pretixcontrol/scss/main.scss index 67b3f22b7..3941b3304 100644 --- a/src/pretix/static/pretixcontrol/scss/main.scss +++ b/src/pretix/static/pretixcontrol/scss/main.scss @@ -864,6 +864,9 @@ tbody th { .checkin-sim-result-status-incomplete { background: $brand-primary; } +.checkin-sim-result-status-exchange { + background: $brand-primary; +} .checkin-sim-result-status-error { background: $brand-danger; } diff --git a/src/tests/api/test_checkinrpc.py b/src/tests/api/test_checkinrpc.py index 78885344a..0c5c387a9 100644 --- a/src/tests/api/test_checkinrpc.py +++ b/src/tests/api/test_checkinrpc.py @@ -34,7 +34,7 @@ from tests.const import SAMPLE_PNG from pretix.api.serializers.item import QuestionSerializer from pretix.base.models import ( - Checkin, InvoiceAddress, Order, OrderPosition, ReusableMedium, + Checkin, InvoiceAddress, Item, Order, OrderPosition, ReusableMedium, ) # Lots of this code is overlapping with test_checkin.py, and some of it is arguably redundant since it's triggering @@ -1253,3 +1253,489 @@ def test_annul_failures(device_client, team, organizer, clist, clist_event2, eve with scopes_disabled(): ci = p.all_checkins.get() assert ci.successful + + +@pytest.mark.django_db +def test_exchange_incomplete_body(token_client, organizer, clist, event, order): + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid" + }) + assert resp.status_code == 400 + assert resp.data == { + 'non_field_errors': ['If you set any of exchange_medium_type or exchange_medium_identifier, you need to set both of them.'] + } + + +@pytest.mark.django_db +def test_exchange_medium_for_medium(token_client, organizer, clist, event, order): + with scopes_disabled(): + rm = ReusableMedium.objects.create( + type="barcode", + identifier="abcdef", + organizer=organizer, + ) + rm.linked_orderpositions.add(order.positions.first()) + resp = _redeem(token_client, organizer, clist, "abcdef", { + "source_type": "barcode", + "exchange_medium_type": "barcode", + "exchange_medium_identifier": "hijkl", + }) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'error' + + +@pytest.mark.django_db +def test_exchange_unknown_media_type(token_client, organizer, clist, event, order): + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "unknown", + "exchange_medium_identifier": "hijkl", + }) + assert resp.status_code == 400 + assert resp.data == {"exchange_medium_type": ["\"unknown\" is not a valid choice."]} + + +@pytest.mark.django_db +def test_exchange_disabled_media_type(token_client, organizer, clist, event, order): + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "hijkl", + }) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'error' + assert resp.data['reason_explanation'] == 'Medium type is not enabled for organizer.' + + +@pytest.mark.django_db +def test_exchange_mismatch_media_type(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "barcode" + item.save() + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "12345678", + }) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'product' + assert resp.data['reason_explanation'] == 'Incorrect medium type for product.' + + +@pytest.mark.django_db +def test_exchange_no_item_policy(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "nfc_uid" + item.save() + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "12345678", + }) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'product' + assert resp.data['reason_explanation'] == 'Product does not support medium exchange.' + + +@pytest.mark.django_db +def test_exchange_reuse_or_new_new(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_REUSE_OR_NEW + item.save() + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "12345678", + }) + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + with scopes_disabled(): + rm = ReusableMedium.objects.get( + type="nfc_uid", + identifier="12345678", + organizer=organizer, + ) + assert rm.linked_orderpositions.get().secret == "z3fsn8jyufm5kpk768q69gkbyr5f4h6w" + + +@pytest.mark.django_db +def test_exchange_reuse_or_new_reuse_replace(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_REUSE_OR_NEW + item.save() + with scopes_disabled(): + rm = ReusableMedium.objects.create( + type="nfc_uid", + identifier="12345678", + organizer=organizer, + ) + rm.linked_orderpositions.add(order.positions.last()) + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "12345678", + }) + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + rm.refresh_from_db() + with scopes_disabled(): + assert rm.linked_orderpositions.get().secret == "z3fsn8jyufm5kpk768q69gkbyr5f4h6w" + + +@pytest.mark.django_db +def test_exchange_reuse_or_new_reuse_append(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_APPEND_OR_NEW + item.save() + with scopes_disabled(): + rm = ReusableMedium.objects.create( + type="nfc_uid", + identifier="12345678", + organizer=organizer, + ) + rm.linked_orderpositions.add(order.positions.last()) + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "12345678", + }) + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + rm.refresh_from_db() + with scopes_disabled(): + assert rm.linked_orderpositions.count() == 2 + assert rm.linked_orderpositions.filter(secret="z3fsn8jyufm5kpk768q69gkbyr5f4h6w").exists() + + +@pytest.mark.django_db +def test_exchange_reuse_exists_append(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_APPEND_OR_NEW + item.save() + with scopes_disabled(): + rm = ReusableMedium.objects.create( + type="nfc_uid", + identifier="12345678", + organizer=organizer, + ) + rm.linked_orderpositions.add(order.positions.last()) + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "12345678", + }) + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + rm.refresh_from_db() + with scopes_disabled(): + assert rm.linked_orderpositions.count() == 2 + assert rm.linked_orderpositions.filter(secret="z3fsn8jyufm5kpk768q69gkbyr5f4h6w").exists() + + +@pytest.mark.django_db +def test_exchange_reuse_expired(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_REUSE + item.save() + with scopes_disabled(): + rm = ReusableMedium.objects.create( + type="nfc_uid", + identifier="12345678", + organizer=organizer, + expires=now() - datetime.timedelta(hours=2), + ) + rm.linked_orderpositions.add(order.positions.last()) + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "12345678", + }) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'medium_invalid' + + +@pytest.mark.django_db +def test_exchange_reuse_not_exists(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_REUSE + item.save() + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "12345678", + }) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'medium_invalid' + + +@pytest.mark.django_db +def test_exchange_new_exists(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_NEW + item.save() + with scopes_disabled(): + rm = ReusableMedium.objects.create( + type="nfc_uid", + identifier="12345678", + organizer=organizer, + ) + rm.linked_orderpositions.add(order.positions.last()) + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "12345678", + "exchange_link_action": "append", + }) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'medium_exists' + + +@pytest.mark.django_db +def test_exchange_new_not_exists(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_NEW + item.save() + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "12345678", + "exchange_link_action": "replace", + }) + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + with scopes_disabled(): + rm = ReusableMedium.objects.get( + type="nfc_uid", + identifier="12345678", + organizer=organizer, + ) + assert rm.linked_orderpositions.get().secret == "z3fsn8jyufm5kpk768q69gkbyr5f4h6w" + + +@pytest.mark.django_db +def test_exchange_required(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_NEW + item.save() + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + }) + assert resp.status_code == 400 + assert resp.data['status'] == 'exchange' + assert resp.data['media_policy'] == 'new' + assert resp.data['media_type'] == 'nfc_uid' + + with scopes_disabled(): + rm = ReusableMedium.objects.create( + type="nfc_uid", + identifier="12345678", + organizer=organizer, + ) + rm.linked_orderpositions.add(order.positions.first()) + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + }) + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + # Force works + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "force": True, + }) + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + + +@pytest.mark.django_db +def test_exchanged_original_barcode_ok(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_NEW + item.save() + + with scopes_disabled(): + rm = ReusableMedium.objects.create( + type="nfc_uid", + identifier="12345678", + organizer=organizer, + ) + rm.linked_orderpositions.add(order.positions.first()) + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + }) + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + + +@pytest.mark.django_db +def test_exchanged_original_barcode_not_ok(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + organizer.settings.reusable_media_usage_enforced = True + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_NEW + item.save() + + with scopes_disabled(): + rm = ReusableMedium.objects.create( + type="nfc_uid", + identifier="12345678", + organizer=organizer, + ) + rm.linked_orderpositions.add(order.positions.first()) + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + }) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'already_exchanged' + # Force works + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "force": True, + }) + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + + +@pytest.mark.django_db +def test_exchanged_scan_medium_ok(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + organizer.settings.reusable_media_usage_enforced = True + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_NEW + item.save() + + with scopes_disabled(): + rm = ReusableMedium.objects.create( + type="nfc_uid", + identifier="12345678", + organizer=organizer, + ) + rm.linked_orderpositions.add(order.positions.first()) + resp = _redeem(token_client, organizer, clist, "12345678", { + "source_type": "nfc_uid", + }) + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + + +@pytest.mark.django_db +def test_exchanged_double_exchange(token_client, organizer, clist, event, order, item): + organizer.settings.reusable_media_type_nfc_uid = True + organizer.settings.reusable_media_usage_enforced = False + item.media_type = "nfc_uid" + item.media_policy = Item.MEDIA_POLICY_NEW + item.save() + + with scopes_disabled(): + rm = ReusableMedium.objects.create( + type="nfc_uid", + identifier="12345678", + organizer=organizer, + ) + rm.linked_orderpositions.add(order.positions.first()) + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "87654321", + "exchange_link_action": "replace", + }) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'already_exchanged' + + +@pytest.mark.django_db +@pytest.mark.parametrize( + "media_policy,media_type", + [ + (Item.MEDIA_POLICY_NEW, "nfc_mf0aes"), + (Item.MEDIA_POLICY_REUSE_OR_NEW, "nfc_mf0aes"), + (Item.MEDIA_POLICY_APPEND_OR_NEW, "nfc_mf0aes"), + (Item.MEDIA_POLICY_NEW, "barcode"), + (Item.MEDIA_POLICY_REUSE_OR_NEW, "barcode"), + (Item.MEDIA_POLICY_APPEND_OR_NEW, "barcode"), + ] +) +def test_exchange_unsupported_media_type_for_new(token_client, organizer, clist, event, order, item, media_policy, media_type): + organizer.settings.set(f'reusable_media_type_{media_type}', True) + # Shouldn't be configurable, but test that the logic is solid anyway + item.media_type = media_type + item.media_policy = media_policy + item.save() + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": media_type, + "exchange_medium_identifier": "12345678", + }) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'medium_invalid' + + +@pytest.mark.django_db +@pytest.mark.parametrize( + "media_policy", + [ + Item.MEDIA_POLICY_NEW, + Item.MEDIA_POLICY_REUSE_OR_NEW, + Item.MEDIA_POLICY_APPEND_OR_NEW, + ] +) +def test_exchange_rejected_media_identifier(token_client, organizer, clist, event, order, item, media_policy): + organizer.settings.reusable_media_type_nfc_uid = True + item.media_type = "nfc_uid" + item.media_policy = media_policy + item.save() + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "08RANDOM", + }) + assert resp.status_code == 400 + assert resp.data['status'] == 'error' + assert resp.data['reason'] == 'medium_invalid' + + +@pytest.mark.django_db +@pytest.mark.parametrize( + "media_policy", + [ + Item.MEDIA_POLICY_NEW, + Item.MEDIA_POLICY_REUSE_OR_NEW, + Item.MEDIA_POLICY_APPEND_OR_NEW, + ] +) +def test_exchange_create_gift_card(token_client, organizer, clist, event, order, item, media_policy): + organizer.settings.reusable_media_type_nfc_uid = True + organizer.settings.reusable_media_type_nfc_uid_autocreate_giftcard = True + organizer.settings.reusable_media_type_nfc_uid_autocreate_giftcard_currency = "EUR" + item.media_type = "nfc_uid" + item.media_policy = media_policy + item.save() + resp = _redeem(token_client, organizer, clist, "z3fsn8jyufm5kpk768q69gkbyr5f4h6w", { + "source_type": "barcode", + "exchange_medium_type": "nfc_uid", + "exchange_medium_identifier": "0412345", + }) + assert resp.status_code == 201 + with scopes_disabled(): + rm = ReusableMedium.objects.get(identifier="0412345") + assert rm.linked_giftcard.currency == "EUR" diff --git a/src/tests/api/test_order_create.py b/src/tests/api/test_order_create.py index 686405c5d..e055231b1 100644 --- a/src/tests/api/test_order_create.py +++ b/src/tests/api/test_order_create.py @@ -3141,24 +3141,13 @@ def test_order_create_use_medium(token_client, organizer, event, item, quota, qu @pytest.mark.django_db def test_order_create_add_to_medium(token_client, organizer, event, item, quota, question, medium): item.media_type = medium.type - item.media_policy = Item.MEDIA_POLICY_REUSE_OR_NEW + item.media_policy = Item.MEDIA_POLICY_APPEND_OR_NEW item.save() res = copy.deepcopy(ORDER_CREATE_PAYLOAD) res['positions'][0]['item'] = item.pk res['positions'][0]['use_reusable_medium'] = medium.pk - res['positions'][0]['add_to_reusable_medium'] = medium.pk res['positions'][0]['answers'][0]['question'] = question.pk - # do not use use_reusable_medium and add_to_reusable_medium - resp = token_client.post( - '/api/v1/organizers/{}/events/{}/orders/?pdf_data=true'.format( - organizer.slug, event.slug - ), format='json', data=res - ) - assert resp.status_code == 400 - - del res['positions'][0]['use_reusable_medium'] - resp = token_client.post( '/api/v1/organizers/{}/events/{}/orders/?pdf_data=true'.format( organizer.slug, event.slug @@ -3179,8 +3168,9 @@ def test_order_create_add_to_medium(token_client, organizer, event, item, quota, medium.refresh_from_db() assert medium.linked_orderpositions.count() == 2 + item.media_policy = Item.MEDIA_POLICY_REUSE_OR_NEW + item.save() res['positions'][0]['use_reusable_medium'] = medium.pk - del res['positions'][0]['add_to_reusable_medium'] resp = token_client.post( '/api/v1/organizers/{}/events/{}/orders/?pdf_data=true'.format( organizer.slug, event.slug diff --git a/src/tests/base/test_checkin.py b/src/tests/base/test_checkin.py index 04f51d4a6..2fb7559b0 100644 --- a/src/tests/base/test_checkin.py +++ b/src/tests/base/test_checkin.py @@ -1186,7 +1186,7 @@ def test_rules_reasoning_prefer_number_over_date(event, position, clist): @pytest.mark.django_db(transaction=True) def test_position_queries(django_assert_max_num_queries, position, clist): - with django_assert_max_num_queries(13) as captured: + with django_assert_max_num_queries(12) as captured: perform_checkin(position, clist, {}) if 'sqlite' not in settings.DATABASES['default']['ENGINE']: assert any('FOR UPDATE' in s['sql'] for s in captured) diff --git a/src/tests/base/test_orders.py b/src/tests/base/test_orders.py index 8f39fc08e..821a4fc5f 100644 --- a/src/tests/base/test_orders.py +++ b/src/tests/base/test_orders.py @@ -4123,8 +4123,8 @@ def test_giftcard_multiple(event): for p in order.payments.all(): p.payment_provider.execute_payment(None, p) - assert order.payments.get(info__icontains=gc1.pk).amount == Decimal('12.00') - assert order.payments.get(info__icontains=gc2.pk).amount == Decimal('11.00') + assert order.payments.get(amount=Decimal("12.00")).info_data["gift_card"] == gc1.pk + assert order.payments.get(amount=Decimal("11.00")).info_data["gift_card"] == gc2.pk gc1 = GiftCard.objects.get(pk=gc1.pk) assert gc1.value == 0 gc2 = GiftCard.objects.get(pk=gc2.pk) -- 2.52.0 From 63ebe16fd39a350c971de99a49a1f8456064a89d Mon Sep 17 00:00:00 2001 From: luelista Date: Thu, 11 Jun 2026 16:25:38 +0200 Subject: [PATCH 26/96] Fix count in order bulk delete success message (#6270) --- src/pretix/control/views/orders.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index eed4443c7..1ac565b87 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -396,6 +396,7 @@ class OrderDeleteBulkActionView(BaseOrderBulkActionView): def execute_single(self, instance, form: forms.Form): instance.gracefully_delete(user=self.request.user) + return True class OrderList(OrderSearchMixin, EventPermissionRequiredMixin, PaginationMixin, ListView): -- 2.52.0 From 8e63fafc62bc6ec78e1a34fd6a3950cd281df111 Mon Sep 17 00:00:00 2001 From: pajowu Date: Thu, 11 Jun 2026 16:25:48 +0200 Subject: [PATCH 27/96] Devex: Fix vite devserver capturing stdin (#6267) Pass DEVNULL as stdin to vite, otherwise the vite devserver captures parts of stdin, making things like pasting during debugging impossible --- src/pretix/base/management/commands/runserver.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pretix/base/management/commands/runserver.py b/src/pretix/base/management/commands/runserver.py index b29f24fa1..09e8442f7 100644 --- a/src/pretix/base/management/commands/runserver.py +++ b/src/pretix/base/management/commands/runserver.py @@ -44,7 +44,8 @@ class Command(Parent): # Start the vite server in the background vite_server = subprocess.Popen( ["npm", "run", "dev:control"], - cwd=Path(__file__).parent.parent.parent.parent.parent + cwd=Path(__file__).parent.parent.parent.parent.parent, + stdin=subprocess.DEVNULL ) def cleanup(): -- 2.52.0 From 8c132d834245a740707389fbc2a0ed09033d01a8 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 11 Jun 2026 16:25:58 +0200 Subject: [PATCH 28/96] Teams: Add a note to the degree of isolation between permissions (#6258) * Teams: Add a note to the degree of isolation between permissions * Update src/pretix/control/templates/pretixcontrol/organizers/team_edit.html Co-authored-by: pajowu --------- Co-authored-by: pajowu --- .../pretixcontrol/organizers/team_edit.html | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/pretix/control/templates/pretixcontrol/organizers/team_edit.html b/src/pretix/control/templates/pretixcontrol/organizers/team_edit.html index 40693af31..f855d5b89 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/team_edit.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/team_edit.html @@ -2,6 +2,7 @@ {% load i18n %} {% load bootstrap3 %} {% load getitem %} +{% load icon %} {% block inner %} {% if team %}

{% trans "Team:" %} {{ team.name }}

@@ -25,6 +26,18 @@ {% trans "Organizer permissions" %} {% bootstrap_field form.all_organizer_permissions layout="control" %}
+

+ {% icon "info-circle" %} + {% blocktrans trimmed %} + Even if a team has no access to a certain category of data, they might still be able to see + parts of this data when it is linked to data they can see. + {% endblocktrans %} + {% blocktrans trimmed %} + For example, someone with access to customer accounts will be able to see some information + about gift cards linked to a customer account, even if they generally can't see gift cards + directly. + {% endblocktrans %} +

{% for f in form.organizer_field_names %} {% bootstrap_field form|getitem:f layout="control" %} {% endfor %} @@ -37,6 +50,17 @@ {% bootstrap_field form.limit_events layout="control" %} {% bootstrap_field form.all_event_permissions layout="control" %}
+

+ {% icon "info-circle" %} + {% blocktrans trimmed %} + Even if a team has no access to a certain category of data, they might still be able to see + parts of this data when it is linked to data they can see. + {% endblocktrans %} + {% blocktrans trimmed %} + For example, someone with access to orders will be able to see some information about + vouchers used to create an order, even if they generally can't see vouchers directly. + {% endblocktrans %} +

{% for f in form.event_field_names %} {% bootstrap_field form|getitem:f layout="control" %} {% endfor %} -- 2.52.0 From c4b9cc4143e9e1e940e5556c0b0c8bb2f4b28989 Mon Sep 17 00:00:00 2001 From: luelista Date: Thu, 11 Jun 2026 16:26:05 +0200 Subject: [PATCH 29/96] Allow search by partial giftcard secret with organizer.giftcards:read (#6263) --- src/pretix/control/views/typeahead.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pretix/control/views/typeahead.py b/src/pretix/control/views/typeahead.py index e15c74379..51c77de48 100644 --- a/src/pretix/control/views/typeahead.py +++ b/src/pretix/control/views/typeahead.py @@ -200,7 +200,7 @@ def giftcard_select2(request, **kwargs): except ValueError: page = 1 - if request.user.has_organizer_permission(request.organizer, 'organizer.giftcards:write', request): + if request.user.has_organizer_permission(request.organizer, 'organizer.giftcards:read', request): qs = request.organizer.issued_gift_cards.filter( Q(secret__icontains=query) ).order_by('secret') -- 2.52.0 From 8af2714a0465ebb6254e17fef37668fcb1c8b6a7 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Thu, 11 Jun 2026 16:29:32 +0200 Subject: [PATCH 30/96] Prune wheel and setuptools-rust from build-system (#6268) For wheel the setuptools documentation notes: > Historically this documentation has unnecessarily listed wheel in > the requires list, and many projects still do that. This is not > recommended, as the backend no longer requires the wheel package, > and listing it explicitly causes it to be unnecessarily required for > source distribution builds. https://setuptools.pypa.io/en/latest/userguide/quickstart.html#basic-use For setuptools-rust I could not find any Rust extension that need to be built. The introduction goes back to c132ccd14, where css-inline, a rust component, was added as a dependency. --- Dockerfile | 3 +-- pyproject.toml | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index a59e0bdf7..871d04d9b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -57,8 +57,7 @@ COPY vite.config.ts /pretix/vite.config.ts RUN pip3 install -U \ pip \ - setuptools \ - wheel && \ + setuptools && \ cd /pretix && \ PRETIX_DOCKER_BUILD=TRUE pip3 install \ -e ".[memcached]" \ diff --git a/pyproject.toml b/pyproject.toml index 7a0a318b4..e620c588f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -139,8 +139,6 @@ build-backend = "backend" backend-path = ["_build"] requires = [ "setuptools", - "setuptools-rust", - "wheel", "importlib_metadata", "tomli", ] -- 2.52.0 From 04032078c121433673fd273ee578419f271798ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jun 2026 16:29:40 +0200 Subject: [PATCH 31/96] Update sentry-sdk requirement from ==2.61.* to ==2.62.* (#6256) Updates the requirements on [sentry-sdk](https://github.com/getsentry/sentry-python) to permit the latest version. - [Release notes](https://github.com/getsentry/sentry-python/releases) - [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-python/compare/2.61.0...2.62.0) --- updated-dependencies: - dependency-name: sentry-sdk dependency-version: 2.62.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e620c588f..572dfa5ea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -93,7 +93,7 @@ dependencies = [ "redis==7.4.*", "reportlab==4.5.*", "requests==2.32.*", - "sentry-sdk==2.61.*", + "sentry-sdk==2.62.*", "sepaxml==2.7.*", "stripe==7.9.*", "text-unidecode==1.*", -- 2.52.0 From f868507670642dd4da5701f8ac447b8a3d2fb7fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jun 2026 16:29:49 +0200 Subject: [PATCH 32/96] Update beautifulsoup4 requirement from ==4.14.* to ==4.15.* (#6257) Updates the requirements on [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) to permit the latest version. --- updated-dependencies: - dependency-name: beautifulsoup4 dependency-version: 4.15.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 572dfa5ea..9ad1007f1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,7 @@ classifiers = [ dependencies = [ "arabic-reshaper==3.0.1", # Support for Arabic in reportlab "babel", - "BeautifulSoup4==4.14.*", + "BeautifulSoup4==4.15.*", "bleach==6.4.*", "celery==5.6.*", "chardet==5.2.*", -- 2.52.0 From 0630e05d5046a2784589a9b196f625bf34e87161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BRUNEAU?= Date: Mon, 8 Jun 2026 10:06:34 +0200 Subject: [PATCH 33/96] Translations: Update French Currently translated at 100.0% (6302 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/fr/ powered by weblate --- src/pretix/locale/fr/LC_MESSAGES/django.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pretix/locale/fr/LC_MESSAGES/django.po b/src/pretix/locale/fr/LC_MESSAGES/django.po index 9163e25c4..f842f2809 100644 --- a/src/pretix/locale/fr/LC_MESSAGES/django.po +++ b/src/pretix/locale/fr/LC_MESSAGES/django.po @@ -4,8 +4,8 @@ msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2026-05-29 17:00+0000\n" -"Last-Translator: CVZ-es \n" +"PO-Revision-Date: 2026-06-08 17:00+0000\n" +"Last-Translator: Sébastien BRUNEAU \n" "Language-Team: French \n" "Language: fr\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 2026.5\n" +"X-Generator: Weblate 2026.6.1\n" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670 #: pretix/control/templates/pretixcontrol/events/index.html:166 @@ -35123,7 +35123,7 @@ msgstr "Vous devez cocher toutes les cases en bas de la page." #: pretix/presale/forms/checkout.py:67 msgid "Email address (repeated)" -msgstr "Adresse de courriel (répété)" +msgstr "Adresse de courriel (répétée)" #: pretix/presale/forms/checkout.py:68 msgid "" -- 2.52.0 From f3eb0d2dbac5c0fa25e4773e37841a044161ad1b Mon Sep 17 00:00:00 2001 From: Mira Date: Tue, 9 Jun 2026 13:39:33 +0200 Subject: [PATCH 34/96] Translations: Update German Currently translated at 100.0% (6302 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/ powered by weblate --- src/pretix/locale/de/LC_MESSAGES/django.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pretix/locale/de/LC_MESSAGES/django.po b/src/pretix/locale/de/LC_MESSAGES/django.po index bd830a6f9..491651281 100644 --- a/src/pretix/locale/de/LC_MESSAGES/django.po +++ b/src/pretix/locale/de/LC_MESSAGES/django.po @@ -5,16 +5,16 @@ msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2026-05-27 15:20+0000\n" -"Last-Translator: Raphael Michel \n" -"Language-Team: German \n" +"PO-Revision-Date: 2026-06-09 20:00+0000\n" +"Last-Translator: Mira \n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2026.5\n" +"X-Generator: Weblate 2026.6.1\n" "X-Poedit-Bookmarks: -1,-1,904,-1,-1,-1,-1,-1,-1,-1\n" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670 @@ -11353,7 +11353,7 @@ msgid "" msgstr "" "Wenn diese Option deaktiviert ist, werden Tickets nur für Produkte " "aktiviert, bei denen die Option \"Berechtigt zum Eintritt\" gesetzt ist. Sie " -"können die Ticketgenerierung auch in den Einstellungen von jedes Produktes " +"können die Ticketgenerierung auch in den Einstellungen jedes Produktes " "einzeln abschalten." #: pretix/base/settings.py:1813 -- 2.52.0 From de284259939f5bc92ec44a825b26d14ea2a03a85 Mon Sep 17 00:00:00 2001 From: Mira Date: Tue, 9 Jun 2026 13:40:09 +0200 Subject: [PATCH 35/96] Translations: Update German (informal) (de_Informal) Currently translated at 100.0% (6302 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de_Informal/ powered by weblate --- src/pretix/locale/de_Informal/LC_MESSAGES/django.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pretix/locale/de_Informal/LC_MESSAGES/django.po b/src/pretix/locale/de_Informal/LC_MESSAGES/django.po index ef55d7521..4ecaa9e7b 100644 --- a/src/pretix/locale/de_Informal/LC_MESSAGES/django.po +++ b/src/pretix/locale/de_Informal/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2026-05-27 15:20+0000\n" -"Last-Translator: Raphael Michel \n" +"PO-Revision-Date: 2026-06-09 20:00+0000\n" +"Last-Translator: Mira \n" "Language-Team: German (informal) \n" "Language: de_Informal\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2026.5\n" +"X-Generator: Weblate 2026.6.1\n" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670 #: pretix/control/templates/pretixcontrol/events/index.html:166 @@ -11339,8 +11339,8 @@ msgid "" "issuing in every product separately." msgstr "" "Wenn diese Option deaktiviert ist, werden Tickets nur für Produkte " -"aktiviert, bei denen die Option \"Berechtigt zum Eintritt\" gesetzt ist. Sie " -"können die Ticketgenerierung auch in den Einstellungen von jedes Produktes " +"aktiviert, bei denen die Option \"Berechtigt zum Eintritt\" gesetzt ist. Du " +"kannst die Ticketgenerierung auch in den Einstellungen jedes Produktes " "einzeln abschalten." #: pretix/base/settings.py:1813 -- 2.52.0 From 5a6870fce112f369d5983dc01c28e67e558d85e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jun 2026 18:13:23 +0000 Subject: [PATCH 36/96] Update cryptography requirement from >=48.0.0 to >=48.0.1 Updates the requirements on [cryptography](https://github.com/pyca/cryptography) to permit the latest version. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/48.0.0...48.0.1) --- updated-dependencies: - dependency-name: cryptography dependency-version: 48.0.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9ad1007f1..716fd5802 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ dependencies = [ "bleach==6.4.*", "celery==5.6.*", "chardet==5.2.*", - "cryptography>=48.0.0", + "cryptography>=48.0.1", "css-inline==0.20.*", "defusedcsv>=3.0.0", "dnspython==2.*", -- 2.52.0 From 034722fa395f74772623de09560f0232838adef7 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 12 Jun 2026 14:07:29 +0200 Subject: [PATCH 37/96] Skip e2e tests on gitlab for now --- .gitlab-ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c0e889d48..377bbfe97 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -10,8 +10,7 @@ tests: - cd src - python manage.py check - make all compress - - playwright install - - PRETIX_CONFIG_FILE=tests/ci_sqlite.cfg py.test -n 3 tests --maxfail=100 + - PRETIX_CONFIG_FILE=tests/ci_sqlite.cfg py.test -n 3 tests --ignore=tests/e2e --maxfail=100 except: - '/^v.*$/' pypi: -- 2.52.0 From 2c7fcd0599a63c48f5b3ef34b9a87291f590c2e3 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 12 Jun 2026 14:36:10 +0200 Subject: [PATCH 38/96] Accounting report: Correctly split subevents with same label (Z#23237301) (#6275) * Accounting report: Correctly split subevents with same label (Z#23237301) * Accountingreport: Fix crash for single events --------- Co-authored-by: Kara Engelhardt --- src/pretix/plugins/reports/accountingreport.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/pretix/plugins/reports/accountingreport.py b/src/pretix/plugins/reports/accountingreport.py index 17315eb02..a3f377b52 100644 --- a/src/pretix/plugins/reports/accountingreport.py +++ b/src/pretix/plugins/reports/accountingreport.py @@ -270,18 +270,18 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): def _transaction_group_header_label(self): return _("Event") + " / " + _("Product") - def _transaction_group_label(self, form_data, r): + def _transaction_group(self, form_data, r): if not self.is_multievent and not form_data.get("split_subevents"): - return None + return None, None if r.get("subevent_id"): return "{} - {} ({}) [{}]".format( r["order__event__name"], r["subevent__name"], date_format(r["subevent__date_from"]), r["order__event__slug"] - ) + ), f"subevent-{r['subevent_id']}" else: - return "{} [{}]".format(r["order__event__name"], r["order__event__slug"]) + return "{} [{}]".format(r["order__event__name"], r["order__event__slug"]), f"event-{r['order__event__slug']}" def _transaction_row_label(self, r): if r["item_id"]: @@ -343,17 +343,17 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): last_group = None last_group_head_idx = 0 for r in qs: - e = self._transaction_group_label(form_data, r) + group_label, group_id = self._transaction_group(form_data, r) - if e != last_group: - if last_group_head_idx > 0 and e is not None: + if group_id != last_group: + if last_group_head_idx > 0 and group_id is not None: tdata[last_group_head_idx][4] = Paragraph(money_filter(sum_price_by_group - sum_tax_by_group, currency), tstyle_bold_right), tdata[last_group_head_idx][5] = Paragraph(money_filter(sum_tax_by_group, currency), tstyle_bold_right), tdata[last_group_head_idx][6] = Paragraph(money_filter(sum_price_by_group, currency), tstyle_bold_right), tdata.append( [ FontFallbackParagraph( - e, + group_label, tstyle_bold, ), "", @@ -367,7 +367,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): tstyledata.append( ("SPAN", (0, len(tdata) - 1), (3, len(tdata) - 1)), ) - last_group = e + last_group = group_id last_group_head_idx = len(tdata) - 1 sum_price_by_group = Decimal("0.00") sum_tax_by_group = Decimal("0.00") -- 2.52.0 From f0cb451c34c83f86959ef92fe7b8fe2d98914f40 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 12 Jun 2026 10:54:39 +0200 Subject: [PATCH 39/96] LocaleMiddleware: Correctly reset region for backend views --- src/pretix/base/middleware.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pretix/base/middleware.py b/src/pretix/base/middleware.py index 784273da8..293b9762e 100644 --- a/src/pretix/base/middleware.py +++ b/src/pretix/base/middleware.py @@ -74,6 +74,7 @@ class LocaleMiddleware(MiddlewareMixin): def process_request(self, request: HttpRequest): language = get_language_from_request(request) + region = None # Normally, this middleware runs *before* the event is set. However, on event frontend pages it # might be run a second time by pretix.presale.EventMiddleware and in this case the event is already # set and can be taken into account for the decision. @@ -94,15 +95,16 @@ class LocaleMiddleware(MiddlewareMixin): if '-' not in language and settings_holder.settings.region: language += '-' + settings_holder.settings.region if settings_holder.settings.region: - set_region(settings_holder.settings.region) + region = settings_holder.settings.region else: gs = global_settings_object(request) if '-' not in language and gs.settings.region: language += '-' + gs.settings.region if gs.settings.region: - set_region(gs.settings.region) + region = gs.settings.region translation.activate(language) + set_region(region) request.LANGUAGE_CODE = get_language_without_region() tzname = None -- 2.52.0 From 36d49fbd7783edad1bd5885a20e1956790ed9e78 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Mon, 15 Jun 2026 08:00:55 +0200 Subject: [PATCH 40/96] Question detail: Fix crash in filter --- src/pretix/control/forms/filter.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index b4ce01649..c2f052394 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -1342,7 +1342,13 @@ class QuestionAnswerFilterForm(forms.Form): opqs = opqs.filter(canceled=False) if fdata.get("item", "") != "": i = fdata.get("item", "") - opqs = opqs.filter(item_id__in=(i,)) + if '-' in i: + opqs = opqs.filter( + item_id=i.split('-')[0], + variation_id=i.split('-')[1], + ) + else: + opqs = opqs.filter(item_id=i) return opqs -- 2.52.0 From ea928ea7d4e3cad3d0c1e4167a96d725788e3178 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 16 Jun 2026 09:11:33 +0200 Subject: [PATCH 41/96] Widget: Fix handling of HTTP-429 errors --- .../static/pretixpresale/js/widget/widget.js | 18 +++++++++++++-- .../pretixpresale/widget/src/sharedStore.ts | 22 ++++++++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/pretix/static/pretixpresale/js/widget/widget.js b/src/pretix/static/pretixpresale/js/widget/widget.js index 34179e877..3529acdd8 100644 --- a/src/pretix/static/pretixpresale/js/widget/widget.js +++ b/src/pretix/static/pretixpresale/js/widget/widget.js @@ -2051,9 +2051,16 @@ var shared_root_methods = { this.$root.set_cart_id(data.cart_id); this.$root.overlay.frame_loading = false; callback() - }, () => { + }, (xhr, data) => { + if (xhr.status === 429 && typeof xhr.responseURL !== "undefined") { + this.$root.overlay.error_message = strings['cart_error_429']; + this.$root.overlay.frame_loading = false; + this.$root.overlay.error_url_after = this.$root.newTabTarget; + this.$root.overlay.error_url_after_new_tab = true; + } else { this.$root.overlay.error_message = strings['cart_error']; this.$root.overlay.frame_loading = false; + } }) }, get_cart_id: function() { @@ -2142,7 +2149,14 @@ var shared_root_computed = { if (this.subevent) { target = this.target_url + this.subevent + '/'; } - return target; + var parameters = this.$root.consent_parameter + if (this.$root.additionalURLParams) { + parameters += `&${this.$root.additionalURLParams}` + } + if (parameters) { + target += '?' + parameters.replace(/^&/, '') + } + return target }, useIframe: function () { if (window.crossOriginIsolated === true) { diff --git a/src/pretix/static/pretixpresale/widget/src/sharedStore.ts b/src/pretix/static/pretixpresale/widget/src/sharedStore.ts index 1c44a9eb4..f43398316 100644 --- a/src/pretix/static/pretixpresale/widget/src/sharedStore.ts +++ b/src/pretix/static/pretixpresale/widget/src/sharedStore.ts @@ -162,7 +162,15 @@ export function createWidgetStore (config: { return params.toString() }, newTabTarget (): string { - return this.subevent ? `${this.targetUrl}${this.subevent}/` : this.targetUrl + let url = this.subevent ? `${this.targetUrl}${this.subevent}/` : this.targetUrl + let parameters = this.consentParameter + if (this.additionalURLParams) { + parameters += `&${this.additionalURLParams}` + } + if (parameters) { + url += '?' + parameters.replace(/^&/, '') + } + return url }, formTarget (): string { const isFirefox = navigator.userAgent.toLowerCase().includes('firefox') @@ -441,6 +449,7 @@ export function createWidgetStore (config: { this.overlay.frameLoading = false this.overlay.errorUrlAfter = this.newTabTarget this.overlay.errorUrlAfterNewTab = true + return } else if (e.status === 405) { // Likely a redirect! this.targetUrl = e.responseUrl.substring(0, e.responseUrl.indexOf('/cart/add') - 18) @@ -460,11 +469,18 @@ export function createWidgetStore (config: { this.overlay.frameLoading = true const data = await createCart(url) this.setCartId(data.cart_id) + return true } catch (e) { - if (e instanceof ApiError && (e.status === 200 || (e.status >= 400 && e.status < 500))) { + if (e instanceof ApiError && e.status === 429) { + this.overlay.errorMessage = STRINGS.cart_error_429 + this.overlay.frameLoading = false + this.overlay.errorUrlAfter = this.newTabTarget + this.overlay.errorUrlAfterNewTab = true + } else if (e instanceof ApiError && (e.status === 200 || (e.status >= 400 && e.status < 500))) { this.overlay.errorMessage = STRINGS.cart_error this.overlay.frameLoading = false } + return false } }, redeem (voucherCode: string, event?: Event) { @@ -484,7 +500,7 @@ export function createWidgetStore (config: { async resume () { if (!this.cartId && this.keepCart) { // create an empty cart whose id we can persist - await this.createCart() + if (!await this.createCart()) return } let redirectUrl = `${this.targetUrl}w/${globalWidgetId}/` if (this.subevent && this.isButton && this.items.length === 0) { -- 2.52.0 From 694b915d89da78dfab850e90c6122c0bcb8f7583 Mon Sep 17 00:00:00 2001 From: Lukas Bockstaller Date: Tue, 16 Jun 2026 15:18:19 +0200 Subject: [PATCH 42/96] include errors.js by default and make it coop with async_task_replace_page (Z#23236752) (#6284) * load errors.js as standard and make it coop with async_task_replace_page * scope down event * Update src/pretix/static/pretixbase/js/asynctask.js Co-authored-by: pajowu * drop the jquery dependency for error.js Co-authored-by: pajowu * include errors.js in error.html * include errors.js in control base.html * Update src/pretix/static/pretixbase/js/asynctask.js Co-authored-by: Richard Schreiber * put errors.js in an IIFE call --------- Co-authored-by: pajowu Co-authored-by: pajowu Co-authored-by: Richard Schreiber --- src/pretix/base/templates/error.html | 2 +- .../control/templates/pretixcontrol/base.html | 1 + .../templates/pretixpresale/fragment_js.html | 1 + src/pretix/static/pretixbase/js/asynctask.js | 5 +++-- src/pretix/static/pretixbase/js/errors.js | 16 +++++++++++----- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/pretix/base/templates/error.html b/src/pretix/base/templates/error.html index 2589dda65..333c8267b 100644 --- a/src/pretix/base/templates/error.html +++ b/src/pretix/base/templates/error.html @@ -11,6 +11,7 @@ + {% block custom_header %}{% endblock %} {% if css_theme %} @@ -20,6 +21,5 @@
{% block content %}{% endblock %}
- diff --git a/src/pretix/control/templates/pretixcontrol/base.html b/src/pretix/control/templates/pretixcontrol/base.html index 47ff1d45b..bf9181d22 100644 --- a/src/pretix/control/templates/pretixcontrol/base.html +++ b/src/pretix/control/templates/pretixcontrol/base.html @@ -66,6 +66,7 @@ + {% endcompress %} {{ html_head|safe }} diff --git a/src/pretix/presale/templates/pretixpresale/fragment_js.html b/src/pretix/presale/templates/pretixpresale/fragment_js.html index 37ca39ed1..cde66ed80 100644 --- a/src/pretix/presale/templates/pretixpresale/fragment_js.html +++ b/src/pretix/presale/templates/pretixpresale/fragment_js.html @@ -22,4 +22,5 @@ + {% endcompress %} diff --git a/src/pretix/static/pretixbase/js/asynctask.js b/src/pretix/static/pretixbase/js/asynctask.js index a2833c994..017ae706a 100644 --- a/src/pretix/static/pretixbase/js/asynctask.js +++ b/src/pretix/static/pretixbase/js/asynctask.js @@ -174,15 +174,16 @@ function async_task_error(jqXHR, textStatus, errorThrown) { var respdom = $(jqXHR.responseText); var c = respdom.filter('.container'); if (respdom.filter('form') && (respdom.filter('.has-error') || respdom.filter('.alert-danger'))) { - // This is a failed form validation, let's just use it - if (respdom.filter('#page-wrapper') && $('#page-wrapper').length) { + // This is a failed form validation, let's just use it async_task_replace_page("#page-wrapper", respdom.find("#page-wrapper").html()); } else { async_task_replace_page("body", jqXHR.responseText.substring( jqXHR.responseText.indexOf(" 0) { diff --git a/src/pretix/static/pretixbase/js/errors.js b/src/pretix/static/pretixbase/js/errors.js index 016d48798..ab95619cc 100644 --- a/src/pretix/static/pretixbase/js/errors.js +++ b/src/pretix/static/pretixbase/js/errors.js @@ -1,5 +1,11 @@ -document.getElementById('goback').onclick = - function() {window.history.back()}; - -document.getElementById('reload').onclick = - function() {window.location.reload(true)}; +['DOMContentLoaded', 'pretix:async-task-error'].forEach(function (ev) { + document.addEventListener(ev, function () { + document.querySelectorAll('#goback, #reload').forEach(function (element) { + const regularLoad = ev === 'DOMContentLoaded' && element.id === 'goback'; + element.addEventListener('click', regularLoad + ? () => window.history.back() + : () => window.location.reload() + ); + }); + }); +}); -- 2.52.0 From c083ce904ae95f7f82305888c9d5af0e9d194797 Mon Sep 17 00:00:00 2001 From: Martin Gross Date: Fri, 19 Jun 2026 12:41:32 +0200 Subject: [PATCH 43/96] Checkin API: Provide 'reason' for RequiredMediaExchangeError (PRETIXEU-DHW) --- src/pretix/api/views/checkin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pretix/api/views/checkin.py b/src/pretix/api/views/checkin.py index 5016d54f9..7bafddd3a 100644 --- a/src/pretix/api/views/checkin.py +++ b/src/pretix/api/views/checkin.py @@ -872,6 +872,7 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, 'media_policy': e.media_policy, 'media_type': e.media_type, 'list': MiniCheckinListSerializer(list_by_event[op.order.event_id]).data, + 'reason': e.code, 'reason_explanation': e.msg, }, status=400) except CheckInError as e: -- 2.52.0 From d0307b9936c6b9d43ffc2d8221d5841ea8312f43 Mon Sep 17 00:00:00 2001 From: luelista Date: Sun, 21 Jun 2026 12:46:07 +0200 Subject: [PATCH 44/96] Use OrderPosition.all instead of .objects in metrics (#6285) --- src/pretix/base/metrics.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pretix/base/metrics.py b/src/pretix/base/metrics.py index 8454098f8..ceecd894e 100755 --- a/src/pretix/base/metrics.py +++ b/src/pretix/base/metrics.py @@ -282,10 +282,12 @@ def metric_values(): # Throwaway metrics exact_tables = [ - Order, OrderPosition, Invoice, Event, Organizer + Order, Invoice, Event, Organizer ] for m in apps.get_models(): # Count all models - if any(issubclass(m, p) for p in exact_tables): + if issubclass(m, OrderPosition): + metrics['pretix_model_instances']['{model="%s"}' % m._meta] = m.all.count() + elif any(issubclass(m, p) for p in exact_tables): metrics['pretix_model_instances']['{model="%s"}' % m._meta] = m.objects.count() else: metrics['pretix_model_instances']['{model="%s"}' % m._meta] = estimate_count_fast(m) -- 2.52.0 From 1e301da26c94652dbf10159923d0d72a43e5066b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 08:56:41 +0200 Subject: [PATCH 45/96] Update django-countries requirement from ==8.2.* to ==9.0.* (#6269) Updates the requirements on [django-countries](https://github.com/SmileyChris/django-countries) to permit the latest version. - [Changelog](https://github.com/SmileyChris/django-countries/blob/main/CHANGES.md) - [Commits](https://github.com/SmileyChris/django-countries/compare/v8.2.0...v9.0.0) --- updated-dependencies: - dependency-name: django-countries dependency-version: 9.0.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 716fd5802..57f86342f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ dependencies = [ "Django[argon2]==5.2.*", "django-bootstrap3==26.1", "django-compressor==4.6.0", - "django-countries==8.2.*", + "django-countries==9.0.*", "django-filter==25.1", "django-formset-js-improved==0.5.0.5", "django-formtools==2.6.1", -- 2.52.0 From ba36f6d2ce8b2030dad2c3f94c87707fc805dfbd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 08:56:57 +0200 Subject: [PATCH 46/96] Update webauthn requirement from ==2.7.* to ==2.8.* (#6293) Updates the requirements on [webauthn](https://github.com/duo-labs/py_webauthn) to permit the latest version. - [Release notes](https://github.com/duo-labs/py_webauthn/releases) - [Changelog](https://github.com/duo-labs/py_webauthn/blob/master/CHANGELOG.md) - [Commits](https://github.com/duo-labs/py_webauthn/compare/v2.7.0...v2.8.0) --- updated-dependencies: - dependency-name: webauthn dependency-version: 2.8.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 57f86342f..9c43d6fbc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -101,7 +101,7 @@ dependencies = [ "tqdm==4.*", "ua-parser==1.0.*", "vobject==0.9.*", - "webauthn==2.7.*", + "webauthn==2.8.*", "zeep==4.3.*" ] -- 2.52.0 From 10a5d4ac68c23e1fb42cbc6791ee6c192655d183 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 08:57:10 +0200 Subject: [PATCH 47/96] Update pytest requirement from ==9.0.* to ==9.1.* (#6290) Updates the requirements on [pytest](https://github.com/pytest-dev/pytest) to permit the latest version. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/9.0.0...9.1.0) --- updated-dependencies: - dependency-name: pytest dependency-version: 9.1.0 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9c43d6fbc..25e6d31b1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -125,7 +125,7 @@ dev = [ "pytest-sugar", "pytest-xdist==3.8.*", "pytest-playwright", - "pytest==9.0.*", + "pytest==9.1.*", "playwright", "responses", ] -- 2.52.0 From 28722fecbd7b6eaf1422062e12e58a8c377effde Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 08:57:33 +0200 Subject: [PATCH 48/96] Update cryptography requirement from >=48.0.1 to >=49.0.0 (#6289) Updates the requirements on [cryptography](https://github.com/pyca/cryptography) to permit the latest version. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/48.0.1...49.0.0) --- updated-dependencies: - dependency-name: cryptography dependency-version: 49.0.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 25e6d31b1..dcb4ddf1f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ dependencies = [ "bleach==6.4.*", "celery==5.6.*", "chardet==5.2.*", - "cryptography>=48.0.1", + "cryptography>=49.0.0", "css-inline==0.20.*", "defusedcsv>=3.0.0", "dnspython==2.*", -- 2.52.0 From 9f0ce28ce4d9899db0e3009a2d782f5640de30b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 08:57:41 +0200 Subject: [PATCH 49/96] Bump vite from 8.0.12 to 8.0.16 (#6294) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.0.12 to 8.0.16. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v8.0.16/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 8.0.16 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 200 +++++++++++++++++++++++++--------------------- 1 file changed, 109 insertions(+), 91 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2ffd60c6b..d4134776f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -370,14 +370,14 @@ "license": "MIT" }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", - "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", + "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@tybys/wasm-util": "^0.10.1" + "@tybys/wasm-util": "^0.10.2" }, "funding": { "type": "github", @@ -427,9 +427,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.129.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.129.0.tgz", - "integrity": "sha512-3oz8m3FGdr2nDXVqmFUw7jolKliC4MoyXYIG2c7gpjBnzUWQpUGIYcXYKxTdTi+N2jusvt610ckTMkxdwHkYEg==", + "version": "0.133.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", + "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", "dev": true, "license": "MIT", "funding": { @@ -758,9 +758,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0.tgz", - "integrity": "sha512-TWMZnRLMe63C2Lhyicviu7ZHaU4kxa6PS3rofvc9GmcvptzNN11BcfQ4Sl7MwTOsisQoa2keB/EBdNCAnUo8vA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", "cpu": [ "arm64" ], @@ -775,9 +775,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0.tgz", - "integrity": "sha512-6XcD+8k0gPVItNagEw78/qqcBDwKcwDYS8V2hRmVsfUSIrd8cWe/CBvRDI5toqFyPfj+FJr6t8U6Xj2P2prEew==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", "cpu": [ "arm64" ], @@ -792,9 +792,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0.tgz", - "integrity": "sha512-iN/tWVXRQDWvmZlKdceP1Dwug9GDpEymhb9p4xnEe6zvCg5lFmzVljl+1qR1NVx3yfGpr2Na+CuLmv5IU8uzfQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", "cpu": [ "x64" ], @@ -809,9 +809,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0.tgz", - "integrity": "sha512-jjQMDvvwSOuhOwMszD/klSOjyWMM3zI64hWTj9KT5x4MxRbZAf+7vLQ6qouRhtsLVFHr3f0ILaJAfgENPiQdAQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", "cpu": [ "x64" ], @@ -826,9 +826,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0.tgz", - "integrity": "sha512-d//Dtg2x6/m3mbV64yUGNnDGNZaDGRpDLLNGerHQUVObuNaIQaaDp25yUiqGXtHEXX+NP2d0wAlmKgpYgIAJ2A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", "cpu": [ "arm" ], @@ -843,13 +843,16 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0.tgz", - "integrity": "sha512-n7Ofp0mx+aB2cC+Sdy5YtMnXtY9lchnHbY+3Yt0uq9JsWQExf4f5Whu0tK0R8Jdc9S6RchTHjIFY7uc92puOVQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -860,13 +863,16 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0.tgz", - "integrity": "sha512-EIVjy2cgd7uuMMo94FVkBp7F6DhcZAUwNURkSG3RwUmvAXR6s0ISxM81U+IydcZByPG0pZIHsf1b6kTxoFDgJA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -877,13 +883,16 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0.tgz", - "integrity": "sha512-JEwwOPcwTLAcpDQlqSmjEmfs63xJnSiUNIGvLcDLUHCWK4XowpS/7c7tUsUH6uT/ct6bMUTdXKfI8967FYj6mg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", "cpu": [ "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -894,13 +903,16 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0.tgz", - "integrity": "sha512-0wjCFhLrihtAubnT9iA0N++0pSV0z5Hg7tNGdNJ4RFaINceHadoF+kiFGyY1qSSNVIAZtLotG8Ju1bgDPkjnFA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", "cpu": [ "s390x" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -911,13 +923,16 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0.tgz", - "integrity": "sha512-Dfn7iak9BcMMePxcoJfpSbWqnEyrp/dRF63/8qW/eHBdOZov6x5aShLLEYGYdIeSJ6vMLK/XCVB+lGIxm41bQA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -928,13 +943,16 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0.tgz", - "integrity": "sha512-5/utzzDmD/pD/bmuaUcbTf/sZYy0aztwIVlfpoW1fTjCZ0BaPOMVWGZL1zvgxyi7ZIVYWlxKONHmSbHuiOh8Jw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -945,9 +963,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0.tgz", - "integrity": "sha512-ouJs8VcUomfLfpbUECqFMRqdV4x6aeAK3MA4m6vTrJJjKyWTV5KnxZx7Jd9G+GlDaQQxubcba00x16OyJ1meig==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", "cpu": [ "arm64" ], @@ -962,9 +980,9 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0.tgz", - "integrity": "sha512-E+oHKGiDA+lsKMmFtffDDw91EryDT7uJocrIuCHqhm6bCTM6xFK+3gaCkYOHfPwQr0cCNarSM2xaELoQDz9jJg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", "cpu": [ "wasm32" ], @@ -981,9 +999,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0.tgz", - "integrity": "sha512-yYK02n8Rngo+gbm1y6G0+7jk1sJ/2Wt7K0me0Y7k/ErBpyf+LJ2gFpqWVTcRV1rUepBlQRmpgWkTQCiiwrK0Ow==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", "cpu": [ "arm64" ], @@ -998,9 +1016,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0.tgz", - "integrity": "sha512-14bpChMahXRRXiTwahSl+zzHPW6qQTXtkMuJBFlbo+pqSAews2d4BdCSHfrJ/MBsCZtpmTafsY+1QhBzitcmdg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", "cpu": [ "x64" ], @@ -3158,9 +3176,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", "funding": [ { "type": "github", @@ -3334,9 +3352,9 @@ } }, "node_modules/postcss": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", - "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", "funding": [ { "type": "opencollective", @@ -3353,7 +3371,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -3610,14 +3628,14 @@ } }, "node_modules/rolldown": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0.tgz", - "integrity": "sha512-yD986aXDESFGS95spT1LAv0jssywP4npMEjmMHyN2/5+eE8qQJUype2AaKkRiLgBgyD0LFlubwAht7VmY8rGoA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", + "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.129.0", - "@rolldown/pluginutils": "1.0.0" + "@oxc-project/types": "=0.133.0", + "@rolldown/pluginutils": "^1.0.0" }, "bin": { "rolldown": "bin/cli.mjs" @@ -3626,27 +3644,27 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0", - "@rolldown/binding-darwin-arm64": "1.0.0", - "@rolldown/binding-darwin-x64": "1.0.0", - "@rolldown/binding-freebsd-x64": "1.0.0", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0", - "@rolldown/binding-linux-arm64-gnu": "1.0.0", - "@rolldown/binding-linux-arm64-musl": "1.0.0", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0", - "@rolldown/binding-linux-s390x-gnu": "1.0.0", - "@rolldown/binding-linux-x64-gnu": "1.0.0", - "@rolldown/binding-linux-x64-musl": "1.0.0", - "@rolldown/binding-openharmony-arm64": "1.0.0", - "@rolldown/binding-wasm32-wasi": "1.0.0", - "@rolldown/binding-win32-arm64-msvc": "1.0.0", - "@rolldown/binding-win32-x64-msvc": "1.0.0" + "@rolldown/binding-android-arm64": "1.0.3", + "@rolldown/binding-darwin-arm64": "1.0.3", + "@rolldown/binding-darwin-x64": "1.0.3", + "@rolldown/binding-freebsd-x64": "1.0.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", + "@rolldown/binding-linux-arm64-gnu": "1.0.3", + "@rolldown/binding-linux-arm64-musl": "1.0.3", + "@rolldown/binding-linux-ppc64-gnu": "1.0.3", + "@rolldown/binding-linux-s390x-gnu": "1.0.3", + "@rolldown/binding-linux-x64-gnu": "1.0.3", + "@rolldown/binding-linux-x64-musl": "1.0.3", + "@rolldown/binding-openharmony-arm64": "1.0.3", + "@rolldown/binding-wasm32-wasi": "1.0.3", + "@rolldown/binding-win32-arm64-msvc": "1.0.3", + "@rolldown/binding-win32-x64-msvc": "1.0.3" } }, "node_modules/rolldown/node_modules/@rolldown/pluginutils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0.tgz", - "integrity": "sha512-aKs/3GSWyV0mrhNmt/96/Z3yczC3yvrzYATCiCXQebBsGyYzjNdUphRVLeJQ67ySKVXRfMxt2lm12pmXvbPFQQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "dev": true, "license": "MIT" }, @@ -4325,9 +4343,9 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", - "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", "dependencies": { @@ -4465,17 +4483,17 @@ "license": "MIT" }, "node_modules/vite": { - "version": "8.0.12", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.12.tgz", - "integrity": "sha512-w2dDofOWv2QB09ZITZBsvKTVAlYvPR4IAmrY/v0ir9KvLs0xybR7i48wxhM1/oyBWO34wPns+bPGw5ZrZqDpZg==", + "version": "8.0.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", + "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", - "postcss": "^8.5.14", - "rolldown": "1.0.0", - "tinyglobby": "^0.2.16" + "postcss": "^8.5.15", + "rolldown": "1.0.3", + "tinyglobby": "^0.2.17" }, "bin": { "vite": "bin/vite.js" -- 2.52.0 From 83642ec9f36e3773860c648048a95c9a3e14e485 Mon Sep 17 00:00:00 2001 From: Nikita Mitasov Date: Sun, 14 Jun 2026 03:05:47 +0200 Subject: [PATCH 50/96] Translations: Update Russian Currently translated at 18.6% (1174 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ru/ powered by weblate --- src/pretix/locale/ru/LC_MESSAGES/django.po | 139 +++++++++++---------- 1 file changed, 76 insertions(+), 63 deletions(-) diff --git a/src/pretix/locale/ru/LC_MESSAGES/django.po b/src/pretix/locale/ru/LC_MESSAGES/django.po index 58e2f75a9..c9a9461c8 100644 --- a/src/pretix/locale/ru/LC_MESSAGES/django.po +++ b/src/pretix/locale/ru/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2025-10-17 16:55+0000\n" -"Last-Translator: fd \n" +"PO-Revision-Date: 2026-06-14 02:00+0000\n" +"Last-Translator: Nikita Mitasov \n" "Language-Team: Russian \n" "Language: ru\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 5.13.3\n" +"X-Generator: Weblate 2026.6.1\n" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670 #: pretix/control/templates/pretixcontrol/events/index.html:166 @@ -53,7 +53,7 @@ msgstr "В продаже" #: pretix/_base_settings.py:89 msgid "English" -msgstr "английский язык" +msgstr "Английский язык" #: pretix/_base_settings.py:90 msgid "German" @@ -565,65 +565,50 @@ msgid "Refund of payment failed" msgstr "Возврат платежа не удался" #: pretix/api/webhooks.py:359 -#, fuzzy -#| msgctxt "checkoutflow" -#| msgid "Order confirmed" msgid "Payment confirmed" -msgstr "Заказ подтверждён" +msgstr "Платёж подтверждён" #: pretix/api/webhooks.py:363 msgid "Order approved" -msgstr "" +msgstr "Заказ подтверждён" #: pretix/api/webhooks.py:367 msgid "Order denied" -msgstr "" +msgstr "Заказ отклонён" #: pretix/api/webhooks.py:371 -#, fuzzy -#| msgid "Order date" msgid "Order deleted" -msgstr "Дата заказа" +msgstr "Заказ удалён" #: pretix/api/webhooks.py:375 msgid "Ticket checked in" -msgstr "" +msgstr "Билет использован" #: pretix/api/webhooks.py:379 msgid "Ticket check-in reverted" -msgstr "" +msgstr "Использование билета отменено" #: pretix/api/webhooks.py:383 -#, fuzzy -#| msgid "Event date" msgid "Event created" -msgstr "Дата мероприятия" +msgstr "Мероприятие создано" #: pretix/api/webhooks.py:387 -#, fuzzy -#| msgid "Event date range" msgid "Event details changed" -msgstr "Диапазон дат мероприятия" +msgstr "Данные о мероприятии изменились" #: pretix/api/webhooks.py:391 -#, fuzzy -#| msgid "Event date" msgid "Event deleted" -msgstr "Дата мероприятия" +msgstr "Мероприятие удалено" #: pretix/api/webhooks.py:395 -#, fuzzy -#| msgid "Event begin date and time" msgctxt "subevent" msgid "Event series date added" -msgstr "Дата и время начала мероприятия" +msgstr "Добавлена дата серии мероприятий" #: pretix/api/webhooks.py:399 -#, fuzzy -#| msgid "Event date range" msgctxt "subevent" msgid "Event series date changed" -msgstr "Диапазон дат мероприятия" +msgstr "Изменена дата серии мероприятий" #: pretix/api/webhooks.py:403 #, fuzzy @@ -873,7 +858,7 @@ msgstr "event ticketing powered by pretix" #: pretix/base/context.py:64 msgid "source code" -msgstr "Промокод" +msgstr "исходный код" #: pretix/base/customersso/oidc.py:61 #, python-brace-format @@ -12285,6 +12270,17 @@ msgid "" "Best regards, \n" "Your {event} team" msgstr "" +"Здравствуйте,\n" +"\n" +"мы успешно получили ваш заказ на мероприятие {event}. Поскольку вы заказали\n" +"товар, требующий подтверждения со стороны организатора, просим вас\n" +"подождать нашего следующего письма.\n" +"\n" +"Вы можете изменить данные заказа и просмотреть его статус по ссылке:\n" +"{url}\n" +"\n" +"С уважением, \n" +"команда {event}" #: pretix/base/settings.py:2536 #, python-brace-format @@ -12303,6 +12299,19 @@ msgid "" "Best regards, \n" "Your {event} team" msgstr "" +"Здравствуйте,\n" +"\n" +"мы успешно получили ваш заказ на сумму {total_with_currency} для мероприятия " +"{event}.\n" +"Пожалуйста, завершите оплату до {expire_date}.\n" +"\n" +"{payment_info}\n" +"\n" +"Вы можете изменить данные заказа и просмотреть его статус по ссылке:\n" +"{url}\n" +"\n" +"С уважением, \n" +"команда {event}" #: pretix/base/settings.py:2554 #, fuzzy @@ -12375,6 +12384,17 @@ msgid "" "Best regards, \n" "Your {event} team" msgstr "" +"Здравствуйте,\n" +"\n" +"мы успешно получили вашу оплату за мероприятие {event}. Спасибо!\n" +"\n" +"{payment_info}\n" +"\n" +"Вы можете изменить данные заказа и просмотреть его статус по ссылке:\n" +"{url}\n" +"\n" +"С уважением, \n" +"команда {event}" #: pretix/base/settings.py:2636 #, python-brace-format @@ -13648,10 +13668,8 @@ msgid "created by" msgstr "создано" #: pretix/base/templates/pretixbase/email/order_details.html:34 -#, fuzzy -#| msgid "Bancontact" msgid "Contact:" -msgstr "Bancontact" +msgstr "Связаться:" #: pretix/base/templates/pretixbase/email/order_details.html:54 #, fuzzy, python-format @@ -13684,10 +13702,8 @@ msgstr "" #: pretix/base/templates/pretixbase/email/order_details.html:136 #: pretix/presale/templates/pretixpresale/event/base.html:223 #: pretix/presale/templates/pretixpresale/organizers/base.html:101 -#, fuzzy -#| msgid "Bancontact" msgid "Contact" -msgstr "Bancontact" +msgstr "Связаться" #: pretix/base/templates/pretixbase/email/shred_completed.txt:2 #, python-format @@ -13758,16 +13774,17 @@ msgid "Proceed to %(host)s" msgstr "Приступить к оформлению заказа" #: pretix/base/templates/source.html:5 pretix/base/templates/source.html:9 -#, fuzzy -#| msgid "Voucher code" msgid "Source code" -msgstr "Код ваучера" +msgstr "Исходный код" #: pretix/base/templates/source.html:10 msgid "" "This site is powered by free software. If you want to read the license terms " "or obtain the source code, follow these links or instructions:" msgstr "" +"Этот сайт работает на свободном программном обеспечении. Если вы хотите " +"ознакомиться с условиями лицензии или получить исходный код, перейдите по " +"следующим ссылкам или следуйте инструкциям:" #: pretix/base/ticketoutput.py:182 #, fuzzy @@ -15702,6 +15719,7 @@ msgid "" "This installation of pretix includes changes or extensions made to the " "source code." msgstr "" +"Данная установка pretix содержит изменения или расширения исходного кода." #: pretix/control/forms/global_settings.py:162 msgid "Usage of pretix" @@ -15792,10 +15810,8 @@ msgid "" msgstr "" #: pretix/control/forms/global_settings.py:217 -#, fuzzy -#| msgid "Your registration" msgid "Source code instructions" -msgstr "Ваша регистрация" +msgstr "Инструкции для получения исходного кода" #: pretix/control/forms/global_settings.py:219 msgid "" @@ -18812,7 +18828,7 @@ msgstr "Оплата" #: pretix/presale/templates/pretixpresale/organizers/index.html:89 #: pretix/presale/templates/pretixpresale/organizers/index.html:91 msgid "Tickets" -msgstr "" +msgstr "Билеты" #: pretix/control/navigation.py:97 #: pretix/control/templates/pretixcontrol/event/tax.html:4 @@ -30761,6 +30777,8 @@ msgid "" "After completing your purchase, we will ask you to transfer the money to the " "following bank account, using a personal reference code:" msgstr "" +"После завершения покупки, мы попросим вас перевести оплату на следующий " +"банковский счет, указав персональный код назначения платежа:" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 msgid "" @@ -30771,23 +30789,27 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 msgid "Reference code (important):" -msgstr "" +msgstr "Код назначения платежа (важно):" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:30 msgid "We will assign you a personal reference code in the next step." -msgstr "" +msgstr "Мы присвоим вам персональный код назначения платежа на следующем шаге." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:36 msgid "" "We will assign you a personal reference code to use after you completed the " "order." msgstr "" +"Мы присвоим вам персональный код назначения платежа после завершения " +"оформления заказа." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:41 msgid "" "After completing your purchase, we will ask you to transfer the money to our " "bank account, using a personal reference code." msgstr "" +"После завершения покупки мы попросим вас перевести оплату на следующий " +"банковский счёт, указав персональный код назначения платежа." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/control.html:6 #, fuzzy @@ -30810,7 +30832,7 @@ msgstr "Общая сумма" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/control.html:38 msgid "Reference code" -msgstr "" +msgstr "Код назначения платежа" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:4 msgid "" @@ -30949,7 +30971,7 @@ msgstr "Сумма:" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:34 #: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:30 msgid "There is no further action required on this website." -msgstr "" +msgstr "Дальнейших действий на этом сайте не требуется." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:35 #: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:31 @@ -35999,32 +36021,23 @@ msgstr "" "завершения процесса." #: pretix/presale/templates/pretixpresale/event/order.html:56 -#, fuzzy -#| msgid "" -#| "Please bookmark or save the link to this exact page if you want to access " -#| "your order later. We also sent you an email containing the link to the " -#| "address you specified." msgid "" "Please bookmark or save the link to this exact page if you want to access " "your order later. We also sent you an email to the address you specified " "containing the link to this page." msgstr "" -"Пожалуйста, добавьте в закладки или сохраните ссылку именно на эту страницу, " -"если вы хотите получить доступ к вашему заказу позже. Мы также отправили вам " -"электронное письмо со ссылкой на указанный вами адрес." +"Пожалуйста, сохраните закладку или ссылку на эту страницу, если вам " +"потребуется доступ к заказу позже. Мы также отправили письмо на указанный " +"вами адрес электронной почты со ссылкой на эту страницу." #: pretix/presale/templates/pretixpresale/event/order.html:60 -#, fuzzy -#| msgid "" -#| "Please save the following link if you want to access your order later. We " -#| "also sent you an email containing the link to the address you specified." msgid "" "Please save the following link if you want to access your order later. We " "also sent you an email to the address you specified containing the link." msgstr "" -"Пожалуйста, сохраните следующую ссылку, если вы хотите получить доступ к " -"вашему заказу позже. Мы также отправили вам электронное письмо со ссылкой на " -"указанный вами адрес." +"Пожалуйста, сохраните ссылку на эту страницу, если вам потребуется доступ к " +"заказу позже. Мы также отправили письмо на указанный вами адрес электронной " +"почты со ссылкой на эту страницу." #: pretix/presale/templates/pretixpresale/event/order.html:75 #: pretix/presale/templates/pretixpresale/event/position.html:18 -- 2.52.0 From d8991d8138d58dc77570cbf34243c292467ace7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szurofka=20M=C3=A1rton?= Date: Thu, 18 Jun 2026 14:11:28 +0200 Subject: [PATCH 51/96] Translations: Update Hungarian Currently translated at 64.6% (119 of 184 strings) Translation: pretix/pretix (JavaScript parts) Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/hu/ powered by weblate --- src/pretix/locale/hu/LC_MESSAGES/djangojs.po | 70 ++++++++------------ 1 file changed, 29 insertions(+), 41 deletions(-) diff --git a/src/pretix/locale/hu/LC_MESSAGES/djangojs.po b/src/pretix/locale/hu/LC_MESSAGES/djangojs.po index f75b56ace..677726798 100644 --- a/src/pretix/locale/hu/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/hu/LC_MESSAGES/djangojs.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 14:47+0000\n" -"PO-Revision-Date: 2026-01-23 15:00+0000\n" -"Last-Translator: Vajda Tamás \n" +"PO-Revision-Date: 2026-06-18 21:00+0000\n" +"Last-Translator: Szurofka Márton \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.15.2\n" +"X-Generator: Weblate 2026.6.1\n" #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 @@ -31,16 +31,16 @@ msgstr "Megjegyzés:" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34 msgid "PayPal" -msgstr "" +msgstr "PayPal" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35 msgid "Venmo" -msgstr "" +msgstr "Venmo" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36 #: pretix/static/pretixpresale/js/walletdetection.js:38 msgid "Apple Pay" -msgstr "" +msgstr "Apple Pay" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37 msgid "Itaú" @@ -56,7 +56,7 @@ msgstr "" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40 msgid "PayPal Pay Later" -msgstr "" +msgstr "PayPal Későbbi Fizetés" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41 msgid "iDEAL | Wero" @@ -148,7 +148,7 @@ msgstr "A fizetés megerősítése…" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:254 msgid "Payment method unavailable" -msgstr "" +msgstr "Fizetésimód nem elérhető" #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15 #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:63 @@ -163,12 +163,12 @@ msgstr "Kifizetett megrendelések" #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27 #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39 msgid "Attendees (ordered)" -msgstr "" +msgstr "Résztvevők (megrendelve)" #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27 #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39 msgid "Attendees (paid)" -msgstr "" +msgstr "Résztvevők (fizetve)" #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:51 msgid "Total revenue" @@ -187,18 +187,13 @@ msgid "Contacting your bank …" msgstr "Kapcsolatfelvétel a bankjával…" #: pretix/static/lightbox/js/lightbox.js:96 -#, fuzzy -#| msgctxt "widget" -#| msgid "Close" msgid "close" -msgstr "Bezárás" +msgstr "bezárás" #: pretix/static/pretixbase/js/addressform.js:108 #: pretix/static/pretixpresale/js/ui/main.js:529 -#, fuzzy -#| msgid "Cart expired" msgid "required" -msgstr "A kosár lejárt" +msgstr "a kosár lejárt" #: pretix/static/pretixbase/js/asynctask.js:13 #, fuzzy @@ -276,6 +271,8 @@ msgstr "" #: pretix/static/pretixbase/js/asynctask.js:286 msgid "If this takes longer than a few minutes, please contact us." msgstr "" +"Amennyiben ez több időt vesz igénybe, mint néhány perc, kérjük jelezze " +"felénk." #: pretix/static/pretixbase/js/asynctask.js:341 msgid "Close message" @@ -302,26 +299,20 @@ msgid "Group of objects" msgstr "tárgy csoport" #: pretix/static/pretixcontrol/js/ui/editor.js:909 -#, fuzzy -#| msgid "Text object" msgid "Text object (deprecated)" -msgstr "Szöveg" +msgstr "Szöveg elem (elavult)" #: pretix/static/pretixcontrol/js/ui/editor.js:911 -#, fuzzy -#| msgid "Text object" msgid "Text box" -msgstr "Szöveg" +msgstr "Szövegdoboz" #: pretix/static/pretixcontrol/js/ui/editor.js:913 msgid "Barcode area" msgstr "Vonalkód terület" #: pretix/static/pretixcontrol/js/ui/editor.js:915 -#, fuzzy -#| msgid "Barcode area" msgid "Image area" -msgstr "Vonalkód terület" +msgstr "Kép helye" #: pretix/static/pretixcontrol/js/ui/editor.js:917 msgid "Powered by pretix" @@ -361,19 +352,16 @@ msgid "Unknown error." msgstr "Ismeretlen hiba." #: pretix/static/pretixcontrol/js/ui/main.js:310 -#, fuzzy -#| msgid "Your color has great contrast and is very easy to read!" msgid "Your color has great contrast and will provide excellent accessibility." -msgstr "A választott színek remek kontrasztot adnak, és nagyon könnyű olvasni!" +msgstr "A választott színek remek kontrasztot adnak, és nagyon könnyű olvasni." #: pretix/static/pretixcontrol/js/ui/main.js:314 -#, fuzzy -#| msgid "Your color has decent contrast and is probably good-enough to read!" msgid "" "Your color has decent contrast and is sufficient for minimum accessibility " "requirements." msgstr "" -"A választott színek kontrasztja elégséges, és valószínűleg jól olvasható!" +"A választott színek kontrasztja elégséges, és elegendő a minimum " +"követelménynek." #: pretix/static/pretixcontrol/js/ui/main.js:318 msgid "" @@ -384,7 +372,7 @@ msgstr "" #: pretix/static/pretixcontrol/js/ui/main.js:446 #: pretix/static/pretixcontrol/js/ui/main.js:466 msgid "Search query" -msgstr "" +msgstr "Keresési lekérdezés" #: pretix/static/pretixcontrol/js/ui/main.js:464 msgid "All" @@ -404,7 +392,7 @@ msgstr "" #: pretix/static/pretixcontrol/js/ui/main.js:845 msgid "Invalid page number." -msgstr "" +msgstr "Helytelen oldalszám." #: pretix/static/pretixcontrol/js/ui/main.js:1003 msgid "Use a different name internally" @@ -465,7 +453,7 @@ msgstr "A kosár lejárt" #: pretix/static/pretixpresale/js/ui/cart.js:58 #: pretix/static/pretixpresale/js/ui/cart.js:84 msgid "Your cart is about to expire." -msgstr "" +msgstr "Kosara tartalma hamarosan lejár." #: pretix/static/pretixpresale/js/ui/cart.js:62 #, fuzzy @@ -532,32 +520,32 @@ msgstr "" #: pretix/static/pretixpresale/js/widget/widget.js:16 msgctxt "widget" msgid "Quantity" -msgstr "" +msgstr "Mennyiség" #: pretix/static/pretixpresale/js/widget/widget.js:17 msgctxt "widget" msgid "Decrease quantity" -msgstr "" +msgstr "Mennyiség csökkentése" #: pretix/static/pretixpresale/js/widget/widget.js:18 msgctxt "widget" msgid "Increase quantity" -msgstr "" +msgstr "Mennyiség növelése" #: pretix/static/pretixpresale/js/widget/widget.js:19 msgctxt "widget" msgid "Filter events by" -msgstr "" +msgstr "Események szűrése a következő szerint" #: pretix/static/pretixpresale/js/widget/widget.js:20 msgctxt "widget" msgid "Filter" -msgstr "" +msgstr "Szűrés" #: pretix/static/pretixpresale/js/widget/widget.js:21 msgctxt "widget" msgid "Price" -msgstr "" +msgstr "Ár" #: pretix/static/pretixpresale/js/widget/widget.js:22 #, javascript-format -- 2.52.0 From 226ff9b0445f96d5bfd6a580b65d0752669570d9 Mon Sep 17 00:00:00 2001 From: Nikita Mitasov Date: Sat, 20 Jun 2026 09:50:58 +0200 Subject: [PATCH 52/96] Translations: Update Russian Currently translated at 18.7% (1183 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ru/ powered by weblate --- src/pretix/locale/ru/LC_MESSAGES/django.po | 91 ++++++++++++++++------ 1 file changed, 68 insertions(+), 23 deletions(-) diff --git a/src/pretix/locale/ru/LC_MESSAGES/django.po b/src/pretix/locale/ru/LC_MESSAGES/django.po index c9a9461c8..80f803656 100644 --- a/src/pretix/locale/ru/LC_MESSAGES/django.po +++ b/src/pretix/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2026-06-14 02:00+0000\n" +"PO-Revision-Date: 2026-06-20 08:00+0000\n" "Last-Translator: Nikita Mitasov \n" "Language-Team: Russian \n" @@ -9893,6 +9893,12 @@ msgid "" "We are sending this email because you configured us to do so in your event " "settings." msgstr "" +"Здравствуйте,\n" +"\n" +"новый счет для заказа {order} на {event} создан, смотрите вложение.\n" +"\n" +"Вы получили это письмо, поскольку в настройках мероприятия была включена " +"отправка таких уведомлений." #: pretix/base/services/mail.py:144 #, fuzzy @@ -12206,6 +12212,16 @@ msgid "" "Best regards, \n" "Your {event} team" msgstr "" +"Здравствуйте,\n" +"\n" +"вы получили это письмо, потому что запросили ссылку\n" +"на ваш заказ для мероприятия {event}.\n" +"\n" +"Вы можете изменить данные заказа и просмотреть его статус по ссылке:\n" +"{url}\n" +"\n" +"С уважением, \n" +"Команда мероприятия {event}" #: pretix/base/settings.py:2461 #, python-brace-format @@ -12225,6 +12241,15 @@ msgid "" "Best regards, \n" "Your {event} team" msgstr "" +"Здравствуйте,\n" +"\n" +"кто-то запросил список ваших заказов для мероприятия {event}.\n" +"Список заказов::\n" +"\n" +"{orders}\n" +"\n" +"С уважением, \n" +"Команда мероприятия {event}" #: pretix/base/settings.py:2481 #, python-brace-format @@ -12254,6 +12279,17 @@ msgid "" "Best regards, \n" "Your {event} team" msgstr "" +"Здравствуйте,\n" +"\n" +"ваш заказ для мероприятия {event} прошел успешно. Поскольку ваш заказ " +"состоит только из бесплатных позиций,\n" +"оплата не требуется.\n" +"\n" +"Вы можете изменить детали заказа и посмотреть его статус по ссылке:\n" +"{url}\n" +"\n" +"С уважением, \n" +"Команда мероприятия {event}" #: pretix/base/settings.py:2518 #, python-brace-format @@ -12272,7 +12308,8 @@ msgid "" msgstr "" "Здравствуйте,\n" "\n" -"мы успешно получили ваш заказ на мероприятие {event}. Поскольку вы заказали\n" +"мы успешно получили ваш заказ для мероприятия {event}. Поскольку вы " +"заказали\n" "товар, требующий подтверждения со стороны организатора, просим вас\n" "подождать нашего следующего письма.\n" "\n" @@ -12280,7 +12317,7 @@ msgstr "" "{url}\n" "\n" "С уважением, \n" -"команда {event}" +"Команда мероприятия {event}" #: pretix/base/settings.py:2536 #, python-brace-format @@ -12311,7 +12348,7 @@ msgstr "" "{url}\n" "\n" "С уважением, \n" -"команда {event}" +"Команда мероприятия {event}" #: pretix/base/settings.py:2554 #, fuzzy @@ -12363,6 +12400,15 @@ msgid "" "Best regards, \n" "Your {event} team" msgstr "" +"Здравствуйте,\n" +"\n" +"ваш заказ для мероприятия {event} был изменен.\n" +"\n" +"Вы можете посмотреть статус своего заказа по ссылке:\n" +"{url}\n" +"\n" +"С уважением, \n" +"Команда мероприятия {event}" #: pretix/base/settings.py:2614 #, python-brace-format @@ -12394,7 +12440,7 @@ msgstr "" "{url}\n" "\n" "С уважением, \n" -"команда {event}" +"Команда мероприятия {event}" #: pretix/base/settings.py:2636 #, python-brace-format @@ -12446,6 +12492,17 @@ msgid "" "Best regards, \n" "Your {event} team" msgstr "" +"Здравствуйте,\n" +"\n" +"мы не получили полной оплаты вашего заказа для мероприятия {event}.\n" +"Обратите внимание: мы можем гарантировать ваш заказ только в том случае,\n" +"если оплата поступит до {expire_date}.\n" +"\n" +"Информацию об оплате и статус заказа можно посмотреть по ссылке:\n" +"{url}\n" +"\n" +"С уважением, \n" +"Команда мероприятия {event}" #: pretix/base/settings.py:2685 #, python-brace-format @@ -34581,10 +34638,8 @@ msgid "We're now trying to book these add-ons for you!" msgstr "Сейчас мы пытаемся забронировать эти дополнительные продукты для вас!" #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:28 -#, fuzzy -#| msgid "Additional information" msgid "Additional options for" -msgstr "Дополнительная информация" +msgstr "Дополнительные опции" #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:60 #, fuzzy @@ -34971,21 +35026,12 @@ msgstr[1] "" msgstr[2] "" #: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:26 -#, fuzzy, python-format -#| msgid "" -#| "You can choose between %(min_count)s and %(max_count)s options from this " -#| "category." +#, python-format msgid "You can choose one option from this category." msgid_plural "You can choose up to %(max_count)s options from this category." -msgstr[0] "" -"Вы можете выбрать между вариантами %(min_count)s и %(max_count)s из этой " -"категории." -msgstr[1] "" -"Вы можете выбрать между вариантами %(min_count)s и %(max_count)s из этой " -"категории." -msgstr[2] "" -"Вы можете выбрать между вариантами %(min_count)s и %(max_count)s из этой " -"категории." +msgstr[0] "Вы можете выбрать не более %(max_count)s варианта из этой категории." +msgstr[1] "Вы можете выбрать не более %(max_count)s вариантов из этой категории." +msgstr[2] "Вы можете выбрать не более %(max_count)s вариантов из этой категории." #: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:34 #, python-format @@ -35385,8 +35431,7 @@ msgid "" msgstr "" #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:516 -#, fuzzy, python-format -#| msgid "The items in your cart are reserved for you for %(minutes)s minutes." +#, python-format msgid "The items in your cart are reserved for you for %(minutes)s minutes." msgstr "Позиции в вашей корзине зарезервированы для вас на %(minutes)s минут." -- 2.52.0 From ea9c85a1b4eb3e0e72f28341d236320ef915dd59 Mon Sep 17 00:00:00 2001 From: Nikolai Date: Sat, 20 Jun 2026 12:43:27 +0200 Subject: [PATCH 53/96] Translations: Update Danish Currently translated at 62.5% (3945 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/da/ powered by weblate --- src/pretix/locale/da/LC_MESSAGES/django.po | 428 ++++++++------------- 1 file changed, 158 insertions(+), 270 deletions(-) diff --git a/src/pretix/locale/da/LC_MESSAGES/django.po b/src/pretix/locale/da/LC_MESSAGES/django.po index 9b2f4cc4f..0ae07f11a 100644 --- a/src/pretix/locale/da/LC_MESSAGES/django.po +++ b/src/pretix/locale/da/LC_MESSAGES/django.po @@ -4,16 +4,16 @@ msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2026-05-22 07:03+0000\n" +"PO-Revision-Date: 2026-06-20 17:00+0000\n" "Last-Translator: Nikolai \n" -"Language-Team: Danish \n" +"Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2026.5\n" +"X-Generator: Weblate 2026.6.1\n" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670 #: pretix/control/templates/pretixcontrol/events/index.html:166 @@ -612,16 +612,17 @@ msgstr "" "underordnede objekter som f.eks. varianter eller pakker." #: pretix/api/webhooks.py:413 -#, fuzzy -#| msgid "Quota handling" msgid "Quota changed" -msgstr "Håndtering af kvoter" +msgstr "Kvoten er ændret" #: pretix/api/webhooks.py:414 msgid "" "This includes related events like creation, deletion, opening or closing of " "quotas. No webhook is sent for changes to the resulting availability." msgstr "" +"Dette omfatter relaterede hændelser såsom oprettelse, sletning, åbning eller " +"lukning af kvoter. Der sendes ingen webhook ved ændringer i den deraf " +"følgende tilgængelighed." #: pretix/api/webhooks.py:419 msgid "Shop taken live" @@ -3394,12 +3395,12 @@ msgstr "Indtast venligst et kortere navn." msgid "" "The field \"%(label)s\" may not contain special characters such as " "\"%(chars)s\"." -msgstr "" +msgstr "Feltet \"%(label)s\" må ikke indeholde specialtegn såsom \"%(chars)s\"." #: pretix/base/forms/questions.py:305 #, python-format msgid "The field \"%(label)s\" may not contain an URL (%(url)s)." -msgstr "" +msgstr "Feltet \"%(label)s\" må ikke indeholde en URL (%(url)s)." #: pretix/base/forms/questions.py:338 msgctxt "phonenumber" @@ -8290,19 +8291,14 @@ msgid "Program times" msgstr "Programtider" #: pretix/base/pdf.py:503 -#, fuzzy -#| msgid "" -#| "2017-05-31 10:00 – 12:00\n" -#| "2017-05-31 14:00 – 16:00\n" -#| "2017-05-31 14:00 – 2017-06-01 14:00" msgid "" "2017-05-31 10:00 – 12:00, Room 1\n" "2017-05-31 14:00 – 16:00, Room 2\n" "2017-05-31 14:00 – 2017-06-01 14:00, Building A" msgstr "" -"31. maj 2017 kl. 10.00 – 12.00\n" -"31. maj 2017 kl. 14.00 – 16.00\n" -"31. maj 2017 kl. 14.00 – 1. juni 2017 kl. 14.00" +"31. maj 2017 kl. 10.00 – 12.00, lokale 1\n" +"31. maj 2017 kl. 14.00 – 16.00, lokale 2\n" +"31. maj 2017 kl. 14.00 – 1. juni 2017 kl. 14.00, bygning A" #: pretix/base/pdf.py:507 msgid "Reusable Medium ID" @@ -8827,13 +8823,7 @@ msgid "This voucher code is not known in our database." msgstr "Denne voucherkode genkendes ikke." #: pretix/base/services/cart.py:165 -#, fuzzy, python-format -#| msgid "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products." -#| msgid_plural "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products." +#, python-format msgid "" "The voucher code \"%(voucher)s\" can only be used if you select at least " "%(number)s matching product." @@ -8841,22 +8831,14 @@ msgid_plural "" "The voucher code \"%(voucher)s\" can only be used if you select at least " "%(number)s matching products." msgstr[0] "" -"Voucherkoden \"%(voucher)s\" kan kun blive brugt, hvis du vælger mindst " -"%(number)s passende produkter." +"Voucherkoden \"%(voucher)s\" kan kun blive brugt, hvis du vælger mindst %" +"(number)s passende produkter." msgstr[1] "" -"Voucherkoden \"%(voucher)s\" kan kun blive brugt, hvis du vælger mindst " -"%(number)s passende produkter." +"Voucherkoderne \"%(voucher)s\" kan kun blive brugt, hvis du vælger mindst %" +"(number)s passende produkter." #: pretix/base/services/cart.py:170 -#, fuzzy, python-format -#| msgid "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products. We have therefore removed some positions " -#| "from your cart that can no longer be purchased like this." -#| msgid_plural "" -#| "The voucher code \"%(voucher)s\" can only be used if you select at least " -#| "%(number)s matching products. We have therefore removed some positions " -#| "from your cart that can no longer be purchased like this." +#, python-format msgid "" "The voucher code \"%(voucher)s\" can only be used if you select at least " "%(number)s matching product. We have therefore removed some positions from " @@ -8866,12 +8848,12 @@ msgid_plural "" "%(number)s matching products. We have therefore removed some positions from " "your cart that can no longer be purchased like this." msgstr[0] "" -"Voucherkoden \"%(voucher)s\" kan kun blive brugt, hvis du vælger mindst " -"%(number)s passende produkter. Vi har derfor fjernet nogle poster fra din " +"Voucherkoden \"%(voucher)s\" kan kun blive brugt, hvis du vælger mindst %" +"(number)s passende produkter. Vi har derfor fjernet nogle poster fra din " "indkøbskurv, som ikke længere kan blive købt på denne måde." msgstr[1] "" -"Voucherkoden \"%(voucher)s\" kan kun blive brugt, hvis du vælger mindst " -"%(number)s passende produkter. Vi har derfor fjernet nogle poster fra din " +"Voucherkoderne \"%(voucher)s\" kan kun blive brugt, hvis du vælger mindst %" +"(number)s passende produkter. Vi har derfor fjernet nogle poster fra din " "indkøbskurv, som ikke længere kan blive købt på denne måde." #: pretix/base/services/cart.py:176 @@ -14105,6 +14087,8 @@ msgid "" "You entered an URL, which is not allowed. Please remove %(match)s from your " "input." msgstr "" +"Du har indtastet en URL, som ikke er tilladt. Fjern venligst %(match)s fra " +"din indtastning." #: pretix/base/views/errors.py:48 msgid "" @@ -16027,14 +16011,8 @@ msgid "inactive" msgstr "inaktiv" #: pretix/control/forms/item.py:1414 -#, fuzzy -#| msgid "" -#| "Sample Conference Center\n" -#| "Heidelberg, Germany" msgid "Sample Conference Center, Heidelberg, Germany" -msgstr "" -"Eksempelkonferencecenter\n" -"Andeby, Danmark" +msgstr "Eksempelkonferencecenter, Århus, Danmark" #: pretix/control/forms/mailsetup.py:42 msgid "Hostname" @@ -17819,12 +17797,11 @@ msgstr "" "afvist." #: pretix/control/logdisplay.py:571 -#, fuzzy msgid "" "An email has been sent to notify the user that the order has been approved." msgstr "" -"En e-mail er blevet sendt for at fortælle brugeren at bestillingen er " -"modtaget." +"Der er sendt en e-mail for at informere brugeren om, at ordren er blevet " +"godkendt." #: pretix/control/logdisplay.py:574 msgid "" @@ -17835,13 +17812,12 @@ msgstr "" "modtaget og kræver betaling." #: pretix/control/logdisplay.py:575 -#, fuzzy msgid "" "An email has been sent to notify the user that the order has been received " "and requires approval." msgstr "" -"En e-mail er blevet sendt for at fortælle brugeren at bestillingen er " -"modtaget og kræver betaling." +"Der er sendt en e-mail for at informere brugeren om, at ordren er modtaget " +"og skal godkendes." #: pretix/control/logdisplay.py:578 msgid "" @@ -17851,21 +17827,22 @@ msgstr "" "bestillingsdetaljer." #: pretix/control/logdisplay.py:579 -#, fuzzy msgid "An email has been sent to notify the user that the payment failed." msgstr "" -"En e-mail er blevet sendt for at fortælle brugeren at betaling er modtaget." +"Der er sendt en e-mail for at informere brugeren om, at betalingen " +"mislykkedes." #: pretix/control/logdisplay.py:586 msgid "The voucher has been created." msgstr "Voucheren er blevet oprettet." #: pretix/control/logdisplay.py:589 -#, fuzzy msgid "" "The voucher has been set to expire because the recipient removed themselves " "from the waiting list." -msgstr "En rabatkode er blevet sendt til en person på ventelisten." +msgstr "" +"Kuponen er sat til at udløbe, fordi modtageren har fjernet sig selv fra " +"ventelisten." #: pretix/control/logdisplay.py:590 msgid "The voucher has been changed." @@ -17876,16 +17853,13 @@ msgid "The voucher has been deleted." msgstr "Voucheren er blevet slettet." #: pretix/control/logdisplay.py:592 -#, fuzzy -#| msgid "The selected voucher has been deleted." msgid "Cart positions including the voucher have been deleted." -msgstr "Den valgte rabatkode er blevet slettet." +msgstr "Indkøbskurvens varer, herunder gavekortet, er blevet slettet." #: pretix/control/logdisplay.py:593 -#, fuzzy, python-brace-format -#| msgid "A voucher has been sent to a person on the waiting list." +#, python-brace-format msgid "The voucher has been assigned to {email} through the waiting list." -msgstr "En rabatkode er blevet sendt til en person på ventelisten." +msgstr "Kuponen er blevet tildelt {email} via ventelisten." #: pretix/control/logdisplay.py:602 #, python-brace-format @@ -17905,9 +17879,8 @@ msgid "The category has been changed." msgstr "Kategorien er blevet ændret." #: pretix/control/logdisplay.py:620 -#, fuzzy msgid "The category has been reordered." -msgstr "Kategorien er blevet slettet." +msgstr "Kategorien er blevet omorganiseret." #: pretix/control/logdisplay.py:627 msgid "The tax rule has been added." @@ -17937,14 +17910,14 @@ msgid "{user} has been invited to the team." msgstr "{user} er blevet inviteret med i gruppen." #: pretix/control/logdisplay.py:644 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Invite for {user} has been deleted." -msgstr "Invitationen til {user} er blevet trukket tilbage." +msgstr "Invitationen til {user} er blevet slettet." #: pretix/control/logdisplay.py:645 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Invite for {user} has been resent." -msgstr "Invitationen til {user} er blevet trukket tilbage." +msgstr "Invitationen til {user} er blevet sendt igen." #: pretix/control/logdisplay.py:656 #, python-brace-format @@ -17962,294 +17935,245 @@ msgstr "Din e-mailadresse er blevet ændret til {email}." #: pretix/control/logdisplay.py:673 msgid "Your account has been enabled." -msgstr "" +msgstr "Din konto er nu aktiveret." #: pretix/control/logdisplay.py:675 msgid "Your account has been disabled." -msgstr "" +msgstr "Din konto er blevet deaktiveret." #: pretix/control/logdisplay.py:680 pretix/presale/views/customer.py:642 -#, fuzzy, python-brace-format -#| msgid "" -#| "The email address has been changed from \"{old_email}\" to \"{new_email}" -#| "\"." +#, python-brace-format msgid "Your email address has been changed from {old_email} to {email}." -msgstr "" -"E-mailadressen er blevet ændret fra \"{old_email}\" til \"{new_email}\"." +msgstr "Din e-mailadresse er blevet ændret fra {old_email} til {email}." #: pretix/control/logdisplay.py:681 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Your email address {email} has been confirmed." -msgstr "Din kurv er blevet opdateret." +msgstr "Din e-mailadresse {email} er blevet bekræftet." #: pretix/control/logdisplay.py:693 #, python-brace-format msgid "You impersonated {}." -msgstr "" +msgstr "Du udgav dig for at være {}." #: pretix/control/logdisplay.py:694 #, python-brace-format msgid "You stopped impersonating {}." -msgstr "" +msgstr "Du er holdt op med at udgive dig for at være {}." #: pretix/control/logdisplay.py:701 msgid "This object has been created by cloning." msgstr "Dette objekt er blevet oprettet ved kloning" #: pretix/control/logdisplay.py:702 -#, fuzzy msgid "The organizer has been changed." -msgstr "Bestillingen er blevet ændret." +msgstr "Arrangøren er blevet ændret." #: pretix/control/logdisplay.py:703 -#, fuzzy msgid "The organizer settings have been changed." -msgstr "Gruppeindstillingerne er blevet ændret." +msgstr "Indstillingerne for arrangøren er blevet ændret." #: pretix/control/logdisplay.py:704 pretix/control/logdisplay.py:849 -#, fuzzy msgid "The footer links have been changed." -msgstr "Bestillingsdetaljerne er blevet ændret." +msgstr "Linkene i sidefoden er blevet ændret." #: pretix/control/logdisplay.py:705 pretix/control/logdisplay.py:754 -#, fuzzy msgid "A scheduled export has been added." -msgstr "Kvoten er blevet tilføjet." +msgstr "Der er tilføjet en planlagt eksport." #: pretix/control/logdisplay.py:706 pretix/control/logdisplay.py:755 -#, fuzzy msgid "A scheduled export has been changed." -msgstr "Produktet er blevet ændret." +msgstr "En planlagt eksport er blevet ændret." #: pretix/control/logdisplay.py:707 pretix/control/logdisplay.py:756 -#, fuzzy msgid "A scheduled export has been deleted." -msgstr "Det valgte produkt er blevet slettet." +msgstr "En planlagt eksport er blevet slettet." #: pretix/control/logdisplay.py:708 pretix/control/logdisplay.py:757 -#, fuzzy msgid "A scheduled export has been executed." -msgstr "Det valgte produkt er blevet slettet." +msgstr "En planlagt eksport er blevet udført." #: pretix/control/logdisplay.py:709 pretix/control/logdisplay.py:758 #, python-brace-format msgid "A scheduled export has failed: {reason}." -msgstr "" +msgstr "En planlagt eksport er mislykket: {reason}." #: pretix/control/logdisplay.py:710 -#, fuzzy -#| msgid "The email has been queued to be sent." msgid "Failed emails have been scheduled to be retried." -msgstr "Denne e-mail er sat i udsendelseskøen." +msgstr "" +"Der er planlagt et nyt forsøg på at sende de e-mails, der ikke kunne leveres." #: pretix/control/logdisplay.py:711 -#, fuzzy -#| msgid "The order details have been changed." msgid "Queued emails have been aborted." -msgstr "Bestillingsdetaljerne er blevet ændret." +msgstr "E-mails i køen er blevet afbrudt." #: pretix/control/logdisplay.py:712 -#, fuzzy msgid "Gift card acceptance for another organizer has been added." -msgstr "Den nye arrangør er blevet oprettet." +msgstr "" +"Der er nu tilføjet mulighed for at acceptere gavekort fra en anden arrangør." #: pretix/control/logdisplay.py:713 -#, fuzzy msgid "Gift card acceptance for another organizer has been removed." -msgstr "Den nye arrangør er blevet oprettet." +msgstr "" +"Muligheden for at modtage gavekort fra en anden arrangør er blevet fjernet." #: pretix/control/logdisplay.py:714 -#, fuzzy msgid "A new gift card acceptor has been invited." -msgstr "Gruppen er blevet oprettet." +msgstr "Der er blevet inviteret en ny modtager af gavekort." #: pretix/control/logdisplay.py:715 -#, fuzzy msgid "A gift card acceptor has been removed." -msgstr "Gruppen er blevet oprettet." +msgstr "En gavekort-modtager er blevet fjernet." #: pretix/control/logdisplay.py:716 -#, fuzzy msgid "A gift card issuer has been removed or declined." -msgstr "Den valgte kategorien er blevet slettet." +msgstr "En udsteder af gavekort er blevet fjernet eller afvist." #: pretix/control/logdisplay.py:717 -#, fuzzy msgid "A new gift card issuer has been accepted." -msgstr "Den valgte kategorien er blevet slettet." +msgstr "En ny udsteder af gavekort er blevet godkendt." #: pretix/control/logdisplay.py:718 -#, fuzzy msgid "The webhook has been created." -msgstr "Gruppen er blevet oprettet." +msgstr "Webhooken er blevet oprettet." #: pretix/control/logdisplay.py:719 -#, fuzzy msgid "The webhook has been changed." -msgstr "Kategorien er blevet ændret." +msgstr "Webhooken er blevet ændret." #: pretix/control/logdisplay.py:720 msgid "The webhook call retry jobs have been manually expedited." msgstr "" +"Opgaverne vedrørende gentagelse af webhook-kald er blevet fremskyndet " +"manuelt." #: pretix/control/logdisplay.py:721 -#, fuzzy msgid "The webhook call retry jobs have been dropped." -msgstr "Gruppen er blevet oprettet." +msgstr "Opgaverne til gentagelse af webhook-kald er blevet annulleret." #: pretix/control/logdisplay.py:722 -#, fuzzy msgid "The SSO provider has been created." -msgstr "Bestilling oprettet." +msgstr "SSO-udbyderen er blevet oprettet." #: pretix/control/logdisplay.py:723 -#, fuzzy msgid "The SSO provider has been changed." -msgstr "Bestillingen er blevet ændret." +msgstr "SSO-udbyderen er blevet skiftet." #: pretix/control/logdisplay.py:724 -#, fuzzy msgid "The SSO provider has been deleted." -msgstr "Bestillingen er blevet tilbagebetalt." +msgstr "SSO-udbyderen er blevet slettet." #: pretix/control/logdisplay.py:725 -#, fuzzy msgid "The SSO client has been created." -msgstr "Arrangementsdatoen er blevet oprettet." +msgstr "SSO-klienten er oprettet." #: pretix/control/logdisplay.py:726 -#, fuzzy msgid "The SSO client has been changed." -msgstr "Kategorien er blevet ændret." +msgstr "SSO-klienten er blevet ændret." #: pretix/control/logdisplay.py:727 -#, fuzzy msgid "The SSO client has been deleted." -msgstr "Produktet er blevet slettet." +msgstr "SSO-klienten er blevet slettet." #: pretix/control/logdisplay.py:728 pretix/control/views/organizer.py:2715 -#, fuzzy msgid "The membership type has been created." -msgstr "Arrangementsdatoen er blevet oprettet." +msgstr "Medlemskabstypen er oprettet." #: pretix/control/logdisplay.py:729 -#, fuzzy msgid "The membership type has been changed." -msgstr "Arrangementsdatoen er blevet ændret." +msgstr "Medlemskabstypen er blevet ændret." #: pretix/control/logdisplay.py:730 -#, fuzzy msgid "The membership type has been deleted." -msgstr "Arrangementsdatoen er blevet slettet." +msgstr "Medlemskabstypen er blevet slettet." #: pretix/control/logdisplay.py:731 pretix/control/views/organizer.py:3556 -#, fuzzy -#| msgctxt "subevent" -#| msgid "The new date has been created." msgid "The sales channel has been created." -msgstr "Den nye dato er blevet oprettet." +msgstr "Salgskanalen er oprettet." #: pretix/control/logdisplay.py:732 -#, fuzzy msgid "The sales channel has been changed." -msgstr "Voucheren er blevet ændret." +msgstr "Salgskanalen er blevet ændret." #: pretix/control/logdisplay.py:733 -#, fuzzy -#| msgid "The selected list has been deleted." msgid "The sales channel has been deleted." -msgstr "Den valgte lister er blevet slettet." +msgstr "Salgskanalen er blevet slettet." #: pretix/control/logdisplay.py:734 -#, fuzzy msgid "The account has been created." -msgstr "Gruppen er blevet oprettet." +msgstr "Kontoen er oprettet." #: pretix/control/logdisplay.py:735 -#, fuzzy msgid "The account has been changed." -msgstr "Kategorien er blevet ændret." +msgstr "Kontoen er blevet ændret." #: pretix/control/logdisplay.py:736 -#, fuzzy msgid "A membership for this account has been added." -msgstr "Den valgte konfiguration er blevet slettet." +msgstr "Der er tilføjet et medlemskab til denne konto." #: pretix/control/logdisplay.py:737 -#, fuzzy msgid "A membership of this account has been changed." -msgstr "En svarmulighed er blevet ændret." +msgstr "Et medlemskab på denne konto er blevet ændret." #: pretix/control/logdisplay.py:738 -#, fuzzy msgid "A membership of this account has been deleted." -msgstr "Den valgte konfiguration er blevet slettet." +msgstr "Et medlemskab tilknyttet denne konto er blevet slettet." #: pretix/control/logdisplay.py:739 -#, fuzzy msgid "The account has been disabled and anonymized." -msgstr "Bestillingen er blevet tilbagebetalt." +msgstr "Kontoen er blevet deaktiveret og anonymiseret." #: pretix/control/logdisplay.py:740 -#, fuzzy msgid "A new password has been requested." -msgstr "Adgangskoden er blevet nulstillet." +msgstr "Der er anmodet om en ny adgangskode." #: pretix/control/logdisplay.py:741 -#, fuzzy msgid "A new password has been set." -msgstr "Adgangskoden er blevet nulstillet." +msgstr "Der er blevet oprettet en ny adgangskode." #: pretix/control/logdisplay.py:743 -#, fuzzy msgid "The reusable medium has been created." -msgstr "Gruppen er blevet oprettet." +msgstr "Det genanvendelige medie er blevet oprettet." #: pretix/control/logdisplay.py:744 -#, fuzzy msgid "The reusable medium has been created automatically." -msgstr "Arrangementsdatoen er blevet oprettet." +msgstr "Det genanvendelige medie er blevet oprettet automatisk." #: pretix/control/logdisplay.py:745 -#, fuzzy msgid "The reusable medium has been changed." -msgstr "Momsreglen er blevet ændret." +msgstr "Det genanvendelige medie er blevet udskiftet." #: pretix/control/logdisplay.py:746 -#, fuzzy msgid "The medium has been connected to a new ticket." -msgstr "Denne e-mail er sat i udsendelseskøen." +msgstr "Mediet er blevet knyttet til en ny sag." #: pretix/control/logdisplay.py:747 -#, fuzzy msgid "The medium has been connected to a new gift card." -msgstr "Denne e-mail er sat i udsendelseskøen." +msgstr "Mediet er blevet knyttet til et nyt gavekort." #: pretix/control/logdisplay.py:749 msgid "The event's internal comment has been updated." msgstr "Intern kommentar opdateret." #: pretix/control/logdisplay.py:750 -#, fuzzy msgid "The event has been canceled." -msgstr "Bestillingen er blevet annulleret." +msgstr "Arrangementet er blevet aflyst." #: pretix/control/logdisplay.py:751 -#, fuzzy msgid "An event has been deleted." -msgstr "Arrangementsdatoen er blevet slettet." +msgstr "En begivenhed er blevet slettet." #: pretix/control/logdisplay.py:752 msgid "A removal process for personal data has been started." -msgstr "" +msgstr "Der er iværksat en sletningsproces for personoplysninger." #: pretix/control/logdisplay.py:753 msgid "A removal process for personal data has been completed." -msgstr "" +msgstr "En sletning af personoplysninger er blevet gennemført." #: pretix/control/logdisplay.py:759 msgid "The user has been created." -msgstr "" +msgstr "Brugeren er blevet oprettet." #: pretix/control/logdisplay.py:760 #, python-brace-format @@ -18257,6 +18181,8 @@ msgid "" "A first login using {agent_type} on {os_type} from {country} has been " "detected." msgstr "" +"Der er registreret en første login med {agent_type} på {os_type} fra " +"{country}." #: pretix/control/logdisplay.py:762 pretix/control/views/user.py:474 #: pretix/control/views/user.py:534 pretix/control/views/user.py:593 @@ -18273,9 +18199,8 @@ msgid "Your two-factor emergency codes have been regenerated." msgstr "Dine sikkerhedskoder til tofaktorgodkendelse er blevet genoprettet." #: pretix/control/logdisplay.py:765 -#, fuzzy msgid "A two-factor emergency code has been generated." -msgstr "Dine sikkerhedskoder til tofaktorgodkendelse er blevet genoprettet." +msgstr "Der er genereret en tofaktorkode til nødsituationer." #: pretix/control/logdisplay.py:766 #, python-brace-format @@ -18295,20 +18220,19 @@ msgstr "" #: pretix/control/logdisplay.py:770 msgid "Notifications have been enabled." -msgstr "" +msgstr "Notifikationer er blevet aktiveret." #: pretix/control/logdisplay.py:771 msgid "Notifications have been disabled." -msgstr "" +msgstr "Notifikationer er blevet deaktiveret." #: pretix/control/logdisplay.py:772 msgid "Your notification settings have been changed." -msgstr "" +msgstr "Dine notifikationsindstillinger er blevet ændret." #: pretix/control/logdisplay.py:773 -#, fuzzy msgid "This user has been anonymized." -msgstr "Bestillingen er blevet tilbagebetalt." +msgstr "Denne bruger er blevet anonymiseret." #: pretix/control/logdisplay.py:777 msgid "Password reset mail sent." @@ -18323,20 +18247,21 @@ msgid "" "A repeated password reset has been denied, as the last request was less than " "24 hours ago." msgstr "" +"En gentagen anmodning om nulstilling af adgangskode er blevet afvist, da den " +"seneste anmodning blev fremsat for mindre end 24 timer siden." #: pretix/control/logdisplay.py:781 -#, fuzzy, python-brace-format +#, python-brace-format msgid "The organizer \"{name}\" has been deleted." -msgstr "Varianten \"{value}\" er blevet slettet." +msgstr "Arrangøren \"{name}\" er blevet slettet." #: pretix/control/logdisplay.py:782 pretix/control/logdisplay.py:1013 msgid "A voucher has been sent to a person on the waiting list." msgstr "En rabatkode er blevet sendt til en person på ventelisten." #: pretix/control/logdisplay.py:783 -#, fuzzy msgid "An entry has been transferred to another waiting list." -msgstr "En bruger er føjet til gruppen." +msgstr "En ansøgning er blevet flyttet til en anden venteliste." #: pretix/control/logdisplay.py:784 msgid "The team has been created." @@ -18351,19 +18276,16 @@ msgid "The team has been deleted." msgstr "Gruppen er blevet slettet." #: pretix/control/logdisplay.py:787 pretix/control/views/organizer.py:2381 -#, fuzzy msgid "The gate has been created." -msgstr "Gruppen er blevet oprettet." +msgstr "Porten er blevet oprettet." #: pretix/control/logdisplay.py:788 -#, fuzzy msgid "The gate has been changed." -msgstr "Kategorien er blevet ændret." +msgstr "Porten er blevet ændret." #: pretix/control/logdisplay.py:789 -#, fuzzy msgid "The gate has been deleted." -msgstr "Gruppen er blevet slettet." +msgstr "Porten er blevet slettet." #: pretix/control/logdisplay.py:790 msgctxt "subevent" @@ -18371,10 +18293,9 @@ msgid "The event date has been deleted." msgstr "Arrangementsdatoen er blevet slettet." #: pretix/control/logdisplay.py:791 -#, fuzzy msgctxt "subevent" msgid "The event date has been canceled." -msgstr "Arrangementsdatoen er blevet ændret." +msgstr "Begivenhedsdatoen er blevet aflyst." #: pretix/control/logdisplay.py:792 msgctxt "subevent" @@ -18402,58 +18323,50 @@ msgid "A quota has been removed from the event date." msgstr "En kvote er blevet fjernet fra arrangementsdatoen." #: pretix/control/logdisplay.py:797 -#, fuzzy msgid "The device has been created." -msgstr "Arrangementsdatoen er blevet oprettet." +msgstr "Enheden er blevet oprettet." #: pretix/control/logdisplay.py:798 -#, fuzzy msgid "The device has been changed." -msgstr "Voucheren er blevet ændret." +msgstr "Enheden er blevet udskiftet." #: pretix/control/logdisplay.py:799 -#, fuzzy msgid "Access of the device has been revoked." -msgstr "Enheden er blevet fjernet." +msgstr "Adgangen til enheden er blevet tilbagekaldt." #: pretix/control/logdisplay.py:800 -#, fuzzy msgid "The device has been initialized." -msgstr "Enheden er blevet fjernet." +msgstr "Enheden er blevet initialiseret." #: pretix/control/logdisplay.py:801 -#, fuzzy msgid "The access token of the device has been regenerated." -msgstr "Fakturaen er blevet genereret igen." +msgstr "Enhedens adgangstoken er blevet genereret på ny." #: pretix/control/logdisplay.py:802 msgid "The device has notified the server of an hardware or software update." msgstr "" +"Enheden har meddelt serveren, at der er en hardware- eller " +"softwareopdatering." #: pretix/control/logdisplay.py:803 -#, fuzzy msgid "The gift card has been created." -msgstr "Gruppen er blevet oprettet." +msgstr "Gavekortet er oprettet." #: pretix/control/logdisplay.py:804 pretix/control/views/organizer.py:1943 -#, fuzzy msgid "The gift card has been changed." -msgstr "Gruppen er blevet oprettet." +msgstr "Gavekortet er blevet ændret." #: pretix/control/logdisplay.py:805 -#, fuzzy msgid "A manual transaction has been performed." -msgstr "Spørgsmålet er blevet tilføjet." +msgstr "Der er udført en manuel overførsel." #: pretix/control/logdisplay.py:806 -#, fuzzy msgid "A payment has been performed." -msgstr "Betalingsbetingelser er blevet ændret." +msgstr "Der er blevet foretaget en betaling." #: pretix/control/logdisplay.py:807 -#, fuzzy msgid "A refund has been performed. " -msgstr "Bestilling oprettet." +msgstr "Der er blevet foretaget en tilbagebetaling. " #: pretix/control/logdisplay.py:808 #, python-brace-format @@ -18466,44 +18379,34 @@ msgid "The token \"{name}\" has been revoked." msgstr "Token \"{name}\" slettet." #: pretix/control/logdisplay.py:810 -#, fuzzy -#| msgid "The check-in list has been deleted." msgid "The check-in and print log state has been reset." -msgstr "Tjek-ind-listen er blevet slettet." +msgstr "Status for indtjeknings- og udskriftsloggen er blevet nulstillet." #: pretix/control/logdisplay.py:817 pretix/control/logdisplay.py:876 -#, fuzzy -#| msgid "A plugin has been enabled." msgid "The plugin has been enabled." -msgstr "En plugin er blevet aktiveret." +msgstr "Plugin'et er blevet aktiveret." #: pretix/control/logdisplay.py:818 pretix/control/logdisplay.py:877 #: pretix/control/views/event.py:497 pretix/control/views/organizer.py:757 -#, fuzzy -#| msgid "A plugin has been disabled." msgid "The plugin has been disabled." -msgstr "En plugin er blevet deaktiveret." +msgstr "Plugin'et er blevet deaktiveret." #: pretix/control/logdisplay.py:821 pretix/control/logdisplay.py:880 -#, fuzzy, python-brace-format -#| msgid "Question {val}" +#, python-brace-format msgid "Plugin {val}" -msgstr "Spørgsmål {val}" +msgstr "Plugin {val}" #: pretix/control/logdisplay.py:836 -#, fuzzy msgid "A meta property has been added to this event." -msgstr "En bruger er føjet til gruppen." +msgstr "Der er tilføjet en metaegenskab til denne begivenhed." #: pretix/control/logdisplay.py:837 -#, fuzzy msgid "A meta property has been removed from this event." -msgstr "En bruger er blevet fjernet fra gruppen." +msgstr "En metaegenskab er blevet fjernet fra denne begivenhed." #: pretix/control/logdisplay.py:838 -#, fuzzy msgid "A meta property has been changed on this event." -msgstr "En kvote er blevet ændret på arrangementsdatoen." +msgstr "En metaegenskab er blevet ændret i forbindelse med denne begivenhed." #: pretix/control/logdisplay.py:839 msgid "The event settings have been changed." @@ -18515,31 +18418,27 @@ msgstr "Indstillingerne for download af billet er blevet ændret." #: pretix/control/logdisplay.py:843 msgid "The shop has been taken live." -msgstr "" +msgstr "Butikken er nu gået live." #: pretix/control/logdisplay.py:844 msgid "The shop has been taken offline." -msgstr "" +msgstr "Butikken er blevet taget offline." #: pretix/control/logdisplay.py:845 -#, fuzzy msgid "The shop has been taken into test mode." -msgstr "Bestillingen er blevet tilbagebetalt." +msgstr "Butikken er nu sat i testtilstand." #: pretix/control/logdisplay.py:846 -#, fuzzy msgid "The test mode has been disabled." -msgstr "Den valgte dato er blevet slettet." +msgstr "Testtilstanden er blevet deaktiveret." #: pretix/control/logdisplay.py:847 -#, fuzzy msgid "The event has been created." -msgstr "Arrangementsdatoen er blevet oprettet." +msgstr "Begivenheden er blevet oprettet." #: pretix/control/logdisplay.py:848 -#, fuzzy msgid "The event details have been changed." -msgstr "Indstillingerne for arrangementet er blevet ændret." +msgstr "Begivenhedens oplysninger er blevet ændret." #: pretix/control/logdisplay.py:850 msgid "An answer option has been added to the question." @@ -18582,10 +18481,9 @@ msgid "The check-in list has been changed." msgstr "Tjek-ind-listen er blevet ændret." #: pretix/control/logdisplay.py:869 -#, fuzzy, python-brace-format -#| msgid "Check-in list" +#, python-brace-format msgid "Check-in list {val}" -msgstr "Tjek-ind-liste" +msgstr "Tjek-ind-liste {val}" #: pretix/control/logdisplay.py:896 msgid "The product has been created." @@ -18596,9 +18494,8 @@ msgid "The product has been changed." msgstr "Produktet er blevet ændret." #: pretix/control/logdisplay.py:898 -#, fuzzy msgid "The product has been reordered." -msgstr "Produktet er blevet oprettet." +msgstr "Produktet er blevet genbestilt." #: pretix/control/logdisplay.py:899 msgid "The product has been deleted." @@ -18617,37 +18514,28 @@ msgid "An add-on has been changed on this product." msgstr "En tilføjelse er blevet ændret på dette produkt." #: pretix/control/logdisplay.py:903 -#, fuzzy msgid "A bundled item has been added to this product." -msgstr "En tilføjelse er blevet føjet til dette produkt." +msgstr "Der er blevet tilføjet en medfølgende vare til dette produkt." #: pretix/control/logdisplay.py:904 -#, fuzzy msgid "A bundled item has been removed from this product." -msgstr "En tilføjelse er blevet fjernet fra dette produkt." +msgstr "En medfølgende vare er blevet fjernet fra dette produkt." #: pretix/control/logdisplay.py:905 -#, fuzzy msgid "A bundled item has been changed on this product." -msgstr "En tilføjelse er blevet ændret på dette produkt." +msgstr "En medfølgende vare er blevet ændret for dette produkt." #: pretix/control/logdisplay.py:906 -#, fuzzy -#| msgid "An add-on has been added to this product." msgid "A program time has been added to this product." -msgstr "En tilføjelse er blevet føjet til dette produkt." +msgstr "Der er blevet tilføjet en programtid til dette produkt." #: pretix/control/logdisplay.py:907 -#, fuzzy -#| msgid "An add-on has been changed on this product." msgid "A program time has been changed on this product." -msgstr "En tilføjelse er blevet ændret på dette produkt." +msgstr "En programtid for dette produkt er blevet ændret." #: pretix/control/logdisplay.py:908 -#, fuzzy -#| msgid "An add-on has been removed from this product." msgid "A program time has been removed from this product." -msgstr "En tilføjelse er blevet fjernet fra dette produkt." +msgstr "En programtid er blevet fjernet fra dette produkt." #: pretix/control/logdisplay.py:915 #, python-brace-format @@ -18665,9 +18553,9 @@ msgid "The variation \"{value}\" has been changed." msgstr "Varianten \"{value}\" er blevet ændret." #: pretix/control/logdisplay.py:934 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Payment {local_id} has been confirmed." -msgstr "Betalingsmetoden er blevet ændret." +msgstr "Betalingen {local_id} er blevet bekræftet." #: pretix/control/logdisplay.py:935 #, fuzzy, python-brace-format -- 2.52.0 From 86a51afe9e2f8223c0f1a4a05d499fb56485929b Mon Sep 17 00:00:00 2001 From: Nikita Mitasov Date: Sat, 20 Jun 2026 10:44:32 +0200 Subject: [PATCH 54/96] Translations: Update Russian Currently translated at 19.0% (1199 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ru/ powered by weblate --- src/pretix/locale/ru/LC_MESSAGES/django.po | 156 ++++++++------------- 1 file changed, 62 insertions(+), 94 deletions(-) diff --git a/src/pretix/locale/ru/LC_MESSAGES/django.po b/src/pretix/locale/ru/LC_MESSAGES/django.po index 80f803656..fa0bd6701 100644 --- a/src/pretix/locale/ru/LC_MESSAGES/django.po +++ b/src/pretix/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2026-06-20 08:00+0000\n" +"PO-Revision-Date: 2026-06-20 17:00+0000\n" "Last-Translator: Nikita Mitasov \n" "Language-Team: Russian \n" @@ -466,7 +466,7 @@ msgstr "Этот пользователь уже имеет разрешения #: pretix/api/views/cart.py:209 msgid "" "The specified voucher has already been used the maximum number of times." -msgstr "Указанный ваучер уже использован максимальное количество раз." +msgstr "Указанный промокод уже использован максимальное количество раз." #: pretix/api/views/checkin.py:645 pretix/api/views/checkin.py:652 msgid "Medium connected to other event" @@ -851,10 +851,9 @@ msgid "powered by {name} based on pretix" msgstr "на базе pretix" #: pretix/base/context.py:55 -#, fuzzy, python-format -#| msgid "event ticketing powered by pretix" +#, python-format msgid "ticketing powered by pretix" -msgstr "event ticketing powered by pretix" +msgstr "продажа билетов на базе pretix" #: pretix/base/context.py:64 msgid "source code" @@ -2762,10 +2761,8 @@ msgid "Voucher" msgstr "" #: pretix/base/exporters/orderlist.py:656 -#, fuzzy -#| msgid "Voucher code used:" msgid "Voucher budget usage" -msgstr "Использованный код ваучера:" +msgstr "Использовано по промокоду" #: pretix/base/exporters/orderlist.py:657 #, fuzzy @@ -3161,7 +3158,7 @@ msgstr "Заказы в ожидании" #: pretix/base/exporters/orderlist.py:1209 msgid "Blocking vouchers" -msgstr "Блокирующие ваучеры" +msgstr "Блокирующие промокоды" #: pretix/base/exporters/orderlist.py:1210 pretix/control/views/item.py:1149 msgid "Current user's carts" @@ -4591,7 +4588,7 @@ msgstr "Архивные события не найдены." #: pretix/base/modelimport_vouchers.py:50 pretix/base/models/vouchers.py:491 msgid "A voucher with this code already exists." -msgstr "Ваучер с этим кодом уже существует." +msgstr "Промокод с этим кодом уже существует." #: pretix/base/modelimport_vouchers.py:68 pretix/base/models/memberships.py:57 #: pretix/base/models/vouchers.py:199 pretix/control/views/vouchers.py:121 @@ -4693,7 +4690,7 @@ msgstr "" #: pretix/base/modelimport_vouchers.py:334 pretix/base/models/vouchers.py:300 msgid "Shows hidden products that match this voucher" -msgstr "Показывает скрытые продукты, которые соответствуют этому ваучеру" +msgstr "Показывает скрытые продукты, которые соответствуют этому промокоду" #: pretix/base/modelimport_vouchers.py:343 pretix/base/models/vouchers.py:304 msgid "Offer all add-on products for free when redeeming this voucher" @@ -4945,11 +4942,8 @@ msgid "Order not approved" msgstr "Срок действия заказа истёк" #: pretix/base/models/checkin.py:367 -#, fuzzy -#| msgctxt "subevent" -#| msgid "This voucher is not valid for this event date." msgid "Ticket not valid at this time" -msgstr "Этот ваучер не действителен на эту дату мероприятия." +msgstr "Билет не действителен в это время" #: pretix/base/models/checkin.py:368 #, fuzzy @@ -7746,9 +7740,9 @@ msgid "" "same value for multiple vouchers, you can get statistics on how many of them " "have been redeemed etc." msgstr "" -"Вы можете использовать это поле для группировки нескольких ваучеров. Если вы " -"введёте одно и то же значение для нескольких ваучеров, вы сможете получить " -"статистику о том, сколько из них было использовано и т. д." +"Вы можете использовать это поле для группировки нескольких промокодов. Если " +"вы введёте одно и то же значение для нескольких промокодов, вы сможете " +"получить статистику о том, сколько из них было использовано и т. д." #: pretix/base/models/vouchers.py:316 pretix/base/permissions.py:242 #: pretix/control/navigation.py:289 @@ -7793,7 +7787,7 @@ msgstr "Этот вариант не относится к этому проду #: pretix/base/models/vouchers.py:358 msgid "It is currently not possible to create vouchers for add-on products." msgstr "" -"В настоящее время невозможно создать ваучеры для дополнительных продуктов." +"В настоящее время невозможно создать промокоды для дополнительных продуктов." #: pretix/base/models/vouchers.py:360 pretix/base/models/vouchers.py:472 #, fuzzy @@ -7809,7 +7803,7 @@ msgid "" "This voucher has already been redeemed %(redeemed)s times. You cannot reduce " "the maximum number of usages below this number." msgstr "" -"Этот ваучер уже был использован %(redeemed)s раз. Вы не можете уменьшить " +"Этот промокод уже был использован %(redeemed)s раз. Вы не можете уменьшить " "максимальное количество использований ниже этого числа." #: pretix/base/models/vouchers.py:379 @@ -7828,7 +7822,7 @@ msgstr "" msgid "" "If you want this voucher to block quota, you need to select a specific date." msgstr "" -"Если вы хотите, чтобы этот ваучер блокировал квоту, вы должны выбрать " +"Если вы хотите, чтобы этот промокод блокировал квоту, вы должны выбрать " "конкретную дату." #: pretix/base/models/vouchers.py:387 @@ -7842,7 +7836,7 @@ msgid "" "You cannot create a voucher that blocks quota as the selected product or " "quota is currently sold out or completely reserved." msgstr "" -"Вы не можете создать ваучер, который блокирует квоту, поскольку выбранный " +"Вы не можете создать промокод, который блокирует квоту, поскольку выбранный " "продукт или квота в настоящее время распроданы или полностью зарезервированы." #: pretix/base/models/vouchers.py:507 @@ -7864,7 +7858,7 @@ msgstr "В листе ожидания с" #: pretix/base/models/waitinglist.py:84 msgid "Assigned voucher" -msgstr "Присвоенный ваучер" +msgstr "Присвоенный промокод" #: pretix/base/models/waitinglist.py:93 msgid "The product the user waits for." @@ -7898,7 +7892,7 @@ msgstr "Эта запись анонимизирована и больше не #: pretix/base/models/waitinglist.py:197 msgid "A voucher has already been sent to this person." -msgstr "Ваучер уже отправлен данному лицу." +msgstr "Промокод уже отправлен данному лицу." #: pretix/base/models/waitinglist.py:208 #, python-brace-format @@ -8068,8 +8062,8 @@ msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -"Вы ввели ваучер вместо подарочного сертификата. Ваучеры можно вводить только " -"на первой странице магазина под ассортиментом продуктов." +"Вы ввели промокод вместо подарочного сертификата. Промокод можно вводить " +"только на первой странице магазина под ассортиментом продуктов." #: pretix/base/payment.py:151 msgid "This gift card is not known." @@ -9358,7 +9352,7 @@ msgstr "Введённая цена слишком высока." #: pretix/base/services/cart.py:163 msgid "This voucher code is not known in our database." -msgstr "Этот код ваучера не известен в нашей базе данных." +msgstr "Этот промокод не известен в нашей базе данных." #: pretix/base/services/cart.py:165 #, fuzzy, python-format @@ -9392,7 +9386,7 @@ msgstr[2] "" msgid "" "This voucher code has already been used the maximum number of times allowed." msgstr "" -"Этот код ваучера уже был использован максимально допустимое количество раз." +"Этот промокод уже был использован максимально допустимое количество раз." #: pretix/base/services/cart.py:178 #, python-format @@ -9402,15 +9396,16 @@ msgid "" "or that you tried to redeem it before but did not complete the checkout " "process. You can try to use it again in %d minutes." msgstr "" -"Этот код ваучера в настоящее время заблокирован, так как он уже содержится в " +"Этот промокод в настоящее время заблокирован, так как он уже содержится в " "корзине. Это может означать, что кто-то другой сейчас использует этот " -"ваучер, или что вы пытались его использовать ранее, но не завершили процесс " -"оформления. Вы можете попробовать использовать его снова через %d минут." +"промокод, или что вы пытались его использовать ранее, но не завершили " +"процесс оформления. Вы можете попробовать использовать его снова через %d " +"минут." #: pretix/base/services/cart.py:183 #, python-format msgid "This voucher code can only be redeemed %d more times." -msgstr "Этот код ваучера можно использовать только ещё %d раз." +msgstr "Этот промокод можно использовать ещё %d раз." #: pretix/base/services/cart.py:184 msgid "" @@ -9423,23 +9418,20 @@ msgid "" "You already used this voucher code. Remove the associated line from your " "cart if you want to use it for a different product." msgstr "" -"Вы уже использовали этот код ваучера. Удалите связанную строку из вашей " +"Вы уже использовали этот промокод. Удалите связанную строку из вашей " "корзины, если вы хотите использовать его для другого продукта." #: pretix/base/services/cart.py:189 msgid "This voucher is expired." -msgstr "Срок действия этого ваучера истёк." +msgstr "Срок действия этого промокода истёк." #: pretix/base/services/cart.py:190 msgid "This voucher is not valid for this product." -msgstr "Этот ваучер недействителен для данного продукта." +msgstr "Этот промокод недействителен для данного продукта." #: pretix/base/services/cart.py:191 -#, fuzzy -#| msgctxt "subevent" -#| msgid "This voucher is not valid for this event date." msgid "This voucher is not valid for this seat." -msgstr "Этот ваучер не действителен на эту дату мероприятия." +msgstr "Этот промокод не действителен для данного места." #: pretix/base/services/cart.py:193 msgid "" @@ -9451,16 +9443,17 @@ msgstr "" #: pretix/base/services/cart.py:198 msgid "Your voucher is valid for a product that is currently not for sale." msgstr "" -"Ваш ваучер действителен для продукта, который в настоящее время не продаётся." +"Ваш промокод действителен для продукта, который в настоящее время не " +"продаётся." #: pretix/base/services/cart.py:199 msgctxt "subevent" msgid "This voucher is not valid for this event date." -msgstr "Этот ваучер не действителен на эту дату мероприятия." +msgstr "Этот промокод не действителен на эту дату мероприятия." #: pretix/base/services/cart.py:200 msgid "You need a valid voucher code to order this product." -msgstr "Необходим действительный код ваучера для заказа этого продукта." +msgstr "Необходим действительный промокод для заказа этого продукта." #: pretix/base/services/cart.py:201 msgctxt "subevent" @@ -9563,8 +9556,8 @@ msgid "" "You entered a gift card instead of a voucher. Gift cards can be entered " "later on when you're asked for your payment details." msgstr "" -"Вы ввели подарочный сертификат вместо ваучера. Подарочные сертификаты можно " -"ввести позже, когда вас попросят указать реквизиты для оплаты." +"Вы ввели подарочный сертификат вместо промокода. Подарочные сертификаты " +"можно ввести позже, когда вас попросят указать реквизиты для оплаты." #: pretix/base/services/cart.py:224 msgid "" @@ -9731,11 +9724,9 @@ msgid "This order is not yet approved." msgstr "Этот заказ не ожидает утверждения." #: pretix/base/services/checkin.py:999 pretix/base/services/checkin.py:1003 -#, fuzzy, python-brace-format -#| msgctxt "subevent" -#| msgid "This voucher is not valid for this event date." +#, python-brace-format msgid "This ticket is only valid after {datetime}." -msgstr "Этот ваучер не действителен на эту дату мероприятия." +msgstr "Этот билет действителен только после {datetime}." #: pretix/base/services/checkin.py:1013 pretix/base/services/checkin.py:1017 #, fuzzy, python-brace-format @@ -10154,8 +10145,8 @@ msgid "" "The voucher code used for one of the items in your cart is not known in our " "database." msgstr "" -"Код ваучера, использованный для одной из позиций в вашей корзине, неизвестен " -"в нашей базе данных." +"Промокод, использованный для одной из позиций в вашей корзине, неизвестен в " +"нашей базе данных." #: pretix/base/services/orders.py:173 msgid "" @@ -10163,30 +10154,24 @@ msgid "" "used the maximum number of times allowed. We removed this item from your " "cart." msgstr "" -"Код ваучера, использованный для одной из позиций в вашей корзине, уже был " +"Промокод, использованный для одной из позиций в вашей корзине, уже был " "использован максимально допустимое количество раз. Мы удалили эту позицию из " "вашей корзины." #: pretix/base/services/orders.py:177 -#, fuzzy -#| msgid "" -#| "The voucher code used for one of the items in your cart has already been " -#| "used the maximum number of times allowed. We removed this item from your " -#| "cart." msgid "" "The voucher code used for one of the items in your cart has already been too " "often. We adjusted the price of the item in your cart." msgstr "" -"Код ваучера, использованный для одной из позиций в вашей корзине, уже был " -"использован максимально допустимое количество раз. Мы удалили эту позицию из " -"вашей корзины." +"Промокод, применённый к одному из товаров в вашей корзине, был использован " +"слишком много раз. Мы скорректировали цену товара в вашей корзине." #: pretix/base/services/orders.py:181 msgid "" "The voucher code used for one of the items in your cart is expired. We " "removed this item from your cart." msgstr "" -"Срок действия кода ваучера, использованного для одной из позиций в вашей " +"Срок действия промокода, использованного для одной из позиций в вашей " "корзине, истёк. Мы удалили эту позицию из вашей корзины." #: pretix/base/services/orders.py:184 @@ -10194,14 +10179,12 @@ msgid "" "The voucher code used for one of the items in your cart is not valid for " "this item. We removed this item from your cart." msgstr "" -"Код ваучера, использованный для одной из позиций в вашей корзине, " +"Промокод, использованный для одной из позиций в вашей корзине, " "недействителен для этой позиции. Мы удалили эту позицию из вашей корзины." #: pretix/base/services/orders.py:186 -#, fuzzy -#| msgid "You need a valid voucher code to order this product." msgid "You need a valid voucher code to order one of the products." -msgstr "Необходим действительный код ваучера для заказа этого продукта." +msgstr "Необходим действительный промокод для одного из продуктов." #: pretix/base/services/orders.py:187 msgid "" @@ -16834,10 +16817,8 @@ msgid "An medium with this type and identifier is already registered." msgstr "Ваучер с этим кодом уже существует." #: pretix/control/forms/organizer.py:1059 -#, fuzzy -#| msgid "A voucher with this code already exists." msgid "An account with this customer ID is already registered." -msgstr "Ваучер с этим кодом уже существует." +msgstr "Аккаунт с таким ID клиента уже существует." #: pretix/control/forms/organizer.py:1076 #: pretix/control/templates/pretixcontrol/organizers/customer.html:62 @@ -16960,10 +16941,8 @@ msgid "The selected organizer has already been invited." msgstr "Выбранный организатор не найден." #: pretix/control/forms/organizer.py:1379 -#, fuzzy -#| msgid "A voucher with this code already exists." msgid "A sales channel with the same identifier already exists." -msgstr "Ваучер с этим кодом уже существует." +msgstr "Канал продаж с таким идентификатором уже существует." #: pretix/control/forms/organizer.py:1391 msgid "Events with active plugin" @@ -17246,10 +17225,8 @@ msgid "Only includes active products." msgstr "" #: pretix/control/forms/waitinglist.py:115 -#, fuzzy -#| msgid "A voucher with this code already exists." msgid "A voucher for this waiting list entry was already sent out." -msgstr "Ваучер с этим кодом уже существует." +msgstr "Промокод для данного места в листе ожидания уже отправлен." #: pretix/control/forms/waitinglist.py:125 #, fuzzy @@ -22177,7 +22154,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/fragment_quota_box_paid.html:3 #, python-format msgid "Currently available: %(num)s" -msgstr "" +msgstr "Сейчас доступно: %(num)s" #: pretix/control/templates/pretixcontrol/global_license.html:8 msgid "" @@ -24100,7 +24077,7 @@ msgstr "Начальная дата мероприятия" #: pretix/control/templates/pretixcontrol/order/index.html:498 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:55 msgid "Voucher code used:" -msgstr "Использованный код ваучера:" +msgstr "Использованный промокод:" #: pretix/control/templates/pretixcontrol/order/index.html:500 #, fuzzy, python-format @@ -27897,10 +27874,8 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/import_start.html:6 #: pretix/control/templates/pretixcontrol/vouchers/index.html:81 #: pretix/control/templates/pretixcontrol/vouchers/index.html:94 -#, fuzzy -#| msgid "Blocking vouchers" msgid "Import vouchers" -msgstr "Блокирующие ваучеры" +msgstr "Импорт промокодов" #: pretix/control/templates/pretixcontrol/vouchers/index.html:10 msgid "" @@ -34442,11 +34417,9 @@ msgstr "" #: pretix/presale/forms/renderers.py:66 #: pretix/presale/templates/pretixpresale/event/fragment_voucher_form.html:14 -#, fuzzy -#| msgid "expired" msgctxt "form" msgid "required" -msgstr "истекло" +msgstr "обязательно" #: pretix/presale/ical.py:87 pretix/presale/ical.py:146 #: pretix/presale/ical.py:182 @@ -34691,10 +34664,8 @@ msgid "Cart expired" msgstr "Срок действия корзины истёк" #: pretix/presale/templates/pretixpresale/event/checkout_base.html:36 -#, fuzzy -#| msgid "Show variants" msgid "Show full cart" -msgstr "Показать варианты" +msgstr "Показать полную корзину" #: pretix/presale/templates/pretixpresale/event/checkout_base.html:52 #: pretix/presale/templates/pretixpresale/event/index.html:86 @@ -35480,7 +35451,7 @@ msgstr "Очистить корзину" #: pretix/presale/templates/pretixpresale/event/index.html:248 #: pretix/presale/templates/pretixpresale/event/voucher_form.html:16 msgid "Redeem a voucher" -msgstr "Использовать ваучер/промокод" +msgstr "Использовать промокод" #: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:71 msgid "We're applying this voucher to your cart..." @@ -35489,7 +35460,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:79 #: pretix/presale/templates/pretixpresale/event/fragment_voucher_form.html:27 msgid "Redeem voucher" -msgstr "Использовать ваучер" +msgstr "Активировать промокод" #: pretix/presale/templates/pretixpresale/event/fragment_change_confirm.html:10 #, fuzzy @@ -35813,7 +35784,7 @@ msgstr "Изменить цену для %(item)s" #: pretix/presale/templates/pretixpresale/event/fragment_quota_left.html:4 #, python-format msgid "%(num)s currently available" -msgstr "" +msgstr "%(num)s доступно сейчас" #: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar.html:5 #: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html:5 @@ -36609,14 +36580,11 @@ msgstr "Включить вебхук" #: pretix/presale/templates/pretixpresale/event/voucher.html:36 #: pretix/presale/templates/pretixpresale/event/voucher_form.html:9 msgid "Voucher redemption" -msgstr "Использование ваучера" +msgstr "Активация промокода" #: pretix/presale/templates/pretixpresale/event/voucher.html:20 -#, fuzzy -#| msgctxt "subevent" -#| msgid "This voucher is not valid for this event date." msgid "This voucher is valid only for the following specific date and time." -msgstr "Этот ваучер не действителен на эту дату мероприятия." +msgstr "Этот промокод действителен только на указанную дату и время." #: pretix/presale/templates/pretixpresale/event/voucher.html:43 msgid "" @@ -36635,8 +36603,8 @@ msgid "" "You entered a voucher code that allows you to buy one of the following " "products at the specified price:" msgstr "" -"Вы ввели код ваучера, который позволяет вам купить один из следующих " -"продуктов по указанной цене:" +"Вы ввели промокод, который позволяет вам купить один из следующих продуктов " +"по указанной цене:" #: pretix/presale/templates/pretixpresale/event/voucher.html:112 #, python-format -- 2.52.0 From 5db1a5b8af7229822592a4138831347402182c57 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 22 Jun 2026 09:11:55 +0200 Subject: [PATCH 55/96] Rename confusingly named helpers for URL generation (#6280) * Rename confusingly named helpers for URL generation * new name * fix old call * Revert "new name" This reverts commit a6e9a488b62b9bc7c2800c402e432765a838cbc6. * New name --- doc/development/implementation/urlconfig.rst | 2 +- src/pretix/api/serializers/event.py | 4 +- src/pretix/api/serializers/order.py | 6 +- src/pretix/api/serializers/organizer.py | 8 +-- src/pretix/base/customersso/oidc.py | 4 +- src/pretix/base/datasync/sourcefields.py | 6 +- src/pretix/base/exporters/orderlist.py | 6 +- src/pretix/base/models/auth.py | 6 +- src/pretix/base/models/customers.py | 8 +-- src/pretix/base/models/event.py | 4 +- src/pretix/base/notifications.py | 4 +- src/pretix/base/payment.py | 4 +- src/pretix/base/services/export.py | 6 +- src/pretix/base/services/mail.py | 6 +- src/pretix/base/services/notifications.py | 6 +- src/pretix/base/services/placeholders.py | 58 +++++++++---------- src/pretix/base/services/update_check.py | 4 +- src/pretix/control/forms/event.py | 4 +- src/pretix/control/forms/organizer.py | 4 +- src/pretix/control/views/event.py | 6 +- src/pretix/control/views/organizer.py | 18 +++--- src/pretix/control/views/vouchers.py | 4 +- src/pretix/helpers/security.py | 4 +- src/pretix/helpers/urls.py | 10 ++++ .../multidomain/templatetags/eventurl.py | 4 +- src/pretix/multidomain/urlreverse.py | 10 ++++ src/pretix/plugins/paypal/payment.py | 12 ++-- src/pretix/plugins/paypal2/payment.py | 12 ++-- src/pretix/plugins/stripe/payment.py | 18 +++--- src/pretix/plugins/stripe/views.py | 4 +- src/pretix/presale/forms/customer.py | 4 +- src/pretix/presale/ical.py | 12 ++-- src/pretix/presale/utils.py | 4 +- src/pretix/presale/views/customer.py | 14 +++-- src/pretix/presale/views/oidc_op.py | 12 ++-- src/pretix/presale/views/order.py | 4 +- src/pretix/presale/views/organizer.py | 4 +- src/pretix/presale/views/widget.py | 12 ++-- src/tests/helpers/test_urls.py | 6 +- src/tests/multidomain/test_urlreverse.py | 10 ++-- 40 files changed, 180 insertions(+), 154 deletions(-) diff --git a/doc/development/implementation/urlconfig.rst b/doc/development/implementation/urlconfig.rst index e1f5b8641..881d7c147 100644 --- a/doc/development/implementation/urlconfig.rst +++ b/doc/development/implementation/urlconfig.rst @@ -81,7 +81,7 @@ is a python method that emulates a behavior similar to ``reverse``: If you need to communicate the URL externally, you can use a different method to ensure that it is always an absolute URL: -.. autofunction:: pretix.multidomain.urlreverse.build_absolute_uri +.. autofunction:: pretix.multidomain.urlreverse.eventreverse_absolute In addition, there is a template tag that works similar to ``url`` but takes an event or organizer object as its first argument and can be used like this:: diff --git a/src/pretix/api/serializers/event.py b/src/pretix/api/serializers/event.py index 52411e8fd..c6fef3d69 100644 --- a/src/pretix/api/serializers/event.py +++ b/src/pretix/api/serializers/event.py @@ -73,7 +73,7 @@ from pretix.base.settings import ( LazyI18nStringList, validate_event_settings, ) from pretix.base.signals import api_event_settings_fields -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute logger = logging.getLogger(__name__) @@ -173,7 +173,7 @@ class EventSerializer(SalesChannelMigrationMixin, I18nAwareModelSerializer): ) def get_event_url(self, event): - return build_absolute_uri(event, 'presale:event.index') + return eventreverse_absolute(event, 'presale:event.index') class Meta: model = Event diff --git a/src/pretix/api/serializers/order.py b/src/pretix/api/serializers/order.py index 7ce4c567d..83533a73c 100644 --- a/src/pretix/api/serializers/order.py +++ b/src/pretix/api/serializers/order.py @@ -76,7 +76,7 @@ from pretix.base.settings import ( ) from pretix.base.signals import register_ticket_outputs from pretix.helpers.countries import CachedCountries -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute logger = logging.getLogger(__name__) @@ -757,7 +757,7 @@ class PaymentURLField(serializers.URLField): def to_representation(self, instance: OrderPayment): if instance.state != OrderPayment.PAYMENT_STATE_CREATED: return None - return build_absolute_uri(instance.order.event, 'presale:event.order.pay', kwargs={ + return eventreverse_absolute(instance.order.event, 'presale:event.order.pay', kwargs={ 'order': instance.order.code, 'secret': instance.order.secret, 'payment': instance.pk, @@ -806,7 +806,7 @@ class OrderRefundSerializer(I18nAwareModelSerializer): class OrderURLField(serializers.URLField): def to_representation(self, instance: Order): - return build_absolute_uri(instance.event, 'presale:event.order', kwargs={ + return eventreverse_absolute(instance.event, 'presale:event.order', kwargs={ 'order': instance.code, 'secret': instance.secret, }) diff --git a/src/pretix/api/serializers/organizer.py b/src/pretix/api/serializers/organizer.py index 9d595f762..754dc2d65 100644 --- a/src/pretix/api/serializers/organizer.py +++ b/src/pretix/api/serializers/organizer.py @@ -58,8 +58,8 @@ from pretix.helpers.permission_migration import ( OLD_TO_NEW_EVENT_COMPAT, OLD_TO_NEW_EVENT_MIGRATION, OLD_TO_NEW_ORGANIZER_COMPAT, OLD_TO_NEW_ORGANIZER_MIGRATION, ) -from pretix.helpers.urls import build_absolute_uri as build_global_uri -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.helpers.urls import mainreverse_absolute +from pretix.multidomain.urlreverse import eventreverse_absolute logger = logging.getLogger(__name__) @@ -71,7 +71,7 @@ class OrganizerSerializer(I18nAwareModelSerializer): slug = serializers.CharField(read_only=True) def get_organizer_url(self, organizer): - return build_absolute_uri(organizer, 'presale:organizer.index') + return eventreverse_absolute(organizer, 'presale:organizer.index') class Meta: model = Organizer @@ -499,7 +499,7 @@ class TeamInviteSerializer(serializers.ModelSerializer): 'user': self, 'organizer': self.context['organizer'].name, 'team': instance.team.name, - 'url': build_global_uri('control:auth.invite', kwargs={ + 'url': mainreverse_absolute('control:auth.invite', kwargs={ 'token': instance.token }) }, diff --git a/src/pretix/base/customersso/oidc.py b/src/pretix/base/customersso/oidc.py index 638f0be2a..0e2d6e417 100644 --- a/src/pretix/base/customersso/oidc.py +++ b/src/pretix/base/customersso/oidc.py @@ -36,7 +36,7 @@ from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ from requests import RequestException -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute logger = logging.getLogger(__name__) @@ -313,7 +313,7 @@ def _get_or_create_server_keypair(organizer): def generate_id_token(customer, client, auth_time, nonce, scope, expires: datetime, scope_claims=False, with_code=None, with_access_token=None): payload = { - 'iss': build_absolute_uri(client.organizer, 'presale:organizer.index').rstrip('/'), + 'iss': eventreverse_absolute(client.organizer, 'presale:organizer.index').rstrip('/'), 'aud': client.client_id, 'exp': int(expires.timestamp()), 'iat': int(time.time()), diff --git a/src/pretix/base/datasync/sourcefields.py b/src/pretix/base/datasync/sourcefields.py index 156145cb8..426604d66 100644 --- a/src/pretix/base/datasync/sourcefields.py +++ b/src/pretix/base/datasync/sourcefields.py @@ -28,7 +28,7 @@ from django.utils.translation import gettext_lazy as _, pgettext_lazy from pretix.base.models import Checkin, InvoiceAddress, Order, Question from pretix.base.settings import PERSON_NAME_SCHEMES -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute def get_answer(op, question_identifier=None): @@ -545,7 +545,7 @@ def get_data_fields(event, for_model=None): _("Order link"), Question.TYPE_STRING, None, - lambda order: build_absolute_uri( + lambda order: eventreverse_absolute( event, 'presale:event.order', kwargs={ 'order': order.code, @@ -560,7 +560,7 @@ def get_data_fields(event, for_model=None): _("Ticket link"), Question.TYPE_STRING, None, - lambda op: build_absolute_uri( + lambda op: eventreverse_absolute( event, 'presale:event.order.position', kwargs={ 'order': op.order.code, diff --git a/src/pretix/base/exporters/orderlist.py b/src/pretix/base/exporters/orderlist.py index 7e401e17c..bf96145ec 100644 --- a/src/pretix/base/exporters/orderlist.py +++ b/src/pretix/base/exporters/orderlist.py @@ -68,7 +68,7 @@ from ...control.forms.filter import get_all_payment_providers from ...helpers import GroupConcat from ...helpers.iter import chunked_iterable from ...helpers.safe_openpyxl import remove_invalid_excel_chars -from ...multidomain.urlreverse import build_absolute_uri +from ...multidomain.urlreverse import eventreverse_absolute from ..exporter import ( ListExporter, MultiSheetListExporter, OrganizerLevelExportMixin, ) @@ -429,7 +429,7 @@ class OrderListExporter(MultiSheetListExporter): ])) row.append( - build_absolute_uri(order.event, 'presale:event.order', kwargs={ + eventreverse_absolute(order.event, 'presale:event.order', kwargs={ 'order': order.code, 'secret': order.secret, }) @@ -855,7 +855,7 @@ class OrderListExporter(MultiSheetListExporter): ])) row.append( - build_absolute_uri(order.event, 'presale:event.order.position', kwargs={ + eventreverse_absolute(order.event, 'presale:event.order.position', kwargs={ 'order': order.code, 'secret': op.web_secret, 'position': op.positionid diff --git a/src/pretix/base/models/auth.py b/src/pretix/base/models/auth.py index d783f7290..8cc12b1dc 100644 --- a/src/pretix/base/models/auth.py +++ b/src/pretix/base/models/auth.py @@ -57,7 +57,7 @@ from django_otp.models import Device from django_scopes import scopes_disabled from pretix.base.i18n import language -from pretix.helpers.urls import build_absolute_uri +from pretix.helpers.urls import mainreverse_absolute from ...helpers.countries import FastCountryField from ...helpers.u2f import pub_key_from_der, websafe_decode @@ -378,7 +378,7 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin): { 'user': self, 'messages': msg, - 'url': build_absolute_uri('control:user.settings'), + 'url': mainreverse_absolute('control:user.settings'), 'instance': settings.PRETIX_INSTANCE_NAME, }, event=None, @@ -466,7 +466,7 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin): { 'instance': settings.PRETIX_INSTANCE_NAME, 'user': self, - 'url': (build_absolute_uri('control:auth.forgot.recover') + 'url': (mainreverse_absolute('control:auth.forgot.recover') + '?id=%d&token=%s' % (self.id, default_token_generator.make_token(self))) }, None, locale=self.locale, user=self diff --git a/src/pretix/base/models/customers.py b/src/pretix/base/models/customers.py index ef9a3b26b..0b3ae5732 100644 --- a/src/pretix/base/models/customers.py +++ b/src/pretix/base/models/customers.py @@ -167,7 +167,7 @@ class Customer(LoggedModel): def send_security_notice(self, message, email=None): from pretix.base.services.mail import SendMailException, mail - from pretix.multidomain.urlreverse import build_absolute_uri + from pretix.multidomain.urlreverse import eventreverse_absolute try: with language(self.locale): @@ -178,7 +178,7 @@ class Customer(LoggedModel): { **self.get_email_context(), 'message': str(message), - 'url': build_absolute_uri(self.organizer, 'presale:organizer.customer.index') + 'url': eventreverse_absolute(self.organizer, 'presale:organizer.customer.index') }, customer=self, organizer=self.organizer, @@ -299,12 +299,12 @@ class Customer(LoggedModel): def send_activation_mail(self): from pretix.base.services.mail import mail - from pretix.multidomain.urlreverse import build_absolute_uri + from pretix.multidomain.urlreverse import eventreverse_absolute from pretix.presale.forms.customer import TokenGenerator ctx = self.get_email_context() token = TokenGenerator().make_token(self) - ctx['url'] = build_absolute_uri( + ctx['url'] = eventreverse_absolute( self.organizer, 'presale:organizer.customer.activate' ) + '?id=' + self.identifier + '&token=' + token diff --git a/src/pretix/base/models/event.py b/src/pretix/base/models/event.py index 1feed0e36..63f70d03c 100644 --- a/src/pretix/base/models/event.py +++ b/src/pretix/base/models/event.py @@ -724,7 +724,7 @@ class Event(EventMixin, LoggedModel): @property def social_image(self): - from pretix.multidomain.urlreverse import build_absolute_uri + from pretix.multidomain.urlreverse import eventreverse_absolute img = None logo_file = self.settings.get('logo_image', as_type=str, default='')[7:] @@ -742,7 +742,7 @@ class Event(EventMixin, LoggedModel): logger.exception(f'Failed to create thumbnail of {logo_file}') img = default_storage.url(logo_file) if img: - return urljoin(build_absolute_uri(self, 'presale:event.index'), img) + return urljoin(eventreverse_absolute(self, 'presale:event.index'), img) def _seats(self, ignore_voucher=None): from .seating import Seat diff --git a/src/pretix/base/notifications.py b/src/pretix/base/notifications.py index e29b94723..b25430476 100644 --- a/src/pretix/base/notifications.py +++ b/src/pretix/base/notifications.py @@ -43,7 +43,7 @@ from django.utils.translation import gettext_lazy as _, pgettext_lazy from pretix.base.models import Event, LogEntry from pretix.base.signals import register_notification_types from pretix.base.templatetags.money import money_filter -from pretix.helpers.urls import build_absolute_uri +from pretix.helpers.urls import mainreverse_absolute logger = logging.getLogger(__name__) _ALL_TYPES = None @@ -170,7 +170,7 @@ class ParametrizedOrderNotificationType(NotificationType): def build_notification(self, logentry: LogEntry): order = logentry.content_object - order_url = build_absolute_uri( + order_url = mainreverse_absolute( 'control:event.order', kwargs={ 'organizer': logentry.event.organizer.slug, diff --git a/src/pretix/base/payment.py b/src/pretix/base/payment.py index ddd42318f..1c6822a4c 100644 --- a/src/pretix/base/payment.py +++ b/src/pretix/base/payment.py @@ -71,7 +71,7 @@ from pretix.helpers import OF_SELF from pretix.helpers.countries import CachedCountries from pretix.helpers.format import format_map from pretix.helpers.money import DecimalTextInput -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute from pretix.presale.views import get_cart from pretix.presale.views.cart import cart_session, get_or_create_cart_id @@ -379,7 +379,7 @@ class BasePaymentProvider: if not self.settings.get('_hidden_seed'): self.settings.set('_hidden_seed', get_random_string(64)) - hidden_url = build_absolute_uri(self.event, 'presale:event.payment.unlock', kwargs={ + hidden_url = eventreverse_absolute(self.event, 'presale:event.payment.unlock', kwargs={ 'hash': hashlib.sha256((self.settings._hidden_seed + self.event.slug).encode()).hexdigest(), }) diff --git a/src/pretix/base/services/export.py b/src/pretix/base/services/export.py index c04119cf6..93d214497 100644 --- a/src/pretix/base/services/export.py +++ b/src/pretix/base/services/export.py @@ -51,7 +51,7 @@ from pretix.base.signals import ( ) from pretix.celery_app import app from pretix.helpers import OF_SELF, repeatable_reads_transaction -from pretix.helpers.urls import build_absolute_uri +from pretix.helpers.urls import mainreverse_absolute logger = logging.getLogger(__name__) @@ -455,7 +455,7 @@ def scheduled_organizer_export(self, organizer: Organizer, schedule: int) -> Non schedule, organizer, exporter, - build_absolute_uri( + mainreverse_absolute( 'control:organizer.export', kwargs={ 'organizer': organizer.slug, @@ -481,7 +481,7 @@ def scheduled_event_export(self, event: Event, schedule: int) -> None: schedule, event, exporter, - build_absolute_uri( + mainreverse_absolute( 'control:event.orders.export', kwargs={ 'event': event.slug, diff --git a/src/pretix/base/services/mail.py b/src/pretix/base/services/mail.py index b5fae6ba7..3b1b13f9d 100644 --- a/src/pretix/base/services/mail.py +++ b/src/pretix/base/services/mail.py @@ -85,7 +85,7 @@ from pretix.helpers.format import ( FormattedString, PlainHtmlAlternativeString, SafeFormatter, format_map, ) from pretix.helpers.hierarkey import clean_filename -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute from pretix.presale.ical import get_private_icals logger = logging.getLogger('pretix.base.mail') @@ -997,7 +997,7 @@ def _wrap_plain_body(content_plain, signature, event, order, position, no_order_ body_plain += _( "You can view your order details at the following URL:\n{orderurl}." ).replace("\n", "\r\n").format( - orderurl=build_absolute_uri( + orderurl=eventreverse_absolute( order.event, 'presale:event.order.position', kwargs={ 'order': order.code, 'secret': position.web_secret, @@ -1013,7 +1013,7 @@ def _wrap_plain_body(content_plain, signature, event, order, position, no_order_ body_plain += _( "You can view your order details at the following URL:\n{orderurl}." ).replace("\n", "\r\n").format( - event=event.name, orderurl=build_absolute_uri( + event=event.name, orderurl=eventreverse_absolute( order.event, 'presale:event.order.open', kwargs={ 'order': order.code, 'secret': order.secret, diff --git a/src/pretix/base/services/notifications.py b/src/pretix/base/services/notifications.py index 0a70e7c32..950e111c6 100644 --- a/src/pretix/base/services/notifications.py +++ b/src/pretix/base/services/notifications.py @@ -37,7 +37,7 @@ from pretix.base.services.tasks import ProfiledTask, TransactionAwareTask from pretix.base.signals import notification from pretix.celery_app import app from pretix.helpers.celery import get_task_priority -from pretix.helpers.urls import build_absolute_uri +from pretix.helpers.urls import mainreverse_absolute @app.task(base=TransactionAwareTask, acks_late=True, max_retries=9, default_retry_delay=900) @@ -136,10 +136,10 @@ def send_notification_mail(notification: Notification, user: User): 'site_url': settings.SITE_URL, 'color': settings.PRETIX_PRIMARY_COLOR, 'notification': notification, - 'settings_url': build_absolute_uri( + 'settings_url': mainreverse_absolute( 'control:user.settings.notifications', ), - 'disable_url': build_absolute_uri( + 'disable_url': mainreverse_absolute( 'control:user.settings.notifications.off', kwargs={ 'token': user.notifications_token, diff --git a/src/pretix/base/services/placeholders.py b/src/pretix/base/services/placeholders.py index f9b81554d..1776b25e0 100644 --- a/src/pretix/base/services/placeholders.py +++ b/src/pretix/base/services/placeholders.py @@ -327,7 +327,7 @@ def get_best_name(position_or_address, parts=False): @receiver(register_text_placeholders, dispatch_uid="pretixbase_register_text_placeholders") def base_placeholders(sender, **kwargs): - from pretix.multidomain.urlreverse import build_absolute_uri + from pretix.multidomain.urlreverse import eventreverse_absolute def _event_sample(event): if event.has_subevents: @@ -388,14 +388,14 @@ def base_placeholders(sender, **kwargs): lambda event: LazyDate(now() + timedelta(days=15)) ), SimpleFunctionalTextPlaceholder( - 'url', ['order', 'event'], lambda order, event: build_absolute_uri( + 'url', ['order', 'event'], lambda order, event: eventreverse_absolute( event, 'presale:event.order.open', kwargs={ 'order': order.code, 'secret': order.secret, 'hash': order.email_confirm_secret() } - ), lambda event: build_absolute_uri( + ), lambda event: eventreverse_absolute( event, 'presale:event.order.open', kwargs={ 'order': 'F8VVL', @@ -406,7 +406,7 @@ def base_placeholders(sender, **kwargs): ), SimpleButtonPlaceholder( 'url_button', ['order', 'event'], - url_func=lambda order, event: build_absolute_uri( + url_func=lambda order, event: eventreverse_absolute( event, 'presale:event.order.open', kwargs={ 'order': order.code, @@ -415,7 +415,7 @@ def base_placeholders(sender, **kwargs): } ), text_func=lambda order, event: _("View order details"), - sample_url_func=lambda event: build_absolute_uri( + sample_url_func=lambda event: eventreverse_absolute( event, 'presale:event.order.open', kwargs={ 'order': 'F8VVL', @@ -426,13 +426,13 @@ def base_placeholders(sender, **kwargs): sample_text_func=lambda event: _("View order details"), ), SimpleFunctionalTextPlaceholder( - 'url_info_change', ['order', 'event'], lambda order, event: build_absolute_uri( + 'url_info_change', ['order', 'event'], lambda order, event: eventreverse_absolute( event, 'presale:event.order.modify', kwargs={ 'order': order.code, 'secret': order.secret, } - ), lambda event: build_absolute_uri( + ), lambda event: eventreverse_absolute( event, 'presale:event.order.modify', kwargs={ 'order': 'F8VVL', @@ -441,13 +441,13 @@ def base_placeholders(sender, **kwargs): ), ), SimpleFunctionalTextPlaceholder( - 'url_products_change', ['order', 'event'], lambda order, event: build_absolute_uri( + 'url_products_change', ['order', 'event'], lambda order, event: eventreverse_absolute( event, 'presale:event.order.change', kwargs={ 'order': order.code, 'secret': order.secret, } - ), lambda event: build_absolute_uri( + ), lambda event: eventreverse_absolute( event, 'presale:event.order.change', kwargs={ 'order': 'F8VVL', @@ -456,13 +456,13 @@ def base_placeholders(sender, **kwargs): ), ), SimpleFunctionalTextPlaceholder( - 'url_cancel', ['order', 'event'], lambda order, event: build_absolute_uri( + 'url_cancel', ['order', 'event'], lambda order, event: eventreverse_absolute( event, 'presale:event.order.cancel', kwargs={ 'order': order.code, 'secret': order.secret, } - ), lambda event: build_absolute_uri( + ), lambda event: eventreverse_absolute( event, 'presale:event.order.cancel', kwargs={ 'order': 'F8VVL', @@ -471,7 +471,7 @@ def base_placeholders(sender, **kwargs): ), ), SimpleFunctionalTextPlaceholder( - 'url', ['event', 'position'], lambda event, position: build_absolute_uri( + 'url', ['event', 'position'], lambda event, position: eventreverse_absolute( event, 'presale:event.order.position', kwargs={ @@ -480,7 +480,7 @@ def base_placeholders(sender, **kwargs): 'position': position.positionid } ), - lambda event: build_absolute_uri( + lambda event: eventreverse_absolute( event, 'presale:event.order.position', kwargs={ 'order': 'F8VVL', @@ -491,7 +491,7 @@ def base_placeholders(sender, **kwargs): ), SimpleButtonPlaceholder( 'url_button', ['event', 'position'], - url_func=lambda event, position: build_absolute_uri( + url_func=lambda event, position: eventreverse_absolute( event, 'presale:event.order.position', kwargs={ 'order': position.order.code, @@ -500,7 +500,7 @@ def base_placeholders(sender, **kwargs): } ), text_func=lambda event, position: _("View registration details"), - sample_url_func=lambda event: build_absolute_uri( + sample_url_func=lambda event: eventreverse_absolute( event, 'presale:event.order.position', kwargs={ 'order': 'F8VVL', @@ -511,14 +511,14 @@ def base_placeholders(sender, **kwargs): sample_text_func=lambda event: _("View registration details"), ), SimpleFunctionalTextPlaceholder( - 'url_info_change', ['position', 'event'], lambda position, event: build_absolute_uri( + 'url_info_change', ['position', 'event'], lambda position, event: eventreverse_absolute( event, 'presale:event.order.position.modify', kwargs={ 'order': position.order.code, 'secret': position.web_secret, 'position': position.positionid } - ), lambda event: build_absolute_uri( + ), lambda event: eventreverse_absolute( event, 'presale:event.order.position.modify', kwargs={ 'order': 'F8VVL', @@ -528,14 +528,14 @@ def base_placeholders(sender, **kwargs): ), ), SimpleFunctionalTextPlaceholder( - 'url_products_change', ['position', 'event'], lambda position, event: build_absolute_uri( + 'url_products_change', ['position', 'event'], lambda position, event: eventreverse_absolute( event, 'presale:event.order.position.change', kwargs={ 'order': position.order.code, 'secret': position.web_secret, 'position': position.positionid } - ), lambda event: build_absolute_uri( + ), lambda event: eventreverse_absolute( event, 'presale:event.order.position.change', kwargs={ 'order': 'F8VVL', @@ -581,20 +581,20 @@ def base_placeholders(sender, **kwargs): ), SimpleFunctionalTextPlaceholder( 'url_remove', ['waiting_list_voucher', 'event'], - lambda waiting_list_voucher, event: build_absolute_uri( + lambda waiting_list_voucher, event: eventreverse_absolute( event, 'presale:event.waitinglist.remove' ) + '?voucher=' + waiting_list_voucher.code, - lambda event: build_absolute_uri( + lambda event: eventreverse_absolute( event, 'presale:event.waitinglist.remove', ) + '?voucher=68CYU2H6ZTP3WLK5', ), SimpleFunctionalTextPlaceholder( 'url', ['waiting_list_voucher', 'event'], - lambda waiting_list_voucher, event: build_absolute_uri( + lambda waiting_list_voucher, event: eventreverse_absolute( event, 'presale:event.redeem' ) + '?voucher=' + waiting_list_voucher.code, - lambda event: build_absolute_uri( + lambda event: eventreverse_absolute( event, 'presale:event.redeem', ) + '?voucher=68CYU2H6ZTP3WLK5', @@ -611,7 +611,7 @@ def base_placeholders(sender, **kwargs): 'orders', ['event', 'orders'], lambda event, orders: '\n' + '\n\n'.join( '* {} - {}'.format( order.full_code, - build_absolute_uri(event, 'presale:event.order.open', kwargs={ + eventreverse_absolute(event, 'presale:event.order.open', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug, 'order': order.code, @@ -623,7 +623,7 @@ def base_placeholders(sender, **kwargs): ), lambda event: '\n' + '\n\n'.join( '* {} - {}'.format( '{}-{}'.format(event.slug.upper(), order['code']), - build_absolute_uri(event, 'presale:event.order.open', kwargs={ + eventreverse_absolute(event, 'presale:event.order.open', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug, 'order': order['code'], @@ -662,13 +662,13 @@ def base_placeholders(sender, **kwargs): # join vouchers with two spaces at end of line so markdown-parser inserts a
'voucher_url_list', ['event', 'voucher_list'], lambda event, voucher_list: ' \n'.join([ - build_absolute_uri( + eventreverse_absolute( event, 'presale:event.redeem' ) + '?voucher=' + c for c in voucher_list ]), lambda event: ' \n'.join([ - build_absolute_uri( + eventreverse_absolute( event, 'presale:event.redeem' ) + '?voucher=' + c for c in ['68CYU2H6ZTP3WLK5', '7MB94KKPVEPSMVF2'] @@ -676,10 +676,10 @@ def base_placeholders(sender, **kwargs): inline=False, ), SimpleFunctionalTextPlaceholder( - 'url', ['event', 'voucher_list'], lambda event, voucher_list: build_absolute_uri(event, 'presale:event.index', kwargs={ + 'url', ['event', 'voucher_list'], lambda event, voucher_list: eventreverse_absolute(event, 'presale:event.index', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug, - }), lambda event: build_absolute_uri(event, 'presale:event.index', kwargs={ + }), lambda event: eventreverse_absolute(event, 'presale:event.index', kwargs={ 'event': event.slug, 'organizer': event.organizer.slug, }) diff --git a/src/pretix/base/services/update_check.py b/src/pretix/base/services/update_check.py index 5a23b3388..af06ece09 100644 --- a/src/pretix/base/services/update_check.py +++ b/src/pretix/base/services/update_check.py @@ -37,7 +37,7 @@ from pretix.base.services.mail import mail from pretix.base.settings import GlobalSettingsObject from pretix.base.signals import periodic_task from pretix.celery_app import app -from pretix.helpers.urls import build_absolute_uri +from pretix.helpers.urls import mainreverse_absolute @receiver(signal=periodic_task) @@ -121,7 +121,7 @@ def send_update_notification_email(): ) ), { - 'url': build_absolute_uri('control:global.update') + 'url': mainreverse_absolute('control:global.update') }, ) diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index 6d672f204..ca5a34d4c 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -80,7 +80,7 @@ from pretix.control.forms.widgets import Select2 from pretix.helpers.countries import CachedCountries from pretix.multidomain.models import AlternativeDomainAssignment, KnownDomain from pretix.multidomain.urlreverse import ( - build_absolute_uri, get_organizer_domain, + eventreverse_absolute, get_organizer_domain, ) from pretix.plugins.banktransfer.payment import BankTransfer from pretix.presale.style import get_fonts @@ -219,7 +219,7 @@ class EventWizardBasicsForm(I18nModelForm): self.fields['location'].widget.attrs['placeholder'] = _( 'Sample Conference Center\nHeidelberg, Germany' ) - self.fields['slug'].widget.prefix = build_absolute_uri(self.organizer, 'presale:organizer.index') + self.fields['slug'].widget.prefix = eventreverse_absolute(self.organizer, 'presale:organizer.index') self.fields['tax_rate']._required = True # Do not render as optional because it is conditionally required if self.has_subevents: del self.fields['presale_start'] diff --git a/src/pretix/control/forms/organizer.py b/src/pretix/control/forms/organizer.py index f4175ddcd..007856250 100644 --- a/src/pretix/control/forms/organizer.py +++ b/src/pretix/control/forms/organizer.py @@ -88,7 +88,7 @@ from pretix.control.forms.event import ( ) from pretix.control.forms.widgets import Select2, Select2Multiple from pretix.multidomain.models import KnownDomain -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute class OrganizerForm(I18nModelForm): @@ -791,7 +791,7 @@ class MailSettingsForm(SettingsForm): } if 'url' in base_parameters: - placeholders['url'] = build_absolute_uri( + placeholders['url'] = eventreverse_absolute( self.organizer, 'presale:organizer.customer.activate' ) + '?token=' + get_random_string(30) diff --git a/src/pretix/control/views/event.py b/src/pretix/control/views/event.py index d566050fc..6949f7675 100644 --- a/src/pretix/control/views/event.py +++ b/src/pretix/control/views/event.py @@ -97,7 +97,9 @@ from pretix.control.permissions import EventPermissionRequiredMixin from pretix.control.views.mailsetup import MailSettingsSetupView from pretix.control.views.user import RecentAuthenticationRequiredMixin from pretix.helpers.database import rolledback_transaction -from pretix.multidomain.urlreverse import build_absolute_uri, get_event_domain +from pretix.multidomain.urlreverse import ( + eventreverse_absolute, get_event_domain, +) from pretix.presale.views.widget import ( version_default as widget_version_default, ) @@ -1734,7 +1736,7 @@ class EventQRCode(EventPermissionRequiredMixin, View): permission = None def get(self, request, *args, filetype, **kwargs): - url = build_absolute_uri(request.event, 'presale:event.index') + url = eventreverse_absolute(request.event, 'presale:event.index') if "url" in request.GET: if url_has_allowed_host_and_scheme(request.GET["url"], allowed_hosts=[urlparse(url).netloc]): diff --git a/src/pretix/control/views/organizer.py b/src/pretix/control/views/organizer.py index c7c64fc90..b891349df 100644 --- a/src/pretix/control/views/organizer.py +++ b/src/pretix/control/views/organizer.py @@ -139,8 +139,8 @@ from pretix.helpers import OF_SELF, GroupConcat from pretix.helpers.compat import CompatDeleteView from pretix.helpers.dicts import merge_dicts from pretix.helpers.format import SafeFormatter, format_map -from pretix.helpers.urls import build_absolute_uri as build_global_uri -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.helpers.urls import mainreverse_absolute +from pretix.multidomain.urlreverse import eventreverse_absolute from pretix.presale.forms.customer import TokenGenerator logger = logging.getLogger(__name__) @@ -1039,7 +1039,7 @@ class TeamMemberView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, 'user': self, 'organizer': self.request.organizer.name, 'team': instance.team.name, - 'url': build_global_uri('control:auth.invite', kwargs={ + 'url': mainreverse_absolute('control:auth.invite', kwargs={ 'token': instance.token }) }, @@ -2851,10 +2851,12 @@ class SSOProviderUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequire def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) - ctx['redirect_uri'] = build_absolute_uri(self.request.organizer, 'presale:organizer.customer.login.return', - kwargs={ - 'provider': self.object.pk - }) + ctx['redirect_uri'] = eventreverse_absolute( + self.request.organizer, 'presale:organizer.customer.login.return', + kwargs={ + 'provider': self.object.pk + } + ) return ctx def get_form_kwargs(self): @@ -3085,7 +3087,7 @@ class CustomerDetailView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMi self.customer.log_action('pretix.customer.password.resetrequested', {}, user=self.request.user) ctx = self.customer.get_email_context() token = TokenGenerator().make_token(self.customer) - ctx['url'] = build_absolute_uri( + ctx['url'] = eventreverse_absolute( self.request.organizer, 'presale:organizer.customer.recoverpw' ) + '?id=' + self.customer.identifier + '&token=' + token diff --git a/src/pretix/control/views/vouchers.py b/src/pretix/control/views/vouchers.py index 4745f887c..c5ae68eb2 100644 --- a/src/pretix/control/views/vouchers.py +++ b/src/pretix/control/views/vouchers.py @@ -77,7 +77,7 @@ from pretix.control.views import PaginationMixin from pretix.helpers.compat import CompatDeleteView from pretix.helpers.format import SafeFormatter, format_map from pretix.helpers.models import modelcopy -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute class VoucherList(PaginationMixin, EventPermissionRequiredMixin, ListView): @@ -338,7 +338,7 @@ class VoucherUpdate(EventPermissionRequiredMixin, UpdateView): } if self.object.subevent_id: url_params['subevent'] = self.object.subevent_id - ctx['url'] = build_absolute_uri(self.request.event, "presale:event.redeem") + "?" + urlencode(url_params) + ctx['url'] = eventreverse_absolute(self.request.event, "presale:event.redeem") + "?" + urlencode(url_params) return ctx diff --git a/src/pretix/helpers/security.py b/src/pretix/helpers/security.py index d09fbe0f3..b9aa92456 100644 --- a/src/pretix/helpers/security.py +++ b/src/pretix/helpers/security.py @@ -35,7 +35,7 @@ from geoip2.errors import AddressNotFoundError from pretix.base.i18n import language from pretix.base.services.mail import mail from pretix.helpers.http import get_client_ip -from pretix.helpers.urls import build_absolute_uri +from pretix.helpers.urls import mainreverse_absolute logger = logging.getLogger(__name__) @@ -175,7 +175,7 @@ def handle_login_source(user, request): 'source': src, 'country': Country(str(country)).name if country else _('Unknown country'), 'instance': settings.PRETIX_INSTANCE_NAME, - 'url': build_absolute_uri('control:user.settings') + 'url': mainreverse_absolute('control:user.settings') }, event=None, user=user, diff --git a/src/pretix/helpers/urls.py b/src/pretix/helpers/urls.py index 7a91d498a..bb586f2d2 100644 --- a/src/pretix/helpers/urls.py +++ b/src/pretix/helpers/urls.py @@ -19,6 +19,7 @@ # You should have received a copy of the GNU Affero General Public License along with this program. If not, see # . # +import warnings from urllib.parse import urljoin from django.conf import settings @@ -26,6 +27,15 @@ from django.urls import reverse def build_absolute_uri(urlname, args=None, kwargs=None): + warnings.warn( + 'Usage of build_absolute_uri is confusing since there are many functions with that name. ' + 'Replace this usage with ', + DeprecationWarning + ) + return mainreverse_absolute(urlname, args, kwargs) + + +def mainreverse_absolute(urlname, args=None, kwargs=None): from pretix.multidomain import maindomain_urlconf return urljoin(settings.SITE_URL, reverse(urlname, args=args, kwargs=kwargs, urlconf=maindomain_urlconf)) diff --git a/src/pretix/multidomain/templatetags/eventurl.py b/src/pretix/multidomain/templatetags/eventurl.py index 002aa357d..84284ca59 100644 --- a/src/pretix/multidomain/templatetags/eventurl.py +++ b/src/pretix/multidomain/templatetags/eventurl.py @@ -27,7 +27,7 @@ from django.urls import NoReverseMatch from django.utils.encoding import smart_str from django.utils.html import conditional_escape -from pretix.multidomain.urlreverse import build_absolute_uri, mainreverse +from pretix.multidomain.urlreverse import eventreverse_absolute, mainreverse register = template.Library() @@ -49,7 +49,7 @@ class EventURLNode(URLNode): url = '' try: if self.absolute: - url = build_absolute_uri(event, view_name, kwargs=kwargs) + url = eventreverse_absolute(event, view_name, kwargs=kwargs) elif self.event is False: url = mainreverse(view_name, kwargs) else: diff --git a/src/pretix/multidomain/urlreverse.py b/src/pretix/multidomain/urlreverse.py index f1577b096..31419e0fb 100644 --- a/src/pretix/multidomain/urlreverse.py +++ b/src/pretix/multidomain/urlreverse.py @@ -32,6 +32,7 @@ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under the License. +import warnings from urllib.parse import urljoin, urlsplit from django.conf import settings @@ -190,6 +191,15 @@ def eventreverse(obj, name, kwargs=None): def build_absolute_uri(obj, urlname, kwargs=None): + warnings.warn( + 'Usage of build_absolute_uri is confusing since there are many functions with that name. ' + 'Replace this usage with eventreverse_absolute', + DeprecationWarning + ) + return eventreverse_absolute(obj, urlname, kwargs) + + +def eventreverse_absolute(obj, urlname, kwargs=None): """ Works similar to ``eventreverse`` but always returns an absolute URL. diff --git a/src/pretix/plugins/paypal/payment.py b/src/pretix/plugins/paypal/payment.py index 9acc5ae4b..a29b37546 100644 --- a/src/pretix/plugins/paypal/payment.py +++ b/src/pretix/plugins/paypal/payment.py @@ -58,7 +58,7 @@ from pretix.base.forms import SecretKeySettingsField from pretix.base.models import Event, Order, OrderPayment, OrderRefund, Quota from pretix.base.payment import BasePaymentProvider, PaymentException from pretix.base.settings import SettingsSandbox -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute from pretix.plugins.paypal.api import Api from pretix.plugins.paypal.models import ReferencedPayPalObject @@ -268,8 +268,8 @@ class Paypal(BasePaymentProvider): "payment_method": "paypal", }, "redirect_urls": { - "return_url": build_absolute_uri(request.event, 'plugins:paypal:return', kwargs=kwargs), - "cancel_url": build_absolute_uri(request.event, 'plugins:paypal:abort', kwargs=kwargs), + "return_url": eventreverse_absolute(request.event, 'plugins:paypal:return', kwargs=kwargs), + "cancel_url": eventreverse_absolute(request.event, 'plugins:paypal:abort', kwargs=kwargs), }, "transactions": [ { @@ -351,7 +351,7 @@ class Paypal(BasePaymentProvider): if request.session.get('iframe_session', False): signer = signing.Signer(salt='safe-redirect') return ( - build_absolute_uri(request.event, 'plugins:paypal:redirect') + '?url=' + + eventreverse_absolute(request.event, 'plugins:paypal:redirect') + '?url=' + urllib.parse.quote(signer.sign(link.href)) ) else: @@ -613,8 +613,8 @@ class Paypal(BasePaymentProvider): "payment_method": "paypal", }, "redirect_urls": { - "return_url": build_absolute_uri(request.event, 'plugins:paypal:return'), - "cancel_url": build_absolute_uri(request.event, 'plugins:paypal:abort'), + "return_url": eventreverse_absolute(request.event, 'plugins:paypal:return'), + "cancel_url": eventreverse_absolute(request.event, 'plugins:paypal:abort'), }, "transactions": [ { diff --git a/src/pretix/plugins/paypal2/payment.py b/src/pretix/plugins/paypal2/payment.py index 1ee0338f6..db3654415 100644 --- a/src/pretix/plugins/paypal2/payment.py +++ b/src/pretix/plugins/paypal2/payment.py @@ -56,8 +56,8 @@ from pretix.base.models import Event, Order, OrderPayment, OrderRefund, Quota from pretix.base.payment import BasePaymentProvider, PaymentException from pretix.base.settings import SettingsSandbox from pretix.helpers import OF_SELF -from pretix.helpers.urls import build_absolute_uri as build_global_uri -from pretix.multidomain.urlreverse import build_absolute_uri, eventreverse +from pretix.helpers.urls import mainreverse_absolute +from pretix.multidomain.urlreverse import eventreverse, eventreverse_absolute from pretix.plugins.paypal2.client.core.environment import ( LiveEnvironment, SandboxEnvironment, ) @@ -264,7 +264,7 @@ class PaypalSettingsHolder(BasePaymentProvider): settings_content = "
%s
%s
" % ( _('Please configure a PayPal Webhook to the following endpoint in order to automatically cancel orders ' 'when payments are refunded externally.'), - build_global_uri('plugins:paypal2:webhook') + mainreverse_absolute('plugins:paypal2:webhook') ) if self.event.currency not in SUPPORTED_CURRENCIES: @@ -321,7 +321,7 @@ class PaypalSettingsHolder(BasePaymentProvider): ], "partner_config_override": { "partner_logo_url": urllib.parse.urljoin(settings.SITE_URL, static('pretixbase/img/pretix-logo.svg')), - "return_url": build_global_uri('plugins:paypal2:isu.return', kwargs={ + "return_url": mainreverse_absolute('plugins:paypal2:isu.return', kwargs={ 'organizer': self.event.organizer.slug, 'event': self.event.slug, }) @@ -585,8 +585,8 @@ class PaypalMethod(BasePaymentProvider): 'locale': request.LANGUAGE_CODE.split('-')[0], 'shipping_preference': 'NO_SHIPPING', # 'SET_PROVIDED_ADDRESS', # Do not set on non-ship order? 'user_action': 'CONTINUE', - 'return_url': build_absolute_uri(request.event, 'plugins:paypal2:return', kwargs=kwargs), - 'cancel_url': build_absolute_uri(request.event, 'plugins:paypal2:abort', kwargs=kwargs), + 'return_url': eventreverse_absolute(request.event, 'plugins:paypal2:return', kwargs=kwargs), + 'cancel_url': eventreverse_absolute(request.event, 'plugins:paypal2:abort', kwargs=kwargs), }, }) response = self.client.execute(paymentreq) diff --git a/src/pretix/plugins/stripe/payment.py b/src/pretix/plugins/stripe/payment.py index 9bf307362..a65204f14 100644 --- a/src/pretix/plugins/stripe/payment.py +++ b/src/pretix/plugins/stripe/payment.py @@ -75,8 +75,8 @@ from pretix.base.settings import SettingsSandbox from pretix.helpers import OF_SELF from pretix.helpers.countries import CachedCountries from pretix.helpers.http import get_client_ip -from pretix.helpers.urls import build_absolute_uri as build_global_uri -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.helpers.urls import mainreverse_absolute +from pretix.multidomain.urlreverse import eventreverse_absolute from pretix.plugins.stripe.forms import StripeKeyValidator from pretix.plugins.stripe.models import ( ReferencedStripeObject, RegisteredApplePayDomain, @@ -197,7 +197,7 @@ class StripeSettingsHolder(BasePaymentProvider): ).format( self.settings.connect_client_id, request.session['payment_stripe_oauth_token'], - urllib.parse.quote(build_global_uri('plugins:stripe:oauth.return')), + urllib.parse.quote(mainreverse_absolute('plugins:stripe:oauth.return')), ) def settings_content_render(self, request): @@ -229,7 +229,7 @@ class StripeSettingsHolder(BasePaymentProvider): _('Please configure a Stripe Webhook to ' 'the following endpoint in order to automatically cancel orders when charges are refunded externally ' 'and to process asynchronous payment methods like SOFORT.'), - build_global_uri('plugins:stripe:webhook') + mainreverse_absolute('plugins:stripe:webhook') ) @property @@ -746,7 +746,7 @@ class StripeMethod(BasePaymentProvider): def redirect(self, request, url): if request.session.get('iframe_session', False): return ( - build_absolute_uri(request.event, 'plugins:stripe:redirect') + + eventreverse_absolute(request.event, 'plugins:stripe:redirect') + '?data=' + signing.dumps({ 'url': url, 'session': { @@ -941,7 +941,7 @@ class StripeMethod(BasePaymentProvider): }, # TODO: Is this sufficient? idempotency_key=str(self.event.id) + payment.order.code + idempotency_key_seed, - return_url=build_absolute_uri(self.event, 'plugins:stripe:sca.return', kwargs={ + return_url=eventreverse_absolute(self.event, 'plugins:stripe:sca.return', kwargs={ 'order': payment.order.code, 'payment': payment.pk, 'hash': payment.order.tagged_secret('plugins:stripe'), @@ -1047,13 +1047,13 @@ class StripeMethod(BasePaymentProvider): raise PaymentException(_('Stripe reported an error: %s') % intent.last_payment_error.message) def _redirect_to_sca(self, request, payment): - url = build_absolute_uri(self.event, 'plugins:stripe:sca', kwargs={ + url = eventreverse_absolute(self.event, 'plugins:stripe:sca', kwargs={ 'order': payment.order.code, 'payment': payment.pk, 'hash': payment.order.tagged_secret('plugins:stripe'), }) if not self.redirect_in_widget_allowed and request.session.get('iframe_session', False): - return build_absolute_uri(self.event, 'plugins:stripe:redirect') + '?data=' + signing.dumps({ + return eventreverse_absolute(self.event, 'plugins:stripe:redirect') + '?data=' + signing.dumps({ 'url': url, 'session': {}, }, salt='safe-redirect') @@ -1068,7 +1068,7 @@ class StripeMethod(BasePaymentProvider): intent = stripe.PaymentIntent.confirm( payment_info['id'], - return_url=build_absolute_uri(self.event, 'plugins:stripe:sca.return', kwargs={ + return_url=eventreverse_absolute(self.event, 'plugins:stripe:sca.return', kwargs={ 'order': payment.order.code, 'payment': payment.pk, 'hash': payment.order.tagged_secret('plugins:stripe'), diff --git a/src/pretix/plugins/stripe/views.py b/src/pretix/plugins/stripe/views.py index a9590f49a..ae13aaf39 100644 --- a/src/pretix/plugins/stripe/views.py +++ b/src/pretix/plugins/stripe/views.py @@ -64,7 +64,7 @@ from pretix.control.views.event import DecoupleMixin from pretix.control.views.organizer import OrganizerDetailViewMixin from pretix.helpers import OF_SELF from pretix.helpers.http import redirect_to_url -from pretix.multidomain.urlreverse import build_absolute_uri, eventreverse +from pretix.multidomain.urlreverse import eventreverse, eventreverse_absolute from pretix.plugins.stripe.forms import OrganizerStripeSettingsForm from pretix.plugins.stripe.models import ReferencedStripeObject from pretix.plugins.stripe.tasks import ( @@ -90,7 +90,7 @@ def redirect_view(request, *args, **kwargs): params = request.GET.copy() params['go'] = '1' r = render(request, 'pretixplugins/stripe/redirect.html', { - 'url': build_absolute_uri(request.event, 'plugins:stripe:redirect') + '?' + urllib.parse.urlencode(params), + 'url': eventreverse_absolute(request.event, 'plugins:stripe:redirect') + '?' + urllib.parse.urlencode(params), }) r._csp_ignore = True return r diff --git a/src/pretix/presale/forms/customer.py b/src/pretix/presale/forms/customer.py index 79d24cb80..562ab3568 100644 --- a/src/pretix/presale/forms/customer.py +++ b/src/pretix/presale/forms/customer.py @@ -44,7 +44,7 @@ from pretix.base.forms.questions import ( from pretix.base.i18n import get_language_without_region from pretix.base.models import Customer from pretix.helpers.http import get_client_ip -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute class TokenGenerator(PasswordResetTokenGenerator): @@ -84,7 +84,7 @@ class AuthenticationForm(forms.Form): self.customer_cache = None super().__init__(*args, **kwargs) self.fields['password'].help_text = "{}".format( - build_absolute_uri(False, 'presale:organizer.customer.resetpw', kwargs={ + eventreverse_absolute(False, 'presale:organizer.customer.resetpw', kwargs={ 'organizer': request.organizer.slug, }), _('Forgot your password?') diff --git a/src/pretix/presale/ical.py b/src/pretix/presale/ical.py index ba0571f24..10d48b769 100644 --- a/src/pretix/presale/ical.py +++ b/src/pretix/presale/ical.py @@ -32,7 +32,7 @@ from django.utils.translation import gettext as _ from pretix.base.email import get_email_context from pretix.base.models import Event from pretix.helpers.format import format_map -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute def get_public_ical(events): @@ -48,9 +48,9 @@ def get_public_ical(events): event = ev if isinstance(ev, Event) else ev.event tz = event.timezone if isinstance(ev, Event): - url = build_absolute_uri(event, 'presale:event.index') + url = eventreverse_absolute(event, 'presale:event.index') else: - url = build_absolute_uri(event, 'presale:event.index', { + url = eventreverse_absolute(event, 'presale:event.index', { 'subevent': ev.pk }) @@ -134,7 +134,7 @@ def get_private_icals(event, positions): program_times = p.item.program_times.all() if program_times: # if program times have been configured, they are preferred for the position's calendar entries - url = build_absolute_uri(event, 'presale:event.index') + url = eventreverse_absolute(event, 'presale:event.index') for index, pt in enumerate(program_times): summary = _('{event} - {item}').format(event=ev, item=p.item.name) if event.settings.mail_attach_ical_description: @@ -167,11 +167,11 @@ def get_private_icals(event, positions): else: # without program times, the subevent or event times are used for calendar entries, preferring subevents if p.subevent: - url = build_absolute_uri(event, 'presale:event.index', { + url = eventreverse_absolute(event, 'presale:event.index', { 'subevent': p.subevent.pk }) else: - url = build_absolute_uri(event, 'presale:event.index') + url = eventreverse_absolute(event, 'presale:event.index') if event.settings.mail_attach_ical_description: ctx = get_email_context(event=event, event_or_subevent=ev) diff --git a/src/pretix/presale/utils.py b/src/pretix/presale/utils.py index 4b4d64e58..d0703a439 100644 --- a/src/pretix/presale/utils.py +++ b/src/pretix/presale/utils.py @@ -59,7 +59,7 @@ from pretix.base.timemachine import time_machine_now_assigned_from_request from pretix.helpers.http import redirect_to_url from pretix.multidomain.models import KnownDomain from pretix.multidomain.urlreverse import ( - build_absolute_uri, get_event_domain, get_organizer_domain, + eventreverse_absolute, get_event_domain, get_organizer_domain, ) from pretix.presale.signals import process_request, process_response @@ -283,7 +283,7 @@ def _detect_event(request, require_live=True, require_plugin=None): domain, domainmode = get_event_domain(request.event, fallback=False, return_mode=True) if not domain and request_domain_mode == KnownDomain.MODE_ORG_ALT_DOMAIN: path = request.get_full_path().split("/", 2)[-1] - r = redirect_to_url(build_absolute_uri(request.event, "presale:event.index") + path) + r = redirect_to_url(eventreverse_absolute(request.event, "presale:event.index") + path) r['Access-Control-Allow-Origin'] = '*' return r elif domain and domain != request.host: diff --git a/src/pretix/presale/views/customer.py b/src/pretix/presale/views/customer.py index 0919bea23..5e15cfe44 100644 --- a/src/pretix/presale/views/customer.py +++ b/src/pretix/presale/views/customer.py @@ -56,7 +56,7 @@ from pretix.base.signals import customer_created, customer_signed_in from pretix.helpers.compat import CompatDeleteView from pretix.helpers.http import redirect_to_url from pretix.multidomain.models import KnownDomain -from pretix.multidomain.urlreverse import build_absolute_uri, eventreverse +from pretix.multidomain.urlreverse import eventreverse, eventreverse_absolute from pretix.presale.forms.customer import ( AuthenticationForm, ChangeInfoForm, ChangePasswordForm, RegistrationForm, ResetPasswordForm, SetPasswordForm, TokenGenerator, @@ -316,8 +316,10 @@ class ResetPasswordView(FormView): customer.log_action('pretix.customer.password.resetrequested', {}) ctx = customer.get_email_context() token = TokenGenerator().make_token(customer) - ctx['url'] = build_absolute_uri(self.request.organizer, - 'presale:organizer.customer.recoverpw') + '?id=' + customer.identifier + '&token=' + token + ctx['url'] = eventreverse_absolute( + self.request.organizer, + 'presale:organizer.customer.recoverpw' + ) + '?id=' + customer.identifier + '&token=' + token mail( customer.email, self.request.organizer.settings.mail_subject_customer_reset, @@ -574,7 +576,7 @@ class ChangeInformationView(CustomerAccountBaseMixin, FormView): new_email = form.cleaned_data['email'] form.cleaned_data['email'] = form.instance.email = self.initial_email ctx = form.instance.get_email_context() - ctx['url'] = build_absolute_uri( + ctx['url'] = eventreverse_absolute( self.request.organizer, 'presale:organizer.customer.change.confirm' ) + '?token=' + dumps({ @@ -703,7 +705,7 @@ class SSOLoginView(RedirectBackMixin, View): request.session[f'pretix_customerauth_{self.provider.pk}_nonce'] = nonce request.session[f'pretix_customerauth_{self.provider.pk}_popup_origin'] = popup_origin request.session[f'pretix_customerauth_{self.provider.pk}_cross_domain_requested'] = self.request.GET.get("request_cross_domain_customer_auth") == "true" - redirect_uri = build_absolute_uri(self.request.organizer, 'presale:organizer.customer.login.return', kwargs={ + redirect_uri = eventreverse_absolute(self.request.organizer, 'presale:organizer.customer.login.return', kwargs={ 'provider': self.provider.pk }) @@ -777,7 +779,7 @@ class SSOLoginReturnView(RedirectBackMixin, View): ), popup_origin, ) - redirect_uri = build_absolute_uri( + redirect_uri = eventreverse_absolute( self.request.organizer, 'presale:organizer.customer.login.return', kwargs={ 'provider': self.provider.pk diff --git a/src/pretix/presale/views/oidc_op.py b/src/pretix/presale/views/oidc_op.py index e79dbb194..c84cd283c 100644 --- a/src/pretix/presale/views/oidc_op.py +++ b/src/pretix/presale/views/oidc_op.py @@ -46,7 +46,7 @@ from pretix.base.models.customers import ( ) from pretix.helpers.http import redirect_to_url from pretix.multidomain.middlewares import CsrfViewMiddleware -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute from pretix.presale.forms.customer import AuthenticationForm from pretix.presale.utils import customer_login, get_customer_auth_time @@ -519,17 +519,17 @@ class ConfigurationView(View): def get(self, request, *args, **kwargs): return JsonResponse({ - 'issuer': build_absolute_uri(request.organizer, 'presale:organizer.index').rstrip('/'), - 'authorization_endpoint': build_absolute_uri( + 'issuer': eventreverse_absolute(request.organizer, 'presale:organizer.index').rstrip('/'), + 'authorization_endpoint': eventreverse_absolute( request.organizer, 'presale:organizer.oauth2.v1.authorize' ), - 'token_endpoint': build_absolute_uri( + 'token_endpoint': eventreverse_absolute( request.organizer, 'presale:organizer.oauth2.v1.token' ), - 'userinfo_endpoint': build_absolute_uri( + 'userinfo_endpoint': eventreverse_absolute( request.organizer, 'presale:organizer.oauth2.v1.userinfo' ), - 'jwks_uri': build_absolute_uri( + 'jwks_uri': eventreverse_absolute( request.organizer, 'presale:organizer.oauth2.v1.jwks' ), 'scopes_supported': [k for k, v in CustomerSSOClient.SCOPE_CHOICES], diff --git a/src/pretix/presale/views/order.py b/src/pretix/presale/views/order.py index 206de6ba7..4fdff8571 100644 --- a/src/pretix/presale/views/order.py +++ b/src/pretix/presale/views/order.py @@ -89,7 +89,7 @@ from pretix.base.views.mixins import OrderQuestionsViewMixin from pretix.base.views.tasks import AsyncAction from pretix.helpers.http import redirect_to_url from pretix.helpers.safedownload import check_token -from pretix.multidomain.urlreverse import build_absolute_uri, eventreverse +from pretix.multidomain.urlreverse import eventreverse, eventreverse_absolute from pretix.presale.forms.checkout import InvoiceAddressForm, QuestionsForm from pretix.presale.forms.order import OrderPositionChangeForm from pretix.presale.signals import question_form_fields_overrides @@ -312,7 +312,7 @@ class OrderDetails(EventViewMixin, OrderDetailMixin, CartMixin, TicketPageMixin, state__in=[OrderPayment.PAYMENT_STATE_CANCELED, OrderPayment.PAYMENT_STATE_FAILED] ).exists() and self.order.status == Order.STATUS_PENDING: ctx['generate_invoice_requires'] = 'payment' - ctx['url'] = build_absolute_uri( + ctx['url'] = eventreverse_absolute( self.request.event, 'presale:event.order', kwargs={ 'order': self.order.code, 'secret': self.order.secret diff --git a/src/pretix/presale/views/organizer.py b/src/pretix/presale/views/organizer.py index 41535c468..d527bb646 100644 --- a/src/pretix/presale/views/organizer.py +++ b/src/pretix/presale/views/organizer.py @@ -74,7 +74,7 @@ from pretix.helpers.formats.en.formats import ( from pretix.helpers.http import redirect_to_url from pretix.helpers.i18n import parse_date_localized from pretix.helpers.thumb import get_thumbnail -from pretix.multidomain.urlreverse import build_absolute_uri, eventreverse +from pretix.multidomain.urlreverse import eventreverse, eventreverse_absolute from pretix.presale.forms.organizer import EventListFilterForm from pretix.presale.ical import get_public_ical from pretix.presale.signals import filter_subevents @@ -1380,7 +1380,7 @@ class OrganizerFavicon(View): class RedirectToOrganizerIndex(View): def get(self, *args, **kwargs): - return redirect_to_url(build_absolute_uri(self.request.organizer, "presale:organizer.index")) + return redirect_to_url(eventreverse_absolute(self.request.organizer, "presale:organizer.index")) class AccessibilityView(OrganizerViewMixin, EventListMixin, TemplateView): diff --git a/src/pretix/presale/views/widget.py b/src/pretix/presale/views/widget.py index 3c805d4d7..6a4d4cfd0 100644 --- a/src/pretix/presale/views/widget.py +++ b/src/pretix/presale/views/widget.py @@ -65,7 +65,7 @@ from pretix.base.settings import GlobalSettingsObject from pretix.base.templatetags.rich_text import rich_text from pretix.helpers.daterange import daterange from pretix.helpers.thumb import get_thumbnail -from pretix.multidomain.urlreverse import build_absolute_uri +from pretix.multidomain.urlreverse import eventreverse_absolute from pretix.presale.forms.organizer import meta_filtersets from pretix.presale.style import get_theme_vars_css from pretix.presale.views.cart import get_or_create_cart_id @@ -303,7 +303,7 @@ def get_picture(event, picture, size=None): logger.exception(f'Failed to create thumbnail of {picture.name}') if not thumb: thumb = default_storage.url(picture.name) - return urljoin(build_absolute_uri(event, 'presale:event.index'), thumb) + return urljoin(eventreverse_absolute(event, 'presale:event.index'), thumb) class WidgetAPIProductList(EventListMixin, View): @@ -547,7 +547,7 @@ class WidgetAPIProductList(EventListMixin, View): 'location': str(ev.location), 'date_range': self._get_date_range(ev, event, tz=tz), 'availability': self._get_availability(ev, event, tz=tz), - 'event_url': build_absolute_uri(event, 'presale:event.index'), + 'event_url': eventreverse_absolute(event, 'presale:event.index'), 'subevent': ev.pk if isinstance(ev, SubEvent) else None, }) return events @@ -748,7 +748,7 @@ class WidgetAPIProductList(EventListMixin, View): 'location': str(ev.location), 'date_range': self._get_date_range(ev, ev.event, tz), 'availability': self._get_availability(ev, ev.event, tz=tz), - 'event_url': build_absolute_uri(ev.event, 'presale:event.index'), + 'event_url': eventreverse_absolute(ev.event, 'presale:event.index'), 'subevent': ev.pk, } for ev in evs ] @@ -771,7 +771,7 @@ class WidgetAPIProductList(EventListMixin, View): 'location': str(event.location), 'date_range': dr, 'availability': avail, - 'event_url': build_absolute_uri(event, 'presale:event.index'), + 'event_url': eventreverse_absolute(event, 'presale:event.index'), }) cache.set(cache_key, data, 30) @@ -796,7 +796,7 @@ class WidgetAPIProductList(EventListMixin, View): return self.response(cached_data) data = { - 'target_url': build_absolute_uri(request.event, 'presale:event.index'), + 'target_url': eventreverse_absolute(request.event, 'presale:event.index'), 'subevent': self.subevent.pk if self.subevent else None, 'currency': request.event.currency, 'display_net_prices': request.event.settings.display_net_prices, diff --git a/src/tests/helpers/test_urls.py b/src/tests/helpers/test_urls.py index eabbed0f3..ef1da5345 100644 --- a/src/tests/helpers/test_urls.py +++ b/src/tests/helpers/test_urls.py @@ -22,17 +22,17 @@ from django import urls from django.test import override_settings -from pretix.helpers.urls import build_absolute_uri +from pretix.helpers.urls import mainreverse_absolute def test_site_url_domain(): with override_settings(SITE_URL='https://example.com'): - assert build_absolute_uri('control:auth.login') == 'https://example.com/control/login' + assert mainreverse_absolute('control:auth.login') == 'https://example.com/control/login' def test_site_url_subpath(): with override_settings(SITE_URL='https://example.com/presale'): old_prefix = urls.get_script_prefix() urls.set_script_prefix('/presale/') - assert build_absolute_uri('control:auth.login') == 'https://example.com/presale/control/login' + assert mainreverse_absolute('control:auth.login') == 'https://example.com/presale/control/login' urls.set_script_prefix(old_prefix) diff --git a/src/tests/multidomain/test_urlreverse.py b/src/tests/multidomain/test_urlreverse.py index 74739d181..23f954253 100644 --- a/src/tests/multidomain/test_urlreverse.py +++ b/src/tests/multidomain/test_urlreverse.py @@ -26,7 +26,7 @@ from django_scopes import scopes_disabled from pretix.base.models import Event, Organizer from pretix.multidomain.models import KnownDomain -from pretix.multidomain.urlreverse import build_absolute_uri, eventreverse +from pretix.multidomain.urlreverse import eventreverse, eventreverse_absolute from pretix.testutils.queries import assert_num_queries @@ -248,20 +248,20 @@ def test_event_custom_domain_cache_clear(env): @pytest.mark.django_db def test_event_main_domain_absolute(env): - assert build_absolute_uri(env[1], 'presale:event.index') == 'http://example.com/mrmcd/2015/' + assert eventreverse_absolute(env[1], 'presale:event.index') == 'http://example.com/mrmcd/2015/' @pytest.mark.django_db def test_event_custom_domain_absolute(env): KnownDomain.objects.create(domainname='foobar', organizer=env[0]) KnownDomain.objects.create(domainname='barfoo', organizer=env[0], event=env[1]) - assert build_absolute_uri(env[1], 'presale:event.index') == 'http://barfoo/' + assert eventreverse_absolute(env[1], 'presale:event.index') == 'http://barfoo/' @pytest.mark.django_db def test_event_org_domain_absolute(env): KnownDomain.objects.create(domainname='foobar', organizer=env[0]) - assert build_absolute_uri(env[1], 'presale:event.index') == 'http://foobar/2015/' + assert eventreverse_absolute(env[1], 'presale:event.index') == 'http://foobar/2015/' @pytest.mark.django_db @@ -269,4 +269,4 @@ def test_event_org_alt_domain_absolute(env): KnownDomain.objects.create(domainname='foobar', organizer=env[0]) d = KnownDomain.objects.create(domainname='altfoo', organizer=env[0], mode=KnownDomain.MODE_ORG_ALT_DOMAIN) d.event_assignments.create(event=env[1]) - assert build_absolute_uri(env[1], 'presale:event.index') == 'http://altfoo/2015/' + assert eventreverse_absolute(env[1], 'presale:event.index') == 'http://altfoo/2015/' -- 2.52.0 From d14dc4c5ff1ff847d559d65e5a2396edd1f442df Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 22 Jun 2026 09:49:27 +0200 Subject: [PATCH 56/96] Test order deletion: Improve bulk performance (Z#23237160) (#6274) * Test order deletion: Improve bulk performance (Z#23237160) * Apply suggestion from @pajowu Co-authored-by: pajowu * Fix style issue --------- Co-authored-by: pajowu --- src/pretix/base/models/orders.py | 78 +++++++++++++++++++----------- src/pretix/control/views/event.py | 7 ++- src/pretix/control/views/orders.py | 21 ++++++-- 3 files changed, 72 insertions(+), 34 deletions(-) diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index e74e450e8..305659ccd 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -354,38 +354,60 @@ class Order(LockModel, LoggedModel): def _transaction_key_reset(self): self.__initial_status_paid_or_pending = self.status in (Order.STATUS_PENDING, Order.STATUS_PAID) and not self.require_approval - def gracefully_delete(self, user=None, auth=None): - from . import GiftCard, GiftCardTransaction, Membership, Voucher - - if not self.testmode: - raise TypeError("Only test mode orders can be deleted.") - self.log_action( - 'pretix.event.order.deleted', user=user, auth=auth, - data={ - 'code': self.code, - } + @classmethod + def gracefully_delete_bulk(cls, event, orders, user=None, auth=None): + # Expects to be called in a transaction + from . import ( + GiftCard, GiftCardTransaction, LogEntry, Membership, Voucher, ) - order_gracefully_delete.send(self.event, order=self) + if not transaction.get_connection().in_atomic_block: + raise Exception('gracefully_delete_bulk should only be called in atomic transaction!') - if self.status != Order.STATUS_CANCELED: - for position in self.positions.all(): - if position.voucher: - Voucher.objects.filter(pk=position.voucher.pk).update(redeemed=Greatest(0, F('redeemed') - 1)) + logs_create = [] + for o in orders: + if not o.testmode: + raise TypeError("Only test mode orders can be deleted.") + order_gracefully_delete.send(event, order=o) + logs_create.append(o.log_action( + 'pretix.event.order.deleted', user=user, auth=auth, + data={ + 'code': o.code, + }, + save=False, + )) + LogEntry.bulk_create_and_postprocess(logs_create) - GiftCardTransaction.objects.filter(payment__in=self.payments.all()).update(payment=None) - GiftCardTransaction.objects.filter(refund__in=self.refunds.all()).update(refund=None) - GiftCardTransaction.objects.filter(order=self).update(order=None) - GiftCard.objects.filter(issued_in__in=self.positions.all()).update(issued_in=None) - Membership.objects.filter(granted_in__order=self, testmode=True).update(granted_in=None) - OrderPosition.all.filter(order=self, addon_to__isnull=False).delete() - OrderPosition.all.filter(order=self).delete() - OrderFee.all.filter(order=self).delete() - Transaction.objects.filter(order=self).delete() - self.refunds.all().delete() - self.payments.all().delete() - self.event.cache.delete('complain_testmode_orders') - self.delete() + voucher_ids = OrderPosition.objects.filter( + order__in=orders, + voucher__isnull=False + ).exclude(order__status=Order.STATUS_CANCELED).values_list("voucher_id", flat=True) + voucher_usages = Counter(voucher_ids) + for v_id, usage_count in voucher_usages.items(): + Voucher.objects.filter(pk=v_id).update(redeemed=Greatest(0, F('redeemed') - usage_count)) + + GiftCardTransaction.objects.filter(payment__order__in=orders).update(payment=None) + GiftCardTransaction.objects.filter(refund__order__in=orders).update(refund=None) + GiftCardTransaction.objects.filter(order__in=orders).update(order=None) + GiftCard.objects.filter(issued_in__order__in=orders).update(issued_in=None) + Membership.objects.filter(granted_in__order__in=orders, testmode=True).update(granted_in=None) + OrderPosition.all.filter(order__in=orders, addon_to__isnull=False).delete() + OrderPosition.all.filter(order__in=orders).delete() + OrderFee.all.filter(order__in=orders).delete() + Transaction.objects.filter(order__in=orders).delete() + OrderRefund.objects.filter(order__in=orders).delete() + OrderPayment.objects.filter(order__in=orders).delete() + if isinstance(orders, models.QuerySet): + orders.delete() + else: + Order.objects.filter(pk__in=[o.pk for o in orders]).delete() + event.cache.delete('complain_testmode_orders') + + def gracefully_delete(self, user=None, auth=None): + if not self.testmode: + raise TypeError("Only test mode orders can be deleted.") + + Order.gracefully_delete_bulk(self.event, Order.objects.filter(pk=self.pk), user, auth) def email_confirm_secret(self): return self.tagged_secret("email_confirm", 9) diff --git a/src/pretix/control/views/event.py b/src/pretix/control/views/event.py index 6949f7675..322c0761c 100644 --- a/src/pretix/control/views/event.py +++ b/src/pretix/control/views/event.py @@ -1150,8 +1150,11 @@ class EventLive(EventPermissionRequiredMixin, TemplateView): if request.POST.get("delete") == "yes": try: with transaction.atomic(): - for order in request.event.orders.filter(testmode=True): - order.gracefully_delete(user=self.request.user) + Order.gracefully_delete_bulk( + request.event, + request.event.orders.filter(testmode=True), + user=self.request.user + ) except ProtectedError: messages.error(self.request, _('An order could not be deleted as some constraints (e.g. data ' 'created by plug-ins) do not allow it.')) diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index 1ac565b87..53b628ed5 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -139,6 +139,7 @@ from pretix.helpers import OF_SELF from pretix.helpers.compat import CompatDeleteView from pretix.helpers.format import SafeFormatter, format_map from pretix.helpers.hierarkey import clean_filename +from pretix.helpers.iter import chunked_iterable from pretix.helpers.json import CustomJSONEncoder from pretix.helpers.safedownload import check_token from pretix.presale.signals import question_form_fields @@ -240,7 +241,7 @@ class BaseOrderBulkActionView(OrderSearchMixin, EventPermissionRequiredMixin, As raise NotImplementedError() def execute_bulk(self, queryset: QuerySet, form: forms.Form): - qs = self.allowed_for(self.allowed_for(self.get_queryset())) + qs = self.allowed_for(self.get_queryset()) total = qs.count() orders_with_successful_action = 0 for i, o in enumerate(qs): @@ -394,9 +395,21 @@ class OrderDeleteBulkActionView(BaseOrderBulkActionView): testmode=True, ) - def execute_single(self, instance, form: forms.Form): - instance.gracefully_delete(user=self.request.user) - return True + def execute_bulk(self, queryset: QuerySet, form: forms.Form): + qs = self.allowed_for(self.get_queryset()) + total = qs.count() + all_ids = list(qs.values_list("id", flat=True)) + + orders_with_successful_action = 0 + for chunk in chunked_iterable(all_ids, 1000): + Order.gracefully_delete_bulk( + self.request.event, + qs.filter(id__in=chunk), + user=self.request.user, + ) + orders_with_successful_action += len(chunk) + self.async_set_progress(orders_with_successful_action / total * 100) + return orders_with_successful_action, total class OrderList(OrderSearchMixin, EventPermissionRequiredMixin, PaginationMixin, ListView): -- 2.52.0 From 736fa38ca7a9f5c774e2aa9c6f3c3a4eac979869 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 13:32:39 +0200 Subject: [PATCH 57/96] Update sentry-sdk requirement from ==2.62.* to ==2.63.* (#6301) Updates the requirements on [sentry-sdk](https://github.com/getsentry/sentry-python) to permit the latest version. - [Release notes](https://github.com/getsentry/sentry-python/releases) - [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-python/compare/2.62.0...2.63.0) --- updated-dependencies: - dependency-name: sentry-sdk dependency-version: 2.63.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index dcb4ddf1f..f5961fdca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -93,7 +93,7 @@ dependencies = [ "redis==7.4.*", "reportlab==4.5.*", "requests==2.32.*", - "sentry-sdk==2.62.*", + "sentry-sdk==2.63.*", "sepaxml==2.7.*", "stripe==7.9.*", "text-unidecode==1.*", -- 2.52.0 From 3432e62e4f8dc9d576c3c6d74809f83f6cbd1cfd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 13:32:50 +0200 Subject: [PATCH 58/96] Update css-inline requirement from ==0.20.* to ==0.21.* (#6302) Updates the requirements on [css-inline](https://github.com/Stranger6667/css-inline) to permit the latest version. - [Release notes](https://github.com/Stranger6667/css-inline/releases) - [Changelog](https://github.com/Stranger6667/css-inline/blob/master/CHANGELOG.md) - [Commits](https://github.com/Stranger6667/css-inline/compare/c-v0.20.0...c-v0.21.0) --- updated-dependencies: - dependency-name: css-inline dependency-version: 0.21.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f5961fdca..1a8c5772d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ dependencies = [ "celery==5.6.*", "chardet==5.2.*", "cryptography>=49.0.0", - "css-inline==0.20.*", + "css-inline==0.21.*", "defusedcsv>=3.0.0", "dnspython==2.*", "Django[argon2]==5.2.*", -- 2.52.0 From 1521c0cfcd0a28ee456d0ce878f17f080d4529fa Mon Sep 17 00:00:00 2001 From: luelista Date: Tue, 23 Jun 2026 18:34:31 +0200 Subject: [PATCH 59/96] Fix URL matching in EventQRCode (Z#23237781) (#6304) --- src/pretix/control/views/event.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/pretix/control/views/event.py b/src/pretix/control/views/event.py index 322c0761c..7ff3aa8bd 100644 --- a/src/pretix/control/views/event.py +++ b/src/pretix/control/views/event.py @@ -41,7 +41,7 @@ from collections import OrderedDict, defaultdict from decimal import Decimal from io import BytesIO from itertools import groupby -from urllib.parse import urlparse, urlsplit +from urllib.parse import urlsplit from zoneinfo import ZoneInfo import bleach @@ -64,7 +64,6 @@ from django.shortcuts import get_object_or_404, redirect from django.urls import NoReverseMatch, reverse from django.utils.functional import cached_property from django.utils.html import conditional_escape, format_html -from django.utils.http import url_has_allowed_host_and_scheme from django.utils.safestring import mark_safe from django.utils.timezone import now from django.utils.translation import gettext, gettext_lazy as _, gettext_noop @@ -1742,7 +1741,7 @@ class EventQRCode(EventPermissionRequiredMixin, View): url = eventreverse_absolute(request.event, 'presale:event.index') if "url" in request.GET: - if url_has_allowed_host_and_scheme(request.GET["url"], allowed_hosts=[urlparse(url).netloc]): + if request.GET["url"].startswith(url): url = request.GET["url"] else: raise PermissionDenied("Untrusted URL") -- 2.52.0 From 4c373518d0b3168aa70c46097199e7fd263b8ef1 Mon Sep 17 00:00:00 2001 From: luelista Date: Tue, 23 Jun 2026 19:01:32 +0200 Subject: [PATCH 60/96] Fix event meta property handling when cloning across organizers (Z#23231419) (#6306) --- src/pretix/base/models/event.py | 19 ++++++++++++++++--- src/tests/base/test_event_clone.py | 12 ++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/pretix/base/models/event.py b/src/pretix/base/models/event.py index 63f70d03c..1e6c17461 100644 --- a/src/pretix/base/models/event.py +++ b/src/pretix/base/models/event.py @@ -883,6 +883,8 @@ class Event(EventMixin, LoggedModel): ItemProgramTime, ItemVariationMetaValue, Question, Quota, ) + is_cross_organizer = other.organizer_id != self.organizer_id + # Note: avoid self.set_active_plugins(), it causes trouble e.g. for the badges plugin. # Plugins can create data in installed() hook based on existing data of the event. # Calling set_active_plugins() results in defaults being created while actually data @@ -911,6 +913,15 @@ class Event(EventMixin, LoggedModel): for emv in EventMetaValue.objects.filter(event=other): emv.pk = None emv.event = self + if is_cross_organizer: + try: + emv.property = self.organizer.meta_properties.get(name=emv.property.name) + except EventMetaProperty.DoesNotExist: + meta_prop = emv.property + meta_prop.pk = None + meta_prop.organizer = self.organizer + meta_prop.save(force_insert=True) + emv.property = meta_prop emv.save(force_insert=True) for fl in EventFooterLink.objects.filter(event=other): @@ -964,13 +975,13 @@ class Event(EventMixin, LoggedModel): if i.tax_rule_id: i.tax_rule = tax_map[i.tax_rule_id] - if i.grant_membership_type and other.organizer_id != self.organizer_id: + if i.grant_membership_type and is_cross_organizer: i.grant_membership_type = None i.save() # no force_insert since i.picture.save could have already inserted i.log_action('pretix.object.cloned') - if require_membership_types and other.organizer_id == self.organizer_id: + if require_membership_types and not is_cross_organizer: i.require_membership_types.set(require_membership_types) if not i.all_sales_channels: @@ -985,7 +996,7 @@ class Event(EventMixin, LoggedModel): v._prefetched_objects_cache = {} v.save(force_insert=True) - if require_membership_types and other.organizer_id == self.organizer_id: + if require_membership_types and not is_cross_organizer: v.require_membership_types.set(require_membership_types) if not v.all_sales_channels: v.limit_sales_channels.set(self.organizer.sales_channels.filter(identifier__in=[s.identifier for s in limit_sales_channels])) @@ -1869,6 +1880,8 @@ class EventMetaValue(LoggedModel): self.event.cache.clear() def save(self, *args, **kwargs): + if self.event and self.event.organizer != self.property.organizer: + raise ValidationError(_("Property and event must belong to the same organizer.")) super().save(*args, **kwargs) if self.event: self.event.cache.clear() diff --git a/src/tests/base/test_event_clone.py b/src/tests/base/test_event_clone.py index a003bf54e..ed2259672 100644 --- a/src/tests/base/test_event_clone.py +++ b/src/tests/base/test_event_clone.py @@ -243,6 +243,9 @@ def test_full_clone_cross_organizer_differences(): sc1_c = organizer.sales_channels.create(identifier="c") sc2_a = organizer2.sales_channels.get(identifier="web") sc2_c = organizer2.sales_channels.create(identifier="c") + o1_meta_prop_a = organizer.meta_properties.create(name="Prop to copy") + o1_meta_prop_b = organizer.meta_properties.create(name="Prop to find") + o2_meta_prop_b = organizer2.meta_properties.create(name="Prop to find") event = Event.objects.create( organizer=organizer, name='Dummy', slug='dummy', @@ -267,6 +270,9 @@ def test_full_clone_cross_organizer_differences(): event.settings.payment_giftcard__enabled = True event.settings.payment_giftcard__restrict_to_sales_channels = ['web', 'b', 'c'] + event.meta_values.create(property=o1_meta_prop_a, value='a') + event.meta_values.create(property=o1_meta_prop_b, value='b') + copied_event = Event.objects.create( organizer=organizer2, name='Dummy2', slug='dummy2', date_from=datetime.datetime(2022, 4, 15, 9, 0, 0, tzinfo=datetime.timezone.utc), @@ -289,3 +295,9 @@ def test_full_clone_cross_organizer_differences(): assert event.settings.get('payment_giftcard__restrict_to_sales_channels', as_type=list) == ['web', 'b', 'c'] assert copied_event.settings.get('payment_giftcard__restrict_to_sales_channels', as_type=list) == ['web', 'c'] + + assert event.meta_values.get(property__name=o1_meta_prop_a.name).property.organizer == organizer + assert copied_event.meta_values.get(property__name=o1_meta_prop_a.name).value == 'a' + assert copied_event.meta_values.get(property__name=o1_meta_prop_a.name).property.organizer == organizer2 + assert copied_event.meta_values.get(property=o2_meta_prop_b).value == 'b' + assert copied_event.meta_values.get(property=o2_meta_prop_b).property.organizer == organizer2 -- 2.52.0 From 7ea5a2b59ee23014841e5cf19fc84497687ec4d8 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Wed, 24 Jun 2026 09:46:43 +0200 Subject: [PATCH 61/96] PDF: add placeholder invoice_custom_field (#6298) --- src/pretix/base/pdf.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pretix/base/pdf.py b/src/pretix/base/pdf.py index a8cb2fc2c..364e9ec9e 100644 --- a/src/pretix/base/pdf.py +++ b/src/pretix/base/pdf.py @@ -372,6 +372,11 @@ DEFAULT_VARIABLES = OrderedDict(( "editor_sample": _("Atlantis"), "evaluate": lambda op, order, ev: str(getattr(order.invoice_address.country, 'name', '')) if getattr(order, 'invoice_address', None) else '' }), + ("invoice_custom_field", { + "label": _("Invoice custom recipient field"), + "editor_sample": _("Custom recipient field"), + "evaluate": lambda op, order, ev: order.invoice_address.custom_field if getattr(order, 'invoice_address', None) else '' + }), ("addons", { "label": _("List of Add-Ons"), "editor_sample": _("Add-on 1\n2x Add-on 2"), -- 2.52.0 From e8492cad3c0cc93b2bc73aae9d5fe8e10408b81d Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Wed, 24 Jun 2026 09:47:08 +0200 Subject: [PATCH 62/96] Seating: fix handling optional position attribute (#6303) --- src/pretix/base/models/seating.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pretix/base/models/seating.py b/src/pretix/base/models/seating.py index 49b7c4b5f..133e6c85a 100644 --- a/src/pretix/base/models/seating.py +++ b/src/pretix/base/models/seating.py @@ -118,7 +118,10 @@ class SeatingPlan(LoggedModel): for zi, z in enumerate(self.layout_data['zones']): zpos = (z['position']['x'], z['position']['y']) for ri, r in enumerate(z['rows']): - rpos = (zpos[0] + r['position']['x'], zpos[1] + r['position']['y']) + rpos = ( + zpos[0] + r.get('position', {}).get('x', 0), + zpos[1] + r.get('position', {}).get('y', 0), + ) row_label = None if r.get('row_label'): row_label = r['row_label'].replace("%s", r.get('row_number', str(ri))) @@ -147,8 +150,8 @@ class SeatingPlan(LoggedModel): zone=z['name'], category=s['category'], sorting_rank=rank, - x=rpos[0] + s['position']['x'], - y=rpos[1] + s['position']['y'], + x=rpos[0] + s.get('position', {}).get('x', 0), + y=rpos[1] + s.get('position', {}).get('y', 0), ) -- 2.52.0 From 79c5160b57b9ac2bfea72240830edde0e3eba800 Mon Sep 17 00:00:00 2001 From: Lukas Bockstaller Date: Wed, 24 Jun 2026 10:42:56 +0200 Subject: [PATCH 63/96] Revert "Update django-countries requirement from ==8.2.* to ==9.0.* (#6269)" (#6310) This reverts commit 1e301da26c94652dbf10159923d0d72a43e5066b. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 1a8c5772d..90005466c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ dependencies = [ "Django[argon2]==5.2.*", "django-bootstrap3==26.1", "django-compressor==4.6.0", - "django-countries==9.0.*", + "django-countries==8.2.*", "django-filter==25.1", "django-formset-js-improved==0.5.0.5", "django-formtools==2.6.1", -- 2.52.0 From f88c24863dd38fa75bf4312b9cc766da2de71d2e Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Tue, 23 Jun 2026 21:57:05 +0200 Subject: [PATCH 64/96] [SECURITY] Fix XSS in ticket layout JSON (CVE-2026-57532) --- src/pretix/control/templates/pretixcontrol/pdf/index.html | 4 +--- src/pretix/control/views/pdf.py | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/pretix/control/templates/pretixcontrol/pdf/index.html b/src/pretix/control/templates/pretixcontrol/pdf/index.html index 0935a6c12..814c1d37e 100644 --- a/src/pretix/control/templates/pretixcontrol/pdf/index.html +++ b/src/pretix/control/templates/pretixcontrol/pdf/index.html @@ -19,9 +19,7 @@ {% endif %} - + {{ layout|json_script:"editor-data" }}
diff --git a/src/pretix/control/views/pdf.py b/src/pretix/control/views/pdf.py index 03f21c731..e8c5d855d 100644 --- a/src/pretix/control/views/pdf.py +++ b/src/pretix/control/views/pdf.py @@ -284,7 +284,7 @@ class BaseEditorView(EventPermissionRequiredMixin, TemplateView): ctx['pdf'] = self.get_current_background() ctx['variables'] = self.get_variables() ctx['images'] = self.get_images() - ctx['layout'] = json.dumps(self.get_current_layout()) + ctx['layout'] = self.get_current_layout() ctx['title'] = self.title ctx['locales'] = [p for p in settings.LANGUAGES if p[0] in self.request.event.settings.locales] ctx['maxfilesize'] = self.maxfilesize -- 2.52.0 From 3442a543c83865bafb0d23ece03ad4eb87545b1f Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Fri, 19 Jun 2026 14:13:16 +0200 Subject: [PATCH 65/96] [SECURITY] Hardening: Don't use |safe on confirm_messages --- src/pretix/presale/checkoutflow.py | 3 ++- src/pretix/presale/signals.py | 2 +- .../templates/pretixpresale/event/checkout_confirm.html | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pretix/presale/checkoutflow.py b/src/pretix/presale/checkoutflow.py index 76c488624..e6ea9d372 100644 --- a/src/pretix/presale/checkoutflow.py +++ b/src/pretix/presale/checkoutflow.py @@ -51,6 +51,7 @@ from django.http import HttpResponseNotAllowed, JsonResponse from django.shortcuts import redirect from django.utils import translation from django.utils.functional import cached_property +from django.utils.html import conditional_escape from django.utils.translation import ( get_language, gettext_lazy as _, pgettext_lazy, ) @@ -1634,7 +1635,7 @@ class ConfirmStep(CartMixin, AsyncAction, TemplateFlowStep): meta_info = { 'contact_form_data': self.cart_session.get('contact_form_data', {}), 'confirm_messages': [ - str(m) for m in self.confirm_messages.values() + conditional_escape(str(m)) for m in self.confirm_messages.values() ] } api_meta = {} diff --git a/src/pretix/presale/signals.py b/src/pretix/presale/signals.py index 38ae0dca0..1111f00b2 100644 --- a/src/pretix/presale/signals.py +++ b/src/pretix/presale/signals.py @@ -144,7 +144,7 @@ checkout_confirm_messages = EventPluginSignal() This signal is sent out to retrieve short messages that need to be acknowledged by the user before the order can be completed. This is typically used for something like "accept the terms and conditions". Receivers are expected to return a dictionary where the keys are globally unique identifiers for the -message and the values can be arbitrary HTML. +message and the values can be a SafeString containing arbitrary HTML, or a string that will be HTML-escaped. As with all event plugin signals, the ``sender`` keyword argument will contain the event. """ diff --git a/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html b/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html index 40db91acc..ad47ad429 100644 --- a/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html +++ b/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html @@ -176,7 +176,7 @@
{% endfor %} -- 2.52.0 From 848f7fa0e59d6dc09defeffcd0eb4e505408d2ee Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Fri, 19 Jun 2026 13:31:09 +0200 Subject: [PATCH 66/96] [SECURITY] Fix stored XSS in ticket confirmation page (CVE-2026-13225) --- src/pretix/presale/templates/pretixpresale/event/position.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pretix/presale/templates/pretixpresale/event/position.html b/src/pretix/presale/templates/pretixpresale/event/position.html index a8b735f10..2a89b69ee 100644 --- a/src/pretix/presale/templates/pretixpresale/event/position.html +++ b/src/pretix/presale/templates/pretixpresale/event/position.html @@ -4,6 +4,7 @@ {% load eventsignal %} {% load money %} {% load eventurl %} +{% load wrap_in %} {% block title %}{% trans "Registration details" %}{% endblock %} {% block content %}

@@ -48,7 +49,7 @@

- {% blocktrans trimmed with email=""|add:order.email|add:""|safe %} + {% blocktrans trimmed with email=order.email|wrap_in:"strong" %} This order is managed for you by {{ email }}. Please contact them for any questions regarding payment, cancellation or changes to this order. {% endblocktrans %} -- 2.52.0 From 8bd78eefcfb22b2651018253635c9f2dc69e794e Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Fri, 19 Jun 2026 13:22:19 +0200 Subject: [PATCH 67/96] [SECURITY] Fix reflected XSS in redirection page (CVE-2026-57533) --- .../base/templates/pretixbase/redirect.html | 3 +- src/pretix/helpers/templatetags/wrap_in.py | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/pretix/helpers/templatetags/wrap_in.py diff --git a/src/pretix/base/templates/pretixbase/redirect.html b/src/pretix/base/templates/pretixbase/redirect.html index 6c8404b4d..62048c122 100644 --- a/src/pretix/base/templates/pretixbase/redirect.html +++ b/src/pretix/base/templates/pretixbase/redirect.html @@ -2,13 +2,14 @@ {% load i18n %} {% load rich_text %} {% load static %} +{% load wrap_in %} {% block title %}{% trans "Redirect" %}{% endblock %} {% block content %}

{% trans "Redirect" %}

- {% blocktrans trimmed with host=""|add:hostname|add:""|safe %} + {% blocktrans trimmed with host=hostname|wrap_in:'strong' %} The link you clicked on wants to redirect you to a destination on the website {{ host }}. {% endblocktrans %} {% blocktrans trimmed %} diff --git a/src/pretix/helpers/templatetags/wrap_in.py b/src/pretix/helpers/templatetags/wrap_in.py new file mode 100644 index 000000000..e08bd2c90 --- /dev/null +++ b/src/pretix/helpers/templatetags/wrap_in.py @@ -0,0 +1,33 @@ +# +# This file is part of pretix (Community Edition). +# +# Copyright (C) 2014-2020 Raphael Michel and contributors +# Copyright (C) 2020-today pretix GmbH and contributors +# +# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General +# Public License as published by the Free Software Foundation in version 3 of the License. +# +# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are +# applicable granting you additional permissions and placing additional restrictions on your usage of this software. +# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive +# this file, see . +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more +# details. +# +# You should have received a copy of the GNU Affero General Public License along with this program. If not, see +# . +# +import logging + +from django import template +from django.utils.html import format_html + +register = template.Library() +logger = logging.getLogger(__name__) + + +@register.filter +def wrap_in(content, tag_name): + return format_html(f'<{tag_name}>{{}}', content) -- 2.52.0 From f615595547a1e30e4412d70a30b85fb49a5e8fe2 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 9 Jun 2026 19:32:56 +0200 Subject: [PATCH 68/96] [SECURITY] Disable outbound and file access for reportlab (CVE-2026-57535) --- src/pretix/helpers/apps.py | 5 +++ src/tests/helpers/test_reportlab.py | 52 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/tests/helpers/test_reportlab.py diff --git a/src/pretix/helpers/apps.py b/src/pretix/helpers/apps.py index c51aa3ed3..a2ef2d7d9 100644 --- a/src/pretix/helpers/apps.py +++ b/src/pretix/helpers/apps.py @@ -29,3 +29,8 @@ class PretixHelpersConfig(AppConfig): def ready(self): from .monkeypatching import monkeypatch_all_at_ready monkeypatch_all_at_ready() + + # Ensure reportlab does not make any calls to the internet + from reportlab import rl_config + rl_config.trustedHosts = [] + rl_config.trustedSchemes = ['data'] diff --git a/src/tests/helpers/test_reportlab.py b/src/tests/helpers/test_reportlab.py new file mode 100644 index 000000000..dcd8f0f5a --- /dev/null +++ b/src/tests/helpers/test_reportlab.py @@ -0,0 +1,52 @@ +# +# This file is part of pretix (Community Edition). +# +# Copyright (C) 2014-2020 Raphael Michel and contributors +# Copyright (C) 2020-today pretix GmbH and contributors +# +# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General +# Public License as published by the Free Software Foundation in version 3 of the License. +# +# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are +# applicable granting you additional permissions and placing additional restrictions on your usage of this software. +# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive +# this file, see . +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more +# details. +# +# You should have received a copy of the GNU Affero General Public License along with this program. If not, see +# . +# +import pytest +from reportlab.platypus import Paragraph + + +def test_http_access_disabled(monkeypatch): + def guard(*args, **kwargs): + pytest.fail("No internet wanted!") + + monkeypatch.setattr('socket.socket', guard) + + with pytest.raises(OSError, match="Cannot open resource"): + Paragraph( + '', + ) + + +def test_file_access_disabled_scheme(monkeypatch): + with pytest.raises(OSError, match="Cannot open resource"): + Paragraph( + '', + ) + + +@pytest.mark.xfail +def test_file_access_disabled_direct(monkeypatch): + # Unfortunately this is not prevented by the reprotlab config, but the risk is low since only valid images + # can be used. + with pytest.raises(OSError, match="Cannot open resource"): + Paragraph( + '', + ) -- 2.52.0 From eb068f524c95091a5e874a85c0264382d7e7241c Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 9 Jun 2026 19:46:04 +0200 Subject: [PATCH 69/96] [SECURITY] Prevent reading of any local files in reportlab (CVE-2026-57535) --- src/pretix/helpers/apps.py | 2 +- src/pretix/helpers/monkeypatching.py | 21 +++++++++++++++++++++ src/tests/helpers/test_reportlab.py | 10 ++++------ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/pretix/helpers/apps.py b/src/pretix/helpers/apps.py index a2ef2d7d9..847fccb6d 100644 --- a/src/pretix/helpers/apps.py +++ b/src/pretix/helpers/apps.py @@ -30,7 +30,7 @@ class PretixHelpersConfig(AppConfig): from .monkeypatching import monkeypatch_all_at_ready monkeypatch_all_at_ready() - # Ensure reportlab does not make any calls to the internet + # Ensure reportlab does not make any calls to the internet or the local disk from reportlab import rl_config rl_config.trustedHosts = [] rl_config.trustedSchemes = ['data'] diff --git a/src/pretix/helpers/monkeypatching.py b/src/pretix/helpers/monkeypatching.py index 1eb46fb5f..2e309255d 100644 --- a/src/pretix/helpers/monkeypatching.py +++ b/src/pretix/helpers/monkeypatching.py @@ -27,6 +27,7 @@ from datetime import datetime from http import cookies from django.conf import settings +from django.core.exceptions import SuspiciousFileOperation from PIL import Image from requests.adapters import HTTPAdapter from urllib3.connection import HTTPConnection, HTTPSConnection @@ -40,6 +41,8 @@ from urllib3.util.connection import ( ) from urllib3.util.timeout import _DEFAULT_TIMEOUT +from pretix.helpers.reportlab import ThumbnailingImageReader + _cgnat_net = ipaddress.ip_network('100.64.0.0/10') @@ -230,9 +233,27 @@ def monkeypatch_cookie_morsel(): cookies.Morsel._reserved.setdefault("partitioned", "Partitioned") +def monkeypatch_reportlab_imagereader(): + from reportlab.lib import utils + old_init = utils.ImageReader.__init__ + + def new_init(self, fileName, ident=None): # noqa + if not isinstance(fileName, Image.Image) and not hasattr(fileName, 'read') and not hasattr(fileName, 'str'): + if not isinstance(self, ThumbnailingImageReader): + # ThumbnailingImageReader is only used by us explicitly and not by using in html, so it is safe + raise SuspiciousFileOperation("reportlab should not be reading images from disk") + + return types.MethodType(old_init, self)( + fileName, ident + ) + + utils.ImageReader.__init__ = new_init + + def monkeypatch_all_at_ready(): monkeypatch_vobject_performance() monkeypatch_pillow_safer() monkeypatch_requests_timeout() monkeypatch_urllib3_ssrf_protection() monkeypatch_cookie_morsel() + monkeypatch_reportlab_imagereader() diff --git a/src/tests/helpers/test_reportlab.py b/src/tests/helpers/test_reportlab.py index dcd8f0f5a..354e2cbd1 100644 --- a/src/tests/helpers/test_reportlab.py +++ b/src/tests/helpers/test_reportlab.py @@ -20,6 +20,7 @@ # . # import pytest +from django.core.exceptions import SuspiciousFileOperation from reportlab.platypus import Paragraph @@ -29,24 +30,21 @@ def test_http_access_disabled(monkeypatch): monkeypatch.setattr('socket.socket', guard) - with pytest.raises(OSError, match="Cannot open resource"): + with pytest.raises(SuspiciousFileOperation, match="should not be reading images from disk"): Paragraph( '', ) def test_file_access_disabled_scheme(monkeypatch): - with pytest.raises(OSError, match="Cannot open resource"): + with pytest.raises(SuspiciousFileOperation, match="should not be reading images from disk"): Paragraph( '', ) -@pytest.mark.xfail def test_file_access_disabled_direct(monkeypatch): - # Unfortunately this is not prevented by the reprotlab config, but the risk is low since only valid images - # can be used. - with pytest.raises(OSError, match="Cannot open resource"): + with pytest.raises(SuspiciousFileOperation, match="should not be reading images from disk"): Paragraph( '', ) -- 2.52.0 From a8997f8971759871d30f06b2c56bdf648d67e70f Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 12 Jun 2026 13:56:29 +0200 Subject: [PATCH 70/96] [SECURITY] Properly escape HTML tags in PDF generation (CVE-2026-57535) --- src/pretix/base/invoicing/pdf.py | 166 ++++++++---------- src/pretix/base/pdf.py | 2 +- src/pretix/control/sysreport.py | 45 ++--- src/pretix/helpers/reportlab.py | 39 ++++ src/pretix/plugins/checkinlists/exporters.py | 18 +- .../plugins/reports/accountingreport.py | 156 ++++++++-------- src/pretix/plugins/reports/exporters.py | 26 +-- 7 files changed, 239 insertions(+), 213 deletions(-) diff --git a/src/pretix/base/invoicing/pdf.py b/src/pretix/base/invoicing/pdf.py index b47b376bd..ca464cb50 100644 --- a/src/pretix/base/invoicing/pdf.py +++ b/src/pretix/base/invoicing/pdf.py @@ -22,9 +22,7 @@ import datetime import logging import math -import re import textwrap -import unicodedata from collections import defaultdict from decimal import Decimal from io import BytesIO @@ -58,8 +56,8 @@ from pretix.base.services.currencies import SOURCE_NAMES from pretix.base.signals import register_invoice_renderers from pretix.base.templatetags.money import money_filter from pretix.helpers.reportlab import ( - FontFallbackParagraph, ThumbnailingImageReader, register_ttf_font_if_new, - reshaper, + FontFallbackParagraph, PlainTextParagraph, ThumbnailingImageReader, + normalize_text, register_ttf_font_if_new, reshaper, ) from pretix.presale.style import get_fonts @@ -259,18 +257,8 @@ class BaseReportlabInvoiceRenderer(BaseInvoiceRenderer): register_ttf_font_if_new(family + ' B I', finders.find(styles['bolditalic']['truetype'])) def _normalize(self, text): - # reportlab does not support unicode combination characters - # It's important we do this before we use ArabicReshaper - text = unicodedata.normalize("NFKC", text) - - # reportlab does not support RTL, ligature-heavy scripts like Arabic. Therefore, we use ArabicReshaper - # to resolve all ligatures and python-bidi to switch RTL texts. - try: - text = "
".join(get_display(reshaper.reshape(l)) for l in re.split("
", text)) - except: - logger.exception('Reshaping/Bidi fixes failed on string {}'.format(repr(text))) - - return text + # alias kept for plugin compatibility + return normalize_text(text) def _upper(self, val): # We uppercase labels, but not in every language @@ -351,10 +339,15 @@ class BaseReportlabInvoiceRenderer(BaseInvoiceRenderer): return 'invoice.pdf', 'application/pdf', buffer.read() def _clean_text(self, text, tags=None): - return self._normalize(bleach.clean( - text, - tags=set(tags) if tags else set() - ).strip().replace('
', '
').replace('\n', '
\n')) + # For backwards compatibility with customer content, we need to support tags like
and in a few text + # fields. Therefore, we can't use PlainTextParagraph for these, but run bleach instead to limit the allowed + # tags. + return self._normalize( + bleach.clean( + text, + tags=set(tags) if tags else set() + ).strip().replace('
', '
').replace('\n', '
\n') + ) class PaidMarker(Flowable): @@ -405,8 +398,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): invoice_to_top = 52 * mm def _draw_invoice_to(self, canvas): - p = FontFallbackParagraph(self._clean_text(self.invoice.address_invoice_to), - style=self.stylesheet['Normal']) + p = PlainTextParagraph(self.invoice.address_invoice_to, style=self.stylesheet['Normal']) p.wrapOn(canvas, self.invoice_to_width, self.invoice_to_height) p_size = p.wrap(self.invoice_to_width, self.invoice_to_height) p.drawOn(canvas, self.invoice_to_left, self.pagesize[1] - p_size[1] - self.invoice_to_top) @@ -417,8 +409,8 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): invoice_from_top = 17 * mm def _draw_invoice_from(self, canvas): - p = FontFallbackParagraph( - self._clean_text(self.invoice.full_invoice_from), + p = PlainTextParagraph( + self.invoice.full_invoice_from, style=self.stylesheet['InvoiceFrom'] ) p.wrapOn(canvas, self.invoice_from_width, self.invoice_from_height) @@ -548,13 +540,12 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): def _draw_event(self, canvas): def shorten(txt): txt = str(txt) - txt = bleach.clean(txt, tags=set()).strip() - p = FontFallbackParagraph(self._normalize(txt.strip().replace('\n', '
\n')), style=self.stylesheet['Normal']) + p = PlainTextParagraph(txt, style=self.stylesheet['Normal']) p_size = p.wrap(self.event_width, self.event_height) while p_size[1] > 2 * self.stylesheet['Normal'].leading: txt = ' '.join(txt.replace('…', '').split()[:-1]) + '…' - p = FontFallbackParagraph(self._normalize(txt.strip().replace('\n', '
\n')), style=self.stylesheet['Normal']) + p = PlainTextParagraph(txt, style=self.stylesheet['Normal']) p_size = p.wrap(self.event_width, self.event_height) return txt @@ -572,7 +563,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): else: p_str = shorten(self.invoice.event.name) - p = FontFallbackParagraph(self._normalize(p_str.strip().replace('\n', '
\n')), style=self.stylesheet['Normal']) + p = PlainTextParagraph(p_str, style=self.stylesheet['Normal']) p.wrapOn(canvas, self.event_width, self.event_height) p_size = p.wrap(self.event_width, self.event_height) p.drawOn(canvas, self.event_left, self.pagesize[1] - self.event_top - p_size[1]) @@ -645,39 +636,37 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): type_info_text = self.invoice.transmission_type_instance.pdf_info_text() if type_info_text: - story.append(FontFallbackParagraph( + story.append(PlainTextParagraph( type_info_text, self.stylesheet['WarningBlock'] )) if self.invoice.custom_field: - story.append(FontFallbackParagraph( + story.append(PlainTextParagraph( '{}: {}'.format( - self._clean_text(str(self.invoice.event.settings.invoice_address_custom_field)), - self._clean_text(self.invoice.custom_field), + str(self.invoice.event.settings.invoice_address_custom_field), + self.invoice.custom_field, ), self.stylesheet['Normal'] )) if self.invoice.internal_reference: - story.append(FontFallbackParagraph( - self._normalize(pgettext('invoice', 'Customer reference: {reference}').format( - reference=self._clean_text(self.invoice.internal_reference), - )), + story.append(PlainTextParagraph( + pgettext('invoice', 'Customer reference: {reference}').format( + reference=self.invoice.internal_reference, + ), self.stylesheet['Normal'] )) if self.invoice.invoice_to_vat_id: - story.append(FontFallbackParagraph( - self._normalize(pgettext('invoice', 'Customer VAT ID')) + ': ' + - self._clean_text(self.invoice.invoice_to_vat_id), + story.append(PlainTextParagraph( + pgettext('invoice', 'Customer VAT ID') + ': ' + self.invoice.invoice_to_vat_id, self.stylesheet['Normal'] )) if self.invoice.invoice_to_beneficiary: - story.append(FontFallbackParagraph( - self._normalize(pgettext('invoice', 'Beneficiary')) + ':
' + - self._clean_text(self.invoice.invoice_to_beneficiary), + story.append(PlainTextParagraph( + pgettext('invoice', 'Beneficiary') + ':\n' + self.invoice.invoice_to_beneficiary, self.stylesheet['Normal'] )) @@ -707,11 +696,11 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): story = [ NextPageTemplate('FirstPage'), - FontFallbackParagraph( - self._normalize( + PlainTextParagraph( + ( pgettext('invoice', 'Tax Invoice') if str(self.invoice.invoice_from_country) == 'AU' else pgettext('invoice', 'Invoice') - ) if not self.invoice.is_cancellation else self._normalize(pgettext('invoice', 'Cancellation')), + ) if not self.invoice.is_cancellation else pgettext('invoice', 'Cancellation'), self.stylesheet['Heading1'] ), Spacer(1, 5 * mm), @@ -733,17 +722,17 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): ] if has_taxes: tdata = [( - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Description')), self.stylesheet['Bold']), - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Qty')), self.stylesheet['BoldRightNoSplit']), - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Tax rate')), self.stylesheet['BoldRightNoSplit']), - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Net')), self.stylesheet['BoldRightNoSplit']), - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Gross')), self.stylesheet['BoldRightNoSplit']), + PlainTextParagraph(pgettext('invoice', 'Description'), self.stylesheet['Bold']), + PlainTextParagraph(pgettext('invoice', 'Qty'), self.stylesheet['BoldRightNoSplit']), + PlainTextParagraph(pgettext('invoice', 'Tax rate'), self.stylesheet['BoldRightNoSplit']), + PlainTextParagraph(pgettext('invoice', 'Net'), self.stylesheet['BoldRightNoSplit']), + PlainTextParagraph(pgettext('invoice', 'Gross'), self.stylesheet['BoldRightNoSplit']), )] else: tdata = [( - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Description')), self.stylesheet['Bold']), - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Qty')), self.stylesheet['BoldRightNoSplit']), - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Amount')), self.stylesheet['BoldRightNoSplit']), + PlainTextParagraph(pgettext('invoice', 'Description'), self.stylesheet['Bold']), + PlainTextParagraph(pgettext('invoice', 'Qty'), self.stylesheet['BoldRightNoSplit']), + PlainTextParagraph(pgettext('invoice', 'Amount'), self.stylesheet['BoldRightNoSplit']), )] def _group_key(line): @@ -780,8 +769,8 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): max_height = self.stylesheet['Normal'].leading * 5 p_style = self.stylesheet['Normal'] for __ in range(1000): - p = FontFallbackParagraph( - self._clean_text(curr_description, tags=['br']), + p = PlainTextParagraph( + curr_description, p_style ) h = p.wrap(max_width, doc.height)[1] @@ -862,7 +851,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): # Group together at the end of the invoice request_show_service_date = period_line elif period_line: - description_p_list.append(FontFallbackParagraph( + description_p_list.append(PlainTextParagraph( period_line, self.stylesheet['Fineprint'] )) @@ -874,7 +863,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): net_price=money_filter(net_value, self.invoice.event.currency), gross_price=money_filter(gross_value, self.invoice.event.currency), ) - description_p_list.append(FontFallbackParagraph( + description_p_list.append(PlainTextParagraph( single_price_line, self.stylesheet['Fineprint'] )) @@ -883,11 +872,11 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): description_p_list.pop(0), str(len(lines)), localize(tax_rate) + " %", - FontFallbackParagraph( + PlainTextParagraph( money_filter(net_value * len(lines), self.invoice.event.currency).replace('\xa0', ' '), self.stylesheet['NormalRight'] ), - FontFallbackParagraph( + PlainTextParagraph( money_filter(gross_value * len(lines), self.invoice.event.currency).replace('\xa0', ' '), self.stylesheet['NormalRight'] ), @@ -904,14 +893,14 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): single_price_line = pgettext('invoice', 'Single price: {price}').format( price=money_filter(gross_value, self.invoice.event.currency), ) - description_p_list.append(FontFallbackParagraph( + description_p_list.append(PlainTextParagraph( single_price_line, self.stylesheet['Fineprint'] )) tdata.append(( description_p_list.pop(0), str(len(lines)), - FontFallbackParagraph( + PlainTextParagraph( money_filter(gross_value * len(lines), self.invoice.event.currency).replace('\xa0', ' '), self.stylesheet['NormalRight'] ), @@ -944,12 +933,12 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): if has_taxes: tdata.append([ - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Invoice total')), self.stylesheet['Bold']), '', '', '', + PlainTextParagraph(pgettext('invoice', 'Invoice total'), self.stylesheet['Bold']), '', '', '', money_filter(total, self.invoice.event.currency) ]) else: tdata.append([ - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Invoice total')), self.stylesheet['Bold']), '', + PlainTextParagraph(pgettext('invoice', 'Invoice total'), self.stylesheet['Bold']), '', money_filter(total, self.invoice.event.currency) ]) @@ -958,12 +947,12 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): pending_sum = self.invoice.order.pending_sum if pending_sum != total: tdata.append( - [FontFallbackParagraph(self._normalize(pgettext('invoice', 'Received payments')), self.stylesheet['Normal'])] + + [PlainTextParagraph(pgettext('invoice', 'Received payments'), self.stylesheet['Normal'])] + (['', '', ''] if has_taxes else ['']) + [money_filter(pending_sum - total, self.invoice.event.currency)] ) tdata.append( - [FontFallbackParagraph(self._normalize(pgettext('invoice', 'Outstanding payments')), self.stylesheet['Bold'])] + + [PlainTextParagraph(pgettext('invoice', 'Outstanding payments'), self.stylesheet['Bold'])] + (['', '', ''] if has_taxes else ['']) + [money_filter(pending_sum, self.invoice.event.currency)] ) @@ -980,12 +969,12 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): s=Sum('amount') )['s'] or Decimal('0.00') tdata.append( - [FontFallbackParagraph(self._normalize(pgettext('invoice', 'Paid by gift card')), self.stylesheet['Normal'])] + + [PlainTextParagraph(pgettext('invoice', 'Paid by gift card'), self.stylesheet['Normal'])] + (['', '', ''] if has_taxes else ['']) + [money_filter(giftcard_sum, self.invoice.event.currency)] ) tdata.append( - [FontFallbackParagraph(self._normalize(pgettext('invoice', 'Remaining amount')), self.stylesheet['Bold'])] + + [PlainTextParagraph(pgettext('invoice', 'Remaining amount'), self.stylesheet['Bold'])] + (['', '', ''] if has_taxes else ['']) + [money_filter(total - giftcard_sum, self.invoice.event.currency)] ) @@ -1008,14 +997,14 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): story.append(Spacer(1, 10 * mm)) if request_show_service_date: - story.append(FontFallbackParagraph( - self._normalize(pgettext('invoice', 'Invoice period: {daterange}').format(daterange=request_show_service_date)), + story.append(PlainTextParagraph( + pgettext('invoice', 'Invoice period: {daterange}').format(daterange=request_show_service_date), self.stylesheet['Normal'] )) if self.invoice.payment_provider_text: story.append(FontFallbackParagraph( - self._normalize(self.invoice.payment_provider_text), + self._clean_text(self.invoice.payment_provider_text, tags=['br', 'b']), self.stylesheet['Normal'] )) @@ -1039,10 +1028,10 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): ('FONTNAME', (0, 0), (-1, -1), self.font_regular), ] thead = [ - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Tax rate')), self.stylesheet['Fineprint']), - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Net value')), self.stylesheet['FineprintRight']), - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Gross value')), self.stylesheet['FineprintRight']), - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Tax')), self.stylesheet['FineprintRight']), + PlainTextParagraph(pgettext('invoice', 'Tax rate'), self.stylesheet['Fineprint']), + PlainTextParagraph(pgettext('invoice', 'Net value'), self.stylesheet['FineprintRight']), + PlainTextParagraph(pgettext('invoice', 'Gross value'), self.stylesheet['FineprintRight']), + PlainTextParagraph(pgettext('invoice', 'Tax'), self.stylesheet['FineprintRight']), '' ] tdata = [thead] @@ -1053,7 +1042,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): continue tax = taxvalue_map[idx] tdata.append([ - FontFallbackParagraph(self._normalize(localize(rate) + " % " + name), self.stylesheet['Fineprint']), + PlainTextParagraph(localize(rate) + " % " + name, self.stylesheet['Fineprint']), money_filter(gross - tax, self.invoice.event.currency), money_filter(gross, self.invoice.event.currency), money_filter(tax, self.invoice.event.currency), @@ -1072,7 +1061,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): table.setStyle(TableStyle(tstyledata)) story.append(Spacer(5 * mm, 5 * mm)) story.append(KeepTogether([ - FontFallbackParagraph(self._normalize(pgettext('invoice', 'Included taxes')), self.stylesheet['FineprintHeading']), + PlainTextParagraph(pgettext('invoice', 'Included taxes'), self.stylesheet['FineprintHeading']), table ])) @@ -1089,7 +1078,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): net = gross - tax tdata.append([ - FontFallbackParagraph(self._normalize(localize(rate) + " % " + name), self.stylesheet['Fineprint']), + PlainTextParagraph(localize(rate) + " % " + name, self.stylesheet['Fineprint']), fmt(net), fmt(gross), fmt(tax), '' ]) @@ -1098,13 +1087,13 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): story.append(KeepTogether([ Spacer(1, height=2 * mm), - FontFallbackParagraph( - self._normalize(pgettext( + PlainTextParagraph( + pgettext( 'invoice', 'Using the conversion rate of 1:{rate} as published by the {authority} on ' '{date}, this corresponds to:' ).format(rate=localize(self.invoice.foreign_currency_rate), authority=SOURCE_NAMES.get(self.invoice.foreign_currency_source, "?"), - date=date_format(self.invoice.foreign_currency_rate_date, "SHORT_DATE_FORMAT"))), + date=date_format(self.invoice.foreign_currency_rate_date, "SHORT_DATE_FORMAT")), self.stylesheet['Fineprint'] ), Spacer(1, height=3 * mm), @@ -1113,14 +1102,14 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer): elif self.invoice.foreign_currency_display and self.invoice.foreign_currency_rate: foreign_total = round_decimal(total * self.invoice.foreign_currency_rate) story.append(Spacer(1, 5 * mm)) - story.append(FontFallbackParagraph(self._normalize( + story.append(PlainTextParagraph( pgettext( 'invoice', 'Using the conversion rate of 1:{rate} as published by the {authority} on ' '{date}, the invoice total corresponds to {total}.' ).format(rate=localize(self.invoice.foreign_currency_rate), date=date_format(self.invoice.foreign_currency_rate_date, "SHORT_DATE_FORMAT"), authority=SOURCE_NAMES.get(self.invoice.foreign_currency_source, "?"), - total=fmt(foreign_total))), + total=fmt(foreign_total)), self.stylesheet['Fineprint'] )) @@ -1162,11 +1151,8 @@ class Modern1Renderer(ClassicInvoiceRenderer): def _draw_invoice_from(self, canvas): if not self.invoice.address_invoice_from: return - c = [ - self._clean_text(l) - for l in self.invoice.address_invoice_from.strip().split('\n') - ] - p = FontFallbackParagraph(self._normalize(' · '.join(c)), style=self.stylesheet['Sender']) + c = self.invoice.address_invoice_from.strip().split('\n') + p = PlainTextParagraph(' · '.join(c), style=self.stylesheet['Sender']) p.wrapOn(canvas, self.invoice_to_width, 15.7 * mm) p.drawOn(canvas, self.invoice_to_left, self.pagesize[1] - self.invoice_to_top + 2 * mm) super()._draw_invoice_from(canvas) @@ -1225,8 +1211,8 @@ class Modern1Renderer(ClassicInvoiceRenderer): _draw(pgettext('invoice', 'Order code'), self.invoice.order.full_code, value_size, self.left_margin, 45 * mm, **kwargs) ] - p = FontFallbackParagraph( - self._normalize(date_format(self.invoice.date, "DATE_FORMAT")), + p = PlainTextParagraph( + date_format(self.invoice.date, "DATE_FORMAT"), style=ParagraphStyle(name=f'Normal{value_size}', fontName=self.font_regular, fontSize=value_size, leading=value_size * 1.2) ) w = stringWidth(p.text, p.frags[0].fontName, p.frags[0].fontSize) @@ -1283,7 +1269,7 @@ class Modern1SimplifiedRenderer(Modern1Renderer): i = [] if not self.invoice.event.has_subevents and self.invoice.event.settings.show_dates_on_frontpage: - i.append(FontFallbackParagraph( + i.append(PlainTextParagraph( pgettext('invoice', 'Event date: {date_range}').format( date_range=self.invoice.event.get_date_range_display(), ), diff --git a/src/pretix/base/pdf.py b/src/pretix/base/pdf.py index 364e9ec9e..e4b8159c0 100644 --- a/src/pretix/base/pdf.py +++ b/src/pretix/base/pdf.py @@ -1067,7 +1067,7 @@ class Renderer: except: logger.exception('Reshaping/Bidi fixes failed on string {}'.format(repr(text))) - p = Paragraph(text, style=style) + p = Paragraph(text, style=style) # not using AutoEscapeParagraph is safe as we escape above return p, ad, lineheight def _draw_textcontainer(self, canvas: Canvas, op: OrderPosition, order: Order, o: dict): diff --git a/src/pretix/control/sysreport.py b/src/pretix/control/sysreport.py index 6beb0e4fc..e2a908cb0 100644 --- a/src/pretix/control/sysreport.py +++ b/src/pretix/control/sysreport.py @@ -38,6 +38,7 @@ from pretix import __version__ from pretix.base.models import Order, OrderPayment, Transaction from pretix.base.plugins import get_all_plugins from pretix.base.templatetags.money import money_filter +from pretix.helpers.reportlab import PlainTextParagraph from pretix.plugins.reports.exporters import ReportlabExportMixin from pretix.settings import DATA_DIR @@ -79,23 +80,23 @@ class SysReport(ReportlabExportMixin): style_small.fontSize = 6 story = [ - Paragraph("System report", headlinestyle), + PlainTextParagraph("System report", headlinestyle), Spacer(1, 5 * mm), - Paragraph("Usage", subheadlinestyle), + PlainTextParagraph("Usage", subheadlinestyle), Spacer(1, 5 * mm), self._usage_table(), Spacer(1, 5 * mm), - Paragraph("Installed versions", subheadlinestyle), + PlainTextParagraph("Installed versions", subheadlinestyle), Spacer(1, 5 * mm), self._tech_table(), Spacer(1, 5 * mm), - Paragraph("Plugins", subheadlinestyle), + PlainTextParagraph("Plugins", subheadlinestyle), Spacer(1, 5 * mm), - Paragraph(self._get_plugin_versions(), style_small), + PlainTextParagraph(self._get_plugin_versions(), style_small), Spacer(1, 5 * mm), - Paragraph("Custom templates", subheadlinestyle), + PlainTextParagraph("Custom templates", subheadlinestyle), Spacer(1, 5 * mm), - Paragraph(self._get_custom_templates(), style_small), + PlainTextParagraph(self._get_custom_templates(), style_small), Spacer(1, 5 * mm), ] @@ -121,13 +122,13 @@ class SysReport(ReportlabExportMixin): ("RIGHTPADDING", (-1, 0), (-1, -1), 0), ] tdata = [ - [Paragraph("Site URL:", style), Paragraph(settings.SITE_URL, style)], - [Paragraph("pretix version:", style), Paragraph(__version__, style)], - [Paragraph("Python version:", style), Paragraph(sys.version, style)], - [Paragraph("Platform:", style), Paragraph(platform.platform(), style)], + [PlainTextParagraph("Site URL:", style), Paragraph(settings.SITE_URL, style)], + [PlainTextParagraph("pretix version:", style), Paragraph(__version__, style)], + [PlainTextParagraph("Python version:", style), Paragraph(sys.version, style)], + [PlainTextParagraph("Platform:", style), Paragraph(platform.platform(), style)], [ - Paragraph("Database engine:", style), - Paragraph(settings.DATABASES["default"]["ENGINE"], style), + PlainTextParagraph("Database engine:", style), + PlainTextParagraph(settings.DATABASES["default"]["ENGINE"], style), ], ] table = Table(tdata, colWidths=colwidths, repeatRows=0) @@ -206,7 +207,7 @@ class SysReport(ReportlabExportMixin): year_last = now().year tdata = [ [ - Paragraph(l, style_small_head) + PlainTextParagraph(l, style_small_head) for l in ( "Time frame", "Currency", @@ -257,19 +258,19 @@ class SysReport(ReportlabExportMixin): tdata.append( ( - Paragraph( + PlainTextParagraph( date_format(first_day, "M Y") + " – " + date_format(after_day - timedelta(days=1), "M Y"), style_small, ), - Paragraph(c, style_small), - Paragraph(str(orders_count), style_small) if i == 0 else "", - Paragraph(money_filter(revenue_data.get("s_net") or 0, c), style_small), - Paragraph(str(testmode_count), style_small) if i == 0 else "", - Paragraph(str(unconfirmed_count), style_small) if i == 0 else "", - Paragraph(str(revenue_data.get("c") or 0), style_small), - Paragraph(money_filter(revenue_data.get("s_gross") or 0, c), style_small), + PlainTextParagraph(c, style_small), + PlainTextParagraph(str(orders_count), style_small) if i == 0 else "", + PlainTextParagraph(money_filter(revenue_data.get("s_net") or 0, c), style_small), + PlainTextParagraph(str(testmode_count), style_small) if i == 0 else "", + PlainTextParagraph(str(unconfirmed_count), style_small) if i == 0 else "", + PlainTextParagraph(str(revenue_data.get("c") or 0), style_small), + PlainTextParagraph(money_filter(revenue_data.get("s_gross") or 0, c), style_small), ) ) diff --git a/src/pretix/helpers/reportlab.py b/src/pretix/helpers/reportlab.py index 5a39ac4a5..618dbb87e 100644 --- a/src/pretix/helpers/reportlab.py +++ b/src/pretix/helpers/reportlab.py @@ -20,14 +20,19 @@ # . # import logging +import re +import unicodedata from arabic_reshaper import ArabicReshaper +from bidi import get_display from django.conf import settings from django.utils.functional import SimpleLazyObject +from django.utils.html import escape from PIL import Image from reportlab.lib.styles import ParagraphStyle from reportlab.lib.utils import ImageReader from reportlab.pdfbase import pdfmetrics +from reportlab.pdfbase.ttfonts import TTFont from reportlab.platypus import Paragraph from pretix.presale.style import get_fonts @@ -70,6 +75,20 @@ reshaper = SimpleLazyObject(lambda: ArabicReshaper(configuration={ })) +def normalize_text(text: str) -> str: + # reportlab does not support unicode combination characters + # It's important we do this before we use ArabicReshaper + text = unicodedata.normalize("NFKC", text) + + # reportlab does not support RTL, ligature-heavy scripts like Arabic. Therefore, we use ArabicReshaper + # to resolve all ligatures and python-bidi to switch RTL texts. + try: + text = "\n".join(get_display(reshaper.reshape(l)) for l in re.split("\n", text)) + except: + logger.exception('Reshaping/Bidi fixes failed on string {}'.format(repr(text))) + return text + + class FontFallbackParagraph(Paragraph): def __init__(self, text, style=None, *args, **kwargs): if style is None: @@ -87,6 +106,8 @@ class FontFallbackParagraph(Paragraph): if not text: return True font = pdfmetrics.getFont(font_name) + if not isinstance(font, TTFont): + return True return all( ord(c) in font.face.charToGlyph or not c.isprintable() for c in text @@ -102,6 +123,24 @@ class FontFallbackParagraph(Paragraph): return family +class PlainTextParagraph(FontFallbackParagraph): + def __init__(self, text, style=None, linebreaks=True, *args, **kwargs): + if not isinstance(text, str): + if hasattr(text, '__html__'): + raise ValueError("It is contradictory to pass escaped content to PlainTextParagraph") + text = str(text) + + # Normalize unicode and apply reshaping + text = normalize_text(text) + + # Escape any HTML in the text + text = escape(text) + + if linebreaks: + text = text.strip().replace("\n", "
\n") + super().__init__(text, style, *args, **kwargs) + + def register_ttf_font_if_new(name, path): from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont diff --git a/src/pretix/plugins/checkinlists/exporters.py b/src/pretix/plugins/checkinlists/exporters.py index 8bd8763fc..40d98add1 100644 --- a/src/pretix/plugins/checkinlists/exporters.py +++ b/src/pretix/plugins/checkinlists/exporters.py @@ -64,7 +64,7 @@ from pretix.base.timeframes import ( from pretix.control.forms.widgets import Select2 from pretix.helpers.filenames import safe_for_filename from pretix.helpers.iter import chunked_iterable -from pretix.helpers.reportlab import FontFallbackParagraph +from pretix.helpers.reportlab import PlainTextParagraph from pretix.helpers.templatetags.jsonfield import JSONExtract from pretix.plugins.reports.exporters import ReportlabExportMixin @@ -343,7 +343,7 @@ class PDFCheckinList(ReportlabExportMixin, CheckInListMixin, BaseExporter): ] story = [ - FontFallbackParagraph( + PlainTextParagraph( cl.name, headlinestyle ), @@ -351,7 +351,7 @@ class PDFCheckinList(ReportlabExportMixin, CheckInListMixin, BaseExporter): if cl.subevent: story += [ Spacer(1, 3 * mm), - FontFallbackParagraph( + PlainTextParagraph( '{} ({} {})'.format( cl.subevent.name, cl.subevent.get_date_range_display(), @@ -381,10 +381,10 @@ class PDFCheckinList(ReportlabExportMixin, CheckInListMixin, BaseExporter): headrowstyle.fontName = 'OpenSansBd' for q in questions: txt = str(q.question) - p = FontFallbackParagraph(txt, headrowstyle) + p = PlainTextParagraph(txt, headrowstyle) while p.wrap(colwidths[len(tdata[0])], 5000)[1] > 30 * mm: txt = txt[:len(txt) - 50] + "..." - p = FontFallbackParagraph(txt, headrowstyle) + p = PlainTextParagraph(txt, headrowstyle) tdata[0].append(p) qs = self._get_queryset(cl, form_data) @@ -431,8 +431,8 @@ class PDFCheckinList(ReportlabExportMixin, CheckInListMixin, BaseExporter): CBFlowable(bool(op.last_checked_in)) if not op.blocked else '—', '✘' if op.order.status != Order.STATUS_PAID else '✔', op.order.code, - FontFallbackParagraph(name, self.get_style()), - FontFallbackParagraph(bleach.clean(str(item), tags={'br'}).strip().replace('
', '
'), self.get_style()), + PlainTextParagraph(name, self.get_style()), + PlainTextParagraph(bleach.clean(str(item), tags={'br'}).strip().replace('
', '
'), self.get_style()), ] acache = {} if op.addon_to: @@ -443,10 +443,10 @@ class PDFCheckinList(ReportlabExportMixin, CheckInListMixin, BaseExporter): for q in questions: txt = acache.get(q.pk, '') txt = bleach.clean(txt, tags={'br'}).strip().replace('
', '
') - p = FontFallbackParagraph(txt, self.get_style()) + p = PlainTextParagraph(txt, self.get_style()) while p.wrap(colwidths[len(row)], 5000)[1] > 50 * mm: txt = txt[:len(txt) - 50] + "..." - p = FontFallbackParagraph(txt, self.get_style()) + p = PlainTextParagraph(txt, self.get_style()) row.append(p) if op.order.status != Order.STATUS_PAID: tstyledata += [ diff --git a/src/pretix/plugins/reports/accountingreport.py b/src/pretix/plugins/reports/accountingreport.py index a3f377b52..1af6b2b9e 100644 --- a/src/pretix/plugins/reports/accountingreport.py +++ b/src/pretix/plugins/reports/accountingreport.py @@ -36,7 +36,7 @@ from reportlab.lib import colors, pagesizes from reportlab.lib.enums import TA_CENTER, TA_RIGHT from reportlab.lib.units import mm from reportlab.platypus import ( - KeepTogether, PageTemplate, Paragraph, Spacer, Table, TableStyle, + KeepTogether, PageTemplate, Spacer, Table, TableStyle, ) from pretix.base.exporter import BaseExporter @@ -49,7 +49,7 @@ from pretix.base.timeframes import ( resolve_timeframe_to_datetime_start_inclusive_end_exclusive, ) from pretix.control.forms.filter import get_all_payment_providers -from pretix.helpers.reportlab import FontFallbackParagraph +from pretix.helpers.reportlab import PlainTextParagraph from pretix.plugins.reports.exporters import ReportlabExportMixin @@ -311,13 +311,13 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): tdata = [ [ - FontFallbackParagraph(self._transaction_group_header_label(), tstyle_bold), - FontFallbackParagraph(_("Price"), tstyle_bold_right), - FontFallbackParagraph(_("Tax rate"), tstyle_bold_right), - FontFallbackParagraph("#", tstyle_bold_right), - FontFallbackParagraph(_("Net total"), tstyle_bold_right), - FontFallbackParagraph(_("Tax total"), tstyle_bold_right), - FontFallbackParagraph(_("Gross total"), tstyle_bold_right), + PlainTextParagraph(self._transaction_group_header_label(), tstyle_bold), + PlainTextParagraph(_("Price"), tstyle_bold_right), + PlainTextParagraph(_("Tax rate"), tstyle_bold_right), + PlainTextParagraph("#", tstyle_bold_right), + PlainTextParagraph(_("Net total"), tstyle_bold_right), + PlainTextParagraph(_("Tax total"), tstyle_bold_right), + PlainTextParagraph(_("Gross total"), tstyle_bold_right), ] ] @@ -347,12 +347,12 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): if group_id != last_group: if last_group_head_idx > 0 and group_id is not None: - tdata[last_group_head_idx][4] = Paragraph(money_filter(sum_price_by_group - sum_tax_by_group, currency), tstyle_bold_right), - tdata[last_group_head_idx][5] = Paragraph(money_filter(sum_tax_by_group, currency), tstyle_bold_right), - tdata[last_group_head_idx][6] = Paragraph(money_filter(sum_price_by_group, currency), tstyle_bold_right), + tdata[last_group_head_idx][4] = PlainTextParagraph(money_filter(sum_price_by_group - sum_tax_by_group, currency), tstyle_bold_right), + tdata[last_group_head_idx][5] = PlainTextParagraph(money_filter(sum_tax_by_group, currency), tstyle_bold_right), + tdata[last_group_head_idx][6] = PlainTextParagraph(money_filter(sum_price_by_group, currency), tstyle_bold_right), tdata.append( [ - FontFallbackParagraph( + PlainTextParagraph( group_label, tstyle_bold, ), @@ -375,20 +375,20 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): text = self._transaction_row_label(r) tdata.append( [ - FontFallbackParagraph(text, tstyle), - Paragraph( + PlainTextParagraph(text, tstyle), + PlainTextParagraph( money_filter(r["price"], currency) if "price" in r and r["price"] is not None else "", tstyle_right, ), - Paragraph(localize(r["tax_rate"].normalize()) + " %", tstyle_right), - Paragraph(str(r["sum_cont"]), tstyle_right), - Paragraph( + PlainTextParagraph(localize(r["tax_rate"].normalize()) + " %", tstyle_right), + PlainTextParagraph(str(r["sum_cont"]), tstyle_right), + PlainTextParagraph( money_filter(r["sum_price"] - r["sum_tax"], currency), tstyle_right ), - Paragraph(money_filter(r["sum_tax"], currency), tstyle_right), - Paragraph(money_filter(r["sum_price"], currency), tstyle_right), + PlainTextParagraph(money_filter(r["sum_tax"], currency), tstyle_right), + PlainTextParagraph(money_filter(r["sum_price"], currency), tstyle_right), ] ) sum_cnt_by_tax_rate[r["tax_rate"]] += r["sum_cont"] @@ -398,19 +398,19 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): sum_tax_by_group += r["sum_tax"] if last_group_head_idx > 0 and last_group is not None: - tdata[last_group_head_idx][4] = Paragraph(money_filter(sum_price_by_group - sum_tax_by_group, currency), tstyle_bold_right), - tdata[last_group_head_idx][5] = Paragraph(money_filter(sum_tax_by_group, currency), tstyle_bold_right), - tdata[last_group_head_idx][6] = Paragraph(money_filter(sum_price_by_group, currency), tstyle_bold_right), + tdata[last_group_head_idx][4] = PlainTextParagraph(money_filter(sum_price_by_group - sum_tax_by_group, currency), tstyle_bold_right), + tdata[last_group_head_idx][5] = PlainTextParagraph(money_filter(sum_tax_by_group, currency), tstyle_bold_right), + tdata[last_group_head_idx][6] = PlainTextParagraph(money_filter(sum_price_by_group, currency), tstyle_bold_right), if len(sum_tax_by_tax_rate) > 1: for tax_rate in sorted(sum_tax_by_tax_rate.keys(), reverse=True): tdata.append( [ - FontFallbackParagraph(_("Sum"), tstyle), - Paragraph("", tstyle_right), - Paragraph(localize(tax_rate.normalize()) + " %", tstyle_right), - Paragraph("", tstyle_right), - Paragraph( + PlainTextParagraph(_("Sum"), tstyle), + PlainTextParagraph("", tstyle_right), + PlainTextParagraph(localize(tax_rate.normalize()) + " %", tstyle_right), + PlainTextParagraph("", tstyle_right), + PlainTextParagraph( money_filter( sum_price_by_tax_rate[tax_rate] - sum_tax_by_tax_rate[tax_rate], @@ -418,10 +418,10 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): ), tstyle_right, ), - Paragraph( + PlainTextParagraph( money_filter(sum_tax_by_tax_rate[tax_rate], currency), tstyle_right ), - Paragraph( + PlainTextParagraph( money_filter(sum_price_by_tax_rate[tax_rate], currency), tstyle_right, ), @@ -439,11 +439,11 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): tdata.append( [ - FontFallbackParagraph(_("Sum"), tstyle_bold), - Paragraph("", tstyle_right), - Paragraph("", tstyle_right), - Paragraph("", tstyle_bold_right), - Paragraph( + PlainTextParagraph(_("Sum"), tstyle_bold), + PlainTextParagraph("", tstyle_right), + PlainTextParagraph("", tstyle_right), + PlainTextParagraph("", tstyle_bold_right), + PlainTextParagraph( money_filter( sum(sum_price_by_tax_rate.values()) - sum(sum_tax_by_tax_rate.values()), @@ -451,11 +451,11 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): ), tstyle_bold_right, ), - Paragraph( + PlainTextParagraph( money_filter(sum(sum_tax_by_tax_rate.values()), currency), tstyle_bold_right, ), - Paragraph( + PlainTextParagraph( money_filter(sum(sum_price_by_tax_rate.values()), currency), tstyle_bold_right, ), @@ -493,10 +493,10 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): tdata = [ [ - FontFallbackParagraph(_("Payment method"), tstyle_bold), - FontFallbackParagraph(_("Payments"), tstyle_bold_right), - FontFallbackParagraph(_("Refunds"), tstyle_bold_right), - FontFallbackParagraph(_("Total"), tstyle_bold_right), + PlainTextParagraph(_("Payment method"), tstyle_bold), + PlainTextParagraph(_("Payments"), tstyle_bold_right), + PlainTextParagraph(_("Refunds"), tstyle_bold_right), + PlainTextParagraph(_("Total"), tstyle_bold_right), ] ] @@ -537,20 +537,20 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): for p in providers: tdata.append( [ - Paragraph(provider_names.get(p, p), tstyle), - FontFallbackParagraph( + PlainTextParagraph(provider_names.get(p, p), tstyle), + PlainTextParagraph( money_filter(payments_by_provider[p], currency) if p in payments_by_provider else "", tstyle_right, ), - Paragraph( + PlainTextParagraph( money_filter(refunds_by_provider[p], currency) if p in refunds_by_provider else "", tstyle_right, ), - Paragraph( + PlainTextParagraph( money_filter( payments_by_provider.get(p, Decimal("0.00")) - refunds_by_provider.get(p, Decimal("0.00")), @@ -563,20 +563,20 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): tdata.append( [ - FontFallbackParagraph(_("Sum"), tstyle_bold), - Paragraph( + PlainTextParagraph(_("Sum"), tstyle_bold), + PlainTextParagraph( money_filter( sum(payments_by_provider.values(), Decimal("0.00")), currency ), tstyle_bold_right, ), - Paragraph( + PlainTextParagraph( money_filter( sum(refunds_by_provider.values(), Decimal("0.00")), currency ), tstyle_bold_right, ), - Paragraph( + PlainTextParagraph( money_filter( sum(payments_by_provider.values(), Decimal("0.00")) - sum(refunds_by_provider.values(), Decimal("0.00")), @@ -641,7 +641,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): open_before = tx_before - p_before + r_before tdata.append( [ - FontFallbackParagraph( + PlainTextParagraph( _("Pending payments at {datetime}").format( datetime=date_format( (df_start - datetime.timedelta.resolution).astimezone( @@ -653,7 +653,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): tstyle, ), "", - Paragraph(money_filter(open_before, currency), tstyle_right), + PlainTextParagraph(money_filter(open_before, currency), tstyle_right), ] ) else: @@ -670,30 +670,30 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): ] or Decimal("0.00") tdata.append( [ - FontFallbackParagraph(_("Orders"), tstyle), - Paragraph("+", tstyle_center), - Paragraph(money_filter(tx_during, currency), tstyle_right), + PlainTextParagraph(_("Orders"), tstyle), + PlainTextParagraph("+", tstyle_center), + PlainTextParagraph(money_filter(tx_during, currency), tstyle_right), ] ) tdata.append( [ - FontFallbackParagraph(_("Payments"), tstyle), - Paragraph("-", tstyle_center), - Paragraph(money_filter(p_during, currency), tstyle_right), + PlainTextParagraph(_("Payments"), tstyle), + PlainTextParagraph("-", tstyle_center), + PlainTextParagraph(money_filter(p_during, currency), tstyle_right), ] ) tdata.append( [ - FontFallbackParagraph(_("Refunds"), tstyle), - Paragraph("+", tstyle_center), - Paragraph(money_filter(r_during, currency), tstyle_right), + PlainTextParagraph(_("Refunds"), tstyle), + PlainTextParagraph("+", tstyle_center), + PlainTextParagraph(money_filter(r_during, currency), tstyle_right), ] ) open_after = open_before + tx_during - p_during + r_during tdata.append( [ - Paragraph( + PlainTextParagraph( _("Pending payments at {datetime}").format( datetime=date_format( ((df_end or now()) - datetime.timedelta.resolution).astimezone( @@ -704,8 +704,8 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): ), tstyle_bold, ), - Paragraph("=", tstyle_center), - Paragraph(money_filter(open_after, currency), tstyle_bold_right), + PlainTextParagraph("=", tstyle_center), + PlainTextParagraph(money_filter(open_after, currency), tstyle_bold_right), ] ) tstyledata += [ @@ -752,7 +752,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): ) tdata.append( [ - Paragraph( + PlainTextParagraph( _("Total gift card value at {datetime}").format( datetime=date_format( (df_start - datetime.timedelta.resolution).astimezone( @@ -763,7 +763,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): ), tstyle, ), - Paragraph(money_filter(tx_before, currency), tstyle_right), + PlainTextParagraph(money_filter(tx_before, currency), tstyle_right), ] ) else: @@ -774,8 +774,8 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): ] or Decimal("0.00") tdata.append( [ - FontFallbackParagraph(_("Gift card transactions (credit)"), tstyle), - Paragraph(money_filter(tx_during_pos, currency), tstyle_right), + PlainTextParagraph(_("Gift card transactions (credit)"), tstyle), + PlainTextParagraph(money_filter(tx_during_pos, currency), tstyle_right), ] ) @@ -784,15 +784,15 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): ] or Decimal("0.00") tdata.append( [ - FontFallbackParagraph(_("Gift card transactions (debit)"), tstyle), - Paragraph(money_filter(tx_during_neg, currency), tstyle_right), + PlainTextParagraph(_("Gift card transactions (debit)"), tstyle), + PlainTextParagraph(money_filter(tx_during_neg, currency), tstyle_right), ] ) open_after = tx_before + tx_during_pos + tx_during_neg tdata.append( [ - Paragraph( + PlainTextParagraph( _("Total gift card value at {datetime}").format( datetime=date_format( ((df_end or now()) - datetime.timedelta.resolution).astimezone( @@ -803,7 +803,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): ), tstyle_bold, ), - Paragraph(money_filter(open_after, currency), tstyle_bold_right), + PlainTextParagraph(money_filter(open_after, currency), tstyle_bold_right), ] ) tstyledata += [ @@ -854,10 +854,10 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): style_small.leading = 10 story = [ - FontFallbackParagraph(self.verbose_name, style_h1), + PlainTextParagraph(self.verbose_name, style_h1), Spacer(0, 3 * mm), - FontFallbackParagraph( - "
".join(escape(f) for f in self.describe_filters(form_data)), + PlainTextParagraph( + "\n".join(escape(f) for f in self.describe_filters(form_data)), style_small, ), ] @@ -870,7 +870,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): if s: story += [ Spacer(0, 3 * mm), - FontFallbackParagraph(_("Orders") + c_head, style_h2), + PlainTextParagraph(_("Orders") + c_head, style_h2), Spacer(0, 3 * mm), *s ] @@ -881,7 +881,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): if s: story += [ Spacer(0, 8 * mm), - FontFallbackParagraph(_("Payments") + c_head, style_h2), + PlainTextParagraph(_("Payments") + c_head, style_h2), Spacer(0, 3 * mm), *s ] @@ -894,7 +894,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): Spacer(0, 8 * mm), KeepTogether( [ - FontFallbackParagraph(_("Open items") + c_head, style_h2), + PlainTextParagraph(_("Open items") + c_head, style_h2), Spacer(0, 3 * mm), *s ] @@ -912,7 +912,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter): Spacer(0, 8 * mm), KeepTogether( [ - FontFallbackParagraph(_("Gift cards") + c_head, style_h2), + PlainTextParagraph(_("Gift cards") + c_head, style_h2), Spacer(0, 3 * mm), *s, ] diff --git a/src/pretix/plugins/reports/exporters.py b/src/pretix/plugins/reports/exporters.py index 6957ab396..98241865e 100644 --- a/src/pretix/plugins/reports/exporters.py +++ b/src/pretix/plugins/reports/exporters.py @@ -70,7 +70,7 @@ from pretix.base.timeframes import ( ) from pretix.control.forms.filter import OverviewFilterForm from pretix.helpers.reportlab import ( - FontFallbackParagraph, register_ttf_font_if_new, + PlainTextParagraph, register_ttf_font_if_new, ) from pretix.presale.style import get_fonts @@ -282,7 +282,7 @@ class OverviewReport(Report): headlinestyle.fontSize = 15 headlinestyle.fontName = 'OpenSansBd' story = [ - FontFallbackParagraph(_('Orders by product') + ' ' + (_('(excl. taxes)') if net else _('(incl. taxes)')), headlinestyle), + PlainTextParagraph(_('Orders by product') + ' ' + (_('(excl. taxes)') if net else _('(incl. taxes)')), headlinestyle), Spacer(1, 5 * mm) ] return story @@ -292,7 +292,7 @@ class OverviewReport(Report): if form_data.get('date_axis') and form_data.get('date_range'): d_start, d_end = resolve_timeframe_to_dates_inclusive(now(), form_data['date_range'], self.timezone) story += [ - FontFallbackParagraph(_('{axis} between {start} and {end}').format( + PlainTextParagraph(_('{axis} between {start} and {end}').format( axis=dict(OverviewFilterForm(event=self.event).fields['date_axis'].choices)[form_data.get('date_axis')], start=date_format(d_start, 'SHORT_DATE_FORMAT') if d_start else '–', end=date_format(d_end, 'SHORT_DATE_FORMAT') if d_end else '–', @@ -305,13 +305,13 @@ class OverviewReport(Report): subevent = self.event.subevents.get(pk=self.form_data.get('subevent')) except SubEvent.DoesNotExist: subevent = self.form_data.get('subevent') - story.append(FontFallbackParagraph(pgettext('subevent', 'Date: {}').format(subevent), self.get_style())) + story.append(PlainTextParagraph(pgettext('subevent', 'Date: {}').format(subevent), self.get_style())) story.append(Spacer(1, 5 * mm)) if form_data.get('subevent_date_range'): d_start, d_end = resolve_timeframe_to_datetime_start_inclusive_end_exclusive(now(), form_data['subevent_date_range'], self.timezone) story += [ - FontFallbackParagraph(_('{axis} between {start} and {end}').format( + PlainTextParagraph(_('{axis} between {start} and {end}').format( axis=_('Event date'), start=date_format(d_start, 'SHORT_DATE_FORMAT') if d_start else '–', end=date_format(d_end - timedelta(hours=1), 'SHORT_DATE_FORMAT') if d_end else '–', @@ -384,13 +384,13 @@ class OverviewReport(Report): tdata = [ [ _('Product'), - FontFallbackParagraph(_('Canceled'), tstyle_th), + PlainTextParagraph(_('Canceled'), tstyle_th), '', - FontFallbackParagraph(_('Expired'), tstyle_th), + PlainTextParagraph(_('Expired'), tstyle_th), '', - FontFallbackParagraph(_('Approval pending'), tstyle_th), + PlainTextParagraph(_('Approval pending'), tstyle_th), '', - FontFallbackParagraph(_('Purchased'), tstyle_th), + PlainTextParagraph(_('Purchased'), tstyle_th), '', '', '', '', '' ], [ @@ -421,14 +421,14 @@ class OverviewReport(Report): for tup in items_by_category: if tup[0]: tdata.append([ - FontFallbackParagraph(str(tup[0]), tstyle_bold) + PlainTextParagraph(str(tup[0]), tstyle_bold) ]) for l, s in states: tdata[-1].append(str(tup[0].num[l][0])) tdata[-1].append(floatformat(tup[0].num[l][2 if net else 1], places)) for item in tup[1]: tdata.append([ - FontFallbackParagraph(str(item), tstyle) + PlainTextParagraph(str(item), tstyle) ]) for l, s in states: tdata[-1].append(str(item.num[l][0])) @@ -436,7 +436,7 @@ class OverviewReport(Report): if item.has_variations: for var in item.all_variations: tdata.append([ - FontFallbackParagraph(" " + str(var), tstyle) + PlainTextParagraph(" " + str(var), tstyle) ]) for l, s in states: tdata[-1].append(str(var.num[l][0])) @@ -568,7 +568,7 @@ class OrderTaxListReportPDF(Report): tstyledata.append(('SPAN', (5 + 2 * i, 0), (6 + 2 * i, 0))) story = [ - FontFallbackParagraph(_('Orders by tax rate ({currency})').format(currency=self.event.currency), headlinestyle), + PlainTextParagraph(_('Orders by tax rate ({currency})').format(currency=self.event.currency), headlinestyle), Spacer(1, 5 * mm) ] tdata = [ -- 2.52.0 From 1f5fe1b237a69a92adcb68544f5b51045e7e3d9b Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 26 Jun 2026 16:45:20 +0200 Subject: [PATCH 71/96] SSRF protection: Edge case handling for CGNAT and v4/v6 mapping (Z#23236468) (#6260) * SSRF protection: Edge case handling for CGNAT and v4/v6 mapping (Z#23236468) * SMTP SSRF protection: Edge case handling for CGNAT and v4/v6 mapping (#6264) --------- Co-authored-by: pajowu --- src/pretix/base/email.py | 5 +++++ src/pretix/helpers/monkeypatching.py | 3 ++- src/tests/base/test_mail.py | 3 +++ src/tests/helpers/test_urllib.py | 3 +++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/pretix/base/email.py b/src/pretix/base/email.py index b6a61e8a9..db3ee6299 100644 --- a/src/pretix/base/email.py +++ b/src/pretix/base/email.py @@ -57,6 +57,8 @@ logger = logging.getLogger('pretix.base.email') T = TypeVar("T", bound=EmailBackend) +_cgnat_net = ipaddress.ip_network('100.64.0.0/10') + def test_custom_smtp_backend(backend: T, from_addr: str) -> None: try: @@ -253,12 +255,15 @@ def create_connection(address, timeout=socket.getdefaulttimeout(), if not getattr(settings, "MAIL_CUSTOM_SMTP_ALLOW_PRIVATE_NETWORKS", False): ip_addr = ipaddress.ip_address(sa[0]) + check_ip4 = ip_addr.ipv4_mapped if getattr(ip_addr, "ipv4_mapped", None) else ip_addr if ip_addr.is_multicast: raise socket.error(f"Request to multicast address {sa[0]} blocked") if ip_addr.is_loopback or ip_addr.is_link_local: raise socket.error(f"Request to local address {sa[0]} blocked") if ip_addr.is_private: raise socket.error(f"Request to private address {sa[0]} blocked") + if check_ip4 in _cgnat_net: + raise socket.error(f"Request to RFC 6598 address {sa[0]} blocked") sock = None try: diff --git a/src/pretix/helpers/monkeypatching.py b/src/pretix/helpers/monkeypatching.py index 2e309255d..39150e334 100644 --- a/src/pretix/helpers/monkeypatching.py +++ b/src/pretix/helpers/monkeypatching.py @@ -151,13 +151,14 @@ def monkeypatch_urllib3_ssrf_protection(): if not getattr(settings, "ALLOW_HTTP_TO_PRIVATE_NETWORKS", False): ip_addr = ipaddress.ip_address(sa[0]) + check_ip4 = ip_addr.ipv4_mapped if getattr(ip_addr, "ipv4_mapped", None) else ip_addr if ip_addr.is_multicast: raise HTTPError(f"Request to multicast address {sa[0]} blocked") if ip_addr.is_loopback or ip_addr.is_link_local: raise HTTPError(f"Request to local address {sa[0]} blocked") if ip_addr.is_private: raise HTTPError(f"Request to private address {sa[0]} blocked") - if ip_addr in _cgnat_net: + if check_ip4 in _cgnat_net: raise HTTPError(f"Request to RFC 6598 address {sa[0]} blocked") sock = None diff --git a/src/tests/base/test_mail.py b/src/tests/base/test_mail.py index 581710f48..9a5a9e66a 100644 --- a/src/tests/base/test_mail.py +++ b/src/tests/base/test_mail.py @@ -602,10 +602,13 @@ PRIVATE_IPS_RES = [ [(socket.AF_INET, socket.SOCK_STREAM, 6, '', ('127.1.1.1', 443))], [(socket.AF_INET, socket.SOCK_STREAM, 6, '', ('192.168.5.3', 443))], [(socket.AF_INET, socket.SOCK_STREAM, 6, '', ('224.0.0.1', 443))], + [(socket.AF_INET, socket.SOCK_STREAM, 6, '', ('100.64.0.1', 443))], + [(socket.AF_INET, socket.SOCK_STREAM, 6, '', ('100.100.100.100', 443))], [(socket.AF_INET6, socket.SOCK_STREAM, 6, '', ('::1', 443, 0, 0))], [(socket.AF_INET6, socket.SOCK_STREAM, 6, '', ('fe80::1', 443, 0, 0))], [(socket.AF_INET6, socket.SOCK_STREAM, 6, '', ('ff00::1', 443, 0, 0))], [(socket.AF_INET6, socket.SOCK_STREAM, 6, '', ('fc00::1', 443, 0, 0))], + [(socket.AF_INET6, socket.SOCK_STREAM, 6, '', ('::ffff:100.64.0.1', 443, 0, 0))], ] diff --git a/src/tests/helpers/test_urllib.py b/src/tests/helpers/test_urllib.py index b50c12916..37841c591 100644 --- a/src/tests/helpers/test_urllib.py +++ b/src/tests/helpers/test_urllib.py @@ -43,6 +43,8 @@ def test_private_ip_blocked(): requests.get("https://10.0.0.1", timeout=0.1) with pytest.raises(HTTPError, match="Request to RFC 6598 address.*"): requests.get("https://100.100.100.100", timeout=0.1) + with pytest.raises(HTTPError, match="Request to RFC 6598 address.*"): + requests.get("https://[::ffff:100.64.0.1]", timeout=0.1) @pytest.mark.django_db @@ -58,6 +60,7 @@ def test_private_ip_blocked(): [(AF_INET6, SOCK_STREAM, 6, '', ('fe80::1', 443, 0, 0))], [(AF_INET6, SOCK_STREAM, 6, '', ('ff00::1', 443, 0, 0))], [(AF_INET6, SOCK_STREAM, 6, '', ('fc00::1', 443, 0, 0))], + [(AF_INET6, SOCK_STREAM, 6, "", ("::ffff:100.64.0.1", 443, 0, 0))], ]) def test_dns_resolving_to_local_blocked(res): with mock.patch('socket.getaddrinfo') as mock_addr: -- 2.52.0 From dc3b742d8c2b042de625b9f94fe1f1fa6d9e38cb Mon Sep 17 00:00:00 2001 From: Kim Lozano Date: Thu, 25 Jun 2026 07:26:58 +0200 Subject: [PATCH 72/96] Translations: Update Catalan Currently translated at 29.7% (1875 of 6302 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ca/ powered by weblate --- src/pretix/locale/ca/LC_MESSAGES/django.po | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/pretix/locale/ca/LC_MESSAGES/django.po b/src/pretix/locale/ca/LC_MESSAGES/django.po index 253069ae1..6e905657d 100644 --- a/src/pretix/locale/ca/LC_MESSAGES/django.po +++ b/src/pretix/locale/ca/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-05-27 15:47+0000\n" -"PO-Revision-Date: 2026-04-30 18:00+0000\n" -"Last-Translator: Paul Berschick \n" +"PO-Revision-Date: 2026-06-25 14:00+0000\n" +"Last-Translator: Kim Lozano \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17\n" +"X-Generator: Weblate 2026.6.1\n" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670 #: pretix/control/templates/pretixcontrol/events/index.html:166 @@ -9170,12 +9170,11 @@ msgstr "" "quantitat que heu seleccionat. Si us plau, mireu més abaix per a més detalls." #: pretix/base/services/cart.py:134 pretix/base/services/orders.py:152 -#, fuzzy, python-format -#| msgid "You cannot select more than %s items per order." +#, python-format msgid "You cannot select more than %s item per order." msgid_plural "You cannot select more than %s items per order." msgstr[0] "No podeu seleccionar més de %s element per comanda." -msgstr[1] "No podeu seleccionar més de %s element per comanda." +msgstr[1] "No podeu seleccionar més de %s elements per comanda." #: pretix/base/services/cart.py:138 pretix/base/services/orders.py:1603 #, fuzzy, python-format -- 2.52.0 From e80d84ec3cf9fa1b5a7913614dddb52ca8740539 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sun, 28 Jun 2026 16:44:09 +0200 Subject: [PATCH 73/96] Update po files [CI skip] Signed-off-by: Raphael Michel --- src/pretix/locale/ang/LC_MESSAGES/django.po | 3895 ++++++++-------- src/pretix/locale/ang/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/ar/LC_MESSAGES/django.po | 3889 ++++++++-------- src/pretix/locale/ar/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/az/LC_MESSAGES/django.po | 3895 ++++++++-------- src/pretix/locale/az/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/ca/LC_MESSAGES/django.po | 3907 ++++++++-------- src/pretix/locale/ca/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/cs/LC_MESSAGES/django.po | 3899 ++++++++-------- src/pretix/locale/cs/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/cy/LC_MESSAGES/django.po | 3897 ++++++++-------- src/pretix/locale/cy/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/da/LC_MESSAGES/django.po | 3932 ++++++++-------- src/pretix/locale/da/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/de/LC_MESSAGES/django.po | 3917 ++++++++-------- src/pretix/locale/de/LC_MESSAGES/djangojs.po | 26 +- .../locale/de_Informal/LC_MESSAGES/django.po | 3913 ++++++++-------- .../de_Informal/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/django.pot | 3895 ++++++++-------- src/pretix/locale/djangojs.pot | 26 +- src/pretix/locale/el/LC_MESSAGES/django.po | 3918 ++++++++-------- src/pretix/locale/el/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/enm/LC_MESSAGES/django.po | 3895 ++++++++-------- src/pretix/locale/enm/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/es/LC_MESSAGES/django.po | 3918 ++++++++-------- src/pretix/locale/es/LC_MESSAGES/djangojs.po | 26 +- .../locale/es_419/LC_MESSAGES/django.po | 3912 ++++++++-------- .../locale/es_419/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/et/LC_MESSAGES/django.po | 3895 ++++++++-------- src/pretix/locale/et/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/eu/LC_MESSAGES/django.po | 3963 +++++++++-------- src/pretix/locale/eu/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/fi/LC_MESSAGES/django.po | 3935 ++++++++-------- src/pretix/locale/fi/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/fo/LC_MESSAGES/django.po | 3903 ++++++++-------- src/pretix/locale/fo/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/fr/LC_MESSAGES/django.po | 3921 ++++++++-------- src/pretix/locale/fr/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/gl/LC_MESSAGES/django.po | 3877 ++++++++-------- src/pretix/locale/gl/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/he/LC_MESSAGES/django.po | 3910 ++++++++-------- src/pretix/locale/he/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/hr/LC_MESSAGES/django.po | 3905 ++++++++-------- src/pretix/locale/hr/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/hu/LC_MESSAGES/django.po | 3902 ++++++++-------- src/pretix/locale/hu/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/id/LC_MESSAGES/django.po | 3912 ++++++++-------- src/pretix/locale/id/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/it/LC_MESSAGES/django.po | 3927 ++++++++-------- src/pretix/locale/it/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/ja/LC_MESSAGES/django.po | 3912 ++++++++-------- src/pretix/locale/ja/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/ko/LC_MESSAGES/django.po | 3906 ++++++++-------- src/pretix/locale/ko/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/lb/LC_MESSAGES/django.po | 3920 ++++++++-------- src/pretix/locale/lb/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/lt/LC_MESSAGES/django.po | 3895 ++++++++-------- src/pretix/locale/lt/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/lv/LC_MESSAGES/django.po | 3902 ++++++++-------- src/pretix/locale/lv/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/nan/LC_MESSAGES/django.po | 3895 ++++++++-------- src/pretix/locale/nan/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/nb_NO/LC_MESSAGES/django.po | 3914 ++++++++-------- .../locale/nb_NO/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/nl/LC_MESSAGES/django.po | 3913 ++++++++-------- src/pretix/locale/nl/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/nl_BE/LC_MESSAGES/django.po | 3910 ++++++++-------- .../locale/nl_BE/LC_MESSAGES/djangojs.po | 26 +- .../locale/nl_Informal/LC_MESSAGES/django.po | 3913 ++++++++-------- .../nl_Informal/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/pl/LC_MESSAGES/django.po | 3910 ++++++++-------- src/pretix/locale/pl/LC_MESSAGES/djangojs.po | 26 +- .../locale/pl_Informal/LC_MESSAGES/django.po | 3927 ++++++++-------- .../pl_Informal/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/pt/LC_MESSAGES/django.po | 3916 ++++++++-------- src/pretix/locale/pt/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/pt_BR/LC_MESSAGES/django.po | 3913 ++++++++-------- .../locale/pt_BR/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/pt_PT/LC_MESSAGES/django.po | 3905 ++++++++-------- .../locale/pt_PT/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/ro/LC_MESSAGES/django.po | 3890 ++++++++-------- src/pretix/locale/ro/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/ru/LC_MESSAGES/django.po | 3917 ++++++++-------- src/pretix/locale/ru/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/si/LC_MESSAGES/django.po | 3893 ++++++++-------- src/pretix/locale/si/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/sk/LC_MESSAGES/django.po | 3902 ++++++++-------- src/pretix/locale/sk/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/sl/LC_MESSAGES/django.po | 3902 ++++++++-------- src/pretix/locale/sl/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/sq/LC_MESSAGES/django.po | 3901 ++++++++-------- src/pretix/locale/sq/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/sv/LC_MESSAGES/django.po | 3910 ++++++++-------- src/pretix/locale/sv/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/th/LC_MESSAGES/django.po | 3959 ++++++++-------- src/pretix/locale/th/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/tr/LC_MESSAGES/django.po | 3917 ++++++++-------- src/pretix/locale/tr/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/uk/LC_MESSAGES/django.po | 3894 ++++++++-------- src/pretix/locale/uk/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/vi/LC_MESSAGES/django.po | 3911 ++++++++-------- src/pretix/locale/vi/LC_MESSAGES/djangojs.po | 26 +- src/pretix/locale/vls/LC_MESSAGES/django.po | 3895 ++++++++-------- src/pretix/locale/vls/LC_MESSAGES/djangojs.po | 26 +- .../locale/zh_Hans/LC_MESSAGES/django.po | 3917 ++++++++-------- .../locale/zh_Hans/LC_MESSAGES/djangojs.po | 26 +- .../locale/zh_Hant/LC_MESSAGES/django.po | 3910 ++++++++-------- .../locale/zh_Hant/LC_MESSAGES/djangojs.po | 26 +- 108 files changed, 113965 insertions(+), 98540 deletions(-) diff --git a/src/pretix/locale/ang/LC_MESSAGES/django.po b/src/pretix/locale/ang/LC_MESSAGES/django.po index 29128f134..1e15d839a 100644 --- a/src/pretix/locale/ang/LC_MESSAGES/django.po +++ b/src/pretix/locale/ang/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-27 15:47+0000\n" +"POT-Creation-Date: 2026-06-28 14:42+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -25,17 +25,19 @@ msgid "Shop disabled" msgstr "" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:672 -#: pretix/control/forms/filter.py:1364 pretix/control/forms/filter.py:1958 +#: pretix/control/forms/filter.py:1370 pretix/control/forms/filter.py:1964 #: pretix/control/templates/pretixcontrol/events/index.html:168 #: pretix/control/templates/pretixcontrol/organizers/detail.html:137 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:36 #: pretix/control/templates/pretixcontrol/subevents/index.html:172 msgid "Presale over" msgstr "" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:674 -#: pretix/control/forms/filter.py:1363 pretix/control/forms/filter.py:1957 +#: pretix/control/forms/filter.py:1369 pretix/control/forms/filter.py:1963 #: pretix/control/templates/pretixcontrol/events/index.html:170 #: pretix/control/templates/pretixcontrol/organizers/detail.html:139 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:38 #: pretix/control/templates/pretixcontrol/subevents/index.html:174 msgid "Presale not started" msgstr "" @@ -43,6 +45,7 @@ msgstr "" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:676 #: pretix/control/templates/pretixcontrol/events/index.html:172 #: pretix/control/templates/pretixcontrol/organizers/detail.html:141 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:40 #: pretix/control/templates/pretixcontrol/subevents/index.html:176 #: pretix/control/views/dashboards.py:549 msgid "On sale" @@ -194,11 +197,11 @@ msgstr "" msgid "pretixSCAN" msgstr "" -#: pretix/api/auth/devicesecurity.py:118 +#: pretix/api/auth/devicesecurity.py:120 msgid "pretixSCAN (kiosk mode, no order sync, no search)" msgstr "" -#: pretix/api/auth/devicesecurity.py:153 +#: pretix/api/auth/devicesecurity.py:155 msgid "pretixSCAN (online only, no order sync)" msgstr "" @@ -259,18 +262,18 @@ msgstr "" msgid "Comment" msgstr "" -#: pretix/api/serializers/cart.py:168 pretix/api/serializers/order.py:1540 +#: pretix/api/serializers/cart.py:168 pretix/api/serializers/order.py:1541 #, python-brace-format msgid "The product \"{}\" is not assigned to a quota." msgstr "" -#: pretix/api/serializers/checkin.py:65 pretix/base/models/event.py:1756 -#: pretix/base/models/items.py:1917 pretix/base/models/items.py:2203 +#: pretix/api/serializers/checkin.py:65 pretix/base/models/event.py:1767 +#: pretix/base/models/items.py:1927 pretix/base/models/items.py:2213 msgid "One or more items do not belong to this event." msgstr "" #: pretix/api/serializers/checkin.py:69 pretix/api/serializers/checkin.py:72 -#: pretix/base/models/items.py:2214 pretix/base/models/items.py:2217 +#: pretix/base/models/items.py:2224 pretix/base/models/items.py:2227 #: pretix/base/models/waitinglist.py:306 pretix/base/models/waitinglist.py:309 msgid "The subevent does not belong to this event." msgstr "" @@ -323,11 +326,11 @@ msgstr "" msgid "The program end must not be empty." msgstr "" -#: pretix/api/serializers/item.py:242 pretix/base/models/items.py:2329 +#: pretix/api/serializers/item.py:242 pretix/base/models/items.py:2339 msgid "The program end must not be before the program start." msgstr "" -#: pretix/api/serializers/item.py:247 pretix/base/models/items.py:2323 +#: pretix/api/serializers/item.py:247 pretix/base/models/items.py:2333 msgid "You cannot use program times on an event series." msgstr "" @@ -373,7 +376,7 @@ msgstr "" msgid "This type of question cannot be shown during check-in." msgstr "" -#: pretix/api/serializers/media.py:117 +#: pretix/api/serializers/media.py:143 msgid "" "A medium with the same identifier and type already exists in your organizer " "account." @@ -384,30 +387,30 @@ msgstr "" msgid "\"{input}\" is not a valid choice." msgstr "" -#: pretix/api/serializers/order.py:1501 pretix/api/views/cart.py:224 +#: pretix/api/serializers/order.py:1502 pretix/api/views/cart.py:224 #: pretix/base/services/orders.py:1594 #, python-brace-format msgid "The selected seat \"{seat}\" is not available." msgstr "" -#: pretix/api/serializers/order.py:1527 pretix/api/serializers/order.py:1534 +#: pretix/api/serializers/order.py:1528 pretix/api/serializers/order.py:1535 #, python-brace-format msgid "The product \"{}\" is not available on this date." msgstr "" -#: pretix/api/serializers/order.py:1549 pretix/api/views/cart.py:200 +#: pretix/api/serializers/order.py:1550 pretix/api/views/cart.py:200 #, python-brace-format msgid "" "There is not enough quota available on quota \"{}\" to perform the operation." msgstr "" #: pretix/api/serializers/organizer.py:152 -#: pretix/control/forms/organizer.py:1060 pretix/presale/forms/customer.py:472 +#: pretix/control/forms/organizer.py:1070 pretix/presale/forms/customer.py:472 msgid "An account with this email address is already registered." msgstr "" #: pretix/api/serializers/organizer.py:285 -#: pretix/control/forms/organizer.py:896 +#: pretix/control/forms/organizer.py:906 msgid "" "A gift card with the same secret already exists in your or an affiliated " "organizer account." @@ -433,23 +436,27 @@ msgid "" "The specified voucher has already been used the maximum number of times." msgstr "" -#: pretix/api/views/checkin.py:645 pretix/api/views/checkin.py:652 +#: pretix/api/views/checkin.py:653 pretix/api/views/checkin.py:660 msgid "Medium connected to other event" msgstr "" -#: pretix/api/views/oauth.py:107 pretix/control/logdisplay.py:774 +#: pretix/api/views/checkin.py:814 +msgid "You cannot exchange a medium for a medium." +msgstr "" + +#: pretix/api/views/oauth.py:107 pretix/control/logdisplay.py:777 #, python-brace-format msgid "" "The application \"{application_name}\" has been authorized to access your " "account." msgstr "" -#: pretix/api/views/order.py:610 pretix/control/views/orders.py:1595 +#: pretix/api/views/order.py:610 pretix/control/views/orders.py:1609 #: pretix/presale/views/order.py:788 pretix/presale/views/order.py:868 msgid "You cannot generate an invoice for this order." msgstr "" -#: pretix/api/views/order.py:615 pretix/control/views/orders.py:1597 +#: pretix/api/views/order.py:615 pretix/control/views/orders.py:1611 #: pretix/presale/views/order.py:790 pretix/presale/views/order.py:870 msgid "An invoice for this order already exists." msgstr "" @@ -471,10 +478,10 @@ msgstr "" msgid "Order marked as paid" msgstr "" -#: pretix/api/webhooks.py:307 pretix/base/models/checkin.py:355 +#: pretix/api/webhooks.py:307 pretix/base/models/checkin.py:358 #: pretix/base/notifications.py:251 #: pretix/control/templates/pretixcontrol/event/mail.html:114 -#: pretix/control/views/orders.py:1556 +#: pretix/control/views/orders.py:1570 msgid "Order canceled" msgstr "" @@ -716,7 +723,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/customers.html:63 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:164 #: pretix/plugins/checkinlists/exporters.py:508 -#: pretix/presale/checkoutflow.py:1573 pretix/presale/forms/checkout.py:54 +#: pretix/presale/checkoutflow.py:1574 pretix/presale/forms/checkout.py:54 #: pretix/presale/forms/customer.py:57 pretix/presale/forms/customer.py:142 #: pretix/presale/forms/customer.py:298 pretix/presale/forms/customer.py:351 #: pretix/presale/forms/customer.py:395 pretix/presale/forms/user.py:40 @@ -804,9 +811,9 @@ msgstr "" #: pretix/base/customersso/oidc.py:206 pretix/base/customersso/oidc.py:214 #: pretix/base/customersso/oidc.py:237 pretix/base/customersso/oidc.py:254 -#: pretix/base/customersso/oidc.py:261 pretix/presale/views/customer.py:765 -#: pretix/presale/views/customer.py:775 pretix/presale/views/customer.py:814 -#: pretix/presale/views/customer.py:888 +#: pretix/base/customersso/oidc.py:261 pretix/presale/views/customer.py:767 +#: pretix/presale/views/customer.py:777 pretix/presale/views/customer.py:816 +#: pretix/presale/views/customer.py:890 #, python-brace-format msgid "Login was not successful. Error message: \"{error}\"." msgstr "" @@ -847,7 +854,7 @@ msgid "Attendee details" msgstr "" #: pretix/base/datasync/sourcefields.py:130 pretix/base/exporters/answers.py:66 -#: pretix/base/models/items.py:1767 pretix/control/navigation.py:185 +#: pretix/base/models/items.py:1777 pretix/control/navigation.py:185 #: pretix/control/templates/pretixcontrol/items/questions.html:3 #: pretix/control/templates/pretixcontrol/items/questions.html:5 msgid "Questions" @@ -892,8 +899,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:641 #: pretix/base/exporters/orderlist.py:646 pretix/base/forms/questions.py:707 #: pretix/base/modelimport_orders.py:347 pretix/base/models/customers.py:344 -#: pretix/base/models/orders.py:1512 pretix/base/pdf.py:183 -#: pretix/control/forms/filter.py:684 pretix/control/forms/organizer.py:1154 +#: pretix/base/models/orders.py:1534 pretix/base/pdf.py:183 +#: pretix/control/forms/filter.py:684 pretix/control/forms/organizer.py:1164 #: pretix/control/templates/pretixcontrol/order/index.html:606 #: pretix/control/templates/pretixcontrol/organizers/customer.html:123 #: pretix/control/views/item.py:449 pretix/plugins/badges/exporters.py:503 @@ -916,7 +923,7 @@ msgstr "" #: pretix/base/datasync/sourcefields.py:207 #: pretix/base/exporters/orderlist.py:648 pretix/base/forms/questions.py:713 -#: pretix/base/models/customers.py:351 pretix/base/models/orders.py:1520 +#: pretix/base/models/customers.py:351 pretix/base/models/orders.py:1542 #: pretix/base/pdf.py:225 #: pretix/control/templates/pretixcontrol/order/index.html:611 #: pretix/control/views/item.py:461 @@ -1013,6 +1020,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/customer.html:211 #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:41 #: pretix/control/templates/pretixcontrol/search/orders.html:48 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:213 #: pretix/plugins/badges/exporters.py:505 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:29 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:41 @@ -1062,8 +1070,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:481 #: pretix/base/exporters/orderlist.py:619 #: pretix/base/exporters/waitinglist.py:117 pretix/base/models/event.py:595 -#: pretix/base/pdf.py:235 pretix/control/forms/filter.py:1407 -#: pretix/control/forms/filter.py:1979 +#: pretix/base/pdf.py:235 pretix/control/forms/filter.py:1413 +#: pretix/control/forms/filter.py:1985 #: pretix/control/templates/pretixcontrol/events/index.html:69 #: pretix/control/templates/pretixcontrol/organizers/detail.html:65 msgid "Event name" @@ -1123,7 +1131,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:292 #: pretix/base/exporters/orderlist.py:705 pretix/base/modelimport_orders.py:508 #: pretix/control/templates/pretixcontrol/order/index.html:226 -#: pretix/control/templates/pretixcontrol/pdf/index.html:249 +#: pretix/control/templates/pretixcontrol/pdf/index.html:247 msgid "Order locale" msgstr "" @@ -1151,25 +1159,25 @@ msgid "Question: {name}" msgstr "" #: pretix/base/datasync/sourcefields.py:604 -#: pretix/base/datasync/sourcefields.py:614 pretix/base/settings.py:3781 -#: pretix/base/settings.py:3794 pretix/base/settings.py:3810 -#: pretix/base/settings.py:3860 pretix/base/settings.py:3873 -#: pretix/base/settings.py:3887 pretix/base/settings.py:3940 -#: pretix/base/settings.py:3961 pretix/base/settings.py:3983 +#: pretix/base/datasync/sourcefields.py:614 pretix/base/settings.py:3794 +#: pretix/base/settings.py:3807 pretix/base/settings.py:3823 +#: pretix/base/settings.py:3873 pretix/base/settings.py:3886 +#: pretix/base/settings.py:3900 pretix/base/settings.py:3953 +#: pretix/base/settings.py:3974 pretix/base/settings.py:3996 msgid "Given name" msgstr "" #: pretix/base/datasync/sourcefields.py:628 -#: pretix/base/datasync/sourcefields.py:638 pretix/base/settings.py:3782 -#: pretix/base/settings.py:3795 pretix/base/settings.py:3811 -#: pretix/base/settings.py:3827 pretix/base/settings.py:3844 -#: pretix/base/settings.py:3859 pretix/base/settings.py:3874 -#: pretix/base/settings.py:3888 pretix/base/settings.py:3941 -#: pretix/base/settings.py:3962 pretix/base/settings.py:3984 +#: pretix/base/datasync/sourcefields.py:638 pretix/base/settings.py:3795 +#: pretix/base/settings.py:3808 pretix/base/settings.py:3824 +#: pretix/base/settings.py:3840 pretix/base/settings.py:3857 +#: pretix/base/settings.py:3872 pretix/base/settings.py:3887 +#: pretix/base/settings.py:3901 pretix/base/settings.py:3954 +#: pretix/base/settings.py:3975 pretix/base/settings.py:3997 msgid "Family name" msgstr "" -#: pretix/base/email.py:223 pretix/base/exporters/items.py:157 +#: pretix/base/email.py:225 pretix/base/exporters/items.py:157 #: pretix/base/exporters/items.py:205 pretix/base/models/tax.py:382 #: pretix/control/templates/pretixcontrol/event/tax.html:37 #: pretix/control/templates/pretixcontrol/event/tax.html:60 @@ -1183,7 +1191,7 @@ msgstr "" msgid "Default" msgstr "" -#: pretix/base/email.py:230 +#: pretix/base/email.py:232 msgid "Simple with logo" msgstr "" @@ -1235,21 +1243,21 @@ msgstr "" #: pretix/base/exporters/answers.py:76 pretix/base/exporters/orderlist.py:629 #: pretix/base/exporters/orderlist.py:958 #: pretix/base/exporters/orderlist.py:1213 pretix/base/models/checkin.py:58 -#: pretix/base/models/items.py:2067 pretix/base/models/orders.py:1490 -#: pretix/base/models/orders.py:3046 pretix/base/models/vouchers.py:190 +#: pretix/base/models/items.py:2077 pretix/base/models/orders.py:1512 +#: pretix/base/models/orders.py:3068 pretix/base/models/vouchers.py:190 #: pretix/base/models/waitinglist.py:61 pretix/control/forms/event.py:1798 #: pretix/control/forms/filter.py:446 pretix/control/forms/filter.py:1254 -#: pretix/control/forms/filter.py:1541 pretix/control/forms/filter.py:2183 -#: pretix/control/forms/filter.py:2405 pretix/control/forms/filter.py:2520 -#: pretix/control/forms/filter.py:2602 pretix/control/forms/filter.py:2819 +#: pretix/control/forms/filter.py:1547 pretix/control/forms/filter.py:2189 +#: pretix/control/forms/filter.py:2411 pretix/control/forms/filter.py:2526 +#: pretix/control/forms/filter.py:2608 pretix/control/forms/filter.py:2825 #: pretix/control/forms/orders.py:364 pretix/control/forms/orders.py:857 #: pretix/control/templates/pretixcontrol/checkin/lists.html:108 #: pretix/control/templates/pretixcontrol/items/quotas.html:99 #: pretix/control/templates/pretixcontrol/order/change.html:108 #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:43 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:8 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:7 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:12 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:7 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:12 #: pretix/control/templates/pretixcontrol/vouchers/index.html:140 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:170 #: pretix/control/views/waitinglist.py:330 @@ -1268,12 +1276,12 @@ msgstr "" #: pretix/control/forms/checkin.py:83 pretix/control/forms/event.py:1799 #: pretix/control/forms/filter.py:449 pretix/control/forms/filter.py:476 #: pretix/control/forms/filter.py:1253 pretix/control/forms/filter.py:1287 -#: pretix/control/forms/filter.py:1544 pretix/control/forms/filter.py:1604 -#: pretix/control/forms/filter.py:2186 pretix/control/forms/filter.py:2219 -#: pretix/control/forms/filter.py:2408 pretix/control/forms/filter.py:2428 -#: pretix/control/forms/filter.py:2523 pretix/control/forms/filter.py:2539 -#: pretix/control/forms/filter.py:2605 pretix/control/forms/filter.py:2640 -#: pretix/control/forms/filter.py:2822 pretix/control/forms/filter.py:2837 +#: pretix/control/forms/filter.py:1550 pretix/control/forms/filter.py:1610 +#: pretix/control/forms/filter.py:2192 pretix/control/forms/filter.py:2225 +#: pretix/control/forms/filter.py:2414 pretix/control/forms/filter.py:2434 +#: pretix/control/forms/filter.py:2529 pretix/control/forms/filter.py:2545 +#: pretix/control/forms/filter.py:2611 pretix/control/forms/filter.py:2646 +#: pretix/control/forms/filter.py:2828 pretix/control/forms/filter.py:2843 #: pretix/control/forms/orders.py:859 pretix/control/forms/orders.py:1021 #: pretix/control/templates/pretixcontrol/event/fragment_subevent_choice_simple.html:5 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:69 @@ -1323,22 +1331,22 @@ msgstr "" #: pretix/base/exporters/orderlist.py:624 #: pretix/base/exporters/waitinglist.py:111 #: pretix/base/modelimport_orders.py:87 pretix/base/models/customers.py:103 -#: pretix/base/models/customers.py:440 pretix/base/models/items.py:1659 +#: pretix/base/models/customers.py:440 pretix/base/models/items.py:1669 #: pretix/base/models/orders.py:249 pretix/base/models/waitinglist.py:80 #: pretix/base/pdf.py:331 #: pretix/control/templates/pretixcontrol/order/index.html:290 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:166 #: pretix/control/views/waitinglist.py:326 #: pretix/plugins/checkinlists/exporters.py:509 -#: pretix/presale/checkoutflow.py:1579 pretix/presale/forms/checkout.py:81 +#: pretix/presale/checkoutflow.py:1580 pretix/presale/forms/checkout.py:81 #: pretix/presale/forms/waitinglist.py:80 #: pretix/presale/templates/pretixpresale/event/order.html:304 msgid "Phone number" msgstr "" #: pretix/base/exporters/customers.py:72 pretix/base/models/auth.py:281 -#: pretix/base/models/customers.py:105 pretix/base/models/orders.py:3349 -#: pretix/base/settings.py:3914 pretix/base/settings.py:3926 +#: pretix/base/models/customers.py:105 pretix/base/models/orders.py:3371 +#: pretix/base/settings.py:3927 pretix/base/settings.py:3939 #: pretix/control/templates/pretixcontrol/users/index.html:47 msgid "Full name" msgstr "" @@ -1348,14 +1356,14 @@ msgstr "" #: pretix/base/exporters/invoices.py:344 pretix/base/exporters/orderlist.py:284 #: pretix/base/exporters/waitinglist.py:109 pretix/base/forms/questions.py:1272 #: pretix/base/models/devices.py:68 pretix/base/models/devices.py:130 -#: pretix/base/models/event.py:1562 pretix/base/models/event.py:1800 -#: pretix/base/models/items.py:2071 pretix/base/models/items.py:2244 +#: pretix/base/models/event.py:1573 pretix/base/models/event.py:1811 +#: pretix/base/models/items.py:2081 pretix/base/models/items.py:2254 #: pretix/base/models/memberships.py:41 pretix/base/models/organizer.py:82 #: pretix/base/models/organizer.py:646 pretix/base/models/seating.py:86 -#: pretix/base/models/waitinglist.py:69 pretix/base/settings.py:3535 -#: pretix/base/settings.py:3545 pretix/base/settings.py:3903 +#: pretix/base/models/waitinglist.py:69 pretix/base/settings.py:3548 +#: pretix/base/settings.py:3558 pretix/base/settings.py:3916 #: pretix/control/forms/filter.py:661 pretix/control/forms/item.py:502 -#: pretix/control/forms/organizer.py:1085 +#: pretix/control/forms/organizer.py:1095 #: pretix/control/forms/waitinglist.py:84 #: pretix/control/templates/pretixcontrol/checkin/index.html:109 #: pretix/control/templates/pretixcontrol/checkin/lists.html:99 @@ -1370,6 +1378,8 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/ssoclients.html:20 #: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html:20 #: pretix/control/templates/pretixcontrol/organizers/team_members.html:100 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:27 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:136 #: pretix/control/templates/pretixcontrol/subevents/index.html:97 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:162 #: pretix/control/views/waitinglist.py:326 pretix/plugins/badges/models.py:53 @@ -1416,10 +1426,10 @@ msgid "Language" msgstr "" #: pretix/base/exporters/customers.py:85 -#: pretix/base/exporters/reusablemedia.py:58 -#: pretix/base/models/customers.py:117 pretix/base/models/media.py:110 +#: pretix/base/exporters/reusablemedia.py:61 +#: pretix/base/models/customers.py:117 pretix/base/models/media.py:122 #: pretix/control/templates/pretixcontrol/organizers/customer.html:73 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:75 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:87 msgid "Notes" msgstr "" @@ -1446,9 +1456,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:816 #: pretix/base/exporters/orderlist.py:848 #: pretix/base/exporters/orderlist.py:1464 -#: pretix/base/exporters/reusablemedia.py:68 +#: pretix/base/exporters/reusablemedia.py:77 #: pretix/base/invoicing/transmission.py:119 pretix/base/modelimport.py:212 -#: pretix/base/modelimport.py:219 pretix/base/models/orders.py:1391 +#: pretix/base/modelimport.py:219 pretix/base/models/orders.py:1413 #: pretix/control/forms/filter.py:182 pretix/control/forms/filter.py:556 #: pretix/control/forms/filter.py:743 pretix/control/forms/item.py:673 #: pretix/control/forms/subevents.py:129 pretix/control/views/item.py:720 @@ -1471,9 +1481,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:816 #: pretix/base/exporters/orderlist.py:848 #: pretix/base/exporters/orderlist.py:1464 -#: pretix/base/exporters/reusablemedia.py:68 +#: pretix/base/exporters/reusablemedia.py:77 #: pretix/base/invoicing/transmission.py:121 pretix/base/modelimport.py:211 -#: pretix/base/modelimport.py:221 pretix/base/models/orders.py:1393 +#: pretix/base/modelimport.py:221 pretix/base/models/orders.py:1415 #: pretix/control/forms/filter.py:182 pretix/control/forms/filter.py:557 #: pretix/control/forms/filter.py:744 pretix/control/forms/item.py:674 #: pretix/control/forms/subevents.py:130 pretix/control/views/item.py:720 @@ -1558,66 +1568,73 @@ msgid "Timezone" msgstr "" #: pretix/base/exporters/events.py:62 pretix/base/models/event.py:618 -#: pretix/base/models/event.py:1564 pretix/base/settings.py:3533 -#: pretix/base/settings.py:3543 pretix/control/forms/subevents.py:494 +#: pretix/base/models/event.py:1575 pretix/base/settings.py:3546 +#: pretix/base/settings.py:3556 pretix/control/forms/subevents.py:494 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:268 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:43 msgid "Event start time" msgstr "" #: pretix/base/exporters/events.py:63 pretix/base/models/event.py:620 -#: pretix/base/models/event.py:1566 pretix/base/pdf.py:297 +#: pretix/base/models/event.py:1577 pretix/base/pdf.py:297 #: pretix/control/forms/subevents.py:499 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:270 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:45 msgid "Event end time" msgstr "" #: pretix/base/exporters/events.py:64 pretix/base/models/event.py:622 -#: pretix/base/models/event.py:1568 pretix/control/forms/subevents.py:504 +#: pretix/base/models/event.py:1579 pretix/control/forms/subevents.py:504 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:274 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:48 msgid "Admission time" msgstr "" #: pretix/base/exporters/events.py:65 pretix/base/models/event.py:634 -#: pretix/base/models/event.py:1577 pretix/control/forms/subevents.py:93 +#: pretix/base/models/event.py:1588 pretix/control/forms/subevents.py:93 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:52 msgid "Start of presale" msgstr "" #: pretix/base/exporters/events.py:66 pretix/base/models/event.py:628 -#: pretix/base/models/event.py:1571 pretix/control/forms/subevents.py:99 +#: pretix/base/models/event.py:1582 pretix/control/forms/subevents.py:99 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:56 msgid "End of presale" msgstr "" #: pretix/base/exporters/events.py:67 pretix/base/exporters/invoices.py:355 -#: pretix/base/models/event.py:640 pretix/base/models/event.py:1583 -#: pretix/base/models/items.py:2318 +#: pretix/base/models/event.py:640 pretix/base/models/event.py:1594 +#: pretix/base/models/items.py:2328 #: pretix/base/templates/pretixbase/email/order_details.html:83 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:60 msgid "Location" msgstr "" #: pretix/base/exporters/events.py:68 pretix/base/models/event.py:648 -#: pretix/base/models/event.py:1586 +#: pretix/base/models/event.py:1597 #: pretix/control/templates/pretixcontrol/event/fragment_geodata.html:18 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:54 msgid "Latitude" msgstr "" #: pretix/base/exporters/events.py:69 pretix/base/models/event.py:656 -#: pretix/base/models/event.py:1594 +#: pretix/base/models/event.py:1605 #: pretix/control/templates/pretixcontrol/event/fragment_geodata.html:28 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:64 msgid "Longitude" msgstr "" #: pretix/base/exporters/events.py:70 pretix/base/models/event.py:668 -#: pretix/base/models/event.py:1609 +#: pretix/base/models/event.py:1620 #: pretix/control/templates/pretixcontrol/event/index.html:137 #: pretix/control/templates/pretixcontrol/order/index.html:1115 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:70 msgid "Internal comment" msgstr "" -#: pretix/base/exporters/invoices.py:82 pretix/base/models/orders.py:1761 -#: pretix/base/models/orders.py:2185 pretix/control/forms/filter.py:214 -#: pretix/control/forms/filter.py:1060 pretix/control/forms/filter.py:2560 +#: pretix/base/exporters/invoices.py:82 pretix/base/models/orders.py:1783 +#: pretix/base/models/orders.py:2207 pretix/control/forms/filter.py:214 +#: pretix/control/forms/filter.py:1060 pretix/control/forms/filter.py:2566 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:9 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:14 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:44 @@ -1632,7 +1649,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:84 pretix/base/exporters/invoices.py:86 #: pretix/control/forms/filter.py:216 pretix/control/forms/filter.py:1062 -#: pretix/control/forms/filter.py:2562 +#: pretix/control/forms/filter.py:2568 msgid "All payment providers" msgstr "" @@ -1665,7 +1682,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:193 pretix/base/shredder.py:583 #: pretix/control/templates/pretixcontrol/order/index.html:301 #: pretix/control/templates/pretixcontrol/order/index.html:419 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:313 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:314 #: pretix/presale/templates/pretixpresale/event/order.html:236 #: pretix/presale/templates/pretixpresale/event/order.html:257 msgid "Invoices" @@ -1683,8 +1700,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1293 #: pretix/base/exporters/orderlist.py:1339 #: pretix/base/exporters/waitinglist.py:108 pretix/base/forms/widgets.py:222 -#: pretix/base/models/items.py:1655 pretix/base/models/orders.py:258 -#: pretix/base/models/orders.py:3021 pretix/base/models/orders.py:3160 +#: pretix/base/models/items.py:1665 pretix/base/models/orders.py:258 +#: pretix/base/models/orders.py:3043 pretix/base/models/orders.py:3182 #: pretix/base/templates/pretixbase/email/order_details.html:70 #: pretix/control/templates/pretixcontrol/datasync/failed_jobs.html:25 #: pretix/control/templates/pretixcontrol/order/transactions.html:19 @@ -1731,8 +1748,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:502 #: pretix/base/exporters/orderlist.py:650 pretix/base/forms/questions.py:732 #: pretix/base/modelimport_orders.py:232 pretix/base/modelimport_orders.py:386 -#: pretix/base/models/customers.py:355 pretix/base/models/orders.py:1547 -#: pretix/base/models/orders.py:3351 pretix/control/forms/filter.py:665 +#: pretix/base/models/customers.py:355 pretix/base/models/orders.py:1569 +#: pretix/base/models/orders.py:3373 pretix/control/forms/filter.py:665 #: pretix/control/forms/filter.py:696 #: pretix/control/templates/pretixcontrol/order/index.html:1067 #: pretix/plugins/checkinlists/exporters.py:535 @@ -1748,8 +1765,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:502 #: pretix/base/exporters/orderlist.py:651 pretix/base/forms/questions.py:743 #: pretix/base/modelimport_orders.py:244 pretix/base/modelimport_orders.py:397 -#: pretix/base/models/customers.py:356 pretix/base/models/orders.py:1548 -#: pretix/base/models/orders.py:3352 pretix/base/settings.py:1323 +#: pretix/base/models/customers.py:356 pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:3374 pretix/base/settings.py:1336 #: pretix/control/forms/filter.py:669 pretix/control/forms/filter.py:700 #: pretix/control/views/item.py:495 #: pretix/plugins/checkinlists/exporters.py:536 @@ -1763,8 +1780,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:502 #: pretix/base/exporters/orderlist.py:652 pretix/base/forms/questions.py:751 #: pretix/base/modelimport_orders.py:256 pretix/base/modelimport_orders.py:408 -#: pretix/base/models/customers.py:357 pretix/base/models/orders.py:1549 -#: pretix/base/models/orders.py:3353 pretix/base/settings.py:1337 +#: pretix/base/models/customers.py:357 pretix/base/models/orders.py:1571 +#: pretix/base/models/orders.py:3375 pretix/base/settings.py:1350 #: pretix/control/forms/filter.py:674 pretix/control/forms/filter.py:705 #: pretix/control/views/item.py:505 #: pretix/plugins/checkinlists/exporters.py:537 @@ -1778,8 +1795,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:654 pretix/base/forms/questions.py:788 #: pretix/base/forms/questions.py:1222 pretix/base/modelimport_orders.py:295 #: pretix/base/modelimport_orders.py:445 pretix/base/models/customers.py:359 -#: pretix/base/models/orders.py:1551 pretix/base/models/orders.py:3357 -#: pretix/base/settings.py:1351 pretix/base/views/js_helpers.py:72 +#: pretix/base/models/orders.py:1573 pretix/base/models/orders.py:3379 +#: pretix/base/settings.py:1364 pretix/base/views/js_helpers.py:72 #: pretix/control/forms/event.py:1098 #: pretix/control/templates/pretixcontrol/order/index.html:1074 #: pretix/plugins/checkinlists/exporters.py:539 @@ -1796,9 +1813,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:502 #: pretix/base/exporters/orderlist.py:653 pretix/base/forms/questions.py:763 #: pretix/base/modelimport_orders.py:274 pretix/base/modelimport_orders.py:425 -#: pretix/base/models/customers.py:358 pretix/base/models/orders.py:1550 -#: pretix/base/models/orders.py:3354 pretix/base/models/orders.py:3355 -#: pretix/base/settings.py:1363 pretix/control/forms/filter.py:679 +#: pretix/base/models/customers.py:358 pretix/base/models/orders.py:1572 +#: pretix/base/models/orders.py:3376 pretix/base/models/orders.py:3377 +#: pretix/base/settings.py:1376 pretix/control/forms/filter.py:679 #: pretix/control/forms/filter.py:710 #: pretix/control/templates/pretixcontrol/order/index.html:1071 #: pretix/control/views/item.py:515 @@ -1820,7 +1837,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:292 #: pretix/base/exporters/orderlist.py:502 #: pretix/base/exporters/orderlist.py:701 pretix/base/modelimport_orders.py:321 -#: pretix/base/models/orders.py:3358 pretix/base/views/js_helpers.py:77 +#: pretix/base/models/orders.py:3380 pretix/base/views/js_helpers.py:77 #: pretix/control/templates/pretixcontrol/order/index.html:1078 #: pretix/plugins/reports/exporters.py:860 #: pretix/plugins/reports/exporters.py:902 @@ -1862,13 +1879,13 @@ msgid "Street address" msgstr "" #: pretix/base/exporters/invoices.py:224 pretix/base/exporters/invoices.py:351 -#: pretix/base/models/orders.py:3367 pretix/base/models/orders.py:3423 +#: pretix/base/models/orders.py:3389 pretix/base/models/orders.py:3445 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:103 msgid "Beneficiary" msgstr "" #: pretix/base/exporters/invoices.py:225 pretix/base/exporters/invoices.py:352 -#: pretix/base/modelimport_orders.py:333 pretix/base/models/orders.py:3362 +#: pretix/base/modelimport_orders.py:333 pretix/base/models/orders.py:3384 #: pretix/control/templates/pretixcontrol/order/index.html:1099 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:111 msgid "Internal reference" @@ -1924,7 +1941,7 @@ msgid "Line number" msgstr "" #: pretix/base/exporters/invoices.py:324 pretix/base/exporters/orderlist.py:489 -#: pretix/base/models/items.py:492 pretix/base/models/items.py:1155 +#: pretix/base/models/items.py:497 pretix/base/models/items.py:1165 #: pretix/control/templates/pretixcontrol/pdf/placeholders.html:32 msgid "Description" msgstr "" @@ -1939,16 +1956,16 @@ msgstr "" #: pretix/base/exporters/invoices.py:327 pretix/base/exporters/orderlist.py:493 #: pretix/base/exporters/orderlist.py:640 -#: pretix/base/exporters/orderlist.py:964 pretix/base/models/orders.py:2352 -#: pretix/base/models/orders.py:2551 pretix/base/models/orders.py:3070 +#: pretix/base/exporters/orderlist.py:964 pretix/base/models/orders.py:2374 +#: pretix/base/models/orders.py:2573 pretix/base/models/orders.py:3092 msgid "Tax value" msgstr "" #: pretix/base/exporters/invoices.py:328 pretix/base/exporters/orderlist.py:491 #: pretix/base/exporters/orderlist.py:638 -#: pretix/base/exporters/orderlist.py:961 pretix/base/models/orders.py:2339 -#: pretix/base/models/orders.py:2538 pretix/base/models/orders.py:3057 -#: pretix/base/models/orders.py:3173 pretix/base/models/tax.py:349 +#: pretix/base/exporters/orderlist.py:961 pretix/base/models/orders.py:2361 +#: pretix/base/models/orders.py:2560 pretix/base/models/orders.py:3079 +#: pretix/base/models/orders.py:3195 pretix/base/models/tax.py:349 #: pretix/control/templates/pretixcontrol/order/transactions.html:21 #: pretix/plugins/reports/accountingreport.py:316 #: pretix/plugins/reports/exporters.py:809 @@ -1987,31 +2004,31 @@ msgid "Product category" msgstr "" #: pretix/base/exporters/items.py:60 pretix/base/models/discount.py:64 -#: pretix/base/models/items.py:96 pretix/base/models/items.py:483 -#: pretix/base/models/tax.py:321 pretix/control/forms/organizer.py:267 +#: pretix/base/models/items.py:96 pretix/base/models/items.py:488 +#: pretix/base/models/tax.py:321 pretix/control/forms/organizer.py:276 #: pretix/control/templates/pretixcontrol/items/discounts.html:61 msgid "Internal name" msgstr "" -#: pretix/base/exporters/items.py:64 pretix/base/models/items.py:480 +#: pretix/base/exporters/items.py:64 pretix/base/models/items.py:485 msgid "Item name" msgstr "" #: pretix/base/exporters/items.py:68 pretix/base/exporters/orderlist.py:635 #: pretix/base/exporters/orderlist.py:953 -#: pretix/base/exporters/waitinglist.py:114 pretix/base/models/items.py:1148 -#: pretix/base/models/orders.py:1500 pretix/base/models/orders.py:3039 +#: pretix/base/exporters/waitinglist.py:114 pretix/base/models/items.py:1158 +#: pretix/base/models/orders.py:1522 pretix/base/models/orders.py:3061 #: pretix/plugins/checkinlists/exporters.py:697 msgid "Variation" msgstr "" -#: pretix/base/exporters/items.py:71 pretix/base/exporters/reusablemedia.py:53 +#: pretix/base/exporters/items.py:71 pretix/base/exporters/reusablemedia.py:56 #: pretix/base/models/customers.py:65 pretix/base/models/customers.py:447 -#: pretix/base/models/discount.py:60 pretix/base/models/event.py:1553 -#: pretix/base/models/items.py:489 pretix/base/models/items.py:1152 -#: pretix/base/models/media.py:77 pretix/base/settings.py:226 -#: pretix/base/settings.py:261 pretix/base/settings.py:292 -#: pretix/control/forms/filter.py:1360 pretix/control/forms/filter.py:2292 +#: pretix/base/models/discount.py:60 pretix/base/models/event.py:1564 +#: pretix/base/models/items.py:494 pretix/base/models/items.py:1162 +#: pretix/base/models/media.py:87 pretix/base/settings.py:239 +#: pretix/base/settings.py:274 pretix/base/settings.py:305 +#: pretix/control/forms/filter.py:1366 pretix/control/forms/filter.py:2298 #: pretix/control/templates/pretixcontrol/event/plugins.html:25 #: pretix/control/templates/pretixcontrol/event/plugins.html:75 #: pretix/control/templates/pretixcontrol/organizers/plugins.html:25 @@ -2030,22 +2047,22 @@ msgstr "" msgid "Sales channels" msgstr "" -#: pretix/base/exporters/items.py:73 pretix/base/models/items.py:497 -#: pretix/base/models/items.py:1166 +#: pretix/base/exporters/items.py:73 pretix/base/models/items.py:502 +#: pretix/base/models/items.py:1176 #: pretix/control/templates/pretixcontrol/items/index.html:48 msgid "Default price" msgstr "" -#: pretix/base/exporters/items.py:74 pretix/base/models/items.py:505 +#: pretix/base/exporters/items.py:74 pretix/base/models/items.py:510 #: pretix/control/templates/pretixcontrol/items/index.html:150 msgid "Free price input" msgstr "" -#: pretix/base/exporters/items.py:75 pretix/base/models/items.py:519 +#: pretix/base/exporters/items.py:75 pretix/base/models/items.py:524 msgid "Sales tax" msgstr "" -#: pretix/base/exporters/items.py:76 pretix/base/models/items.py:524 +#: pretix/base/exporters/items.py:76 pretix/base/models/items.py:529 msgid "Is an admission ticket" msgstr "" @@ -2055,7 +2072,7 @@ msgstr "" msgid "Personalized ticket" msgstr "" -#: pretix/base/exporters/items.py:78 pretix/base/models/items.py:538 +#: pretix/base/exporters/items.py:78 pretix/base/models/items.py:543 msgid "Generate tickets" msgstr "" @@ -2078,93 +2095,93 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:103 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:27 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:67 -#: pretix/presale/views/widget.py:481 +#: pretix/presale/views/widget.py:484 msgid "Waiting list" msgstr "" #: pretix/base/exporters/items.py:80 pretix/base/models/discount.py:82 #: pretix/base/models/items.py:224 pretix/base/models/items.py:280 -#: pretix/base/models/items.py:561 pretix/base/models/items.py:1205 +#: pretix/base/models/items.py:566 pretix/base/models/items.py:1215 #: pretix/base/payment.py:394 pretix/control/forms/subevents.py:333 #: pretix/control/forms/subevents.py:355 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:509 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:172 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:150 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:150 msgid "Available from" msgstr "" #: pretix/base/exporters/items.py:81 pretix/base/models/discount.py:87 #: pretix/base/models/items.py:229 pretix/base/models/items.py:285 -#: pretix/base/models/items.py:571 pretix/base/models/items.py:1215 +#: pretix/base/models/items.py:576 pretix/base/models/items.py:1225 #: pretix/base/payment.py:400 pretix/control/forms/subevents.py:338 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:514 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:177 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:155 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:155 msgid "Available until" msgstr "" -#: pretix/base/exporters/items.py:82 pretix/base/models/items.py:609 +#: pretix/base/exporters/items.py:82 pretix/base/models/items.py:614 msgid "This product can only be bought using a voucher." msgstr "" -#: pretix/base/exporters/items.py:83 pretix/base/models/items.py:622 +#: pretix/base/exporters/items.py:83 pretix/base/models/items.py:627 msgid "" "This product will only be shown if a voucher matching the product is " "redeemed." msgstr "" -#: pretix/base/exporters/items.py:84 pretix/base/models/items.py:615 +#: pretix/base/exporters/items.py:84 pretix/base/models/items.py:620 msgid "Buying this product requires approval" msgstr "" -#: pretix/base/exporters/items.py:85 pretix/base/models/items.py:628 +#: pretix/base/exporters/items.py:85 pretix/base/models/items.py:633 msgid "Only sell this product as part of a bundle" msgstr "" -#: pretix/base/exporters/items.py:86 pretix/base/models/items.py:635 +#: pretix/base/exporters/items.py:86 pretix/base/models/items.py:640 msgid "Allow product to be canceled or changed" msgstr "" -#: pretix/base/exporters/items.py:87 pretix/base/models/items.py:641 +#: pretix/base/exporters/items.py:87 pretix/base/models/items.py:646 msgid "Minimum amount per order" msgstr "" -#: pretix/base/exporters/items.py:88 pretix/base/models/items.py:648 +#: pretix/base/exporters/items.py:88 pretix/base/models/items.py:653 msgid "Maximum amount per order" msgstr "" #: pretix/base/exporters/items.py:89 pretix/base/exporters/orderlist.py:304 -#: pretix/base/modelimport_orders.py:652 pretix/base/models/items.py:656 -#: pretix/base/models/items.py:1242 pretix/base/models/orders.py:281 +#: pretix/base/modelimport_orders.py:652 pretix/base/models/items.py:661 +#: pretix/base/models/items.py:1252 pretix/base/models/orders.py:281 #: pretix/plugins/checkinlists/exporters.py:523 msgid "Requires special attention" msgstr "" #: pretix/base/exporters/items.py:90 pretix/base/exporters/orderlist.py:305 -#: pretix/base/modelimport_orders.py:661 pretix/base/models/items.py:663 -#: pretix/base/models/items.py:1249 pretix/base/models/orders.py:288 +#: pretix/base/modelimport_orders.py:661 pretix/base/models/items.py:668 +#: pretix/base/models/items.py:1259 pretix/base/models/orders.py:288 #: pretix/plugins/checkinlists/exporters.py:525 msgid "Check-in text" msgstr "" -#: pretix/base/exporters/items.py:91 pretix/base/models/items.py:668 -#: pretix/base/models/items.py:1169 +#: pretix/base/exporters/items.py:91 pretix/base/models/items.py:673 +#: pretix/base/models/items.py:1179 msgid "Original price" msgstr "" -#: pretix/base/exporters/items.py:92 pretix/base/models/items.py:685 +#: pretix/base/exporters/items.py:92 pretix/base/models/items.py:690 msgid "This product is a gift card" msgstr "" -#: pretix/base/exporters/items.py:93 pretix/base/models/items.py:691 -#: pretix/base/models/items.py:1190 +#: pretix/base/exporters/items.py:93 pretix/base/models/items.py:696 +#: pretix/base/models/items.py:1200 #: pretix/control/templates/pretixcontrol/item/include_variations.html:41 #: pretix/control/templates/pretixcontrol/item/include_variations.html:167 msgid "Require a valid membership" msgstr "" -#: pretix/base/exporters/items.py:94 pretix/base/models/items.py:700 -#: pretix/base/models/items.py:1199 +#: pretix/base/exporters/items.py:94 pretix/base/models/items.py:705 +#: pretix/base/models/items.py:1209 msgid "Hide without a valid membership" msgstr "" @@ -2206,15 +2223,16 @@ msgstr "" #: pretix/control/templates/pretixcontrol/orders/index.html:8 #: pretix/control/templates/pretixcontrol/orders/index.html:10 #: pretix/control/templates/pretixcontrol/organizers/customer.html:205 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:203 #: pretix/plugins/reports/accountingreport.py:673 #: pretix/plugins/reports/accountingreport.py:873 #: pretix/plugins/reports/exporters.py:673 pretix/plugins/statistics/apps.py:39 #: pretix/presale/templates/pretixpresale/organizers/customer_orders.html:13 -#: pretix/presale/views/customer.py:362 +#: pretix/presale/views/customer.py:364 msgid "Orders" msgstr "" -#: pretix/base/exporters/orderlist.py:103 pretix/base/models/orders.py:2603 +#: pretix/base/exporters/orderlist.py:103 pretix/base/models/orders.py:2625 #: pretix/base/notifications.py:205 msgid "Order positions" msgstr "" @@ -2241,8 +2259,8 @@ msgid "Only include orders created within this date range." msgstr "" #: pretix/base/exporters/orderlist.py:137 pretix/base/notifications.py:194 -#: pretix/base/pdf.py:245 pretix/base/settings.py:1225 -#: pretix/base/settings.py:1237 pretix/control/forms/filter.py:1259 +#: pretix/base/pdf.py:245 pretix/base/settings.py:1238 +#: pretix/base/settings.py:1250 pretix/control/forms/filter.py:1259 #: pretix/plugins/badges/exporters.py:507 #: pretix/plugins/reports/exporters.py:315 #: pretix/plugins/reports/exporters.py:465 @@ -2256,9 +2274,9 @@ msgid "" "Will also include other dates in case of mixed orders!" msgstr "" -#: pretix/base/exporters/orderlist.py:149 pretix/base/models/items.py:795 -#: pretix/base/models/items.py:1702 pretix/control/forms/filter.py:442 -#: pretix/control/forms/filter.py:1248 pretix/control/forms/filter.py:2177 +#: pretix/base/exporters/orderlist.py:149 pretix/base/models/items.py:800 +#: pretix/base/models/items.py:1712 pretix/control/forms/filter.py:442 +#: pretix/control/forms/filter.py:1248 pretix/control/forms/filter.py:2183 #: pretix/control/forms/item.py:278 pretix/control/navigation.py:151 #: pretix/control/navigation.py:160 #: pretix/control/templates/pretixcontrol/checkin/lists.html:113 @@ -2268,6 +2286,8 @@ msgstr "" #: pretix/control/templates/pretixcontrol/items/index.html:8 #: pretix/control/templates/pretixcontrol/items/questions.html:28 #: pretix/control/templates/pretixcontrol/items/quotas.html:97 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:82 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:140 #: pretix/plugins/autocheckin/forms.py:56 #: pretix/plugins/autocheckin/models.py:72 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:31 @@ -2301,11 +2321,11 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1395 #: pretix/base/exporters/waitinglist.py:123 #: pretix/base/exporters/waitinglist.py:173 pretix/base/models/orders.py:215 -#: pretix/control/forms/filter.py:1055 pretix/control/forms/filter.py:1357 -#: pretix/control/forms/filter.py:1710 pretix/control/forms/filter.py:1779 -#: pretix/control/forms/filter.py:1851 pretix/control/forms/filter.py:1951 -#: pretix/control/forms/filter.py:2289 pretix/control/forms/filter.py:2369 -#: pretix/control/forms/filter.py:2650 pretix/control/forms/filter.py:2967 +#: pretix/control/forms/filter.py:1055 pretix/control/forms/filter.py:1363 +#: pretix/control/forms/filter.py:1716 pretix/control/forms/filter.py:1785 +#: pretix/control/forms/filter.py:1857 pretix/control/forms/filter.py:1957 +#: pretix/control/forms/filter.py:2295 pretix/control/forms/filter.py:2375 +#: pretix/control/forms/filter.py:2656 pretix/control/forms/filter.py:2973 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:52 #: pretix/control/templates/pretixcontrol/checkin/index.html:112 #: pretix/control/templates/pretixcontrol/event/invoicing.html:99 @@ -2323,9 +2343,10 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:113 #: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:35 #: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:64 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:30 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:42 #: pretix/control/templates/pretixcontrol/search/orders.html:63 #: pretix/control/templates/pretixcontrol/search/payments.html:103 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:31 #: pretix/control/templates/pretixcontrol/subevents/index.html:108 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:173 #: pretix/control/views/waitinglist.py:326 @@ -2341,8 +2362,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:486 #: pretix/base/exporters/orderlist.py:625 #: pretix/base/exporters/orderlist.py:940 pretix/base/notifications.py:203 -#: pretix/base/settings.py:1226 pretix/base/settings.py:1238 -#: pretix/control/forms/filter.py:2611 +#: pretix/base/settings.py:1239 pretix/base/settings.py:1251 +#: pretix/control/forms/filter.py:2617 #: pretix/control/templates/pretixcontrol/order/index.html:216 #: pretix/control/templates/pretixcontrol/orders/bulk_action.html:24 #: pretix/control/templates/pretixcontrol/orders/index.html:140 @@ -2444,14 +2465,14 @@ msgstr "" #: pretix/base/exporters/orderlist.py:490 #: pretix/base/exporters/orderlist.py:637 #: pretix/base/exporters/orderlist.py:960 pretix/base/modelimport_orders.py:467 -#: pretix/base/models/orders.py:1505 pretix/base/models/orders.py:3050 +#: pretix/base/models/orders.py:1527 pretix/base/models/orders.py:3072 #: pretix/base/pdf.py:160 pretix/control/forms/orders.py:646 #: pretix/control/templates/pretixcontrol/item/index.html:146 #: pretix/control/templates/pretixcontrol/order/change.html:194 #: pretix/control/templates/pretixcontrol/order/change.html:420 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:499 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:162 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:140 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:140 #: pretix/plugins/checkinlists/exporters.py:376 #: pretix/plugins/checkinlists/exporters.py:500 #: pretix/plugins/reports/accountingreport.py:315 @@ -2513,9 +2534,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:951 #: pretix/base/exporters/waitinglist.py:112 #: pretix/base/modelimport_orders.py:129 -#: pretix/base/modelimport_vouchers.py:174 pretix/base/models/items.py:794 +#: pretix/base/modelimport_vouchers.py:174 pretix/base/models/items.py:799 #: pretix/base/models/vouchers.py:253 pretix/base/models/waitinglist.py:91 -#: pretix/control/forms/filter.py:2411 pretix/control/forms/filter.py:2666 +#: pretix/control/forms/filter.py:2417 pretix/control/forms/filter.py:2672 #: pretix/control/forms/orders.py:339 pretix/control/forms/vouchers.py:67 #: pretix/control/forms/waitinglist.py:106 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:66 @@ -2601,7 +2622,7 @@ msgid "Blocked" msgstr "" #: pretix/base/exporters/orderlist.py:666 pretix/base/modelimport_orders.py:537 -#: pretix/base/models/orders.py:2570 +#: pretix/base/models/orders.py:2592 #: pretix/control/templates/pretixcontrol/organizers/customer.html:120 #: pretix/plugins/checkinlists/exporters.py:532 #: pretix/plugins/checkinlists/exporters.py:706 @@ -2611,7 +2632,7 @@ msgid "Valid from" msgstr "" #: pretix/base/exporters/orderlist.py:667 pretix/base/modelimport_orders.py:545 -#: pretix/base/modelimport_vouchers.py:111 pretix/base/models/orders.py:2575 +#: pretix/base/modelimport_vouchers.py:111 pretix/base/models/orders.py:2597 #: pretix/base/models/vouchers.py:224 #: pretix/control/templates/pretixcontrol/organizers/customer.html:121 #: pretix/control/views/vouchers.py:120 @@ -2640,7 +2661,8 @@ msgstr "" #: pretix/control/templates/pretixcontrol/checkin/lists.html:8 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:523 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:274 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:164 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:131 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:164 #: pretix/plugins/checkinlists/apps.py:44 msgid "Check-in lists" msgstr "" @@ -2665,12 +2687,12 @@ msgid "Only include transactions created within this date range." msgstr "" #: pretix/base/exporters/orderlist.py:935 pretix/base/models/event.py:695 -#: pretix/base/models/items.py:468 pretix/base/models/items.py:2060 -#: pretix/base/models/orders.py:232 pretix/base/models/orders.py:3152 +#: pretix/base/models/items.py:473 pretix/base/models/items.py:2070 +#: pretix/base/models/orders.py:232 pretix/base/models/orders.py:3174 #: pretix/base/models/vouchers.py:184 pretix/base/models/waitinglist.py:55 #: pretix/base/notifications.py:187 #: pretix/base/templates/pretixbase/email/cancel_confirm.txt:4 -#: pretix/control/forms/filter.py:1030 pretix/control/forms/filter.py:2962 +#: pretix/control/forms/filter.py:1030 pretix/control/forms/filter.py:2968 #: pretix/control/templates/pretixcontrol/organizers/customer.html:212 #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:42 #: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:66 @@ -2709,7 +2731,7 @@ msgstr "" msgid "Old data" msgstr "" -#: pretix/base/exporters/orderlist.py:948 pretix/base/models/items.py:1555 +#: pretix/base/exporters/orderlist.py:948 pretix/base/models/items.py:1565 #: pretix/control/templates/pretixcontrol/order/transactions.html:23 #: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:207 #: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:353 @@ -2787,9 +2809,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1149 #: pretix/base/exporters/orderlist.py:1296 #: pretix/base/exporters/orderlist.py:1339 pretix/base/models/orders.py:335 -#: pretix/base/models/orders.py:1748 pretix/base/models/orders.py:2166 -#: pretix/base/models/orders.py:2328 pretix/base/models/orders.py:2527 -#: pretix/base/models/orders.py:3012 +#: pretix/base/models/orders.py:1770 pretix/base/models/orders.py:2188 +#: pretix/base/models/orders.py:2350 pretix/base/models/orders.py:2549 +#: pretix/base/models/orders.py:3034 #: pretix/control/templates/pretixcontrol/datasync/failed_jobs.html:23 #: pretix/control/templates/pretixcontrol/organizers/customer.html:122 #: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:74 @@ -2828,8 +2850,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1150 #: pretix/base/exporters/orderlist.py:1294 -#: pretix/base/exporters/orderlist.py:1339 pretix/base/models/orders.py:1744 -#: pretix/base/models/orders.py:2162 pretix/control/forms/filter.py:1087 +#: pretix/base/exporters/orderlist.py:1339 pretix/base/models/orders.py:1766 +#: pretix/base/models/orders.py:2184 pretix/control/forms/filter.py:1087 #: pretix/control/forms/filter.py:1090 #: pretix/control/templates/pretixcontrol/order/index.html:862 #: pretix/control/templates/pretixcontrol/order/index.html:958 @@ -2872,8 +2894,9 @@ msgid "" "Download a spreadsheet of all quotas including their current availability." msgstr "" -#: pretix/base/exporters/orderlist.py:1209 pretix/control/forms/filter.py:1585 +#: pretix/base/exporters/orderlist.py:1209 pretix/control/forms/filter.py:1591 #: pretix/control/templates/pretixcontrol/items/quotas.html:93 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:81 msgid "Quota name" msgstr "" @@ -2946,14 +2969,14 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1385 #: pretix/base/exporters/orderlist.py:1388 #: pretix/base/models/memberships.py:120 pretix/control/forms/filter.py:255 -#: pretix/control/forms/filter.py:1701 pretix/control/forms/filter.py:1704 +#: pretix/control/forms/filter.py:1707 pretix/control/forms/filter.py:1710 #: pretix/control/templates/pretixcontrol/event/live.html:75 msgid "Test mode" msgstr "" #: pretix/base/exporters/orderlist.py:1297 pretix/base/models/organizer.py:107 #: pretix/control/forms/event.py:112 pretix/control/forms/filter.py:924 -#: pretix/control/forms/filter.py:1042 pretix/control/forms/filter.py:1966 +#: pretix/control/forms/filter.py:1042 pretix/control/forms/filter.py:1972 #: pretix/control/templates/pretixcontrol/email_setup.html:6 #: pretix/control/templates/pretixcontrol/email_setup_simple.html:6 #: pretix/control/templates/pretixcontrol/email_setup_smtp.html:6 @@ -2966,8 +2989,8 @@ msgstr "" msgid "Organizer" msgstr "" -#: pretix/base/exporters/orderlist.py:1304 pretix/base/invoicing/pdf.py:591 -#: pretix/control/templates/pretixcontrol/base.html:285 +#: pretix/base/exporters/orderlist.py:1304 pretix/base/invoicing/pdf.py:582 +#: pretix/control/templates/pretixcontrol/base.html:286 #: pretix/control/templates/pretixcontrol/checkin/index.html:145 #: pretix/control/templates/pretixcontrol/order/index.html:25 #: pretix/control/templates/pretixcontrol/orders/bulk_action.html:38 @@ -2984,10 +3007,11 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcards.html:84 #: pretix/control/templates/pretixcontrol/search/orders.html:77 #: pretix/control/templates/pretixcontrol/search/payments.html:119 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:228 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:67 #: pretix/presale/forms/checkout.py:216 #: pretix/presale/templates/pretixpresale/event/order.html:70 -#: pretix/presale/templates/pretixpresale/event/position.html:14 +#: pretix/presale/templates/pretixpresale/event/position.html:15 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:59 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:20 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:84 @@ -3017,7 +3041,7 @@ msgstr "" #: pretix/plugins/reports/accountingreport.py:915 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:7 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:13 -#: pretix/presale/views/customer.py:374 +#: pretix/presale/views/customer.py:376 msgid "Gift cards" msgstr "" @@ -3035,13 +3059,13 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1387 #: pretix/base/exporters/orderlist.py:1397 pretix/control/forms/filter.py:555 -#: pretix/control/forms/filter.py:1359 pretix/control/forms/filter.py:1703 -#: pretix/control/forms/filter.py:1712 pretix/control/forms/filter.py:1782 -#: pretix/control/forms/filter.py:1792 pretix/control/forms/filter.py:1854 -#: pretix/control/forms/filter.py:2291 pretix/control/forms/filter.py:2300 -#: pretix/control/forms/filter.py:2371 pretix/control/forms/filter.py:2384 -#: pretix/control/forms/filter.py:2890 pretix/control/forms/filter.py:2909 -#: pretix/control/forms/filter.py:2969 +#: pretix/control/forms/filter.py:1365 pretix/control/forms/filter.py:1709 +#: pretix/control/forms/filter.py:1718 pretix/control/forms/filter.py:1788 +#: pretix/control/forms/filter.py:1798 pretix/control/forms/filter.py:1860 +#: pretix/control/forms/filter.py:2297 pretix/control/forms/filter.py:2306 +#: pretix/control/forms/filter.py:2377 pretix/control/forms/filter.py:2390 +#: pretix/control/forms/filter.py:2896 pretix/control/forms/filter.py:2915 +#: pretix/control/forms/filter.py:2975 #: pretix/control/templates/pretixcontrol/checkin/lists.html:145 #: pretix/control/templates/pretixcontrol/checkin/lists.html:151 #: pretix/control/templates/pretixcontrol/event/plugins.html:24 @@ -3050,6 +3074,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/plugins.html:24 #: pretix/control/templates/pretixcontrol/organizers/teams.html:61 #: pretix/control/templates/pretixcontrol/organizers/webhooks.html:52 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:167 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:43 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:62 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:76 @@ -3058,26 +3083,26 @@ msgstr "" msgid "All" msgstr "" -#: pretix/base/exporters/orderlist.py:1389 pretix/control/forms/filter.py:1705 +#: pretix/base/exporters/orderlist.py:1389 pretix/control/forms/filter.py:1711 msgid "Live" msgstr "" -#: pretix/base/exporters/orderlist.py:1398 pretix/control/forms/filter.py:1713 -#: pretix/control/templates/pretixcontrol/pdf/index.html:330 +#: pretix/base/exporters/orderlist.py:1398 pretix/control/forms/filter.py:1719 +#: pretix/control/templates/pretixcontrol/pdf/index.html:328 msgid "Empty" msgstr "" -#: pretix/base/exporters/orderlist.py:1399 pretix/control/forms/filter.py:1714 +#: pretix/base/exporters/orderlist.py:1399 pretix/control/forms/filter.py:1720 msgid "Valid and with value" msgstr "" -#: pretix/base/exporters/orderlist.py:1400 pretix/control/forms/filter.py:1715 +#: pretix/base/exporters/orderlist.py:1400 pretix/control/forms/filter.py:1721 msgid "Expired and with value" msgstr "" #: pretix/base/exporters/orderlist.py:1401 pretix/control/forms/filter.py:238 -#: pretix/control/forms/filter.py:1235 pretix/control/forms/filter.py:1716 -#: pretix/control/forms/filter.py:2376 +#: pretix/control/forms/filter.py:1235 pretix/control/forms/filter.py:1722 +#: pretix/control/forms/filter.py:2382 #: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:37 #: pretix/control/templates/pretixcontrol/orders/overview.html:78 #: pretix/control/templates/pretixcontrol/organizers/customer.html:319 @@ -3125,7 +3150,7 @@ msgstr "" msgid "Last invoice date of order" msgstr "" -#: pretix/base/exporters/reusablemedia.py:34 pretix/base/permissions.py:304 +#: pretix/base/exporters/reusablemedia.py:35 pretix/base/permissions.py:304 #: pretix/control/navigation.py:656 #: pretix/control/templates/pretixcontrol/organizers/edit.html:223 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:35 @@ -3135,34 +3160,34 @@ msgstr "" msgid "Reusable media" msgstr "" -#: pretix/base/exporters/reusablemedia.py:35 +#: pretix/base/exporters/reusablemedia.py:36 msgctxt "export_category" msgid "Reusable media" msgstr "" -#: pretix/base/exporters/reusablemedia.py:36 +#: pretix/base/exporters/reusablemedia.py:37 msgid "" "Download a spread sheet with the data of all reusable medias on your account." msgstr "" -#: pretix/base/exporters/reusablemedia.py:51 pretix/base/models/media.py:67 +#: pretix/base/exporters/reusablemedia.py:54 pretix/base/models/media.py:67 msgctxt "reusable_medium" msgid "Media type" msgstr "" -#: pretix/base/exporters/reusablemedia.py:52 pretix/base/models/media.py:73 +#: pretix/base/exporters/reusablemedia.py:55 pretix/base/models/media.py:73 msgctxt "reusable_medium" msgid "Identifier" msgstr "" -#: pretix/base/exporters/reusablemedia.py:54 pretix/base/models/media.py:81 -#: pretix/base/models/orders.py:264 pretix/base/models/orders.py:3164 +#: pretix/base/exporters/reusablemedia.py:57 pretix/base/models/media.py:91 +#: pretix/base/models/orders.py:264 pretix/base/models/orders.py:3186 #: pretix/control/forms/orders.py:78 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:138 msgid "Expiration date" msgstr "" -#: pretix/base/exporters/reusablemedia.py:55 pretix/base/models/media.py:90 +#: pretix/base/exporters/reusablemedia.py:58 pretix/base/models/media.py:100 #: pretix/control/templates/pretixcontrol/order/index.html:249 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:60 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:136 @@ -3170,11 +3195,11 @@ msgstr "" msgid "Customer account" msgstr "" -#: pretix/base/exporters/reusablemedia.py:56 pretix/base/models/media.py:97 +#: pretix/base/exporters/reusablemedia.py:59 msgid "Linked ticket" msgstr "" -#: pretix/base/exporters/reusablemedia.py:57 pretix/base/models/media.py:104 +#: pretix/base/exporters/reusablemedia.py:60 pretix/base/models/media.py:116 msgid "Linked gift card" msgstr "" @@ -3432,7 +3457,7 @@ msgstr "" msgid "This field is required for the selected type of invoice transmission." msgstr "" -#: pretix/base/forms/user.py:54 pretix/control/forms/organizer.py:576 +#: pretix/base/forms/user.py:54 pretix/control/forms/organizer.py:585 #: pretix/control/forms/users.py:58 msgid "Default timezone" msgstr "" @@ -3509,7 +3534,7 @@ msgid "" "\"{{\" and \"}}\"." msgstr "" -#: pretix/base/forms/validators.py:72 pretix/control/views/event.py:903 +#: pretix/base/forms/validators.py:72 pretix/control/views/event.py:904 #, python-format msgid "Invalid placeholder: {%(value)s}" msgstr "" @@ -3524,7 +3549,7 @@ msgstr "" msgid "Available placeholders: {list}" msgstr "" -#: pretix/base/forms/widgets.py:223 pretix/base/models/items.py:1656 +#: pretix/base/forms/widgets.py:223 pretix/base/models/items.py:1666 #: pretix/plugins/checkinlists/exporters.py:756 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_create.html:40 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_update.html:54 @@ -3591,68 +3616,68 @@ msgid "" "April 30, 2018, issued by the Director of the Revenue Agency." msgstr "" -#: pretix/base/invoicing/pdf.py:142 +#: pretix/base/invoicing/pdf.py:140 #, python-format msgctxt "invoice" msgid "Page %d of %d" msgstr "" -#: pretix/base/invoicing/pdf.py:387 +#: pretix/base/invoicing/pdf.py:380 msgctxt "invoice" msgid "Classic renderer (pretix 1.0)" msgstr "" -#: pretix/base/invoicing/pdf.py:431 +#: pretix/base/invoicing/pdf.py:423 msgctxt "invoice" msgid "Invoice from" msgstr "" -#: pretix/base/invoicing/pdf.py:437 +#: pretix/base/invoicing/pdf.py:429 msgctxt "invoice" msgid "Invoice to" msgstr "" -#: pretix/base/invoicing/pdf.py:474 pretix/base/invoicing/pdf.py:1225 +#: pretix/base/invoicing/pdf.py:466 pretix/base/invoicing/pdf.py:1211 msgctxt "invoice" msgid "Order code" msgstr "" -#: pretix/base/invoicing/pdf.py:483 pretix/base/invoicing/pdf.py:1238 +#: pretix/base/invoicing/pdf.py:475 pretix/base/invoicing/pdf.py:1224 msgctxt "invoice" msgid "Cancellation number" msgstr "" -#: pretix/base/invoicing/pdf.py:489 pretix/base/invoicing/pdf.py:1240 +#: pretix/base/invoicing/pdf.py:481 pretix/base/invoicing/pdf.py:1226 msgctxt "invoice" msgid "Original invoice" msgstr "" -#: pretix/base/invoicing/pdf.py:494 pretix/base/invoicing/pdf.py:1245 +#: pretix/base/invoicing/pdf.py:486 pretix/base/invoicing/pdf.py:1231 msgctxt "invoice" msgid "Invoice number" msgstr "" -#: pretix/base/invoicing/pdf.py:502 pretix/base/invoicing/pdf.py:1260 +#: pretix/base/invoicing/pdf.py:494 pretix/base/invoicing/pdf.py:1246 msgctxt "invoice" msgid "Cancellation date" msgstr "" -#: pretix/base/invoicing/pdf.py:508 +#: pretix/base/invoicing/pdf.py:500 msgctxt "invoice" msgid "Original invoice date" msgstr "" -#: pretix/base/invoicing/pdf.py:515 pretix/base/invoicing/pdf.py:1262 +#: pretix/base/invoicing/pdf.py:507 pretix/base/invoicing/pdf.py:1248 msgctxt "invoice" msgid "Invoice date" msgstr "" -#: pretix/base/invoicing/pdf.py:531 +#: pretix/base/invoicing/pdf.py:523 msgctxt "invoice" msgid "Event" msgstr "" -#: pretix/base/invoicing/pdf.py:565 +#: pretix/base/invoicing/pdf.py:556 #, python-brace-format msgctxt "invoice" msgid "" @@ -3660,39 +3685,39 @@ msgid "" "until {to_date}" msgstr "" -#: pretix/base/invoicing/pdf.py:612 pretix/base/services/mail.py:536 +#: pretix/base/invoicing/pdf.py:603 pretix/base/services/mail.py:536 #, python-brace-format msgctxt "invoice" msgid "Invoice {num}" msgstr "" -#: pretix/base/invoicing/pdf.py:664 +#: pretix/base/invoicing/pdf.py:655 #, python-brace-format msgctxt "invoice" msgid "Customer reference: {reference}" msgstr "" -#: pretix/base/invoicing/pdf.py:672 +#: pretix/base/invoicing/pdf.py:663 msgctxt "invoice" msgid "Customer VAT ID" msgstr "" -#: pretix/base/invoicing/pdf.py:679 +#: pretix/base/invoicing/pdf.py:669 msgctxt "invoice" msgid "Beneficiary" msgstr "" -#: pretix/base/invoicing/pdf.py:712 +#: pretix/base/invoicing/pdf.py:701 msgctxt "invoice" msgid "Tax Invoice" msgstr "" -#: pretix/base/invoicing/pdf.py:713 +#: pretix/base/invoicing/pdf.py:702 msgctxt "invoice" msgid "Invoice" msgstr "" -#: pretix/base/invoicing/pdf.py:714 +#: pretix/base/invoicing/pdf.py:703 #: pretix/control/templates/pretixcontrol/order/index.html:305 #: pretix/control/templates/pretixcontrol/order/mail_history.html:72 #: pretix/presale/templates/pretixpresale/event/order.html:244 @@ -3700,100 +3725,100 @@ msgctxt "invoice" msgid "Cancellation" msgstr "" -#: pretix/base/invoicing/pdf.py:736 pretix/base/invoicing/pdf.py:744 +#: pretix/base/invoicing/pdf.py:725 pretix/base/invoicing/pdf.py:733 msgctxt "invoice" msgid "Description" msgstr "" -#: pretix/base/invoicing/pdf.py:737 pretix/base/invoicing/pdf.py:745 +#: pretix/base/invoicing/pdf.py:726 pretix/base/invoicing/pdf.py:734 msgctxt "invoice" msgid "Qty" msgstr "" -#: pretix/base/invoicing/pdf.py:738 pretix/base/invoicing/pdf.py:1042 +#: pretix/base/invoicing/pdf.py:727 pretix/base/invoicing/pdf.py:1031 msgctxt "invoice" msgid "Tax rate" msgstr "" -#: pretix/base/invoicing/pdf.py:739 +#: pretix/base/invoicing/pdf.py:728 msgctxt "invoice" msgid "Net" msgstr "" -#: pretix/base/invoicing/pdf.py:740 +#: pretix/base/invoicing/pdf.py:729 msgctxt "invoice" msgid "Gross" msgstr "" -#: pretix/base/invoicing/pdf.py:746 +#: pretix/base/invoicing/pdf.py:735 msgctxt "invoice" msgid "Amount" msgstr "" -#: pretix/base/invoicing/pdf.py:873 +#: pretix/base/invoicing/pdf.py:862 #, python-brace-format msgctxt "invoice" msgid "Single price: {net_price} net / {gross_price} gross" msgstr "" -#: pretix/base/invoicing/pdf.py:904 +#: pretix/base/invoicing/pdf.py:893 #, python-brace-format msgctxt "invoice" msgid "Single price: {price}" msgstr "" -#: pretix/base/invoicing/pdf.py:947 pretix/base/invoicing/pdf.py:952 +#: pretix/base/invoicing/pdf.py:936 pretix/base/invoicing/pdf.py:941 msgctxt "invoice" msgid "Invoice total" msgstr "" -#: pretix/base/invoicing/pdf.py:961 +#: pretix/base/invoicing/pdf.py:950 msgctxt "invoice" msgid "Received payments" msgstr "" -#: pretix/base/invoicing/pdf.py:966 +#: pretix/base/invoicing/pdf.py:955 msgctxt "invoice" msgid "Outstanding payments" msgstr "" -#: pretix/base/invoicing/pdf.py:983 +#: pretix/base/invoicing/pdf.py:972 msgctxt "invoice" msgid "Paid by gift card" msgstr "" -#: pretix/base/invoicing/pdf.py:988 +#: pretix/base/invoicing/pdf.py:977 msgctxt "invoice" msgid "Remaining amount" msgstr "" -#: pretix/base/invoicing/pdf.py:1012 +#: pretix/base/invoicing/pdf.py:1001 #, python-brace-format msgctxt "invoice" msgid "Invoice period: {daterange}" msgstr "" -#: pretix/base/invoicing/pdf.py:1043 +#: pretix/base/invoicing/pdf.py:1032 msgctxt "invoice" msgid "Net value" msgstr "" -#: pretix/base/invoicing/pdf.py:1044 +#: pretix/base/invoicing/pdf.py:1033 msgctxt "invoice" msgid "Gross value" msgstr "" -#: pretix/base/invoicing/pdf.py:1045 +#: pretix/base/invoicing/pdf.py:1034 msgctxt "invoice" msgid "Tax" msgstr "" -#: pretix/base/invoicing/pdf.py:1075 +#: pretix/base/invoicing/pdf.py:1064 msgctxt "invoice" msgid "Included taxes" msgstr "" -#: pretix/base/invoicing/pdf.py:1103 +#: pretix/base/invoicing/pdf.py:1092 #, python-brace-format msgctxt "invoice" msgid "" @@ -3801,7 +3826,7 @@ msgid "" "{date}, this corresponds to:" msgstr "" -#: pretix/base/invoicing/pdf.py:1118 +#: pretix/base/invoicing/pdf.py:1107 #, python-brace-format msgctxt "invoice" msgid "" @@ -3809,20 +3834,20 @@ msgid "" "{date}, the invoice total corresponds to {total}." msgstr "" -#: pretix/base/invoicing/pdf.py:1132 +#: pretix/base/invoicing/pdf.py:1121 msgid "Default invoice renderer (European-style letter)" msgstr "" -#: pretix/base/invoicing/pdf.py:1221 +#: pretix/base/invoicing/pdf.py:1207 msgctxt "invoice" msgid "(Please quote at all times.)" msgstr "" -#: pretix/base/invoicing/pdf.py:1268 +#: pretix/base/invoicing/pdf.py:1254 msgid "Simplified invoice renderer" msgstr "" -#: pretix/base/invoicing/pdf.py:1287 +#: pretix/base/invoicing/pdf.py:1273 #, python-brace-format msgctxt "invoice" msgid "Event date: {date_range}" @@ -3932,12 +3957,12 @@ msgstr "" msgid "Tax rule {val}" msgstr "" -#: pretix/base/media.py:71 +#: pretix/base/media.py:72 msgid "Barcode / QR-Code" msgstr "" -#: pretix/base/media.py:88 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:256 +#: pretix/base/media.py:89 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:257 msgid "NFC UID-based" msgstr "" @@ -3965,9 +3990,9 @@ msgstr "" msgid "Could not parse {value} as a date and time." msgstr "" -#: pretix/base/modelimport.py:257 pretix/control/views/orders.py:1165 -#: pretix/control/views/orders.py:1194 pretix/control/views/orders.py:1243 -#: pretix/control/views/orders.py:1278 pretix/control/views/orders.py:1301 +#: pretix/base/modelimport.py:257 pretix/control/views/orders.py:1179 +#: pretix/control/views/orders.py:1208 pretix/control/views/orders.py:1257 +#: pretix/control/views/orders.py:1292 pretix/control/views/orders.py:1315 msgid "You entered an invalid number." msgstr "" @@ -4024,7 +4049,7 @@ msgid "Multiple matching products were found." msgstr "" #: pretix/base/modelimport_orders.py:160 -#: pretix/base/modelimport_vouchers.py:205 pretix/base/models/items.py:1257 +#: pretix/base/modelimport_vouchers.py:205 pretix/base/models/items.py:1267 #: pretix/base/models/vouchers.py:266 pretix/base/models/waitinglist.py:99 msgid "Product variation" msgstr "" @@ -4143,8 +4168,8 @@ msgstr "" msgid "You need to select a specific seat." msgstr "" -#: pretix/base/modelimport_orders.py:691 pretix/base/models/items.py:1671 -#: pretix/base/models/items.py:1766 pretix/control/forms/item.py:149 +#: pretix/base/modelimport_orders.py:691 pretix/base/models/items.py:1681 +#: pretix/base/models/items.py:1776 pretix/control/forms/item.py:149 #: pretix/control/templates/pretixcontrol/items/question_edit.html:10 #: pretix/control/templates/pretixcontrol/items/question_edit.html:17 #: pretix/control/templates/pretixcontrol/items/questions.html:23 @@ -4152,7 +4177,7 @@ msgid "Question" msgstr "" #: pretix/base/modelimport_orders.py:701 pretix/base/modelimport_orders.py:709 -#: pretix/base/models/items.py:1830 pretix/base/models/items.py:1848 +#: pretix/base/models/items.py:1840 pretix/base/models/items.py:1858 msgid "Invalid option selected." msgstr "" @@ -4192,7 +4217,7 @@ msgid "Maximum discount budget" msgstr "" #: pretix/base/modelimport_vouchers.py:119 pretix/base/models/vouchers.py:228 -#: pretix/control/forms/filter.py:2385 +#: pretix/control/forms/filter.py:2391 msgid "Reserve ticket from quota" msgstr "" @@ -4220,7 +4245,7 @@ msgstr "" msgid "It is pointless to set a value without a price effect." msgstr "" -#: pretix/base/modelimport_vouchers.py:237 pretix/base/models/items.py:2121 +#: pretix/base/modelimport_vouchers.py:237 pretix/base/models/items.py:2131 #: pretix/base/models/vouchers.py:275 #: pretix/control/templates/pretixcontrol/items/quota_edit.html:8 #: pretix/control/templates/pretixcontrol/items/quota_edit.html:15 @@ -4432,58 +4457,70 @@ msgstr "" msgid "Exit" msgstr "" -#: pretix/base/models/checkin.py:356 +#: pretix/base/models/checkin.py:359 msgid "Unknown ticket" msgstr "" -#: pretix/base/models/checkin.py:357 +#: pretix/base/models/checkin.py:360 msgid "Ticket not paid" msgstr "" -#: pretix/base/models/checkin.py:358 +#: pretix/base/models/checkin.py:361 msgid "Forbidden by custom rule" msgstr "" -#: pretix/base/models/checkin.py:359 +#: pretix/base/models/checkin.py:362 msgid "Ticket code revoked/changed" msgstr "" -#: pretix/base/models/checkin.py:360 +#: pretix/base/models/checkin.py:363 msgid "Information required" msgstr "" -#: pretix/base/models/checkin.py:361 +#: pretix/base/models/checkin.py:364 msgid "Ticket already used" msgstr "" -#: pretix/base/models/checkin.py:362 +#: pretix/base/models/checkin.py:365 msgid "Ticket type not allowed here" msgstr "" -#: pretix/base/models/checkin.py:363 +#: pretix/base/models/checkin.py:366 msgid "Ticket code is ambiguous on list" msgstr "" -#: pretix/base/models/checkin.py:364 +#: pretix/base/models/checkin.py:367 msgid "Server error" msgstr "" -#: pretix/base/models/checkin.py:365 +#: pretix/base/models/checkin.py:368 msgid "Ticket blocked" msgstr "" -#: pretix/base/models/checkin.py:366 +#: pretix/base/models/checkin.py:369 msgid "Order not approved" msgstr "" -#: pretix/base/models/checkin.py:367 +#: pretix/base/models/checkin.py:370 msgid "Ticket not valid at this time" msgstr "" -#: pretix/base/models/checkin.py:368 +#: pretix/base/models/checkin.py:371 msgid "Check-in annulled" msgstr "" +#: pretix/base/models/checkin.py:372 +msgid "Ticket already exchanged" +msgstr "" + +#: pretix/base/models/checkin.py:373 +msgid "Reusable medium invalid" +msgstr "" + +#: pretix/base/models/checkin.py:374 +msgid "Reusable medium already exists" +msgstr "" + #: pretix/base/models/customers.py:63 msgid "Provider name" msgstr "" @@ -4497,7 +4534,7 @@ msgid "Single-sign-on method" msgstr "" #: pretix/base/models/customers.py:93 pretix/base/models/devices.py:74 -#: pretix/base/models/items.py:1676 pretix/base/models/items.py:1952 +#: pretix/base/models/items.py:1686 pretix/base/models/items.py:1962 msgid "" "You can enter any value here to make it easier to match the data with other " "sources. If you do not input one, we will generate one automatically." @@ -4509,22 +4546,22 @@ msgid "" "underscores. It must start and end with a letter or number." msgstr "" -#: pretix/base/models/customers.py:225 pretix/control/forms/filter.py:1784 -#: pretix/control/forms/filter.py:1856 +#: pretix/base/models/customers.py:225 pretix/control/forms/filter.py:1790 +#: pretix/control/forms/filter.py:1862 #: pretix/control/templates/pretixcontrol/organizers/customer.html:43 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:56 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:135 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:33 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:45 msgid "disabled" msgstr "" -#: pretix/base/models/customers.py:354 pretix/base/models/orders.py:1546 -#: pretix/base/models/orders.py:3348 pretix/base/settings.py:1310 +#: pretix/base/models/customers.py:354 pretix/base/models/orders.py:1568 +#: pretix/base/models/orders.py:3370 pretix/base/settings.py:1323 msgid "Company name" msgstr "" -#: pretix/base/models/customers.py:358 pretix/base/models/orders.py:1550 -#: pretix/base/models/orders.py:3355 pretix/base/settings.py:92 +#: pretix/base/models/customers.py:358 pretix/base/models/orders.py:1572 +#: pretix/base/models/orders.py:3377 pretix/base/settings.py:92 #: pretix/plugins/stripe/payment.py:291 msgid "Select country" msgstr "" @@ -4593,17 +4630,17 @@ msgstr "" msgid "System error, needs manual intervention" msgstr "" -#: pretix/base/models/devices.py:73 pretix/base/models/items.py:1675 +#: pretix/base/models/devices.py:73 pretix/base/models/items.py:1685 msgid "Internal identifier" msgstr "" -#: pretix/base/models/devices.py:93 pretix/base/models/items.py:1788 +#: pretix/base/models/devices.py:93 pretix/base/models/items.py:1798 msgid "This identifier is already used for a different question." msgstr "" #: pretix/base/models/devices.py:116 pretix/control/forms/checkin.py:196 -#: pretix/control/forms/checkin.py:217 pretix/control/forms/filter.py:2676 -#: pretix/control/forms/filter.py:2723 pretix/control/forms/filter.py:2883 +#: pretix/control/forms/checkin.py:217 pretix/control/forms/filter.py:2682 +#: pretix/control/forms/filter.py:2729 pretix/control/forms/filter.py:2889 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:67 #: pretix/control/templates/pretixcontrol/organizers/gates.html:18 #: pretix/plugins/checkinlists/exporters.py:768 @@ -4634,8 +4671,8 @@ msgctxt "subevent" msgid "Each matching product must be for a different date" msgstr "" -#: pretix/base/models/discount.py:69 pretix/base/models/items.py:1161 -#: pretix/base/models/items.py:1481 pretix/base/models/items.py:1708 +#: pretix/base/models/discount.py:69 pretix/base/models/items.py:1171 +#: pretix/base/models/items.py:1491 pretix/base/models/items.py:1718 #: pretix/base/models/organizer.py:664 msgid "Position" msgstr "" @@ -4790,7 +4827,8 @@ msgstr "" msgid "The slug may only contain letters, numbers, dots and dashes." msgstr "" -#: pretix/base/models/event.py:624 pretix/base/models/event.py:1557 +#: pretix/base/models/event.py:624 pretix/base/models/event.py:1568 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:63 msgid "Show in lists" msgstr "" @@ -4800,14 +4838,14 @@ msgid "" "organizer account." msgstr "" -#: pretix/base/models/event.py:629 pretix/base/models/event.py:1572 +#: pretix/base/models/event.py:629 pretix/base/models/event.py:1583 #: pretix/control/forms/subevents.py:100 msgid "" "Optional. No products will be sold after this date. If you do not set this " "value, the presale will end after the end date of your event." msgstr "" -#: pretix/base/models/event.py:635 pretix/base/models/event.py:1578 +#: pretix/base/models/event.py:635 pretix/base/models/event.py:1589 #: pretix/control/forms/subevents.py:94 msgid "Optional. No products will be sold before this date." msgstr "" @@ -4828,27 +4866,27 @@ msgid "Plugins" msgstr "" #: pretix/base/models/event.py:672 pretix/base/pdf.py:240 -#: pretix/control/forms/event.py:300 pretix/control/forms/filter.py:1961 +#: pretix/control/forms/event.py:300 pretix/control/forms/filter.py:1967 #: pretix/control/templates/pretixcontrol/event/index.html:13 #: pretix/control/templates/pretixcontrol/events/index.html:131 #: pretix/control/templates/pretixcontrol/organizers/detail.html:112 #: pretix/control/views/dashboards.py:554 #: pretix/presale/templates/pretixpresale/event/index.html:33 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:8 -#: pretix/presale/views/widget.py:762 +#: pretix/presale/views/widget.py:765 msgid "Event series" msgstr "" -#: pretix/base/models/event.py:676 pretix/base/models/event.py:1606 +#: pretix/base/models/event.py:676 pretix/base/models/event.py:1617 msgid "Seating plan" msgstr "" -#: pretix/base/models/event.py:683 pretix/base/models/items.py:675 +#: pretix/base/models/event.py:683 pretix/base/models/items.py:680 msgid "Sell on all sales channels" msgstr "" -#: pretix/base/models/event.py:688 pretix/base/models/items.py:680 -#: pretix/base/models/items.py:1230 pretix/base/payment.py:476 +#: pretix/base/models/event.py:688 pretix/base/models/items.py:685 +#: pretix/base/models/items.py:1240 pretix/base/payment.py:476 msgid "Restrict to specific sales channels" msgstr "" @@ -4865,144 +4903,148 @@ msgstr "" msgid "Events" msgstr "" -#: pretix/base/models/event.py:1378 +#: pretix/base/models/event.py:1389 msgid "" "You have configured at least one paid product but have not enabled any " "payment methods." msgstr "" -#: pretix/base/models/event.py:1381 +#: pretix/base/models/event.py:1392 msgid "" "You have configured at least one paid product but have not configured a " "currency." msgstr "" -#: pretix/base/models/event.py:1384 +#: pretix/base/models/event.py:1395 msgid "You need to configure at least one quota to sell anything." msgstr "" -#: pretix/base/models/event.py:1389 +#: pretix/base/models/event.py:1400 #, python-brace-format msgid "You need to fill the meta parameter \"{property}\"." msgstr "" -#: pretix/base/models/event.py:1503 +#: pretix/base/models/event.py:1514 msgid "" "Once created an event cannot change between an series and a single event." msgstr "" -#: pretix/base/models/event.py:1509 +#: pretix/base/models/event.py:1520 msgid "The event slug cannot be changed." msgstr "" -#: pretix/base/models/event.py:1512 +#: pretix/base/models/event.py:1523 msgid "This slug has already been used for a different event." msgstr "" -#: pretix/base/models/event.py:1518 +#: pretix/base/models/event.py:1529 msgid "The event cannot end before it starts." msgstr "" -#: pretix/base/models/event.py:1524 +#: pretix/base/models/event.py:1535 msgid "The event's presale cannot end before it starts." msgstr "" -#: pretix/base/models/event.py:1554 +#: pretix/base/models/event.py:1565 msgid "" "Only with this checkbox enabled, this date is visible in the frontend to " "users." msgstr "" -#: pretix/base/models/event.py:1558 +#: pretix/base/models/event.py:1569 msgid "" "If selected, this event will show up publicly on the list of dates for your " "event." msgstr "" -#: pretix/base/models/event.py:1603 pretix/base/settings.py:3334 +#: pretix/base/models/event.py:1614 pretix/base/settings.py:3347 msgid "Frontpage text" msgstr "" -#: pretix/base/models/event.py:1620 +#: pretix/base/models/event.py:1631 msgid "Date in event series" msgstr "" -#: pretix/base/models/event.py:1621 +#: pretix/base/models/event.py:1632 msgid "Dates in event series" msgstr "" -#: pretix/base/models/event.py:1762 +#: pretix/base/models/event.py:1773 msgid "One or more variations do not belong to this event." msgstr "" -#: pretix/base/models/event.py:1792 pretix/base/models/items.py:2236 +#: pretix/base/models/event.py:1803 pretix/base/models/items.py:2246 msgid "Can not contain spaces or special characters except underscores" msgstr "" -#: pretix/base/models/event.py:1797 pretix/base/models/items.py:2241 +#: pretix/base/models/event.py:1808 pretix/base/models/items.py:2251 msgid "The property name may only contain letters, numbers and underscores." msgstr "" -#: pretix/base/models/event.py:1802 +#: pretix/base/models/event.py:1813 msgid "Default value" msgstr "" -#: pretix/base/models/event.py:1804 +#: pretix/base/models/event.py:1815 #: pretix/control/templates/pretixcontrol/organizers/properties.html:50 msgid "Can only be changed by organizer-level administrators" msgstr "" -#: pretix/base/models/event.py:1806 +#: pretix/base/models/event.py:1817 msgid "Required for events" msgstr "" -#: pretix/base/models/event.py:1807 +#: pretix/base/models/event.py:1818 msgid "" "If checked, an event can only be taken live if the property is set. In event " "series, its always optional to set a value for individual dates" msgstr "" -#: pretix/base/models/event.py:1813 pretix/base/models/items.py:2253 +#: pretix/base/models/event.py:1824 pretix/base/models/items.py:2263 msgid "Valid values" msgstr "" -#: pretix/base/models/event.py:1816 +#: pretix/base/models/event.py:1827 #: pretix/control/templates/pretixcontrol/organizers/properties.html:45 msgid "Show filter option to customers" msgstr "" -#: pretix/base/models/event.py:1817 +#: pretix/base/models/event.py:1828 msgid "" "This field will be shown to filter events in the public event list and " "calendar." msgstr "" -#: pretix/base/models/event.py:1820 pretix/control/forms/organizer.py:272 -#: pretix/control/forms/organizer.py:276 +#: pretix/base/models/event.py:1831 pretix/control/forms/organizer.py:281 +#: pretix/control/forms/organizer.py:285 msgid "Public name" msgstr "" -#: pretix/base/models/event.py:1824 +#: pretix/base/models/event.py:1835 #: pretix/control/templates/pretixcontrol/organizers/properties.html:40 msgid "Can be used for filtering" msgstr "" -#: pretix/base/models/event.py:1825 +#: pretix/base/models/event.py:1836 msgid "" "This field will be shown to filter events or reports in the backend, and it " "can also be used for hidden filter parameters in the frontend (e.g. using " "the widget)." msgstr "" -#: pretix/base/models/event.py:1835 +#: pretix/base/models/event.py:1846 msgid "A property can either be required or have a default value, not both." msgstr "" -#: pretix/base/models/event.py:1915 pretix/base/models/organizer.py:627 +#: pretix/base/models/event.py:1884 +msgid "Property and event must belong to the same organizer." +msgstr "" + +#: pretix/base/models/event.py:1928 pretix/base/models/organizer.py:627 msgid "Link text" msgstr "" -#: pretix/base/models/event.py:1918 pretix/base/models/organizer.py:630 +#: pretix/base/models/event.py:1931 pretix/base/models/organizer.py:630 msgid "Link URL" msgstr "" @@ -5017,7 +5059,7 @@ msgstr "" #: pretix/base/models/exports.py:61 pretix/base/models/exports.py:66 #: pretix/base/models/exports.py:71 pretix/control/forms/event.py:1153 -#: pretix/control/forms/organizer.py:705 +#: pretix/control/forms/organizer.py:715 msgid "You can specify multiple recipients separated by commas." msgstr "" @@ -5033,9 +5075,9 @@ msgstr "" #: pretix/control/forms/event.py:1333 pretix/control/forms/event.py:1343 #: pretix/control/forms/event.py:1353 pretix/control/forms/event.py:1368 #: pretix/control/forms/orders.py:738 pretix/control/forms/orders.py:960 -#: pretix/control/forms/orders.py:987 pretix/control/forms/organizer.py:727 -#: pretix/control/forms/organizer.py:737 pretix/control/forms/organizer.py:747 -#: pretix/control/forms/organizer.py:757 pretix/control/forms/vouchers.py:282 +#: pretix/control/forms/orders.py:987 pretix/control/forms/organizer.py:737 +#: pretix/control/forms/organizer.py:747 pretix/control/forms/organizer.py:757 +#: pretix/control/forms/organizer.py:767 pretix/control/forms/vouchers.py:282 #: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:33 #: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:61 #: pretix/plugins/sendmail/forms.py:57 pretix/plugins/sendmail/forms.py:73 @@ -5130,7 +5172,7 @@ msgstr "" msgid "Category name" msgstr "" -#: pretix/base/models/items.py:97 pretix/base/models/items.py:484 +#: pretix/base/models/items.py:97 pretix/base/models/items.py:489 msgid "" "If you set this, this will be used instead of the public name in the backend." msgstr "" @@ -5205,12 +5247,12 @@ msgid "Disable product for this date" msgstr "" #: pretix/base/models/items.py:226 pretix/base/models/items.py:282 -#: pretix/base/models/items.py:563 +#: pretix/base/models/items.py:568 msgid "This product will not be sold before the given date." msgstr "" #: pretix/base/models/items.py:231 pretix/base/models/items.py:287 -#: pretix/base/models/items.py:573 +#: pretix/base/models/items.py:578 msgid "This product will not be sold after the given date." msgstr "" @@ -5236,44 +5278,56 @@ msgstr "" msgid "Show product with info on why it’s unavailable" msgstr "" -#: pretix/base/models/items.py:456 pretix/base/models/items.py:781 -msgid "Don't use re-usable media, use regular one-off tickets" -msgstr "" - -#: pretix/base/models/items.py:457 -msgid "Require an existing medium to be re-used" -msgstr "" - -#: pretix/base/models/items.py:458 -msgid "Require a previously unknown medium to be newly added" +#: pretix/base/models/items.py:458 pretix/base/models/items.py:786 +msgid "Don't use reusable media, use regular one-off tickets" msgstr "" #: pretix/base/models/items.py:459 -msgid "Require either an existing or a new medium to be used" +msgid "Require a previously unknown medium to be newly added" msgstr "" -#: pretix/base/models/items.py:475 pretix/base/models/items.py:1458 +#: pretix/base/models/items.py:460 +msgid "Require an existing medium to be reused, replacing any previous tickets" +msgstr "" + +#: pretix/base/models/items.py:461 +msgid "" +"Require either an existing or a new medium to be used, replacing any " +"previous tickets" +msgstr "" + +#: pretix/base/models/items.py:462 +msgid "Require an existing medium to be reused, adding to any previous tickets" +msgstr "" + +#: pretix/base/models/items.py:464 +msgid "" +"Require either an existing or a new medium to be used, adding to any " +"previous tickets" +msgstr "" + +#: pretix/base/models/items.py:480 pretix/base/models/items.py:1468 msgid "Category" msgstr "" -#: pretix/base/models/items.py:476 +#: pretix/base/models/items.py:481 msgid "" "If you have many products, you can optionally sort them into categories to " "keep things organized." msgstr "" -#: pretix/base/models/items.py:493 +#: pretix/base/models/items.py:498 msgid "This is shown below the product name in lists." msgstr "" -#: pretix/base/models/items.py:498 +#: pretix/base/models/items.py:503 msgid "" "If this product has multiple variations, you can set different prices for " "each of the variations. If a variation does not have a special price or if " "you do not have variations, this price will be used." msgstr "" -#: pretix/base/models/items.py:506 +#: pretix/base/models/items.py:511 msgid "" "If this option is active, your users can choose the price themselves. The " "price configured above is then interpreted as the minimum price a user has " @@ -5281,11 +5335,11 @@ msgid "" "event." msgstr "" -#: pretix/base/models/items.py:511 pretix/base/models/items.py:1176 +#: pretix/base/models/items.py:516 pretix/base/models/items.py:1186 msgid "Suggested price" msgstr "" -#: pretix/base/models/items.py:512 pretix/base/models/items.py:1177 +#: pretix/base/models/items.py:517 pretix/base/models/items.py:1187 msgid "" "This price will be used as the default value of the input field. The user " "can choose a lower value, but not lower than the price this product would " @@ -5293,45 +5347,45 @@ msgid "" "used that lowers the price." msgstr "" -#: pretix/base/models/items.py:526 +#: pretix/base/models/items.py:531 msgid "Whether or not buying this product allows a person to enter your event" msgstr "" -#: pretix/base/models/items.py:531 +#: pretix/base/models/items.py:536 msgid "Is a personalized ticket" msgstr "" -#: pretix/base/models/items.py:533 +#: pretix/base/models/items.py:538 msgid "Whether or not buying this product allows to enter attendee information" msgstr "" -#: pretix/base/models/items.py:542 +#: pretix/base/models/items.py:547 msgid "Show a waiting list for this ticket" msgstr "" -#: pretix/base/models/items.py:543 +#: pretix/base/models/items.py:548 msgid "This will only work if waiting lists are enabled for this event." msgstr "" -#: pretix/base/models/items.py:547 pretix/base/settings.py:1593 +#: pretix/base/models/items.py:552 pretix/base/settings.py:1606 #: pretix/control/forms/event.py:1869 msgid "Show number of tickets left" msgstr "" -#: pretix/base/models/items.py:548 +#: pretix/base/models/items.py:553 msgid "Publicly show how many tickets are still available." msgstr "" -#: pretix/base/models/items.py:555 pretix/control/forms/item.py:691 +#: pretix/base/models/items.py:560 pretix/control/forms/item.py:691 msgid "Product picture" msgstr "" -#: pretix/base/models/items.py:584 +#: pretix/base/models/items.py:589 msgctxt "hidden_if_available_legacy" msgid "Only show after sellout of" msgstr "" -#: pretix/base/models/items.py:585 +#: pretix/base/models/items.py:590 msgid "" "If you select a quota here, this product will only be shown when that quota " "is unavailable. If combined with the option to hide sold-out products, this " @@ -5340,11 +5394,11 @@ msgid "" "all tickets in the referenced quota are reserved, but not yet sold." msgstr "" -#: pretix/base/models/items.py:595 +#: pretix/base/models/items.py:600 msgid "Only show after sellout of" msgstr "" -#: pretix/base/models/items.py:596 +#: pretix/base/models/items.py:601 msgid "" "If you select a product here, this product will only be shown when that " "product is no longer available. This will happen either because the other " @@ -5356,13 +5410,13 @@ msgid "" "reserved, but not yet sold." msgstr "" -#: pretix/base/models/items.py:611 +#: pretix/base/models/items.py:616 msgid "" "To buy this product, the user needs a voucher that applies to this product " "either directly or via a quota." msgstr "" -#: pretix/base/models/items.py:617 +#: pretix/base/models/items.py:622 msgid "" "If this product is part of an order, the order will be put into an " "\"approval\" state and will need to be confirmed by you before it can be " @@ -5370,34 +5424,34 @@ msgid "" "only available to specific groups." msgstr "" -#: pretix/base/models/items.py:624 +#: pretix/base/models/items.py:629 msgid "" "This product will be hidden from the event page until the user enters a " "voucher that unlocks this product." msgstr "" -#: pretix/base/models/items.py:630 +#: pretix/base/models/items.py:635 msgid "" "If this option is set, the product will only be sold as part of bundle " "products. Do not check this option if you want to use this " "product as an add-on product, but only for fixed bundles!" msgstr "" -#: pretix/base/models/items.py:637 +#: pretix/base/models/items.py:642 msgid "" "If this is checked, the usual cancellation and order change settings of this " "event apply. If this is unchecked, orders containing this product can not be " "canceled by users but only by you." msgstr "" -#: pretix/base/models/items.py:644 +#: pretix/base/models/items.py:649 msgid "" "This product can only be bought if it is added to the cart at least this " "many times. If you keep the field empty or set it to 0, there is no special " "limit for this product." msgstr "" -#: pretix/base/models/items.py:651 +#: pretix/base/models/items.py:656 msgid "" "This product can only be bought at most this many times within one order. If " "you keep the field empty or set it to 0, there is no special limit for this " @@ -5405,7 +5459,7 @@ msgid "" "applies regardless." msgstr "" -#: pretix/base/models/items.py:658 pretix/base/models/items.py:1244 +#: pretix/base/models/items.py:663 pretix/base/models/items.py:1254 msgid "" "If you set this, the check-in app will show a visible warning that this " "ticket requires special attention. You can use this for example for student " @@ -5413,62 +5467,62 @@ msgid "" "needs to be checked." msgstr "" -#: pretix/base/models/items.py:665 pretix/base/models/items.py:1251 +#: pretix/base/models/items.py:670 pretix/base/models/items.py:1261 msgid "" "This text will be shown by the check-in app if a ticket of this type is " "scanned." msgstr "" -#: pretix/base/models/items.py:671 pretix/base/models/items.py:1172 +#: pretix/base/models/items.py:676 pretix/base/models/items.py:1182 msgid "" "If set, this will be displayed next to the current price to show that the " "current price is a discounted one. This is just a cosmetic setting and will " "not actually impact pricing." msgstr "" -#: pretix/base/models/items.py:681 +#: pretix/base/models/items.py:686 msgid "Only sell tickets for this product on the selected sales channels." msgstr "" -#: pretix/base/models/items.py:686 +#: pretix/base/models/items.py:691 msgid "" "When a customer buys this product, they will get a gift card with a value " "corresponding to the product price." msgstr "" -#: pretix/base/models/items.py:696 +#: pretix/base/models/items.py:701 msgid "Allowed membership types" msgstr "" -#: pretix/base/models/items.py:701 pretix/base/models/items.py:1200 +#: pretix/base/models/items.py:706 pretix/base/models/items.py:1210 msgid "" "Do not show this unless the customer is logged in and has a valid " "membership. Be aware that this means it will never be visible in the widget." msgstr "" -#: pretix/base/models/items.py:710 +#: pretix/base/models/items.py:715 msgid "This product creates a membership of type" msgstr "" -#: pretix/base/models/items.py:713 +#: pretix/base/models/items.py:718 msgid "" "The duration of the membership is the same as the duration of the event or " "event series date" msgstr "" -#: pretix/base/models/items.py:717 +#: pretix/base/models/items.py:722 msgid "Membership duration in days" msgstr "" -#: pretix/base/models/items.py:721 +#: pretix/base/models/items.py:726 msgid "Membership duration in months" msgstr "" -#: pretix/base/models/items.py:728 +#: pretix/base/models/items.py:733 msgid "Validity" msgstr "" -#: pretix/base/models/items.py:730 +#: pretix/base/models/items.py:735 msgid "" "When setting up a regular event, or an event series with time slots, you " "typically do NOT need to change this value. The default setting means that " @@ -5480,53 +5534,53 @@ msgid "" "change but keep their current validity." msgstr "" -#: pretix/base/models/items.py:738 pretix/control/forms/item.py:794 +#: pretix/base/models/items.py:743 pretix/control/forms/item.py:794 msgid "Start of validity" msgstr "" -#: pretix/base/models/items.py:739 +#: pretix/base/models/items.py:744 msgid "End of validity" msgstr "" -#: pretix/base/models/items.py:742 +#: pretix/base/models/items.py:747 msgid "Minutes" msgstr "" -#: pretix/base/models/items.py:746 +#: pretix/base/models/items.py:751 msgid "Hours" msgstr "" -#: pretix/base/models/items.py:750 +#: pretix/base/models/items.py:755 msgid "Days" msgstr "" -#: pretix/base/models/items.py:754 +#: pretix/base/models/items.py:759 msgid "Months" msgstr "" -#: pretix/base/models/items.py:757 +#: pretix/base/models/items.py:762 msgid "Customers can select the validity start date" msgstr "" -#: pretix/base/models/items.py:758 +#: pretix/base/models/items.py:763 msgid "If not selected, the validity always starts at the time of purchase." msgstr "" -#: pretix/base/models/items.py:763 +#: pretix/base/models/items.py:768 msgid "Maximum future start" msgstr "" -#: pretix/base/models/items.py:764 +#: pretix/base/models/items.py:769 msgid "The selected start date may only be this many days in the future." msgstr "" -#: pretix/base/models/items.py:770 +#: pretix/base/models/items.py:775 msgid "Reusable media policy" msgstr "" -#: pretix/base/models/items.py:772 +#: pretix/base/models/items.py:777 msgid "" -"If this product should be stored on a re-usable physical medium, you can " +"If this product should be stored on a reusable physical medium, you can " "attach a physical media policy. This is not required for regular tickets, " "which just use a one-time barcode, but only for products like renewable " "season tickets or re-chargeable gift card wristbands. This is an advanced " @@ -5534,70 +5588,77 @@ msgid "" "settings." msgstr "" -#: pretix/base/models/items.py:782 +#: pretix/base/models/items.py:787 msgid "Reusable media type" msgstr "" -#: pretix/base/models/items.py:784 +#: pretix/base/models/items.py:789 msgid "" "Select the type of physical medium that should be used for this product. " "Note that not all media types support all types of products, and not all " "media types are supported across all sales channels or check-in processes." msgstr "" -#: pretix/base/models/items.py:989 +#: pretix/base/models/items.py:994 msgid "" "If you select a reusable media policy, you also need to select a reusable " "media type." msgstr "" -#: pretix/base/models/items.py:993 +#: pretix/base/models/items.py:998 msgid "The selected media type is not enabled in your organizer settings." msgstr "" -#: pretix/base/models/items.py:995 +#: pretix/base/models/items.py:1000 msgid "The selected media type does not support usage for tickets currently." msgstr "" -#: pretix/base/models/items.py:997 +#: pretix/base/models/items.py:1002 msgid "" "The selected media type does not support usage for gift cards currently." msgstr "" -#: pretix/base/models/items.py:999 +#: pretix/base/models/items.py:1005 +msgid "" +"The selected media type requires all media to be registered in the system " +"prior to their usage. Therefore, the selected media policy does not make " +"sense for this media type." +msgstr "" + +#: pretix/base/models/items.py:1009 msgid "" "You currently cannot create gift cards with a reusable media policy. " "Instead, gift cards for some reusable media types can be created or re-" "charged directly at the POS." msgstr "" -#: pretix/base/models/items.py:1007 +#: pretix/base/models/items.py:1017 msgid "" "The maximum number per order can not be lower than the minimum number per " "order." msgstr "" -#: pretix/base/models/items.py:1013 +#: pretix/base/models/items.py:1023 msgid "The item's category must belong to the same event as the item." msgstr "" -#: pretix/base/models/items.py:1018 +#: pretix/base/models/items.py:1028 msgid "The item's tax rule must belong to the same event as the item." msgstr "" -#: pretix/base/models/items.py:1024 +#: pretix/base/models/items.py:1034 msgid "The item's availability cannot end before it starts." msgstr "" -#: pretix/base/models/items.py:1156 +#: pretix/base/models/items.py:1166 msgid "This is shown below the variation name in lists." msgstr "" -#: pretix/base/models/items.py:1183 +#: pretix/base/models/items.py:1193 msgid "Require approval" msgstr "" -#: pretix/base/models/items.py:1185 +#: pretix/base/models/items.py:1195 msgid "" "If this variation is part of an order, the order will be put into an " "\"approval\" state and will need to be confirmed by you before it can be " @@ -5605,101 +5666,101 @@ msgid "" "only available to specific groups." msgstr "" -#: pretix/base/models/items.py:1195 pretix/control/navigation.py:618 +#: pretix/base/models/items.py:1205 pretix/control/navigation.py:618 #: pretix/control/templates/pretixcontrol/organizers/membershiptypes.html:4 #: pretix/control/templates/pretixcontrol/organizers/membershiptypes.html:6 msgid "Membership types" msgstr "" -#: pretix/base/models/items.py:1207 +#: pretix/base/models/items.py:1217 msgid "This variation will not be sold before the given date." msgstr "" -#: pretix/base/models/items.py:1217 +#: pretix/base/models/items.py:1227 msgid "This variation will not be sold after the given date." msgstr "" -#: pretix/base/models/items.py:1225 +#: pretix/base/models/items.py:1235 msgid "Sell on all sales channels the product is sold on" msgstr "" -#: pretix/base/models/items.py:1231 +#: pretix/base/models/items.py:1241 msgid "" "The sales channel selection for the product as a whole takes precedence, so " "if a sales channel is selected here but not on product level, the variation " "will not be available." msgstr "" -#: pretix/base/models/items.py:1236 +#: pretix/base/models/items.py:1246 msgid "Show only if a matching voucher is redeemed." msgstr "" -#: pretix/base/models/items.py:1238 +#: pretix/base/models/items.py:1248 msgid "" "This variation will be hidden from the event page until the user enters a " "voucher that unlocks this variation." msgstr "" -#: pretix/base/models/items.py:1258 +#: pretix/base/models/items.py:1268 #: pretix/control/templates/pretixcontrol/item/create.html:111 msgid "Product variations" msgstr "" -#: pretix/base/models/items.py:1463 +#: pretix/base/models/items.py:1473 msgid "Minimum number" msgstr "" -#: pretix/base/models/items.py:1467 +#: pretix/base/models/items.py:1477 msgid "Maximum number" msgstr "" -#: pretix/base/models/items.py:1471 +#: pretix/base/models/items.py:1481 msgid "Add-Ons are included in the price" msgstr "" -#: pretix/base/models/items.py:1472 +#: pretix/base/models/items.py:1482 msgid "" "If selected, adding add-ons to this ticket is free, even if the add-ons " "would normally cost money individually." msgstr "" -#: pretix/base/models/items.py:1477 +#: pretix/base/models/items.py:1487 msgid "Allow the same product to be selected multiple times" msgstr "" -#: pretix/base/models/items.py:1496 +#: pretix/base/models/items.py:1506 msgid "The add-on's category must belong to the same event as the item." msgstr "" -#: pretix/base/models/items.py:1501 +#: pretix/base/models/items.py:1511 msgid "The item already has an add-on of this category." msgstr "" -#: pretix/base/models/items.py:1506 +#: pretix/base/models/items.py:1516 msgid "The minimum count needs to be equal to or greater than zero." msgstr "" -#: pretix/base/models/items.py:1511 +#: pretix/base/models/items.py:1521 msgid "The maximum count needs to be equal to or greater than zero." msgstr "" -#: pretix/base/models/items.py:1516 +#: pretix/base/models/items.py:1526 msgid "The maximum count needs to be greater than the minimum count." msgstr "" -#: pretix/base/models/items.py:1543 +#: pretix/base/models/items.py:1553 msgid "Bundled item" msgstr "" -#: pretix/base/models/items.py:1549 +#: pretix/base/models/items.py:1559 msgid "Bundled variation" msgstr "" -#: pretix/base/models/items.py:1560 +#: pretix/base/models/items.py:1570 msgid "Designated price part" msgstr "" -#: pretix/base/models/items.py:1561 +#: pretix/base/models/items.py:1571 msgid "" "If set, it will be shown that this bundled item is responsible for the given " "value of the total gross price. This might be important in cases of mixed " @@ -5707,246 +5768,248 @@ msgid "" "the base item's price." msgstr "" -#: pretix/base/models/items.py:1584 +#: pretix/base/models/items.py:1594 msgid "The bundled item must belong to the same event as the item." msgstr "" -#: pretix/base/models/items.py:1586 +#: pretix/base/models/items.py:1596 msgid "A variation needs to be set for this item." msgstr "" -#: pretix/base/models/items.py:1588 +#: pretix/base/models/items.py:1598 msgid "The chosen variation does not belong to this item." msgstr "" -#: pretix/base/models/items.py:1593 +#: pretix/base/models/items.py:1603 msgid "The count needs to be equal to or greater than zero." msgstr "" -#: pretix/base/models/items.py:1648 +#: pretix/base/models/items.py:1658 msgid "Number" msgstr "" -#: pretix/base/models/items.py:1649 +#: pretix/base/models/items.py:1659 msgid "Text (one line)" msgstr "" -#: pretix/base/models/items.py:1650 +#: pretix/base/models/items.py:1660 msgid "Multiline text" msgstr "" -#: pretix/base/models/items.py:1651 +#: pretix/base/models/items.py:1661 msgid "Yes/No" msgstr "" -#: pretix/base/models/items.py:1652 +#: pretix/base/models/items.py:1662 msgid "Choose one from a list" msgstr "" -#: pretix/base/models/items.py:1653 +#: pretix/base/models/items.py:1663 msgid "Choose multiple from a list" msgstr "" -#: pretix/base/models/items.py:1654 +#: pretix/base/models/items.py:1664 msgid "File upload" msgstr "" -#: pretix/base/models/items.py:1657 +#: pretix/base/models/items.py:1667 #: pretix/control/templates/pretixcontrol/event/settings.html:240 msgid "Date and time" msgstr "" -#: pretix/base/models/items.py:1658 +#: pretix/base/models/items.py:1668 msgid "Country code (ISO 3166-1 alpha-2)" msgstr "" -#: pretix/base/models/items.py:1681 pretix/base/models/items.py:1957 +#: pretix/base/models/items.py:1691 pretix/base/models/items.py:1967 #: pretix/base/models/organizer.py:654 msgid "" "The identifier may only contain letters, numbers, dots, dashes, and " "underscores." msgstr "" -#: pretix/base/models/items.py:1686 +#: pretix/base/models/items.py:1696 msgid "Help text" msgstr "" -#: pretix/base/models/items.py:1687 +#: pretix/base/models/items.py:1697 msgid "If the question needs to be explained or clarified, do it here!" msgstr "" -#: pretix/base/models/items.py:1693 +#: pretix/base/models/items.py:1703 msgid "Question type" msgstr "" -#: pretix/base/models/items.py:1697 +#: pretix/base/models/items.py:1707 #: pretix/control/templates/pretixcontrol/items/questions.html:59 msgid "Required question" msgstr "" -#: pretix/base/models/items.py:1704 +#: pretix/base/models/items.py:1714 msgid "This question will be asked to buyers of the selected products" msgstr "" -#: pretix/base/models/items.py:1711 +#: pretix/base/models/items.py:1721 msgid "Ask during check-in instead of in the ticket buying process" msgstr "" -#: pretix/base/models/items.py:1712 pretix/base/models/items.py:1717 +#: pretix/base/models/items.py:1722 pretix/base/models/items.py:1727 msgid "Not supported by all check-in apps for all question types." msgstr "" -#: pretix/base/models/items.py:1716 +#: pretix/base/models/items.py:1726 msgid "Show answer during check-in" msgstr "" -#: pretix/base/models/items.py:1721 +#: pretix/base/models/items.py:1731 #: pretix/control/templates/pretixcontrol/items/questions.html:70 msgid "Hidden question" msgstr "" -#: pretix/base/models/items.py:1722 +#: pretix/base/models/items.py:1732 msgid "This question will only show up in the backend." msgstr "" -#: pretix/base/models/items.py:1726 +#: pretix/base/models/items.py:1736 msgid "Print answer on invoices" msgstr "" -#: pretix/base/models/items.py:1734 pretix/base/models/items.py:1740 -#: pretix/base/models/items.py:1746 +#: pretix/base/models/items.py:1744 pretix/base/models/items.py:1750 +#: pretix/base/models/items.py:1756 msgid "Minimum value" msgstr "" -#: pretix/base/models/items.py:1735 pretix/base/models/items.py:1738 -#: pretix/base/models/items.py:1741 pretix/base/models/items.py:1744 -#: pretix/base/models/items.py:1747 pretix/base/models/items.py:1750 -#: pretix/base/models/items.py:1754 +#: pretix/base/models/items.py:1745 pretix/base/models/items.py:1748 +#: pretix/base/models/items.py:1751 pretix/base/models/items.py:1754 +#: pretix/base/models/items.py:1757 pretix/base/models/items.py:1760 +#: pretix/base/models/items.py:1764 msgid "Currently not supported in our apps and during check-in" msgstr "" -#: pretix/base/models/items.py:1737 pretix/base/models/items.py:1743 -#: pretix/base/models/items.py:1749 +#: pretix/base/models/items.py:1747 pretix/base/models/items.py:1753 +#: pretix/base/models/items.py:1759 msgid "Maximum value" msgstr "" -#: pretix/base/models/items.py:1752 +#: pretix/base/models/items.py:1762 msgid "Maximum length" msgstr "" -#: pretix/base/models/items.py:1758 +#: pretix/base/models/items.py:1768 msgid "Validate file to be a portrait" msgstr "" -#: pretix/base/models/items.py:1759 +#: pretix/base/models/items.py:1769 msgid "" "If checked, files must be images with an aspect ratio of 3:4. This is " "commonly used for photos printed on badges." msgstr "" -#: pretix/base/models/items.py:1814 +#: pretix/base/models/items.py:1824 msgid "An answer to this question is required to proceed." msgstr "" -#: pretix/base/models/items.py:1824 +#: pretix/base/models/items.py:1834 msgid "Invalid input type." msgstr "" -#: pretix/base/models/items.py:1858 +#: pretix/base/models/items.py:1868 msgid "The number is to low." msgstr "" -#: pretix/base/models/items.py:1860 +#: pretix/base/models/items.py:1870 msgid "The number is to high." msgstr "" -#: pretix/base/models/items.py:1863 +#: pretix/base/models/items.py:1873 msgid "Invalid number input." msgstr "" -#: pretix/base/models/items.py:1870 pretix/base/models/items.py:1894 +#: pretix/base/models/items.py:1880 pretix/base/models/items.py:1904 msgid "Please choose a later date." msgstr "" -#: pretix/base/models/items.py:1872 pretix/base/models/items.py:1896 +#: pretix/base/models/items.py:1882 pretix/base/models/items.py:1906 msgid "Please choose an earlier date." msgstr "" -#: pretix/base/models/items.py:1875 +#: pretix/base/models/items.py:1885 msgid "Invalid date input." msgstr "" -#: pretix/base/models/items.py:1882 +#: pretix/base/models/items.py:1892 msgid "Invalid time input." msgstr "" -#: pretix/base/models/items.py:1891 +#: pretix/base/models/items.py:1901 msgid "Invalid datetime input." msgstr "" -#: pretix/base/models/items.py:1903 +#: pretix/base/models/items.py:1913 msgid "Unknown country code." msgstr "" -#: pretix/base/models/items.py:1921 pretix/base/models/items.py:1923 +#: pretix/base/models/items.py:1931 pretix/base/models/items.py:1933 msgid "The maximum date must not be before the minimum value." msgstr "" -#: pretix/base/models/items.py:1925 +#: pretix/base/models/items.py:1935 msgid "The maximum value must not be lower than the minimum value." msgstr "" -#: pretix/base/models/items.py:1943 +#: pretix/base/models/items.py:1953 msgid "" "The system already contains answers to this question that are not compatible " "with changing the type of question without data loss. Consider hiding this " "question and creating a new one instead." msgstr "" -#: pretix/base/models/items.py:1961 +#: pretix/base/models/items.py:1971 #: pretix/control/templates/pretixcontrol/items/question.html:87 msgid "Answer" msgstr "" -#: pretix/base/models/items.py:1985 +#: pretix/base/models/items.py:1995 #, python-brace-format msgid "The identifier \"{}\" is already used for a different option." msgstr "" -#: pretix/base/models/items.py:1988 +#: pretix/base/models/items.py:1998 msgid "Question option" msgstr "" -#: pretix/base/models/items.py:1989 +#: pretix/base/models/items.py:1999 msgid "Question options" msgstr "" -#: pretix/base/models/items.py:2074 pretix/control/forms/event.py:1903 +#: pretix/base/models/items.py:2084 pretix/control/forms/event.py:1903 #: pretix/control/templates/pretixcontrol/items/quotas.html:104 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:83 msgid "Total capacity" msgstr "" -#: pretix/base/models/items.py:2076 pretix/control/forms/item.py:512 +#: pretix/base/models/items.py:2086 pretix/control/forms/item.py:512 msgid "Leave empty for an unlimited number of tickets." msgstr "" -#: pretix/base/models/items.py:2080 pretix/base/models/orders.py:1494 -#: pretix/base/models/orders.py:3033 +#: pretix/base/models/items.py:2090 pretix/base/models/orders.py:1516 +#: pretix/base/models/orders.py:3055 #: pretix/control/templates/pretixcontrol/checkin/index.html:97 msgid "Item" msgstr "" -#: pretix/base/models/items.py:2088 pretix/control/forms/item.py:973 +#: pretix/base/models/items.py:2098 pretix/control/forms/item.py:973 #: pretix/plugins/autocheckin/models.py:74 msgid "Variations" msgstr "" -#: pretix/base/models/items.py:2092 +#: pretix/base/models/items.py:2102 #: pretix/control/templates/pretixcontrol/items/quotas.html:135 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:96 msgid "Ignore this quota when determining event availability" msgstr "" -#: pretix/base/models/items.py:2093 +#: pretix/base/models/items.py:2103 msgid "" "If you enable this, this quota will be ignored when determining event " "availability in your event calendar. This is useful e.g. for merchandise " @@ -5954,22 +6017,22 @@ msgid "" "as sold out." msgstr "" -#: pretix/base/models/items.py:2100 +#: pretix/base/models/items.py:2110 msgid "Close this quota permanently once it is sold out" msgstr "" -#: pretix/base/models/items.py:2101 +#: pretix/base/models/items.py:2111 msgid "" "If you enable this, when the quota is sold out once, no more tickets will be " "sold, even if tickets become available again through cancellations or " "expiring orders. Of course, you can always re-open it manually." msgstr "" -#: pretix/base/models/items.py:2109 +#: pretix/base/models/items.py:2119 msgid "Allow to sell more tickets once people have checked out" msgstr "" -#: pretix/base/models/items.py:2110 +#: pretix/base/models/items.py:2120 msgid "" "With this option, quota will be released as soon as people are scanned at an " "exit of your event. This will only happen if they have been scanned both at " @@ -5979,50 +6042,51 @@ msgid "" "prevent accidental overbooking." msgstr "" -#: pretix/base/models/items.py:2122 pretix/control/navigation.py:169 +#: pretix/base/models/items.py:2132 pretix/control/navigation.py:169 #: pretix/control/templates/pretixcontrol/items/quotas.html:5 #: pretix/control/templates/pretixcontrol/items/quotas.html:7 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:418 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:185 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:59 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:76 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:59 msgid "Quotas" msgstr "" -#: pretix/base/models/items.py:2195 +#: pretix/base/models/items.py:2205 msgid "All variations must belong to an item contained in the items list." msgstr "" -#: pretix/base/models/items.py:2206 +#: pretix/base/models/items.py:2216 msgid "" "One or more items has variations but none of these are in the variations " "list." msgstr "" -#: pretix/base/models/items.py:2212 pretix/base/models/waitinglist.py:304 +#: pretix/base/models/items.py:2222 pretix/base/models/waitinglist.py:304 msgid "Subevent cannot be null for event series." msgstr "" -#: pretix/base/models/items.py:2248 +#: pretix/base/models/items.py:2258 msgid "Required for products" msgstr "" -#: pretix/base/models/items.py:2249 +#: pretix/base/models/items.py:2259 msgid "" "If checked, this property must be set in each product. Does not apply if a " "default value is set." msgstr "" -#: pretix/base/models/items.py:2254 +#: pretix/base/models/items.py:2264 msgid "" "If you keep this empty, any value is allowed. Otherwise, enter one possible " "value per line." msgstr "" -#: pretix/base/models/items.py:2313 +#: pretix/base/models/items.py:2323 msgid "Start" msgstr "" -#: pretix/base/models/items.py:2314 +#: pretix/base/models/items.py:2324 #: pretix/plugins/reports/accountingreport.py:129 msgid "End" msgstr "" @@ -6067,6 +6131,27 @@ msgstr "" msgid "bounced" msgstr "" +#: pretix/base/models/media.py:77 +msgctxt "reusable_medium" +msgid "Claim token" +msgstr "" + +#: pretix/base/models/media.py:82 +msgctxt "reusable_medium" +msgid "Label" +msgstr "" + +#: pretix/base/models/media.py:105 +msgid "Linked tickets" +msgstr "" + +#: pretix/base/models/media.py:107 +msgid "" +"If you link to more than one ticket, make sure there is no overlap in " +"validity. If multiple tickets are valid at once, this will lead to failed " +"check-ins." +msgstr "" + #: pretix/base/models/memberships.py:44 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:28 msgid "Membership is transferable" @@ -6121,8 +6206,8 @@ msgstr "" msgid "paid" msgstr "" -#: pretix/base/models/orders.py:203 pretix/control/forms/filter.py:1857 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:35 +#: pretix/base/models/orders.py:203 pretix/control/forms/filter.py:1863 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:47 msgid "expired" msgstr "" @@ -6160,7 +6245,7 @@ msgid "" "scanned." msgstr "" -#: pretix/base/models/orders.py:300 pretix/base/models/orders.py:1534 +#: pretix/base/models/orders.py:300 pretix/base/models/orders.py:1556 msgid "Meta information" msgstr "" @@ -6168,187 +6253,187 @@ msgstr "" msgid "API meta information" msgstr "" -#: pretix/base/models/orders.py:418 pretix/plugins/sendmail/forms.py:236 +#: pretix/base/models/orders.py:440 pretix/plugins/sendmail/forms.py:236 #: pretix/plugins/sendmail/forms.py:389 pretix/plugins/sendmail/views.py:269 msgid "approval pending" msgstr "" -#: pretix/base/models/orders.py:420 +#: pretix/base/models/orders.py:442 msgctxt "order state" msgid "pending (confirmed)" msgstr "" -#: pretix/base/models/orders.py:422 +#: pretix/base/models/orders.py:444 msgid "canceled (paid fee)" msgstr "" -#: pretix/base/models/orders.py:1035 +#: pretix/base/models/orders.py:1057 msgid "" "The payment can not be accepted as the last date of payments configured in " "the payment settings is over." msgstr "" -#: pretix/base/models/orders.py:1037 +#: pretix/base/models/orders.py:1059 msgid "" "The payment can not be accepted as the order is expired and you configured " "that no late payments should be accepted in the payment settings." msgstr "" -#: pretix/base/models/orders.py:1039 +#: pretix/base/models/orders.py:1061 msgid "This order is not yet approved by the event organizer." msgstr "" -#: pretix/base/models/orders.py:1064 +#: pretix/base/models/orders.py:1086 #, python-brace-format msgid "The ordered product \"{item}\" is no longer available." msgstr "" -#: pretix/base/models/orders.py:1065 +#: pretix/base/models/orders.py:1087 #, python-brace-format msgid "The seat \"{seat}\" is no longer available." msgstr "" -#: pretix/base/models/orders.py:1066 +#: pretix/base/models/orders.py:1088 #, python-brace-format msgid "The voucher \"{voucher}\" no longer has sufficient budget." msgstr "" -#: pretix/base/models/orders.py:1067 +#: pretix/base/models/orders.py:1089 #, python-brace-format msgid "The voucher \"{voucher}\" has been used in the meantime." msgstr "" -#: pretix/base/models/orders.py:1395 +#: pretix/base/models/orders.py:1417 msgid "" msgstr "" -#: pretix/base/models/orders.py:1514 pretix/base/models/orders.py:1522 +#: pretix/base/models/orders.py:1536 pretix/base/models/orders.py:1544 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1731 +#: pretix/base/models/orders.py:1753 msgctxt "payment_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1732 +#: pretix/base/models/orders.py:1754 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1733 +#: pretix/base/models/orders.py:1755 msgctxt "payment_state" msgid "confirmed" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1756 msgctxt "payment_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1757 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1736 +#: pretix/base/models/orders.py:1758 msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1764 pretix/base/models/orders.py:2193 +#: pretix/base/models/orders.py:1786 pretix/base/models/orders.py:2215 #: pretix/base/shredder.py:637 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:2134 +#: pretix/base/models/orders.py:2156 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:2135 +#: pretix/base/models/orders.py:2157 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:2136 +#: pretix/base/models/orders.py:2158 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:2137 +#: pretix/base/models/orders.py:2159 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:2138 +#: pretix/base/models/orders.py:2160 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:2140 +#: pretix/base/models/orders.py:2162 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:2148 +#: pretix/base/models/orders.py:2170 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:2149 +#: pretix/base/models/orders.py:2171 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:2150 +#: pretix/base/models/orders.py:2172 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:2188 +#: pretix/base/models/orders.py:2210 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:198 msgid "Refund reason" msgstr "" -#: pretix/base/models/orders.py:2189 +#: pretix/base/models/orders.py:2211 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:199 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:201 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:2309 +#: pretix/base/models/orders.py:2331 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:2310 +#: pretix/base/models/orders.py:2332 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:2311 +#: pretix/base/models/orders.py:2333 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:2312 +#: pretix/base/models/orders.py:2334 #: pretix/control/templates/pretixcontrol/order/index.html:190 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:2313 +#: pretix/base/models/orders.py:2335 msgid "Insurance fee" msgstr "" -#: pretix/base/models/orders.py:2314 +#: pretix/base/models/orders.py:2336 msgid "Late fee" msgstr "" -#: pretix/base/models/orders.py:2315 +#: pretix/base/models/orders.py:2337 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:2316 pretix/base/payment.py:1379 -#: pretix/base/payment.py:1455 pretix/base/settings.py:1101 +#: pretix/base/models/orders.py:2338 pretix/base/payment.py:1379 +#: pretix/base/payment.py:1455 pretix/base/settings.py:1114 #: pretix/control/templates/pretixcontrol/items/index.html:117 #: pretix/control/templates/pretixcontrol/order/index.html:185 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:383 @@ -6357,7 +6442,7 @@ msgstr "" msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:2321 +#: pretix/base/models/orders.py:2343 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:84 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:126 #: pretix/control/views/vouchers.py:121 @@ -6365,55 +6450,55 @@ msgstr "" msgid "Value" msgstr "" -#: pretix/base/models/orders.py:2602 +#: pretix/base/models/orders.py:2624 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:3157 +#: pretix/base/models/orders.py:3179 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:3168 +#: pretix/base/models/orders.py:3190 msgid "Limit for extending expiration date" msgstr "" -#: pretix/base/models/orders.py:3204 +#: pretix/base/models/orders.py:3226 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:3205 +#: pretix/base/models/orders.py:3227 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:3347 +#: pretix/base/models/orders.py:3369 msgid "Business customer" msgstr "" -#: pretix/base/models/orders.py:3363 +#: pretix/base/models/orders.py:3385 msgid "This reference will be printed on your invoice for your convenience." msgstr "" -#: pretix/base/models/orders.py:3489 +#: pretix/base/models/orders.py:3511 msgid "Transmission type" msgstr "" -#: pretix/base/models/orders.py:3580 +#: pretix/base/models/orders.py:3602 #: pretix/plugins/badges/templates/pretixplugins/badges/control_order_position_buttons.html:9 msgid "Badge" msgstr "" -#: pretix/base/models/orders.py:3581 pretix/base/pdf.py:1157 +#: pretix/base/models/orders.py:3603 pretix/base/pdf.py:1162 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:66 #: pretix/plugins/ticketoutputpdf/ticketoutput.py:114 msgid "Ticket" msgstr "" -#: pretix/base/models/orders.py:3582 +#: pretix/base/models/orders.py:3604 msgid "Certificate" msgstr "" -#: pretix/base/models/orders.py:3583 pretix/control/views/event.py:401 -#: pretix/control/views/event.py:406 pretix/control/views/organizer.py:653 +#: pretix/base/models/orders.py:3605 pretix/control/views/event.py:402 +#: pretix/control/views/event.py:407 pretix/control/views/organizer.py:653 #: pretix/control/views/organizer.py:658 msgid "Other" msgstr "" @@ -6458,7 +6543,7 @@ msgid "All event permissions" msgstr "" #: pretix/base/models/organizer.py:385 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:34 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:47 msgid "Event permissions" msgstr "" @@ -6467,7 +6552,7 @@ msgid "All organizer permissions" msgstr "" #: pretix/base/models/organizer.py:387 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:25 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:26 msgid "Organizer permissions" msgstr "" @@ -6504,7 +6589,7 @@ msgid "Type" msgstr "" #: pretix/base/models/seating.py:46 pretix/base/models/tax.py:306 -#: pretix/base/pdf.py:1336 +#: pretix/base/pdf.py:1341 msgid "Your layout file is not a valid JSON file." msgstr "" @@ -6523,12 +6608,12 @@ msgstr "" msgid "Multiple seats have the same ID: {id}" msgstr "" -#: pretix/base/models/seating.py:200 +#: pretix/base/models/seating.py:203 #, python-brace-format msgid "Row {number}" msgstr "" -#: pretix/base/models/seating.py:205 +#: pretix/base/models/seating.py:208 #, python-brace-format msgid "Seat {number}" msgstr "" @@ -7369,7 +7454,7 @@ msgstr "" msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1339 pretix/control/views/orders.py:1252 +#: pretix/base/payment.py:1339 pretix/control/views/orders.py:1266 msgid "You entered an order that could not be found." msgstr "" @@ -7408,7 +7493,7 @@ msgid "Product name" msgstr "" #: pretix/base/pdf.py:124 pretix/base/services/tickets.py:98 -#: pretix/control/views/event.py:941 pretix/control/views/pdf.py:96 +#: pretix/control/views/event.py:942 pretix/control/views/pdf.py:96 msgid "Sample product" msgstr "" @@ -7425,7 +7510,7 @@ msgid "Product description" msgstr "" #: pretix/base/pdf.py:134 pretix/base/services/tickets.py:99 -#: pretix/control/views/event.py:942 pretix/control/views/pdf.py:97 +#: pretix/control/views/event.py:943 pretix/control/views/pdf.py:97 msgid "Sample product description" msgstr "" @@ -7466,7 +7551,7 @@ msgstr "" #: pretix/base/services/placeholders.py:604 #: pretix/base/services/placeholders.py:689 #: pretix/base/services/placeholders.py:705 -#: pretix/base/services/placeholders.py:714 pretix/control/views/event.py:943 +#: pretix/base/services/placeholders.py:714 pretix/control/views/event.py:944 msgid "John Doe" msgstr "" @@ -7542,9 +7627,9 @@ msgstr "" msgid "Event begin date" msgstr "" -#: pretix/base/pdf.py:264 pretix/base/pdf.py:290 pretix/base/pdf.py:406 -#: pretix/base/pdf.py:430 pretix/base/pdf.py:454 pretix/base/pdf.py:478 -#: pretix/base/pdf.py:541 pretix/base/pdf.py:546 +#: pretix/base/pdf.py:264 pretix/base/pdf.py:290 pretix/base/pdf.py:411 +#: pretix/base/pdf.py:435 pretix/base/pdf.py:459 pretix/base/pdf.py:483 +#: pretix/base/pdf.py:546 pretix/base/pdf.py:551 msgid "2017-05-31" msgstr "" @@ -7561,8 +7646,8 @@ msgid "Event begin weekday" msgstr "" #: pretix/base/pdf.py:277 pretix/base/pdf.py:306 -#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1399 -#: pretix/control/forms/filter.py:1577 +#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1405 +#: pretix/control/forms/filter.py:1583 msgid "Friday" msgstr "" @@ -7586,8 +7671,8 @@ msgstr "" msgid "Event admission date and time" msgstr "" -#: pretix/base/pdf.py:311 pretix/base/pdf.py:414 pretix/base/pdf.py:438 -#: pretix/base/pdf.py:462 pretix/base/pdf.py:486 pretix/base/pdf.py:535 +#: pretix/base/pdf.py:311 pretix/base/pdf.py:419 pretix/base/pdf.py:443 +#: pretix/base/pdf.py:467 pretix/base/pdf.py:491 pretix/base/pdf.py:540 msgid "2017-05-31 19:00" msgstr "" @@ -7595,8 +7680,8 @@ msgstr "" msgid "Event admission time" msgstr "" -#: pretix/base/pdf.py:319 pretix/base/pdf.py:422 pretix/base/pdf.py:446 -#: pretix/base/pdf.py:470 pretix/base/pdf.py:494 +#: pretix/base/pdf.py:319 pretix/base/pdf.py:427 pretix/base/pdf.py:451 +#: pretix/base/pdf.py:475 pretix/base/pdf.py:499 msgid "19:00" msgstr "" @@ -7604,7 +7689,7 @@ msgstr "" msgid "Event location" msgstr "" -#: pretix/base/pdf.py:327 pretix/base/settings.py:1335 +#: pretix/base/pdf.py:327 pretix/base/settings.py:1348 msgid "Random City" msgstr "" @@ -7633,168 +7718,176 @@ msgid "Atlantis" msgstr "" #: pretix/base/pdf.py:376 +msgid "Invoice custom recipient field" +msgstr "" + +#: pretix/base/pdf.py:377 +msgid "Custom recipient field" +msgstr "" + +#: pretix/base/pdf.py:381 msgid "List of Add-Ons" msgstr "" -#: pretix/base/pdf.py:377 pretix/base/pdf.py:384 +#: pretix/base/pdf.py:382 pretix/base/pdf.py:389 msgid "" "Add-on 1\n" "2x Add-on 2" msgstr "" -#: pretix/base/pdf.py:383 +#: pretix/base/pdf.py:388 msgid "List of Checked-In Add-Ons" msgstr "" -#: pretix/base/pdf.py:390 pretix/control/forms/filter.py:1664 -#: pretix/control/forms/filter.py:1666 +#: pretix/base/pdf.py:395 pretix/control/forms/filter.py:1670 +#: pretix/control/forms/filter.py:1672 #: pretix/control/templates/pretixcontrol/organizers/index.html:42 msgid "Organizer name" msgstr "" -#: pretix/base/pdf.py:391 +#: pretix/base/pdf.py:396 msgid "Event organizer company" msgstr "" -#: pretix/base/pdf.py:395 +#: pretix/base/pdf.py:400 msgid "Organizer info text" msgstr "" -#: pretix/base/pdf.py:396 +#: pretix/base/pdf.py:401 msgid "Event organizer info text" msgstr "" -#: pretix/base/pdf.py:400 pretix/base/pdf.py:401 +#: pretix/base/pdf.py:405 pretix/base/pdf.py:406 msgid "Event info text" msgstr "" -#: pretix/base/pdf.py:405 +#: pretix/base/pdf.py:410 msgid "Printing date" msgstr "" -#: pretix/base/pdf.py:413 +#: pretix/base/pdf.py:418 msgid "Printing date and time" msgstr "" -#: pretix/base/pdf.py:421 +#: pretix/base/pdf.py:426 msgid "Printing time" msgstr "" -#: pretix/base/pdf.py:429 pretix/control/forms/item.py:796 +#: pretix/base/pdf.py:434 pretix/control/forms/item.py:796 msgid "Purchase date" msgstr "" -#: pretix/base/pdf.py:437 +#: pretix/base/pdf.py:442 msgid "Purchase date and time" msgstr "" -#: pretix/base/pdf.py:445 +#: pretix/base/pdf.py:450 msgid "Purchase time" msgstr "" -#: pretix/base/pdf.py:453 +#: pretix/base/pdf.py:458 msgid "Validity start date" msgstr "" -#: pretix/base/pdf.py:461 +#: pretix/base/pdf.py:466 msgid "Validity start date and time" msgstr "" -#: pretix/base/pdf.py:469 +#: pretix/base/pdf.py:474 msgid "Validity start time" msgstr "" -#: pretix/base/pdf.py:477 +#: pretix/base/pdf.py:482 msgid "Validity end date" msgstr "" -#: pretix/base/pdf.py:485 +#: pretix/base/pdf.py:490 msgid "Validity end date and time" msgstr "" -#: pretix/base/pdf.py:493 +#: pretix/base/pdf.py:498 msgid "Validity end time" msgstr "" -#: pretix/base/pdf.py:501 pretix/control/forms/item.py:1386 +#: pretix/base/pdf.py:506 pretix/control/forms/item.py:1386 msgid "Program times" msgstr "" -#: pretix/base/pdf.py:503 +#: pretix/base/pdf.py:508 msgid "" "2017-05-31 10:00 – 12:00, Room 1\n" "2017-05-31 14:00 – 16:00, Room 2\n" "2017-05-31 14:00 – 2017-06-01 14:00, Building A" msgstr "" -#: pretix/base/pdf.py:507 +#: pretix/base/pdf.py:512 msgid "Reusable Medium ID" msgstr "" -#: pretix/base/pdf.py:512 +#: pretix/base/pdf.py:517 msgid "Seat: Full name" msgstr "" -#: pretix/base/pdf.py:513 +#: pretix/base/pdf.py:518 msgid "Ground floor, Row 3, Seat 4" msgstr "" -#: pretix/base/pdf.py:515 pretix/base/pdf.py:521 +#: pretix/base/pdf.py:520 pretix/base/pdf.py:526 #: pretix/control/forms/orders.py:348 msgid "General admission" msgstr "" -#: pretix/base/pdf.py:518 +#: pretix/base/pdf.py:523 msgid "Seat: zone" msgstr "" -#: pretix/base/pdf.py:519 +#: pretix/base/pdf.py:524 msgid "Ground floor" msgstr "" -#: pretix/base/pdf.py:524 +#: pretix/base/pdf.py:529 msgid "Seat: row" msgstr "" -#: pretix/base/pdf.py:529 +#: pretix/base/pdf.py:534 msgid "Seat: seat number" msgstr "" -#: pretix/base/pdf.py:534 +#: pretix/base/pdf.py:539 msgid "Date and time of first scan" msgstr "" -#: pretix/base/pdf.py:540 +#: pretix/base/pdf.py:545 msgid "Gift card: Issuance date" msgstr "" -#: pretix/base/pdf.py:545 +#: pretix/base/pdf.py:550 msgid "Gift card: Expiration date" msgstr "" -#: pretix/base/pdf.py:586 pretix/base/pdf.py:624 pretix/base/pdf.py:630 +#: pretix/base/pdf.py:591 pretix/base/pdf.py:629 pretix/base/pdf.py:635 #: pretix/plugins/badges/exporters.py:512 #: pretix/plugins/ticketoutputpdf/exporters.py:102 #, python-brace-format msgid "Question: {question}" msgstr "" -#: pretix/base/pdf.py:625 pretix/base/pdf.py:631 +#: pretix/base/pdf.py:630 pretix/base/pdf.py:636 #, python-brace-format msgid "" msgstr "" -#: pretix/base/pdf.py:672 +#: pretix/base/pdf.py:677 msgid "Attendee name for salutation" msgstr "" -#: pretix/base/pdf.py:673 pretix/base/pdf.py:696 +#: pretix/base/pdf.py:678 pretix/base/pdf.py:701 #: pretix/base/services/placeholders.py:732 -#: pretix/control/forms/organizer.py:799 +#: pretix/control/forms/organizer.py:809 msgid "Mr Doe" msgstr "" -#: pretix/base/pdf.py:679 pretix/base/pdf.py:686 +#: pretix/base/pdf.py:684 pretix/base/pdf.py:691 #: pretix/plugins/badges/exporters.py:509 #: pretix/plugins/checkinlists/exporters.py:126 #: pretix/plugins/checkinlists/exporters.py:498 @@ -7803,16 +7896,16 @@ msgstr "" msgid "Attendee name: {part}" msgstr "" -#: pretix/base/pdf.py:695 +#: pretix/base/pdf.py:700 msgid "Invoice address name for salutation" msgstr "" -#: pretix/base/pdf.py:702 +#: pretix/base/pdf.py:707 #, python-brace-format msgid "Invoice address name: {part}" msgstr "" -#: pretix/base/pdf.py:1345 +#: pretix/base/pdf.py:1350 #, python-brace-format msgid "Your layout file is not a valid layout. Error message: {}" msgstr "" @@ -8172,7 +8265,7 @@ msgstr[1] "" #: pretix/base/services/cart.py:152 pretix/base/services/orders.py:164 #: pretix/presale/templates/pretixpresale/event/index.html:170 -#: pretix/presale/views/waiting.py:150 pretix/presale/views/widget.py:843 +#: pretix/presale/views/waiting.py:150 pretix/presale/views/widget.py:846 msgid "The booking period for this event has not yet started." msgstr "" @@ -8448,33 +8541,33 @@ msgstr "" msgid "week day" msgstr "" -#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1395 -#: pretix/control/forms/filter.py:1573 +#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1401 +#: pretix/control/forms/filter.py:1579 msgid "Monday" msgstr "" -#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1396 -#: pretix/control/forms/filter.py:1574 +#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1402 +#: pretix/control/forms/filter.py:1580 msgid "Tuesday" msgstr "" -#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1397 -#: pretix/control/forms/filter.py:1575 +#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1403 +#: pretix/control/forms/filter.py:1581 msgid "Wednesday" msgstr "" -#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1398 -#: pretix/control/forms/filter.py:1576 +#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1404 +#: pretix/control/forms/filter.py:1582 msgid "Thursday" msgstr "" -#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1400 -#: pretix/control/forms/filter.py:1578 +#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1406 +#: pretix/control/forms/filter.py:1584 msgid "Saturday" msgstr "" -#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1401 -#: pretix/control/forms/filter.py:1579 +#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1407 +#: pretix/control/forms/filter.py:1585 msgid "Sunday" msgstr "" @@ -8498,54 +8591,64 @@ msgstr "" msgid "{variable} is {value}" msgstr "" -#: pretix/base/services/checkin.py:972 +#: pretix/base/services/checkin.py:982 msgid "This order position has been canceled." msgstr "" -#: pretix/base/services/checkin.py:981 +#: pretix/base/services/checkin.py:991 msgid "This ticket has been blocked." msgstr "" -#: pretix/base/services/checkin.py:990 +#: pretix/base/services/checkin.py:1000 msgid "This order is not yet approved." msgstr "" -#: pretix/base/services/checkin.py:999 pretix/base/services/checkin.py:1003 +#: pretix/base/services/checkin.py:1009 pretix/base/services/checkin.py:1013 #, python-brace-format msgid "This ticket is only valid after {datetime}." msgstr "" -#: pretix/base/services/checkin.py:1013 pretix/base/services/checkin.py:1017 +#: pretix/base/services/checkin.py:1023 pretix/base/services/checkin.py:1027 #, python-brace-format msgid "This ticket was only valid before {datetime}." msgstr "" -#: pretix/base/services/checkin.py:1048 +#: pretix/base/services/checkin.py:1058 msgid "This order position has an invalid product for this check-in list." msgstr "" -#: pretix/base/services/checkin.py:1057 +#: pretix/base/services/checkin.py:1067 msgid "This order position has an invalid date for this check-in list." msgstr "" -#: pretix/base/services/checkin.py:1068 +#: pretix/base/services/checkin.py:1078 msgid "This order is not marked as paid." msgstr "" -#: pretix/base/services/checkin.py:1080 +#: pretix/base/services/checkin.py:1090 msgid "Evaluation of custom rules has failed." msgstr "" -#: pretix/base/services/checkin.py:1090 +#: pretix/base/services/checkin.py:1100 #, python-brace-format msgid "Entry not permitted: {explanation}." msgstr "" -#: pretix/base/services/checkin.py:1099 +#: pretix/base/services/checkin.py:1109 msgid "You need to answer questions to complete this check-in." msgstr "" -#: pretix/base/services/checkin.py:1152 +#: pretix/base/services/checkin.py:1121 +msgid "Ticket needs to be exchanged to a suitable medium." +msgstr "" + +#: pretix/base/services/checkin.py:1128 +msgid "" +"This ticket has already been exchanged for a reusable medium that now needs " +"to be used instead." +msgstr "" + +#: pretix/base/services/checkin.py:1180 msgid "This ticket has already been redeemed." msgstr "" @@ -8684,6 +8787,48 @@ msgstr "" msgid "You are receiving this email because you placed an order for {event}." msgstr "" +#: pretix/base/services/media.py:93 pretix/base/services/media.py:95 +msgid "Invalid medium type." +msgstr "" + +#: pretix/base/services/media.py:100 pretix/base/services/media.py:102 +msgid "Medium type is not enabled for organizer." +msgstr "" + +#: pretix/base/services/media.py:107 pretix/base/services/media.py:109 +msgid "Incorrect medium type for product." +msgstr "" + +#: pretix/base/services/media.py:114 pretix/base/services/media.py:116 +msgid "Ticket is already exchanged for reusable medium." +msgstr "" + +#: pretix/base/services/media.py:133 pretix/base/services/media.py:135 +msgid "Reusable medium not found." +msgstr "" + +#: pretix/base/services/media.py:140 pretix/base/services/media.py:142 +#: pretix/base/services/media.py:168 pretix/base/services/media.py:170 +msgid "Reusable medium is inactive or expired." +msgstr "" + +#: pretix/base/services/media.py:155 pretix/base/services/media.py:162 +#: pretix/base/services/media.py:176 +msgid "Reusable medium not found and could not be created." +msgstr "" + +#: pretix/base/services/media.py:183 +msgid "Reusable medium already exists." +msgstr "" + +#: pretix/base/services/media.py:189 +msgid "Reusable medium could not be created." +msgstr "" + +#: pretix/base/services/media.py:195 pretix/base/services/media.py:197 +msgid "Product does not support medium exchange." +msgstr "" + #: pretix/base/services/memberships.py:108 #, python-brace-format msgid "" @@ -9261,60 +9406,71 @@ msgid "" msgstr "" #: pretix/base/settings.py:214 -msgid "Activate re-usable media" +msgid "Activate reusable media" msgstr "" #: pretix/base/settings.py:215 msgid "" -"The re-usable media feature allows you to connect tickets and gift cards " -"with physical media such as wristbands or chip cards that may be re-used for " +"The reusable media feature allows you to connect tickets and gift cards with " +"physical media such as wristbands or chip cards that may be reused for " "different tickets or gift cards later." msgstr "" -#: pretix/base/settings.py:241 +#: pretix/base/settings.py:226 +msgid "Enforce the usage of issued reusable media for check-in" +msgstr "" + +#: pretix/base/settings.py:227 +msgid "" +"If enabled, a ticket barcode will not be accepted anymore, if a reusable " +"medium has been created and linked to a ticket. Keeping this option turned " +"off will treat the reusable medium and ticket as equals." +msgstr "" + +#: pretix/base/settings.py:254 msgid "Length of barcodes" msgstr "" -#: pretix/base/settings.py:270 +#: pretix/base/settings.py:283 msgid "" "Automatically create a new gift card if a previously unknown chip is seen" msgstr "" -#: pretix/base/settings.py:283 pretix/base/settings.py:314 +#: pretix/base/settings.py:296 pretix/base/settings.py:327 msgid "Gift card currency" msgstr "" -#: pretix/base/settings.py:301 +#: pretix/base/settings.py:314 msgid "Automatically create a new gift card if a new chip is encoded" msgstr "" -#: pretix/base/settings.py:323 +#: pretix/base/settings.py:336 msgid "Use UID protection feature of NFC chip" msgstr "" -#: pretix/base/settings.py:339 +#: pretix/base/settings.py:352 msgid "Maximum number of items per order" msgstr "" -#: pretix/base/settings.py:340 +#: pretix/base/settings.py:353 msgid "Add-on products will not be counted." msgstr "" -#: pretix/base/settings.py:350 +#: pretix/base/settings.py:363 msgid "Show net prices instead of gross prices in the product list" msgstr "" -#: pretix/base/settings.py:351 +#: pretix/base/settings.py:364 msgid "" "Independent of your choice, the cart will show gross prices as this is the " "price that needs to be paid." msgstr "" -#: pretix/base/settings.py:362 +#: pretix/base/settings.py:375 msgid "Hide prices on attendee ticket page" msgstr "" -#: pretix/base/settings.py:363 +#: pretix/base/settings.py:376 msgid "" "If a person buys multiple tickets and you send emails to all of the " "attendees, with this option the ticket price will not be shown on the ticket " @@ -9322,27 +9478,27 @@ msgid "" "price." msgstr "" -#: pretix/base/settings.py:381 +#: pretix/base/settings.py:394 msgid "Ask for attendee names" msgstr "" -#: pretix/base/settings.py:382 +#: pretix/base/settings.py:395 msgid "Ask for a name for all personalized tickets." msgstr "" -#: pretix/base/settings.py:391 +#: pretix/base/settings.py:404 msgid "Require attendee names" msgstr "" -#: pretix/base/settings.py:392 +#: pretix/base/settings.py:405 msgid "Require customers to fill in the names of all attendees." msgstr "" -#: pretix/base/settings.py:402 +#: pretix/base/settings.py:415 msgid "Ask for email addresses per ticket" msgstr "" -#: pretix/base/settings.py:403 +#: pretix/base/settings.py:416 msgid "" "Normally, pretix asks for one email address per order and the order " "confirmation will be sent only to that email address. If you enable this " @@ -9354,136 +9510,136 @@ msgid "" "enable this in the email settings." msgstr "" -#: pretix/base/settings.py:417 +#: pretix/base/settings.py:430 msgid "Require email addresses per ticket" msgstr "" -#: pretix/base/settings.py:418 +#: pretix/base/settings.py:431 msgid "" "Require customers to fill in individual email addresses for all personalized " "tickets. See the above option for more details. One email address for the " "order confirmation will always be required regardless of this setting." msgstr "" -#: pretix/base/settings.py:430 +#: pretix/base/settings.py:443 msgid "Ask for company per ticket" msgstr "" -#: pretix/base/settings.py:439 +#: pretix/base/settings.py:452 msgid "Require company per ticket" msgstr "" -#: pretix/base/settings.py:449 +#: pretix/base/settings.py:462 msgid "Ask for postal addresses per ticket" msgstr "" -#: pretix/base/settings.py:458 +#: pretix/base/settings.py:471 msgid "Require postal addresses per ticket" msgstr "" -#: pretix/base/settings.py:468 +#: pretix/base/settings.py:481 msgid "Ask for the order email address twice" msgstr "" -#: pretix/base/settings.py:469 +#: pretix/base/settings.py:482 msgid "" "Require customers to fill in the primary email address twice to avoid errors." msgstr "" -#: pretix/base/settings.py:478 +#: pretix/base/settings.py:491 msgid "Ask for a phone number per order" msgstr "" -#: pretix/base/settings.py:487 +#: pretix/base/settings.py:500 msgid "Require a phone number per order" msgstr "" -#: pretix/base/settings.py:498 +#: pretix/base/settings.py:511 msgid "Rounding of taxes" msgstr "" -#: pretix/base/settings.py:502 +#: pretix/base/settings.py:515 msgid "" "Note that if you transfer your sales data from pretix to an external system " "for tax reporting, you need to make sure to account for possible rounding " "differences if your external system rounds differently than pretix." msgstr "" -#: pretix/base/settings.py:518 +#: pretix/base/settings.py:531 msgid "Ask for invoice address" msgstr "" -#: pretix/base/settings.py:528 +#: pretix/base/settings.py:541 msgid "Do not ask for invoice address if an order is free" msgstr "" -#: pretix/base/settings.py:538 +#: pretix/base/settings.py:551 msgid "Require customer name" msgstr "" -#: pretix/base/settings.py:548 +#: pretix/base/settings.py:561 msgid "Show attendee names on invoices" msgstr "" -#: pretix/base/settings.py:558 +#: pretix/base/settings.py:571 msgid "Show event location on invoices" msgstr "" -#: pretix/base/settings.py:559 +#: pretix/base/settings.py:572 msgid "" "The event location will be shown below the list of products if it is the " "same for all lines. It will be shown on every line if there are different " "locations." msgstr "" -#: pretix/base/settings.py:570 +#: pretix/base/settings.py:583 msgid "Show exchange rates" msgstr "" -#: pretix/base/settings.py:573 pretix/base/settings.py:582 +#: pretix/base/settings.py:586 pretix/base/settings.py:595 #: pretix/control/forms/item.py:684 msgid "Never" msgstr "" -#: pretix/base/settings.py:574 pretix/base/settings.py:583 +#: pretix/base/settings.py:587 pretix/base/settings.py:596 msgid "" "Based on European Central Bank daily rates, whenever the invoice recipient " "is in an EU country that uses a different currency." msgstr "" -#: pretix/base/settings.py:576 pretix/base/settings.py:585 +#: pretix/base/settings.py:589 pretix/base/settings.py:598 msgid "" "Based on Czech National Bank daily rates, whenever the invoice amount is not " "in CZK." msgstr "" -#: pretix/base/settings.py:577 pretix/base/settings.py:586 +#: pretix/base/settings.py:590 pretix/base/settings.py:599 msgid "" "Based on National Bank of Poland daily rates, whenever the invoice amount is " "not in PLN." msgstr "" -#: pretix/base/settings.py:597 +#: pretix/base/settings.py:610 msgid "Require invoice address" msgstr "" -#: pretix/base/settings.py:608 +#: pretix/base/settings.py:621 msgid "Require a business address" msgstr "" -#: pretix/base/settings.py:609 +#: pretix/base/settings.py:622 msgid "This will require users to enter a company name." msgstr "" -#: pretix/base/settings.py:620 +#: pretix/base/settings.py:633 msgid "Ask for beneficiary" msgstr "" -#: pretix/base/settings.py:631 +#: pretix/base/settings.py:644 msgid "Custom recipient field label" msgstr "" -#: pretix/base/settings.py:633 +#: pretix/base/settings.py:646 msgid "" "If you want to add a custom text field, e.g. for a country-specific " "registration number, to your invoice address form, please fill in the label " @@ -9492,100 +9648,100 @@ msgid "" "on the invoice below the headline. The field will not be required." msgstr "" -#: pretix/base/settings.py:647 +#: pretix/base/settings.py:660 msgid "Custom recipient field help text" msgstr "" -#: pretix/base/settings.py:649 +#: pretix/base/settings.py:662 msgid "" "If you use the custom recipient field, you can specify a help text which " "will be displayed underneath the field. It will not be displayed on the " "invoice." msgstr "" -#: pretix/base/settings.py:660 +#: pretix/base/settings.py:673 msgid "Ask for VAT ID" msgstr "" -#: pretix/base/settings.py:662 +#: pretix/base/settings.py:675 #, python-brace-format msgid "" "Only works if an invoice address is asked for. VAT ID is only requested from " "business customers in the following countries: {countries}." msgstr "" -#: pretix/base/settings.py:682 +#: pretix/base/settings.py:695 msgid "Require VAT ID in" msgstr "" -#: pretix/base/settings.py:688 +#: pretix/base/settings.py:701 msgid "" "VAT ID is optional by default, because not all businesses are assigned a VAT " "ID in all countries. VAT ID will be required for all business addresses in " "the selected countries." msgstr "" -#: pretix/base/settings.py:704 +#: pretix/base/settings.py:717 msgid "Invoice address explanation" msgstr "" -#: pretix/base/settings.py:707 +#: pretix/base/settings.py:720 msgid "This text will be shown above the invoice address form during checkout." msgstr "" -#: pretix/base/settings.py:717 +#: pretix/base/settings.py:730 msgid "Show paid amount on partially paid invoices" msgstr "" -#: pretix/base/settings.py:718 +#: pretix/base/settings.py:731 msgid "" "If an invoice has already been paid partially, this option will add the paid " "and pending amount to the invoice." msgstr "" -#: pretix/base/settings.py:729 +#: pretix/base/settings.py:742 msgid "Show free products on invoices" msgstr "" -#: pretix/base/settings.py:730 +#: pretix/base/settings.py:743 msgid "" "Note that invoices will never be generated for orders that contain only free " "products." msgstr "" -#: pretix/base/settings.py:741 +#: pretix/base/settings.py:754 msgid "Show expiration date of order" msgstr "" -#: pretix/base/settings.py:742 +#: pretix/base/settings.py:755 msgid "" "The expiration date will not be shown if the invoice is generated after the " "order is paid." msgstr "" -#: pretix/base/settings.py:753 +#: pretix/base/settings.py:766 msgid "Minimum length of invoice number after prefix" msgstr "" -#: pretix/base/settings.py:754 +#: pretix/base/settings.py:767 msgid "" "The part of your invoice number after your prefix will be filled up with " "leading zeros up to this length, e.g. INV-001 or INV-00001." msgstr "" -#: pretix/base/settings.py:767 +#: pretix/base/settings.py:780 msgid "Generate invoices with consecutive numbers" msgstr "" -#: pretix/base/settings.py:768 +#: pretix/base/settings.py:781 msgid "If deactivated, the order code will be used in the invoice number." msgstr "" -#: pretix/base/settings.py:778 +#: pretix/base/settings.py:791 msgid "Invoice number prefix" msgstr "" -#: pretix/base/settings.py:779 +#: pretix/base/settings.py:792 msgid "" "This will be prepended to invoice numbers. If you leave this field empty, " "your event slug will be used followed by a dash. Attention: If multiple " @@ -9596,97 +9752,97 @@ msgid "" "invoice, or %m and %d for the day of month." msgstr "" -#: pretix/base/settings.py:791 pretix/base/settings.py:815 +#: pretix/base/settings.py:804 pretix/base/settings.py:828 #, python-brace-format msgid "Please only use the characters {allowed} in this field." msgstr "" -#: pretix/base/settings.py:806 +#: pretix/base/settings.py:819 msgid "Invoice number prefix for cancellations" msgstr "" -#: pretix/base/settings.py:807 +#: pretix/base/settings.py:820 msgid "" "This will be prepended to invoice numbers of cancellations. If you leave " "this field empty, the same numbering scheme will be used that you configured " "for regular invoices." msgstr "" -#: pretix/base/settings.py:830 +#: pretix/base/settings.py:843 msgid "Highlight order code to make it stand out visibly" msgstr "" -#: pretix/base/settings.py:831 pretix/base/settings.py:843 +#: pretix/base/settings.py:844 pretix/base/settings.py:856 msgid "Only respected by some invoice renderers." msgstr "" -#: pretix/base/settings.py:842 pretix/base/settings.py:3176 -#: pretix/control/templates/pretixcontrol/pdf/index.html:441 +#: pretix/base/settings.py:855 pretix/base/settings.py:3189 +#: pretix/control/templates/pretixcontrol/pdf/index.html:439 msgid "Font" msgstr "" -#: pretix/base/settings.py:869 +#: pretix/base/settings.py:882 msgid "Length of ticket codes" msgstr "" -#: pretix/base/settings.py:896 +#: pretix/base/settings.py:909 msgid "Reservation period" msgstr "" -#: pretix/base/settings.py:898 +#: pretix/base/settings.py:911 msgid "" "The number of minutes the items in a user's cart are reserved for this user." msgstr "" -#: pretix/base/settings.py:907 +#: pretix/base/settings.py:920 msgid "" "Directly redirect to check-out after a product has been added to the cart." msgstr "" -#: pretix/base/settings.py:916 +#: pretix/base/settings.py:929 msgid "End of presale text" msgstr "" -#: pretix/base/settings.py:919 +#: pretix/base/settings.py:932 msgid "" "This text will be shown above the ticket shop once the designated sales " "timeframe for this event is over. You can use it to describe other options " "to get a ticket, such as a box office." msgstr "" -#: pretix/base/settings.py:934 +#: pretix/base/settings.py:947 msgid "Guidance text" msgstr "" -#: pretix/base/settings.py:935 +#: pretix/base/settings.py:948 msgid "" "This text will be shown above the payment options. You can explain the " "choices to the user here, if you want." msgstr "" -#: pretix/base/settings.py:946 pretix/base/settings.py:956 +#: pretix/base/settings.py:959 pretix/base/settings.py:969 msgid "in days" msgstr "" -#: pretix/base/settings.py:947 pretix/base/settings.py:957 +#: pretix/base/settings.py:960 pretix/base/settings.py:970 msgid "in minutes" msgstr "" -#: pretix/base/settings.py:952 +#: pretix/base/settings.py:965 msgid "Set payment term" msgstr "" -#: pretix/base/settings.py:959 +#: pretix/base/settings.py:972 msgid "" "If using days, the order will expire at the end of the last day. Using " "minutes is more exact, but should only be used for real-time payment methods." msgstr "" -#: pretix/base/settings.py:970 +#: pretix/base/settings.py:983 msgid "Payment term in days" msgstr "" -#: pretix/base/settings.py:977 +#: pretix/base/settings.py:990 msgid "" "The number of days after placing an order the user has to pay to preserve " "their reservation. If you use slow payment methods like bank transfer, we " @@ -9694,11 +9850,11 @@ msgid "" "still setting two or three days to allow people to retry failed payments." msgstr "" -#: pretix/base/settings.py:996 +#: pretix/base/settings.py:1009 msgid "Only end payment terms on weekdays" msgstr "" -#: pretix/base/settings.py:997 +#: pretix/base/settings.py:1010 msgid "" "If this is activated and the payment term of any order ends on a Saturday or " "Sunday, it will be moved to the next Monday instead. This is required in " @@ -9706,11 +9862,11 @@ msgid "" "configured below." msgstr "" -#: pretix/base/settings.py:1014 +#: pretix/base/settings.py:1027 msgid "Payment term in minutes" msgstr "" -#: pretix/base/settings.py:1015 +#: pretix/base/settings.py:1028 msgid "" "The number of minutes after placing an order the user has to pay to preserve " "their reservation. Only use this if you exclusively offer real-time payment " @@ -9718,33 +9874,33 @@ msgid "" "be a few minutes longer before the order is marked as expired." msgstr "" -#: pretix/base/settings.py:1039 +#: pretix/base/settings.py:1052 msgid "Last date of payments" msgstr "" -#: pretix/base/settings.py:1040 +#: pretix/base/settings.py:1053 msgid "" "The last date any payments are accepted. This has precedence over the terms " "configured above. If you use the event series feature and an order contains " "tickets for multiple dates, the earliest date will be used." msgstr "" -#: pretix/base/settings.py:1052 +#: pretix/base/settings.py:1065 msgid "Automatically expire unpaid orders" msgstr "" -#: pretix/base/settings.py:1053 +#: pretix/base/settings.py:1066 msgid "" "If checked, all unpaid orders will automatically go from 'pending' to " "'expired' after the end of their payment deadline. This means that those " "tickets go back to the pool and can be ordered by other people." msgstr "" -#: pretix/base/settings.py:1065 +#: pretix/base/settings.py:1078 msgid "Expiration delay" msgstr "" -#: pretix/base/settings.py:1066 +#: pretix/base/settings.py:1079 msgid "" "The order will only actually expire this many days after the expiration date " "communicated to the customer. If you select \"Only end payment terms on " @@ -9753,18 +9909,18 @@ msgid "" "enforced." msgstr "" -#: pretix/base/settings.py:1088 +#: pretix/base/settings.py:1101 msgid "Hide \"payment pending\" state on customer-facing pages" msgstr "" -#: pretix/base/settings.py:1089 +#: pretix/base/settings.py:1102 msgid "" "The payment instructions panel will still be shown to the primary customer, " "but no indication of missing payment will be visible on the ticket pages of " "attendees who did not buy the ticket themselves." msgstr "" -#: pretix/base/settings.py:1107 +#: pretix/base/settings.py:1120 msgid "" "If you have a gift card, please enter the gift card code here. If the gift " "card does not have enough credit to pay for the full order, you will be " @@ -9772,204 +9928,204 @@ msgid "" "a different payment method for the difference." msgstr "" -#: pretix/base/settings.py:1126 +#: pretix/base/settings.py:1139 msgid "Accept late payments" msgstr "" -#: pretix/base/settings.py:1127 +#: pretix/base/settings.py:1140 msgid "" "Accept payments for orders even when they are in 'expired' state as long as " "enough capacity is available. No payments will ever be accepted after the " "'Last date of payments' configured above." msgstr "" -#: pretix/base/settings.py:1138 +#: pretix/base/settings.py:1151 msgid "Show start date" msgstr "" -#: pretix/base/settings.py:1139 +#: pretix/base/settings.py:1152 msgid "Show the presale start date before presale has started." msgstr "" -#: pretix/base/settings.py:1150 pretix/base/settings.py:1159 -#: pretix/base/settings.py:1173 pretix/base/settings.py:1182 +#: pretix/base/settings.py:1163 pretix/base/settings.py:1172 +#: pretix/base/settings.py:1186 pretix/base/settings.py:1195 msgid "Use default tax rate" msgstr "" -#: pretix/base/settings.py:1151 pretix/base/settings.py:1160 -#: pretix/base/settings.py:1171 pretix/base/settings.py:1180 +#: pretix/base/settings.py:1164 pretix/base/settings.py:1173 +#: pretix/base/settings.py:1184 pretix/base/settings.py:1193 msgid "Charge no taxes" msgstr "" -#: pretix/base/settings.py:1156 +#: pretix/base/settings.py:1169 msgid "Tax handling on payment fees" msgstr "" -#: pretix/base/settings.py:1172 pretix/base/settings.py:1181 +#: pretix/base/settings.py:1185 pretix/base/settings.py:1194 msgid "Use same taxes as order positions (split according to net prices)" msgstr "" -#: pretix/base/settings.py:1177 +#: pretix/base/settings.py:1190 msgid "Tax handling on cancellation fees" msgstr "" -#: pretix/base/settings.py:1193 pretix/base/settings.py:1206 +#: pretix/base/settings.py:1206 pretix/base/settings.py:1219 msgid "Do not generate invoices" msgstr "" -#: pretix/base/settings.py:1194 pretix/base/settings.py:1211 +#: pretix/base/settings.py:1207 pretix/base/settings.py:1224 msgid "Only manually in admin panel" msgstr "" -#: pretix/base/settings.py:1195 pretix/base/settings.py:1209 +#: pretix/base/settings.py:1208 pretix/base/settings.py:1222 msgid "Automatically on user request" msgstr "" -#: pretix/base/settings.py:1196 pretix/base/settings.py:1210 +#: pretix/base/settings.py:1209 pretix/base/settings.py:1223 msgid "Automatically on user request for paid orders" msgstr "" -#: pretix/base/settings.py:1197 +#: pretix/base/settings.py:1210 msgid "Automatically for all created orders" msgstr "" -#: pretix/base/settings.py:1198 +#: pretix/base/settings.py:1211 msgid "Automatically on payment or when required by payment method" msgstr "" -#: pretix/base/settings.py:1203 +#: pretix/base/settings.py:1216 msgid "Generate invoices" msgstr "" -#: pretix/base/settings.py:1207 +#: pretix/base/settings.py:1220 msgid "Automatically after payment or when required by payment method" msgstr "" -#: pretix/base/settings.py:1208 +#: pretix/base/settings.py:1221 msgid "Automatically before payment for all created orders" msgstr "" -#: pretix/base/settings.py:1213 +#: pretix/base/settings.py:1226 msgid "Invoices will never be automatically generated for free orders." msgstr "" -#: pretix/base/settings.py:1223 pretix/base/settings.py:1235 +#: pretix/base/settings.py:1236 pretix/base/settings.py:1248 msgid "" "Automatic based on ticket-specific validity, membership validity, event " "series date, or event date" msgstr "" -#: pretix/base/settings.py:1224 pretix/base/settings.py:1236 +#: pretix/base/settings.py:1237 pretix/base/settings.py:1249 msgid "Automatic, but prefer invoice date over event date" msgstr "" -#: pretix/base/settings.py:1227 pretix/base/settings.py:1239 +#: pretix/base/settings.py:1240 pretix/base/settings.py:1252 msgid "Invoice date" msgstr "" -#: pretix/base/settings.py:1232 +#: pretix/base/settings.py:1245 msgid "Date of service" msgstr "" -#: pretix/base/settings.py:1241 +#: pretix/base/settings.py:1254 msgid "" "This controls what dates are shown on the invoice, but is especially " "important for electronic invoicing." msgstr "" -#: pretix/base/settings.py:1253 +#: pretix/base/settings.py:1266 msgid "Automatically cancel and reissue invoice on address changes" msgstr "" -#: pretix/base/settings.py:1254 +#: pretix/base/settings.py:1267 msgid "" "If customers change their invoice address on an existing order, the invoice " "will automatically be canceled and a new invoice will be issued. This " "setting does not affect changes made through the backend." msgstr "" -#: pretix/base/settings.py:1266 +#: pretix/base/settings.py:1279 msgid "Allow to update existing invoices" msgstr "" -#: pretix/base/settings.py:1267 +#: pretix/base/settings.py:1280 msgid "" "By default, invoices can never again be changed once they are issued. In " "most countries, we recommend to leave this option turned off and always " "issue a new invoice if a change needs to be made." msgstr "" -#: pretix/base/settings.py:1283 +#: pretix/base/settings.py:1296 msgid "Only issue invoices to business customers" msgstr "" -#: pretix/base/settings.py:1293 +#: pretix/base/settings.py:1306 msgid "Address line" msgstr "" -#: pretix/base/settings.py:1297 +#: pretix/base/settings.py:1310 msgid "Albert Einstein Road 52" msgstr "" -#: pretix/base/settings.py:1377 +#: pretix/base/settings.py:1390 msgid "Domestic tax ID" msgstr "" -#: pretix/base/settings.py:1378 +#: pretix/base/settings.py:1391 msgid "e.g. tax number in Germany, ABN in Australia, …" msgstr "" -#: pretix/base/settings.py:1389 +#: pretix/base/settings.py:1402 msgid "EU VAT ID" msgstr "" -#: pretix/base/settings.py:1404 +#: pretix/base/settings.py:1417 msgid "e.g. With this document, we sent you the invoice for your ticket order." msgstr "" -#: pretix/base/settings.py:1407 +#: pretix/base/settings.py:1420 msgid "Introductory text" msgstr "" -#: pretix/base/settings.py:1408 +#: pretix/base/settings.py:1421 msgid "Will be printed on every invoice above the invoice rows." msgstr "" -#: pretix/base/settings.py:1422 +#: pretix/base/settings.py:1435 msgid "" "e.g. Thank you for your purchase! You can find more information on the event " "at ..." msgstr "" -#: pretix/base/settings.py:1425 +#: pretix/base/settings.py:1438 msgid "Additional text" msgstr "" -#: pretix/base/settings.py:1426 +#: pretix/base/settings.py:1439 msgid "Will be printed on every invoice below the invoice total." msgstr "" -#: pretix/base/settings.py:1440 +#: pretix/base/settings.py:1453 msgid "" "e.g. your bank details, legal details like your VAT ID, registration " "numbers, etc." msgstr "" -#: pretix/base/settings.py:1443 +#: pretix/base/settings.py:1456 msgid "Footer" msgstr "" -#: pretix/base/settings.py:1444 +#: pretix/base/settings.py:1457 msgid "" "Will be printed centered and in a smaller font at the end of every invoice " "page." msgstr "" -#: pretix/base/settings.py:1459 +#: pretix/base/settings.py:1472 msgid "Attach invoices to emails" msgstr "" -#: pretix/base/settings.py:1460 +#: pretix/base/settings.py:1473 msgid "" "If invoices are automatically generated for all orders, they will be " "attached to the order confirmation mail. If they are automatically generated " @@ -9977,39 +10133,39 @@ msgid "" "are not automatically generated, they will not be attached to emails." msgstr "" -#: pretix/base/settings.py:1473 +#: pretix/base/settings.py:1486 msgid "Email address to receive a copy of each invoice" msgstr "" -#: pretix/base/settings.py:1474 +#: pretix/base/settings.py:1487 msgid "" "Each newly created invoice will be sent to this email address shortly after " "creation. You can use this for an automated import of invoices to your " "accounting system. The invoice will be the only attachment of the email." msgstr "" -#: pretix/base/settings.py:1489 +#: pretix/base/settings.py:1502 msgid "Show items outside presale period" msgstr "" -#: pretix/base/settings.py:1490 +#: pretix/base/settings.py:1503 msgid "" "Show item details before presale has started and after presale has ended" msgstr "" -#: pretix/base/settings.py:1510 +#: pretix/base/settings.py:1523 msgid "Available languages" msgstr "" -#: pretix/base/settings.py:1526 pretix/control/forms/event.py:151 +#: pretix/base/settings.py:1539 pretix/control/forms/event.py:151 msgid "Default language" msgstr "" -#: pretix/base/settings.py:1536 +#: pretix/base/settings.py:1549 msgid "Region" msgstr "" -#: pretix/base/settings.py:1537 +#: pretix/base/settings.py:1550 msgid "" "Will be used to determine date and time formatting as well as default " "country for customer addresses and phone numbers. For formatting, this takes " @@ -10017,11 +10173,11 @@ msgid "" "languages used in different regions globally (like English)." msgstr "" -#: pretix/base/settings.py:1549 +#: pretix/base/settings.py:1562 msgid "This shop represents an event" msgstr "" -#: pretix/base/settings.py:1551 +#: pretix/base/settings.py:1564 msgid "" "Uncheck this box if you are only selling something that has no specific " "date, such as gift cards or a ticket that can be used any time. The system " @@ -10030,45 +10186,45 @@ msgid "" "may still show up in other places." msgstr "" -#: pretix/base/settings.py:1564 +#: pretix/base/settings.py:1577 msgid "Show event end date" msgstr "" -#: pretix/base/settings.py:1565 +#: pretix/base/settings.py:1578 msgid "If disabled, only event's start date will be displayed to the public." msgstr "" -#: pretix/base/settings.py:1574 +#: pretix/base/settings.py:1587 msgid "Show dates with time" msgstr "" -#: pretix/base/settings.py:1575 +#: pretix/base/settings.py:1588 msgid "" "If disabled, the event's start and end date will be displayed without the " "time of day." msgstr "" -#: pretix/base/settings.py:1584 +#: pretix/base/settings.py:1597 msgid "Hide all products that are sold out" msgstr "" -#: pretix/base/settings.py:1594 pretix/control/forms/event.py:1870 +#: pretix/base/settings.py:1607 pretix/control/forms/event.py:1870 msgid "Publicly show how many tickets of a certain type are still available." msgstr "" -#: pretix/base/settings.py:1603 +#: pretix/base/settings.py:1616 msgid "Ask search engines not to index the ticket shop" msgstr "" -#: pretix/base/settings.py:1612 +#: pretix/base/settings.py:1625 msgid "Show variations of a product expanded by default" msgstr "" -#: pretix/base/settings.py:1621 +#: pretix/base/settings.py:1634 msgid "Enable waiting list" msgstr "" -#: pretix/base/settings.py:1622 pretix/control/forms/event.py:1875 +#: pretix/base/settings.py:1635 pretix/control/forms/event.py:1875 msgid "" "Once a ticket is sold out, people can add themselves to a waiting list. As " "soon as a ticket becomes available again, it will be reserved for the first " @@ -10076,11 +10232,11 @@ msgid "" "notification with a voucher that can be used to buy a ticket." msgstr "" -#: pretix/base/settings.py:1633 +#: pretix/base/settings.py:1646 msgid "Automatic waiting list assignments" msgstr "" -#: pretix/base/settings.py:1634 +#: pretix/base/settings.py:1647 msgid "" "If ticket capacity becomes free, automatically create a voucher and send it " "to the first person on the waiting list for that product. If this is not " @@ -10089,22 +10245,22 @@ msgid "" "enabled, tickets will still be sent out." msgstr "" -#: pretix/base/settings.py:1650 +#: pretix/base/settings.py:1663 msgid "Waiting list response time" msgstr "" -#: pretix/base/settings.py:1653 +#: pretix/base/settings.py:1666 msgid "" "If a ticket voucher is sent to a person on the waiting list, it has to be " "redeemed within this number of hours until it expires and can be re-assigned " "to the next person on the list." msgstr "" -#: pretix/base/settings.py:1664 +#: pretix/base/settings.py:1677 msgid "Disable waiting list" msgstr "" -#: pretix/base/settings.py:1665 +#: pretix/base/settings.py:1678 msgid "" "The waiting list will be fully disabled after this date. This means that " "nobody can add themselves to the waiting list any more, but also that " @@ -10113,53 +10269,53 @@ msgid "" "remain active." msgstr "" -#: pretix/base/settings.py:1677 +#: pretix/base/settings.py:1690 msgid "Ask for a name" msgstr "" -#: pretix/base/settings.py:1678 +#: pretix/base/settings.py:1691 msgid "Ask for a name when signing up to the waiting list." msgstr "" -#: pretix/base/settings.py:1687 +#: pretix/base/settings.py:1700 msgid "Require name" msgstr "" -#: pretix/base/settings.py:1688 +#: pretix/base/settings.py:1701 msgid "Require a name when signing up to the waiting list.." msgstr "" -#: pretix/base/settings.py:1698 +#: pretix/base/settings.py:1711 msgid "Ask for a phone number" msgstr "" -#: pretix/base/settings.py:1699 +#: pretix/base/settings.py:1712 msgid "Ask for a phone number when signing up to the waiting list." msgstr "" -#: pretix/base/settings.py:1708 +#: pretix/base/settings.py:1721 msgid "Require phone number" msgstr "" -#: pretix/base/settings.py:1709 +#: pretix/base/settings.py:1722 msgid "Require a phone number when signing up to the waiting list.." msgstr "" -#: pretix/base/settings.py:1719 +#: pretix/base/settings.py:1732 msgid "Phone number explanation" msgstr "" -#: pretix/base/settings.py:1722 +#: pretix/base/settings.py:1735 msgid "" "If you ask for a phone number, explain why you do so and what you will use " "the phone number for." msgstr "" -#: pretix/base/settings.py:1734 +#: pretix/base/settings.py:1747 msgid "Maximum number of entries per email address for the same product" msgstr "" -#: pretix/base/settings.py:1738 +#: pretix/base/settings.py:1751 msgid "" "With an increased limit, a customer may request more than one ticket for a " "specific product using the same, unique email address. However, regardless " @@ -10168,11 +10324,11 @@ msgid "" "ticket at a time." msgstr "" -#: pretix/base/settings.py:1750 +#: pretix/base/settings.py:1763 msgid "Show number of check-ins to customer" msgstr "" -#: pretix/base/settings.py:1751 +#: pretix/base/settings.py:1764 msgid "" "With this option enabled, your customers will be able to see how many times " "they entered the event. This is usually not necessary, but might be useful " @@ -10182,62 +10338,62 @@ msgid "" "check-in lists." msgstr "" -#: pretix/base/settings.py:1764 +#: pretix/base/settings.py:1777 msgid "Allow users to download tickets" msgstr "" -#: pretix/base/settings.py:1765 +#: pretix/base/settings.py:1778 msgid "If this is off, nobody can download a ticket." msgstr "" -#: pretix/base/settings.py:1774 +#: pretix/base/settings.py:1787 msgid "Download date" msgstr "" -#: pretix/base/settings.py:1775 +#: pretix/base/settings.py:1788 msgid "" "Ticket download will be offered after this date. If you use the event series " "feature and an order contains tickets for multiple event dates, download of " "all tickets will be available if at least one of the event dates allows it." msgstr "" -#: pretix/base/settings.py:1786 +#: pretix/base/settings.py:1799 msgid "Generate tickets for add-on products and bundled products" msgstr "" -#: pretix/base/settings.py:1787 +#: pretix/base/settings.py:1800 msgid "" "By default, tickets are only issued for products selected individually, not " "for add-on products or bundled products. With this option, a separate ticket " "is issued for every add-on product or bundled product as well." msgstr "" -#: pretix/base/settings.py:1800 +#: pretix/base/settings.py:1813 msgid "Generate tickets for all products" msgstr "" -#: pretix/base/settings.py:1801 +#: pretix/base/settings.py:1814 msgid "" "If turned off, tickets are only issued for products that are marked as an " "\"admission ticket\"in the product settings. You can also turn off ticket " "issuing in every product separately." msgstr "" -#: pretix/base/settings.py:1813 +#: pretix/base/settings.py:1826 msgid "Generate tickets for pending orders" msgstr "" -#: pretix/base/settings.py:1814 +#: pretix/base/settings.py:1827 msgid "" "If turned off, ticket downloads are only possible after an order has been " "marked as paid." msgstr "" -#: pretix/base/settings.py:1825 +#: pretix/base/settings.py:1838 msgid "Do not issue ticket before email address is validated" msgstr "" -#: pretix/base/settings.py:1826 +#: pretix/base/settings.py:1839 msgid "" "If turned on, tickets will not be offered for download directly after " "purchase. They will be attached to the payment confirmation email (if the " @@ -10246,11 +10402,11 @@ msgid "" "orders performed through other sales channels." msgstr "" -#: pretix/base/settings.py:1842 +#: pretix/base/settings.py:1855 msgid "Low availability threshold" msgstr "" -#: pretix/base/settings.py:1843 +#: pretix/base/settings.py:1856 msgid "" "If the availability of tickets falls below this percentage, the event (or a " "date, if it is an event series) will be highlighted to have low availability " @@ -10258,95 +10414,95 @@ msgid "" "availability will not be shown publicly." msgstr "" -#: pretix/base/settings.py:1857 +#: pretix/base/settings.py:1870 msgid "Show availability in event overviews" msgstr "" -#: pretix/base/settings.py:1858 +#: pretix/base/settings.py:1871 msgid "" "If checked, the list of events will show if events are sold out. This might " "make for longer page loading times if you have lots of events and the shown " "status might be out of date for up to two minutes." msgstr "" -#: pretix/base/settings.py:1871 pretix/base/settings.py:1879 +#: pretix/base/settings.py:1884 pretix/base/settings.py:1892 #: pretix/presale/templates/pretixpresale/fragment_calendar_nav.html:8 msgid "List" msgstr "" -#: pretix/base/settings.py:1872 pretix/base/settings.py:1880 +#: pretix/base/settings.py:1885 pretix/base/settings.py:1893 msgid "Week calendar" msgstr "" -#: pretix/base/settings.py:1873 pretix/base/settings.py:1881 +#: pretix/base/settings.py:1886 pretix/base/settings.py:1894 msgid "Month calendar" msgstr "" -#: pretix/base/settings.py:1877 +#: pretix/base/settings.py:1890 msgid "Default overview style" msgstr "" -#: pretix/base/settings.py:1883 +#: pretix/base/settings.py:1896 msgid "" "If your event series has more than 50 dates in the future, only the month or " "week calendar can be used." msgstr "" -#: pretix/base/settings.py:1892 +#: pretix/base/settings.py:1905 msgid "Show filter options for calendar or list view" msgstr "" -#: pretix/base/settings.py:1893 +#: pretix/base/settings.py:1906 msgid "" "You can set up possible filters as meta properties in your organizer " "settings." msgstr "" -#: pretix/base/settings.py:1902 +#: pretix/base/settings.py:1915 msgid "Hide all unavailable dates from calendar or list views" msgstr "" -#: pretix/base/settings.py:1903 pretix/base/settings.py:1914 +#: pretix/base/settings.py:1916 pretix/base/settings.py:1927 msgid "" "This option currently only affects the calendar of this event series, not " "the organizer-wide calendar." msgstr "" -#: pretix/base/settings.py:1913 +#: pretix/base/settings.py:1926 msgid "Hide all past dates from calendar" msgstr "" -#: pretix/base/settings.py:1925 pretix/base/settings.py:1934 +#: pretix/base/settings.py:1938 pretix/base/settings.py:1947 msgid "No modifications after order was submitted" msgstr "" -#: pretix/base/settings.py:1926 pretix/base/settings.py:1935 +#: pretix/base/settings.py:1939 pretix/base/settings.py:1948 msgid "Only the person who ordered can make changes" msgstr "" -#: pretix/base/settings.py:1927 pretix/base/settings.py:1936 +#: pretix/base/settings.py:1940 pretix/base/settings.py:1949 msgid "Both the attendee and the person who ordered can make changes" msgstr "" -#: pretix/base/settings.py:1931 +#: pretix/base/settings.py:1944 msgid "Allow customers to modify their information" msgstr "" -#: pretix/base/settings.py:1946 +#: pretix/base/settings.py:1959 msgid "Allow customers to modify their information after they checked in." msgstr "" -#: pretix/base/settings.py:1947 +#: pretix/base/settings.py:1960 msgid "" "By default, no more modifications are possible for an order as soon as one " "of the tickets in the order has been checked in." msgstr "" -#: pretix/base/settings.py:1957 +#: pretix/base/settings.py:1970 msgid "Last date of modifications" msgstr "" -#: pretix/base/settings.py:1958 +#: pretix/base/settings.py:1971 msgid "" "The last date users can modify details of their orders, such as attendee " "names or answers to questions. If you use the event series feature and an " @@ -10354,53 +10510,53 @@ msgid "" "used." msgstr "" -#: pretix/base/settings.py:1969 +#: pretix/base/settings.py:1982 msgid "Customers can change the variation of the products they purchased" msgstr "" -#: pretix/base/settings.py:1978 +#: pretix/base/settings.py:1991 msgid "Customers can change their selected add-on products" msgstr "" -#: pretix/base/settings.py:1988 pretix/base/settings.py:1999 +#: pretix/base/settings.py:2001 pretix/base/settings.py:2012 msgid "" "Only allow changes if the resulting price is higher or equal than the " "previous price." msgstr "" -#: pretix/base/settings.py:1989 pretix/base/settings.py:2000 +#: pretix/base/settings.py:2002 pretix/base/settings.py:2013 msgid "" "Only allow changes if the resulting price is higher than the previous price." msgstr "" -#: pretix/base/settings.py:1990 pretix/base/settings.py:2001 +#: pretix/base/settings.py:2003 pretix/base/settings.py:2014 msgid "" "Only allow changes if the resulting price is equal to the previous price." msgstr "" -#: pretix/base/settings.py:1991 pretix/base/settings.py:2002 +#: pretix/base/settings.py:2004 pretix/base/settings.py:2015 msgid "" "Allow changes regardless of price, as long as no refund is required (i.e. " "the resulting price is not lower than what has already been paid)." msgstr "" -#: pretix/base/settings.py:1993 pretix/base/settings.py:2004 +#: pretix/base/settings.py:2006 pretix/base/settings.py:2017 msgid "Allow changes regardless of price, even if this results in a refund." msgstr "" -#: pretix/base/settings.py:1997 +#: pretix/base/settings.py:2010 msgid "Requirement for changed prices" msgstr "" -#: pretix/base/settings.py:2015 +#: pretix/base/settings.py:2028 msgid "Do not allow changes after" msgstr "" -#: pretix/base/settings.py:2024 +#: pretix/base/settings.py:2037 msgid "Allow change even though the ticket has already been checked in" msgstr "" -#: pretix/base/settings.py:2025 +#: pretix/base/settings.py:2038 msgid "" "By default, order changes are disabled after any ticket in the order has " "been checked in. If you check this box, this requirement is lifted. It is " @@ -10409,11 +10565,11 @@ msgid "" "limitation on price changes above." msgstr "" -#: pretix/base/settings.py:2037 +#: pretix/base/settings.py:2050 msgid "Allow individual attendees to change their ticket" msgstr "" -#: pretix/base/settings.py:2038 +#: pretix/base/settings.py:2051 msgid "" "By default, only the person who ordered the tickets can make any changes. If " "you check this box, individual attendees can also make changes. However, " @@ -10422,77 +10578,77 @@ msgid "" "customer." msgstr "" -#: pretix/base/settings.py:2050 +#: pretix/base/settings.py:2063 msgid "Customers can cancel their unpaid orders" msgstr "" -#: pretix/base/settings.py:2062 +#: pretix/base/settings.py:2075 msgid "Charge a fixed cancellation fee" msgstr "" -#: pretix/base/settings.py:2063 pretix/base/settings.py:2074 -#: pretix/base/settings.py:2088 +#: pretix/base/settings.py:2076 pretix/base/settings.py:2087 +#: pretix/base/settings.py:2101 msgid "" "Only affects orders pending payments, a cancellation fee for free orders is " "never charged. Note that it will be your responsibility to claim the " "cancellation fee from the user." msgstr "" -#: pretix/base/settings.py:2073 +#: pretix/base/settings.py:2086 msgid "Charge payment, shipping and service fees" msgstr "" -#: pretix/base/settings.py:2087 +#: pretix/base/settings.py:2100 msgid "Charge a percentual cancellation fee" msgstr "" -#: pretix/base/settings.py:2098 pretix/base/settings.py:2237 +#: pretix/base/settings.py:2111 pretix/base/settings.py:2250 msgid "Do not allow cancellations after" msgstr "" -#: pretix/base/settings.py:2107 +#: pretix/base/settings.py:2120 msgid "Customers can cancel their paid orders" msgstr "" -#: pretix/base/settings.py:2108 +#: pretix/base/settings.py:2121 msgid "" "Paid money will be automatically paid back if the payment method allows it. " "Otherwise, a manual refund will be created for you to process manually." msgstr "" -#: pretix/base/settings.py:2121 pretix/control/forms/orders.py:917 +#: pretix/base/settings.py:2134 pretix/control/forms/orders.py:917 msgid "Keep a fixed cancellation fee" msgstr "" -#: pretix/base/settings.py:2130 +#: pretix/base/settings.py:2143 msgid "Keep payment, shipping and service fees" msgstr "" -#: pretix/base/settings.py:2142 pretix/control/forms/orders.py:928 +#: pretix/base/settings.py:2155 pretix/control/forms/orders.py:928 msgid "Keep a percentual cancellation fee" msgstr "" -#: pretix/base/settings.py:2151 +#: pretix/base/settings.py:2164 msgid "Allow customers to voluntarily choose a lower refund" msgstr "" -#: pretix/base/settings.py:2152 +#: pretix/base/settings.py:2165 msgid "" "With this option enabled, your customers can choose to get a smaller refund " "to support you." msgstr "" -#: pretix/base/settings.py:2157 +#: pretix/base/settings.py:2170 msgid "" "However, if you want us to help keep the lights on here, please consider " "using the slider below to request a smaller refund. Thank you!" msgstr "" -#: pretix/base/settings.py:2164 +#: pretix/base/settings.py:2177 msgid "Voluntary lower refund explanation" msgstr "" -#: pretix/base/settings.py:2167 +#: pretix/base/settings.py:2180 msgid "" "This text will be shown in between the explanation of how the refunds work " "and the slider which your customers can use to choose the amount they would " @@ -10500,107 +10656,107 @@ msgid "" "help your organization." msgstr "" -#: pretix/base/settings.py:2182 +#: pretix/base/settings.py:2195 msgid "Step size for reduction amount" msgstr "" -#: pretix/base/settings.py:2183 +#: pretix/base/settings.py:2196 msgid "" "By default, customers can choose an arbitrary amount for you to keep. If you " "set this to e.g. 10, they will only be able to choose values in increments " "of 10." msgstr "" -#: pretix/base/settings.py:2193 +#: pretix/base/settings.py:2206 msgid "" "Customers can only request a cancellation that needs to be approved by the " "event organizer before the order is canceled and a refund is issued." msgstr "" -#: pretix/base/settings.py:2203 +#: pretix/base/settings.py:2216 msgid "" "Do not show the cancellation fee to users when they request cancellation." msgstr "" -#: pretix/base/settings.py:2212 pretix/base/settings.py:2222 +#: pretix/base/settings.py:2225 pretix/base/settings.py:2235 msgid "All refunds are issued to the original payment method" msgstr "" -#: pretix/base/settings.py:2213 pretix/base/settings.py:2223 +#: pretix/base/settings.py:2226 pretix/base/settings.py:2236 msgid "" "Customers can choose between a gift card and a refund to their payment method" msgstr "" -#: pretix/base/settings.py:2214 pretix/base/settings.py:2224 +#: pretix/base/settings.py:2227 pretix/base/settings.py:2237 msgid "All refunds are issued as gift cards" msgstr "" -#: pretix/base/settings.py:2215 pretix/base/settings.py:2225 +#: pretix/base/settings.py:2228 pretix/base/settings.py:2238 msgid "Do not handle refunds automatically at all" msgstr "" -#: pretix/base/settings.py:2220 +#: pretix/base/settings.py:2233 #: pretix/control/templates/pretixcontrol/order/index.html:182 msgid "Refund method" msgstr "" -#: pretix/base/settings.py:2246 pretix/base/settings.py:2259 +#: pretix/base/settings.py:2259 pretix/base/settings.py:2272 msgid "Terms of cancellation" msgstr "" -#: pretix/base/settings.py:2249 +#: pretix/base/settings.py:2262 msgid "" "This text will be shown when cancellation is allowed for a paid order. Leave " "empty if you want pretix to automatically generate the terms of cancellation " "based on your settings." msgstr "" -#: pretix/base/settings.py:2262 +#: pretix/base/settings.py:2275 msgid "" "This text will be shown when cancellation is allowed for an unpaid or free " "order. Leave empty if you want pretix to automatically generate the terms of " "cancellation based on your settings." msgstr "" -#: pretix/base/settings.py:2272 pretix/control/forms/event.py:1898 +#: pretix/base/settings.py:2285 pretix/control/forms/event.py:1898 msgid "Contact address" msgstr "" -#: pretix/base/settings.py:2273 pretix/control/forms/event.py:1900 +#: pretix/base/settings.py:2286 pretix/control/forms/event.py:1900 msgid "We'll show this publicly to allow attendees to contact you." msgstr "" -#: pretix/base/settings.py:2281 pretix/control/forms/event.py:1892 +#: pretix/base/settings.py:2294 pretix/control/forms/event.py:1892 msgid "Imprint URL" msgstr "" -#: pretix/base/settings.py:2282 pretix/control/forms/event.py:1893 +#: pretix/base/settings.py:2295 pretix/control/forms/event.py:1893 msgid "" "This should point e.g. to a part of your website that has your contact " "details and legal information." msgstr "" -#: pretix/base/settings.py:2292 +#: pretix/base/settings.py:2305 msgid "Privacy Policy URL" msgstr "" -#: pretix/base/settings.py:2293 +#: pretix/base/settings.py:2306 msgid "" "This should point e.g. to a part of your website that explains how you use " "data gathered in your ticket shop." msgstr "" -#: pretix/base/settings.py:2304 +#: pretix/base/settings.py:2317 msgid "Accessibility information URL" msgstr "" -#: pretix/base/settings.py:2305 +#: pretix/base/settings.py:2318 msgid "" "This should point e.g. to a part of your website that explains how your " "ticket shop complies with accessibility regulation." msgstr "" -#: pretix/base/settings.py:2312 +#: pretix/base/settings.py:2325 #: pretix/presale/templates/pretixpresale/event/base.html:229 #: pretix/presale/templates/pretixpresale/event/base.html:234 #: pretix/presale/templates/pretixpresale/organizers/accessibility.html:6 @@ -10609,52 +10765,52 @@ msgstr "" msgid "Accessibility information" msgstr "" -#: pretix/base/settings.py:2316 +#: pretix/base/settings.py:2329 msgid "Accessibility information title" msgstr "" -#: pretix/base/settings.py:2326 +#: pretix/base/settings.py:2339 msgid "Accessibility information text" msgstr "" -#: pretix/base/settings.py:2347 +#: pretix/base/settings.py:2360 msgid "Attach ticket files" msgstr "" -#: pretix/base/settings.py:2349 +#: pretix/base/settings.py:2362 #, python-brace-format msgid "" "Tickets will never be attached if they're larger than {size} to avoid email " "delivery problems." msgstr "" -#: pretix/base/settings.py:2360 pretix/plugins/sendmail/forms.py:201 +#: pretix/base/settings.py:2373 pretix/plugins/sendmail/forms.py:201 #: pretix/plugins/sendmail/models.py:263 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:66 msgid "Attach calendar files" msgstr "" -#: pretix/base/settings.py:2361 +#: pretix/base/settings.py:2374 msgid "" "If enabled, we will attach an .ics calendar file to order confirmation " "emails." msgstr "" -#: pretix/base/settings.py:2370 +#: pretix/base/settings.py:2383 msgid "Attach calendar files only after order has been paid" msgstr "" -#: pretix/base/settings.py:2371 +#: pretix/base/settings.py:2384 msgid "" "Use this if you e.g. put a private access link into the calendar file to " "make sure people only receive it after their payment was confirmed." msgstr "" -#: pretix/base/settings.py:2380 +#: pretix/base/settings.py:2393 msgid "Event description" msgstr "" -#: pretix/base/settings.py:2383 +#: pretix/base/settings.py:2396 msgid "" "You can use this to share information with your attendees, such as travel " "information or the link to a digital event. If you keep it empty, we will " @@ -10664,52 +10820,52 @@ msgid "" "people." msgstr "" -#: pretix/base/settings.py:2396 +#: pretix/base/settings.py:2409 msgid "Subject prefix" msgstr "" -#: pretix/base/settings.py:2397 +#: pretix/base/settings.py:2410 msgid "" "This will be prepended to the subject of all outgoing emails, formatted as " "[prefix]. Choose, for example, a short form of your event name." msgstr "" -#: pretix/base/settings.py:2411 pretix/control/forms/mailsetup.py:37 +#: pretix/base/settings.py:2424 pretix/control/forms/mailsetup.py:37 #: pretix/control/forms/mailsetup.py:119 #: pretix/control/templates/pretixcontrol/event/mail.html:39 #: pretix/control/templates/pretixcontrol/organizers/mail.html:40 msgid "Sender address" msgstr "" -#: pretix/base/settings.py:2412 pretix/control/forms/mailsetup.py:38 +#: pretix/base/settings.py:2425 pretix/control/forms/mailsetup.py:38 #: pretix/control/forms/mailsetup.py:120 msgid "Sender address for outgoing emails" msgstr "" -#: pretix/base/settings.py:2421 +#: pretix/base/settings.py:2434 msgid "Sender name" msgstr "" -#: pretix/base/settings.py:2422 +#: pretix/base/settings.py:2435 msgid "" "Sender name used in conjunction with the sender address for outgoing emails. " "Defaults to your event name." msgstr "" -#: pretix/base/settings.py:2440 pretix/base/settings.py:2497 -#: pretix/base/settings.py:2514 pretix/base/settings.py:2532 +#: pretix/base/settings.py:2453 pretix/base/settings.py:2510 +#: pretix/base/settings.py:2527 pretix/base/settings.py:2545 #, python-brace-format msgid "Your order: {code}" msgstr "" -#: pretix/base/settings.py:2444 pretix/base/settings.py:2477 -#: pretix/base/settings.py:2582 pretix/base/settings.py:2815 -#: pretix/base/settings.py:2852 +#: pretix/base/settings.py:2457 pretix/base/settings.py:2490 +#: pretix/base/settings.py:2595 pretix/base/settings.py:2828 +#: pretix/base/settings.py:2865 #, python-brace-format msgid "Your event registration: {code}" msgstr "" -#: pretix/base/settings.py:2448 +#: pretix/base/settings.py:2461 #, python-brace-format msgid "" "Hello,\n" @@ -10724,12 +10880,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2461 +#: pretix/base/settings.py:2474 #, python-brace-format msgid "Your orders for {event}" msgstr "" -#: pretix/base/settings.py:2465 +#: pretix/base/settings.py:2478 #, python-brace-format msgid "" "Hello,\n" @@ -10743,7 +10899,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2481 +#: pretix/base/settings.py:2494 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -10757,7 +10913,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2501 +#: pretix/base/settings.py:2514 #, python-brace-format msgid "" "Hello,\n" @@ -10772,7 +10928,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2518 +#: pretix/base/settings.py:2531 #, python-brace-format msgid "" "Hello,\n" @@ -10788,7 +10944,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2536 +#: pretix/base/settings.py:2549 #, python-brace-format msgid "" "Hello,\n" @@ -10806,11 +10962,11 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2554 +#: pretix/base/settings.py:2567 msgid "Attachment for new orders" msgstr "" -#: pretix/base/settings.py:2559 +#: pretix/base/settings.py:2572 #, python-brace-format msgid "" "This file will be attached to the first email that we send for every new " @@ -10822,7 +10978,7 @@ msgid "" "vital email going to spam, you can only upload PDF files of up to {size} MB." msgstr "" -#: pretix/base/settings.py:2586 +#: pretix/base/settings.py:2599 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -10836,12 +10992,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2598 +#: pretix/base/settings.py:2611 #, python-brace-format msgid "Your order has been changed: {code}" msgstr "" -#: pretix/base/settings.py:2602 +#: pretix/base/settings.py:2615 #, python-brace-format msgid "" "Hello,\n" @@ -10855,12 +11011,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2614 +#: pretix/base/settings.py:2627 #, python-brace-format msgid "Payment received for your order: {code}" msgstr "" -#: pretix/base/settings.py:2618 +#: pretix/base/settings.py:2631 #, python-brace-format msgid "" "Hello,\n" @@ -10876,12 +11032,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2636 +#: pretix/base/settings.py:2649 #, python-brace-format msgid "Event registration confirmed: {code}" msgstr "" -#: pretix/base/settings.py:2640 +#: pretix/base/settings.py:2653 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -10895,23 +11051,23 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2657 pretix/control/forms/event.py:1294 +#: pretix/base/settings.py:2670 pretix/control/forms/event.py:1294 #: pretix/control/forms/event.py:1416 pretix/plugins/sendmail/models.py:268 msgid "Number of days" msgstr "" -#: pretix/base/settings.py:2659 pretix/control/forms/event.py:1297 +#: pretix/base/settings.py:2672 pretix/control/forms/event.py:1297 msgid "" "This email will be sent out this many days before the order expires. If the " "value is 0, the mail will never be sent." msgstr "" -#: pretix/base/settings.py:2667 +#: pretix/base/settings.py:2680 #, python-brace-format msgid "Your order is about to expire: {code}" msgstr "" -#: pretix/base/settings.py:2671 +#: pretix/base/settings.py:2684 #, python-brace-format msgid "" "Hello,\n" @@ -10927,12 +11083,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2685 +#: pretix/base/settings.py:2698 #, python-brace-format msgid "Your order is pending payment: {code}" msgstr "" -#: pretix/base/settings.py:2689 +#: pretix/base/settings.py:2702 #, python-brace-format msgid "" "Hello,\n" @@ -10947,12 +11103,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2702 +#: pretix/base/settings.py:2715 #, python-brace-format msgid "Incomplete payment received: {code}" msgstr "" -#: pretix/base/settings.py:2706 +#: pretix/base/settings.py:2719 #, python-brace-format msgid "" "Hello,\n" @@ -10970,12 +11126,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2722 +#: pretix/base/settings.py:2735 #, python-brace-format msgid "Payment failed for your order: {code}" msgstr "" -#: pretix/base/settings.py:2726 +#: pretix/base/settings.py:2739 #, python-brace-format msgid "" "Hello,\n" @@ -10993,12 +11149,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2740 +#: pretix/base/settings.py:2753 #, python-brace-format msgid "You have been selected from the waitinglist for {event}" msgstr "" -#: pretix/base/settings.py:2744 +#: pretix/base/settings.py:2757 #, python-brace-format msgid "" "Hello,\n" @@ -11029,12 +11185,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2773 +#: pretix/base/settings.py:2786 #, python-brace-format msgid "Order canceled: {code}" msgstr "" -#: pretix/base/settings.py:2777 +#: pretix/base/settings.py:2790 #, python-brace-format msgid "" "Hello,\n" @@ -11050,12 +11206,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2791 +#: pretix/base/settings.py:2804 #, python-brace-format msgid "Order approved and awaiting payment: {code}" msgstr "" -#: pretix/base/settings.py:2795 +#: pretix/base/settings.py:2808 #, python-brace-format msgid "" "Hello,\n" @@ -11073,7 +11229,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2819 pretix/base/settings.py:2856 +#: pretix/base/settings.py:2832 pretix/base/settings.py:2869 #, python-brace-format msgid "" "Hello,\n" @@ -11087,12 +11243,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2831 +#: pretix/base/settings.py:2844 #, python-brace-format msgid "Order approved and confirmed: {code}" msgstr "" -#: pretix/base/settings.py:2835 +#: pretix/base/settings.py:2848 #, python-brace-format msgid "" "Hello,\n" @@ -11107,12 +11263,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2868 +#: pretix/base/settings.py:2881 #, python-brace-format msgid "Order denied: {code}" msgstr "" -#: pretix/base/settings.py:2872 +#: pretix/base/settings.py:2885 #, python-brace-format msgid "" "Hello,\n" @@ -11129,7 +11285,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2887 +#: pretix/base/settings.py:2900 #, python-brace-format msgid "" "Hello,\n" @@ -11141,12 +11297,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2897 +#: pretix/base/settings.py:2910 #, python-brace-format msgid "Invoice {invoice_number}" msgstr "" -#: pretix/base/settings.py:2901 +#: pretix/base/settings.py:2914 #, python-brace-format msgid "" "Hello,\n" @@ -11159,12 +11315,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2919 pretix/base/settings.py:2935 +#: pretix/base/settings.py:2932 pretix/base/settings.py:2948 #, python-brace-format msgid "Your ticket is ready for download: {code}" msgstr "" -#: pretix/base/settings.py:2923 +#: pretix/base/settings.py:2936 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -11178,7 +11334,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2939 +#: pretix/base/settings.py:2952 #, python-brace-format msgid "" "Hello,\n" @@ -11192,12 +11348,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2951 +#: pretix/base/settings.py:2964 #, python-brace-format msgid "Activate your account at {organizer}" msgstr "" -#: pretix/base/settings.py:2955 +#: pretix/base/settings.py:2968 #, python-brace-format msgid "" "Hello {name},\n" @@ -11217,12 +11373,12 @@ msgid "" "Your {organizer} team" msgstr "" -#: pretix/base/settings.py:2973 +#: pretix/base/settings.py:2986 #, python-brace-format msgid "Confirm email address for your account at {organizer}" msgstr "" -#: pretix/base/settings.py:2977 +#: pretix/base/settings.py:2990 #, python-brace-format msgid "" "Hello {name},\n" @@ -11242,12 +11398,12 @@ msgid "" "Your {organizer} team" msgstr "" -#: pretix/base/settings.py:2995 +#: pretix/base/settings.py:3008 #, python-brace-format msgid "Set a new password for your account at {organizer}" msgstr "" -#: pretix/base/settings.py:2999 +#: pretix/base/settings.py:3012 #, python-brace-format msgid "" "Hello {name},\n" @@ -11267,12 +11423,12 @@ msgid "" "Your {organizer} team" msgstr "" -#: pretix/base/settings.py:3017 +#: pretix/base/settings.py:3030 #, python-brace-format msgid "Changes to your account at {organizer}" msgstr "" -#: pretix/base/settings.py:3021 +#: pretix/base/settings.py:3034 #, python-brace-format msgid "" "Hello {name},\n" @@ -11292,57 +11448,57 @@ msgid "" "Your {organizer} team" msgstr "" -#: pretix/base/settings.py:3073 pretix/base/settings.py:3080 -#: pretix/base/settings.py:3094 pretix/base/settings.py:3102 -#: pretix/base/settings.py:3116 pretix/base/settings.py:3124 -#: pretix/base/settings.py:3138 pretix/base/settings.py:3145 +#: pretix/base/settings.py:3086 pretix/base/settings.py:3093 +#: pretix/base/settings.py:3107 pretix/base/settings.py:3115 +#: pretix/base/settings.py:3129 pretix/base/settings.py:3137 +#: pretix/base/settings.py:3151 pretix/base/settings.py:3158 msgid "Please enter the hexadecimal code of a color, e.g. #990000." msgstr "" -#: pretix/base/settings.py:3077 +#: pretix/base/settings.py:3090 msgid "Primary color" msgstr "" -#: pretix/base/settings.py:3098 +#: pretix/base/settings.py:3111 msgid "Accent color for success" msgstr "" -#: pretix/base/settings.py:3099 +#: pretix/base/settings.py:3112 msgid "We strongly suggest to use a shade of green." msgstr "" -#: pretix/base/settings.py:3120 +#: pretix/base/settings.py:3133 msgid "Accent color for errors" msgstr "" -#: pretix/base/settings.py:3121 +#: pretix/base/settings.py:3134 msgid "We strongly suggest to use a shade of red." msgstr "" -#: pretix/base/settings.py:3142 +#: pretix/base/settings.py:3155 msgid "Page background color" msgstr "" -#: pretix/base/settings.py:3157 +#: pretix/base/settings.py:3170 msgid "Use round edges" msgstr "" -#: pretix/base/settings.py:3166 +#: pretix/base/settings.py:3179 msgid "" "Use native spinners in the widget instead of custom ones for numeric inputs " "such as quantity." msgstr "" -#: pretix/base/settings.py:3177 +#: pretix/base/settings.py:3190 msgid "Only respected by modern browsers." msgstr "" -#: pretix/base/settings.py:3188 pretix/base/settings.py:3232 -#: pretix/control/forms/organizer.py:642 +#: pretix/base/settings.py:3201 pretix/base/settings.py:3245 +#: pretix/control/forms/organizer.py:652 msgid "Header image" msgstr "" -#: pretix/base/settings.py:3191 +#: pretix/base/settings.py:3204 msgid "" "If you provide a logo image, we will by default not show your event name and " "date in the page header. If you use a white background, we show your logo " @@ -11351,26 +11507,26 @@ msgid "" "using small details on the picture as it will be resized on smaller screens." msgstr "" -#: pretix/base/settings.py:3212 pretix/base/settings.py:3255 +#: pretix/base/settings.py:3225 pretix/base/settings.py:3268 msgid "Use header image in its full size" msgstr "" -#: pretix/base/settings.py:3213 pretix/base/settings.py:3256 +#: pretix/base/settings.py:3226 pretix/base/settings.py:3269 msgid "We recommend to upload a picture at least 1170 pixels wide." msgstr "" -#: pretix/base/settings.py:3222 +#: pretix/base/settings.py:3235 msgid "Show event title even if a header image is present" msgstr "" -#: pretix/base/settings.py:3223 +#: pretix/base/settings.py:3236 msgid "" "The title will only be shown on the event front page. If no header image is " "uploaded for the event, but the header image from the organizer profile is " "used, this option will be ignored and the event title will always be shown." msgstr "" -#: pretix/base/settings.py:3235 pretix/control/forms/organizer.py:646 +#: pretix/base/settings.py:3248 pretix/control/forms/organizer.py:656 msgid "" "If you provide a logo image, we will by default not show your organization " "name in the page header. If you use a white background, we show your logo " @@ -11379,25 +11535,25 @@ msgid "" "using small details on the picture as it will be resized on smaller screens." msgstr "" -#: pretix/base/settings.py:3265 +#: pretix/base/settings.py:3278 msgid "Use header image also for events without an individually uploaded logo" msgstr "" -#: pretix/base/settings.py:3273 +#: pretix/base/settings.py:3286 msgid "Favicon" msgstr "" -#: pretix/base/settings.py:3276 +#: pretix/base/settings.py:3289 msgid "" "If you provide a favicon, we will show it instead of the default pretix " "icon. We recommend a size of at least 200x200px to accommodate most devices." msgstr "" -#: pretix/base/settings.py:3292 +#: pretix/base/settings.py:3305 msgid "Social media image" msgstr "" -#: pretix/base/settings.py:3295 +#: pretix/base/settings.py:3308 msgid "" "This picture will be used as a preview if you post links to your ticket shop " "on social media. Facebook advises to use a picture size of 1200 x 630 " @@ -11406,93 +11562,93 @@ msgid "" "square is shown. If you do not fill this, we will use the logo given above." msgstr "" -#: pretix/base/settings.py:3313 +#: pretix/base/settings.py:3326 msgid "Logo image" msgstr "" -#: pretix/base/settings.py:3317 +#: pretix/base/settings.py:3330 msgid "We will show your logo with a maximal height and width of 2.5 cm." msgstr "" -#: pretix/base/settings.py:3344 pretix/base/settings.py:3450 +#: pretix/base/settings.py:3357 pretix/base/settings.py:3463 msgid "Info text" msgstr "" -#: pretix/base/settings.py:3347 pretix/base/settings.py:3452 +#: pretix/base/settings.py:3360 pretix/base/settings.py:3465 msgid "" "Not displayed anywhere by default, but if you want to, you can use this e.g. " "in ticket templates." msgstr "" -#: pretix/base/settings.py:3356 +#: pretix/base/settings.py:3369 msgid "Banner text (top)" msgstr "" -#: pretix/base/settings.py:3359 +#: pretix/base/settings.py:3372 msgid "" "This text will be shown above every page of your shop. Please only use this " "for very important messages." msgstr "" -#: pretix/base/settings.py:3369 +#: pretix/base/settings.py:3382 msgid "Banner text (bottom)" msgstr "" -#: pretix/base/settings.py:3372 +#: pretix/base/settings.py:3385 msgid "" "This text will be shown below every page of your shop. Please only use this " "for very important messages." msgstr "" -#: pretix/base/settings.py:3382 +#: pretix/base/settings.py:3395 msgid "Voucher explanation" msgstr "" -#: pretix/base/settings.py:3385 +#: pretix/base/settings.py:3398 msgid "" "This text will be shown next to the input for a voucher code. You can use it " "e.g. to explain how to obtain a voucher code." msgstr "" -#: pretix/base/settings.py:3395 +#: pretix/base/settings.py:3408 msgid "Attendee data explanation" msgstr "" -#: pretix/base/settings.py:3398 +#: pretix/base/settings.py:3411 msgid "" "This text will be shown above the questions asked for every personalized " "product. You can use it e.g. to explain why you need information from them." msgstr "" -#: pretix/base/settings.py:3408 +#: pretix/base/settings.py:3421 msgid "Additional success message" msgstr "" -#: pretix/base/settings.py:3409 +#: pretix/base/settings.py:3422 msgid "" "This message will be shown after an order has been created successfully. It " "will be shown in additional to the default text." msgstr "" -#: pretix/base/settings.py:3421 +#: pretix/base/settings.py:3434 msgid "Help text of the phone number field" msgstr "" -#: pretix/base/settings.py:3428 +#: pretix/base/settings.py:3441 msgid "" "Make sure to enter a valid email address. We will send you an order " "confirmation including a link that you need to access your order later." msgstr "" -#: pretix/base/settings.py:3435 +#: pretix/base/settings.py:3448 msgid "Help text of the email field" msgstr "" -#: pretix/base/settings.py:3461 +#: pretix/base/settings.py:3474 msgid "Allow creating a new team during event creation" msgstr "" -#: pretix/base/settings.py:3462 +#: pretix/base/settings.py:3475 msgid "" "Users that do not have access to all events under this organizer, must " "select one of their teams to have access to the created event. This setting " @@ -11500,68 +11656,68 @@ msgid "" "not have \"Can change teams and permissions\" permission." msgstr "" -#: pretix/base/settings.py:3534 pretix/base/settings.py:3544 +#: pretix/base/settings.py:3547 pretix/base/settings.py:3557 msgid "Event start time (descending)" msgstr "" -#: pretix/base/settings.py:3536 pretix/base/settings.py:3546 +#: pretix/base/settings.py:3549 pretix/base/settings.py:3559 msgid "Name (descending)" msgstr "" -#: pretix/base/settings.py:3541 +#: pretix/base/settings.py:3554 msgctxt "subevent" msgid "Date ordering" msgstr "" -#: pretix/base/settings.py:3557 +#: pretix/base/settings.py:3570 msgid "Link back to organizer overview on all event pages" msgstr "" -#: pretix/base/settings.py:3566 +#: pretix/base/settings.py:3579 msgid "Homepage text" msgstr "" -#: pretix/base/settings.py:3568 +#: pretix/base/settings.py:3581 msgid "This will be displayed on the organizer homepage." msgstr "" -#: pretix/base/settings.py:3583 +#: pretix/base/settings.py:3596 msgid "Length of gift card codes" msgstr "" -#: pretix/base/settings.py:3584 +#: pretix/base/settings.py:3597 #, python-brace-format msgid "" "The system generates by default {}-character long gift card codes. However, " "if a different length is required, it can be set here." msgstr "" -#: pretix/base/settings.py:3600 +#: pretix/base/settings.py:3613 msgid "Validity of gift card codes in years" msgstr "" -#: pretix/base/settings.py:3601 +#: pretix/base/settings.py:3614 msgid "" "If you set a number here, gift cards will by default expire at the end of " "the year after this many years. If you keep it empty, gift cards do not have " "an explicit expiry date." msgstr "" -#: pretix/base/settings.py:3612 +#: pretix/base/settings.py:3625 msgid "Enable cookie consent management features" msgstr "" -#: pretix/base/settings.py:3618 +#: pretix/base/settings.py:3631 msgid "" "By clicking \"Accept all cookies\", you agree to the storing of cookies and " "use of similar technologies on your device." msgstr "" -#: pretix/base/settings.py:3625 +#: pretix/base/settings.py:3638 msgid "Dialog text" msgstr "" -#: pretix/base/settings.py:3632 +#: pretix/base/settings.py:3645 msgid "" "We use cookies and similar technologies to gather data that allows us to " "improve this website and our offerings. If you do not agree, we will only " @@ -11569,197 +11725,197 @@ msgid "" "offers." msgstr "" -#: pretix/base/settings.py:3640 +#: pretix/base/settings.py:3653 msgid "Secondary dialog text" msgstr "" -#: pretix/base/settings.py:3646 +#: pretix/base/settings.py:3659 msgid "Privacy settings" msgstr "" -#: pretix/base/settings.py:3651 +#: pretix/base/settings.py:3664 msgid "Dialog title" msgstr "" -#: pretix/base/settings.py:3657 +#: pretix/base/settings.py:3670 msgid "Accept all cookies" msgstr "" -#: pretix/base/settings.py:3662 +#: pretix/base/settings.py:3675 msgid "\"Accept\" button description" msgstr "" -#: pretix/base/settings.py:3668 +#: pretix/base/settings.py:3681 msgid "Required cookies only" msgstr "" -#: pretix/base/settings.py:3673 +#: pretix/base/settings.py:3686 msgid "\"Reject\" button description" msgstr "" -#: pretix/base/settings.py:3683 +#: pretix/base/settings.py:3696 msgid "Customers can choose their own seats" msgstr "" -#: pretix/base/settings.py:3684 +#: pretix/base/settings.py:3697 msgid "" "If disabled, you will need to manually assign seats in the backend. Note " "that this can mean people will not know their seat after their purchase and " "it might not be written on their ticket." msgstr "" -#: pretix/base/settings.py:3710 +#: pretix/base/settings.py:3723 msgid "Show button to copy user input from other products" msgstr "" -#: pretix/base/settings.py:3724 +#: pretix/base/settings.py:3737 msgid "Most common English titles" msgstr "" -#: pretix/base/settings.py:3734 +#: pretix/base/settings.py:3747 msgid "Most common German titles" msgstr "" -#: pretix/base/settings.py:3747 +#: pretix/base/settings.py:3760 msgctxt "person_name_salutation" msgid "Ms" msgstr "" -#: pretix/base/settings.py:3748 +#: pretix/base/settings.py:3761 msgctxt "person_name_salutation" msgid "Mr" msgstr "" -#: pretix/base/settings.py:3749 +#: pretix/base/settings.py:3762 msgctxt "person_name_salutation" msgid "Mx" msgstr "" -#: pretix/base/settings.py:3786 pretix/base/settings.py:3802 -#: pretix/base/settings.py:3818 pretix/base/settings.py:3833 -#: pretix/base/settings.py:3851 pretix/base/settings.py:3866 -#: pretix/base/settings.py:3896 pretix/base/settings.py:3920 -#: pretix/base/settings.py:3952 pretix/base/settings.py:3974 -#: pretix/base/settings.py:4005 +#: pretix/base/settings.py:3799 pretix/base/settings.py:3815 +#: pretix/base/settings.py:3831 pretix/base/settings.py:3846 +#: pretix/base/settings.py:3864 pretix/base/settings.py:3879 +#: pretix/base/settings.py:3909 pretix/base/settings.py:3933 +#: pretix/base/settings.py:3965 pretix/base/settings.py:3987 +#: pretix/base/settings.py:4018 msgctxt "person_name_sample" msgid "John" msgstr "" -#: pretix/base/settings.py:3787 pretix/base/settings.py:3803 -#: pretix/base/settings.py:3819 pretix/base/settings.py:3835 -#: pretix/base/settings.py:3853 pretix/base/settings.py:3867 -#: pretix/base/settings.py:3897 pretix/base/settings.py:3953 -#: pretix/base/settings.py:3975 pretix/base/settings.py:4006 +#: pretix/base/settings.py:3800 pretix/base/settings.py:3816 +#: pretix/base/settings.py:3832 pretix/base/settings.py:3848 +#: pretix/base/settings.py:3866 pretix/base/settings.py:3880 +#: pretix/base/settings.py:3910 pretix/base/settings.py:3966 +#: pretix/base/settings.py:3988 pretix/base/settings.py:4019 msgctxt "person_name_sample" msgid "Doe" msgstr "" -#: pretix/base/settings.py:3793 pretix/base/settings.py:3809 -#: pretix/base/settings.py:3841 pretix/base/settings.py:3960 -#: pretix/base/settings.py:3982 +#: pretix/base/settings.py:3806 pretix/base/settings.py:3822 +#: pretix/base/settings.py:3854 pretix/base/settings.py:3973 +#: pretix/base/settings.py:3995 msgctxt "person_name" msgid "Title" msgstr "" -#: pretix/base/settings.py:3801 pretix/base/settings.py:3817 -#: pretix/base/settings.py:3850 pretix/base/settings.py:3973 -#: pretix/base/settings.py:4004 +#: pretix/base/settings.py:3814 pretix/base/settings.py:3830 +#: pretix/base/settings.py:3863 pretix/base/settings.py:3986 +#: pretix/base/settings.py:4017 msgctxt "person_name_sample" msgid "Dr" msgstr "" -#: pretix/base/settings.py:3825 pretix/base/settings.py:3842 +#: pretix/base/settings.py:3838 pretix/base/settings.py:3855 msgid "First name" msgstr "" -#: pretix/base/settings.py:3826 pretix/base/settings.py:3843 +#: pretix/base/settings.py:3839 pretix/base/settings.py:3856 msgid "Middle name" msgstr "" -#: pretix/base/settings.py:3907 pretix/base/settings.py:3919 -#: pretix/control/forms/organizer.py:793 +#: pretix/base/settings.py:3920 pretix/base/settings.py:3932 +#: pretix/control/forms/organizer.py:803 msgctxt "person_name_sample" msgid "John Doe" msgstr "" -#: pretix/base/settings.py:3913 +#: pretix/base/settings.py:3926 msgid "Calling name" msgstr "" -#: pretix/base/settings.py:3927 +#: pretix/base/settings.py:3940 msgid "Latin transcription" msgstr "" -#: pretix/base/settings.py:3939 pretix/base/settings.py:3959 -#: pretix/base/settings.py:3981 +#: pretix/base/settings.py:3952 pretix/base/settings.py:3972 +#: pretix/base/settings.py:3994 msgctxt "person_name" msgid "Salutation" msgstr "" -#: pretix/base/settings.py:3951 pretix/base/settings.py:3972 -#: pretix/base/settings.py:4003 +#: pretix/base/settings.py:3964 pretix/base/settings.py:3985 +#: pretix/base/settings.py:4016 msgctxt "person_name_sample" msgid "Mr" msgstr "" -#: pretix/base/settings.py:3985 +#: pretix/base/settings.py:3998 msgctxt "person_name" msgid "Degree (after name)" msgstr "" -#: pretix/base/settings.py:4007 +#: pretix/base/settings.py:4020 msgctxt "person_name_sample" msgid "MA" msgstr "" -#: pretix/base/settings.py:4033 pretix/base/settings.py:4035 +#: pretix/base/settings.py:4046 pretix/base/settings.py:4048 msgctxt "address" msgid "Province" msgstr "" -#: pretix/base/settings.py:4034 +#: pretix/base/settings.py:4047 msgctxt "address" msgid "Prefecture" msgstr "" -#: pretix/base/settings.py:4125 pretix/control/forms/event.py:242 +#: pretix/base/settings.py:4138 pretix/control/forms/event.py:242 msgid "" "Your default locale must also be enabled for your event (see box above)." msgstr "" -#: pretix/base/settings.py:4129 +#: pretix/base/settings.py:4142 msgid "" "You cannot require specifying attendee names if you do not ask for them." msgstr "" -#: pretix/base/settings.py:4133 +#: pretix/base/settings.py:4146 msgid "You have to ask for attendee emails if you want to make them required." msgstr "" -#: pretix/base/settings.py:4137 +#: pretix/base/settings.py:4150 msgid "" "You have to ask for invoice addresses if you want to make them required." msgstr "" -#: pretix/base/settings.py:4141 +#: pretix/base/settings.py:4154 msgid "You have to require invoice addresses to require for company names." msgstr "" -#: pretix/base/settings.py:4163 +#: pretix/base/settings.py:4176 #, python-brace-format msgid "VAT-ID is not supported for \"{}\"." msgstr "" -#: pretix/base/settings.py:4170 +#: pretix/base/settings.py:4183 msgid "The last payment date cannot be before the end of presale." msgstr "" -#: pretix/base/settings.py:4178 +#: pretix/base/settings.py:4191 #, python-brace-format msgid "The value \"{identifier}\" is not a valid sales channel." msgstr "" -#: pretix/base/settings.py:4193 +#: pretix/base/settings.py:4206 msgid "This needs to be disabled if other NFC-based types are active." msgstr "" @@ -11919,7 +12075,7 @@ msgid "You do not have access to this page." msgstr "" #: pretix/base/templates/403.html:20 pretix/base/templates/404.html:16 -#: pretix/control/templates/pretixcontrol/base.html:199 +#: pretix/control/templates/pretixcontrol/base.html:200 #: pretix/control/templates/pretixcontrol/user/staff_session_start.html:4 #: pretix/control/templates/pretixcontrol/user/staff_session_start.html:6 #: pretix/presale/templates/pretixpresale/event/offline.html:21 @@ -12071,6 +12227,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcards.html:98 #: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:114 #: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:21 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:214 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:390 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:114 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:95 @@ -12130,23 +12287,23 @@ msgstr "" msgid "%(number)s days %(relation)s %(relation_to)s at %(time_of_day)s" msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:5 -#: pretix/base/templates/pretixbase/redirect.html:9 +#: pretix/base/templates/pretixbase/redirect.html:6 +#: pretix/base/templates/pretixbase/redirect.html:10 msgid "Redirect" msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:11 +#: pretix/base/templates/pretixbase/redirect.html:12 #, python-format msgid "" "The link you clicked on wants to redirect you to a destination on the " "website %(host)s." msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:14 +#: pretix/base/templates/pretixbase/redirect.html:15 msgid "Please only proceed if you trust this website to be safe." msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:20 +#: pretix/base/templates/pretixbase/redirect.html:21 #, python-format msgid "Proceed to %(host)s" msgstr "" @@ -12614,8 +12771,8 @@ msgid "Support for check-in questions" msgstr "" #: pretix/control/forms/checkin.py:197 pretix/control/forms/checkin.py:213 -#: pretix/control/forms/filter.py:2677 pretix/control/forms/filter.py:2719 -#: pretix/control/forms/filter.py:2884 +#: pretix/control/forms/filter.py:2683 pretix/control/forms/filter.py:2725 +#: pretix/control/forms/filter.py:2890 msgid "All gates" msgstr "" @@ -12755,33 +12912,33 @@ msgid "" "{error}" msgstr "" -#: pretix/control/forms/event.py:587 pretix/control/forms/organizer.py:579 +#: pretix/control/forms/event.py:587 pretix/control/forms/organizer.py:588 msgid "Name format" msgstr "" -#: pretix/control/forms/event.py:588 pretix/control/forms/organizer.py:580 +#: pretix/control/forms/event.py:588 pretix/control/forms/organizer.py:589 msgid "" "This defines how pretix will ask for human names. Changing this after you " "already received orders might lead to unexpected behavior when sorting or " "changing names." msgstr "" -#: pretix/control/forms/event.py:593 pretix/control/forms/organizer.py:585 +#: pretix/control/forms/event.py:593 pretix/control/forms/organizer.py:594 msgid "Allowed titles" msgstr "" -#: pretix/control/forms/event.py:594 pretix/control/forms/organizer.py:586 +#: pretix/control/forms/event.py:594 pretix/control/forms/organizer.py:595 msgid "" "If the naming scheme you defined above allows users to input a title, you " "can use this to restrict the set of selectable titles." msgstr "" -#: pretix/control/forms/event.py:712 pretix/control/forms/organizer.py:661 +#: pretix/control/forms/event.py:712 pretix/control/forms/organizer.py:671 #, python-brace-format msgid "Ask for {fields}, display like {example}" msgstr "" -#: pretix/control/forms/event.py:718 pretix/control/forms/organizer.py:667 +#: pretix/control/forms/event.py:718 pretix/control/forms/organizer.py:677 msgid "Free text input" msgstr "" @@ -12917,15 +13074,15 @@ msgid "" "shop must be enabled." msgstr "" -#: pretix/control/forms/event.py:1150 pretix/control/forms/organizer.py:702 +#: pretix/control/forms/event.py:1150 pretix/control/forms/organizer.py:712 msgid "Bcc address" msgstr "" -#: pretix/control/forms/event.py:1152 pretix/control/forms/organizer.py:704 +#: pretix/control/forms/event.py:1152 pretix/control/forms/organizer.py:714 msgid "All emails will be sent to this address as a Bcc copy." msgstr "" -#: pretix/control/forms/event.py:1160 pretix/control/forms/organizer.py:713 +#: pretix/control/forms/event.py:1160 pretix/control/forms/organizer.py:723 msgid "Signature" msgstr "" @@ -12934,7 +13091,7 @@ msgstr "" msgid "This will be attached to every email. Available placeholders: {event}" msgstr "" -#: pretix/control/forms/event.py:1168 pretix/control/forms/organizer.py:721 +#: pretix/control/forms/event.py:1168 pretix/control/forms/organizer.py:731 msgid "e.g. your contact details" msgstr "" @@ -12982,8 +13139,8 @@ msgstr "" #: pretix/control/forms/event.py:1264 pretix/control/forms/event.py:1338 #: pretix/control/forms/event.py:1348 pretix/control/forms/event.py:1358 #: pretix/control/forms/event.py:1363 pretix/control/forms/event.py:1375 -#: pretix/control/forms/organizer.py:732 pretix/control/forms/organizer.py:742 -#: pretix/control/forms/organizer.py:752 pretix/control/forms/organizer.py:762 +#: pretix/control/forms/organizer.py:742 pretix/control/forms/organizer.py:752 +#: pretix/control/forms/organizer.py:762 pretix/control/forms/organizer.py:772 #: pretix/control/templates/pretixcontrol/event/mail.html:88 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:122 msgid "Text" @@ -13376,8 +13533,8 @@ msgid "Follow-up due" msgstr "" #: pretix/control/forms/filter.py:483 pretix/control/forms/filter.py:1267 -#: pretix/control/forms/filter.py:2180 pretix/control/forms/filter.py:2435 -#: pretix/control/forms/filter.py:2739 pretix/control/forms/filter.py:2758 +#: pretix/control/forms/filter.py:2186 pretix/control/forms/filter.py:2441 +#: pretix/control/forms/filter.py:2745 pretix/control/forms/filter.py:2764 #: pretix/control/forms/vouchers.py:151 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:121 #: pretix/plugins/sendmail/models.py:244 @@ -13385,9 +13542,9 @@ msgid "All products" msgstr "" #: pretix/control/forms/filter.py:487 pretix/control/forms/filter.py:1271 -#: pretix/control/forms/filter.py:2439 pretix/control/forms/filter.py:2743 -#: pretix/control/forms/vouchers.py:139 pretix/control/views/typeahead.py:663 -#: pretix/control/views/typeahead.py:780 +#: pretix/control/forms/filter.py:2445 pretix/control/forms/filter.py:2749 +#: pretix/control/forms/vouchers.py:139 pretix/control/views/typeahead.py:682 +#: pretix/control/views/typeahead.py:799 #, python-brace-format msgid "{product} – Any variation" msgstr "" @@ -13436,12 +13593,12 @@ msgstr "" #: pretix/control/forms/filter.py:927 pretix/control/forms/filter.py:932 #: pretix/control/forms/filter.py:1045 pretix/control/forms/filter.py:1050 -#: pretix/control/forms/filter.py:1969 pretix/control/forms/filter.py:1974 +#: pretix/control/forms/filter.py:1975 pretix/control/forms/filter.py:1980 msgid "All organizers" msgstr "" -#: pretix/control/forms/filter.py:1037 pretix/control/forms/filter.py:1953 -#: pretix/control/forms/filter.py:2963 +#: pretix/control/forms/filter.py:1037 pretix/control/forms/filter.py:1959 +#: pretix/control/forms/filter.py:2969 msgid "All events" msgstr "" @@ -13480,278 +13637,279 @@ msgctxt "subevent" msgid "Date doesn't start in selected date range." msgstr "" -#: pretix/control/forms/filter.py:1361 pretix/control/forms/filter.py:1955 +#: pretix/control/forms/filter.py:1367 pretix/control/forms/filter.py:1961 msgid "Shop live and presale running" msgstr "" -#: pretix/control/forms/filter.py:1362 pretix/control/forms/filter.py:2293 +#: pretix/control/forms/filter.py:1368 pretix/control/forms/filter.py:2299 msgid "Inactive" msgstr "" -#: pretix/control/forms/filter.py:1369 pretix/control/forms/filter.py:1372 -#: pretix/control/forms/filter.py:1547 pretix/control/forms/filter.py:1550 -#: pretix/control/forms/filter.py:1984 pretix/control/forms/filter.py:1987 -#: pretix/control/forms/filter.py:2617 +#: pretix/control/forms/filter.py:1375 pretix/control/forms/filter.py:1378 +#: pretix/control/forms/filter.py:1553 pretix/control/forms/filter.py:1556 +#: pretix/control/forms/filter.py:1990 pretix/control/forms/filter.py:1993 +#: pretix/control/forms/filter.py:2623 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:84 msgid "Date from" msgstr "" -#: pretix/control/forms/filter.py:1376 pretix/control/forms/filter.py:1379 -#: pretix/control/forms/filter.py:1554 pretix/control/forms/filter.py:1557 -#: pretix/control/forms/filter.py:1991 pretix/control/forms/filter.py:1994 -#: pretix/control/forms/filter.py:2622 +#: pretix/control/forms/filter.py:1382 pretix/control/forms/filter.py:1385 +#: pretix/control/forms/filter.py:1560 pretix/control/forms/filter.py:1563 +#: pretix/control/forms/filter.py:1997 pretix/control/forms/filter.py:2000 +#: pretix/control/forms/filter.py:2628 msgid "Date until" msgstr "" -#: pretix/control/forms/filter.py:1383 pretix/control/forms/filter.py:1561 +#: pretix/control/forms/filter.py:1389 pretix/control/forms/filter.py:1567 msgid "Start time from" msgstr "" -#: pretix/control/forms/filter.py:1388 pretix/control/forms/filter.py:1566 +#: pretix/control/forms/filter.py:1394 pretix/control/forms/filter.py:1572 msgid "Start time until" msgstr "" -#: pretix/control/forms/filter.py:1393 pretix/control/forms/filter.py:1571 +#: pretix/control/forms/filter.py:1399 pretix/control/forms/filter.py:1577 #: pretix/control/forms/rrule.py:112 pretix/control/forms/rrule.py:151 msgid "Weekday" msgstr "" -#: pretix/control/forms/filter.py:1721 pretix/control/forms/filter.py:1723 -#: pretix/control/forms/filter.py:1772 pretix/control/forms/filter.py:1774 -#: pretix/control/forms/filter.py:1844 pretix/control/forms/filter.py:1846 -#: pretix/control/forms/filter.py:1898 pretix/control/forms/filter.py:1900 -#: pretix/control/forms/filter.py:2307 pretix/control/forms/filter.py:2309 -#: pretix/control/forms/filter.py:2875 pretix/control/forms/filter.py:2877 +#: pretix/control/forms/filter.py:1727 pretix/control/forms/filter.py:1729 +#: pretix/control/forms/filter.py:1778 pretix/control/forms/filter.py:1780 +#: pretix/control/forms/filter.py:1850 pretix/control/forms/filter.py:1852 +#: pretix/control/forms/filter.py:1904 pretix/control/forms/filter.py:1906 +#: pretix/control/forms/filter.py:2313 pretix/control/forms/filter.py:2315 +#: pretix/control/forms/filter.py:2881 pretix/control/forms/filter.py:2883 msgid "Search query" msgstr "" -#: pretix/control/forms/filter.py:1783 pretix/control/forms/filter.py:1855 +#: pretix/control/forms/filter.py:1789 pretix/control/forms/filter.py:1861 #: pretix/control/templates/pretixcontrol/organizers/customer.html:47 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:47 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:54 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:126 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:133 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:37 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:49 msgid "active" msgstr "" -#: pretix/control/forms/filter.py:1785 +#: pretix/control/forms/filter.py:1791 #: pretix/control/templates/pretixcontrol/organizers/customer.html:45 msgid "not yet activated" msgstr "" -#: pretix/control/forms/filter.py:1789 +#: pretix/control/forms/filter.py:1795 #: pretix/control/templates/pretixcontrol/organizers/customer.html:113 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:6 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:12 -#: pretix/presale/views/customer.py:368 +#: pretix/presale/views/customer.py:370 msgid "Memberships" msgstr "" -#: pretix/control/forms/filter.py:1793 +#: pretix/control/forms/filter.py:1799 msgid "Has no memberships" msgstr "" -#: pretix/control/forms/filter.py:1794 +#: pretix/control/forms/filter.py:1800 msgid "Has any membership" msgstr "" -#: pretix/control/forms/filter.py:1795 +#: pretix/control/forms/filter.py:1801 msgid "Has valid membership" msgstr "" -#: pretix/control/forms/filter.py:1954 +#: pretix/control/forms/filter.py:1960 msgid "Shop live" msgstr "" -#: pretix/control/forms/filter.py:1956 +#: pretix/control/forms/filter.py:1962 msgid "Shop not live" msgstr "" -#: pretix/control/forms/filter.py:1959 +#: pretix/control/forms/filter.py:1965 msgid "Single event running or in the future" msgstr "" -#: pretix/control/forms/filter.py:1960 +#: pretix/control/forms/filter.py:1966 msgid "Single event in the past" msgstr "" -#: pretix/control/forms/filter.py:2159 pretix/control/forms/filter.py:2161 +#: pretix/control/forms/filter.py:2165 pretix/control/forms/filter.py:2167 msgid "Search attendee…" msgstr "" -#: pretix/control/forms/filter.py:2166 +#: pretix/control/forms/filter.py:2172 #: pretix/plugins/checkinlists/exporters.py:107 msgid "Check-in status" msgstr "" -#: pretix/control/forms/filter.py:2168 +#: pretix/control/forms/filter.py:2174 #: pretix/plugins/checkinlists/exporters.py:109 msgid "All attendees" msgstr "" -#: pretix/control/forms/filter.py:2169 +#: pretix/control/forms/filter.py:2175 #: pretix/control/templates/pretixcontrol/checkin/index.html:183 #: pretix/control/templates/pretixcontrol/checkin/lists.html:104 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:138 #: pretix/plugins/checkinlists/exporters.py:110 #: pretix/plugins/checkinlists/exporters.py:500 msgid "Checked in" msgstr "" -#: pretix/control/forms/filter.py:2170 +#: pretix/control/forms/filter.py:2176 #: pretix/plugins/checkinlists/exporters.py:111 msgctxt "checkin state" msgid "Present" msgstr "" -#: pretix/control/forms/filter.py:2171 +#: pretix/control/forms/filter.py:2177 #: pretix/plugins/checkinlists/exporters.py:112 msgctxt "checkin state" msgid "Checked in but left" msgstr "" -#: pretix/control/forms/filter.py:2172 +#: pretix/control/forms/filter.py:2178 #: pretix/control/templates/pretixcontrol/checkin/index.html:178 #: pretix/plugins/checkinlists/exporters.py:113 msgid "Not checked in" msgstr "" -#: pretix/control/forms/filter.py:2191 +#: pretix/control/forms/filter.py:2197 msgctxt "subevent" msgid "Date start from" msgstr "" -#: pretix/control/forms/filter.py:2197 +#: pretix/control/forms/filter.py:2203 msgctxt "subevent" msgid "Date start until" msgstr "" -#: pretix/control/forms/filter.py:2298 pretix/control/forms/filter.py:2301 +#: pretix/control/forms/filter.py:2304 pretix/control/forms/filter.py:2307 #: pretix/control/templates/pretixcontrol/users/index.html:52 msgid "Administrator" msgstr "" -#: pretix/control/forms/filter.py:2302 +#: pretix/control/forms/filter.py:2308 msgid "No administrator" msgstr "" -#: pretix/control/forms/filter.py:2372 +#: pretix/control/forms/filter.py:2378 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:51 msgid "Valid" msgstr "" -#: pretix/control/forms/filter.py:2373 +#: pretix/control/forms/filter.py:2379 msgid "Unredeemed" msgstr "" -#: pretix/control/forms/filter.py:2374 +#: pretix/control/forms/filter.py:2380 msgid "Redeemed at least once" msgstr "" -#: pretix/control/forms/filter.py:2375 +#: pretix/control/forms/filter.py:2381 msgid "Fully redeemed" msgstr "" -#: pretix/control/forms/filter.py:2377 +#: pretix/control/forms/filter.py:2383 msgid "Redeemed and checked in with ticket" msgstr "" -#: pretix/control/forms/filter.py:2382 +#: pretix/control/forms/filter.py:2388 msgid "Quota handling" msgstr "" -#: pretix/control/forms/filter.py:2386 +#: pretix/control/forms/filter.py:2392 msgid "Allow to ignore quota" msgstr "" -#: pretix/control/forms/filter.py:2391 pretix/control/forms/filter.py:2393 +#: pretix/control/forms/filter.py:2397 pretix/control/forms/filter.py:2399 msgid "Filter by tag" msgstr "" -#: pretix/control/forms/filter.py:2398 pretix/control/forms/filter.py:2400 +#: pretix/control/forms/filter.py:2404 pretix/control/forms/filter.py:2406 msgid "Search voucher" msgstr "" -#: pretix/control/forms/filter.py:2445 pretix/control/forms/vouchers.py:130 -#: pretix/control/views/typeahead.py:788 pretix/control/views/typeahead.py:792 +#: pretix/control/forms/filter.py:2451 pretix/control/forms/vouchers.py:130 +#: pretix/control/views/typeahead.py:807 pretix/control/views/typeahead.py:811 #: pretix/control/views/vouchers.py:133 #, python-brace-format msgid "Any product in quota \"{quota}\"" msgstr "" -#: pretix/control/forms/filter.py:2567 +#: pretix/control/forms/filter.py:2573 msgid "Refund status" msgstr "" -#: pretix/control/forms/filter.py:2569 +#: pretix/control/forms/filter.py:2575 msgid "All open refunds" msgstr "" -#: pretix/control/forms/filter.py:2570 +#: pretix/control/forms/filter.py:2576 msgid "All refunds" msgstr "" -#: pretix/control/forms/filter.py:2608 pretix/plugins/reports/exporters.py:704 +#: pretix/control/forms/filter.py:2614 pretix/plugins/reports/exporters.py:704 msgid "Date filter" msgstr "" -#: pretix/control/forms/filter.py:2610 pretix/plugins/reports/exporters.py:706 +#: pretix/control/forms/filter.py:2616 pretix/plugins/reports/exporters.py:706 msgid "Filter by…" msgstr "" -#: pretix/control/forms/filter.py:2612 pretix/plugins/reports/exporters.py:708 +#: pretix/control/forms/filter.py:2618 pretix/plugins/reports/exporters.py:708 msgid "Date of last successful payment" msgstr "" -#: pretix/control/forms/filter.py:2652 +#: pretix/control/forms/filter.py:2658 msgid "All check-ins" msgstr "" -#: pretix/control/forms/filter.py:2653 +#: pretix/control/forms/filter.py:2659 msgid "Successful check-ins" msgstr "" -#: pretix/control/forms/filter.py:2654 +#: pretix/control/forms/filter.py:2660 msgid "Unsuccessful check-ins" msgstr "" -#: pretix/control/forms/filter.py:2659 +#: pretix/control/forms/filter.py:2665 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:64 #: pretix/plugins/checkinlists/exporters.py:758 msgid "Scan type" msgstr "" -#: pretix/control/forms/filter.py:2661 +#: pretix/control/forms/filter.py:2667 msgid "All directions" msgstr "" -#: pretix/control/forms/filter.py:2670 pretix/control/forms/filter.py:2710 +#: pretix/control/forms/filter.py:2676 pretix/control/forms/filter.py:2716 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:67 #: pretix/plugins/checkinlists/exporters.py:764 msgid "Device" msgstr "" -#: pretix/control/forms/filter.py:2671 pretix/control/forms/filter.py:2706 -#: pretix/control/forms/filter.py:2897 +#: pretix/control/forms/filter.py:2677 pretix/control/forms/filter.py:2712 +#: pretix/control/forms/filter.py:2903 msgid "All devices" msgstr "" -#: pretix/control/forms/filter.py:2685 -msgctxt "filter" -msgid "Start date" -msgstr "" - #: pretix/control/forms/filter.py:2691 msgctxt "filter" +msgid "Start date" +msgstr "" + +#: pretix/control/forms/filter.py:2697 +msgctxt "filter" msgid "End date" msgstr "" -#: pretix/control/forms/filter.py:2733 +#: pretix/control/forms/filter.py:2739 #: pretix/plugins/checkinlists/exporters.py:882 msgid "All check-in lists" msgstr "" -#: pretix/control/forms/filter.py:2737 +#: pretix/control/forms/filter.py:2743 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:64 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:11 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:26 @@ -13766,24 +13924,24 @@ msgstr "" msgid "Check-in list" msgstr "" -#: pretix/control/forms/filter.py:2888 +#: pretix/control/forms/filter.py:2894 #: pretix/control/templates/pretixcontrol/organizers/devices.html:86 msgid "Software" msgstr "" -#: pretix/control/forms/filter.py:2895 +#: pretix/control/forms/filter.py:2901 msgid "Device status" msgstr "" -#: pretix/control/forms/filter.py:2898 +#: pretix/control/forms/filter.py:2904 msgid "Active devices" msgstr "" -#: pretix/control/forms/filter.py:2899 +#: pretix/control/forms/filter.py:2905 msgid "Revoked devices" msgstr "" -#: pretix/control/forms/filter.py:2954 pretix/control/forms/filter.py:2956 +#: pretix/control/forms/filter.py:2960 pretix/control/forms/filter.py:2962 msgid "Search email address or subject" msgstr "" @@ -14804,111 +14962,111 @@ msgstr "" msgid "You may set only one organizer domain." msgstr "" -#: pretix/control/forms/organizer.py:322 +#: pretix/control/forms/organizer.py:331 msgid "Provided by a plugin" msgstr "" -#: pretix/control/forms/organizer.py:438 +#: pretix/control/forms/organizer.py:447 msgid "" "The changes could not be saved because there would be no remaining team with " "the permission to change teams and permissions." msgstr "" -#: pretix/control/forms/organizer.py:487 pretix/control/forms/organizer.py:525 +#: pretix/control/forms/organizer.py:496 pretix/control/forms/organizer.py:534 msgid "" "Your device will not have access to anything, please select some events." msgstr "" -#: pretix/control/forms/organizer.py:677 pretix/plugins/stripe/payment.py:330 +#: pretix/control/forms/organizer.py:687 pretix/plugins/stripe/payment.py:330 msgid "experimental" msgstr "" -#: pretix/control/forms/organizer.py:683 +#: pretix/control/forms/organizer.py:693 msgid "" "This feature is currently in an experimental stage. It only supports very " "limited use cases and might change at any point." msgstr "" -#: pretix/control/forms/organizer.py:706 +#: pretix/control/forms/organizer.py:716 msgid "Sensitive emails like password resets will not be sent in Bcc." msgstr "" -#: pretix/control/forms/organizer.py:716 +#: pretix/control/forms/organizer.py:726 msgid "This will be attached to every email." msgstr "" -#: pretix/control/forms/organizer.py:790 pretix/control/logdisplay.py:671 +#: pretix/control/forms/organizer.py:800 pretix/control/logdisplay.py:671 #: pretix/control/views/user.py:850 pretix/presale/views/customer.py:289 -#: pretix/presale/views/customer.py:545 +#: pretix/presale/views/customer.py:547 msgid "Your password has been changed." msgstr "" -#: pretix/control/forms/organizer.py:823 +#: pretix/control/forms/organizer.py:833 msgctxt "webhooks" msgid "Event types" msgstr "" -#: pretix/control/forms/organizer.py:857 +#: pretix/control/forms/organizer.py:867 msgid "Gift card value" msgstr "" -#: pretix/control/forms/organizer.py:961 +#: pretix/control/forms/organizer.py:971 msgid "An medium with this type and identifier is already registered." msgstr "" -#: pretix/control/forms/organizer.py:1059 +#: pretix/control/forms/organizer.py:1069 msgid "An account with this customer ID is already registered." msgstr "" -#: pretix/control/forms/organizer.py:1076 +#: pretix/control/forms/organizer.py:1086 #: pretix/control/templates/pretixcontrol/organizers/customer.html:62 #: pretix/presale/forms/customer.py:169 pretix/presale/forms/customer.py:507 msgid "Phone" msgstr "" -#: pretix/control/forms/organizer.py:1190 +#: pretix/control/forms/organizer.py:1200 msgctxt "sso_oidc" msgid "Base URL" msgstr "" -#: pretix/control/forms/organizer.py:1194 +#: pretix/control/forms/organizer.py:1204 msgctxt "sso_oidc" msgid "Client ID" msgstr "" -#: pretix/control/forms/organizer.py:1198 +#: pretix/control/forms/organizer.py:1208 msgctxt "sso_oidc" msgid "Client secret" msgstr "" -#: pretix/control/forms/organizer.py:1202 +#: pretix/control/forms/organizer.py:1212 msgctxt "sso_oidc" msgid "Scope" msgstr "" -#: pretix/control/forms/organizer.py:1203 +#: pretix/control/forms/organizer.py:1213 msgctxt "sso_oidc" msgid "Multiple scopes separated with spaces." msgstr "" -#: pretix/control/forms/organizer.py:1207 +#: pretix/control/forms/organizer.py:1217 msgctxt "sso_oidc" msgid "User ID field" msgstr "" -#: pretix/control/forms/organizer.py:1208 +#: pretix/control/forms/organizer.py:1218 msgctxt "sso_oidc" msgid "" "We will assume that the contents of the user ID fields are unique and can " "never change for a user." msgstr "" -#: pretix/control/forms/organizer.py:1214 +#: pretix/control/forms/organizer.py:1224 msgctxt "sso_oidc" msgid "Email field" msgstr "" -#: pretix/control/forms/organizer.py:1215 +#: pretix/control/forms/organizer.py:1225 msgctxt "sso_oidc" msgid "" "We will assume that all email addresses received from the SSO provider are " @@ -14916,17 +15074,17 @@ msgid "" "security issues might arise." msgstr "" -#: pretix/control/forms/organizer.py:1222 +#: pretix/control/forms/organizer.py:1232 msgctxt "sso_oidc" msgid "Phone field" msgstr "" -#: pretix/control/forms/organizer.py:1226 +#: pretix/control/forms/organizer.py:1236 msgctxt "sso_oidc" msgid "Query parameters" msgstr "" -#: pretix/control/forms/organizer.py:1227 +#: pretix/control/forms/organizer.py:1237 #, python-brace-format msgctxt "sso_oidc" msgid "" @@ -14934,19 +15092,19 @@ msgid "" "endpoint. Enter as: {example}" msgstr "" -#: pretix/control/forms/organizer.py:1288 +#: pretix/control/forms/organizer.py:1298 msgid "Invalidate old client secret and generate a new one" msgstr "" -#: pretix/control/forms/organizer.py:1321 +#: pretix/control/forms/organizer.py:1331 msgid "Organizer short name" msgstr "" -#: pretix/control/forms/organizer.py:1325 +#: pretix/control/forms/organizer.py:1335 msgid "Allow access to reusable media" msgstr "" -#: pretix/control/forms/organizer.py:1326 +#: pretix/control/forms/organizer.py:1336 msgid "" "This is required if you want the other organizer to participate in a shared " "system with e.g. NFC payment chips. You should only use this option for " @@ -14955,19 +15113,19 @@ msgid "" "to interact with the media type." msgstr "" -#: pretix/control/forms/organizer.py:1342 +#: pretix/control/forms/organizer.py:1352 msgid "The selected organizer does not exist or cannot be invited." msgstr "" -#: pretix/control/forms/organizer.py:1344 +#: pretix/control/forms/organizer.py:1354 msgid "The selected organizer has already been invited." msgstr "" -#: pretix/control/forms/organizer.py:1379 +#: pretix/control/forms/organizer.py:1389 msgid "A sales channel with the same identifier already exists." msgstr "" -#: pretix/control/forms/organizer.py:1391 +#: pretix/control/forms/organizer.py:1401 msgid "Events with active plugin" msgstr "" @@ -15434,7 +15592,7 @@ msgid "The check-in of position #{posid} on list \"{list}\" has been reverted." msgstr "" #: pretix/control/logdisplay.py:359 pretix/control/logdisplay.py:361 -#: pretix/control/logdisplay.py:995 pretix/control/logdisplay.py:997 +#: pretix/control/logdisplay.py:998 pretix/control/logdisplay.py:1000 msgid "(unknown)" msgstr "" @@ -15484,7 +15642,7 @@ msgstr "" msgid "The order has been canceled (comment: \"{comment}\")." msgstr "" -#: pretix/control/logdisplay.py:422 pretix/control/views/orders.py:1559 +#: pretix/control/logdisplay.py:422 pretix/control/views/orders.py:1573 #: pretix/presale/views/order.py:1138 msgid "The order has been canceled." msgstr "" @@ -15523,11 +15681,11 @@ msgstr "" msgid "Internal error while transferring data to {provider_display_name}." msgstr "" -#: pretix/control/logdisplay.py:489 pretix/control/logdisplay.py:842 +#: pretix/control/logdisplay.py:489 pretix/control/logdisplay.py:845 msgid "The settings of a payment provider have been changed." msgstr "" -#: pretix/control/logdisplay.py:492 pretix/control/logdisplay.py:841 +#: pretix/control/logdisplay.py:492 pretix/control/logdisplay.py:844 msgid "The settings of a ticket output provider have been changed." msgstr "" @@ -15568,11 +15726,11 @@ msgstr "" msgid "The order has been set to require payment before use." msgstr "" -#: pretix/control/logdisplay.py:511 pretix/control/views/orders.py:1564 +#: pretix/control/logdisplay.py:511 pretix/control/views/orders.py:1578 msgid "The order has been marked as expired." msgstr "" -#: pretix/control/logdisplay.py:512 pretix/control/views/orders.py:1466 +#: pretix/control/logdisplay.py:512 pretix/control/views/orders.py:1480 msgid "The order has been marked as paid." msgstr "" @@ -15584,7 +15742,7 @@ msgstr "" msgid "The order has been refunded." msgstr "" -#: pretix/control/logdisplay.py:515 pretix/control/views/orders.py:1904 +#: pretix/control/logdisplay.py:515 pretix/control/views/orders.py:1918 msgid "The order has been reactivated." msgstr "" @@ -15596,7 +15754,7 @@ msgstr "" msgid "The order requires approval before it can continue to be processed." msgstr "" -#: pretix/control/logdisplay.py:519 pretix/control/views/orders.py:786 +#: pretix/control/logdisplay.py:519 pretix/control/views/orders.py:800 msgid "The order has been approved." msgstr "" @@ -15635,7 +15793,7 @@ msgstr "" msgid "The order locale has been changed." msgstr "" -#: pretix/control/logdisplay.py:531 pretix/control/views/orders.py:1603 +#: pretix/control/logdisplay.py:531 pretix/control/views/orders.py:1617 #: pretix/presale/views/order.py:797 pretix/presale/views/order.py:877 msgid "The invoice has been generated." msgstr "" @@ -15644,11 +15802,11 @@ msgstr "" msgid "The invoice could not be generated." msgstr "" -#: pretix/control/logdisplay.py:533 pretix/control/views/orders.py:1684 +#: pretix/control/logdisplay.py:533 pretix/control/views/orders.py:1698 msgid "The invoice has been regenerated." msgstr "" -#: pretix/control/logdisplay.py:534 pretix/control/views/orders.py:1741 +#: pretix/control/logdisplay.py:534 pretix/control/views/orders.py:1755 #: pretix/presale/views/order.py:897 msgid "The invoice has been reissued." msgstr "" @@ -15706,7 +15864,7 @@ msgid "An unidentified type email has been sent." msgstr "" #: pretix/control/logdisplay.py:549 pretix/control/logdisplay.py:742 -#: pretix/control/logdisplay.py:748 pretix/control/logdisplay.py:776 +#: pretix/control/logdisplay.py:751 pretix/control/logdisplay.py:779 msgid "Sending of an email has failed." msgstr "" @@ -15902,7 +16060,7 @@ msgstr "" msgid "Your account has been disabled." msgstr "" -#: pretix/control/logdisplay.py:680 pretix/presale/views/customer.py:642 +#: pretix/control/logdisplay.py:680 pretix/presale/views/customer.py:644 #, python-brace-format msgid "Your email address has been changed from {old_email} to {email}." msgstr "" @@ -15934,27 +16092,27 @@ msgstr "" msgid "The organizer settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:704 pretix/control/logdisplay.py:849 +#: pretix/control/logdisplay.py:704 pretix/control/logdisplay.py:852 msgid "The footer links have been changed." msgstr "" -#: pretix/control/logdisplay.py:705 pretix/control/logdisplay.py:754 +#: pretix/control/logdisplay.py:705 pretix/control/logdisplay.py:757 msgid "A scheduled export has been added." msgstr "" -#: pretix/control/logdisplay.py:706 pretix/control/logdisplay.py:755 +#: pretix/control/logdisplay.py:706 pretix/control/logdisplay.py:758 msgid "A scheduled export has been changed." msgstr "" -#: pretix/control/logdisplay.py:707 pretix/control/logdisplay.py:756 +#: pretix/control/logdisplay.py:707 pretix/control/logdisplay.py:759 msgid "A scheduled export has been deleted." msgstr "" -#: pretix/control/logdisplay.py:708 pretix/control/logdisplay.py:757 +#: pretix/control/logdisplay.py:708 pretix/control/logdisplay.py:760 msgid "A scheduled export has been executed." msgstr "" -#: pretix/control/logdisplay.py:709 pretix/control/logdisplay.py:758 +#: pretix/control/logdisplay.py:709 pretix/control/logdisplay.py:761 #, python-brace-format msgid "A scheduled export has failed: {reason}." msgstr "" @@ -16043,7 +16201,7 @@ msgstr "" msgid "The membership type has been deleted." msgstr "" -#: pretix/control/logdisplay.py:731 pretix/control/views/organizer.py:3556 +#: pretix/control/logdisplay.py:731 pretix/control/views/organizer.py:3591 msgid "The sales channel has been created." msgstr "" @@ -16100,539 +16258,554 @@ msgid "The reusable medium has been changed." msgstr "" #: pretix/control/logdisplay.py:746 -msgid "The medium has been connected to a new ticket." +msgid "A new ticket has been added to the medium." msgstr "" #: pretix/control/logdisplay.py:747 -msgid "The medium has been connected to a new gift card." +msgid "A ticket has been removed from the medium." +msgstr "" + +#: pretix/control/logdisplay.py:748 +msgid "The medium has been connected to a new ticket." msgstr "" #: pretix/control/logdisplay.py:749 -msgid "The event's internal comment has been updated." +#, python-brace-format +msgid "" +"The ticket #{positionid} was exchanged for reusable medium " +"{medium_identifier}." msgstr "" #: pretix/control/logdisplay.py:750 -msgid "The event has been canceled." -msgstr "" - -#: pretix/control/logdisplay.py:751 -msgid "An event has been deleted." +msgid "The medium has been connected to a new gift card." msgstr "" #: pretix/control/logdisplay.py:752 -msgid "A removal process for personal data has been started." +msgid "The event's internal comment has been updated." msgstr "" #: pretix/control/logdisplay.py:753 +msgid "The event has been canceled." +msgstr "" + +#: pretix/control/logdisplay.py:754 +msgid "An event has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:755 +msgid "A removal process for personal data has been started." +msgstr "" + +#: pretix/control/logdisplay.py:756 msgid "A removal process for personal data has been completed." msgstr "" -#: pretix/control/logdisplay.py:759 +#: pretix/control/logdisplay.py:762 msgid "The user has been created." msgstr "" -#: pretix/control/logdisplay.py:760 +#: pretix/control/logdisplay.py:763 #, python-brace-format msgid "" "A first login using {agent_type} on {os_type} from {country} has been " "detected." msgstr "" -#: pretix/control/logdisplay.py:762 pretix/control/views/user.py:474 +#: pretix/control/logdisplay.py:765 pretix/control/views/user.py:474 #: pretix/control/views/user.py:534 pretix/control/views/user.py:593 msgid "Two-factor authentication has been enabled." msgstr "" -#: pretix/control/logdisplay.py:763 pretix/control/views/user.py:377 +#: pretix/control/logdisplay.py:766 pretix/control/views/user.py:377 #: pretix/control/views/user.py:609 msgid "Two-factor authentication has been disabled." msgstr "" -#: pretix/control/logdisplay.py:764 pretix/control/views/user.py:626 +#: pretix/control/logdisplay.py:767 pretix/control/views/user.py:626 msgid "Your two-factor emergency codes have been regenerated." msgstr "" -#: pretix/control/logdisplay.py:765 +#: pretix/control/logdisplay.py:768 msgid "A two-factor emergency code has been generated." msgstr "" -#: pretix/control/logdisplay.py:766 +#: pretix/control/logdisplay.py:769 #, python-brace-format msgid "" "A new two-factor authentication device \"{name}\" has been added to your " "account." msgstr "" -#: pretix/control/logdisplay.py:768 +#: pretix/control/logdisplay.py:771 #, python-brace-format msgid "" "The two-factor authentication device \"{name}\" has been removed from your " "account." msgstr "" -#: pretix/control/logdisplay.py:770 +#: pretix/control/logdisplay.py:773 msgid "Notifications have been enabled." msgstr "" -#: pretix/control/logdisplay.py:771 +#: pretix/control/logdisplay.py:774 msgid "Notifications have been disabled." msgstr "" -#: pretix/control/logdisplay.py:772 +#: pretix/control/logdisplay.py:775 msgid "Your notification settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:773 +#: pretix/control/logdisplay.py:776 msgid "This user has been anonymized." msgstr "" -#: pretix/control/logdisplay.py:777 +#: pretix/control/logdisplay.py:780 msgid "Password reset mail sent." msgstr "" -#: pretix/control/logdisplay.py:778 +#: pretix/control/logdisplay.py:781 msgid "The password has been reset." msgstr "" -#: pretix/control/logdisplay.py:779 +#: pretix/control/logdisplay.py:782 msgid "" "A repeated password reset has been denied, as the last request was less than " "24 hours ago." msgstr "" -#: pretix/control/logdisplay.py:781 +#: pretix/control/logdisplay.py:784 #, python-brace-format msgid "The organizer \"{name}\" has been deleted." msgstr "" -#: pretix/control/logdisplay.py:782 pretix/control/logdisplay.py:1013 +#: pretix/control/logdisplay.py:785 pretix/control/logdisplay.py:1016 msgid "A voucher has been sent to a person on the waiting list." msgstr "" -#: pretix/control/logdisplay.py:783 +#: pretix/control/logdisplay.py:786 msgid "An entry has been transferred to another waiting list." msgstr "" -#: pretix/control/logdisplay.py:784 +#: pretix/control/logdisplay.py:787 msgid "The team has been created." msgstr "" -#: pretix/control/logdisplay.py:785 +#: pretix/control/logdisplay.py:788 msgid "The team settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:786 +#: pretix/control/logdisplay.py:789 msgid "The team has been deleted." msgstr "" -#: pretix/control/logdisplay.py:787 pretix/control/views/organizer.py:2381 +#: pretix/control/logdisplay.py:790 pretix/control/views/organizer.py:2381 msgid "The gate has been created." msgstr "" -#: pretix/control/logdisplay.py:788 +#: pretix/control/logdisplay.py:791 msgid "The gate has been changed." msgstr "" -#: pretix/control/logdisplay.py:789 -msgid "The gate has been deleted." -msgstr "" - -#: pretix/control/logdisplay.py:790 -msgctxt "subevent" -msgid "The event date has been deleted." -msgstr "" - -#: pretix/control/logdisplay.py:791 -msgctxt "subevent" -msgid "The event date has been canceled." -msgstr "" - #: pretix/control/logdisplay.py:792 -msgctxt "subevent" -msgid "The event date has been changed." +msgid "The gate has been deleted." msgstr "" #: pretix/control/logdisplay.py:793 msgctxt "subevent" -msgid "The event date has been created." +msgid "The event date has been deleted." msgstr "" #: pretix/control/logdisplay.py:794 msgctxt "subevent" -msgid "A quota has been added to the event date." +msgid "The event date has been canceled." msgstr "" #: pretix/control/logdisplay.py:795 msgctxt "subevent" -msgid "A quota has been changed on the event date." +msgid "The event date has been changed." msgstr "" #: pretix/control/logdisplay.py:796 msgctxt "subevent" -msgid "A quota has been removed from the event date." +msgid "The event date has been created." msgstr "" #: pretix/control/logdisplay.py:797 -msgid "The device has been created." +msgctxt "subevent" +msgid "A quota has been added to the event date." msgstr "" #: pretix/control/logdisplay.py:798 -msgid "The device has been changed." +msgctxt "subevent" +msgid "A quota has been changed on the event date." msgstr "" #: pretix/control/logdisplay.py:799 -msgid "Access of the device has been revoked." +msgctxt "subevent" +msgid "A quota has been removed from the event date." msgstr "" #: pretix/control/logdisplay.py:800 -msgid "The device has been initialized." +msgid "The device has been created." msgstr "" #: pretix/control/logdisplay.py:801 -msgid "The access token of the device has been regenerated." +msgid "The device has been changed." msgstr "" #: pretix/control/logdisplay.py:802 -msgid "The device has notified the server of an hardware or software update." +msgid "Access of the device has been revoked." msgstr "" #: pretix/control/logdisplay.py:803 -msgid "The gift card has been created." +msgid "The device has been initialized." msgstr "" -#: pretix/control/logdisplay.py:804 pretix/control/views/organizer.py:1943 -msgid "The gift card has been changed." +#: pretix/control/logdisplay.py:804 +msgid "The access token of the device has been regenerated." msgstr "" #: pretix/control/logdisplay.py:805 -msgid "A manual transaction has been performed." +msgid "The device has notified the server of an hardware or software update." msgstr "" #: pretix/control/logdisplay.py:806 -msgid "A payment has been performed." +msgid "The gift card has been created." msgstr "" -#: pretix/control/logdisplay.py:807 -msgid "A refund has been performed. " +#: pretix/control/logdisplay.py:807 pretix/control/views/organizer.py:1943 +msgid "The gift card has been changed." msgstr "" #: pretix/control/logdisplay.py:808 +msgid "A manual transaction has been performed." +msgstr "" + +#: pretix/control/logdisplay.py:809 +msgid "A payment has been performed." +msgstr "" + +#: pretix/control/logdisplay.py:810 +msgid "A refund has been performed. " +msgstr "" + +#: pretix/control/logdisplay.py:811 #, python-brace-format msgid "The token \"{name}\" has been created." msgstr "" -#: pretix/control/logdisplay.py:809 +#: pretix/control/logdisplay.py:812 #, python-brace-format msgid "The token \"{name}\" has been revoked." msgstr "" -#: pretix/control/logdisplay.py:810 +#: pretix/control/logdisplay.py:813 msgid "The check-in and print log state has been reset." msgstr "" -#: pretix/control/logdisplay.py:817 pretix/control/logdisplay.py:876 +#: pretix/control/logdisplay.py:820 pretix/control/logdisplay.py:879 msgid "The plugin has been enabled." msgstr "" -#: pretix/control/logdisplay.py:818 pretix/control/logdisplay.py:877 -#: pretix/control/views/event.py:497 pretix/control/views/organizer.py:757 +#: pretix/control/logdisplay.py:821 pretix/control/logdisplay.py:880 +#: pretix/control/views/event.py:498 pretix/control/views/organizer.py:757 msgid "The plugin has been disabled." msgstr "" -#: pretix/control/logdisplay.py:821 pretix/control/logdisplay.py:880 +#: pretix/control/logdisplay.py:824 pretix/control/logdisplay.py:883 #, python-brace-format msgid "Plugin {val}" msgstr "" -#: pretix/control/logdisplay.py:836 +#: pretix/control/logdisplay.py:839 msgid "A meta property has been added to this event." msgstr "" -#: pretix/control/logdisplay.py:837 +#: pretix/control/logdisplay.py:840 msgid "A meta property has been removed from this event." msgstr "" -#: pretix/control/logdisplay.py:838 +#: pretix/control/logdisplay.py:841 msgid "A meta property has been changed on this event." msgstr "" -#: pretix/control/logdisplay.py:839 +#: pretix/control/logdisplay.py:842 msgid "The event settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:840 +#: pretix/control/logdisplay.py:843 msgid "The ticket download settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:843 +#: pretix/control/logdisplay.py:846 msgid "The shop has been taken live." msgstr "" -#: pretix/control/logdisplay.py:844 +#: pretix/control/logdisplay.py:847 msgid "The shop has been taken offline." msgstr "" -#: pretix/control/logdisplay.py:845 +#: pretix/control/logdisplay.py:848 msgid "The shop has been taken into test mode." msgstr "" -#: pretix/control/logdisplay.py:846 +#: pretix/control/logdisplay.py:849 msgid "The test mode has been disabled." msgstr "" -#: pretix/control/logdisplay.py:847 +#: pretix/control/logdisplay.py:850 msgid "The event has been created." msgstr "" -#: pretix/control/logdisplay.py:848 +#: pretix/control/logdisplay.py:851 msgid "The event details have been changed." msgstr "" -#: pretix/control/logdisplay.py:850 +#: pretix/control/logdisplay.py:853 msgid "An answer option has been added to the question." msgstr "" -#: pretix/control/logdisplay.py:851 +#: pretix/control/logdisplay.py:854 msgid "An answer option has been removed from the question." msgstr "" -#: pretix/control/logdisplay.py:852 +#: pretix/control/logdisplay.py:855 msgid "An answer option has been changed." msgstr "" -#: pretix/control/logdisplay.py:853 +#: pretix/control/logdisplay.py:856 msgid "A user has been added to the event team." msgstr "" -#: pretix/control/logdisplay.py:854 +#: pretix/control/logdisplay.py:857 msgid "A user has been invited to the event team." msgstr "" -#: pretix/control/logdisplay.py:855 +#: pretix/control/logdisplay.py:858 msgid "A user's permissions have been changed." msgstr "" -#: pretix/control/logdisplay.py:856 +#: pretix/control/logdisplay.py:859 msgid "A user has been removed from the event team." msgstr "" -#: pretix/control/logdisplay.py:863 +#: pretix/control/logdisplay.py:866 msgid "The check-in list has been added." msgstr "" -#: pretix/control/logdisplay.py:864 pretix/control/logdisplay.py:865 +#: pretix/control/logdisplay.py:867 pretix/control/logdisplay.py:868 msgid "The check-in list has been deleted." msgstr "" -#: pretix/control/logdisplay.py:866 +#: pretix/control/logdisplay.py:869 msgid "The check-in list has been changed." msgstr "" -#: pretix/control/logdisplay.py:869 +#: pretix/control/logdisplay.py:872 #, python-brace-format msgid "Check-in list {val}" msgstr "" -#: pretix/control/logdisplay.py:896 +#: pretix/control/logdisplay.py:899 msgid "The product has been created." msgstr "" -#: pretix/control/logdisplay.py:897 +#: pretix/control/logdisplay.py:900 msgid "The product has been changed." msgstr "" -#: pretix/control/logdisplay.py:898 +#: pretix/control/logdisplay.py:901 msgid "The product has been reordered." msgstr "" -#: pretix/control/logdisplay.py:899 +#: pretix/control/logdisplay.py:902 msgid "The product has been deleted." msgstr "" -#: pretix/control/logdisplay.py:900 +#: pretix/control/logdisplay.py:903 msgid "An add-on has been added to this product." msgstr "" -#: pretix/control/logdisplay.py:901 +#: pretix/control/logdisplay.py:904 msgid "An add-on has been removed from this product." msgstr "" -#: pretix/control/logdisplay.py:902 +#: pretix/control/logdisplay.py:905 msgid "An add-on has been changed on this product." msgstr "" -#: pretix/control/logdisplay.py:903 +#: pretix/control/logdisplay.py:906 msgid "A bundled item has been added to this product." msgstr "" -#: pretix/control/logdisplay.py:904 +#: pretix/control/logdisplay.py:907 msgid "A bundled item has been removed from this product." msgstr "" -#: pretix/control/logdisplay.py:905 +#: pretix/control/logdisplay.py:908 msgid "A bundled item has been changed on this product." msgstr "" -#: pretix/control/logdisplay.py:906 +#: pretix/control/logdisplay.py:909 msgid "A program time has been added to this product." msgstr "" -#: pretix/control/logdisplay.py:907 +#: pretix/control/logdisplay.py:910 msgid "A program time has been changed on this product." msgstr "" -#: pretix/control/logdisplay.py:908 +#: pretix/control/logdisplay.py:911 msgid "A program time has been removed from this product." msgstr "" -#: pretix/control/logdisplay.py:915 +#: pretix/control/logdisplay.py:918 #, python-brace-format msgid "The variation \"{value}\" has been created." msgstr "" -#: pretix/control/logdisplay.py:916 +#: pretix/control/logdisplay.py:919 #, python-brace-format msgid "The variation \"{value}\" has been deleted." msgstr "" -#: pretix/control/logdisplay.py:917 +#: pretix/control/logdisplay.py:920 #, python-brace-format msgid "The variation \"{value}\" has been changed." msgstr "" -#: pretix/control/logdisplay.py:934 +#: pretix/control/logdisplay.py:937 #, python-brace-format msgid "Payment {local_id} has been confirmed." msgstr "" -#: pretix/control/logdisplay.py:935 +#: pretix/control/logdisplay.py:938 #, python-brace-format msgid "Payment {local_id} has been canceled." msgstr "" -#: pretix/control/logdisplay.py:936 +#: pretix/control/logdisplay.py:939 #, python-brace-format msgid "Canceling payment {local_id} has failed." msgstr "" -#: pretix/control/logdisplay.py:937 +#: pretix/control/logdisplay.py:940 #, python-brace-format msgid "Payment {local_id} has been started." msgstr "" -#: pretix/control/logdisplay.py:938 +#: pretix/control/logdisplay.py:941 #, python-brace-format msgid "Payment {local_id} has failed." msgstr "" -#: pretix/control/logdisplay.py:939 +#: pretix/control/logdisplay.py:942 #, python-brace-format msgid "The order could not be marked as paid: {message}" msgstr "" -#: pretix/control/logdisplay.py:940 -msgid "The order has been overpaid." -msgstr "" - -#: pretix/control/logdisplay.py:941 -#, python-brace-format -msgid "Refund {local_id} has been created." -msgstr "" - -#: pretix/control/logdisplay.py:942 -#, python-brace-format -msgid "Refund {local_id} has been created by an external entity." -msgstr "" - #: pretix/control/logdisplay.py:943 -msgid "The customer requested you to issue a refund." +msgid "The order has been overpaid." msgstr "" #: pretix/control/logdisplay.py:944 #, python-brace-format -msgid "Refund {local_id} has been completed." +msgid "Refund {local_id} has been created." msgstr "" #: pretix/control/logdisplay.py:945 #, python-brace-format -msgid "Refund {local_id} has been canceled." +msgid "Refund {local_id} has been created by an external entity." msgstr "" #: pretix/control/logdisplay.py:946 +msgid "The customer requested you to issue a refund." +msgstr "" + +#: pretix/control/logdisplay.py:947 +#, python-brace-format +msgid "Refund {local_id} has been completed." +msgstr "" + +#: pretix/control/logdisplay.py:948 +#, python-brace-format +msgid "Refund {local_id} has been canceled." +msgstr "" + +#: pretix/control/logdisplay.py:949 #, python-brace-format msgid "Refund {local_id} has failed." msgstr "" -#: pretix/control/logdisplay.py:953 +#: pretix/control/logdisplay.py:956 msgid "The quota has been added." msgstr "" -#: pretix/control/logdisplay.py:954 +#: pretix/control/logdisplay.py:957 msgid "The quota has been deleted." msgstr "" -#: pretix/control/logdisplay.py:955 +#: pretix/control/logdisplay.py:958 msgid "The quota has been changed." msgstr "" -#: pretix/control/logdisplay.py:956 +#: pretix/control/logdisplay.py:959 msgid "The quota has closed." msgstr "" -#: pretix/control/logdisplay.py:957 pretix/control/views/item.py:1236 +#: pretix/control/logdisplay.py:960 pretix/control/views/item.py:1236 msgid "The quota has been re-opened." msgstr "" -#: pretix/control/logdisplay.py:964 +#: pretix/control/logdisplay.py:967 msgid "The question has been added." msgstr "" -#: pretix/control/logdisplay.py:965 +#: pretix/control/logdisplay.py:968 msgid "The question has been deleted." msgstr "" -#: pretix/control/logdisplay.py:966 +#: pretix/control/logdisplay.py:969 msgid "The question has been changed." msgstr "" -#: pretix/control/logdisplay.py:967 +#: pretix/control/logdisplay.py:970 msgid "The question has been reordered." msgstr "" -#: pretix/control/logdisplay.py:974 +#: pretix/control/logdisplay.py:977 msgid "The discount has been added." msgstr "" -#: pretix/control/logdisplay.py:975 +#: pretix/control/logdisplay.py:978 msgid "The discount has been deleted." msgstr "" -#: pretix/control/logdisplay.py:976 +#: pretix/control/logdisplay.py:979 msgid "The discount has been changed." msgstr "" -#: pretix/control/logdisplay.py:1000 +#: pretix/control/logdisplay.py:1003 #, python-brace-format msgid "" "Position #{posid} has been checked in manually at {datetime} on list \"{list}" "\"." msgstr "" -#: pretix/control/logdisplay.py:1005 +#: pretix/control/logdisplay.py:1008 #, python-brace-format msgid "" "Position #{posid} has been checked in again at {datetime} on list \"{list}\"." msgstr "" -#: pretix/control/logdisplay.py:1014 +#: pretix/control/logdisplay.py:1017 msgid "An entry has been removed from the waiting list." msgstr "" -#: pretix/control/logdisplay.py:1015 +#: pretix/control/logdisplay.py:1018 msgid "An entry has been changed on the waiting list." msgstr "" -#: pretix/control/logdisplay.py:1016 +#: pretix/control/logdisplay.py:1019 msgid "An entry has been added to the waiting list." msgstr "" @@ -16682,9 +16855,9 @@ msgstr "" msgid "Payment" msgstr "" -#: pretix/control/navigation.py:78 pretix/control/views/event.py:1653 -#: pretix/control/views/event.py:1655 pretix/control/views/event.py:1687 -#: pretix/control/views/event.py:1692 pretix/control/views/subevents.py:310 +#: pretix/control/navigation.py:78 pretix/control/views/event.py:1657 +#: pretix/control/views/event.py:1659 pretix/control/views/event.py:1691 +#: pretix/control/views/event.py:1696 pretix/control/views/subevents.py:316 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:60 #: pretix/plugins/ticketoutputpdf/apps.py:55 #: pretix/plugins/ticketoutputpdf/exporters.py:68 @@ -16866,13 +17039,13 @@ msgid "You do not have permission to view this content." msgstr "" #: pretix/control/templates/pretixcontrol/auth/base.html:42 -#: pretix/control/templates/pretixcontrol/base.html:362 +#: pretix/control/templates/pretixcontrol/base.html:363 #, python-format msgid "You are currently working on behalf of %(user)s." msgstr "" #: pretix/control/templates/pretixcontrol/auth/base.html:47 -#: pretix/control/templates/pretixcontrol/base.html:367 +#: pretix/control/templates/pretixcontrol/base.html:368 msgid "Stop impersonating" msgstr "" @@ -17053,7 +17226,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:25 #: pretix/control/templates/pretixcontrol/organizers/device_bulk_edit.html:42 #: pretix/control/templates/pretixcontrol/organizers/device_edit.html:30 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:384 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:385 #: pretix/control/templates/pretixcontrol/organizers/export_form.html:50 #: pretix/control/templates/pretixcontrol/organizers/gate_edit.html:15 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_invite.html:15 @@ -17066,12 +17239,12 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/reusable_medium_edit.html:28 #: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html:15 #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html:28 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:47 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:71 #: pretix/control/templates/pretixcontrol/organizers/webhook_edit.html:21 -#: pretix/control/templates/pretixcontrol/pdf/index.html:46 +#: pretix/control/templates/pretixcontrol/pdf/index.html:44 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:634 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:368 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:289 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:292 #: pretix/control/templates/pretixcontrol/user/notifications.html:85 #: pretix/control/templates/pretixcontrol/user/settings.html:109 #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:13 @@ -17097,76 +17270,76 @@ msgstr "" msgid "Create a new account" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:103 +#: pretix/control/templates/pretixcontrol/base.html:104 msgid "Toggle navigation" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:118 -#: pretix/control/templates/pretixcontrol/base.html:143 -#: pretix/control/templates/pretixcontrol/base.html:147 +#: pretix/control/templates/pretixcontrol/base.html:119 +#: pretix/control/templates/pretixcontrol/base.html:144 #: pretix/control/templates/pretixcontrol/base.html:148 +#: pretix/control/templates/pretixcontrol/base.html:149 msgid "Go to shop" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:124 -#: pretix/control/templates/pretixcontrol/base.html:154 +#: pretix/control/templates/pretixcontrol/base.html:125 #: pretix/control/templates/pretixcontrol/base.html:155 +#: pretix/control/templates/pretixcontrol/base.html:156 msgid "Public profile" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:206 +#: pretix/control/templates/pretixcontrol/base.html:207 msgid "End admin session" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:218 +#: pretix/control/templates/pretixcontrol/base.html:219 msgid "Account Settings" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:223 -#: pretix/control/templates/pretixcontrol/base.html:225 +#: pretix/control/templates/pretixcontrol/base.html:224 +#: pretix/control/templates/pretixcontrol/base.html:226 #: pretix/presale/templates/pretixpresale/fragment_login_status.html:14 msgid "Log out" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:251 +#: pretix/control/templates/pretixcontrol/base.html:252 msgid "Organizer account" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:274 +#: pretix/control/templates/pretixcontrol/base.html:275 msgid "Search for events" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:331 +#: pretix/control/templates/pretixcontrol/base.html:332 #: pretix/presale/templates/pretixpresale/base.html:51 msgid "" "We've detected that you are using Microsoft Internet Explorer." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:334 +#: pretix/control/templates/pretixcontrol/base.html:335 #: pretix/presale/templates/pretixpresale/base.html:54 msgid "" "Internet Explorer is an old browser that does not support lots of recent web-" "based technologies and is no longer supported by this website." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:338 +#: pretix/control/templates/pretixcontrol/base.html:339 #: pretix/presale/templates/pretixpresale/base.html:58 msgid "" "We kindly ask you to move to one of our supported browsers, such as " "Microsoft Edge, Mozilla Firefox, Google Chrome, or Safari." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:347 +#: pretix/control/templates/pretixcontrol/base.html:348 msgid "" "Please leave a short comment on what you did in the following admin sessions:" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:378 +#: pretix/control/templates/pretixcontrol/base.html:379 msgid "Read more" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:395 +#: pretix/control/templates/pretixcontrol/base.html:396 msgid "" "Your event contains test mode orders even though " "test mode has been disabled. You should delete those orders " @@ -17174,11 +17347,11 @@ msgid "" "people from actually buying tickets." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:402 +#: pretix/control/templates/pretixcontrol/base.html:403 msgid "Show all test mode orders" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:410 +#: pretix/control/templates/pretixcontrol/base.html:411 msgid "" "Starting with version 1.2.0, pretix automatically checks for updates in the " "background. During this check, anonymous data is transmitted to servers " @@ -17187,41 +17360,41 @@ msgid "" "if a new update arrives. This message will disappear once you clicked it." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:423 +#: pretix/control/templates/pretixcontrol/base.html:424 msgid "" "Click here to do a license compliance check to make sure your usage of " "pretix is in line with pretix' license." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:432 +#: pretix/control/templates/pretixcontrol/base.html:433 msgid "" "The cronjob component of pretix was not executed in the last hours. Please " "check that you have completed all installation steps and your cronjob is " "executed correctly." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:441 +#: pretix/control/templates/pretixcontrol/base.html:442 msgid "" "pretix is running in debug mode. For security reasons, please never run " "debug mode on a production instance." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:447 +#: pretix/control/templates/pretixcontrol/base.html:448 msgid "" "For security reasons, please change your password before you continue. " "Afterwards you will be redirected to your original destination." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:459 +#: pretix/control/templates/pretixcontrol/base.html:460 #, python-format msgid "Times displayed in %(tz)s" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:465 +#: pretix/control/templates/pretixcontrol/base.html:466 msgid "running in development mode" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:474 +#: pretix/control/templates/pretixcontrol/base.html:475 #: pretix/presale/templates/pretixpresale/fragment_modals.html:38 #: pretix/presale/templates/pretixpresale/postmessage.html:27 #: pretix/presale/templates/pretixpresale/waiting.html:42 @@ -17238,6 +17411,7 @@ msgid "Receipt ID" msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:11 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:29 msgid "ID" msgstr "" @@ -17425,10 +17599,11 @@ msgstr[1] "" #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html:16 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:10 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:21 -#: pretix/control/templates/pretixcontrol/pdf/index.html:153 +#: pretix/control/templates/pretixcontrol/pdf/index.html:151 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:378 #: pretix/control/templates/pretixcontrol/subevents/delete.html:12 #: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:41 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:289 #: pretix/control/templates/pretixcontrol/user/2fa_delete.html:18 #: pretix/control/templates/pretixcontrol/user/2fa_disable.html:17 #: pretix/control/templates/pretixcontrol/user/2fa_enable.html:18 @@ -17485,7 +17660,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/ssoclient_delete.html:20 #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html:20 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:24 -#: pretix/control/templates/pretixcontrol/pdf/index.html:111 +#: pretix/control/templates/pretixcontrol/pdf/index.html:109 #: pretix/control/templates/pretixcontrol/subevents/delete.html:15 #: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:44 #: pretix/control/templates/pretixcontrol/user/2fa_delete.html:21 @@ -17494,7 +17669,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_carts.html:16 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:15 #: pretix/control/templates/pretixcontrol/waitinglist/delete_bulk.html:36 -#: pretix/control/views/orders.py:390 +#: pretix/control/views/orders.py:391 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/delete.html:15 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:16 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_delete.html:15 @@ -17619,6 +17794,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/event/index.html:24 #: pretix/control/templates/pretixcontrol/organizers/device_connect.html:27 #: pretix/control/templates/pretixcontrol/organizers/device_connect.html:33 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:33 msgid "Copy to clipboard" msgstr "" @@ -17822,6 +17998,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/items/discounts.html:158 #: pretix/control/templates/pretixcontrol/items/index.html:176 #: pretix/control/templates/pretixcontrol/items/quotas.html:162 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:185 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:89 #: pretix/plugins/badges/templates/pretixplugins/badges/index.html:72 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:69 @@ -17879,20 +18056,31 @@ msgstr "" msgid "Simulate" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:67 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:69 msgid "Valid check-in" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:69 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:71 msgid "Additional information required" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:71 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:73 msgid "" "The following questions must be answered before check-in can be completed:" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:93 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:85 +msgid "Media exchange required" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:87 +#, python-format +msgid "" +"This ticket needs to be exchanged into a %(media_type)s " +"reusable medium. %(media_policy)s." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:103 msgid "Special attention required" msgstr "" @@ -18329,20 +18517,20 @@ msgid "Cancel or delete event" msgstr "" #: pretix/control/templates/pretixcontrol/event/dangerzone.html:9 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:25 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:27 #: pretix/control/templates/pretixcontrol/event/delete.html:60 #: pretix/control/templates/pretixcontrol/event/live.html:31 msgid "Go offline" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:13 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:14 msgid "" "You can take your event offline. Nobody except your team will be able to see " "or access it any more." msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:34 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:48 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:35 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:51 #: pretix/control/templates/pretixcontrol/orders/cancel.html:5 #: pretix/control/templates/pretixcontrol/orders/cancel.html:7 #: pretix/control/templates/pretixcontrol/orders/cancel_confirm.html:6 @@ -18350,37 +18538,37 @@ msgstr "" msgid "Cancel event" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:38 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:40 msgid "" "If you need to call off your event you want to cancel and refund all " "tickets, you can do so through this option." msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:51 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:53 msgid "No permission" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:59 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:72 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:62 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:76 #: pretix/control/templates/pretixcontrol/event/delete.html:56 #: pretix/control/templates/pretixcontrol/event/delete.html:70 msgid "Delete personal data" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:63 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:67 msgid "" "You can remove personal data such as names and email addresses from your " "event and only retain the financial information such as the number and type " "of tickets sold." msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:80 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:93 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:84 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:99 #: pretix/control/templates/pretixcontrol/event/delete.html:5 msgid "Delete event" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:84 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:89 msgid "" "You can delete your event completely only as long as it does not contain any " "undeletable data, such as orders not performed in test mode." @@ -18500,6 +18688,7 @@ msgid "Shop URL:" msgstr "" #: pretix/control/templates/pretixcontrol/event/index.html:27 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:38 #: pretix/control/templates/pretixcontrol/vouchers/detail.html:57 msgid "Create QR code" msgstr "" @@ -18827,9 +19016,10 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:16 #: pretix/control/templates/pretixcontrol/organizers/mail.html:34 #: pretix/control/templates/pretixcontrol/organizers/mail.html:48 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:83 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:95 #: pretix/control/templates/pretixcontrol/organizers/team_members.html:10 #: pretix/control/templates/pretixcontrol/organizers/webhooks.html:72 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:18 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:94 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:117 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:85 @@ -18847,7 +19037,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/event/mail.html:79 #: pretix/control/templates/pretixcontrol/event/mail_settings_fragment.html:29 #: pretix/control/templates/pretixcontrol/event/tickets.html:35 -#: pretix/control/templates/pretixcontrol/pdf/index.html:41 +#: pretix/control/templates/pretixcontrol/pdf/index.html:39 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:97 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:120 msgid "Preview" @@ -18912,6 +19102,7 @@ msgid "Enabled" msgstr "" #: pretix/control/templates/pretixcontrol/event/payment.html:28 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:34 #: pretix/control/templates/pretixcontrol/subevents/index.html:170 #: pretix/control/templates/pretixcontrol/user/settings.html:81 msgid "Disabled" @@ -18974,11 +19165,11 @@ msgstr "" #: pretix/control/templates/pretixcontrol/event/plugins.html:15 #: pretix/control/templates/pretixcontrol/organizers/plugins.html:15 -#: pretix/control/views/checkin.py:425 pretix/control/views/discounts.py:113 -#: pretix/control/views/event.py:254 pretix/control/views/event.py:583 -#: pretix/control/views/event.py:622 pretix/control/views/event.py:819 -#: pretix/control/views/event.py:1060 pretix/control/views/event.py:1423 -#: pretix/control/views/event.py:1463 +#: pretix/control/views/checkin.py:426 pretix/control/views/discounts.py:113 +#: pretix/control/views/event.py:255 pretix/control/views/event.py:584 +#: pretix/control/views/event.py:623 pretix/control/views/event.py:820 +#: pretix/control/views/event.py:1061 pretix/control/views/event.py:1427 +#: pretix/control/views/event.py:1467 #: pretix/control/views/global_settings.py:65 #: pretix/control/views/global_settings.py:88 pretix/control/views/item.py:271 #: pretix/control/views/item.py:784 pretix/control/views/item.py:1035 @@ -18994,22 +19185,22 @@ msgstr "" #: pretix/control/views/organizer.py:2421 #: pretix/control/views/organizer.py:2558 #: pretix/control/views/organizer.py:2755 -#: pretix/control/views/organizer.py:2871 -#: pretix/control/views/organizer.py:3000 -#: pretix/control/views/organizer.py:3197 -#: pretix/control/views/organizer.py:3226 -#: pretix/control/views/organizer.py:3266 -#: pretix/control/views/organizer.py:3343 -#: pretix/control/views/organizer.py:3440 -#: pretix/control/views/organizer.py:3469 -#: pretix/control/views/organizer.py:3607 pretix/control/views/subevents.py:543 -#: pretix/control/views/subevents.py:1666 pretix/control/views/user.py:241 +#: pretix/control/views/organizer.py:2873 +#: pretix/control/views/organizer.py:3002 +#: pretix/control/views/organizer.py:3199 +#: pretix/control/views/organizer.py:3228 +#: pretix/control/views/organizer.py:3268 +#: pretix/control/views/organizer.py:3345 +#: pretix/control/views/organizer.py:3448 +#: pretix/control/views/organizer.py:3504 +#: pretix/control/views/organizer.py:3642 pretix/control/views/subevents.py:608 +#: pretix/control/views/subevents.py:1739 pretix/control/views/user.py:241 #: pretix/control/views/user.py:857 pretix/control/views/users.py:113 #: pretix/control/views/vouchers.py:306 pretix/plugins/autocheckin/views.py:164 #: pretix/plugins/badges/views.py:158 pretix/plugins/sendmail/views.py:645 #: pretix/plugins/stripe/views.py:699 #: pretix/plugins/ticketoutputpdf/views.py:172 -#: pretix/presale/views/customer.py:544 pretix/presale/views/customer.py:597 +#: pretix/presale/views/customer.py:546 pretix/presale/views/customer.py:599 msgid "Your changes have been saved." msgstr "" @@ -19192,7 +19383,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/item/index.html:127 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:394 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:77 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:35 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:35 msgid "Meta data" msgstr "" @@ -19266,7 +19457,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/events/create_basics.html:59 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:413 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:96 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:54 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:54 msgid "Timeline" msgstr "" @@ -19507,7 +19698,7 @@ msgid "Add a new rule" msgstr "" #: pretix/control/templates/pretixcontrol/event/tax_edit.html:153 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:392 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:393 msgid "Change history" msgstr "" @@ -19615,10 +19806,11 @@ msgstr "" #: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:22 #: pretix/control/templates/pretixcontrol/items/quota_edit.html:21 #: pretix/control/templates/pretixcontrol/organizers/create.html:11 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:20 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:21 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:386 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:31 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:23 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:25 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:23 msgid "General information" msgstr "" @@ -20292,7 +20484,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/item/index.html:254 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:621 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:262 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:262 msgid "Additional settings" msgstr "" @@ -20502,7 +20694,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:108 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:36 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:72 -#: pretix/presale/views/widget.py:490 +#: pretix/presale/views/widget.py:493 msgid "Sold out" msgstr "" @@ -20855,6 +21047,7 @@ msgid "You haven't created any quotas yet." msgstr "" #: pretix/control/templates/pretixcontrol/items/quotas.html:108 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:84 msgid "Capacity left" msgstr "" @@ -20977,16 +21170,16 @@ msgstr "" msgid "No applications have access to your pretix account." msgstr "" -#: pretix/control/templates/pretixcontrol/order/approve.html:4 -#: pretix/control/templates/pretixcontrol/order/approve.html:8 +#: pretix/control/templates/pretixcontrol/order/approve.html:5 +#: pretix/control/templates/pretixcontrol/order/approve.html:9 msgid "Approve order" msgstr "" -#: pretix/control/templates/pretixcontrol/order/approve.html:10 +#: pretix/control/templates/pretixcontrol/order/approve.html:14 msgid "Do you really want to approve this order?" msgstr "" -#: pretix/control/templates/pretixcontrol/order/approve.html:20 +#: pretix/control/templates/pretixcontrol/order/approve.html:24 #: pretix/control/templates/pretixcontrol/order/cancel.html:46 #: pretix/control/templates/pretixcontrol/order/cancellation_request_delete.html:21 #: pretix/control/templates/pretixcontrol/order/delete.html:20 @@ -20997,7 +21190,7 @@ msgstr "" msgid "No, take me back" msgstr "" -#: pretix/control/templates/pretixcontrol/order/approve.html:25 +#: pretix/control/templates/pretixcontrol/order/approve.html:29 msgid "Yes, approve order" msgstr "" @@ -21298,13 +21491,13 @@ msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:46 #: pretix/control/templates/pretixcontrol/orders/index.html:297 -#: pretix/control/views/orders.py:314 +#: pretix/control/views/orders.py:315 msgid "Approve" msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:51 #: pretix/control/templates/pretixcontrol/orders/index.html:304 -#: pretix/control/views/orders.py:328 +#: pretix/control/views/orders.py:329 msgid "Deny" msgstr "" @@ -21343,7 +21536,7 @@ msgid "" msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:116 -#: pretix/control/views/orders.py:376 +#: pretix/control/views/orders.py:377 msgid "Refund for overpayment" msgstr "" @@ -22436,6 +22629,8 @@ msgstr "" #: pretix/control/templates/pretixcontrol/orders/index.html:194 #: pretix/control/templates/pretixcontrol/search/orders.html:80 #: pretix/control/templates/pretixcontrol/search/orders.html:82 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:265 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:269 #, python-format msgctxt "followup" msgid "TODO %(date)s" @@ -22502,12 +22697,12 @@ msgid "Select action" msgstr "" #: pretix/control/templates/pretixcontrol/orders/index.html:311 -#: pretix/control/views/orders.py:360 +#: pretix/control/views/orders.py:361 msgid "Refund overpaid amount" msgstr "" #: pretix/control/templates/pretixcontrol/orders/index.html:319 -#: pretix/control/views/orders.py:345 +#: pretix/control/views/orders.py:346 msgid "Mark as expired if overdue" msgstr "" @@ -22956,11 +23151,11 @@ msgid "" "pretix. This will be ignored if a URL is configured." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:229 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:230 msgid "Barcode media" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:233 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:234 msgid "" "A \"barcode medium\" can be any printed or digital representation of a " "barcode. The medium will initially be created through the sale of a product " @@ -22969,55 +23164,55 @@ msgid "" "same barcode may be re-used during the sale of a different product." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:240 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:241 msgid "Barcode media can currently only be connected to tickets." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:243 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:244 msgid "" "This subsequent reuse of the barcode is currently only supported during POS " "sales." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:260 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:261 msgid "" "This medium type can work with almost any type of NFC chip. With this " "option, only the UID of the NFC chip is used for identification." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:264 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:296 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:265 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:297 msgid "NFC media can currently only be connected to gift cards." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:270 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:271 msgid "" "This method does not provide a high level of protection against abuse since " "it is possible for malicious users to clone someone's chip with the same UID." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:291 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:292 msgid "" "This medium type works only with NFC chips of the type Mifare Ultralight AES " "made by NXP. This provides a higher level of security than other approaches, " "but requires all chips to be encoded prior to use." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:318 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:319 msgid "Domains" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:320 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:321 msgid "This dialog is intended for advanced users." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:321 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:322 msgid "" "The domain needs to be configured on your webserver before it can be used " "here." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:377 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:378 msgid "Add domain" msgstr "" @@ -23461,7 +23656,7 @@ msgid "Media type" msgstr "" #: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:63 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:40 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:52 msgctxt "reusable_media" msgid "Connections" msgstr "" @@ -23475,7 +23670,7 @@ msgctxt "reusable_media" msgid "Medium %(id)s" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:94 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:106 msgctxt "reusable_media" msgid "Medium history" msgstr "" @@ -23560,20 +23755,41 @@ msgstr "" msgid "Are you sure you want to delete the team?" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:7 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:8 #: pretix/control/templates/pretixcontrol/organizers/team_members.html:6 msgid "Team:" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:9 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:10 #: pretix/control/templates/pretixcontrol/organizers/teams.html:30 msgid "Create a new team" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:11 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:12 msgid "You will be able to add team members in the next step." msgstr "" +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:31 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:55 +msgid "" +"Even if a team has no access to a certain category of data, they might still " +"be able to see parts of this data when it is linked to data they can see." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:35 +msgid "" +"For example, someone with access to customer accounts will be able to see " +"some information about gift cards linked to a customer account, even if they " +"generally can't see gift cards directly." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:59 +msgid "" +"For example, someone with access to orders will be able to see some " +"information about vouchers used to create an order, even if they generally " +"can't see vouchers directly." +msgstr "" + #: pretix/control/templates/pretixcontrol/organizers/team_members.html:21 msgid "Member" msgstr "" @@ -23748,89 +23964,89 @@ msgstr "" msgid "PDF Editor" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:36 +#: pretix/control/templates/pretixcontrol/pdf/index.html:34 #: pretix/plugins/banktransfer/refund_export.py:47 msgid "Code" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:52 +#: pretix/control/templates/pretixcontrol/pdf/index.html:50 msgid "Text box" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:59 +#: pretix/control/templates/pretixcontrol/pdf/index.html:57 msgid "QR Code" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:64 +#: pretix/control/templates/pretixcontrol/pdf/index.html:62 msgid "QR code for Check-In" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:71 +#: pretix/control/templates/pretixcontrol/pdf/index.html:69 msgid "QR code for Lead Scanning" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:78 +#: pretix/control/templates/pretixcontrol/pdf/index.html:76 msgid "Other QR code" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:87 +#: pretix/control/templates/pretixcontrol/pdf/index.html:85 msgid "Image" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:92 +#: pretix/control/templates/pretixcontrol/pdf/index.html:90 msgid "" "You can use this to add user-uploaded pictures from questions or pictures " "generated by plugins. If you want to embed a logo or other images, use a " "custom background instead." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:93 +#: pretix/control/templates/pretixcontrol/pdf/index.html:91 msgid "Dynamic image" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:100 +#: pretix/control/templates/pretixcontrol/pdf/index.html:98 msgid "pretix Logo" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:107 +#: pretix/control/templates/pretixcontrol/pdf/index.html:105 msgid "Duplicate" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:117 +#: pretix/control/templates/pretixcontrol/pdf/index.html:115 msgid "Undo" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:121 +#: pretix/control/templates/pretixcontrol/pdf/index.html:119 msgid "Redo" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:142 +#: pretix/control/templates/pretixcontrol/pdf/index.html:140 msgid "" "This feature is only intended for advanced users. We recommend to only use " "it to copy and share ticket designs, not to modify the design source code." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:156 +#: pretix/control/templates/pretixcontrol/pdf/index.html:154 #: pretix/presale/templates/pretixpresale/giftcard/checkout.html:26 msgid "Apply" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:164 +#: pretix/control/templates/pretixcontrol/pdf/index.html:162 msgid "Uploading new PDF background…" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:172 +#: pretix/control/templates/pretixcontrol/pdf/index.html:170 msgid "Welcome to the PDF ticket editor!" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:174 +#: pretix/control/templates/pretixcontrol/pdf/index.html:172 msgid "" "This editor allows you to create a design for the PDF tickets of your event. " "You can upload a background PDF and then use this tool to place texts and a " "QR code on the ticket." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:185 +#: pretix/control/templates/pretixcontrol/pdf/index.html:183 msgid "" "Please note that the editor can only provide a rough preview. Some details, " "for example in text rendering, might look slightly different in the final " @@ -23838,7 +24054,7 @@ msgid "" "preview." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:199 +#: pretix/control/templates/pretixcontrol/pdf/index.html:197 msgid "" "The editor is tested with recent versions of Google Chrome, Mozilla Firefox " "and Opera. Other browsers, especially Internet Explorer or Microsoft Edge, " @@ -23846,174 +24062,174 @@ msgid "" "fonts." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:207 +#: pretix/control/templates/pretixcontrol/pdf/index.html:205 msgid "" "The editor requires JavaScript to work. Please enable JavaScript in your " "browser to continue." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:217 -#: pretix/control/templates/pretixcontrol/pdf/index.html:233 +#: pretix/control/templates/pretixcontrol/pdf/index.html:215 +#: pretix/control/templates/pretixcontrol/pdf/index.html:231 msgid "Loading…" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:220 +#: pretix/control/templates/pretixcontrol/pdf/index.html:218 msgid "Start editing" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:240 +#: pretix/control/templates/pretixcontrol/pdf/index.html:238 msgid "Layout name" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:247 +#: pretix/control/templates/pretixcontrol/pdf/index.html:245 msgid "Preferred language" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:260 -#: pretix/control/templates/pretixcontrol/pdf/index.html:270 +#: pretix/control/templates/pretixcontrol/pdf/index.html:258 +#: pretix/control/templates/pretixcontrol/pdf/index.html:268 msgid "Upload PDF as background" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:262 +#: pretix/control/templates/pretixcontrol/pdf/index.html:260 msgid "" "You can upload a PDF to use as a custom background. The paper size will " "match the PDF." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:274 +#: pretix/control/templates/pretixcontrol/pdf/index.html:272 #, python-format msgid "max. %(size)s, smaller is better" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:282 +#: pretix/control/templates/pretixcontrol/pdf/index.html:280 msgid "Download current background" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:289 +#: pretix/control/templates/pretixcontrol/pdf/index.html:287 msgid "Or choose custom paper size" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:291 +#: pretix/control/templates/pretixcontrol/pdf/index.html:289 msgid "" "To manually change the paper size, you need to create a new, empty " "background." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:299 -#: pretix/control/templates/pretixcontrol/pdf/index.html:386 -#: pretix/control/templates/pretixcontrol/pdf/index.html:428 +#: pretix/control/templates/pretixcontrol/pdf/index.html:297 +#: pretix/control/templates/pretixcontrol/pdf/index.html:384 +#: pretix/control/templates/pretixcontrol/pdf/index.html:426 msgid "Width (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:303 -#: pretix/control/templates/pretixcontrol/pdf/index.html:391 +#: pretix/control/templates/pretixcontrol/pdf/index.html:301 +#: pretix/control/templates/pretixcontrol/pdf/index.html:389 msgid "Height (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:312 +#: pretix/control/templates/pretixcontrol/pdf/index.html:310 msgid "Create empty background" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:319 +#: pretix/control/templates/pretixcontrol/pdf/index.html:317 msgid "Style" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:321 +#: pretix/control/templates/pretixcontrol/pdf/index.html:319 msgid "Dark" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:322 +#: pretix/control/templates/pretixcontrol/pdf/index.html:320 msgid "Light" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:328 +#: pretix/control/templates/pretixcontrol/pdf/index.html:326 msgid "Image content" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:339 +#: pretix/control/templates/pretixcontrol/pdf/index.html:337 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_create.html:20 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_update.html:34 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:29 msgid "Content" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:348 +#: pretix/control/templates/pretixcontrol/pdf/index.html:346 #: pretix/control/templates/pretixcontrol/pdf/placeholders.html:50 msgid "Event attribute:" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:353 +#: pretix/control/templates/pretixcontrol/pdf/index.html:351 #: pretix/control/templates/pretixcontrol/pdf/placeholders.html:59 msgid "Item attribute:" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:356 +#: pretix/control/templates/pretixcontrol/pdf/index.html:354 msgid "Other… (multilingual)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:357 +#: pretix/control/templates/pretixcontrol/pdf/index.html:355 msgid "Other…" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:367 +#: pretix/control/templates/pretixcontrol/pdf/index.html:365 msgid "Show available placeholders" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:374 +#: pretix/control/templates/pretixcontrol/pdf/index.html:372 msgid "x (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:379 +#: pretix/control/templates/pretixcontrol/pdf/index.html:377 msgid "y (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:398 +#: pretix/control/templates/pretixcontrol/pdf/index.html:396 msgid "Size (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:405 +#: pretix/control/templates/pretixcontrol/pdf/index.html:403 msgid "QR color" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:420 +#: pretix/control/templates/pretixcontrol/pdf/index.html:418 msgid "Render without whitespace" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:422 +#: pretix/control/templates/pretixcontrol/pdf/index.html:420 msgid "" "Required for consistent size across platforms. Supported on Android starting " "with pretixPRINT 2.3.3 and on Desktop with pretixSCAN 1.9.3." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:433 +#: pretix/control/templates/pretixcontrol/pdf/index.html:431 msgid "Rotation (°)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:452 +#: pretix/control/templates/pretixcontrol/pdf/index.html:450 msgid "Font size (pt)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:457 +#: pretix/control/templates/pretixcontrol/pdf/index.html:455 msgid "Line height" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:464 +#: pretix/control/templates/pretixcontrol/pdf/index.html:462 msgid "Text color" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:487 +#: pretix/control/templates/pretixcontrol/pdf/index.html:485 msgid "Flow multiple lines downward from specified position" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:541 +#: pretix/control/templates/pretixcontrol/pdf/index.html:539 msgid "Automatically reduce font size to fit content" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:547 +#: pretix/control/templates/pretixcontrol/pdf/index.html:545 msgid "Allow long words to be split (preview is not accurate)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:558 +#: pretix/control/templates/pretixcontrol/pdf/index.html:556 #, python-format msgid "" "This layout uses new features. If you print from your device, make sure you " @@ -24219,24 +24435,24 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:483 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:266 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:124 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:124 msgid "Add a new quota" msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:487 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:128 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:128 msgid "Product settings" msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:489 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:130 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:130 msgid "" "These settings are optional, if you leave them empty, the default values " "from the product settings will be used." msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:525 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:166 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:166 msgid "" "You can choose to either add one or more check-in lists for every date in " "your series individually, or use just one check-in list for all your dates " @@ -24250,7 +24466,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:604 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:359 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:245 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:245 msgid "Add a new check-in list" msgstr "" @@ -24326,16 +24542,36 @@ msgid "" "be disabled instead." msgstr "" -#: pretix/control/templates/pretixcontrol/subevents/detail.html:10 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:9 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:13 +#, python-format msgctxt "subevent" -msgid "Create date" +msgid "Date: %(name)s" msgstr "" -#: pretix/control/templates/pretixcontrol/subevents/detail.html:279 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:234 +msgid "partially canceled" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:282 +msgid "View all" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:289 +msgid "No orders found." +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:302 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:279 msgctxt "subevent" msgid "Date history" msgstr "" +#: pretix/control/templates/pretixcontrol/subevents/edit.html:10 +msgctxt "subevent" +msgid "Create date" +msgstr "" + #: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:3 #: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:5 msgid "You can change this option in the variation settings." @@ -25366,21 +25602,21 @@ msgstr "" msgid "The new check-in list has been created." msgstr "" -#: pretix/control/views/checkin.py:382 pretix/control/views/checkin.py:442 +#: pretix/control/views/checkin.py:382 pretix/control/views/checkin.py:443 #: pretix/control/views/discounts.py:134 pretix/control/views/discounts.py:182 -#: pretix/control/views/event.py:283 pretix/control/views/event.py:586 -#: pretix/control/views/event.py:625 pretix/control/views/event.py:822 -#: pretix/control/views/event.py:1026 pretix/control/views/event.py:1376 -#: pretix/control/views/event.py:1442 pretix/control/views/event.py:1594 +#: pretix/control/views/event.py:284 pretix/control/views/event.py:587 +#: pretix/control/views/event.py:626 pretix/control/views/event.py:823 +#: pretix/control/views/event.py:1027 pretix/control/views/event.py:1380 +#: pretix/control/views/event.py:1446 pretix/control/views/event.py:1598 #: pretix/control/views/item.py:287 pretix/control/views/item.py:334 #: pretix/control/views/item.py:794 pretix/control/views/item.py:820 #: pretix/control/views/item.py:1054 pretix/control/views/item.py:1106 #: pretix/control/views/item.py:1310 pretix/control/views/item.py:1476 #: pretix/control/views/item.py:1668 pretix/control/views/organizer.py:281 #: pretix/control/views/organizer.py:309 pretix/control/views/organizer.py:1450 -#: pretix/control/views/subevents.py:521 pretix/control/views/subevents.py:667 -#: pretix/control/views/subevents.py:1112 -#: pretix/control/views/subevents.py:1574 pretix/control/views/user.py:342 +#: pretix/control/views/subevents.py:586 pretix/control/views/subevents.py:740 +#: pretix/control/views/subevents.py:1185 +#: pretix/control/views/subevents.py:1647 pretix/control/views/user.py:342 #: pretix/control/views/user.py:861 pretix/control/views/user.py:901 #: pretix/control/views/vouchers.py:278 pretix/control/views/vouchers.py:352 #: pretix/control/views/vouchers.py:535 pretix/control/views/waitinglist.py:427 @@ -25392,11 +25628,11 @@ msgstr "" msgid "We could not save your changes. See below for details." msgstr "" -#: pretix/control/views/checkin.py:421 pretix/control/views/checkin.py:458 +#: pretix/control/views/checkin.py:422 pretix/control/views/checkin.py:459 msgid "The requested list does not exist." msgstr "" -#: pretix/control/views/checkin.py:467 +#: pretix/control/views/checkin.py:468 msgid "The selected list has been deleted." msgstr "" @@ -25482,7 +25718,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:117 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:48 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:80 -#: pretix/presale/views/widget.py:504 +#: pretix/presale/views/widget.py:507 msgid "Sale over" msgstr "" @@ -25490,7 +25726,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_calendar.html:119 #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:125 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:88 -#: pretix/presale/views/widget.py:515 +#: pretix/presale/views/widget.py:518 msgid "Soon" msgstr "" @@ -25550,7 +25786,7 @@ msgstr "" #: pretix/control/views/discounts.py:260 pretix/control/views/item.py:197 #: pretix/control/views/item.py:409 pretix/control/views/item.py:543 #: pretix/control/views/organizer.py:2641 -#: pretix/control/views/organizer.py:3702 +#: pretix/control/views/organizer.py:3737 msgid "Some of the provided object ids are invalid." msgstr "" @@ -25558,133 +25794,133 @@ msgstr "" msgid "Not all discounts have been selected." msgstr "" -#: pretix/control/views/event.py:463 +#: pretix/control/views/event.py:464 msgid "" "You do not have sufficient permission to enable plugins that need to be " "enabled for the entire organizer account." msgstr "" -#: pretix/control/views/event.py:480 pretix/control/views/organizer.py:717 +#: pretix/control/views/event.py:481 pretix/control/views/organizer.py:717 #, python-brace-format msgid "The plugin {} is now active, you can configure it here:" msgstr "" -#: pretix/control/views/event.py:489 pretix/control/views/organizer.py:726 +#: pretix/control/views/event.py:490 pretix/control/views/organizer.py:726 #, python-brace-format msgid "The plugin {} is now active." msgstr "" -#: pretix/control/views/event.py:554 +#: pretix/control/views/event.py:555 msgid "" "This payment provider does not exist or the respective plugin is disabled." msgstr "" -#: pretix/control/views/event.py:861 pretix/control/views/organizer.py:362 +#: pretix/control/views/event.py:862 pretix/control/views/organizer.py:362 #: pretix/control/views/vouchers.py:562 msgid "invalid item" msgstr "" -#: pretix/control/views/event.py:948 +#: pretix/control/views/event.py:949 #, python-format msgid "Your order: %(code)s" msgstr "" -#: pretix/control/views/event.py:957 +#: pretix/control/views/event.py:958 msgid "Unknown email renderer." msgstr "" -#: pretix/control/views/event.py:973 pretix/control/views/orders.py:687 +#: pretix/control/views/event.py:974 pretix/control/views/orders.py:701 #: pretix/presale/views/order.py:1177 pretix/presale/views/order.py:1184 msgid "You requested an invalid ticket output type." msgstr "" -#: pretix/control/views/event.py:1121 +#: pretix/control/views/event.py:1122 msgid "Your shop is live now!" msgstr "" -#: pretix/control/views/event.py:1129 +#: pretix/control/views/event.py:1130 msgid "We've taken your shop down. You can re-enable it whenever you want!" msgstr "" -#: pretix/control/views/event.py:1137 +#: pretix/control/views/event.py:1138 msgid "Your shop is now in test mode!" msgstr "" -#: pretix/control/views/event.py:1154 +#: pretix/control/views/event.py:1158 msgid "" "An order could not be deleted as some constraints (e.g. data created by plug-" "ins) do not allow it." msgstr "" -#: pretix/control/views/event.py:1160 +#: pretix/control/views/event.py:1164 msgid "We've disabled test mode for you. Let's sell some real tickets!" msgstr "" -#: pretix/control/views/event.py:1182 +#: pretix/control/views/event.py:1186 msgid "This event can not be deleted." msgstr "" -#: pretix/control/views/event.py:1205 +#: pretix/control/views/event.py:1209 msgid "The event has been deleted." msgstr "" -#: pretix/control/views/event.py:1208 +#: pretix/control/views/event.py:1212 msgid "" "The event could not be deleted as some constraints (e.g. data created by " "plug-ins) do not allow it." msgstr "" -#: pretix/control/views/event.py:1224 +#: pretix/control/views/event.py:1228 #, python-brace-format msgid "" "Specifically, the following plugins still contain data depends on this " "event: {plugin_names}" msgstr "" -#: pretix/control/views/event.py:1304 pretix/control/views/orders.py:767 +#: pretix/control/views/event.py:1308 pretix/control/views/orders.py:781 msgid "The comment has been updated." msgstr "" -#: pretix/control/views/event.py:1306 pretix/control/views/orders.py:769 +#: pretix/control/views/event.py:1310 pretix/control/views/orders.py:783 msgid "Could not update the comment." msgstr "" -#: pretix/control/views/event.py:1334 pretix/control/views/main.py:362 +#: pretix/control/views/event.py:1338 pretix/control/views/main.py:362 msgid "VAT" msgstr "" -#: pretix/control/views/event.py:1370 +#: pretix/control/views/event.py:1374 msgid "The new tax rule has been created." msgstr "" -#: pretix/control/views/event.py:1393 pretix/control/views/event.py:1456 -#: pretix/control/views/event.py:1502 +#: pretix/control/views/event.py:1397 pretix/control/views/event.py:1460 +#: pretix/control/views/event.py:1506 msgid "The requested tax rule does not exist." msgstr "" -#: pretix/control/views/event.py:1511 +#: pretix/control/views/event.py:1515 msgid "The selected tax rule has been deleted." msgstr "" -#: pretix/control/views/event.py:1513 +#: pretix/control/views/event.py:1517 msgid "The selected tax rule can not be deleted." msgstr "" -#: pretix/control/views/event.py:1564 +#: pretix/control/views/event.py:1568 msgid "Your event is not empty, you need to set it up manually." msgstr "" -#: pretix/control/views/event.py:1699 +#: pretix/control/views/event.py:1703 msgid "" "Your changes have been saved. You can now go on with looking at the details " "or take your event live to start selling!" msgstr "" -#: pretix/control/views/event.py:1720 +#: pretix/control/views/event.py:1724 msgid "Regular ticket" msgstr "" -#: pretix/control/views/event.py:1725 +#: pretix/control/views/event.py:1729 msgid "Reduced ticket" msgstr "" @@ -25791,7 +26027,7 @@ msgstr "" #: pretix/control/views/item.py:412 pretix/control/views/item.py:546 #: pretix/control/views/organizer.py:2644 -#: pretix/control/views/organizer.py:3705 +#: pretix/control/views/organizer.py:3740 msgid "Not all objects have been selected." msgstr "" @@ -26006,81 +26242,81 @@ msgstr "" msgid "Access for the selected application has been revoked." msgstr "" -#: pretix/control/views/orders.py:196 +#: pretix/control/views/orders.py:197 msgid "We could not process your input. See below for details." msgstr "" -#: pretix/control/views/orders.py:269 +#: pretix/control/views/orders.py:270 #, python-brace-format msgid "" "Successfully executed the action \"{label}\" on {success} of {total} orders." msgstr "" -#: pretix/control/views/orders.py:689 pretix/presale/views/order.py:114 +#: pretix/control/views/orders.py:703 pretix/presale/views/order.py:114 #: pretix/presale/views/order.py:382 pretix/presale/views/order.py:1006 #: pretix/presale/views/order.py:1186 pretix/presale/views/order.py:1794 msgid "Unknown order code or not authorized to access this order." msgstr "" -#: pretix/control/views/orders.py:691 pretix/presale/views/order.py:1191 +#: pretix/control/views/orders.py:705 pretix/presale/views/order.py:1191 msgid "Ticket download is not enabled for this product." msgstr "" -#: pretix/control/views/orders.py:803 +#: pretix/control/views/orders.py:817 msgid "The order has been deleted." msgstr "" -#: pretix/control/views/orders.py:810 +#: pretix/control/views/orders.py:824 msgid "" "The order could not be deleted as some constraints (e.g. data created by " "plug-ins) do not allow it." msgstr "" -#: pretix/control/views/orders.py:818 +#: pretix/control/views/orders.py:832 msgid "Only orders created in test mode can be deleted." msgstr "" -#: pretix/control/views/orders.py:839 +#: pretix/control/views/orders.py:853 msgid "The order has been denied and is therefore now canceled." msgstr "" -#: pretix/control/views/orders.py:879 +#: pretix/control/views/orders.py:893 msgid "This payment has been canceled." msgstr "" -#: pretix/control/views/orders.py:881 +#: pretix/control/views/orders.py:895 msgid "This payment can not be canceled at the moment." msgstr "" -#: pretix/control/views/orders.py:907 +#: pretix/control/views/orders.py:921 msgid "The refund has been canceled." msgstr "" -#: pretix/control/views/orders.py:909 +#: pretix/control/views/orders.py:923 msgid "This refund can not be canceled at the moment." msgstr "" -#: pretix/control/views/orders.py:943 +#: pretix/control/views/orders.py:957 msgid "The refund has been processed." msgstr "" -#: pretix/control/views/orders.py:945 pretix/control/views/orders.py:971 +#: pretix/control/views/orders.py:959 pretix/control/views/orders.py:985 msgid "This refund can not be processed at the moment." msgstr "" -#: pretix/control/views/orders.py:969 +#: pretix/control/views/orders.py:983 msgid "The refund has been marked as done." msgstr "" -#: pretix/control/views/orders.py:995 +#: pretix/control/views/orders.py:1009 msgid "The request has been removed. If you want, you can now inform the user." msgstr "" -#: pretix/control/views/orders.py:1002 +#: pretix/control/views/orders.py:1016 msgid "Your cancellation request" msgstr "" -#: pretix/control/views/orders.py:1003 +#: pretix/control/views/orders.py:1017 #, python-brace-format msgid "" "Hello,\n" @@ -26091,66 +26327,66 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/control/views/orders.py:1058 +#: pretix/control/views/orders.py:1072 msgid "The payment has been marked as complete." msgstr "" -#: pretix/control/views/orders.py:1060 +#: pretix/control/views/orders.py:1074 msgid "This payment can not be confirmed at the moment." msgstr "" -#: pretix/control/views/orders.py:1151 +#: pretix/control/views/orders.py:1165 msgid "" "The refund was prevented due to a refund already being processed at the same " "time. Please have a look at the order details and check if your refund is " "still necessary." msgstr "" -#: pretix/control/views/orders.py:1256 +#: pretix/control/views/orders.py:1270 msgid "You entered an order in an event with a different currency." msgstr "" -#: pretix/control/views/orders.py:1307 +#: pretix/control/views/orders.py:1321 msgid "" "You can not refund more than the amount of a payment that is not yet " "refunded." msgstr "" -#: pretix/control/views/orders.py:1312 +#: pretix/control/views/orders.py:1326 msgid "" "You selected a partial refund for a payment method that only supports full " "refunds." msgstr "" -#: pretix/control/views/orders.py:1342 +#: pretix/control/views/orders.py:1356 #, python-brace-format msgid "" "One of the refunds failed to be processed. You should retry to refund in a " "different way. The error message was: {}" msgstr "" -#: pretix/control/views/orders.py:1348 +#: pretix/control/views/orders.py:1362 #, python-brace-format msgid "A refund of {} has been processed." msgstr "" -#: pretix/control/views/orders.py:1352 +#: pretix/control/views/orders.py:1366 #, python-brace-format msgid "" "A refund of {} has been saved, but not yet fully executed. You can mark it " "as complete below." msgstr "" -#: pretix/control/views/orders.py:1381 +#: pretix/control/views/orders.py:1395 msgid "" "A new gift card was created. You can now send the user their gift card code." msgstr "" -#: pretix/control/views/orders.py:1389 +#: pretix/control/views/orders.py:1403 msgid "Your gift card code" msgstr "" -#: pretix/control/views/orders.py:1391 +#: pretix/control/views/orders.py:1405 #, python-brace-format msgid "" "Hello,\n" @@ -26163,206 +26399,206 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/control/views/orders.py:1402 +#: pretix/control/views/orders.py:1416 msgid "The refunds you selected do not match the selected total refund amount." msgstr "" -#: pretix/control/views/orders.py:1532 +#: pretix/control/views/orders.py:1546 msgid "The payment has been created successfully." msgstr "" -#: pretix/control/views/orders.py:1546 +#: pretix/control/views/orders.py:1560 msgid "" "The order has been canceled. You can now select how you want to transfer the " "money back to the user." msgstr "" -#: pretix/control/views/orders.py:1617 pretix/control/views/orders.py:1621 +#: pretix/control/views/orders.py:1631 pretix/control/views/orders.py:1635 msgid "No VAT ID specified." msgstr "" -#: pretix/control/views/orders.py:1625 +#: pretix/control/views/orders.py:1639 msgid "No country specified." msgstr "" -#: pretix/control/views/orders.py:1629 +#: pretix/control/views/orders.py:1643 msgid "VAT ID could not be checked since this country is not supported." msgstr "" -#: pretix/control/views/orders.py:1648 +#: pretix/control/views/orders.py:1662 msgid "" "The VAT ID could not be checked, as the VAT checking service of the country " "is currently not available." msgstr "" -#: pretix/control/views/orders.py:1651 +#: pretix/control/views/orders.py:1665 msgid "This VAT ID is valid." msgstr "" -#: pretix/control/views/orders.py:1665 pretix/control/views/orders.py:1699 -#: pretix/control/views/orders.py:1731 +#: pretix/control/views/orders.py:1679 pretix/control/views/orders.py:1713 +#: pretix/control/views/orders.py:1745 msgid "Unknown invoice." msgstr "" -#: pretix/control/views/orders.py:1668 +#: pretix/control/views/orders.py:1682 msgid "Invoices may not be changed after they are created." msgstr "" -#: pretix/control/views/orders.py:1670 +#: pretix/control/views/orders.py:1684 msgid "Invoices may not be changed after they are transmitted." msgstr "" -#: pretix/control/views/orders.py:1672 pretix/control/views/orders.py:1734 +#: pretix/control/views/orders.py:1686 pretix/control/views/orders.py:1748 msgid "The invoice has already been canceled." msgstr "" -#: pretix/control/views/orders.py:1674 +#: pretix/control/views/orders.py:1688 msgid "The invoice file has already been exported." msgstr "" -#: pretix/control/views/orders.py:1676 +#: pretix/control/views/orders.py:1690 msgid "The invoice file is too old to be regenerated." msgstr "" -#: pretix/control/views/orders.py:1678 pretix/control/views/orders.py:1736 +#: pretix/control/views/orders.py:1692 pretix/control/views/orders.py:1750 msgid "The invoice has been cleaned of personal data." msgstr "" -#: pretix/control/views/orders.py:1703 +#: pretix/control/views/orders.py:1717 msgid "" "The invoice is currently being transmitted. You can start a new attempt " "after the current one has been completed." msgstr "" -#: pretix/control/views/orders.py:1710 +#: pretix/control/views/orders.py:1724 msgid "The invoice has been scheduled for retransmission." msgstr "" -#: pretix/control/views/orders.py:1744 +#: pretix/control/views/orders.py:1758 msgid "The invoice has been canceled." msgstr "" -#: pretix/control/views/orders.py:1783 +#: pretix/control/views/orders.py:1797 msgid "The email has been queued to be sent." msgstr "" -#: pretix/control/views/orders.py:1807 pretix/presale/views/order.py:1365 +#: pretix/control/views/orders.py:1821 pretix/presale/views/order.py:1365 msgid "This invoice has not been found" msgstr "" -#: pretix/control/views/orders.py:1814 pretix/presale/views/order.py:1372 +#: pretix/control/views/orders.py:1828 pretix/presale/views/order.py:1372 msgid "The invoice file is no longer stored on the server." msgstr "" -#: pretix/control/views/orders.py:1819 pretix/presale/views/order.py:1377 +#: pretix/control/views/orders.py:1833 pretix/presale/views/order.py:1377 msgid "" "The invoice file has not yet been generated, we will generate it for you " "now. Please try again in a few seconds." msgstr "" -#: pretix/control/views/orders.py:1847 +#: pretix/control/views/orders.py:1861 msgid "The payment term has been changed." msgstr "" -#: pretix/control/views/orders.py:1852 pretix/control/views/orders.py:1909 +#: pretix/control/views/orders.py:1866 pretix/control/views/orders.py:1923 msgid "" "We were not able to process the request completely as the server was too " "busy." msgstr "" -#: pretix/control/views/orders.py:1860 +#: pretix/control/views/orders.py:1874 msgid "This action is only allowed for pending orders." msgstr "" -#: pretix/control/views/orders.py:1915 +#: pretix/control/views/orders.py:1929 msgid "This action is only allowed for canceled orders." msgstr "" -#: pretix/control/views/orders.py:2174 pretix/presale/views/order.py:1661 +#: pretix/control/views/orders.py:2188 pretix/presale/views/order.py:1661 msgid "An error occurred. Please see the details below." msgstr "" -#: pretix/control/views/orders.py:2182 +#: pretix/control/views/orders.py:2196 msgid "The order has been changed and the user has been notified." msgstr "" -#: pretix/control/views/orders.py:2184 pretix/control/views/orders.py:2320 -#: pretix/control/views/orders.py:2357 pretix/presale/views/order.py:1697 +#: pretix/control/views/orders.py:2198 pretix/control/views/orders.py:2334 +#: pretix/control/views/orders.py:2371 pretix/presale/views/order.py:1697 msgid "The order has been changed." msgstr "" -#: pretix/control/views/orders.py:2211 pretix/presale/checkoutflow.py:963 +#: pretix/control/views/orders.py:2225 pretix/presale/checkoutflow.py:964 #: pretix/presale/views/order.py:845 pretix/presale/views/order.py:981 msgid "" "We had difficulties processing your input. Please review the errors below." msgstr "" -#: pretix/control/views/orders.py:2322 +#: pretix/control/views/orders.py:2336 msgid "Nothing about the order had to be changed." msgstr "" -#: pretix/control/views/orders.py:2403 pretix/plugins/sendmail/views.py:176 +#: pretix/control/views/orders.py:2417 pretix/plugins/sendmail/views.py:176 msgid "We could not send the email. See below for details." msgstr "" -#: pretix/control/views/orders.py:2419 pretix/control/views/orders.py:2483 +#: pretix/control/views/orders.py:2433 pretix/control/views/orders.py:2497 #: pretix/plugins/sendmail/views.py:204 pretix/plugins/sendmail/views.py:671 #, python-brace-format msgid "Subject: {subject}" msgstr "" -#: pretix/control/views/orders.py:2437 pretix/control/views/orders.py:2502 +#: pretix/control/views/orders.py:2451 pretix/control/views/orders.py:2516 #, python-brace-format msgid "Your message has been queued and will be sent to {}." msgstr "" -#: pretix/control/views/orders.py:2555 pretix/presale/views/order.py:1151 +#: pretix/control/views/orders.py:2569 pretix/presale/views/order.py:1151 msgid "" "This link is no longer valid. Please go back, refresh the page, and try " "again." msgstr "" -#: pretix/control/views/orders.py:2636 +#: pretix/control/views/orders.py:2650 msgid "There is no order with the given order code." msgstr "" -#: pretix/control/views/orders.py:2745 pretix/control/views/organizer.py:2084 +#: pretix/control/views/orders.py:2759 pretix/control/views/organizer.py:2084 msgid "The selected exporter was not found." msgstr "" -#: pretix/control/views/orders.py:2755 pretix/control/views/organizer.py:2094 +#: pretix/control/views/orders.py:2769 pretix/control/views/organizer.py:2094 msgid "There was a problem processing your input. See below for error details." msgstr "" -#: pretix/control/views/orders.py:2792 pretix/control/views/organizer.py:2130 +#: pretix/control/views/orders.py:2806 pretix/control/views/organizer.py:2130 msgid "" "Your user account does not have sufficient permission to run this report, " "therefore you cannot change it." msgstr "" -#: pretix/control/views/orders.py:2801 pretix/control/views/organizer.py:2139 +#: pretix/control/views/orders.py:2815 pretix/control/views/organizer.py:2139 msgid "" "Your user account does not have sufficient permission to run this report, " "therefore you cannot schedule it." msgstr "" -#: pretix/control/views/orders.py:2817 pretix/control/views/organizer.py:2155 +#: pretix/control/views/orders.py:2831 pretix/control/views/organizer.py:2155 #, python-brace-format msgid "" "Your export schedule has been saved. The next export will start around " "{datetime}." msgstr "" -#: pretix/control/views/orders.py:2822 pretix/control/views/organizer.py:2160 +#: pretix/control/views/orders.py:2836 pretix/control/views/organizer.py:2160 msgid "Your export schedule has been saved, but no next export is planned." msgstr "" -#: pretix/control/views/orders.py:2867 pretix/control/views/organizer.py:2206 +#: pretix/control/views/orders.py:2881 pretix/control/views/organizer.py:2206 #, python-brace-format msgid "Export: {title}" msgstr "" -#: pretix/control/views/orders.py:2868 pretix/control/views/organizer.py:2208 +#: pretix/control/views/orders.py:2882 pretix/control/views/organizer.py:2208 #, python-brace-format msgid "" "Hello,\n" @@ -26370,25 +26606,25 @@ msgid "" "attached to this email, you can find a new scheduled report for {name}." msgstr "" -#: pretix/control/views/orders.py:2974 pretix/control/views/organizer.py:2342 +#: pretix/control/views/orders.py:2988 pretix/control/views/organizer.py:2342 msgid "" "Your export is queued to start soon. The results will be send via email. " "Depending on system load and type and size of export, this may take a few " "minutes." msgstr "" -#: pretix/control/views/orders.py:3061 pretix/control/views/orders.py:3142 +#: pretix/control/views/orders.py:3075 pretix/control/views/orders.py:3156 msgid "All orders have been canceled." msgstr "" -#: pretix/control/views/orders.py:3063 pretix/control/views/orders.py:3144 +#: pretix/control/views/orders.py:3077 pretix/control/views/orders.py:3158 #, python-brace-format msgid "" "The orders have been canceled. An error occurred with {count} orders, please " "check all uncanceled orders." msgstr "" -#: pretix/control/views/orders.py:3091 pretix/control/views/orders.py:3165 +#: pretix/control/views/orders.py:3105 pretix/control/views/orders.py:3179 msgid "Your input was not valid." msgstr "" @@ -26459,11 +26695,11 @@ msgstr "" #: pretix/control/views/organizer.py:2724 #: pretix/control/views/organizer.py:2759 #: pretix/control/views/organizer.py:2833 -#: pretix/control/views/organizer.py:2875 -#: pretix/control/views/organizer.py:2955 -#: pretix/control/views/organizer.py:3005 -#: pretix/control/views/organizer.py:3567 -#: pretix/control/views/organizer.py:3611 +#: pretix/control/views/organizer.py:2877 +#: pretix/control/views/organizer.py:2957 +#: pretix/control/views/organizer.py:3007 +#: pretix/control/views/organizer.py:3602 +#: pretix/control/views/organizer.py:3646 msgid "Your changes could not be saved." msgstr "" @@ -26623,9 +26859,9 @@ msgid "The order of properties has been updated." msgstr "" #: pretix/control/views/organizer.py:2789 -#: pretix/control/views/organizer.py:2905 -#: pretix/control/views/organizer.py:3035 -#: pretix/control/views/organizer.py:3304 +#: pretix/control/views/organizer.py:2907 +#: pretix/control/views/organizer.py:3037 +#: pretix/control/views/organizer.py:3306 msgid "The selected object has been deleted." msgstr "" @@ -26633,45 +26869,45 @@ msgstr "" msgid "The provider has been created." msgstr "" -#: pretix/control/views/organizer.py:2944 +#: pretix/control/views/organizer.py:2946 #, python-brace-format msgid "" "The SSO client has been created. Please note down the following client " "secret, it will never be shown again: {secret}" msgstr "" -#: pretix/control/views/organizer.py:2994 +#: pretix/control/views/organizer.py:2996 #, python-brace-format msgid "" "Your changes have been saved. Please note down the following client secret, " "it will never be shown again: {secret}" msgstr "" -#: pretix/control/views/organizer.py:3104 +#: pretix/control/views/organizer.py:3106 msgid "" "We've sent the customer an email with further instructions on resetting your " "password." msgstr "" -#: pretix/control/views/organizer.py:3369 +#: pretix/control/views/organizer.py:3371 msgid "The customer account has been anonymized." msgstr "" -#: pretix/control/views/organizer.py:3639 +#: pretix/control/views/organizer.py:3674 msgid "This channel can not be deleted." msgstr "" -#: pretix/control/views/organizer.py:3644 +#: pretix/control/views/organizer.py:3679 msgid "The selected sales channel has been deleted." msgstr "" -#: pretix/control/views/organizer.py:3646 +#: pretix/control/views/organizer.py:3681 msgid "" "The channel could not be deleted as some constraints (e.g. data created by " "plug-ins) did not allow it." msgstr "" -#: pretix/control/views/organizer.py:3671 +#: pretix/control/views/organizer.py:3706 msgid "The order of sales channels has been updated." msgstr "" @@ -26696,57 +26932,58 @@ msgstr "" msgid "The selected data was deleted successfully." msgstr "" -#: pretix/control/views/subevents.py:168 pretix/control/views/subevents.py:530 +#: pretix/control/views/subevents.py:174 pretix/control/views/subevents.py:526 +#: pretix/control/views/subevents.py:595 msgctxt "subevent" msgid "The requested date does not exist." msgstr "" -#: pretix/control/views/subevents.py:172 pretix/control/views/subevents.py:184 +#: pretix/control/views/subevents.py:178 pretix/control/views/subevents.py:190 msgctxt "subevent" msgid "A date can not be deleted if orders already have been placed." msgstr "" -#: pretix/control/views/subevents.py:203 +#: pretix/control/views/subevents.py:209 msgctxt "subevent" msgid "" "The date could not be deleted as some constraints (e.g. data created by plug-" "ins) did not allow it. The date was disabled instead." msgstr "" -#: pretix/control/views/subevents.py:207 +#: pretix/control/views/subevents.py:213 msgctxt "subevent" msgid "The selected date has been deleted." msgstr "" -#: pretix/control/views/subevents.py:631 +#: pretix/control/views/subevents.py:704 msgctxt "subevent" msgid "The new date has been created." msgstr "" -#: pretix/control/views/subevents.py:708 +#: pretix/control/views/subevents.py:781 msgctxt "subevent" msgid "The selected dates have been disabled." msgstr "" -#: pretix/control/views/subevents.py:721 +#: pretix/control/views/subevents.py:794 msgctxt "subevent" msgid "The selected dates have been enabled." msgstr "" -#: pretix/control/views/subevents.py:750 +#: pretix/control/views/subevents.py:823 msgctxt "subevent" msgid "The selected dates have been deleted or disabled." msgstr "" -#: pretix/control/views/subevents.py:938 +#: pretix/control/views/subevents.py:1011 msgid "Please do not create more than 100.000 dates at once." msgstr "" -#: pretix/control/views/subevents.py:967 +#: pretix/control/views/subevents.py:1040 msgid "All dates would be skipped because they conflict with existing dates." msgstr "" -#: pretix/control/views/subevents.py:1103 +#: pretix/control/views/subevents.py:1176 #, python-brace-format msgctxt "subevent" msgid "{} new dates have been created." @@ -26766,6 +27003,10 @@ msgstr "" msgid "Voucher {}" msgstr "" +#: pretix/control/views/typeahead.py:179 pretix/control/views/typeahead.py:180 +msgid "No event" +msgstr "" + #: pretix/control/views/user.py:169 msgid "The password you entered was invalid, please try again." msgstr "" @@ -30606,111 +30847,111 @@ msgstr "" msgid "Web Check-in" msgstr "" -#: pretix/presale/checkoutflow.py:119 +#: pretix/presale/checkoutflow.py:120 msgctxt "checkoutflow" msgid "Step" msgstr "" -#: pretix/presale/checkoutflow.py:251 +#: pretix/presale/checkoutflow.py:252 msgctxt "checkoutflow" msgid "Customer account" msgstr "" -#: pretix/presale/checkoutflow.py:338 +#: pretix/presale/checkoutflow.py:339 msgid "We failed to process your authentication request, please try again." msgstr "" -#: pretix/presale/checkoutflow.py:401 +#: pretix/presale/checkoutflow.py:402 msgctxt "checkoutflow" msgid "Membership" msgstr "" -#: pretix/presale/checkoutflow.py:449 pretix/presale/checkoutflow.py:470 +#: pretix/presale/checkoutflow.py:450 pretix/presale/checkoutflow.py:471 msgid "" "Your cart includes a product that requires an active membership to be " "selected." msgstr "" -#: pretix/presale/checkoutflow.py:489 +#: pretix/presale/checkoutflow.py:490 msgctxt "checkoutflow" msgid "Add-on products" msgstr "" -#: pretix/presale/checkoutflow.py:696 pretix/presale/checkoutflow.py:704 +#: pretix/presale/checkoutflow.py:697 pretix/presale/checkoutflow.py:705 #: pretix/presale/views/cart.py:195 pretix/presale/views/cart.py:200 #: pretix/presale/views/cart.py:218 pretix/presale/views/cart.py:231 #: pretix/presale/views/order.py:1582 pretix/presale/views/order.py:1590 msgid "Please enter numbers only." msgstr "" -#: pretix/presale/checkoutflow.py:778 +#: pretix/presale/checkoutflow.py:779 msgctxt "checkoutflow" msgid "Your information" msgstr "" -#: pretix/presale/checkoutflow.py:1012 +#: pretix/presale/checkoutflow.py:1013 msgid "" "Unfortunately, based on the invoice address you entered, we're not able to " "sell you the selected products for tax-related legal reasons." msgstr "" -#: pretix/presale/checkoutflow.py:1018 +#: pretix/presale/checkoutflow.py:1019 msgid "" "Due to the invoice address you entered, we need to apply a different tax " "rate to your purchase and the price of the products in your cart has changed " "accordingly." msgstr "" -#: pretix/presale/checkoutflow.py:1042 pretix/presale/checkoutflow.py:1048 +#: pretix/presale/checkoutflow.py:1043 pretix/presale/checkoutflow.py:1049 msgid "Please enter a valid email address." msgstr "" -#: pretix/presale/checkoutflow.py:1055 +#: pretix/presale/checkoutflow.py:1056 msgid "Please enter your invoicing address." msgstr "" -#: pretix/presale/checkoutflow.py:1059 +#: pretix/presale/checkoutflow.py:1060 msgid "Please enter your name." msgstr "" -#: pretix/presale/checkoutflow.py:1094 pretix/presale/checkoutflow.py:1099 -#: pretix/presale/checkoutflow.py:1104 pretix/presale/checkoutflow.py:1109 -#: pretix/presale/checkoutflow.py:1114 +#: pretix/presale/checkoutflow.py:1095 pretix/presale/checkoutflow.py:1100 +#: pretix/presale/checkoutflow.py:1105 pretix/presale/checkoutflow.py:1110 +#: pretix/presale/checkoutflow.py:1115 msgid "Please fill in answers to all required questions." msgstr "" -#: pretix/presale/checkoutflow.py:1277 +#: pretix/presale/checkoutflow.py:1278 msgctxt "checkoutflow" msgid "Payment" msgstr "" -#: pretix/presale/checkoutflow.py:1388 +#: pretix/presale/checkoutflow.py:1389 #, python-brace-format msgid "" "Your payment method has been applied, but {} still need to be paid. Please " "select a payment method for the remainder." msgstr "" -#: pretix/presale/checkoutflow.py:1413 pretix/presale/views/order.py:733 +#: pretix/presale/checkoutflow.py:1414 pretix/presale/views/order.py:733 msgid "Please select a payment method." msgstr "" -#: pretix/presale/checkoutflow.py:1445 pretix/presale/checkoutflow.py:1465 -#: pretix/presale/checkoutflow.py:1476 +#: pretix/presale/checkoutflow.py:1446 pretix/presale/checkoutflow.py:1466 +#: pretix/presale/checkoutflow.py:1477 msgid "Please select a payment method to proceed." msgstr "" -#: pretix/presale/checkoutflow.py:1481 pretix/presale/views/order.py:489 +#: pretix/presale/checkoutflow.py:1482 pretix/presale/views/order.py:489 #: pretix/presale/views/order.py:559 msgid "The payment information you entered was incomplete." msgstr "" -#: pretix/presale/checkoutflow.py:1526 +#: pretix/presale/checkoutflow.py:1527 msgctxt "checkoutflow" msgid "Review order" msgstr "" -#: pretix/presale/checkoutflow.py:1624 +#: pretix/presale/checkoutflow.py:1625 msgid "You need to check all checkboxes on the bottom of the page." msgstr "" @@ -31543,7 +31784,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:105 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:31 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:69 -#: pretix/presale/views/widget.py:485 +#: pretix/presale/views/widget.py:488 msgid "Reserved" msgstr "" @@ -32095,7 +32336,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:34 #: pretix/presale/templates/pretixpresale/organizers/index.html:93 -#: pretix/presale/views/widget.py:496 +#: pretix/presale/views/widget.py:499 msgid "More info" msgstr "" @@ -32126,12 +32367,12 @@ msgid "Choose date to book a ticket" msgstr "" #: pretix/presale/templates/pretixpresale/event/index.html:155 -#: pretix/presale/views/waiting.py:146 pretix/presale/views/widget.py:836 +#: pretix/presale/views/waiting.py:146 pretix/presale/views/widget.py:839 msgid "The booking period for this event is over." msgstr "" #: pretix/presale/templates/pretixpresale/event/index.html:163 -#: pretix/presale/views/widget.py:838 +#: pretix/presale/views/widget.py:841 #, python-format msgid "The booking period for this event will start on %(date)s at %(time)s." msgstr "" @@ -32249,7 +32490,7 @@ msgid "" msgstr "" #: pretix/presale/templates/pretixpresale/event/order.html:75 -#: pretix/presale/templates/pretixpresale/event/position.html:18 +#: pretix/presale/templates/pretixpresale/event/position.html:19 msgid "View in backend" msgstr "" @@ -32307,13 +32548,13 @@ msgid "" msgstr "" #: pretix/presale/templates/pretixpresale/event/order.html:199 -#: pretix/presale/templates/pretixpresale/event/position.html:33 +#: pretix/presale/templates/pretixpresale/event/position.html:34 msgid "Change ordered items" msgstr "" #: pretix/presale/templates/pretixpresale/event/order.html:200 #: pretix/presale/templates/pretixpresale/event/order.html:291 -#: pretix/presale/templates/pretixpresale/event/position.html:34 +#: pretix/presale/templates/pretixpresale/event/position.html:35 msgid "Change details" msgstr "" @@ -32580,41 +32821,41 @@ msgstr "" msgid "Scan the QR code with your banking app" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:7 +#: pretix/presale/templates/pretixpresale/event/position.html:8 msgid "Registration details" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:10 +#: pretix/presale/templates/pretixpresale/event/position.html:11 msgid "Your registration" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:31 +#: pretix/presale/templates/pretixpresale/event/position.html:32 msgid "Your items" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:46 +#: pretix/presale/templates/pretixpresale/event/position.html:47 msgid "Additional information" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:51 +#: pretix/presale/templates/pretixpresale/event/position.html:52 #, python-format msgid "" "This order is managed for you by %(email)s. Please contact them for any " "questions regarding payment, cancellation or changes to this order." msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:63 +#: pretix/presale/templates/pretixpresale/event/position.html:64 msgctxt "action" msgid "Change your ticket" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:68 +#: pretix/presale/templates/pretixpresale/event/position.html:69 msgid "" "If you want to make changes to the components of your ticket, you can click " "on the following button." msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:73 +#: pretix/presale/templates/pretixpresale/event/position.html:74 #, python-format msgid "" "You can only make some changes to this ticket yourself. For additional " @@ -32622,7 +32863,7 @@ msgid "" "(%(email)s)." msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:82 +#: pretix/presale/templates/pretixpresale/event/position.html:83 #: pretix/presale/templates/pretixpresale/event/position_change.html:5 #: pretix/presale/templates/pretixpresale/event/position_change.html:10 #: pretix/presale/templates/pretixpresale/event/position_change_confirm.html:6 @@ -32791,7 +33032,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:94 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:14 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:58 -#: pretix/presale/views/widget.py:470 +#: pretix/presale/views/widget.py:473 msgid "Few tickets left" msgstr "" @@ -32799,7 +33040,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:97 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:19 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:61 -#: pretix/presale/views/widget.py:475 +#: pretix/presale/views/widget.py:478 msgctxt "available_event_in_list" msgid "Buy now" msgstr "" @@ -32812,7 +33053,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:44 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:63 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:78 -#: pretix/presale/views/widget.py:477 pretix/presale/views/widget.py:500 +#: pretix/presale/views/widget.py:480 pretix/presale/views/widget.py:503 msgid "Book now" msgstr "" @@ -32820,7 +33061,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:111 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:38 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:74 -#: pretix/presale/views/widget.py:492 +#: pretix/presale/views/widget.py:495 msgid "Fully booked" msgstr "" @@ -33037,7 +33278,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/organizers/customer_addresses.html:5 #: pretix/presale/templates/pretixpresale/organizers/customer_addresses.html:11 -#: pretix/presale/views/customer.py:380 +#: pretix/presale/views/customer.py:382 msgid "Addresses" msgstr "" @@ -33165,7 +33406,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:5 #: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:11 -#: pretix/presale/views/customer.py:386 +#: pretix/presale/views/customer.py:388 msgid "Attendee profiles" msgstr "" @@ -33291,7 +33532,7 @@ msgid "The products have been successfully added to your cart." msgstr "" #: pretix/presale/views/cart.py:626 pretix/presale/views/event.py:543 -#: pretix/presale/views/widget.py:428 +#: pretix/presale/views/widget.py:431 msgid "Tickets for this event cannot be purchased on this sales channel." msgstr "" @@ -33321,7 +33562,7 @@ msgid "" msgstr "" #: pretix/presale/views/customer.py:268 pretix/presale/views/customer.py:271 -#: pretix/presale/views/customer.py:625 pretix/presale/views/customer.py:631 +#: pretix/presale/views/customer.py:627 pretix/presale/views/customer.py:633 msgid "You clicked an invalid link." msgstr "" @@ -33329,29 +33570,29 @@ msgstr "" msgid "Your new password has been set! You can now use it to log in." msgstr "" -#: pretix/presale/views/customer.py:333 +#: pretix/presale/views/customer.py:335 msgid "" "We've sent you an email with further instructions on resetting your password." msgstr "" -#: pretix/presale/views/customer.py:593 +#: pretix/presale/views/customer.py:595 msgid "" "Your changes have been saved. We've sent you an email with a link to update " "your email address. The email address of your account will be changed as " "soon as you click that link." msgstr "" -#: pretix/presale/views/customer.py:646 +#: pretix/presale/views/customer.py:648 msgid "" "Your email address has not been updated since the address is already in use " "for another customer account." msgstr "" -#: pretix/presale/views/customer.py:649 +#: pretix/presale/views/customer.py:651 msgid "Your email address has been updated." msgstr "" -#: pretix/presale/views/customer.py:866 pretix/presale/views/customer.py:877 +#: pretix/presale/views/customer.py:868 pretix/presale/views/customer.py:879 #, python-brace-format msgid "" "We were unable to use your login since the email address {email} is already " @@ -33546,39 +33787,39 @@ msgid "" "else." msgstr "" -#: pretix/presale/views/widget.py:423 +#: pretix/presale/views/widget.py:426 msgid "This ticket shop is currently disabled." msgstr "" -#: pretix/presale/views/widget.py:437 +#: pretix/presale/views/widget.py:440 msgid "The selected date does not exist in this event series." msgstr "" -#: pretix/presale/views/widget.py:444 +#: pretix/presale/views/widget.py:447 msgid "The selected date is not available." msgstr "" -#: pretix/presale/views/widget.py:452 +#: pretix/presale/views/widget.py:455 msgid "This is not an event series." msgstr "" -#: pretix/presale/views/widget.py:508 +#: pretix/presale/views/widget.py:511 #, python-format msgid "from %(start_date)s" msgstr "" -#: pretix/settings.py:862 +#: pretix/settings.py:863 msgid "User profile only" msgstr "" -#: pretix/settings.py:863 +#: pretix/settings.py:864 msgid "Read access" msgstr "" -#: pretix/settings.py:864 +#: pretix/settings.py:865 msgid "Write access" msgstr "" -#: pretix/settings.py:875 +#: pretix/settings.py:876 msgid "Kosovo" msgstr "" diff --git a/src/pretix/locale/ang/LC_MESSAGES/djangojs.po b/src/pretix/locale/ang/LC_MESSAGES/djangojs.po index ea92da843..eb8614d0e 100644 --- a/src/pretix/locale/ang/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/ang/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-27 14:47+0000\n" +"POT-Creation-Date: 2026-06-28 14:44+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -210,8 +210,8 @@ msgid "" msgstr "" #: pretix/static/pretixbase/js/asynctask.js:135 -#: pretix/static/pretixbase/js/asynctask.js:192 -#: pretix/static/pretixbase/js/asynctask.js:196 +#: pretix/static/pretixbase/js/asynctask.js:193 +#: pretix/static/pretixbase/js/asynctask.js:197 #: pretix/static/pretixcontrol/js/ui/mail.js:24 msgid "An error of type {code} occurred." msgstr "" @@ -227,28 +227,28 @@ msgstr "" msgid "The request took too long. Please try again." msgstr "" -#: pretix/static/pretixbase/js/asynctask.js:198 +#: pretix/static/pretixbase/js/asynctask.js:199 #: pretix/static/pretixcontrol/js/ui/mail.js:26 msgid "" "We currently cannot reach the server. Please try again. Error code: {code}" msgstr "" -#: pretix/static/pretixbase/js/asynctask.js:226 +#: pretix/static/pretixbase/js/asynctask.js:227 msgid "We are processing your request …" msgstr "" -#: pretix/static/pretixbase/js/asynctask.js:229 +#: pretix/static/pretixbase/js/asynctask.js:230 msgid "" "We are currently sending your request to the server. If this takes longer " "than one minute, please check your internet connection and then reload this " "page and try again." msgstr "" -#: pretix/static/pretixbase/js/asynctask.js:286 +#: pretix/static/pretixbase/js/asynctask.js:287 msgid "If this takes longer than a few minutes, please contact us." msgstr "" -#: pretix/static/pretixbase/js/asynctask.js:341 +#: pretix/static/pretixbase/js/asynctask.js:342 msgid "Close message" msgstr "" @@ -358,23 +358,23 @@ msgstr "" msgid "Selected only" msgstr "" -#: pretix/static/pretixcontrol/js/ui/main.js:842 +#: pretix/static/pretixcontrol/js/ui/main.js:844 msgid "Enter page number between 1 and %(max)s." msgstr "" -#: pretix/static/pretixcontrol/js/ui/main.js:845 +#: pretix/static/pretixcontrol/js/ui/main.js:847 msgid "Invalid page number." msgstr "" -#: pretix/static/pretixcontrol/js/ui/main.js:1003 +#: pretix/static/pretixcontrol/js/ui/main.js:1005 msgid "Use a different name internally" msgstr "" -#: pretix/static/pretixcontrol/js/ui/main.js:1043 +#: pretix/static/pretixcontrol/js/ui/main.js:1045 msgid "Click to close" msgstr "" -#: pretix/static/pretixcontrol/js/ui/main.js:1124 +#: pretix/static/pretixcontrol/js/ui/main.js:1126 msgid "You have unsaved changes!" msgstr "" diff --git a/src/pretix/locale/ar/LC_MESSAGES/django.po b/src/pretix/locale/ar/LC_MESSAGES/django.po index c2c778882..72190644f 100644 --- a/src/pretix/locale/ar/LC_MESSAGES/django.po +++ b/src/pretix/locale/ar/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-27 15:47+0000\n" +"POT-Creation-Date: 2026-06-28 14:42+0000\n" "PO-Revision-Date: 2026-05-19 04:16+0000\n" "Last-Translator: Khalid Shaheen \n" "Language-Team: Arabic check this option if you want to use this " @@ -5906,7 +5970,7 @@ msgstr "" "وليس حدد هذا الخيار إذا كنت تريد استخدام هذا المنتج كمنتج " "إضافي ، ينطبق ذلك على الحزم الثابتة فقط!" -#: pretix/base/models/items.py:637 +#: pretix/base/models/items.py:642 msgid "" "If this is checked, the usual cancellation and order change settings of this " "event apply. If this is unchecked, orders containing this product can not be " @@ -5916,7 +5980,7 @@ msgstr "" "لهذه الفعالية. وإذا لم يتم تحديده ، فلن يمكن إلغاء الطلبات التي تحتوي على " "هذا المنتج من قبل المستخدمين وإنما من قبلك أنت فقط." -#: pretix/base/models/items.py:644 +#: pretix/base/models/items.py:649 msgid "" "This product can only be bought if it is added to the cart at least this " "many times. If you keep the field empty or set it to 0, there is no special " @@ -5926,7 +5990,7 @@ msgstr "" "مرات. إذا احتفظت بالحقل فارغا أو قمت بتحديد قيمة 0 ، فلن يوجد حد خاص لهذا " "المنتج." -#: pretix/base/models/items.py:651 +#: pretix/base/models/items.py:656 msgid "" "This product can only be bought at most this many times within one order. If " "you keep the field empty or set it to 0, there is no special limit for this " @@ -5937,7 +6001,7 @@ msgstr "" "بالحقل فارغا أو قمت بتحديد قيمة 0 ، فلا يوجد حد خاص لهذا المنتج. وعلى كل حال " "يتم تطبيق الحد الأقصى لعدد العناصر في الطلب بالكامل." -#: pretix/base/models/items.py:658 pretix/base/models/items.py:1244 +#: pretix/base/models/items.py:663 pretix/base/models/items.py:1254 msgid "" "If you set this, the check-in app will show a visible warning that this " "ticket requires special attention. You can use this for example for student " @@ -5948,13 +6012,13 @@ msgstr "" "اهتماما خاصا. يمكنك استخدام هذا على سبيل المثال لتذاكر الطلاب لتنبيه موظف " "التسجيل أنه لابد من التحقق من بطاقة هوية الطالب قبل الدخول." -#: pretix/base/models/items.py:665 pretix/base/models/items.py:1251 +#: pretix/base/models/items.py:670 pretix/base/models/items.py:1261 msgid "" "This text will be shown by the check-in app if a ticket of this type is " "scanned." msgstr "" -#: pretix/base/models/items.py:671 pretix/base/models/items.py:1172 +#: pretix/base/models/items.py:676 pretix/base/models/items.py:1182 msgid "" "If set, this will be displayed next to the current price to show that the " "current price is a discounted one. This is just a cosmetic setting and will " @@ -5963,54 +6027,54 @@ msgstr "" "إذا تم تعيينه ، فسيتم عرضه بجوار السعر الحالي لإظهار أن السعر الحالي هو سعر " "مخفض. هذا مجرد إعداد شكلي ولن يؤثر فعليا على الأسعار." -#: pretix/base/models/items.py:681 +#: pretix/base/models/items.py:686 #, fuzzy #| msgid "Only sell tickets for this event on the following sales channels." msgid "Only sell tickets for this product on the selected sales channels." msgstr "قم ببيع التذاكر لهذه الفعالية فقط على قنوات البيع التالية." -#: pretix/base/models/items.py:686 +#: pretix/base/models/items.py:691 msgid "" "When a customer buys this product, they will get a gift card with a value " "corresponding to the product price." msgstr "" "عندما يشتري العميل هذا المنتج ، سيحصل على بطاقة هداية بقيمة تقابل سعر المنتج." -#: pretix/base/models/items.py:696 +#: pretix/base/models/items.py:701 msgid "Allowed membership types" msgstr "أنواع العضوية المسموح بها" -#: pretix/base/models/items.py:701 pretix/base/models/items.py:1200 +#: pretix/base/models/items.py:706 pretix/base/models/items.py:1210 msgid "" "Do not show this unless the customer is logged in and has a valid " "membership. Be aware that this means it will never be visible in the widget." msgstr "" -#: pretix/base/models/items.py:710 +#: pretix/base/models/items.py:715 msgid "This product creates a membership of type" msgstr "هذا المنتج يخلق عضوية من نوع" -#: pretix/base/models/items.py:713 +#: pretix/base/models/items.py:718 msgid "" "The duration of the membership is the same as the duration of the event or " "event series date" msgstr "مدة العضوية هي نفسها مدة الفعالية أو تاريخ سلسلة الفعالية" -#: pretix/base/models/items.py:717 +#: pretix/base/models/items.py:722 msgid "Membership duration in days" msgstr "مدة العضوية بالأيام" -#: pretix/base/models/items.py:721 +#: pretix/base/models/items.py:726 msgid "Membership duration in months" msgstr "مدة العضوية بالأشهر" -#: pretix/base/models/items.py:728 +#: pretix/base/models/items.py:733 #, fuzzy #| msgid "Valid until" msgid "Validity" msgstr "حتى تاريخ" -#: pretix/base/models/items.py:730 +#: pretix/base/models/items.py:735 msgid "" "When setting up a regular event, or an event series with time slots, you " "typically do NOT need to change this value. The default setting means that " @@ -6022,67 +6086,67 @@ msgid "" "change but keep their current validity." msgstr "" -#: pretix/base/models/items.py:738 pretix/control/forms/item.py:794 +#: pretix/base/models/items.py:743 pretix/control/forms/item.py:794 #, fuzzy #| msgid "Gift card validity" msgid "Start of validity" msgstr "صلاحية بطاقة هدية" -#: pretix/base/models/items.py:739 +#: pretix/base/models/items.py:744 #, fuzzy #| msgid "End of presale" msgid "End of validity" msgstr "نهاية عرض ما قبل البيع" -#: pretix/base/models/items.py:742 +#: pretix/base/models/items.py:747 #, fuzzy #| msgid "minutes" msgid "Minutes" msgstr "الدقائق" -#: pretix/base/models/items.py:746 +#: pretix/base/models/items.py:751 msgid "Hours" msgstr "" -#: pretix/base/models/items.py:750 +#: pretix/base/models/items.py:755 msgid "Days" msgstr "" -#: pretix/base/models/items.py:754 +#: pretix/base/models/items.py:759 #, fuzzy #| msgid "Month" msgid "Months" msgstr "شهر" -#: pretix/base/models/items.py:757 +#: pretix/base/models/items.py:762 #, fuzzy #| msgid "Customers can cancel their paid orders" msgid "Customers can select the validity start date" msgstr "يمكن للعملاء إلغاء طلباتهم المدفوعة" -#: pretix/base/models/items.py:758 +#: pretix/base/models/items.py:763 msgid "If not selected, the validity always starts at the time of purchase." msgstr "" -#: pretix/base/models/items.py:763 +#: pretix/base/models/items.py:768 #, fuzzy #| msgid "Maximum order total" msgid "Maximum future start" msgstr "الحد الأقصى لإجمالي الطلب" -#: pretix/base/models/items.py:764 +#: pretix/base/models/items.py:769 #, fuzzy #| msgid "The selected date does not exist in this event series." msgid "The selected start date may only be this many days in the future." msgstr "التاريخ المحدد غير موجود في سلسلة الفعاليات هذه." -#: pretix/base/models/items.py:770 +#: pretix/base/models/items.py:775 msgid "Reusable media policy" msgstr "" -#: pretix/base/models/items.py:772 +#: pretix/base/models/items.py:777 msgid "" -"If this product should be stored on a re-usable physical medium, you can " +"If this product should be stored on a reusable physical medium, you can " "attach a physical media policy. This is not required for regular tickets, " "which just use a one-time barcode, but only for products like renewable " "season tickets or re-chargeable gift card wristbands. This is an advanced " @@ -6090,80 +6154,87 @@ msgid "" "settings." msgstr "" -#: pretix/base/models/items.py:782 +#: pretix/base/models/items.py:787 msgid "Reusable media type" msgstr "" -#: pretix/base/models/items.py:784 +#: pretix/base/models/items.py:789 msgid "" "Select the type of physical medium that should be used for this product. " "Note that not all media types support all types of products, and not all " "media types are supported across all sales channels or check-in processes." msgstr "" -#: pretix/base/models/items.py:989 +#: pretix/base/models/items.py:994 msgid "" "If you select a reusable media policy, you also need to select a reusable " "media type." msgstr "" -#: pretix/base/models/items.py:993 +#: pretix/base/models/items.py:998 #, fuzzy #| msgid "The selected product is not active or has no price set." msgid "The selected media type is not enabled in your organizer settings." msgstr "المنتج المحدد غير نشط أو ليس له سعر محدد." -#: pretix/base/models/items.py:995 +#: pretix/base/models/items.py:1000 #, fuzzy #| msgid "The selected item does not belong to this event." msgid "The selected media type does not support usage for tickets currently." msgstr "العنصر المحدد لا ينتمي إلى هذه الفعالية." -#: pretix/base/models/items.py:997 +#: pretix/base/models/items.py:1002 #, fuzzy #| msgid "The selected item does not belong to this event." msgid "" "The selected media type does not support usage for gift cards currently." msgstr "العنصر المحدد لا ينتمي إلى هذه الفعالية." -#: pretix/base/models/items.py:999 +#: pretix/base/models/items.py:1005 +msgid "" +"The selected media type requires all media to be registered in the system " +"prior to their usage. Therefore, the selected media policy does not make " +"sense for this media type." +msgstr "" + +#: pretix/base/models/items.py:1009 msgid "" "You currently cannot create gift cards with a reusable media policy. " "Instead, gift cards for some reusable media types can be created or re-" "charged directly at the POS." msgstr "" -#: pretix/base/models/items.py:1007 +#: pretix/base/models/items.py:1017 msgid "" "The maximum number per order can not be lower than the minimum number per " "order." msgstr "لا يمكن أن يكون العدد الأقصى لكل طلب أقل من العدد الأدنى للطلب." -#: pretix/base/models/items.py:1013 +#: pretix/base/models/items.py:1023 msgid "The item's category must belong to the same event as the item." msgstr "يجب أن تنتمي فئة العنصر إلى نفس فعالية العنصر." -#: pretix/base/models/items.py:1018 +#: pretix/base/models/items.py:1028 msgid "The item's tax rule must belong to the same event as the item." msgstr "" "يجب أن تنتمي القاعدة الضريبية للعنصر إلى نفس الفعالية التي ينتمي إليها " "العنصر." -#: pretix/base/models/items.py:1024 +#: pretix/base/models/items.py:1034 msgid "The item's availability cannot end before it starts." msgstr "لا يمكن أن ينتهي توفر العنصر قبل أن يبدأ." -#: pretix/base/models/items.py:1156 +#: pretix/base/models/items.py:1166 msgid "This is shown below the variation name in lists." msgstr "يظهر هذا في القوائم أسفل اسم العنصر." -#: pretix/base/models/items.py:1183 +#: pretix/base/models/items.py:1193 #, fuzzy #| msgid "New order requires approval" msgid "Require approval" msgstr "طلب جديد يتطلب الموافقة." -#: pretix/base/models/items.py:1185 +#: pretix/base/models/items.py:1195 #, fuzzy #| msgid "" #| "If this product is part of an order, the order will be put into an " @@ -6180,36 +6251,36 @@ msgstr "" "عليك تأكيده قبل دفعه وإكماله. يمكنك استخدام هذا على سبيل المثال للتذاكر " "المخصومة المتوفرة فقط لمجموعات محددة." -#: pretix/base/models/items.py:1195 pretix/control/navigation.py:618 +#: pretix/base/models/items.py:1205 pretix/control/navigation.py:618 #: pretix/control/templates/pretixcontrol/organizers/membershiptypes.html:4 #: pretix/control/templates/pretixcontrol/organizers/membershiptypes.html:6 msgid "Membership types" msgstr "أنواع العضوية" -#: pretix/base/models/items.py:1207 +#: pretix/base/models/items.py:1217 #, fuzzy #| msgid "This product will not be sold before the given date." msgid "This variation will not be sold before the given date." msgstr "لن يتم بيع هذا المنتج قبل التاريخ المعين." -#: pretix/base/models/items.py:1217 +#: pretix/base/models/items.py:1227 #, fuzzy #| msgid "This product will not be sold after the given date." msgid "This variation will not be sold after the given date." msgstr "لن يتم بيع هذا المنتج بعد التاريخ المحدد." -#: pretix/base/models/items.py:1225 +#: pretix/base/models/items.py:1235 msgid "Sell on all sales channels the product is sold on" msgstr "" -#: pretix/base/models/items.py:1231 +#: pretix/base/models/items.py:1241 msgid "" "The sales channel selection for the product as a whole takes precedence, so " "if a sales channel is selected here but not on product level, the variation " "will not be available." msgstr "" -#: pretix/base/models/items.py:1236 +#: pretix/base/models/items.py:1246 #, fuzzy #| msgid "" #| "This product will only be shown if a voucher matching the product is " @@ -6217,7 +6288,7 @@ msgstr "" msgid "Show only if a matching voucher is redeemed." msgstr "سيظهر هذا المنتج فقط في حالة استرداد كود خصم مطابقة للمنتج." -#: pretix/base/models/items.py:1238 +#: pretix/base/models/items.py:1248 #, fuzzy #| msgid "" #| "This product will be hidden from the event page until the user enters a " @@ -6229,24 +6300,24 @@ msgstr "" "سيتم إخفاء هذا المنتج من صفحة الفعالية حتى يقوم المستخدم بإدخال كود خصم يسمح " "بظهور هذا المنتج." -#: pretix/base/models/items.py:1258 +#: pretix/base/models/items.py:1268 #: pretix/control/templates/pretixcontrol/item/create.html:111 msgid "Product variations" msgstr "أنواع المنتج" -#: pretix/base/models/items.py:1463 +#: pretix/base/models/items.py:1473 msgid "Minimum number" msgstr "العدد الأدنى" -#: pretix/base/models/items.py:1467 +#: pretix/base/models/items.py:1477 msgid "Maximum number" msgstr "العدد الأقصى" -#: pretix/base/models/items.py:1471 +#: pretix/base/models/items.py:1481 msgid "Add-Ons are included in the price" msgstr "تم تضمين قائمة الإضافات في السعر" -#: pretix/base/models/items.py:1472 +#: pretix/base/models/items.py:1482 msgid "" "If selected, adding add-ons to this ticket is free, even if the add-ons " "would normally cost money individually." @@ -6254,44 +6325,44 @@ msgstr "" "إذا تم تحديده ، فإن إضافة القوائم الإضافية إلى هذه التذكرة سيكون مجانيا، حتى " "لو كانت الإضافات تكلف مبالغا إن كانت بشكل فردي." -#: pretix/base/models/items.py:1477 +#: pretix/base/models/items.py:1487 msgid "Allow the same product to be selected multiple times" msgstr "اسمح لنفس المنتج أن يتم اختياره عدة مرات" -#: pretix/base/models/items.py:1496 +#: pretix/base/models/items.py:1506 msgid "The add-on's category must belong to the same event as the item." msgstr "" "يجب أن تنتمي فئة قائمة الإضافة إلى نفس الفعالية كما هو الحال مع العنصر." -#: pretix/base/models/items.py:1501 +#: pretix/base/models/items.py:1511 msgid "The item already has an add-on of this category." msgstr "العنصر يحتوي مسبقا على قائمة إضافة من هذه الفئة." -#: pretix/base/models/items.py:1506 +#: pretix/base/models/items.py:1516 msgid "The minimum count needs to be equal to or greater than zero." msgstr "يجب أن يكون الحد الأدنى للعدد مساويا أو أكبر من الصفر." -#: pretix/base/models/items.py:1511 +#: pretix/base/models/items.py:1521 msgid "The maximum count needs to be equal to or greater than zero." msgstr "يجب أن يكون الحد الأقصى للعدد مساويا للصفر أو أكبر منه." -#: pretix/base/models/items.py:1516 +#: pretix/base/models/items.py:1526 msgid "The maximum count needs to be greater than the minimum count." msgstr "يجب أن يكون الحد الأقصى للعدد أكبر من الحد الأدنى للعد." -#: pretix/base/models/items.py:1543 +#: pretix/base/models/items.py:1553 msgid "Bundled item" msgstr "عنصر تم تجميعه" -#: pretix/base/models/items.py:1549 +#: pretix/base/models/items.py:1559 msgid "Bundled variation" msgstr "صيغة تم تجميعها" -#: pretix/base/models/items.py:1560 +#: pretix/base/models/items.py:1570 msgid "Designated price part" msgstr "جزء السعر المحدد" -#: pretix/base/models/items.py:1561 +#: pretix/base/models/items.py:1571 msgid "" "If set, it will be shown that this bundled item is responsible for the given " "value of the total gross price. This might be important in cases of mixed " @@ -6302,60 +6373,60 @@ msgstr "" "الإجمالي الكلي. قد يكون هذا مهما في حالات الضرائب المختلطة، ولكن يمكن أن تظل " "فارغة. لن يتم إضافة هذه القيمة إلى سعر العنصر الأساسي." -#: pretix/base/models/items.py:1584 +#: pretix/base/models/items.py:1594 msgid "The bundled item must belong to the same event as the item." msgstr "يجب أن ينتمي العنصر المجمع إلى نفس فعالية العنصر." -#: pretix/base/models/items.py:1586 +#: pretix/base/models/items.py:1596 msgid "A variation needs to be set for this item." msgstr "يجب تعيين نوع لهذا العنصر." -#: pretix/base/models/items.py:1588 +#: pretix/base/models/items.py:1598 msgid "The chosen variation does not belong to this item." msgstr "النوع الذي تم اختياره لا ينتمي إلى هذا العنصر." -#: pretix/base/models/items.py:1593 +#: pretix/base/models/items.py:1603 msgid "The count needs to be equal to or greater than zero." msgstr "يجب أن يكون العدد مساويا للصفر أو أكبر منه." -#: pretix/base/models/items.py:1648 +#: pretix/base/models/items.py:1658 msgid "Number" msgstr "رقم" -#: pretix/base/models/items.py:1649 +#: pretix/base/models/items.py:1659 msgid "Text (one line)" msgstr "نص (سطر واحد)" -#: pretix/base/models/items.py:1650 +#: pretix/base/models/items.py:1660 msgid "Multiline text" msgstr "نص متعدد الأسطر" -#: pretix/base/models/items.py:1651 +#: pretix/base/models/items.py:1661 msgid "Yes/No" msgstr "نعم / لا" -#: pretix/base/models/items.py:1652 +#: pretix/base/models/items.py:1662 msgid "Choose one from a list" msgstr "قم باختيار واحد من قائمة" -#: pretix/base/models/items.py:1653 +#: pretix/base/models/items.py:1663 msgid "Choose multiple from a list" msgstr "قم بعدة اختيارات من قائمة" -#: pretix/base/models/items.py:1654 +#: pretix/base/models/items.py:1664 msgid "File upload" msgstr "تحميل الملف" -#: pretix/base/models/items.py:1657 +#: pretix/base/models/items.py:1667 #: pretix/control/templates/pretixcontrol/event/settings.html:240 msgid "Date and time" msgstr "التاريخ و الوقت" -#: pretix/base/models/items.py:1658 +#: pretix/base/models/items.py:1668 msgid "Country code (ISO 3166-1 alpha-2)" msgstr "رمز البلد (ISO 3166-1 alpha-2)" -#: pretix/base/models/items.py:1681 pretix/base/models/items.py:1957 +#: pretix/base/models/items.py:1691 pretix/base/models/items.py:1967 #: pretix/base/models/organizer.py:654 #, fuzzy #| msgid "The property name may only contain letters, numbers and underscores." @@ -6364,82 +6435,82 @@ msgid "" "underscores." msgstr "لا يسمح أن يحتوي اسم الملكية إلا على أحرف وأرقام وشرطات سفلية فقط." -#: pretix/base/models/items.py:1686 +#: pretix/base/models/items.py:1696 msgid "Help text" msgstr "نص للمساعدة" -#: pretix/base/models/items.py:1687 +#: pretix/base/models/items.py:1697 msgid "If the question needs to be explained or clarified, do it here!" msgstr "إذا كان السؤال بحاجة إلى شرح أو توضيح ، فقم ذلك هنا!" -#: pretix/base/models/items.py:1693 +#: pretix/base/models/items.py:1703 msgid "Question type" msgstr "نوع السؤال" -#: pretix/base/models/items.py:1697 +#: pretix/base/models/items.py:1707 #: pretix/control/templates/pretixcontrol/items/questions.html:59 msgid "Required question" msgstr "سؤال مطلوب" -#: pretix/base/models/items.py:1704 +#: pretix/base/models/items.py:1714 msgid "This question will be asked to buyers of the selected products" msgstr "سيتم طرح هذا السؤال على مشتري المنتجات المختارة" -#: pretix/base/models/items.py:1711 +#: pretix/base/models/items.py:1721 msgid "Ask during check-in instead of in the ticket buying process" msgstr "اسأل أثناء التسجيل بدلا من السؤال أثناء عملية شراء التذكرة" -#: pretix/base/models/items.py:1712 pretix/base/models/items.py:1717 +#: pretix/base/models/items.py:1722 pretix/base/models/items.py:1727 msgid "Not supported by all check-in apps for all question types." msgstr "غير مدعوم من قبل جميع تطبيقات التسجيل لجميع أنواع الأسئلة." -#: pretix/base/models/items.py:1716 +#: pretix/base/models/items.py:1726 #, fuzzy #| msgid "Ask during check-in" msgid "Show answer during check-in" msgstr "طرح خلال التسجيل في مكتب الاستقبال" -#: pretix/base/models/items.py:1721 +#: pretix/base/models/items.py:1731 #: pretix/control/templates/pretixcontrol/items/questions.html:70 msgid "Hidden question" msgstr "سؤال مخفي" -#: pretix/base/models/items.py:1722 +#: pretix/base/models/items.py:1732 msgid "This question will only show up in the backend." msgstr "سيظهر هذا السؤال في لوحة التحكم فقط." -#: pretix/base/models/items.py:1726 +#: pretix/base/models/items.py:1736 msgid "Print answer on invoices" msgstr "طباعة الجواب على الفواتير" -#: pretix/base/models/items.py:1734 pretix/base/models/items.py:1740 -#: pretix/base/models/items.py:1746 +#: pretix/base/models/items.py:1744 pretix/base/models/items.py:1750 +#: pretix/base/models/items.py:1756 msgid "Minimum value" msgstr "الحد الأدنى للقيمة" -#: pretix/base/models/items.py:1735 pretix/base/models/items.py:1738 -#: pretix/base/models/items.py:1741 pretix/base/models/items.py:1744 -#: pretix/base/models/items.py:1747 pretix/base/models/items.py:1750 -#: pretix/base/models/items.py:1754 +#: pretix/base/models/items.py:1745 pretix/base/models/items.py:1748 +#: pretix/base/models/items.py:1751 pretix/base/models/items.py:1754 +#: pretix/base/models/items.py:1757 pretix/base/models/items.py:1760 +#: pretix/base/models/items.py:1764 msgid "Currently not supported in our apps and during check-in" msgstr "غير مدعوم حاليا في تطبيقاتنا وأثناء التسجيل" -#: pretix/base/models/items.py:1737 pretix/base/models/items.py:1743 -#: pretix/base/models/items.py:1749 +#: pretix/base/models/items.py:1747 pretix/base/models/items.py:1753 +#: pretix/base/models/items.py:1759 msgid "Maximum value" msgstr "القيمة القصوى" -#: pretix/base/models/items.py:1752 +#: pretix/base/models/items.py:1762 #, fuzzy #| msgid "Maximum value" msgid "Maximum length" msgstr "القيمة القصوى" -#: pretix/base/models/items.py:1758 +#: pretix/base/models/items.py:1768 msgid "Validate file to be a portrait" msgstr "تحقق من صحة الملف ليكون صورة" -#: pretix/base/models/items.py:1759 +#: pretix/base/models/items.py:1769 msgid "" "If checked, files must be images with an aspect ratio of 3:4. This is " "commonly used for photos printed on badges." @@ -6447,59 +6518,59 @@ msgstr "" "إذا تم تحديده ، يجب أن تكون الملفات صورا بنسبة عرض إلى ارتفاع 3:4. يستخدم " "هذا بشكل شائع للصور المطبوعة على الشارات." -#: pretix/base/models/items.py:1814 +#: pretix/base/models/items.py:1824 msgid "An answer to this question is required to proceed." msgstr "مطلوب إجابة على هذا السؤال للمتابعة." -#: pretix/base/models/items.py:1824 +#: pretix/base/models/items.py:1834 #, fuzzy #| msgid "Invalid input data." msgid "Invalid input type." msgstr "بيانات الإدخال غير صالحة." -#: pretix/base/models/items.py:1858 +#: pretix/base/models/items.py:1868 msgid "The number is to low." msgstr "الرقم أقبل من المطلوب." -#: pretix/base/models/items.py:1860 +#: pretix/base/models/items.py:1870 msgid "The number is to high." msgstr "الرقم أعلى من المطلوب." -#: pretix/base/models/items.py:1863 +#: pretix/base/models/items.py:1873 msgid "Invalid number input." msgstr "إدخال رقم غير صحيح." -#: pretix/base/models/items.py:1870 pretix/base/models/items.py:1894 +#: pretix/base/models/items.py:1880 pretix/base/models/items.py:1904 msgid "Please choose a later date." msgstr "الرجاء اختيار تاريخ لاحق." -#: pretix/base/models/items.py:1872 pretix/base/models/items.py:1896 +#: pretix/base/models/items.py:1882 pretix/base/models/items.py:1906 msgid "Please choose an earlier date." msgstr "الرجاء اختيار تاريخ سابق." -#: pretix/base/models/items.py:1875 +#: pretix/base/models/items.py:1885 msgid "Invalid date input." msgstr "إدخال تاريخ غير صحيح." -#: pretix/base/models/items.py:1882 +#: pretix/base/models/items.py:1892 msgid "Invalid time input." msgstr "إدخال وقت غير صحيح." -#: pretix/base/models/items.py:1891 +#: pretix/base/models/items.py:1901 msgid "Invalid datetime input." msgstr "إدخال تاريخ ووقت غير صالح." -#: pretix/base/models/items.py:1903 +#: pretix/base/models/items.py:1913 msgid "Unknown country code." msgstr "رمز الدولة غير معروف." -#: pretix/base/models/items.py:1921 pretix/base/models/items.py:1923 +#: pretix/base/models/items.py:1931 pretix/base/models/items.py:1933 #, fuzzy #| msgid "The maximum count needs to be greater than the minimum count." msgid "The maximum date must not be before the minimum value." msgstr "يجب أن يكون الحد الأقصى للعدد أكبر من الحد الأدنى للعد." -#: pretix/base/models/items.py:1925 +#: pretix/base/models/items.py:1935 #, fuzzy #| msgid "" #| "The maximum number per order can not be lower than the minimum number per " @@ -6507,57 +6578,59 @@ msgstr "يجب أن يكون الحد الأقصى للعدد أكبر من ال msgid "The maximum value must not be lower than the minimum value." msgstr "لا يمكن أن يكون العدد الأقصى لكل طلب أقل من العدد الأدنى للطلب." -#: pretix/base/models/items.py:1943 +#: pretix/base/models/items.py:1953 msgid "" "The system already contains answers to this question that are not compatible " "with changing the type of question without data loss. Consider hiding this " "question and creating a new one instead." msgstr "" -#: pretix/base/models/items.py:1961 +#: pretix/base/models/items.py:1971 #: pretix/control/templates/pretixcontrol/items/question.html:87 msgid "Answer" msgstr "إجابة" -#: pretix/base/models/items.py:1985 +#: pretix/base/models/items.py:1995 #, python-brace-format msgid "The identifier \"{}\" is already used for a different option." msgstr "المعرف \"{}\" مستخدم سابقا لخيار مختلف." -#: pretix/base/models/items.py:1988 +#: pretix/base/models/items.py:1998 msgid "Question option" msgstr "خيار السؤال" -#: pretix/base/models/items.py:1989 +#: pretix/base/models/items.py:1999 msgid "Question options" msgstr "خيارات السؤال" -#: pretix/base/models/items.py:2074 pretix/control/forms/event.py:1903 +#: pretix/base/models/items.py:2084 pretix/control/forms/event.py:1903 #: pretix/control/templates/pretixcontrol/items/quotas.html:104 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:83 msgid "Total capacity" msgstr "السعة الإجمالية" -#: pretix/base/models/items.py:2076 pretix/control/forms/item.py:512 +#: pretix/base/models/items.py:2086 pretix/control/forms/item.py:512 msgid "Leave empty for an unlimited number of tickets." msgstr "اتركه فارغا لعدد غير محدود من التذاكر." -#: pretix/base/models/items.py:2080 pretix/base/models/orders.py:1494 -#: pretix/base/models/orders.py:3033 +#: pretix/base/models/items.py:2090 pretix/base/models/orders.py:1516 +#: pretix/base/models/orders.py:3055 #: pretix/control/templates/pretixcontrol/checkin/index.html:97 msgid "Item" msgstr "بند" -#: pretix/base/models/items.py:2088 pretix/control/forms/item.py:973 +#: pretix/base/models/items.py:2098 pretix/control/forms/item.py:973 #: pretix/plugins/autocheckin/models.py:74 msgid "Variations" msgstr "متغيرات" -#: pretix/base/models/items.py:2092 +#: pretix/base/models/items.py:2102 #: pretix/control/templates/pretixcontrol/items/quotas.html:135 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:96 msgid "Ignore this quota when determining event availability" msgstr "تجاهل هذه الحصة إذا أردت تحديد مدى توفر الفعالية" -#: pretix/base/models/items.py:2093 +#: pretix/base/models/items.py:2103 msgid "" "If you enable this, this quota will be ignored when determining event " "availability in your event calendar. This is useful e.g. for merchandise " @@ -6568,11 +6641,11 @@ msgstr "" "تقويم الفعالية الخاص بك. قد يفيد هذا في حالات مثل المشتريات المضافة إلى كل " "فعالية ولكنه يجب ألا يمنع ظهور حالة الفعالية إذا كانت غير متوفرة." -#: pretix/base/models/items.py:2100 +#: pretix/base/models/items.py:2110 msgid "Close this quota permanently once it is sold out" msgstr "أغلق هذه الحصة بشكل دائم بمجرد بيعها" -#: pretix/base/models/items.py:2101 +#: pretix/base/models/items.py:2111 msgid "" "If you enable this, when the quota is sold out once, no more tickets will be " "sold, even if tickets become available again through cancellations or " @@ -6582,11 +6655,11 @@ msgstr "" "التذاكر ، حتى إذا أصبحت التذاكر متاحة مرة أخرى من خلال الإلغاء أو الطلبات " "المنتهية الصلاحية. بالطبع ، يمكنك دائما إعادة الفتح يدويا." -#: pretix/base/models/items.py:2109 +#: pretix/base/models/items.py:2119 msgid "Allow to sell more tickets once people have checked out" msgstr "السماح ببيع المزيد من التذاكر بمجرد قيام الأشخاص بتسجيل الخروج" -#: pretix/base/models/items.py:2110 +#: pretix/base/models/items.py:2120 msgid "" "With this option, quota will be released as soon as people are scanned at an " "exit of your event. This will only happen if they have been scanned both at " @@ -6601,20 +6674,21 @@ msgstr "" "يتم تجاهل قوائم التسجيل إذا تم ضبطها على \"السماح بإعادة الدخول بعد فحص " "الخروج\" لمنع الحجز الزائد غير المقصود." -#: pretix/base/models/items.py:2122 pretix/control/navigation.py:169 +#: pretix/base/models/items.py:2132 pretix/control/navigation.py:169 #: pretix/control/templates/pretixcontrol/items/quotas.html:5 #: pretix/control/templates/pretixcontrol/items/quotas.html:7 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:418 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:185 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:59 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:76 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:59 msgid "Quotas" msgstr "الحصص" -#: pretix/base/models/items.py:2195 +#: pretix/base/models/items.py:2205 msgid "All variations must belong to an item contained in the items list." msgstr "يجب أن تنتمي جميع الأنواع إلى عنصر موجود في قائمة العناصر." -#: pretix/base/models/items.py:2206 +#: pretix/base/models/items.py:2216 msgid "" "One or more items has variations but none of these are in the variations " "list." @@ -6622,23 +6696,23 @@ msgstr "" "يحتوي عنصر واحد أو أكثر على أشكال مختلفة ولكن لا يوجد أي منها في قائمة " "المتغيرات." -#: pretix/base/models/items.py:2212 pretix/base/models/waitinglist.py:304 +#: pretix/base/models/items.py:2222 pretix/base/models/waitinglist.py:304 msgid "Subevent cannot be null for event series." msgstr "لا يمكن أن تكون الفعالية الفرعية في سلسلة الفعاليات غير معرفة." -#: pretix/base/models/items.py:2248 +#: pretix/base/models/items.py:2258 #, fuzzy #| msgid "Required for events" msgid "Required for products" msgstr "مطلوب للفعاليات" -#: pretix/base/models/items.py:2249 +#: pretix/base/models/items.py:2259 msgid "" "If checked, this property must be set in each product. Does not apply if a " "default value is set." msgstr "" -#: pretix/base/models/items.py:2254 +#: pretix/base/models/items.py:2264 msgid "" "If you keep this empty, any value is allowed. Otherwise, enter one possible " "value per line." @@ -6646,13 +6720,13 @@ msgstr "" "إذا أبقيت هذا فارغا ، فسيتم السماح بأي قيمة. وإلا ، أدخل قيمة واحدة محتملة " "في كل سطر." -#: pretix/base/models/items.py:2313 +#: pretix/base/models/items.py:2323 #, fuzzy #| msgid "Start date" msgid "Start" msgstr "تاريخ البداية" -#: pretix/base/models/items.py:2314 +#: pretix/base/models/items.py:2324 #: pretix/plugins/reports/accountingreport.py:129 #, fuzzy #| msgid "Enabled" @@ -6704,6 +6778,29 @@ msgstr "حاضر" msgid "bounced" msgstr "" +#: pretix/base/models/media.py:77 +msgctxt "reusable_medium" +msgid "Claim token" +msgstr "" + +#: pretix/base/models/media.py:82 +msgctxt "reusable_medium" +msgid "Label" +msgstr "" + +#: pretix/base/models/media.py:105 +#, fuzzy +#| msgid "Info text" +msgid "Linked tickets" +msgstr "معلومات النص" + +#: pretix/base/models/media.py:107 +msgid "" +"If you link to more than one ticket, make sure there is no overlap in " +"validity. If multiple tickets are valid at once, this will lead to failed " +"check-ins." +msgstr "" + #: pretix/base/models/memberships.py:44 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:28 msgid "Membership is transferable" @@ -6768,8 +6865,8 @@ msgstr "معلق" msgid "paid" msgstr "مدفوع" -#: pretix/base/models/orders.py:203 pretix/control/forms/filter.py:1857 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:35 +#: pretix/base/models/orders.py:203 pretix/control/forms/filter.py:1863 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:47 msgid "expired" msgstr "منتهي الصلاحية" @@ -6815,7 +6912,7 @@ msgid "" "scanned." msgstr "سيظهر هذا النص في أعلى نموذج عنوان الفاتورة أثناء تسجيل الخروج." -#: pretix/base/models/orders.py:300 pretix/base/models/orders.py:1534 +#: pretix/base/models/orders.py:300 pretix/base/models/orders.py:1556 msgid "Meta information" msgstr "المعلومات الوصفية" @@ -6825,25 +6922,25 @@ msgstr "المعلومات الوصفية" msgid "API meta information" msgstr "المعلومات الوصفية" -#: pretix/base/models/orders.py:418 pretix/plugins/sendmail/forms.py:236 +#: pretix/base/models/orders.py:440 pretix/plugins/sendmail/forms.py:236 #: pretix/plugins/sendmail/forms.py:389 pretix/plugins/sendmail/views.py:269 msgid "approval pending" msgstr "في انتظار الموافقة" -#: pretix/base/models/orders.py:420 +#: pretix/base/models/orders.py:442 #, fuzzy #| msgid "Pending (overdue)" msgctxt "order state" msgid "pending (confirmed)" msgstr "في انتظار (تأخر)" -#: pretix/base/models/orders.py:422 +#: pretix/base/models/orders.py:444 #, fuzzy #| msgid "Canceled (paid fee)" msgid "canceled (paid fee)" msgstr "إلغاء (الرسوم المدفوعة)" -#: pretix/base/models/orders.py:1035 +#: pretix/base/models/orders.py:1057 msgid "" "The payment can not be accepted as the last date of payments configured in " "the payment settings is over." @@ -6851,7 +6948,7 @@ msgstr "" "لا يمكن قبول الدفع نظرا لانتهاء آخر تاريخ للدفعات التي تم إعداده في إعدادات " "السداد." -#: pretix/base/models/orders.py:1037 +#: pretix/base/models/orders.py:1059 msgid "" "The payment can not be accepted as the order is expired and you configured " "that no late payments should be accepted in the payment settings." @@ -6859,124 +6956,124 @@ msgstr "" "لا يمكن قبول الدفع نظرا لانتهاء صلاحية الطلب ولاختيارك عدم قبول المدفوعات " "المتأخرة في إعدادات السداد." -#: pretix/base/models/orders.py:1039 +#: pretix/base/models/orders.py:1061 msgid "This order is not yet approved by the event organizer." msgstr "لم تتم الموافقة على هذا الطلب بعد من قبل منظم الفعالية." -#: pretix/base/models/orders.py:1064 +#: pretix/base/models/orders.py:1086 #, python-brace-format msgid "The ordered product \"{item}\" is no longer available." msgstr "المنتج المطلوب \"{item}\" لم يعد متاحا." -#: pretix/base/models/orders.py:1065 +#: pretix/base/models/orders.py:1087 #, python-brace-format msgid "The seat \"{seat}\" is no longer available." msgstr "المقعد \"{seat}\" لم يعد متاحا." -#: pretix/base/models/orders.py:1066 +#: pretix/base/models/orders.py:1088 #, python-brace-format msgid "The voucher \"{voucher}\" no longer has sufficient budget." msgstr "كود خصم \"{voucher}\" لم يعد به ميزانية كافية." -#: pretix/base/models/orders.py:1067 +#: pretix/base/models/orders.py:1089 #, python-brace-format msgid "The voucher \"{voucher}\" has been used in the meantime." msgstr "يتم استخدام كود الخصم \"{voucher}\"في هذه الأثناء." -#: pretix/base/models/orders.py:1395 +#: pretix/base/models/orders.py:1417 msgid "" msgstr "" -#: pretix/base/models/orders.py:1514 pretix/base/models/orders.py:1522 +#: pretix/base/models/orders.py:1536 pretix/base/models/orders.py:1544 msgid "Empty, if this product is not an admission ticket" msgstr "فارغ ، إذا لم يكن هذا المنتج تذكرة دخول" -#: pretix/base/models/orders.py:1731 +#: pretix/base/models/orders.py:1753 msgctxt "payment_state" msgid "created" msgstr "تم إنشاؤه" -#: pretix/base/models/orders.py:1732 +#: pretix/base/models/orders.py:1754 msgctxt "payment_state" msgid "pending" msgstr "قيد الانتظار" -#: pretix/base/models/orders.py:1733 +#: pretix/base/models/orders.py:1755 msgctxt "payment_state" msgid "confirmed" msgstr "تم التأكيد" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1756 msgctxt "payment_state" msgid "canceled" msgstr "ملغي" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1757 msgctxt "payment_state" msgid "failed" msgstr "فشل" -#: pretix/base/models/orders.py:1736 +#: pretix/base/models/orders.py:1758 msgctxt "payment_state" msgid "refunded" msgstr "تم الاسترداد" -#: pretix/base/models/orders.py:1764 pretix/base/models/orders.py:2193 +#: pretix/base/models/orders.py:1786 pretix/base/models/orders.py:2215 #: pretix/base/shredder.py:637 msgid "Payment information" msgstr "معلومات الدفع" -#: pretix/base/models/orders.py:2134 +#: pretix/base/models/orders.py:2156 msgctxt "refund_state" msgid "started externally" msgstr "بدأ من الخارج" -#: pretix/base/models/orders.py:2135 +#: pretix/base/models/orders.py:2157 msgctxt "refund_state" msgid "created" msgstr "تم الإنشاء" -#: pretix/base/models/orders.py:2136 +#: pretix/base/models/orders.py:2158 msgctxt "refund_state" msgid "in transit" msgstr "قيد الإرسال" -#: pretix/base/models/orders.py:2137 +#: pretix/base/models/orders.py:2159 msgctxt "refund_state" msgid "done" msgstr "منجز" -#: pretix/base/models/orders.py:2138 +#: pretix/base/models/orders.py:2160 msgctxt "refund_state" msgid "failed" msgstr "فشل" -#: pretix/base/models/orders.py:2140 +#: pretix/base/models/orders.py:2162 msgctxt "refund_state" msgid "canceled" msgstr "ألغيت" -#: pretix/base/models/orders.py:2148 +#: pretix/base/models/orders.py:2170 msgctxt "refund_source" msgid "Organizer" msgstr "منظم" -#: pretix/base/models/orders.py:2149 +#: pretix/base/models/orders.py:2171 msgctxt "refund_source" msgid "Customer" msgstr "عميل" -#: pretix/base/models/orders.py:2150 +#: pretix/base/models/orders.py:2172 msgctxt "refund_source" msgid "External" msgstr "خارجي" -#: pretix/base/models/orders.py:2188 +#: pretix/base/models/orders.py:2210 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:198 msgid "Refund reason" msgstr "سبب استرداد الأموال" -#: pretix/base/models/orders.py:2189 +#: pretix/base/models/orders.py:2211 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:199 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:201 msgid "" @@ -6985,39 +7082,39 @@ msgstr "" "قد يتم عرضها للمستخدم النهائي أو استخدامها على سبيل المثال كجزء من مرجع " "السداد." -#: pretix/base/models/orders.py:2309 +#: pretix/base/models/orders.py:2331 msgid "Service fee" msgstr "رسوم الخدمة" -#: pretix/base/models/orders.py:2310 +#: pretix/base/models/orders.py:2332 msgid "Payment fee" msgstr "رسوم السداد" -#: pretix/base/models/orders.py:2311 +#: pretix/base/models/orders.py:2333 msgid "Shipping fee" msgstr "رسوم الشحن" -#: pretix/base/models/orders.py:2312 +#: pretix/base/models/orders.py:2334 #: pretix/control/templates/pretixcontrol/order/index.html:190 msgid "Cancellation fee" msgstr "رسوم الإلغاء" -#: pretix/base/models/orders.py:2313 +#: pretix/base/models/orders.py:2335 msgid "Insurance fee" msgstr "" -#: pretix/base/models/orders.py:2314 +#: pretix/base/models/orders.py:2336 #, fuzzy #| msgid "Other fees" msgid "Late fee" msgstr "رسوم أخرى" -#: pretix/base/models/orders.py:2315 +#: pretix/base/models/orders.py:2337 msgid "Other fees" msgstr "رسوم أخرى" -#: pretix/base/models/orders.py:2316 pretix/base/payment.py:1379 -#: pretix/base/payment.py:1455 pretix/base/settings.py:1101 +#: pretix/base/models/orders.py:2338 pretix/base/payment.py:1379 +#: pretix/base/payment.py:1455 pretix/base/settings.py:1114 #: pretix/control/templates/pretixcontrol/items/index.html:117 #: pretix/control/templates/pretixcontrol/order/index.html:185 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:383 @@ -7026,7 +7123,7 @@ msgstr "رسوم أخرى" msgid "Gift card" msgstr "بطاقة هدايا" -#: pretix/base/models/orders.py:2321 +#: pretix/base/models/orders.py:2343 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:84 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:126 #: pretix/control/views/vouchers.py:121 @@ -7034,61 +7131,61 @@ msgstr "بطاقة هدايا" msgid "Value" msgstr "قيمة" -#: pretix/base/models/orders.py:2602 +#: pretix/base/models/orders.py:2624 msgid "Order position" msgstr "حالة الطلب" -#: pretix/base/models/orders.py:3157 +#: pretix/base/models/orders.py:3179 msgid "Cart ID (e.g. session key)" msgstr "معرف عربة التسوق (مثل مفتاح الجلسة)" -#: pretix/base/models/orders.py:3168 +#: pretix/base/models/orders.py:3190 #, fuzzy #| msgid "Expiration date" msgid "Limit for extending expiration date" msgstr "تاريخ إنتهاء الصلاحية" -#: pretix/base/models/orders.py:3204 +#: pretix/base/models/orders.py:3226 msgid "Cart position" msgstr "حالة سلة التسوق" -#: pretix/base/models/orders.py:3205 +#: pretix/base/models/orders.py:3227 msgid "Cart positions" msgstr "حالات سلة التسوق" -#: pretix/base/models/orders.py:3347 +#: pretix/base/models/orders.py:3369 msgid "Business customer" msgstr "عميل قطاع الأعمال" -#: pretix/base/models/orders.py:3363 +#: pretix/base/models/orders.py:3385 msgid "This reference will be printed on your invoice for your convenience." msgstr "ستتم طباعة هذا المرجع على فاتورتك وفقا لما يناسبك." -#: pretix/base/models/orders.py:3489 +#: pretix/base/models/orders.py:3511 #, fuzzy #| msgid "Transaction Code" msgid "Transmission type" msgstr "كود المعاملة" -#: pretix/base/models/orders.py:3580 +#: pretix/base/models/orders.py:3602 #: pretix/plugins/badges/templates/pretixplugins/badges/control_order_position_buttons.html:9 msgid "Badge" msgstr "شارة" -#: pretix/base/models/orders.py:3581 pretix/base/pdf.py:1157 +#: pretix/base/models/orders.py:3603 pretix/base/pdf.py:1162 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:66 #: pretix/plugins/ticketoutputpdf/ticketoutput.py:114 msgid "Ticket" msgstr "تذكرة" -#: pretix/base/models/orders.py:3582 +#: pretix/base/models/orders.py:3604 #, fuzzy #| msgid "Verification failed" msgid "Certificate" msgstr "فشل التحقق" -#: pretix/base/models/orders.py:3583 pretix/control/views/event.py:401 -#: pretix/control/views/event.py:406 pretix/control/views/organizer.py:653 +#: pretix/base/models/orders.py:3605 pretix/control/views/event.py:402 +#: pretix/control/views/event.py:407 pretix/control/views/organizer.py:653 #: pretix/control/views/organizer.py:658 #, fuzzy #| msgid "Other…" @@ -7142,7 +7239,7 @@ msgid "All event permissions" msgstr "أذونات الحدث" #: pretix/base/models/organizer.py:385 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:34 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:47 msgid "Event permissions" msgstr "أذونات الحدث" @@ -7153,7 +7250,7 @@ msgid "All organizer permissions" msgstr "أذونات منظم" #: pretix/base/models/organizer.py:387 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:25 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:26 msgid "Organizer permissions" msgstr "أذونات منظم" @@ -7192,7 +7289,7 @@ msgid "Type" msgstr "نوع" #: pretix/base/models/seating.py:46 pretix/base/models/tax.py:306 -#: pretix/base/pdf.py:1336 +#: pretix/base/pdf.py:1341 msgid "Your layout file is not a valid JSON file." msgstr "ملف التخطيط الخاص بك ليس ملف \"ترميز باستعمال جافا سكريبت\" صالح." @@ -7211,12 +7308,12 @@ msgstr "" msgid "Multiple seats have the same ID: {id}" msgstr "" -#: pretix/base/models/seating.py:200 +#: pretix/base/models/seating.py:203 #, python-brace-format msgid "Row {number}" msgstr "صف {number}" -#: pretix/base/models/seating.py:205 +#: pretix/base/models/seating.py:208 #, python-brace-format msgid "Seat {number}" msgstr "مقعد {number}" @@ -8149,7 +8246,7 @@ msgstr "" msgid "Offsetting" msgstr "تعويض" -#: pretix/base/payment.py:1339 pretix/control/views/orders.py:1252 +#: pretix/base/payment.py:1339 pretix/control/views/orders.py:1266 msgid "You entered an order that could not be found." msgstr "لقد أدخلت طلبا لا يمكن العثور عليه." @@ -8190,7 +8287,7 @@ msgid "Product name" msgstr "اسم المنتج" #: pretix/base/pdf.py:124 pretix/base/services/tickets.py:98 -#: pretix/control/views/event.py:941 pretix/control/views/pdf.py:96 +#: pretix/control/views/event.py:942 pretix/control/views/pdf.py:96 msgid "Sample product" msgstr "نموذج منتج" @@ -8207,7 +8304,7 @@ msgid "Product description" msgstr "وصف المنتج" #: pretix/base/pdf.py:134 pretix/base/services/tickets.py:99 -#: pretix/control/views/event.py:942 pretix/control/views/pdf.py:97 +#: pretix/control/views/event.py:943 pretix/control/views/pdf.py:97 msgid "Sample product description" msgstr "نموذج وصف منتج" @@ -8252,7 +8349,7 @@ msgstr "السعر شاملا الإضافات" #: pretix/base/services/placeholders.py:604 #: pretix/base/services/placeholders.py:689 #: pretix/base/services/placeholders.py:705 -#: pretix/base/services/placeholders.py:714 pretix/control/views/event.py:943 +#: pretix/base/services/placeholders.py:714 pretix/control/views/event.py:944 msgid "John Doe" msgstr "جون دو" @@ -8335,9 +8432,9 @@ msgstr "20:00 2017-05-31" msgid "Event begin date" msgstr "تاريخ بداية الفعالية" -#: pretix/base/pdf.py:264 pretix/base/pdf.py:290 pretix/base/pdf.py:406 -#: pretix/base/pdf.py:430 pretix/base/pdf.py:454 pretix/base/pdf.py:478 -#: pretix/base/pdf.py:541 pretix/base/pdf.py:546 +#: pretix/base/pdf.py:264 pretix/base/pdf.py:290 pretix/base/pdf.py:411 +#: pretix/base/pdf.py:435 pretix/base/pdf.py:459 pretix/base/pdf.py:483 +#: pretix/base/pdf.py:546 pretix/base/pdf.py:551 msgid "2017-05-31" msgstr "2017-05-31" @@ -8356,8 +8453,8 @@ msgid "Event begin weekday" msgstr "تاريخ بداية الفعالية" #: pretix/base/pdf.py:277 pretix/base/pdf.py:306 -#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1399 -#: pretix/control/forms/filter.py:1577 +#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1405 +#: pretix/control/forms/filter.py:1583 msgid "Friday" msgstr "يوم الجمعة" @@ -8383,8 +8480,8 @@ msgstr "تاريخ إنتهاء الفعالية" msgid "Event admission date and time" msgstr "تاريخ ووقت قبول الفعالية" -#: pretix/base/pdf.py:311 pretix/base/pdf.py:414 pretix/base/pdf.py:438 -#: pretix/base/pdf.py:462 pretix/base/pdf.py:486 pretix/base/pdf.py:535 +#: pretix/base/pdf.py:311 pretix/base/pdf.py:419 pretix/base/pdf.py:443 +#: pretix/base/pdf.py:467 pretix/base/pdf.py:491 pretix/base/pdf.py:540 msgid "2017-05-31 19:00" msgstr "19:00 2017-05-31" @@ -8392,8 +8489,8 @@ msgstr "19:00 2017-05-31" msgid "Event admission time" msgstr "وقت تسجيل الفعالية" -#: pretix/base/pdf.py:319 pretix/base/pdf.py:422 pretix/base/pdf.py:446 -#: pretix/base/pdf.py:470 pretix/base/pdf.py:494 +#: pretix/base/pdf.py:319 pretix/base/pdf.py:427 pretix/base/pdf.py:451 +#: pretix/base/pdf.py:475 pretix/base/pdf.py:499 msgid "19:00" msgstr "19:00" @@ -8401,7 +8498,7 @@ msgstr "19:00" msgid "Event location" msgstr "موقع الفعالية" -#: pretix/base/pdf.py:327 pretix/base/settings.py:1335 +#: pretix/base/pdf.py:327 pretix/base/settings.py:1348 msgid "Random City" msgstr "مدينة عشوائية" @@ -8430,10 +8527,21 @@ msgid "Atlantis" msgstr "اتلانتس" #: pretix/base/pdf.py:376 +#, fuzzy +msgid "Invoice custom recipient field" +msgstr "مستلم الفاتورة:" + +#: pretix/base/pdf.py:377 +#, fuzzy +#| msgid "Custom address field" +msgid "Custom recipient field" +msgstr "حقل العنوان المخصص" + +#: pretix/base/pdf.py:381 msgid "List of Add-Ons" msgstr "قائمة الإضافات" -#: pretix/base/pdf.py:377 pretix/base/pdf.py:384 +#: pretix/base/pdf.py:382 pretix/base/pdf.py:389 #, fuzzy #| msgid "" #| "Add-on 1\n" @@ -8445,187 +8553,187 @@ msgstr "" "الإضافة 1\n" "الإضافة 2" -#: pretix/base/pdf.py:383 +#: pretix/base/pdf.py:388 #, fuzzy #| msgid "List of Add-Ons" msgid "List of Checked-In Add-Ons" msgstr "قائمة الإضافات" -#: pretix/base/pdf.py:390 pretix/control/forms/filter.py:1664 -#: pretix/control/forms/filter.py:1666 +#: pretix/base/pdf.py:395 pretix/control/forms/filter.py:1670 +#: pretix/control/forms/filter.py:1672 #: pretix/control/templates/pretixcontrol/organizers/index.html:42 msgid "Organizer name" msgstr "اسم المنظم" -#: pretix/base/pdf.py:391 +#: pretix/base/pdf.py:396 msgid "Event organizer company" msgstr "شركة منظم الفعالية" -#: pretix/base/pdf.py:395 +#: pretix/base/pdf.py:400 msgid "Organizer info text" msgstr "نص معلومات المنظم" -#: pretix/base/pdf.py:396 +#: pretix/base/pdf.py:401 msgid "Event organizer info text" msgstr "نص معلومات منظم الفعالية" -#: pretix/base/pdf.py:400 pretix/base/pdf.py:401 +#: pretix/base/pdf.py:405 pretix/base/pdf.py:406 msgid "Event info text" msgstr "نص معلومات الفعالية" -#: pretix/base/pdf.py:405 +#: pretix/base/pdf.py:410 msgid "Printing date" msgstr "تاريخ الطباعة" -#: pretix/base/pdf.py:413 +#: pretix/base/pdf.py:418 msgid "Printing date and time" msgstr "تاريخ ووقت الطباعة" -#: pretix/base/pdf.py:421 +#: pretix/base/pdf.py:426 msgid "Printing time" msgstr "وقت الطباعة" -#: pretix/base/pdf.py:429 pretix/control/forms/item.py:796 +#: pretix/base/pdf.py:434 pretix/control/forms/item.py:796 #, fuzzy #| msgid "Purchased" msgid "Purchase date" msgstr "اشترى" -#: pretix/base/pdf.py:437 +#: pretix/base/pdf.py:442 #, fuzzy #| msgid "Purchased" msgid "Purchase date and time" msgstr "اشترى" -#: pretix/base/pdf.py:445 +#: pretix/base/pdf.py:450 #, fuzzy #| msgid "Purchased" msgid "Purchase time" msgstr "اشترى" -#: pretix/base/pdf.py:453 +#: pretix/base/pdf.py:458 #, fuzzy #| msgid "Valid until" msgid "Validity start date" msgstr "حتى تاريخ" -#: pretix/base/pdf.py:461 +#: pretix/base/pdf.py:466 #, fuzzy #| msgid "Printing date and time" msgid "Validity start date and time" msgstr "تاريخ ووقت الطباعة" -#: pretix/base/pdf.py:469 +#: pretix/base/pdf.py:474 #, fuzzy #| msgid "Valid until" msgid "Validity start time" msgstr "حتى تاريخ" -#: pretix/base/pdf.py:477 +#: pretix/base/pdf.py:482 #, fuzzy #| msgid "Valid until" msgid "Validity end date" msgstr "حتى تاريخ" -#: pretix/base/pdf.py:485 +#: pretix/base/pdf.py:490 #, fuzzy #| msgid "Event end date and time" msgid "Validity end date and time" msgstr "تاريخ ووقت إنتهاء الفعالية" -#: pretix/base/pdf.py:493 +#: pretix/base/pdf.py:498 #, fuzzy #| msgid "Valid until" msgid "Validity end time" msgstr "حتى تاريخ" -#: pretix/base/pdf.py:501 pretix/control/forms/item.py:1386 +#: pretix/base/pdf.py:506 pretix/control/forms/item.py:1386 #, fuzzy #| msgid "Printing time" msgid "Program times" msgstr "وقت الطباعة" -#: pretix/base/pdf.py:503 +#: pretix/base/pdf.py:508 msgid "" "2017-05-31 10:00 – 12:00, Room 1\n" "2017-05-31 14:00 – 16:00, Room 2\n" "2017-05-31 14:00 – 2017-06-01 14:00, Building A" msgstr "" -#: pretix/base/pdf.py:507 +#: pretix/base/pdf.py:512 msgid "Reusable Medium ID" msgstr "" -#: pretix/base/pdf.py:512 +#: pretix/base/pdf.py:517 msgid "Seat: Full name" msgstr "مقعد: الاسم الكامل" -#: pretix/base/pdf.py:513 +#: pretix/base/pdf.py:518 msgid "Ground floor, Row 3, Seat 4" msgstr "الطابق الأرضي، الصف 3، مقعد 4" -#: pretix/base/pdf.py:515 pretix/base/pdf.py:521 +#: pretix/base/pdf.py:520 pretix/base/pdf.py:526 #: pretix/control/forms/orders.py:348 msgid "General admission" msgstr "التسجيل العام" -#: pretix/base/pdf.py:518 +#: pretix/base/pdf.py:523 msgid "Seat: zone" msgstr "مقعد: المنطقة" -#: pretix/base/pdf.py:519 +#: pretix/base/pdf.py:524 msgid "Ground floor" msgstr "الطابق الأرضي" -#: pretix/base/pdf.py:524 +#: pretix/base/pdf.py:529 msgid "Seat: row" msgstr "مقعد: صف" -#: pretix/base/pdf.py:529 +#: pretix/base/pdf.py:534 msgid "Seat: seat number" msgstr "مقعد: عدد المقاعد" -#: pretix/base/pdf.py:534 +#: pretix/base/pdf.py:539 msgid "Date and time of first scan" msgstr "تاريخ ووقت أول مسح" -#: pretix/base/pdf.py:540 +#: pretix/base/pdf.py:545 #, fuzzy #| msgid "Gift card code" msgid "Gift card: Issuance date" msgstr "رمز بطاقة الهدية" -#: pretix/base/pdf.py:545 +#: pretix/base/pdf.py:550 #, fuzzy #| msgid "Expiration date" msgid "Gift card: Expiration date" msgstr "تاريخ إنتهاء الصلاحية" -#: pretix/base/pdf.py:586 pretix/base/pdf.py:624 pretix/base/pdf.py:630 +#: pretix/base/pdf.py:591 pretix/base/pdf.py:629 pretix/base/pdf.py:635 #: pretix/plugins/badges/exporters.py:512 #: pretix/plugins/ticketoutputpdf/exporters.py:102 #, python-brace-format msgid "Question: {question}" msgstr "سؤال: {question}" -#: pretix/base/pdf.py:625 pretix/base/pdf.py:631 +#: pretix/base/pdf.py:630 pretix/base/pdf.py:636 #, python-brace-format msgid "" msgstr "<جواب: {question}>" -#: pretix/base/pdf.py:672 +#: pretix/base/pdf.py:677 #, fuzzy #| msgid "Attendee names" msgid "Attendee name for salutation" msgstr "أسماء الحضور" -#: pretix/base/pdf.py:673 pretix/base/pdf.py:696 +#: pretix/base/pdf.py:678 pretix/base/pdf.py:701 #: pretix/base/services/placeholders.py:732 -#: pretix/control/forms/organizer.py:799 +#: pretix/control/forms/organizer.py:809 msgid "Mr Doe" msgstr "السيد دو" -#: pretix/base/pdf.py:679 pretix/base/pdf.py:686 +#: pretix/base/pdf.py:684 pretix/base/pdf.py:691 #: pretix/plugins/badges/exporters.py:509 #: pretix/plugins/checkinlists/exporters.py:126 #: pretix/plugins/checkinlists/exporters.py:498 @@ -8634,18 +8742,18 @@ msgstr "السيد دو" msgid "Attendee name: {part}" msgstr "اسم الحاضر: {part}" -#: pretix/base/pdf.py:695 +#: pretix/base/pdf.py:700 #, fuzzy #| msgid "Invoice address explanation" msgid "Invoice address name for salutation" msgstr "شرح عنوان الفاتورة" -#: pretix/base/pdf.py:702 +#: pretix/base/pdf.py:707 #, python-brace-format msgid "Invoice address name: {part}" msgstr "اسم عنوان الفاتورة: {part}" -#: pretix/base/pdf.py:1345 +#: pretix/base/pdf.py:1350 #, fuzzy, python-brace-format #| msgid "Your layout file is not a valid seating plan. Error message: {}" msgid "Your layout file is not a valid layout. Error message: {}" @@ -9111,7 +9219,7 @@ msgstr[5] "" #: pretix/base/services/cart.py:152 pretix/base/services/orders.py:164 #: pretix/presale/templates/pretixpresale/event/index.html:170 -#: pretix/presale/views/waiting.py:150 pretix/presale/views/widget.py:843 +#: pretix/presale/views/waiting.py:150 pretix/presale/views/widget.py:846 #, fuzzy #| msgid "The presale period for this event has not yet started." msgid "The booking period for this event has not yet started." @@ -9479,33 +9587,33 @@ msgstr "عدد الإدخالات اليوم" msgid "week day" msgstr "يوم عطلة نهاية الأسبوع" -#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1395 -#: pretix/control/forms/filter.py:1573 +#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1401 +#: pretix/control/forms/filter.py:1579 msgid "Monday" msgstr "يوم الاثنين" -#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1396 -#: pretix/control/forms/filter.py:1574 +#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1402 +#: pretix/control/forms/filter.py:1580 msgid "Tuesday" msgstr "الثلاثاء" -#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1397 -#: pretix/control/forms/filter.py:1575 +#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1403 +#: pretix/control/forms/filter.py:1581 msgid "Wednesday" msgstr "الأربعاء" -#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1398 -#: pretix/control/forms/filter.py:1576 +#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1404 +#: pretix/control/forms/filter.py:1582 msgid "Thursday" msgstr "الخميس" -#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1400 -#: pretix/control/forms/filter.py:1578 +#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1406 +#: pretix/control/forms/filter.py:1584 msgid "Saturday" msgstr "يوم السبت" -#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1401 -#: pretix/control/forms/filter.py:1579 +#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1407 +#: pretix/control/forms/filter.py:1585 msgid "Sunday" msgstr "الأحد" @@ -9529,60 +9637,70 @@ msgstr "تم تجاوز الحد الأدنى {variable}" msgid "{variable} is {value}" msgstr "{variable} هو {value}" -#: pretix/base/services/checkin.py:972 +#: pretix/base/services/checkin.py:982 msgid "This order position has been canceled." msgstr "تم إلغاء وضع الطلب هذا." -#: pretix/base/services/checkin.py:981 +#: pretix/base/services/checkin.py:991 #, fuzzy #| msgid "This ticket has already been redeemed." msgid "This ticket has been blocked." msgstr "تم استخدام هذه التذكرة مسبقا." -#: pretix/base/services/checkin.py:990 +#: pretix/base/services/checkin.py:1000 #, fuzzy #| msgid "This order is not pending approval." msgid "This order is not yet approved." msgstr "هذا الطلب ليس في انتظار الموافقة." -#: pretix/base/services/checkin.py:999 pretix/base/services/checkin.py:1003 +#: pretix/base/services/checkin.py:1009 pretix/base/services/checkin.py:1013 #, fuzzy, python-brace-format #| msgid "Only allowed after {datetime}" msgid "This ticket is only valid after {datetime}." msgstr "مسموح فقط بعد {datetime}" -#: pretix/base/services/checkin.py:1013 pretix/base/services/checkin.py:1017 +#: pretix/base/services/checkin.py:1023 pretix/base/services/checkin.py:1027 #, fuzzy, python-brace-format #| msgid "This ticket has already been redeemed." msgid "This ticket was only valid before {datetime}." msgstr "تم استخدام هذه التذكرة مسبقا." -#: pretix/base/services/checkin.py:1048 +#: pretix/base/services/checkin.py:1058 msgid "This order position has an invalid product for this check-in list." msgstr "يحتوي هذا الطلب على منتج غير صالح لقائمة التسجيل هذه." -#: pretix/base/services/checkin.py:1057 +#: pretix/base/services/checkin.py:1067 msgid "This order position has an invalid date for this check-in list." msgstr "يحتوي هذا الطلب على تاريخ غير صالح لقائمة التسجيل هذه." -#: pretix/base/services/checkin.py:1068 +#: pretix/base/services/checkin.py:1078 msgid "This order is not marked as paid." msgstr "لم يتم تمييز هذا الطلب على أنه مدفوع." -#: pretix/base/services/checkin.py:1080 +#: pretix/base/services/checkin.py:1090 msgid "Evaluation of custom rules has failed." msgstr "" -#: pretix/base/services/checkin.py:1090 +#: pretix/base/services/checkin.py:1100 #, python-brace-format msgid "Entry not permitted: {explanation}." msgstr "غير مسموح بالدخول: {explanation}." -#: pretix/base/services/checkin.py:1099 +#: pretix/base/services/checkin.py:1109 msgid "You need to answer questions to complete this check-in." msgstr "تحتاج إلى الإجابة على الأسئلة لإكمال هذا التسجيل." -#: pretix/base/services/checkin.py:1152 +#: pretix/base/services/checkin.py:1121 +msgid "Ticket needs to be exchanged to a suitable medium." +msgstr "" + +#: pretix/base/services/checkin.py:1128 +msgid "" +"This ticket has already been exchanged for a reusable medium that now needs " +"to be used instead." +msgstr "" + +#: pretix/base/services/checkin.py:1180 msgid "This ticket has already been redeemed." msgstr "تم استخدام هذه التذكرة مسبقا." @@ -9754,6 +9872,64 @@ msgstr "" msgid "You are receiving this email because you placed an order for {event}." msgstr "أنت تتلقى هذا البريد الإلكتروني لأنك قدمت طلبا ل {event}." +#: pretix/base/services/media.py:93 pretix/base/services/media.py:95 +#, fuzzy +#| msgid "Invalid input data." +msgid "Invalid medium type." +msgstr "بيانات الإدخال غير صالحة." + +#: pretix/base/services/media.py:100 pretix/base/services/media.py:102 +#, fuzzy +#| msgid "The selected product is not active or has no price set." +msgid "Medium type is not enabled for organizer." +msgstr "المنتج المحدد غير نشط أو ليس له سعر محدد." + +#: pretix/base/services/media.py:107 pretix/base/services/media.py:109 +msgid "Incorrect medium type for product." +msgstr "" + +#: pretix/base/services/media.py:114 pretix/base/services/media.py:116 +#, fuzzy +#| msgid "This ticket has already been redeemed." +msgid "Ticket is already exchanged for reusable medium." +msgstr "تم استخدام هذه التذكرة مسبقا." + +#: pretix/base/services/media.py:133 pretix/base/services/media.py:135 +#, fuzzy +#| msgid "Disable selected" +msgid "Reusable medium not found." +msgstr "تعطيل المختارة" + +#: pretix/base/services/media.py:140 pretix/base/services/media.py:142 +#: pretix/base/services/media.py:168 pretix/base/services/media.py:170 +#, fuzzy +#| msgid "The team has been created." +msgid "Reusable medium is inactive or expired." +msgstr "تم إنشاء فريق." + +#: pretix/base/services/media.py:155 pretix/base/services/media.py:162 +#: pretix/base/services/media.py:176 +#, fuzzy +#| msgid "The team has been created." +msgid "Reusable medium not found and could not be created." +msgstr "تم إنشاء فريق." + +#: pretix/base/services/media.py:183 +#, fuzzy +#| msgid "Disable selected" +msgid "Reusable medium already exists." +msgstr "تعطيل المختارة" + +#: pretix/base/services/media.py:189 +#, fuzzy +#| msgid "The team has been created." +msgid "Reusable medium could not be created." +msgstr "تم إنشاء فريق." + +#: pretix/base/services/media.py:195 pretix/base/services/media.py:197 +msgid "Product does not support medium exchange." +msgstr "" + #: pretix/base/services/memberships.py:108 #, python-brace-format msgid "" @@ -10483,50 +10659,61 @@ msgstr "" #: pretix/base/settings.py:214 #, fuzzy #| msgid "Disable selected" -msgid "Activate re-usable media" +msgid "Activate reusable media" msgstr "تعطيل المختارة" #: pretix/base/settings.py:215 msgid "" -"The re-usable media feature allows you to connect tickets and gift cards " -"with physical media such as wristbands or chip cards that may be re-used for " +"The reusable media feature allows you to connect tickets and gift cards with " +"physical media such as wristbands or chip cards that may be reused for " "different tickets or gift cards later." msgstr "" -#: pretix/base/settings.py:241 +#: pretix/base/settings.py:226 +msgid "Enforce the usage of issued reusable media for check-in" +msgstr "" + +#: pretix/base/settings.py:227 +msgid "" +"If enabled, a ticket barcode will not be accepted anymore, if a reusable " +"medium has been created and linked to a ticket. Keeping this option turned " +"off will treat the reusable medium and ticket as equals." +msgstr "" + +#: pretix/base/settings.py:254 #, fuzzy #| msgid "Length of gift card codes" msgid "Length of barcodes" msgstr "طول رموز بطاقات الهدايا" -#: pretix/base/settings.py:270 +#: pretix/base/settings.py:283 msgid "" "Automatically create a new gift card if a previously unknown chip is seen" msgstr "" -#: pretix/base/settings.py:283 pretix/base/settings.py:314 +#: pretix/base/settings.py:296 pretix/base/settings.py:327 #, fuzzy #| msgid "Gift card code" msgid "Gift card currency" msgstr "رمز بطاقة الهدية" -#: pretix/base/settings.py:301 +#: pretix/base/settings.py:314 msgid "Automatically create a new gift card if a new chip is encoded" msgstr "" -#: pretix/base/settings.py:323 +#: pretix/base/settings.py:336 msgid "Use UID protection feature of NFC chip" msgstr "" -#: pretix/base/settings.py:339 +#: pretix/base/settings.py:352 msgid "Maximum number of items per order" msgstr "الحد الأقصى لعدد العناصر لكل طلب" -#: pretix/base/settings.py:340 +#: pretix/base/settings.py:353 msgid "Add-on products will not be counted." msgstr "لن يتم احتساب المنتجات الإضافية." -#: pretix/base/settings.py:350 +#: pretix/base/settings.py:363 #, fuzzy #| msgid "" #| "Show net prices instead of gross prices in the product list (not " @@ -10535,7 +10722,7 @@ msgid "Show net prices instead of gross prices in the product list" msgstr "" "عرض صافي الأسعار بدلا من الأسعار الإجمالية في قائمة المنتجات (غير مستحسن!)" -#: pretix/base/settings.py:351 +#: pretix/base/settings.py:364 msgid "" "Independent of your choice, the cart will show gross prices as this is the " "price that needs to be paid." @@ -10543,11 +10730,11 @@ msgstr "" "بغض النظر عن اختيارك ، ستعرض عربة التسوق الأسعار الإجمالية لأن هذا هو السعر " "الذي يجب دفعه." -#: pretix/base/settings.py:362 +#: pretix/base/settings.py:375 msgid "Hide prices on attendee ticket page" msgstr "" -#: pretix/base/settings.py:363 +#: pretix/base/settings.py:376 msgid "" "If a person buys multiple tickets and you send emails to all of the " "attendees, with this option the ticket price will not be shown on the ticket " @@ -10555,29 +10742,29 @@ msgid "" "price." msgstr "" -#: pretix/base/settings.py:381 +#: pretix/base/settings.py:394 msgid "Ask for attendee names" msgstr "اسأل عن أسماء الحضور" -#: pretix/base/settings.py:382 +#: pretix/base/settings.py:395 #, fuzzy #| msgid "Ask for a name for all tickets which include admission to the event." msgid "Ask for a name for all personalized tickets." msgstr "اطلب اسما لجميع التذاكر التي تشمل الدخول إلى الفعالية." -#: pretix/base/settings.py:391 +#: pretix/base/settings.py:404 msgid "Require attendee names" msgstr "اطلب أسماء الحضور" -#: pretix/base/settings.py:392 +#: pretix/base/settings.py:405 msgid "Require customers to fill in the names of all attendees." msgstr "مطالبة العملاء بملء أسماء جميع الحضور." -#: pretix/base/settings.py:402 +#: pretix/base/settings.py:415 msgid "Ask for email addresses per ticket" msgstr "اسأل عن عناوين البريد الإلكتروني للتذكرة الواحدة" -#: pretix/base/settings.py:403 +#: pretix/base/settings.py:416 #, fuzzy #| msgid "" #| "Normally, pretix asks for one email address per order and the order " @@ -10606,11 +10793,11 @@ msgstr "" "البريد الإلكتروني الأساسي الوحيد ، ليس لعناوين كل حاضر. ومع ذلك ، يمكنك " "تمكين هذا في إعدادات البريد الإلكتروني." -#: pretix/base/settings.py:417 +#: pretix/base/settings.py:430 msgid "Require email addresses per ticket" msgstr "يتطلب عناوين البريد الإلكتروني لكل تذكرة" -#: pretix/base/settings.py:418 +#: pretix/base/settings.py:431 #, fuzzy #| msgid "" #| "Require customers to fill in individual email addresses for all admission " @@ -10625,136 +10812,136 @@ msgstr "" "انظر الخيار أعلاه لمزيد من التفاصيل. سيطلب عنوان بريد إلكتروني واحد لتأكيد " "الطلب دائما بغض النظر عن هذا الإعداد." -#: pretix/base/settings.py:430 +#: pretix/base/settings.py:443 msgid "Ask for company per ticket" msgstr "اسأل عن شركة لكل تذكرة" -#: pretix/base/settings.py:439 +#: pretix/base/settings.py:452 msgid "Require company per ticket" msgstr "مطلوب شركة لكل تذكرة" -#: pretix/base/settings.py:449 +#: pretix/base/settings.py:462 msgid "Ask for postal addresses per ticket" msgstr "اسأل عن العناوين البريدية لكل تذكرة" -#: pretix/base/settings.py:458 +#: pretix/base/settings.py:471 msgid "Require postal addresses per ticket" msgstr "يتطلب العناوين البريدية لكل تذكرة" -#: pretix/base/settings.py:468 +#: pretix/base/settings.py:481 msgid "Ask for the order email address twice" msgstr "اطلب عنوان البريد الإلكتروني مرتين للطلب" -#: pretix/base/settings.py:469 +#: pretix/base/settings.py:482 msgid "" "Require customers to fill in the primary email address twice to avoid errors." msgstr "" "اطلب من العملاء ملء عنوان البريد الإلكتروني الأساسي مرتين لتجنب الأخطاء." -#: pretix/base/settings.py:478 +#: pretix/base/settings.py:491 msgid "Ask for a phone number per order" msgstr "اطلب رقم هاتف لكل طلب" -#: pretix/base/settings.py:487 +#: pretix/base/settings.py:500 msgid "Require a phone number per order" msgstr "يتطلب رقم هاتف لكل طلب" -#: pretix/base/settings.py:498 +#: pretix/base/settings.py:511 #, fuzzy #| msgid "including all taxes" msgid "Rounding of taxes" msgstr "بما في ذلك جميع الضرائب" -#: pretix/base/settings.py:502 +#: pretix/base/settings.py:515 msgid "" "Note that if you transfer your sales data from pretix to an external system " "for tax reporting, you need to make sure to account for possible rounding " "differences if your external system rounds differently than pretix." msgstr "" -#: pretix/base/settings.py:518 +#: pretix/base/settings.py:531 msgid "Ask for invoice address" msgstr "اطلب عنوان الفاتورة" -#: pretix/base/settings.py:528 +#: pretix/base/settings.py:541 msgid "Do not ask for invoice address if an order is free" msgstr "لا تسأل عن عنوان الفاتورة إذا كان الطلب مجانيا" -#: pretix/base/settings.py:538 +#: pretix/base/settings.py:551 msgid "Require customer name" msgstr "مطلوب اسم العميل" -#: pretix/base/settings.py:548 +#: pretix/base/settings.py:561 msgid "Show attendee names on invoices" msgstr "إظهار أسماء الحضور في الفواتير" -#: pretix/base/settings.py:558 +#: pretix/base/settings.py:571 #, fuzzy #| msgid "Show free products on invoices" msgid "Show event location on invoices" msgstr "عرض المنتجات المجانية على الفواتير" -#: pretix/base/settings.py:559 +#: pretix/base/settings.py:572 msgid "" "The event location will be shown below the list of products if it is the " "same for all lines. It will be shown on every line if there are different " "locations." msgstr "" -#: pretix/base/settings.py:570 +#: pretix/base/settings.py:583 #, fuzzy #| msgid "Show event end date" msgid "Show exchange rates" msgstr "إظهار تاريخ انتهاء الفعالية" -#: pretix/base/settings.py:573 pretix/base/settings.py:582 +#: pretix/base/settings.py:586 pretix/base/settings.py:595 #: pretix/control/forms/item.py:684 msgid "Never" msgstr "أبدا" -#: pretix/base/settings.py:574 pretix/base/settings.py:583 +#: pretix/base/settings.py:587 pretix/base/settings.py:596 msgid "" "Based on European Central Bank daily rates, whenever the invoice recipient " "is in an EU country that uses a different currency." msgstr "" -#: pretix/base/settings.py:576 pretix/base/settings.py:585 +#: pretix/base/settings.py:589 pretix/base/settings.py:598 msgid "" "Based on Czech National Bank daily rates, whenever the invoice amount is not " "in CZK." msgstr "" -#: pretix/base/settings.py:577 pretix/base/settings.py:586 +#: pretix/base/settings.py:590 pretix/base/settings.py:599 msgid "" "Based on National Bank of Poland daily rates, whenever the invoice amount is " "not in PLN." msgstr "" -#: pretix/base/settings.py:597 +#: pretix/base/settings.py:610 msgid "Require invoice address" msgstr "مطلوب عنوان الفاتورة" -#: pretix/base/settings.py:608 +#: pretix/base/settings.py:621 #, fuzzy #| msgid "Require a business addresses" msgid "Require a business address" msgstr "مطلوب عناوين العمل" -#: pretix/base/settings.py:609 +#: pretix/base/settings.py:622 msgid "This will require users to enter a company name." msgstr "سيتطلب هذا من المستخدمين إدخال اسم الشركة." -#: pretix/base/settings.py:620 +#: pretix/base/settings.py:633 msgid "Ask for beneficiary" msgstr "اسأل عن المستفيد" -#: pretix/base/settings.py:631 +#: pretix/base/settings.py:644 #, fuzzy #| msgid "Custom address field" msgid "Custom recipient field label" msgstr "حقل العنوان المخصص" -#: pretix/base/settings.py:633 +#: pretix/base/settings.py:646 #, fuzzy #| msgid "" #| "If you want to add a custom text field, e.g. for a country-specific " @@ -10774,24 +10961,24 @@ msgstr "" "التصنيف لمطالبة المستخدم بإدخال التفاصيل الخاصة به وكذلك لعرض القيمة على " "الفاتورة. لن يكون الحقل مطلوبا." -#: pretix/base/settings.py:647 +#: pretix/base/settings.py:660 #, fuzzy #| msgid "Custom address field" msgid "Custom recipient field help text" msgstr "حقل العنوان المخصص" -#: pretix/base/settings.py:649 +#: pretix/base/settings.py:662 msgid "" "If you use the custom recipient field, you can specify a help text which " "will be displayed underneath the field. It will not be displayed on the " "invoice." msgstr "" -#: pretix/base/settings.py:660 +#: pretix/base/settings.py:673 msgid "Ask for VAT ID" msgstr "اطلب رقم ضريبة القيمة المضافة" -#: pretix/base/settings.py:662 +#: pretix/base/settings.py:675 #, fuzzy, python-brace-format #| msgid "" #| "Does only work if an invoice address is asked for. VAT ID is not required." @@ -10801,32 +10988,32 @@ msgid "" msgstr "" "لا يعمل إلا إذا تم طلب عنوان الفاتورة. رقم ضريبة القيمة المضافة غير مطلوب." -#: pretix/base/settings.py:682 +#: pretix/base/settings.py:695 #, fuzzy #| msgid "Require name" msgid "Require VAT ID in" msgstr "اطلب اسم" -#: pretix/base/settings.py:688 +#: pretix/base/settings.py:701 msgid "" "VAT ID is optional by default, because not all businesses are assigned a VAT " "ID in all countries. VAT ID will be required for all business addresses in " "the selected countries." msgstr "" -#: pretix/base/settings.py:704 +#: pretix/base/settings.py:717 msgid "Invoice address explanation" msgstr "شرح عنوان الفاتورة" -#: pretix/base/settings.py:707 +#: pretix/base/settings.py:720 msgid "This text will be shown above the invoice address form during checkout." msgstr "سيظهر هذا النص في أعلى نموذج عنوان الفاتورة أثناء تسجيل الخروج." -#: pretix/base/settings.py:717 +#: pretix/base/settings.py:730 msgid "Show paid amount on partially paid invoices" msgstr "إظهار المبلغ المدفوع في الفواتير المدفوعة جزئيا" -#: pretix/base/settings.py:718 +#: pretix/base/settings.py:731 msgid "" "If an invoice has already been paid partially, this option will add the paid " "and pending amount to the invoice." @@ -10834,11 +11021,11 @@ msgstr "" "إذا تم دفع الفاتورة جزئيا مسبقا ، فسيضيف هذا الخيار المبلغ المدفوع والمتأخر " "إلى الفاتورة." -#: pretix/base/settings.py:729 +#: pretix/base/settings.py:742 msgid "Show free products on invoices" msgstr "عرض المنتجات المجانية على الفواتير" -#: pretix/base/settings.py:730 +#: pretix/base/settings.py:743 msgid "" "Note that invoices will never be generated for orders that contain only free " "products." @@ -10846,21 +11033,21 @@ msgstr "" "لاحظ أنه لن يتم إنشاء فواتير مطلقا للطلبات التي لا تحتوي إلا على منتجات " "مجانية." -#: pretix/base/settings.py:741 +#: pretix/base/settings.py:754 msgid "Show expiration date of order" msgstr "إظهار تاريخ إنتهاء صلاحية الطلب" -#: pretix/base/settings.py:742 +#: pretix/base/settings.py:755 msgid "" "The expiration date will not be shown if the invoice is generated after the " "order is paid." msgstr "لن يظهر تاريخ إنتهاء الصلاحية إذا تم إنشاء الفاتورة بعد سداد الطلب." -#: pretix/base/settings.py:753 +#: pretix/base/settings.py:766 msgid "Minimum length of invoice number after prefix" msgstr "الحد الأدنى لطول رقم الفاتورة بعد الاختصار" -#: pretix/base/settings.py:754 +#: pretix/base/settings.py:767 msgid "" "The part of your invoice number after your prefix will be filled up with " "leading zeros up to this length, e.g. INV-001 or INV-00001." @@ -10868,20 +11055,20 @@ msgstr "" "سيتم ملء الجزء من رقم الفاتورة بعد رمز الاختصار الخاص بك بالأصفار حتى هذا " "النحو ، على سبيل المثال فاتورة-001 أو فاتورة -00001." -#: pretix/base/settings.py:767 +#: pretix/base/settings.py:780 msgid "Generate invoices with consecutive numbers" msgstr "إنشاء فواتير بأرقام متتالية" -#: pretix/base/settings.py:768 +#: pretix/base/settings.py:781 msgid "If deactivated, the order code will be used in the invoice number." msgstr "" "إذا تم إلغاء تفعيل هذا الخيار ، فسيتم استخدام رمز الطلب في رقم الفاتورة." -#: pretix/base/settings.py:778 +#: pretix/base/settings.py:791 msgid "Invoice number prefix" msgstr "الرمز الذي يسبق رقم الفاتورة" -#: pretix/base/settings.py:779 +#: pretix/base/settings.py:792 msgid "" "This will be prepended to invoice numbers. If you leave this field empty, " "your event slug will be used followed by a dash. Attention: If multiple " @@ -10899,17 +11086,17 @@ msgstr "" "استخدام %Y (مع السنة) %y (بدون السنة) لإدخال سنة الفاتورة أو %m و %d ليوم من " "الشهر." -#: pretix/base/settings.py:791 pretix/base/settings.py:815 +#: pretix/base/settings.py:804 pretix/base/settings.py:828 #, fuzzy, python-brace-format #| msgid "Please enter a shorter name." msgid "Please only use the characters {allowed} in this field." msgstr "الرجاء إدخال اسم أقصر." -#: pretix/base/settings.py:806 +#: pretix/base/settings.py:819 msgid "Invoice number prefix for cancellations" msgstr "رمز رقم الفاتورة للإلغاء" -#: pretix/base/settings.py:807 +#: pretix/base/settings.py:820 msgid "" "This will be prepended to invoice numbers of cancellations. If you leave " "this field empty, the same numbering scheme will be used that you configured " @@ -10918,44 +11105,44 @@ msgstr "" "سيتم إضافة هذا مسبقا إلى أرقام فواتير الإلغاءات. إذا تركت هذا الحقل فارغا ، " "فسيتم استخدام نفس نظام الترقيم الذي قمت بإعداده للفواتير العادية." -#: pretix/base/settings.py:830 +#: pretix/base/settings.py:843 msgid "Highlight order code to make it stand out visibly" msgstr "" -#: pretix/base/settings.py:831 pretix/base/settings.py:843 +#: pretix/base/settings.py:844 pretix/base/settings.py:856 #, fuzzy #| msgid "Only respected by modern browsers." msgid "Only respected by some invoice renderers." msgstr "يستخدم للمتصفحات الحديثة فقط." -#: pretix/base/settings.py:842 pretix/base/settings.py:3176 -#: pretix/control/templates/pretixcontrol/pdf/index.html:441 +#: pretix/base/settings.py:855 pretix/base/settings.py:3189 +#: pretix/control/templates/pretixcontrol/pdf/index.html:439 msgid "Font" msgstr "الخط" -#: pretix/base/settings.py:869 +#: pretix/base/settings.py:882 msgid "Length of ticket codes" msgstr "طول رموز التذاكر" -#: pretix/base/settings.py:896 +#: pretix/base/settings.py:909 msgid "Reservation period" msgstr "فترة الحجز" -#: pretix/base/settings.py:898 +#: pretix/base/settings.py:911 msgid "" "The number of minutes the items in a user's cart are reserved for this user." msgstr "عدد الدقائق المحجوزة للعناصر الموجودة في عربة التسوق لهذا المستخدم." -#: pretix/base/settings.py:907 +#: pretix/base/settings.py:920 msgid "" "Directly redirect to check-out after a product has been added to the cart." msgstr "إعادة التوجيه مباشرة لتسجيل الخروج بعد إضافة منتج إلى سلة التسوق." -#: pretix/base/settings.py:916 +#: pretix/base/settings.py:929 msgid "End of presale text" msgstr "نهاية النص الخاص بعرض ما قبل البيع" -#: pretix/base/settings.py:919 +#: pretix/base/settings.py:932 msgid "" "This text will be shown above the ticket shop once the designated sales " "timeframe for this event is over. You can use it to describe other options " @@ -10965,11 +11152,11 @@ msgstr "" "لهذه الفعالية. يمكنك استخدامه لوصف الخيارات الأخرى للحصول على تذكرة ، على " "سبيل المثال شباك التذاكر." -#: pretix/base/settings.py:934 +#: pretix/base/settings.py:947 msgid "Guidance text" msgstr "نص للتوجيه" -#: pretix/base/settings.py:935 +#: pretix/base/settings.py:948 msgid "" "This text will be shown above the payment options. You can explain the " "choices to the user here, if you want." @@ -10977,19 +11164,19 @@ msgstr "" "سيظهر هذا النص فوق خيارات الدفع. يمكنك شرح الاختيارات للمستخدم هنا ، إذا كنت " "تريد." -#: pretix/base/settings.py:946 pretix/base/settings.py:956 +#: pretix/base/settings.py:959 pretix/base/settings.py:969 msgid "in days" msgstr "بالأيام" -#: pretix/base/settings.py:947 pretix/base/settings.py:957 +#: pretix/base/settings.py:960 pretix/base/settings.py:970 msgid "in minutes" msgstr "بالدقائق" -#: pretix/base/settings.py:952 +#: pretix/base/settings.py:965 msgid "Set payment term" msgstr "تعيين مدة السداد" -#: pretix/base/settings.py:959 +#: pretix/base/settings.py:972 msgid "" "If using days, the order will expire at the end of the last day. Using " "minutes is more exact, but should only be used for real-time payment methods." @@ -10997,11 +11184,11 @@ msgstr "" "في حالة استخدام الأيام ، ستنتهي صلاحية الطلب في نهاية اليوم الأخير. يعد " "استخدام الدقائق أكثر دقة ، ولكن يجب استخدامه فقط لطرق الدفع الفوري." -#: pretix/base/settings.py:970 +#: pretix/base/settings.py:983 msgid "Payment term in days" msgstr "مدة السداد بالأيام" -#: pretix/base/settings.py:977 +#: pretix/base/settings.py:990 msgid "" "The number of days after placing an order the user has to pay to preserve " "their reservation. If you use slow payment methods like bank transfer, we " @@ -11013,11 +11200,11 @@ msgstr "" "نوصي ب 14 يوما. إذا كنت تستخدم طرق الدفع الفوري فقط ، فإننا نوصي بالاستمرار " "في تحديد يومين أو ثلاثة أيام للسماح للأشخاص بإعادة محاولة الدفع الفاشل." -#: pretix/base/settings.py:996 +#: pretix/base/settings.py:1009 msgid "Only end payment terms on weekdays" msgstr "إنهاء مدة الدفع في أيام العمل الأسبوعية فقط" -#: pretix/base/settings.py:997 +#: pretix/base/settings.py:1010 msgid "" "If this is activated and the payment term of any order ends on a Saturday or " "Sunday, it will be moved to the next Monday instead. This is required in " @@ -11028,11 +11215,11 @@ msgstr "" "نقله إلى يوم الاثنين التالي بدلا من ذلك. هذا مطلوب في بعض البلدان بموجب " "القانون المدني. لن يؤثر هذا على آخر تاريخ للمدفوعات التي تم إعدادها أدناه." -#: pretix/base/settings.py:1014 +#: pretix/base/settings.py:1027 msgid "Payment term in minutes" msgstr "مدة السداد بالدقائق" -#: pretix/base/settings.py:1015 +#: pretix/base/settings.py:1028 msgid "" "The number of minutes after placing an order the user has to pay to preserve " "their reservation. Only use this if you exclusively offer real-time payment " @@ -11044,11 +11231,11 @@ msgstr "" "أنه لأسباب فنية ، قد يكون الإطار الزمني الفعلي أطول ببضع دقائق قبل أن يتم " "وضع علامة على الطلب على أنه منتهي الصلاحية." -#: pretix/base/settings.py:1039 +#: pretix/base/settings.py:1052 msgid "Last date of payments" msgstr "آخر موعد للمدفوعات" -#: pretix/base/settings.py:1040 +#: pretix/base/settings.py:1053 msgid "" "The last date any payments are accepted. This has precedence over the terms " "configured above. If you use the event series feature and an order contains " @@ -11058,11 +11245,11 @@ msgstr "" "إعدادها أعلاه. إذا كنت تستخدم ميزة سلسلة الفعاليات وكان الطلب يحتوي على " "تذاكر لتواريخ متعددة ، فسيتم استخدام أقرب تاريخ." -#: pretix/base/settings.py:1052 +#: pretix/base/settings.py:1065 msgid "Automatically expire unpaid orders" msgstr "إنهاء الطلبات غير المسددة تلقائيا" -#: pretix/base/settings.py:1053 +#: pretix/base/settings.py:1066 msgid "" "If checked, all unpaid orders will automatically go from 'pending' to " "'expired' after the end of their payment deadline. This means that those " @@ -11072,13 +11259,13 @@ msgstr "" "إلى \"منتهية الصلاحية\" بعد إنتهاء الموعد النهائي للدفع. هذا يعني أن هذه " "التذاكر تعود إلى الموقع ويمكن لأشخاص آخرين طلبها." -#: pretix/base/settings.py:1065 +#: pretix/base/settings.py:1078 #, fuzzy #| msgid "Expiration date" msgid "Expiration delay" msgstr "تاريخ إنتهاء الصلاحية" -#: pretix/base/settings.py:1066 +#: pretix/base/settings.py:1079 msgid "" "The order will only actually expire this many days after the expiration date " "communicated to the customer. If you select \"Only end payment terms on " @@ -11087,11 +11274,11 @@ msgid "" "enforced." msgstr "" -#: pretix/base/settings.py:1088 +#: pretix/base/settings.py:1101 msgid "Hide \"payment pending\" state on customer-facing pages" msgstr "إخفاء حالة \"الدفع المعلق\" من الصفحات التي تظهر للعملاء" -#: pretix/base/settings.py:1089 +#: pretix/base/settings.py:1102 msgid "" "The payment instructions panel will still be shown to the primary customer, " "but no indication of missing payment will be visible on the ticket pages of " @@ -11100,7 +11287,7 @@ msgstr "" "ستظل لوحة تعليمات الدفع معروضة للعميل الأساسي ، ولكن لن تظهر أي إشارة لفقدان " "السداد على صفحات تذاكر الحاضرين الذين لم يشتروا التذكرة بأنفسهم." -#: pretix/base/settings.py:1107 +#: pretix/base/settings.py:1120 msgid "" "If you have a gift card, please enter the gift card code here. If the gift " "card does not have enough credit to pay for the full order, you will be " @@ -11111,11 +11298,11 @@ msgstr "" "هديةرصيد كاف لدفع للنظام كامل، وسوف يعرض لك هذه الصفحة مرة أخرى ويمكنك " "إمااستبدال بطاقة هدية أخرى أو تحديد طريقة دفع مختلفة للفرق." -#: pretix/base/settings.py:1126 +#: pretix/base/settings.py:1139 msgid "Accept late payments" msgstr "قبول المدفوعات المتأخرة" -#: pretix/base/settings.py:1127 +#: pretix/base/settings.py:1140 msgid "" "Accept payments for orders even when they are in 'expired' state as long as " "enough capacity is available. No payments will ever be accepted after the " @@ -11125,124 +11312,124 @@ msgstr "" "متوفرة. لن يتم قبول أي مدفوعات بعد \"آخر تاريخ للدفعات\" والذي تم إعداده " "أعلاه." -#: pretix/base/settings.py:1138 +#: pretix/base/settings.py:1151 msgid "Show start date" msgstr "عرض تاريخ البداية" -#: pretix/base/settings.py:1139 +#: pretix/base/settings.py:1152 msgid "Show the presale start date before presale has started." msgstr "اعرض تاريخ بداية البيع المسبق قبل أن بدايته." -#: pretix/base/settings.py:1150 pretix/base/settings.py:1159 -#: pretix/base/settings.py:1173 pretix/base/settings.py:1182 +#: pretix/base/settings.py:1163 pretix/base/settings.py:1172 +#: pretix/base/settings.py:1186 pretix/base/settings.py:1195 #, fuzzy #| msgid "Default price" msgid "Use default tax rate" msgstr "السعر الافتراضي" -#: pretix/base/settings.py:1151 pretix/base/settings.py:1160 -#: pretix/base/settings.py:1171 pretix/base/settings.py:1180 +#: pretix/base/settings.py:1164 pretix/base/settings.py:1173 +#: pretix/base/settings.py:1184 pretix/base/settings.py:1193 #, fuzzy msgid "Charge no taxes" msgstr "تم تحديث الرسوم." -#: pretix/base/settings.py:1156 +#: pretix/base/settings.py:1169 #, fuzzy #| msgid "Tax rule for payment fees" msgid "Tax handling on payment fees" msgstr "حكم الضرائب لدفع الرسوم" -#: pretix/base/settings.py:1172 pretix/base/settings.py:1181 +#: pretix/base/settings.py:1185 pretix/base/settings.py:1194 msgid "Use same taxes as order positions (split according to net prices)" msgstr "" -#: pretix/base/settings.py:1177 +#: pretix/base/settings.py:1190 #, fuzzy #| msgid "Keep a fixed cancellation fee" msgid "Tax handling on cancellation fees" msgstr "احتفظ برسوم إلغاء ثابتة" -#: pretix/base/settings.py:1193 pretix/base/settings.py:1206 +#: pretix/base/settings.py:1206 pretix/base/settings.py:1219 msgid "Do not generate invoices" msgstr "لا تصدر فواتير" -#: pretix/base/settings.py:1194 pretix/base/settings.py:1211 +#: pretix/base/settings.py:1207 pretix/base/settings.py:1224 msgid "Only manually in admin panel" msgstr "فقط يدويا في لوحة الإدارة" -#: pretix/base/settings.py:1195 pretix/base/settings.py:1209 +#: pretix/base/settings.py:1208 pretix/base/settings.py:1222 msgid "Automatically on user request" msgstr "تلقائيا بناء على طلب المستخدم" -#: pretix/base/settings.py:1196 pretix/base/settings.py:1210 +#: pretix/base/settings.py:1209 pretix/base/settings.py:1223 #, fuzzy #| msgid "Automatically on user request" msgid "Automatically on user request for paid orders" msgstr "تلقائيا بناء على طلب المستخدم" -#: pretix/base/settings.py:1197 +#: pretix/base/settings.py:1210 msgid "Automatically for all created orders" msgstr "تلقائيا لجميع الطلبات التي تم إنشاؤها" -#: pretix/base/settings.py:1198 +#: pretix/base/settings.py:1211 msgid "Automatically on payment or when required by payment method" msgstr "تلقائيا عند الدفع أو عند الطلب بواسطة طريقة السداد" -#: pretix/base/settings.py:1203 +#: pretix/base/settings.py:1216 msgid "Generate invoices" msgstr "إنشاء الفواتير" -#: pretix/base/settings.py:1207 +#: pretix/base/settings.py:1220 #, fuzzy #| msgid "Automatically on payment or when required by payment method" msgid "Automatically after payment or when required by payment method" msgstr "تلقائيا عند الدفع أو عند الطلب بواسطة طريقة السداد" -#: pretix/base/settings.py:1208 +#: pretix/base/settings.py:1221 #, fuzzy #| msgid "Automatically for all created orders" msgid "Automatically before payment for all created orders" msgstr "تلقائيا لجميع الطلبات التي تم إنشاؤها" -#: pretix/base/settings.py:1213 +#: pretix/base/settings.py:1226 msgid "Invoices will never be automatically generated for free orders." msgstr "لن يتم إنشاء الفواتير تلقائيا للطلبات المجانية." -#: pretix/base/settings.py:1223 pretix/base/settings.py:1235 +#: pretix/base/settings.py:1236 pretix/base/settings.py:1248 msgid "" "Automatic based on ticket-specific validity, membership validity, event " "series date, or event date" msgstr "" -#: pretix/base/settings.py:1224 pretix/base/settings.py:1236 +#: pretix/base/settings.py:1237 pretix/base/settings.py:1249 msgid "Automatic, but prefer invoice date over event date" msgstr "" -#: pretix/base/settings.py:1227 pretix/base/settings.py:1239 +#: pretix/base/settings.py:1240 pretix/base/settings.py:1252 #, fuzzy #| msgctxt "invoice" #| msgid "Invoice date" msgid "Invoice date" msgstr "تاريخ الفاتورة" -#: pretix/base/settings.py:1232 +#: pretix/base/settings.py:1245 #, fuzzy #| msgctxt "subevent" #| msgid "Date ordering" msgid "Date of service" msgstr "ترتيب التاريخ" -#: pretix/base/settings.py:1241 +#: pretix/base/settings.py:1254 msgid "" "This controls what dates are shown on the invoice, but is especially " "important for electronic invoicing." msgstr "" -#: pretix/base/settings.py:1253 +#: pretix/base/settings.py:1266 msgid "Automatically cancel and reissue invoice on address changes" msgstr "إلغاء الفاتورة تلقائيا عند تغيير العنوان وإعادة إصدارها" -#: pretix/base/settings.py:1254 +#: pretix/base/settings.py:1267 msgid "" "If customers change their invoice address on an existing order, the invoice " "will automatically be canceled and a new invoice will be issued. This " @@ -11252,56 +11439,56 @@ msgstr "" "الفاتورة تلقائيا وسيتم إصدار فاتورة جديدة. لن يؤثر هذا الإعداد على التعديلات " "في لوحة التحكم." -#: pretix/base/settings.py:1266 +#: pretix/base/settings.py:1279 msgid "Allow to update existing invoices" msgstr "" -#: pretix/base/settings.py:1267 +#: pretix/base/settings.py:1280 msgid "" "By default, invoices can never again be changed once they are issued. In " "most countries, we recommend to leave this option turned off and always " "issue a new invoice if a change needs to be made." msgstr "" -#: pretix/base/settings.py:1283 +#: pretix/base/settings.py:1296 #, fuzzy #| msgid "Business customers" msgid "Only issue invoices to business customers" msgstr "عملاء قطاع الأعمال" -#: pretix/base/settings.py:1293 +#: pretix/base/settings.py:1306 msgid "Address line" msgstr "العنوان" -#: pretix/base/settings.py:1297 +#: pretix/base/settings.py:1310 msgid "Albert Einstein Road 52" msgstr "شارع ألبرت أينشتاين 52" -#: pretix/base/settings.py:1377 +#: pretix/base/settings.py:1390 msgid "Domestic tax ID" msgstr "معرف الضريبة المحلية" -#: pretix/base/settings.py:1378 +#: pretix/base/settings.py:1391 msgid "e.g. tax number in Germany, ABN in Australia, …" msgstr "على سبيل المثال الرقم الضريبي في ألمانيا ، رقم العمل الأسترالي،…" -#: pretix/base/settings.py:1389 +#: pretix/base/settings.py:1402 msgid "EU VAT ID" msgstr "رقم ضريبة القيمة المضافة في الاتحاد الأوروبي" -#: pretix/base/settings.py:1404 +#: pretix/base/settings.py:1417 msgid "e.g. With this document, we sent you the invoice for your ticket order." msgstr "على سبيل المثال باستخدام هذا المستند ، أرسلنا إليك فاتورة طلب تذكرتك." -#: pretix/base/settings.py:1407 +#: pretix/base/settings.py:1420 msgid "Introductory text" msgstr "نص تمهيدي" -#: pretix/base/settings.py:1408 +#: pretix/base/settings.py:1421 msgid "Will be printed on every invoice above the invoice rows." msgstr "ستتم طباعتها على كل فاتورة فوق صفوف الفاتورة." -#: pretix/base/settings.py:1422 +#: pretix/base/settings.py:1435 msgid "" "e.g. Thank you for your purchase! You can find more information on the event " "at ..." @@ -11309,15 +11496,15 @@ msgstr "" "مثلا شكرا لك على الشراء! يمكنك العثور على مزيد من المعلومات حول هذه الفعالية " "في ..." -#: pretix/base/settings.py:1425 +#: pretix/base/settings.py:1438 msgid "Additional text" msgstr "نص إضافي" -#: pretix/base/settings.py:1426 +#: pretix/base/settings.py:1439 msgid "Will be printed on every invoice below the invoice total." msgstr "ستتم الطباعة على كل فاتورة تحت إجمالي الفاتورة." -#: pretix/base/settings.py:1440 +#: pretix/base/settings.py:1453 msgid "" "e.g. your bank details, legal details like your VAT ID, registration " "numbers, etc." @@ -11325,21 +11512,21 @@ msgstr "" "مثلا تفاصيل حسابك المصرفي، التفاصيل القانونية مثل معرف ضريبة القيمة المضافة، " "أرقام التسجيل، الخ." -#: pretix/base/settings.py:1443 +#: pretix/base/settings.py:1456 msgid "Footer" msgstr "تذييل" -#: pretix/base/settings.py:1444 +#: pretix/base/settings.py:1457 msgid "" "Will be printed centered and in a smaller font at the end of every invoice " "page." msgstr "ستتم طباعتها في المنتصف وبخط أصغر في نهاية كل صفحة فاتورة." -#: pretix/base/settings.py:1459 +#: pretix/base/settings.py:1472 msgid "Attach invoices to emails" msgstr "إرفق الفواتير في رسائل البريد الإلكتروني" -#: pretix/base/settings.py:1460 +#: pretix/base/settings.py:1473 msgid "" "If invoices are automatically generated for all orders, they will be " "attached to the order confirmation mail. If they are automatically generated " @@ -11350,11 +11537,11 @@ msgstr "" "الطلب. إذا تم إنشاؤها تلقائيا عند الدفع ، فسيتم إرفاقها ببريد تأكيد الدفع. " "إذا لم يتم إنشاؤها تلقائيا ، فلن يتم إرفاقها برسائل البريد الإلكتروني." -#: pretix/base/settings.py:1473 +#: pretix/base/settings.py:1486 msgid "Email address to receive a copy of each invoice" msgstr "عنوان البريد الإلكتروني لتلقي نسخة من كل فاتورة" -#: pretix/base/settings.py:1474 +#: pretix/base/settings.py:1487 msgid "" "Each newly created invoice will be sent to this email address shortly after " "creation. You can use this for an automated import of invoices to your " @@ -11364,28 +11551,28 @@ msgstr "" "وقت قصير من إنشائها. يمكنك استخدام هذا للاستيراد الآلي للفواتير إلى نظام " "المحاسبة الخاص بك. ستكون الفاتورة هي المرفق الوحيد بالبريد الإلكتروني." -#: pretix/base/settings.py:1489 +#: pretix/base/settings.py:1502 msgid "Show items outside presale period" msgstr "إظهار العناصر خارج فترة عرض ما قبل البيع" -#: pretix/base/settings.py:1490 +#: pretix/base/settings.py:1503 msgid "" "Show item details before presale has started and after presale has ended" msgstr "إظهار تفاصيل العنصر قبل بداية البيع المسبق وبعد انتهائه" -#: pretix/base/settings.py:1510 +#: pretix/base/settings.py:1523 msgid "Available languages" msgstr "اللغات المتاحة" -#: pretix/base/settings.py:1526 pretix/control/forms/event.py:151 +#: pretix/base/settings.py:1539 pretix/control/forms/event.py:151 msgid "Default language" msgstr "اللغة الافتراضية" -#: pretix/base/settings.py:1536 +#: pretix/base/settings.py:1549 msgid "Region" msgstr "منطقة" -#: pretix/base/settings.py:1537 +#: pretix/base/settings.py:1550 msgid "" "Will be used to determine date and time formatting as well as default " "country for customer addresses and phone numbers. For formatting, this takes " @@ -11397,13 +11584,13 @@ msgstr "" "من اللغة وبالتالي فهو مناسب في الغالب للغات المستخدمة في مناطق مختلفة على " "مستوى العالم (مثل اللغة الإنجليزية)." -#: pretix/base/settings.py:1549 +#: pretix/base/settings.py:1562 #, fuzzy #| msgid "This is not an event series." msgid "This shop represents an event" msgstr "هذه ليست سلسلة فعالية." -#: pretix/base/settings.py:1551 +#: pretix/base/settings.py:1564 msgid "" "Uncheck this box if you are only selling something that has no specific " "date, such as gift cards or a ticket that can be used any time. The system " @@ -11412,19 +11599,19 @@ msgid "" "may still show up in other places." msgstr "" -#: pretix/base/settings.py:1564 +#: pretix/base/settings.py:1577 msgid "Show event end date" msgstr "إظهار تاريخ انتهاء الفعالية" -#: pretix/base/settings.py:1565 +#: pretix/base/settings.py:1578 msgid "If disabled, only event's start date will be displayed to the public." msgstr "إذا تم تعطيل هذا الخيار، فسيظهر للجمهور تاريخ بداية الفعالية فقط." -#: pretix/base/settings.py:1574 +#: pretix/base/settings.py:1587 msgid "Show dates with time" msgstr "عرض التواريخ مع الوقت" -#: pretix/base/settings.py:1575 +#: pretix/base/settings.py:1588 msgid "" "If disabled, the event's start and end date will be displayed without the " "time of day." @@ -11432,27 +11619,27 @@ msgstr "" "إذا تم تعطيل هذا الخيار ، فسيتم عرض تاريخ بداية الفعالية وانتهائها بدون " "توقيت اليوم." -#: pretix/base/settings.py:1584 +#: pretix/base/settings.py:1597 msgid "Hide all products that are sold out" msgstr "إخفاء جميع المنتجات التي تم بيعها" -#: pretix/base/settings.py:1594 pretix/control/forms/event.py:1870 +#: pretix/base/settings.py:1607 pretix/control/forms/event.py:1870 msgid "Publicly show how many tickets of a certain type are still available." msgstr "اعرض علنا عدد التذاكر من نوع معين والتي لا تزال متاحة." -#: pretix/base/settings.py:1603 +#: pretix/base/settings.py:1616 msgid "Ask search engines not to index the ticket shop" msgstr "اطلب من محركات البحث عدم فهرسة متجر التذاكر" -#: pretix/base/settings.py:1612 +#: pretix/base/settings.py:1625 msgid "Show variations of a product expanded by default" msgstr "إظهار الأشكال المختلفة للمنتج موسعة بشكل افتراضي" -#: pretix/base/settings.py:1621 +#: pretix/base/settings.py:1634 msgid "Enable waiting list" msgstr "تمكين قائمة الانتظار" -#: pretix/base/settings.py:1622 pretix/control/forms/event.py:1875 +#: pretix/base/settings.py:1635 pretix/control/forms/event.py:1875 #, fuzzy msgid "" "Once a ticket is sold out, people can add themselves to a waiting list. As " @@ -11464,11 +11651,11 @@ msgstr "" "تصبح التذكرة متاحة مرة أخرى ، سيتم حجزها لأول شخص في قائمة الانتظار وسيتلقى " "هذا الشخص إشعارا بالبريد الإلكتروني مع قسيمة يمكن استخدامها لشراء تذكرة." -#: pretix/base/settings.py:1633 +#: pretix/base/settings.py:1646 msgid "Automatic waiting list assignments" msgstr "مهام قائمة الانتظار التلقائية" -#: pretix/base/settings.py:1634 +#: pretix/base/settings.py:1647 #, fuzzy msgid "" "If ticket capacity becomes free, automatically create a voucher and send it " @@ -11482,11 +11669,11 @@ msgstr "" "البريد الإلكتروني تلقائيا ولكن يمكنك إرسالها يدويا عبر لوحة التحكم. إذا قمت " "بتعطيل قائمة الانتظار مع إبقاء هذا الخيار مفعلا ، فسيستمر إرسال التذاكر." -#: pretix/base/settings.py:1650 +#: pretix/base/settings.py:1663 msgid "Waiting list response time" msgstr "وقت استجابة قائمة الانتظار" -#: pretix/base/settings.py:1653 +#: pretix/base/settings.py:1666 #, fuzzy msgid "" "If a ticket voucher is sent to a person on the waiting list, it has to be " @@ -11497,13 +11684,13 @@ msgstr "" "خلال هذا العدد من الساعات حتى تنتهي صلاحيتها ويمكن إعادة تخصيصها إلى الشخص " "التالي في القائمة." -#: pretix/base/settings.py:1664 +#: pretix/base/settings.py:1677 #, fuzzy #| msgid "Enable waiting list" msgid "Disable waiting list" msgstr "تمكين قائمة الانتظار" -#: pretix/base/settings.py:1665 +#: pretix/base/settings.py:1678 msgid "" "The waiting list will be fully disabled after this date. This means that " "nobody can add themselves to the waiting list any more, but also that " @@ -11512,56 +11699,56 @@ msgid "" "remain active." msgstr "" -#: pretix/base/settings.py:1677 +#: pretix/base/settings.py:1690 msgid "Ask for a name" msgstr "اطلب الاسم" -#: pretix/base/settings.py:1678 +#: pretix/base/settings.py:1691 msgid "Ask for a name when signing up to the waiting list." msgstr "اطلب اسما عند التسجيل في قائمة الانتظار." -#: pretix/base/settings.py:1687 +#: pretix/base/settings.py:1700 msgid "Require name" msgstr "اطلب اسم" -#: pretix/base/settings.py:1688 +#: pretix/base/settings.py:1701 msgid "Require a name when signing up to the waiting list.." msgstr "طلب اسم عند التسجيل في قائمة الانتظار .." -#: pretix/base/settings.py:1698 +#: pretix/base/settings.py:1711 msgid "Ask for a phone number" msgstr "اطلب رقم هاتف" -#: pretix/base/settings.py:1699 +#: pretix/base/settings.py:1712 msgid "Ask for a phone number when signing up to the waiting list." msgstr "اطلب رقم هاتف عند التسجيل في قائمة الانتظار." -#: pretix/base/settings.py:1708 +#: pretix/base/settings.py:1721 msgid "Require phone number" msgstr "يلزم رقم الهاتف" -#: pretix/base/settings.py:1709 +#: pretix/base/settings.py:1722 msgid "Require a phone number when signing up to the waiting list.." msgstr "طلب رقم هاتف عند التسجيل في قائمة الانتظار .." -#: pretix/base/settings.py:1719 +#: pretix/base/settings.py:1732 msgid "Phone number explanation" msgstr "تفسير رقم الهاتف" -#: pretix/base/settings.py:1722 +#: pretix/base/settings.py:1735 msgid "" "If you ask for a phone number, explain why you do so and what you will use " "the phone number for." msgstr "" "إذا طلبت رقم هاتف ، اشرح سبب قيامك بذلك وما الذي ستستخدم رقم الهاتف لأجله." -#: pretix/base/settings.py:1734 +#: pretix/base/settings.py:1747 #, fuzzy #| msgid "Maximum number of items per order" msgid "Maximum number of entries per email address for the same product" msgstr "الحد الأقصى لعدد العناصر لكل طلب" -#: pretix/base/settings.py:1738 +#: pretix/base/settings.py:1751 msgid "" "With an increased limit, a customer may request more than one ticket for a " "specific product using the same, unique email address. However, regardless " @@ -11570,13 +11757,13 @@ msgid "" "ticket at a time." msgstr "" -#: pretix/base/settings.py:1750 +#: pretix/base/settings.py:1763 #, fuzzy #| msgid "Show number of tickets left" msgid "Show number of check-ins to customer" msgstr "إظهار عدد التذاكر المتبقية" -#: pretix/base/settings.py:1751 +#: pretix/base/settings.py:1764 msgid "" "With this option enabled, your customers will be able to see how many times " "they entered the event. This is usually not necessary, but might be useful " @@ -11586,19 +11773,19 @@ msgid "" "check-in lists." msgstr "" -#: pretix/base/settings.py:1764 +#: pretix/base/settings.py:1777 msgid "Allow users to download tickets" msgstr "السماح للمستخدمين بتحميل التذاكر" -#: pretix/base/settings.py:1765 +#: pretix/base/settings.py:1778 msgid "If this is off, nobody can download a ticket." msgstr "إذا تم تعطيل هذا الخيار، فلا يمكن لأي شخص تنزيل تذكرة." -#: pretix/base/settings.py:1774 +#: pretix/base/settings.py:1787 msgid "Download date" msgstr "تاريخ التنزيل" -#: pretix/base/settings.py:1775 +#: pretix/base/settings.py:1788 msgid "" "Ticket download will be offered after this date. If you use the event series " "feature and an order contains tickets for multiple event dates, download of " @@ -11608,13 +11795,13 @@ msgstr "" "الفعاليات وكان الطلب يحتوي على تذاكر لتواريخ فعاليات متعددة ، فسيكون تنزيل " "جميع التذاكر متاحا إذا سمح بذلك أحد تواريخ الفعالية على الأقل." -#: pretix/base/settings.py:1786 +#: pretix/base/settings.py:1799 #, fuzzy #| msgid "Generate tickets for add-on products" msgid "Generate tickets for add-on products and bundled products" msgstr "إنشاء تذاكر للمنتجات الإضافية" -#: pretix/base/settings.py:1787 +#: pretix/base/settings.py:1800 #, fuzzy #| msgid "" #| "By default, tickets are only issued for products selected individually, " @@ -11629,11 +11816,11 @@ msgstr "" "للمنتجات الإضافية. باستخدام هذا الخيار ، يتم إصدار تذكرة منفصلة لكل منتج " "إضافي أيضا." -#: pretix/base/settings.py:1800 +#: pretix/base/settings.py:1813 msgid "Generate tickets for all products" msgstr "إنشاء تذاكر لجميع المنتجات" -#: pretix/base/settings.py:1801 +#: pretix/base/settings.py:1814 msgid "" "If turned off, tickets are only issued for products that are marked as an " "\"admission ticket\"in the product settings. You can also turn off ticket " @@ -11643,11 +11830,11 @@ msgstr "" "\"بطاقة دخول\" عليها في إعدادات المنتج. يمكنك أيضا إيقاف تشغيل إصدار التذاكر " "لكل منتج على حدة." -#: pretix/base/settings.py:1813 +#: pretix/base/settings.py:1826 msgid "Generate tickets for pending orders" msgstr "إصدار تذاكر للطلبات المعلقة" -#: pretix/base/settings.py:1814 +#: pretix/base/settings.py:1827 msgid "" "If turned off, ticket downloads are only possible after an order has been " "marked as paid." @@ -11655,11 +11842,11 @@ msgstr "" "إذا تم إيقاف تشغيل هذا الخيار، فلن يكون تنزيل التذاكر ممكنا إلا بعد وضع " "علامة على الطلب على أنه مدفوع." -#: pretix/base/settings.py:1825 +#: pretix/base/settings.py:1838 msgid "Do not issue ticket before email address is validated" msgstr "لا تصدر تذكرة قبل التحقق من صحة عنوان البريد الإلكتروني" -#: pretix/base/settings.py:1826 +#: pretix/base/settings.py:1839 msgid "" "If turned on, tickets will not be offered for download directly after " "purchase. They will be attached to the payment confirmation email (if the " @@ -11672,13 +11859,13 @@ msgstr "" "جدا)، وسيتمكن العميل من تنزيلها من الصفحة بمجرد النقر على الرابط في البريد " "الإلكتروني. لا يؤثر على الطلبات المنفذة من خلال قنوات البيع الأخرى." -#: pretix/base/settings.py:1842 +#: pretix/base/settings.py:1855 #, fuzzy #| msgid "Quota availabilities" msgid "Low availability threshold" msgstr "توافر الحصة" -#: pretix/base/settings.py:1843 +#: pretix/base/settings.py:1856 msgid "" "If the availability of tickets falls below this percentage, the event (or a " "date, if it is an event series) will be highlighted to have low availability " @@ -11686,11 +11873,11 @@ msgid "" "availability will not be shown publicly." msgstr "" -#: pretix/base/settings.py:1857 +#: pretix/base/settings.py:1870 msgid "Show availability in event overviews" msgstr "إظهار التوفر في \"نبذة عن الفعالية\"" -#: pretix/base/settings.py:1858 +#: pretix/base/settings.py:1871 msgid "" "If checked, the list of events will show if events are sold out. This might " "make for longer page loading times if you have lots of events and the shown " @@ -11700,24 +11887,24 @@ msgstr "" "يؤدي هذا إلى إطالة وقت تحميل الصفحات إذا كان لديك الكثير من الفعاليات وقد " "تكون الحالة المعروضة قديمة لمدة تصل إلى دقيقتين." -#: pretix/base/settings.py:1871 pretix/base/settings.py:1879 +#: pretix/base/settings.py:1884 pretix/base/settings.py:1892 #: pretix/presale/templates/pretixpresale/fragment_calendar_nav.html:8 msgid "List" msgstr "قائمة" -#: pretix/base/settings.py:1872 pretix/base/settings.py:1880 +#: pretix/base/settings.py:1885 pretix/base/settings.py:1893 msgid "Week calendar" msgstr "تقويم الأسبوع" -#: pretix/base/settings.py:1873 pretix/base/settings.py:1881 +#: pretix/base/settings.py:1886 pretix/base/settings.py:1894 msgid "Month calendar" msgstr "تقويم الشهر" -#: pretix/base/settings.py:1877 +#: pretix/base/settings.py:1890 msgid "Default overview style" msgstr "نمط النظرة العامة الافتراضي" -#: pretix/base/settings.py:1883 +#: pretix/base/settings.py:1896 msgid "" "If your event series has more than 50 dates in the future, only the month or " "week calendar can be used." @@ -11725,13 +11912,13 @@ msgstr "" "إذا كانت سلسلة الفعاليات الخاصة بك تحتوي على أكثر من 50 تاريخا في المستقبل ، " "فيمكن استخدام تقويم الشهر أو الأسبوع فقط." -#: pretix/base/settings.py:1892 +#: pretix/base/settings.py:1905 #, fuzzy #| msgid "Hide all unavailable dates from calendar or list views" msgid "Show filter options for calendar or list view" msgstr "إخفاء جميع التواريخ غير المتاحة من التقويم أو طرق عرض القائمة" -#: pretix/base/settings.py:1893 +#: pretix/base/settings.py:1906 #, fuzzy #| msgid "The selected product is not active or has no price set." msgid "" @@ -11739,57 +11926,57 @@ msgid "" "settings." msgstr "المنتج المحدد غير نشط أو ليس له سعر محدد." -#: pretix/base/settings.py:1902 +#: pretix/base/settings.py:1915 msgid "Hide all unavailable dates from calendar or list views" msgstr "إخفاء جميع التواريخ غير المتاحة من التقويم أو طرق عرض القائمة" -#: pretix/base/settings.py:1903 pretix/base/settings.py:1914 +#: pretix/base/settings.py:1916 pretix/base/settings.py:1927 msgid "" "This option currently only affects the calendar of this event series, not " "the organizer-wide calendar." msgstr "" -#: pretix/base/settings.py:1913 +#: pretix/base/settings.py:1926 #, fuzzy #| msgid "Hide all unavailable dates from calendar or list views" msgid "Hide all past dates from calendar" msgstr "إخفاء جميع التواريخ غير المتاحة من التقويم أو طرق عرض القائمة" -#: pretix/base/settings.py:1925 pretix/base/settings.py:1934 +#: pretix/base/settings.py:1938 pretix/base/settings.py:1947 msgid "No modifications after order was submitted" msgstr "" -#: pretix/base/settings.py:1926 pretix/base/settings.py:1935 +#: pretix/base/settings.py:1939 pretix/base/settings.py:1948 #, fuzzy #| msgid "Only pending or paid orders can be changed." msgid "Only the person who ordered can make changes" msgstr "يمكن فقط تغيير الطلبات المعلقة أو المدفوعة." -#: pretix/base/settings.py:1927 pretix/base/settings.py:1936 +#: pretix/base/settings.py:1940 pretix/base/settings.py:1949 msgid "Both the attendee and the person who ordered can make changes" msgstr "" -#: pretix/base/settings.py:1931 +#: pretix/base/settings.py:1944 #, fuzzy #| msgid "Allow customers to modify their information after they checked in." msgid "Allow customers to modify their information" msgstr "اسمح للعملاء بتعديل معلوماتهم بعد تمام التسجيل." -#: pretix/base/settings.py:1946 +#: pretix/base/settings.py:1959 msgid "Allow customers to modify their information after they checked in." msgstr "اسمح للعملاء بتعديل معلوماتهم بعد تمام التسجيل." -#: pretix/base/settings.py:1947 +#: pretix/base/settings.py:1960 msgid "" "By default, no more modifications are possible for an order as soon as one " "of the tickets in the order has been checked in." msgstr "" -#: pretix/base/settings.py:1957 +#: pretix/base/settings.py:1970 msgid "Last date of modifications" msgstr "آخر موعد لإجراء التعديلات" -#: pretix/base/settings.py:1958 +#: pretix/base/settings.py:1971 msgid "" "The last date users can modify details of their orders, such as attendee " "names or answers to questions. If you use the event series feature and an " @@ -11800,58 +11987,58 @@ msgstr "" "الحضور أو إجابات الأسئلة. إذا كنت تستخدم ميزة سلسلة الفعاليات وكان الطلب " "يحتوي على تذاكر لتواريخ فعاليات متعددة ، فسيتم استخدام أقرب تاريخ." -#: pretix/base/settings.py:1969 +#: pretix/base/settings.py:1982 msgid "Customers can change the variation of the products they purchased" msgstr "يمكن للعملاء تغيير تنوع المنتجات التي قاموا بشرائها" -#: pretix/base/settings.py:1978 +#: pretix/base/settings.py:1991 #, fuzzy #| msgid "Customers can cancel their paid orders" msgid "Customers can change their selected add-on products" msgstr "يمكن للعملاء إلغاء طلباتهم المدفوعة" -#: pretix/base/settings.py:1988 pretix/base/settings.py:1999 +#: pretix/base/settings.py:2001 pretix/base/settings.py:2012 msgid "" "Only allow changes if the resulting price is higher or equal than the " "previous price." msgstr "السماح بالتغييرات فقط إذا كان السعر الناتج أعلى أو يساوي السعر السابق." -#: pretix/base/settings.py:1989 pretix/base/settings.py:2000 +#: pretix/base/settings.py:2002 pretix/base/settings.py:2013 msgid "" "Only allow changes if the resulting price is higher than the previous price." msgstr "السماح بالتغييرات فقط إذا كان السعر الناتج أعلى من السعر السابق." -#: pretix/base/settings.py:1990 pretix/base/settings.py:2001 +#: pretix/base/settings.py:2003 pretix/base/settings.py:2014 msgid "" "Only allow changes if the resulting price is equal to the previous price." msgstr "السماح بالتغييرات فقط إذا كان السعر الناتج أعلى من السعر السابق." -#: pretix/base/settings.py:1991 pretix/base/settings.py:2002 +#: pretix/base/settings.py:2004 pretix/base/settings.py:2015 msgid "" "Allow changes regardless of price, as long as no refund is required (i.e. " "the resulting price is not lower than what has already been paid)." msgstr "" -#: pretix/base/settings.py:1993 pretix/base/settings.py:2004 +#: pretix/base/settings.py:2006 pretix/base/settings.py:2017 msgid "Allow changes regardless of price, even if this results in a refund." msgstr "" "السماح بالتغييرات بغض النظر عن السعر ، حتى لو أدى ذلك إلى استرداد الأموال." -#: pretix/base/settings.py:1997 +#: pretix/base/settings.py:2010 msgid "Requirement for changed prices" msgstr "شرط تغيير الأسعار" -#: pretix/base/settings.py:2015 +#: pretix/base/settings.py:2028 msgid "Do not allow changes after" msgstr "لا تسمح بالتغييرات بعد" -#: pretix/base/settings.py:2024 +#: pretix/base/settings.py:2037 #, fuzzy #| msgid "The payment for this invoice has already been received." msgid "Allow change even though the ticket has already been checked in" msgstr "تم إستلام قيمة هذه الفاتورة مسبقا." -#: pretix/base/settings.py:2025 +#: pretix/base/settings.py:2038 msgid "" "By default, order changes are disabled after any ticket in the order has " "been checked in. If you check this box, this requirement is lifted. It is " @@ -11860,11 +12047,11 @@ msgid "" "limitation on price changes above." msgstr "" -#: pretix/base/settings.py:2037 +#: pretix/base/settings.py:2050 msgid "Allow individual attendees to change their ticket" msgstr "" -#: pretix/base/settings.py:2038 +#: pretix/base/settings.py:2051 msgid "" "By default, only the person who ordered the tickets can make any changes. If " "you check this box, individual attendees can also make changes. However, " @@ -11873,45 +12060,45 @@ msgid "" "customer." msgstr "" -#: pretix/base/settings.py:2050 +#: pretix/base/settings.py:2063 msgid "Customers can cancel their unpaid orders" msgstr "يمكن للعملاء إلغاء طلباتهم غير المدفوعة" -#: pretix/base/settings.py:2062 +#: pretix/base/settings.py:2075 #, fuzzy #| msgid "Keep a fixed cancellation fee" msgid "Charge a fixed cancellation fee" msgstr "احتفظ برسوم إلغاء ثابتة" -#: pretix/base/settings.py:2063 pretix/base/settings.py:2074 -#: pretix/base/settings.py:2088 +#: pretix/base/settings.py:2076 pretix/base/settings.py:2087 +#: pretix/base/settings.py:2101 msgid "" "Only affects orders pending payments, a cancellation fee for free orders is " "never charged. Note that it will be your responsibility to claim the " "cancellation fee from the user." msgstr "" -#: pretix/base/settings.py:2073 +#: pretix/base/settings.py:2086 #, fuzzy #| msgid "Keep payment, shipping and service fees" msgid "Charge payment, shipping and service fees" msgstr "احتفظ برسوم السداد والشحن والخدمة" -#: pretix/base/settings.py:2087 +#: pretix/base/settings.py:2100 #, fuzzy #| msgid "Keep a percentual cancellation fee" msgid "Charge a percentual cancellation fee" msgstr "احتفظ بنسبة رسوم الإلغاء" -#: pretix/base/settings.py:2098 pretix/base/settings.py:2237 +#: pretix/base/settings.py:2111 pretix/base/settings.py:2250 msgid "Do not allow cancellations after" msgstr "لا تسمح بالإلغاء بعد" -#: pretix/base/settings.py:2107 +#: pretix/base/settings.py:2120 msgid "Customers can cancel their paid orders" msgstr "يمكن للعملاء إلغاء طلباتهم المدفوعة" -#: pretix/base/settings.py:2108 +#: pretix/base/settings.py:2121 msgid "" "Paid money will be automatically paid back if the payment method allows it. " "Otherwise, a manual refund will be created for you to process manually." @@ -11919,29 +12106,29 @@ msgstr "" "سيتم رد الأموال المدفوعة تلقائيا إذا كانت طريقة الدفع تسمح بذلك. وبخلاف " "ذلك ، سيتم إنشاء استرداد يدوي لتتم معالجته يدويا." -#: pretix/base/settings.py:2121 pretix/control/forms/orders.py:917 +#: pretix/base/settings.py:2134 pretix/control/forms/orders.py:917 msgid "Keep a fixed cancellation fee" msgstr "احتفظ برسوم إلغاء ثابتة" -#: pretix/base/settings.py:2130 +#: pretix/base/settings.py:2143 msgid "Keep payment, shipping and service fees" msgstr "احتفظ برسوم السداد والشحن والخدمة" -#: pretix/base/settings.py:2142 pretix/control/forms/orders.py:928 +#: pretix/base/settings.py:2155 pretix/control/forms/orders.py:928 msgid "Keep a percentual cancellation fee" msgstr "احتفظ بنسبة رسوم الإلغاء" -#: pretix/base/settings.py:2151 +#: pretix/base/settings.py:2164 msgid "Allow customers to voluntarily choose a lower refund" msgstr "السماح للعملاء طواعية باختيار استرداد أقل" -#: pretix/base/settings.py:2152 +#: pretix/base/settings.py:2165 msgid "" "With this option enabled, your customers can choose to get a smaller refund " "to support you." msgstr "مع تمكين هذا الخيار ، يمكن لعملائك اختيار استرداد مبلغ أصغر لدعمك." -#: pretix/base/settings.py:2157 +#: pretix/base/settings.py:2170 msgid "" "However, if you want us to help keep the lights on here, please consider " "using the slider below to request a smaller refund. Thank you!" @@ -11949,12 +12136,12 @@ msgstr "" "إذا كنت تريد منا المساعدة في استمرار النشاط، فيرجى استخدام شريط التمرير " "أدناه لطلب استرداد مبلغ أقل. شكرا لك!" -#: pretix/base/settings.py:2164 +#: pretix/base/settings.py:2177 #, fuzzy msgid "Voluntary lower refund explanation" msgstr "تبرير تخفيض المبلغ الطوعي" -#: pretix/base/settings.py:2167 +#: pretix/base/settings.py:2180 msgid "" "This text will be shown in between the explanation of how the refunds work " "and the slider which your customers can use to choose the amount they would " @@ -11965,11 +12152,11 @@ msgstr "" "الذي يمكن لعملائك استخدامه لاختيار المبلغ الذي يرغبون في استلامه. يمكنك " "استخدامه على سبيل المثال لشرح اختيار استرداد أقل مما سيساعد مؤسستك." -#: pretix/base/settings.py:2182 +#: pretix/base/settings.py:2195 msgid "Step size for reduction amount" msgstr "حجم مبلغ التخفيض" -#: pretix/base/settings.py:2183 +#: pretix/base/settings.py:2196 msgid "" "By default, customers can choose an arbitrary amount for you to keep. If you " "set this to e.g. 10, they will only be able to choose values in increments " @@ -11979,7 +12166,7 @@ msgstr "" "ذلك على سبيل المثال 10 ، سيكونون قادرين فقط على اختيار القيم بزيادات قدرها " "10." -#: pretix/base/settings.py:2193 +#: pretix/base/settings.py:2206 msgid "" "Customers can only request a cancellation that needs to be approved by the " "event organizer before the order is canceled and a refund is issued." @@ -11987,68 +12174,68 @@ msgstr "" "يمكن للعملاء فقط طلب الإلغاء الذي يحتاج إلى موافقة منظم الفالية قبل إلغاء " "الطلب وإصدار أمر الاسترداد." -#: pretix/base/settings.py:2203 +#: pretix/base/settings.py:2216 msgid "" "Do not show the cancellation fee to users when they request cancellation." msgstr "" -#: pretix/base/settings.py:2212 pretix/base/settings.py:2222 +#: pretix/base/settings.py:2225 pretix/base/settings.py:2235 msgid "All refunds are issued to the original payment method" msgstr "يتم إصدار جميع المبالغ المستردة بطريقة الدفع الأصلية" -#: pretix/base/settings.py:2213 pretix/base/settings.py:2223 +#: pretix/base/settings.py:2226 pretix/base/settings.py:2236 msgid "" "Customers can choose between a gift card and a refund to their payment method" msgstr "" "يمكن للعملاء الاختيار بين بطاقة هدايا واسترداد الأموال بطريقة الدفع الخاصة " "بهم" -#: pretix/base/settings.py:2214 pretix/base/settings.py:2224 +#: pretix/base/settings.py:2227 pretix/base/settings.py:2237 msgid "All refunds are issued as gift cards" msgstr "يتم إصدار جميع المبالغ المستردة كبطاقات هدايا" -#: pretix/base/settings.py:2215 pretix/base/settings.py:2225 +#: pretix/base/settings.py:2228 pretix/base/settings.py:2238 msgid "Do not handle refunds automatically at all" msgstr "" -#: pretix/base/settings.py:2220 +#: pretix/base/settings.py:2233 #: pretix/control/templates/pretixcontrol/order/index.html:182 msgid "Refund method" msgstr "طريقة الاسترداد" -#: pretix/base/settings.py:2246 pretix/base/settings.py:2259 +#: pretix/base/settings.py:2259 pretix/base/settings.py:2272 #, fuzzy #| msgid "Generate cancellation" msgid "Terms of cancellation" msgstr "توليد إلغاء" -#: pretix/base/settings.py:2249 +#: pretix/base/settings.py:2262 msgid "" "This text will be shown when cancellation is allowed for a paid order. Leave " "empty if you want pretix to automatically generate the terms of cancellation " "based on your settings." msgstr "" -#: pretix/base/settings.py:2262 +#: pretix/base/settings.py:2275 msgid "" "This text will be shown when cancellation is allowed for an unpaid or free " "order. Leave empty if you want pretix to automatically generate the terms of " "cancellation based on your settings." msgstr "" -#: pretix/base/settings.py:2272 pretix/control/forms/event.py:1898 +#: pretix/base/settings.py:2285 pretix/control/forms/event.py:1898 msgid "Contact address" msgstr "عنوان الإتصال" -#: pretix/base/settings.py:2273 pretix/control/forms/event.py:1900 +#: pretix/base/settings.py:2286 pretix/control/forms/event.py:1900 msgid "We'll show this publicly to allow attendees to contact you." msgstr "سيظهر هذا علنا للسماح للحاضرين بالاتصال بك." -#: pretix/base/settings.py:2281 pretix/control/forms/event.py:1892 +#: pretix/base/settings.py:2294 pretix/control/forms/event.py:1892 msgid "Imprint URL" msgstr "رابط موقع مقدم الخدمة" -#: pretix/base/settings.py:2282 pretix/control/forms/event.py:1893 +#: pretix/base/settings.py:2295 pretix/control/forms/event.py:1893 msgid "" "This should point e.g. to a part of your website that has your contact " "details and legal information." @@ -12056,11 +12243,11 @@ msgstr "" "ينبغي أن يشير هذا إلى على سبيل المثال جزء من موقع الويب الخاص بك الذي يحتوي " "على تفاصيل الاتصال الخاصة بك والمعلومات القانونية." -#: pretix/base/settings.py:2292 +#: pretix/base/settings.py:2305 msgid "Privacy Policy URL" msgstr "" -#: pretix/base/settings.py:2293 +#: pretix/base/settings.py:2306 #, fuzzy #| msgid "" #| "This should point e.g. to a part of your website that has your contact " @@ -12072,13 +12259,13 @@ msgstr "" "ينبغي أن يشير هذا إلى على سبيل المثال جزء من موقع الويب الخاص بك الذي يحتوي " "على تفاصيل الاتصال الخاصة بك والمعلومات القانونية." -#: pretix/base/settings.py:2304 +#: pretix/base/settings.py:2317 #, fuzzy #| msgid "Account information" msgid "Accessibility information URL" msgstr "معلومات الحساب" -#: pretix/base/settings.py:2305 +#: pretix/base/settings.py:2318 #, fuzzy #| msgid "" #| "This should point e.g. to a part of your website that has your contact " @@ -12090,7 +12277,7 @@ msgstr "" "ينبغي أن يشير هذا إلى على سبيل المثال جزء من موقع الويب الخاص بك الذي يحتوي " "على تفاصيل الاتصال الخاصة بك والمعلومات القانونية." -#: pretix/base/settings.py:2312 +#: pretix/base/settings.py:2325 #: pretix/presale/templates/pretixpresale/event/base.html:229 #: pretix/presale/templates/pretixpresale/event/base.html:234 #: pretix/presale/templates/pretixpresale/organizers/accessibility.html:6 @@ -12101,23 +12288,23 @@ msgstr "" msgid "Accessibility information" msgstr "معلومات الحساب" -#: pretix/base/settings.py:2316 +#: pretix/base/settings.py:2329 #, fuzzy #| msgid "Account information" msgid "Accessibility information title" msgstr "معلومات الحساب" -#: pretix/base/settings.py:2326 +#: pretix/base/settings.py:2339 #, fuzzy #| msgid "Account information" msgid "Accessibility information text" msgstr "معلومات الحساب" -#: pretix/base/settings.py:2347 +#: pretix/base/settings.py:2360 msgid "Attach ticket files" msgstr "إرفق ملفات التذكرة" -#: pretix/base/settings.py:2349 +#: pretix/base/settings.py:2362 #, python-brace-format msgid "" "Tickets will never be attached if they're larger than {size} to avoid email " @@ -12126,36 +12313,36 @@ msgstr "" "لن يتم إرفاق التذاكر أبدا إذا كان حجمها أكبر من {size} لتجنب مشاكل إرسال " "البريد الإلكتروني." -#: pretix/base/settings.py:2360 pretix/plugins/sendmail/forms.py:201 +#: pretix/base/settings.py:2373 pretix/plugins/sendmail/forms.py:201 #: pretix/plugins/sendmail/models.py:263 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:66 msgid "Attach calendar files" msgstr "إرفق ملفات التقويم" -#: pretix/base/settings.py:2361 +#: pretix/base/settings.py:2374 msgid "" "If enabled, we will attach an .ics calendar file to order confirmation " "emails." msgstr "" "في حالة التمكين، سنرفق ملف تقويم ics. لرسائل البريد الإلكتروني لتأكيد الطلب." -#: pretix/base/settings.py:2370 +#: pretix/base/settings.py:2383 msgid "Attach calendar files only after order has been paid" msgstr "" -#: pretix/base/settings.py:2371 +#: pretix/base/settings.py:2384 msgid "" "Use this if you e.g. put a private access link into the calendar file to " "make sure people only receive it after their payment was confirmed." msgstr "" -#: pretix/base/settings.py:2380 +#: pretix/base/settings.py:2393 #, fuzzy #| msgid "Product description" msgid "Event description" msgstr "وصف المنتج" -#: pretix/base/settings.py:2383 +#: pretix/base/settings.py:2396 msgid "" "You can use this to share information with your attendees, such as travel " "information or the link to a digital event. If you keep it empty, we will " @@ -12165,11 +12352,11 @@ msgid "" "people." msgstr "" -#: pretix/base/settings.py:2396 +#: pretix/base/settings.py:2409 msgid "Subject prefix" msgstr "الرمز الذي يسبق الموضوع" -#: pretix/base/settings.py:2397 +#: pretix/base/settings.py:2410 msgid "" "This will be prepended to the subject of all outgoing emails, formatted as " "[prefix]. Choose, for example, a short form of your event name." @@ -12177,23 +12364,23 @@ msgstr "" "سيتم إضافة هذا مسبقا إلى موضوع جميع رسائل البريد الإلكتروني الصادرة ، محدد " "مثل [prefix]. اختر ، على سبيل المثال ، مسمى قصير لاسم الفعالية الخاصة بك." -#: pretix/base/settings.py:2411 pretix/control/forms/mailsetup.py:37 +#: pretix/base/settings.py:2424 pretix/control/forms/mailsetup.py:37 #: pretix/control/forms/mailsetup.py:119 #: pretix/control/templates/pretixcontrol/event/mail.html:39 #: pretix/control/templates/pretixcontrol/organizers/mail.html:40 msgid "Sender address" msgstr "عنوان المرسل" -#: pretix/base/settings.py:2412 pretix/control/forms/mailsetup.py:38 +#: pretix/base/settings.py:2425 pretix/control/forms/mailsetup.py:38 #: pretix/control/forms/mailsetup.py:120 msgid "Sender address for outgoing emails" msgstr "عنوان المرسل لرسائل البريد الإلكتروني الصادرة" -#: pretix/base/settings.py:2421 +#: pretix/base/settings.py:2434 msgid "Sender name" msgstr "اسم المرسل" -#: pretix/base/settings.py:2422 +#: pretix/base/settings.py:2435 msgid "" "Sender name used in conjunction with the sender address for outgoing emails. " "Defaults to your event name." @@ -12201,20 +12388,20 @@ msgstr "" "يتم استخدام اسم المرسل مع عنوان المرسل لرسائل البريد الإلكتروني الصادرة. " "افتراضات لاسم الفعالية الخاصة بك." -#: pretix/base/settings.py:2440 pretix/base/settings.py:2497 -#: pretix/base/settings.py:2514 pretix/base/settings.py:2532 +#: pretix/base/settings.py:2453 pretix/base/settings.py:2510 +#: pretix/base/settings.py:2527 pretix/base/settings.py:2545 #, python-brace-format msgid "Your order: {code}" msgstr "طلبك هو: {code}" -#: pretix/base/settings.py:2444 pretix/base/settings.py:2477 -#: pretix/base/settings.py:2582 pretix/base/settings.py:2815 -#: pretix/base/settings.py:2852 +#: pretix/base/settings.py:2457 pretix/base/settings.py:2490 +#: pretix/base/settings.py:2595 pretix/base/settings.py:2828 +#: pretix/base/settings.py:2865 #, python-brace-format msgid "Your event registration: {code}" msgstr "تسجيل الفعالية الخاصة بك:{code}" -#: pretix/base/settings.py:2448 +#: pretix/base/settings.py:2461 #, python-brace-format msgid "" "Hello,\n" @@ -12239,12 +12426,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2461 +#: pretix/base/settings.py:2474 #, python-brace-format msgid "Your orders for {event}" msgstr "طلباتكم ل{event}" -#: pretix/base/settings.py:2465 +#: pretix/base/settings.py:2478 #, python-brace-format msgid "" "Hello,\n" @@ -12267,7 +12454,7 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2481 +#: pretix/base/settings.py:2494 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -12290,7 +12477,7 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2501 +#: pretix/base/settings.py:2514 #, python-brace-format msgid "" "Hello,\n" @@ -12315,7 +12502,7 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2518 +#: pretix/base/settings.py:2531 #, python-brace-format msgid "" "Hello,\n" @@ -12342,7 +12529,7 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2536 +#: pretix/base/settings.py:2549 #, python-brace-format msgid "" "Hello,\n" @@ -12372,13 +12559,13 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2554 +#: pretix/base/settings.py:2567 #, fuzzy #| msgid "Split into new order" msgid "Attachment for new orders" msgstr "تنقسم إلى النظام الجديد" -#: pretix/base/settings.py:2559 +#: pretix/base/settings.py:2572 #, python-brace-format msgid "" "This file will be attached to the first email that we send for every new " @@ -12390,7 +12577,7 @@ msgid "" "vital email going to spam, you can only upload PDF files of up to {size} MB." msgstr "" -#: pretix/base/settings.py:2586 +#: pretix/base/settings.py:2599 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -12413,12 +12600,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2598 +#: pretix/base/settings.py:2611 #, python-brace-format msgid "Your order has been changed: {code}" msgstr "تم تغيير طلبك: {code}" -#: pretix/base/settings.py:2602 +#: pretix/base/settings.py:2615 #, python-brace-format msgid "" "Hello,\n" @@ -12441,12 +12628,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2614 +#: pretix/base/settings.py:2627 #, python-brace-format msgid "Payment received for your order: {code}" msgstr "تم إستلام الدفع لطلبك: {code}" -#: pretix/base/settings.py:2618 +#: pretix/base/settings.py:2631 #, python-brace-format msgid "" "Hello,\n" @@ -12473,12 +12660,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2636 +#: pretix/base/settings.py:2649 #, python-brace-format msgid "Event registration confirmed: {code}" msgstr "تم تأكيد تسجيل الفعالية: {code}" -#: pretix/base/settings.py:2640 +#: pretix/base/settings.py:2653 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -12501,12 +12688,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2657 pretix/control/forms/event.py:1294 +#: pretix/base/settings.py:2670 pretix/control/forms/event.py:1294 #: pretix/control/forms/event.py:1416 pretix/plugins/sendmail/models.py:268 msgid "Number of days" msgstr "عدد الأيام" -#: pretix/base/settings.py:2659 pretix/control/forms/event.py:1297 +#: pretix/base/settings.py:2672 pretix/control/forms/event.py:1297 msgid "" "This email will be sent out this many days before the order expires. If the " "value is 0, the mail will never be sent." @@ -12514,12 +12701,12 @@ msgstr "" "سيتم إرسال هذا البريد الإلكتروني من هذا عدة أيام قبل انتهاء صلاحية النظام. " "إذا كانت القيمة 0، لن يتم إرسال البريد." -#: pretix/base/settings.py:2667 +#: pretix/base/settings.py:2680 #, python-brace-format msgid "Your order is about to expire: {code}" msgstr "طلبك على وشك الانتهاء: {code}" -#: pretix/base/settings.py:2671 +#: pretix/base/settings.py:2684 #, python-brace-format msgid "" "Hello,\n" @@ -12546,12 +12733,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2685 +#: pretix/base/settings.py:2698 #, python-brace-format msgid "Your order is pending payment: {code}" msgstr "طلبك في انتظار الدفع: {code}" -#: pretix/base/settings.py:2689 +#: pretix/base/settings.py:2702 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -12589,13 +12776,13 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2702 +#: pretix/base/settings.py:2715 #, fuzzy, python-brace-format #| msgid "Payment received for your order: {code}" msgid "Incomplete payment received: {code}" msgstr "تم إستلام الدفع لطلبك: {code}" -#: pretix/base/settings.py:2706 +#: pretix/base/settings.py:2719 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -12636,13 +12823,13 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2722 +#: pretix/base/settings.py:2735 #, fuzzy, python-brace-format #| msgid "Payment received for your order: {code}" msgid "Payment failed for your order: {code}" msgstr "تم إستلام الدفع لطلبك: {code}" -#: pretix/base/settings.py:2726 +#: pretix/base/settings.py:2739 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -12683,12 +12870,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2740 +#: pretix/base/settings.py:2753 #, python-brace-format msgid "You have been selected from the waitinglist for {event}" msgstr "لقد تم اختيارك من قائمة الانتظار ل{event}" -#: pretix/base/settings.py:2744 +#: pretix/base/settings.py:2757 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -12760,12 +12947,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2773 +#: pretix/base/settings.py:2786 #, python-brace-format msgid "Order canceled: {code}" msgstr "تم إلغاء الطلب: {code}" -#: pretix/base/settings.py:2777 +#: pretix/base/settings.py:2790 #, python-brace-format msgid "" "Hello,\n" @@ -12792,12 +12979,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2791 +#: pretix/base/settings.py:2804 #, python-brace-format msgid "Order approved and awaiting payment: {code}" msgstr "تمت الموافقة على الطلب وفي انتظار الدفع: {code}" -#: pretix/base/settings.py:2795 +#: pretix/base/settings.py:2808 #, python-brace-format msgid "" "Hello,\n" @@ -12827,7 +13014,7 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2819 pretix/base/settings.py:2856 +#: pretix/base/settings.py:2832 pretix/base/settings.py:2869 #, fuzzy, python-brace-format #| msgid "" #| "Hello {attendee_name},\n" @@ -12860,12 +13047,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2831 +#: pretix/base/settings.py:2844 #, python-brace-format msgid "Order approved and confirmed: {code}" msgstr "تمت الموافقة على الطلب وتأكيده: {code}" -#: pretix/base/settings.py:2835 +#: pretix/base/settings.py:2848 #, python-brace-format msgid "" "Hello,\n" @@ -12890,12 +13077,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2868 +#: pretix/base/settings.py:2881 #, python-brace-format msgid "Order denied: {code}" msgstr "الطلب مرفوض: {code}" -#: pretix/base/settings.py:2872 +#: pretix/base/settings.py:2885 #, python-brace-format msgid "" "Hello,\n" @@ -12924,7 +13111,7 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2887 +#: pretix/base/settings.py:2900 #, python-brace-format msgid "" "Hello,\n" @@ -12943,13 +13130,13 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2897 +#: pretix/base/settings.py:2910 #, fuzzy, python-brace-format #| msgid "Invoice number" msgid "Invoice {invoice_number}" msgstr "رقم الفاتورة" -#: pretix/base/settings.py:2901 +#: pretix/base/settings.py:2914 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -12981,12 +13168,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2919 pretix/base/settings.py:2935 +#: pretix/base/settings.py:2932 pretix/base/settings.py:2948 #, python-brace-format msgid "Your ticket is ready for download: {code}" msgstr "تذكرتك جاهزة للتنزيل: {code}" -#: pretix/base/settings.py:2923 +#: pretix/base/settings.py:2936 #, fuzzy, python-brace-format #| msgid "" #| "Hello {attendee_name},\n" @@ -13019,7 +13206,7 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2939 +#: pretix/base/settings.py:2952 #, python-brace-format msgid "" "Hello,\n" @@ -13042,12 +13229,12 @@ msgstr "" "تحياتنا،\n" "فريق {event}" -#: pretix/base/settings.py:2951 +#: pretix/base/settings.py:2964 #, python-brace-format msgid "Activate your account at {organizer}" msgstr "قم بتفعيل حسابك على {organizer}" -#: pretix/base/settings.py:2955 +#: pretix/base/settings.py:2968 #, python-brace-format msgid "" "Hello {name},\n" @@ -13082,12 +13269,12 @@ msgstr "" "\n" "فريق {organizer} الخاص بك" -#: pretix/base/settings.py:2973 +#: pretix/base/settings.py:2986 #, python-brace-format msgid "Confirm email address for your account at {organizer}" msgstr "تأكيد عنوان البريد الإلكتروني لحسابك على {organizer}" -#: pretix/base/settings.py:2977 +#: pretix/base/settings.py:2990 #, python-brace-format msgid "" "Hello {name},\n" @@ -13122,12 +13309,12 @@ msgstr "" "\n" "فريق {organizer} الخاص بك" -#: pretix/base/settings.py:2995 +#: pretix/base/settings.py:3008 #, python-brace-format msgid "Set a new password for your account at {organizer}" msgstr "قم بتعيين كلمة مرور جديدة لحسابك على {organizer}" -#: pretix/base/settings.py:2999 +#: pretix/base/settings.py:3012 #, python-brace-format msgid "" "Hello {name},\n" @@ -13162,13 +13349,13 @@ msgstr "" "\n" "فريق {organizer} الخاص بك" -#: pretix/base/settings.py:3017 +#: pretix/base/settings.py:3030 #, fuzzy, python-brace-format #| msgid "Activate your account at {organizer}" msgid "Changes to your account at {organizer}" msgstr "قم بتفعيل حسابك على {organizer}" -#: pretix/base/settings.py:3021 +#: pretix/base/settings.py:3034 #, fuzzy, python-brace-format #| msgid "" #| "Hello {name},\n" @@ -13220,57 +13407,57 @@ msgstr "" "\n" "فريق {organizer} الخاص بك" -#: pretix/base/settings.py:3073 pretix/base/settings.py:3080 -#: pretix/base/settings.py:3094 pretix/base/settings.py:3102 -#: pretix/base/settings.py:3116 pretix/base/settings.py:3124 -#: pretix/base/settings.py:3138 pretix/base/settings.py:3145 +#: pretix/base/settings.py:3086 pretix/base/settings.py:3093 +#: pretix/base/settings.py:3107 pretix/base/settings.py:3115 +#: pretix/base/settings.py:3129 pretix/base/settings.py:3137 +#: pretix/base/settings.py:3151 pretix/base/settings.py:3158 msgid "Please enter the hexadecimal code of a color, e.g. #990000." msgstr "الرجاء إدخال رمز عشري للون على سبيل المثال # 990000." -#: pretix/base/settings.py:3077 +#: pretix/base/settings.py:3090 msgid "Primary color" msgstr "لون أساسي" -#: pretix/base/settings.py:3098 +#: pretix/base/settings.py:3111 msgid "Accent color for success" msgstr "درجة لون لنجاح العملية" -#: pretix/base/settings.py:3099 +#: pretix/base/settings.py:3112 msgid "We strongly suggest to use a shade of green." msgstr "نقترح بشدة استخدام الظل الأخضر." -#: pretix/base/settings.py:3120 +#: pretix/base/settings.py:3133 msgid "Accent color for errors" msgstr "درجة لون الأخطاء" -#: pretix/base/settings.py:3121 +#: pretix/base/settings.py:3134 msgid "We strongly suggest to use a shade of red." msgstr "نقترح بشدة استخدام الظل الأحمر." -#: pretix/base/settings.py:3142 +#: pretix/base/settings.py:3155 msgid "Page background color" msgstr "لون خلفية الصفحة" -#: pretix/base/settings.py:3157 +#: pretix/base/settings.py:3170 msgid "Use round edges" msgstr "استخدم حواف مستديرة" -#: pretix/base/settings.py:3166 +#: pretix/base/settings.py:3179 msgid "" "Use native spinners in the widget instead of custom ones for numeric inputs " "such as quantity." msgstr "" -#: pretix/base/settings.py:3177 +#: pretix/base/settings.py:3190 msgid "Only respected by modern browsers." msgstr "يستخدم للمتصفحات الحديثة فقط." -#: pretix/base/settings.py:3188 pretix/base/settings.py:3232 -#: pretix/control/forms/organizer.py:642 +#: pretix/base/settings.py:3201 pretix/base/settings.py:3245 +#: pretix/control/forms/organizer.py:652 msgid "Header image" msgstr "صورة رأسية" -#: pretix/base/settings.py:3191 +#: pretix/base/settings.py:3204 #, fuzzy #| msgid "" #| "If you provide a logo image, we will by default not show your event name " @@ -13290,26 +13477,26 @@ msgstr "" "120 بكسل. يمكنك زيادة الحجم من خلال الإعداد أدناه. نوصي بعدم استخدام " "التفاصيل الصغيرة على الصورة حيث سيتغير حجمها على الشاشات الصغيرة." -#: pretix/base/settings.py:3212 pretix/base/settings.py:3255 +#: pretix/base/settings.py:3225 pretix/base/settings.py:3268 msgid "Use header image in its full size" msgstr "استخدم الصورة الرأسية بحجمها الكامل" -#: pretix/base/settings.py:3213 pretix/base/settings.py:3256 +#: pretix/base/settings.py:3226 pretix/base/settings.py:3269 msgid "We recommend to upload a picture at least 1170 pixels wide." msgstr "نوصي بتحميل صورة لا يقل عرضها عن 1170 بكسل." -#: pretix/base/settings.py:3222 +#: pretix/base/settings.py:3235 msgid "Show event title even if a header image is present" msgstr "أعرض عنوان الفعالية حتى إذا كانت الصورة الرأسية موجودة" -#: pretix/base/settings.py:3223 +#: pretix/base/settings.py:3236 msgid "" "The title will only be shown on the event front page. If no header image is " "uploaded for the event, but the header image from the organizer profile is " "used, this option will be ignored and the event title will always be shown." msgstr "" -#: pretix/base/settings.py:3235 pretix/control/forms/organizer.py:646 +#: pretix/base/settings.py:3248 pretix/control/forms/organizer.py:656 #, fuzzy #| msgid "" #| "If you provide a logo image, we will by default not show your " @@ -13329,15 +13516,15 @@ msgstr "" "الحجم من الإعداد أدناه. نوصي بعدم استخدام التفاصيل الصغيرة على الصورة حيث " "سيتم تغيير حجمها على الشاشات الصغيرة." -#: pretix/base/settings.py:3265 +#: pretix/base/settings.py:3278 msgid "Use header image also for events without an individually uploaded logo" msgstr "" -#: pretix/base/settings.py:3273 +#: pretix/base/settings.py:3286 msgid "Favicon" msgstr "فافيكون" -#: pretix/base/settings.py:3276 +#: pretix/base/settings.py:3289 msgid "" "If you provide a favicon, we will show it instead of the default pretix " "icon. We recommend a size of at least 200x200px to accommodate most devices." @@ -13345,11 +13532,11 @@ msgstr "" "إذا قمت بتوفير فافيكون، وسوف نعرض بدلا من الافتراضي pretix رمز. نوصي حجم " "200x200px على الأقل لاستيعاب معظم الأجهزة." -#: pretix/base/settings.py:3292 +#: pretix/base/settings.py:3305 msgid "Social media image" msgstr "صورة وسائل التواصل الاجتماعي" -#: pretix/base/settings.py:3295 +#: pretix/base/settings.py:3308 msgid "" "This picture will be used as a preview if you post links to your ticket shop " "on social media. Facebook advises to use a picture size of 1200 x 630 " @@ -13363,19 +13550,19 @@ msgstr "" "لذلك نوصي بالتأكد من أنها لا تزال تبدو جيدة في حال كان المربع الأوسط هو الذي " "يظهر فقط. إذا لم تقم بملء هذا ، فسنستخدم الشعار المقدم أعلاه." -#: pretix/base/settings.py:3313 +#: pretix/base/settings.py:3326 msgid "Logo image" msgstr "صورة الشعار" -#: pretix/base/settings.py:3317 +#: pretix/base/settings.py:3330 msgid "We will show your logo with a maximal height and width of 2.5 cm." msgstr "سنعرض شعارك بارتفاع وعرض 2.5 سم كحد أقصى." -#: pretix/base/settings.py:3344 pretix/base/settings.py:3450 +#: pretix/base/settings.py:3357 pretix/base/settings.py:3463 msgid "Info text" msgstr "معلومات النص" -#: pretix/base/settings.py:3347 pretix/base/settings.py:3452 +#: pretix/base/settings.py:3360 pretix/base/settings.py:3465 msgid "" "Not displayed anywhere by default, but if you want to, you can use this e.g. " "in ticket templates." @@ -13383,11 +13570,11 @@ msgstr "" "لا يتم عرضه في أي مكان بشكل افتراضي ، ولكن إذا كنت ترغب في ذلك ، يمكنك " "استخدام هذا على سبيل المثال في قوالب التذاكر." -#: pretix/base/settings.py:3356 +#: pretix/base/settings.py:3369 msgid "Banner text (top)" msgstr "نص الشعار (أعلى)" -#: pretix/base/settings.py:3359 +#: pretix/base/settings.py:3372 msgid "" "This text will be shown above every page of your shop. Please only use this " "for very important messages." @@ -13395,11 +13582,11 @@ msgstr "" "سيظهر هذا النص فوق كل صفحة من صفحات متجرك. الرجاء استخدام هذا فقط للرسائل " "الهامة جدا." -#: pretix/base/settings.py:3369 +#: pretix/base/settings.py:3382 msgid "Banner text (bottom)" msgstr "نص الشعار (أسفل)" -#: pretix/base/settings.py:3372 +#: pretix/base/settings.py:3385 msgid "" "This text will be shown below every page of your shop. Please only use this " "for very important messages." @@ -13407,11 +13594,11 @@ msgstr "" "سيظهر هذا النص أسفل كل صفحة من صفحات متجرك. الرجاء استخدام هذا فقط للرسائل " "الهامة جدا." -#: pretix/base/settings.py:3382 +#: pretix/base/settings.py:3395 msgid "Voucher explanation" msgstr "تفسير لكود الخصم" -#: pretix/base/settings.py:3385 +#: pretix/base/settings.py:3398 msgid "" "This text will be shown next to the input for a voucher code. You can use it " "e.g. to explain how to obtain a voucher code." @@ -13419,11 +13606,11 @@ msgstr "" "سيظهر هذا النص بجانب إدخال رمز كود الخصم. يمكنك استخدامه على سبيل المثال " "لشرح كيفية الحصول على رمز قسيمة." -#: pretix/base/settings.py:3395 +#: pretix/base/settings.py:3408 msgid "Attendee data explanation" msgstr "شرح بيانات الحضور" -#: pretix/base/settings.py:3398 +#: pretix/base/settings.py:3411 #, fuzzy #| msgid "" #| "This text will be shown above the questions asked for every admission " @@ -13436,11 +13623,11 @@ msgstr "" "سيتم عرض هذا النص فوق الأسئلة المطروحة لكل منتج مدخل. يمكنك استخدامه على " "سبيل المثال لشرح سبب حاجتك إلى معلومات منهم." -#: pretix/base/settings.py:3408 +#: pretix/base/settings.py:3421 msgid "Additional success message" msgstr "رسالة نجاح إضافية" -#: pretix/base/settings.py:3409 +#: pretix/base/settings.py:3422 msgid "" "This message will be shown after an order has been created successfully. It " "will be shown in additional to the default text." @@ -13448,11 +13635,11 @@ msgstr "" "ستظهر هذه الرسالة بعد إنشاء الطلب بنجاح. سيتم عرضه بالإضافة إلى النص " "الافتراضي." -#: pretix/base/settings.py:3421 +#: pretix/base/settings.py:3434 msgid "Help text of the phone number field" msgstr "نص المساعدة لحقل رقم الهاتف" -#: pretix/base/settings.py:3428 +#: pretix/base/settings.py:3441 msgid "" "Make sure to enter a valid email address. We will send you an order " "confirmation including a link that you need to access your order later." @@ -13460,15 +13647,15 @@ msgstr "" "تأكد من إدخال عنوان بريد إلكتروني صالح. سنرسل إليك تأكيدا لطلبك يتضمن رابطا " "تحتاجه للوصول إلى طلبك لاحقا." -#: pretix/base/settings.py:3435 +#: pretix/base/settings.py:3448 msgid "Help text of the email field" msgstr "نص المساعدة لحقل البريد الإلكتروني" -#: pretix/base/settings.py:3461 +#: pretix/base/settings.py:3474 msgid "Allow creating a new team during event creation" msgstr "السماح بإنشاء فريق جديد أثناء إنشاء الفعالية" -#: pretix/base/settings.py:3462 +#: pretix/base/settings.py:3475 msgid "" "Users that do not have access to all events under this organizer, must " "select one of their teams to have access to the created event. This setting " @@ -13480,36 +13667,36 @@ msgstr "" "الإعداد للمستخدمين بإنشاء فريق محدد للفعاية أثناء التنقل ، حتى عندما لا يكون " "لديهم إذن \"إمكانية تغيير الفرق والتصاريح\"." -#: pretix/base/settings.py:3534 pretix/base/settings.py:3544 +#: pretix/base/settings.py:3547 pretix/base/settings.py:3557 msgid "Event start time (descending)" msgstr "وقت بدء الفعالية (تنازلي)" -#: pretix/base/settings.py:3536 pretix/base/settings.py:3546 +#: pretix/base/settings.py:3549 pretix/base/settings.py:3559 msgid "Name (descending)" msgstr "الاسم (تنازلي)" -#: pretix/base/settings.py:3541 +#: pretix/base/settings.py:3554 msgctxt "subevent" msgid "Date ordering" msgstr "ترتيب التاريخ" -#: pretix/base/settings.py:3557 +#: pretix/base/settings.py:3570 msgid "Link back to organizer overview on all event pages" msgstr "قم بنظرة عامة للمنظم للاطلاع على جميع صفحات الفعالية" -#: pretix/base/settings.py:3566 +#: pretix/base/settings.py:3579 msgid "Homepage text" msgstr "نص الصفحة الرئيسية" -#: pretix/base/settings.py:3568 +#: pretix/base/settings.py:3581 msgid "This will be displayed on the organizer homepage." msgstr "سيتم عرض هذا على الصفحة الرئيسية للمنظم." -#: pretix/base/settings.py:3583 +#: pretix/base/settings.py:3596 msgid "Length of gift card codes" msgstr "طول رموز بطاقات الهدايا" -#: pretix/base/settings.py:3584 +#: pretix/base/settings.py:3597 #, python-brace-format msgid "" "The system generates by default {}-character long gift card codes. However, " @@ -13518,11 +13705,11 @@ msgstr "" "ينشئ النظام افتراضيا رموز بطاقات هدايا طويلة مكونة من {}-حرف. ومع ذلك ، إذا " "تم طلب طول مختلف، فيمكن تعيينه هنا." -#: pretix/base/settings.py:3600 +#: pretix/base/settings.py:3613 msgid "Validity of gift card codes in years" msgstr "صلاحية رموز بطاقات الهدايا بالسنوات" -#: pretix/base/settings.py:3601 +#: pretix/base/settings.py:3614 msgid "" "If you set a number here, gift cards will by default expire at the end of " "the year after this many years. If you keep it empty, gift cards do not have " @@ -13532,23 +13719,23 @@ msgstr "" "العام بعد هذه السنوات العديدة. إذا أبقيت الخانة فارغة ، فلن يكون لبطاقات " "الهدايا تاريخ انتهاء صلاحية صريح." -#: pretix/base/settings.py:3612 +#: pretix/base/settings.py:3625 msgid "Enable cookie consent management features" msgstr "" -#: pretix/base/settings.py:3618 +#: pretix/base/settings.py:3631 msgid "" "By clicking \"Accept all cookies\", you agree to the storing of cookies and " "use of similar technologies on your device." msgstr "" -#: pretix/base/settings.py:3625 +#: pretix/base/settings.py:3638 #, fuzzy #| msgid "Additional text" msgid "Dialog text" msgstr "نص إضافي" -#: pretix/base/settings.py:3632 +#: pretix/base/settings.py:3645 msgid "" "We use cookies and similar technologies to gather data that allows us to " "improve this website and our offerings. If you do not agree, we will only " @@ -13556,49 +13743,49 @@ msgid "" "offers." msgstr "" -#: pretix/base/settings.py:3640 +#: pretix/base/settings.py:3653 msgid "Secondary dialog text" msgstr "" -#: pretix/base/settings.py:3646 +#: pretix/base/settings.py:3659 #, fuzzy #| msgid "Price settings" msgid "Privacy settings" msgstr "ضبط الأسعار" -#: pretix/base/settings.py:3651 +#: pretix/base/settings.py:3664 #, fuzzy #| msgid "Allowed titles" msgid "Dialog title" msgstr "عناوين سمح" -#: pretix/base/settings.py:3657 +#: pretix/base/settings.py:3670 msgid "Accept all cookies" msgstr "" -#: pretix/base/settings.py:3662 +#: pretix/base/settings.py:3675 #, fuzzy #| msgid "Product variation description" msgid "\"Accept\" button description" msgstr "وصف نوع المنتج" -#: pretix/base/settings.py:3668 +#: pretix/base/settings.py:3681 #, fuzzy #| msgid "Required question" msgid "Required cookies only" msgstr "سؤال مطلوب" -#: pretix/base/settings.py:3673 +#: pretix/base/settings.py:3686 #, fuzzy #| msgid "Product variation description" msgid "\"Reject\" button description" msgstr "وصف نوع المنتج" -#: pretix/base/settings.py:3683 +#: pretix/base/settings.py:3696 msgid "Customers can choose their own seats" msgstr "يمكن للعملاء اختيار مقاعدهم الخاصة" -#: pretix/base/settings.py:3684 +#: pretix/base/settings.py:3697 msgid "" "If disabled, you will need to manually assign seats in the backend. Note " "that this can mean people will not know their seat after their purchase and " @@ -13608,164 +13795,164 @@ msgstr "" "لاحظ أن هذا قد يعني أن الأشخاص لن يعرفوا مقعدهم بعد شرائه وقد لا يكون مكتوبا " "على تذكرتهم." -#: pretix/base/settings.py:3710 +#: pretix/base/settings.py:3723 msgid "Show button to copy user input from other products" msgstr "أظهر الزر لنسخ مدخلات المستخدم من المنتجات الأخرى" -#: pretix/base/settings.py:3724 +#: pretix/base/settings.py:3737 msgid "Most common English titles" msgstr "العناوين الإنجليزية الأكثر شيوعا" -#: pretix/base/settings.py:3734 +#: pretix/base/settings.py:3747 msgid "Most common German titles" msgstr "العناوين الألمانية الأكثر شيوعا" -#: pretix/base/settings.py:3747 +#: pretix/base/settings.py:3760 msgctxt "person_name_salutation" msgid "Ms" msgstr "آنسة" -#: pretix/base/settings.py:3748 +#: pretix/base/settings.py:3761 msgctxt "person_name_salutation" msgid "Mr" msgstr "السيد" -#: pretix/base/settings.py:3749 +#: pretix/base/settings.py:3762 msgctxt "person_name_salutation" msgid "Mx" msgstr "السيد\\السيدة" -#: pretix/base/settings.py:3786 pretix/base/settings.py:3802 -#: pretix/base/settings.py:3818 pretix/base/settings.py:3833 -#: pretix/base/settings.py:3851 pretix/base/settings.py:3866 -#: pretix/base/settings.py:3896 pretix/base/settings.py:3920 -#: pretix/base/settings.py:3952 pretix/base/settings.py:3974 -#: pretix/base/settings.py:4005 +#: pretix/base/settings.py:3799 pretix/base/settings.py:3815 +#: pretix/base/settings.py:3831 pretix/base/settings.py:3846 +#: pretix/base/settings.py:3864 pretix/base/settings.py:3879 +#: pretix/base/settings.py:3909 pretix/base/settings.py:3933 +#: pretix/base/settings.py:3965 pretix/base/settings.py:3987 +#: pretix/base/settings.py:4018 msgctxt "person_name_sample" msgid "John" msgstr "جون" -#: pretix/base/settings.py:3787 pretix/base/settings.py:3803 -#: pretix/base/settings.py:3819 pretix/base/settings.py:3835 -#: pretix/base/settings.py:3853 pretix/base/settings.py:3867 -#: pretix/base/settings.py:3897 pretix/base/settings.py:3953 -#: pretix/base/settings.py:3975 pretix/base/settings.py:4006 +#: pretix/base/settings.py:3800 pretix/base/settings.py:3816 +#: pretix/base/settings.py:3832 pretix/base/settings.py:3848 +#: pretix/base/settings.py:3866 pretix/base/settings.py:3880 +#: pretix/base/settings.py:3910 pretix/base/settings.py:3966 +#: pretix/base/settings.py:3988 pretix/base/settings.py:4019 msgctxt "person_name_sample" msgid "Doe" msgstr "دو" -#: pretix/base/settings.py:3793 pretix/base/settings.py:3809 -#: pretix/base/settings.py:3841 pretix/base/settings.py:3960 -#: pretix/base/settings.py:3982 +#: pretix/base/settings.py:3806 pretix/base/settings.py:3822 +#: pretix/base/settings.py:3854 pretix/base/settings.py:3973 +#: pretix/base/settings.py:3995 msgctxt "person_name" msgid "Title" msgstr "عنوان" -#: pretix/base/settings.py:3801 pretix/base/settings.py:3817 -#: pretix/base/settings.py:3850 pretix/base/settings.py:3973 -#: pretix/base/settings.py:4004 +#: pretix/base/settings.py:3814 pretix/base/settings.py:3830 +#: pretix/base/settings.py:3863 pretix/base/settings.py:3986 +#: pretix/base/settings.py:4017 msgctxt "person_name_sample" msgid "Dr" msgstr "الدكتور" -#: pretix/base/settings.py:3825 pretix/base/settings.py:3842 +#: pretix/base/settings.py:3838 pretix/base/settings.py:3855 msgid "First name" msgstr "الاسم الاول" -#: pretix/base/settings.py:3826 pretix/base/settings.py:3843 +#: pretix/base/settings.py:3839 pretix/base/settings.py:3856 msgid "Middle name" msgstr "الاسم الأوسط" -#: pretix/base/settings.py:3907 pretix/base/settings.py:3919 -#: pretix/control/forms/organizer.py:793 +#: pretix/base/settings.py:3920 pretix/base/settings.py:3932 +#: pretix/control/forms/organizer.py:803 msgctxt "person_name_sample" msgid "John Doe" msgstr "جون دو" -#: pretix/base/settings.py:3913 +#: pretix/base/settings.py:3926 msgid "Calling name" msgstr "اسم النداء" -#: pretix/base/settings.py:3927 +#: pretix/base/settings.py:3940 msgid "Latin transcription" msgstr "الإملاء بالحروف اللاتينية" -#: pretix/base/settings.py:3939 pretix/base/settings.py:3959 -#: pretix/base/settings.py:3981 +#: pretix/base/settings.py:3952 pretix/base/settings.py:3972 +#: pretix/base/settings.py:3994 msgctxt "person_name" msgid "Salutation" msgstr "تحية" -#: pretix/base/settings.py:3951 pretix/base/settings.py:3972 -#: pretix/base/settings.py:4003 +#: pretix/base/settings.py:3964 pretix/base/settings.py:3985 +#: pretix/base/settings.py:4016 msgctxt "person_name_sample" msgid "Mr" msgstr "السيد" -#: pretix/base/settings.py:3985 +#: pretix/base/settings.py:3998 msgctxt "person_name" msgid "Degree (after name)" msgstr "الدرجة (بعد الاسم)" -#: pretix/base/settings.py:4007 +#: pretix/base/settings.py:4020 msgctxt "person_name_sample" msgid "MA" msgstr "MA" -#: pretix/base/settings.py:4033 pretix/base/settings.py:4035 +#: pretix/base/settings.py:4046 pretix/base/settings.py:4048 #, fuzzy #| msgid "Product name" msgctxt "address" msgid "Province" msgstr "اسم المنتج" -#: pretix/base/settings.py:4034 +#: pretix/base/settings.py:4047 #, fuzzy #| msgid "Use feature" msgctxt "address" msgid "Prefecture" msgstr "استخدام ميزة" -#: pretix/base/settings.py:4125 pretix/control/forms/event.py:242 +#: pretix/base/settings.py:4138 pretix/control/forms/event.py:242 msgid "" "Your default locale must also be enabled for your event (see box above)." msgstr "يجب أيضا تمكين لغتك الافتراضية للفعالية الخاصة بك (انظر المربع أعلاه)." -#: pretix/base/settings.py:4129 +#: pretix/base/settings.py:4142 msgid "" "You cannot require specifying attendee names if you do not ask for them." msgstr "لا يمكنك طلب تحديد أسماء الحضور إذا لم تطلبها." -#: pretix/base/settings.py:4133 +#: pretix/base/settings.py:4146 msgid "You have to ask for attendee emails if you want to make them required." msgstr "" "عليك أن تطلب رسائل البريد الإلكتروني للحضور إذا كنت ترغب في جعلها إلزامية." -#: pretix/base/settings.py:4137 +#: pretix/base/settings.py:4150 msgid "" "You have to ask for invoice addresses if you want to make them required." msgstr "عليك أن تطلب عناوين الفواتير إذا كنت ترغب في جعلها إلزامية." -#: pretix/base/settings.py:4141 +#: pretix/base/settings.py:4154 msgid "You have to require invoice addresses to require for company names." msgstr "عليك أن تطلب عنوان الفاتورة لطلب أسماء الشركات." -#: pretix/base/settings.py:4163 +#: pretix/base/settings.py:4176 #, python-brace-format msgid "VAT-ID is not supported for \"{}\"." msgstr "" -#: pretix/base/settings.py:4170 +#: pretix/base/settings.py:4183 msgid "The last payment date cannot be before the end of presale." msgstr "لا يمكن أن يكون تاريخ الدفع الأخير قبل نهاية فترة عرض البيع المسبق." -#: pretix/base/settings.py:4178 +#: pretix/base/settings.py:4191 #, fuzzy, python-brace-format #| msgid "Please enter a valid sales channel." msgid "The value \"{identifier}\" is not a valid sales channel." msgstr "الرجاء إدخال قناة بيع صالحة." -#: pretix/base/settings.py:4193 +#: pretix/base/settings.py:4206 msgid "This needs to be disabled if other NFC-based types are active." msgstr "" @@ -13955,7 +14142,7 @@ msgid "You do not have access to this page." msgstr "ليس لديك صلاحية الوصول إلى هذه الصفحة." #: pretix/base/templates/403.html:20 pretix/base/templates/404.html:16 -#: pretix/control/templates/pretixcontrol/base.html:199 +#: pretix/control/templates/pretixcontrol/base.html:200 #: pretix/control/templates/pretixcontrol/user/staff_session_start.html:4 #: pretix/control/templates/pretixcontrol/user/staff_session_start.html:6 #: pretix/presale/templates/pretixpresale/event/offline.html:21 @@ -14125,6 +14312,7 @@ msgstr "أنت تتلقى هذا البريد الإلكتروني لأنك قد #: pretix/control/templates/pretixcontrol/organizers/giftcards.html:98 #: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:114 #: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:21 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:214 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:390 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:114 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:95 @@ -14186,25 +14374,25 @@ msgstr "" msgid "%(number)s days %(relation)s %(relation_to)s at %(time_of_day)s" msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:5 -#: pretix/base/templates/pretixbase/redirect.html:9 +#: pretix/base/templates/pretixbase/redirect.html:6 +#: pretix/base/templates/pretixbase/redirect.html:10 #, fuzzy #| msgid "Redirection" msgid "Redirect" msgstr "إعادة توجيه" -#: pretix/base/templates/pretixbase/redirect.html:11 +#: pretix/base/templates/pretixbase/redirect.html:12 #, python-format msgid "" "The link you clicked on wants to redirect you to a destination on the " "website %(host)s." msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:14 +#: pretix/base/templates/pretixbase/redirect.html:15 msgid "Please only proceed if you trust this website to be safe." msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:20 +#: pretix/base/templates/pretixbase/redirect.html:21 #, fuzzy, python-format #| msgid "Proceed with checkout" msgid "Proceed to %(host)s" @@ -14785,8 +14973,8 @@ msgid "Support for check-in questions" msgstr "آلية الدخول" #: pretix/control/forms/checkin.py:197 pretix/control/forms/checkin.py:213 -#: pretix/control/forms/filter.py:2677 pretix/control/forms/filter.py:2719 -#: pretix/control/forms/filter.py:2884 +#: pretix/control/forms/filter.py:2683 pretix/control/forms/filter.py:2725 +#: pretix/control/forms/filter.py:2890 #, fuzzy #| msgctxt "subevent" #| msgid "All dates" @@ -14942,11 +15130,11 @@ msgid "" "{error}" msgstr "" -#: pretix/control/forms/event.py:587 pretix/control/forms/organizer.py:579 +#: pretix/control/forms/event.py:587 pretix/control/forms/organizer.py:588 msgid "Name format" msgstr "تنسيق اسم" -#: pretix/control/forms/event.py:588 pretix/control/forms/organizer.py:580 +#: pretix/control/forms/event.py:588 pretix/control/forms/organizer.py:589 msgid "" "This defines how pretix will ask for human names. Changing this after you " "already received orders might lead to unexpected behavior when sorting or " @@ -14955,11 +15143,11 @@ msgstr "" "هذا يعرف كيف pretix سيطلب أسماء الإنسان. تغيير هذا بعد تلقي أوامر بالفعل قد " "يؤدي إلى سلوك غير متوقع عندما يكون الترتيب أو تغيير أسماء." -#: pretix/control/forms/event.py:593 pretix/control/forms/organizer.py:585 +#: pretix/control/forms/event.py:593 pretix/control/forms/organizer.py:594 msgid "Allowed titles" msgstr "عناوين سمح" -#: pretix/control/forms/event.py:594 pretix/control/forms/organizer.py:586 +#: pretix/control/forms/event.py:594 pretix/control/forms/organizer.py:595 msgid "" "If the naming scheme you defined above allows users to input a title, you " "can use this to restrict the set of selectable titles." @@ -14967,12 +15155,12 @@ msgstr "" "إذا كان نظام تسمية قمت بتعريفه فوق يتيح للمستخدمين إدخال العنوان، يمكنك " "استخدام هذا للحد من مجموعة من العناوين اختيار." -#: pretix/control/forms/event.py:712 pretix/control/forms/organizer.py:661 +#: pretix/control/forms/event.py:712 pretix/control/forms/organizer.py:671 #, python-brace-format msgid "Ask for {fields}, display like {example}" msgstr "طلب {fields}، العرض مثل {example}" -#: pretix/control/forms/event.py:718 pretix/control/forms/organizer.py:667 +#: pretix/control/forms/event.py:718 pretix/control/forms/organizer.py:677 msgid "Free text input" msgstr "إدخال النص الحر" @@ -15120,17 +15308,17 @@ msgid "" "shop must be enabled." msgstr "" -#: pretix/control/forms/event.py:1150 pretix/control/forms/organizer.py:702 +#: pretix/control/forms/event.py:1150 pretix/control/forms/organizer.py:712 msgid "Bcc address" msgstr "عنوان مخفية" -#: pretix/control/forms/event.py:1152 pretix/control/forms/organizer.py:704 +#: pretix/control/forms/event.py:1152 pretix/control/forms/organizer.py:714 #, fuzzy #| msgid "All emails will be sent to this address as a Bcc copy" msgid "All emails will be sent to this address as a Bcc copy." msgstr "سيتم إرسال جميع رسائل البريد الإلكتروني إلى هذا العنوان كنسخة مخفية" -#: pretix/control/forms/event.py:1160 pretix/control/forms/organizer.py:713 +#: pretix/control/forms/event.py:1160 pretix/control/forms/organizer.py:723 msgid "Signature" msgstr "التوقيع" @@ -15139,7 +15327,7 @@ msgstr "التوقيع" msgid "This will be attached to every email. Available placeholders: {event}" msgstr "وسيلحق هذا على كل البريد الإلكتروني. النائبة المتاحة: {event}" -#: pretix/control/forms/event.py:1168 pretix/control/forms/organizer.py:721 +#: pretix/control/forms/event.py:1168 pretix/control/forms/organizer.py:731 msgid "e.g. your contact details" msgstr "مثلا تفاصيل الاتصال الخاصة بك" @@ -15193,8 +15381,8 @@ msgstr "إرسالها النص إلى الحضور" #: pretix/control/forms/event.py:1264 pretix/control/forms/event.py:1338 #: pretix/control/forms/event.py:1348 pretix/control/forms/event.py:1358 #: pretix/control/forms/event.py:1363 pretix/control/forms/event.py:1375 -#: pretix/control/forms/organizer.py:732 pretix/control/forms/organizer.py:742 -#: pretix/control/forms/organizer.py:752 pretix/control/forms/organizer.py:762 +#: pretix/control/forms/organizer.py:742 pretix/control/forms/organizer.py:752 +#: pretix/control/forms/organizer.py:762 pretix/control/forms/organizer.py:772 #: pretix/control/templates/pretixcontrol/event/mail.html:88 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:122 msgid "Text" @@ -15655,8 +15843,8 @@ msgid "Follow-up due" msgstr "" #: pretix/control/forms/filter.py:483 pretix/control/forms/filter.py:1267 -#: pretix/control/forms/filter.py:2180 pretix/control/forms/filter.py:2435 -#: pretix/control/forms/filter.py:2739 pretix/control/forms/filter.py:2758 +#: pretix/control/forms/filter.py:2186 pretix/control/forms/filter.py:2441 +#: pretix/control/forms/filter.py:2745 pretix/control/forms/filter.py:2764 #: pretix/control/forms/vouchers.py:151 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:121 #: pretix/plugins/sendmail/models.py:244 @@ -15664,9 +15852,9 @@ msgid "All products" msgstr "جميع المنتجات" #: pretix/control/forms/filter.py:487 pretix/control/forms/filter.py:1271 -#: pretix/control/forms/filter.py:2439 pretix/control/forms/filter.py:2743 -#: pretix/control/forms/vouchers.py:139 pretix/control/views/typeahead.py:663 -#: pretix/control/views/typeahead.py:780 +#: pretix/control/forms/filter.py:2445 pretix/control/forms/filter.py:2749 +#: pretix/control/forms/vouchers.py:139 pretix/control/views/typeahead.py:682 +#: pretix/control/views/typeahead.py:799 #, python-brace-format msgid "{product} – Any variation" msgstr "{product} - أي تباين" @@ -15717,12 +15905,12 @@ msgstr "" #: pretix/control/forms/filter.py:927 pretix/control/forms/filter.py:932 #: pretix/control/forms/filter.py:1045 pretix/control/forms/filter.py:1050 -#: pretix/control/forms/filter.py:1969 pretix/control/forms/filter.py:1974 +#: pretix/control/forms/filter.py:1975 pretix/control/forms/filter.py:1980 msgid "All organizers" msgstr "جميع المنظمين" -#: pretix/control/forms/filter.py:1037 pretix/control/forms/filter.py:1953 -#: pretix/control/forms/filter.py:2963 +#: pretix/control/forms/filter.py:1037 pretix/control/forms/filter.py:1959 +#: pretix/control/forms/filter.py:2969 msgid "All events" msgstr "كل الأحداث" @@ -15771,310 +15959,311 @@ msgctxt "subevent" msgid "Date doesn't start in selected date range." msgstr "" -#: pretix/control/forms/filter.py:1361 pretix/control/forms/filter.py:1955 +#: pretix/control/forms/filter.py:1367 pretix/control/forms/filter.py:1961 msgid "Shop live and presale running" msgstr "تسوق الحية و[خبر] تشغيل" -#: pretix/control/forms/filter.py:1362 pretix/control/forms/filter.py:2293 +#: pretix/control/forms/filter.py:1368 pretix/control/forms/filter.py:2299 msgid "Inactive" msgstr "غير نشط" -#: pretix/control/forms/filter.py:1369 pretix/control/forms/filter.py:1372 -#: pretix/control/forms/filter.py:1547 pretix/control/forms/filter.py:1550 -#: pretix/control/forms/filter.py:1984 pretix/control/forms/filter.py:1987 -#: pretix/control/forms/filter.py:2617 +#: pretix/control/forms/filter.py:1375 pretix/control/forms/filter.py:1378 +#: pretix/control/forms/filter.py:1553 pretix/control/forms/filter.py:1556 +#: pretix/control/forms/filter.py:1990 pretix/control/forms/filter.py:1993 +#: pretix/control/forms/filter.py:2623 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:84 msgid "Date from" msgstr "التاريخ من" -#: pretix/control/forms/filter.py:1376 pretix/control/forms/filter.py:1379 -#: pretix/control/forms/filter.py:1554 pretix/control/forms/filter.py:1557 -#: pretix/control/forms/filter.py:1991 pretix/control/forms/filter.py:1994 -#: pretix/control/forms/filter.py:2622 +#: pretix/control/forms/filter.py:1382 pretix/control/forms/filter.py:1385 +#: pretix/control/forms/filter.py:1560 pretix/control/forms/filter.py:1563 +#: pretix/control/forms/filter.py:1997 pretix/control/forms/filter.py:2000 +#: pretix/control/forms/filter.py:2628 msgid "Date until" msgstr "التاريخ وحتى" -#: pretix/control/forms/filter.py:1383 pretix/control/forms/filter.py:1561 +#: pretix/control/forms/filter.py:1389 pretix/control/forms/filter.py:1567 #, fuzzy #| msgid "Date from" msgid "Start time from" msgstr "التاريخ من" -#: pretix/control/forms/filter.py:1388 pretix/control/forms/filter.py:1566 +#: pretix/control/forms/filter.py:1394 pretix/control/forms/filter.py:1572 #, fuzzy #| msgid "Date until" msgid "Start time until" msgstr "التاريخ وحتى" -#: pretix/control/forms/filter.py:1393 pretix/control/forms/filter.py:1571 +#: pretix/control/forms/filter.py:1399 pretix/control/forms/filter.py:1577 #: pretix/control/forms/rrule.py:112 pretix/control/forms/rrule.py:151 msgid "Weekday" msgstr "يوم من أيام الأسبوع" -#: pretix/control/forms/filter.py:1721 pretix/control/forms/filter.py:1723 -#: pretix/control/forms/filter.py:1772 pretix/control/forms/filter.py:1774 -#: pretix/control/forms/filter.py:1844 pretix/control/forms/filter.py:1846 -#: pretix/control/forms/filter.py:1898 pretix/control/forms/filter.py:1900 -#: pretix/control/forms/filter.py:2307 pretix/control/forms/filter.py:2309 -#: pretix/control/forms/filter.py:2875 pretix/control/forms/filter.py:2877 +#: pretix/control/forms/filter.py:1727 pretix/control/forms/filter.py:1729 +#: pretix/control/forms/filter.py:1778 pretix/control/forms/filter.py:1780 +#: pretix/control/forms/filter.py:1850 pretix/control/forms/filter.py:1852 +#: pretix/control/forms/filter.py:1904 pretix/control/forms/filter.py:1906 +#: pretix/control/forms/filter.py:2313 pretix/control/forms/filter.py:2315 +#: pretix/control/forms/filter.py:2881 pretix/control/forms/filter.py:2883 msgid "Search query" msgstr "البحث في الاستفسارات" -#: pretix/control/forms/filter.py:1783 pretix/control/forms/filter.py:1855 +#: pretix/control/forms/filter.py:1789 pretix/control/forms/filter.py:1861 #: pretix/control/templates/pretixcontrol/organizers/customer.html:47 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:47 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:54 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:126 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:133 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:37 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:49 #, fuzzy #| msgid "Inactive" msgid "active" msgstr "غير نشط" -#: pretix/control/forms/filter.py:1785 +#: pretix/control/forms/filter.py:1791 #: pretix/control/templates/pretixcontrol/organizers/customer.html:45 #, fuzzy #| msgid "Deactivate" msgid "not yet activated" msgstr "إلغاء تنشيط" -#: pretix/control/forms/filter.py:1789 +#: pretix/control/forms/filter.py:1795 #: pretix/control/templates/pretixcontrol/organizers/customer.html:113 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:6 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:12 -#: pretix/presale/views/customer.py:368 +#: pretix/presale/views/customer.py:370 msgid "Memberships" msgstr "العضويات" -#: pretix/control/forms/filter.py:1793 +#: pretix/control/forms/filter.py:1799 #, fuzzy #| msgid "Team memberships" msgid "Has no memberships" msgstr "عضوية فريق" -#: pretix/control/forms/filter.py:1794 +#: pretix/control/forms/filter.py:1800 #, fuzzy #| msgid "Team memberships" msgid "Has any membership" msgstr "عضوية فريق" -#: pretix/control/forms/filter.py:1795 +#: pretix/control/forms/filter.py:1801 #, fuzzy #| msgid "Require a valid membership" msgid "Has valid membership" msgstr "يتتطلب عضوية سارية المفعول" -#: pretix/control/forms/filter.py:1954 +#: pretix/control/forms/filter.py:1960 msgid "Shop live" msgstr "متجر على الهواء مباشرة" -#: pretix/control/forms/filter.py:1956 +#: pretix/control/forms/filter.py:1962 msgid "Shop not live" msgstr "تسوق لا يعيش" -#: pretix/control/forms/filter.py:1959 +#: pretix/control/forms/filter.py:1965 msgid "Single event running or in the future" msgstr "حدث واحد قيد التشغيل أو في المستقبل" -#: pretix/control/forms/filter.py:1960 +#: pretix/control/forms/filter.py:1966 msgid "Single event in the past" msgstr "حدث واحد في الماضي" -#: pretix/control/forms/filter.py:2159 pretix/control/forms/filter.py:2161 +#: pretix/control/forms/filter.py:2165 pretix/control/forms/filter.py:2167 msgid "Search attendee…" msgstr "بحث الحضور ..." -#: pretix/control/forms/filter.py:2166 +#: pretix/control/forms/filter.py:2172 #: pretix/plugins/checkinlists/exporters.py:107 msgid "Check-in status" msgstr "تحقق ذات المركز" -#: pretix/control/forms/filter.py:2168 +#: pretix/control/forms/filter.py:2174 #: pretix/plugins/checkinlists/exporters.py:109 msgid "All attendees" msgstr "جميع الحاضرين" -#: pretix/control/forms/filter.py:2169 +#: pretix/control/forms/filter.py:2175 #: pretix/control/templates/pretixcontrol/checkin/index.html:183 #: pretix/control/templates/pretixcontrol/checkin/lists.html:104 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:138 #: pretix/plugins/checkinlists/exporters.py:110 #: pretix/plugins/checkinlists/exporters.py:500 msgid "Checked in" msgstr "إيداعه" -#: pretix/control/forms/filter.py:2170 +#: pretix/control/forms/filter.py:2176 #: pretix/plugins/checkinlists/exporters.py:111 msgctxt "checkin state" msgid "Present" msgstr "حاضر" -#: pretix/control/forms/filter.py:2171 +#: pretix/control/forms/filter.py:2177 #: pretix/plugins/checkinlists/exporters.py:112 msgctxt "checkin state" msgid "Checked in but left" msgstr "سجل لكنه غادر" -#: pretix/control/forms/filter.py:2172 +#: pretix/control/forms/filter.py:2178 #: pretix/control/templates/pretixcontrol/checkin/index.html:178 #: pretix/plugins/checkinlists/exporters.py:113 msgid "Not checked in" msgstr "غير محددة في" -#: pretix/control/forms/filter.py:2191 +#: pretix/control/forms/filter.py:2197 #, fuzzy #| msgid "Date from" msgctxt "subevent" msgid "Date start from" msgstr "التاريخ من" -#: pretix/control/forms/filter.py:2197 +#: pretix/control/forms/filter.py:2203 #, fuzzy #| msgid "Date until" msgctxt "subevent" msgid "Date start until" msgstr "التاريخ وحتى" -#: pretix/control/forms/filter.py:2298 pretix/control/forms/filter.py:2301 +#: pretix/control/forms/filter.py:2304 pretix/control/forms/filter.py:2307 #: pretix/control/templates/pretixcontrol/users/index.html:52 msgid "Administrator" msgstr "مدير" -#: pretix/control/forms/filter.py:2302 +#: pretix/control/forms/filter.py:2308 msgid "No administrator" msgstr "لا المسؤول" -#: pretix/control/forms/filter.py:2372 +#: pretix/control/forms/filter.py:2378 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:51 msgid "Valid" msgstr "ساري المفعول" -#: pretix/control/forms/filter.py:2373 +#: pretix/control/forms/filter.py:2379 msgid "Unredeemed" msgstr "غير معوض" -#: pretix/control/forms/filter.py:2374 +#: pretix/control/forms/filter.py:2380 msgid "Redeemed at least once" msgstr "افتدى على الأقل مرة واحدة" -#: pretix/control/forms/filter.py:2375 +#: pretix/control/forms/filter.py:2381 msgid "Fully redeemed" msgstr "افتدى بالكامل" -#: pretix/control/forms/filter.py:2377 +#: pretix/control/forms/filter.py:2383 msgid "Redeemed and checked in with ticket" msgstr "مطفأة وإيداعه مع تذكرة" -#: pretix/control/forms/filter.py:2382 +#: pretix/control/forms/filter.py:2388 msgid "Quota handling" msgstr "التعامل مع الحصص" -#: pretix/control/forms/filter.py:2386 +#: pretix/control/forms/filter.py:2392 msgid "Allow to ignore quota" msgstr "السماح لتجاهل الحصص" -#: pretix/control/forms/filter.py:2391 pretix/control/forms/filter.py:2393 +#: pretix/control/forms/filter.py:2397 pretix/control/forms/filter.py:2399 msgid "Filter by tag" msgstr "تصفية حسب العلامة" -#: pretix/control/forms/filter.py:2398 pretix/control/forms/filter.py:2400 +#: pretix/control/forms/filter.py:2404 pretix/control/forms/filter.py:2406 msgid "Search voucher" msgstr "بحث قسيمة" -#: pretix/control/forms/filter.py:2445 pretix/control/forms/vouchers.py:130 -#: pretix/control/views/typeahead.py:788 pretix/control/views/typeahead.py:792 +#: pretix/control/forms/filter.py:2451 pretix/control/forms/vouchers.py:130 +#: pretix/control/views/typeahead.py:807 pretix/control/views/typeahead.py:811 #: pretix/control/views/vouchers.py:133 #, python-brace-format msgid "Any product in quota \"{quota}\"" msgstr "أي منتج في الحصص \"{quota}\"" -#: pretix/control/forms/filter.py:2567 +#: pretix/control/forms/filter.py:2573 msgid "Refund status" msgstr "حالة إعادة الأموال" -#: pretix/control/forms/filter.py:2569 +#: pretix/control/forms/filter.py:2575 msgid "All open refunds" msgstr "كل مبلغ معاد المفتوحة" -#: pretix/control/forms/filter.py:2570 +#: pretix/control/forms/filter.py:2576 msgid "All refunds" msgstr "كل مبلغ معاد" -#: pretix/control/forms/filter.py:2608 pretix/plugins/reports/exporters.py:704 +#: pretix/control/forms/filter.py:2614 pretix/plugins/reports/exporters.py:704 msgid "Date filter" msgstr "تاريخ فلتر" -#: pretix/control/forms/filter.py:2610 pretix/plugins/reports/exporters.py:706 +#: pretix/control/forms/filter.py:2616 pretix/plugins/reports/exporters.py:706 msgid "Filter by…" msgstr "مصنف بواسطة…" -#: pretix/control/forms/filter.py:2612 pretix/plugins/reports/exporters.py:708 +#: pretix/control/forms/filter.py:2618 pretix/plugins/reports/exporters.py:708 msgid "Date of last successful payment" msgstr "تاريخ الدفع الناجح الماضي" -#: pretix/control/forms/filter.py:2652 +#: pretix/control/forms/filter.py:2658 #, fuzzy #| msgid "All check-in lists" msgid "All check-ins" msgstr "جميع قوائم التسجيل" -#: pretix/control/forms/filter.py:2653 +#: pretix/control/forms/filter.py:2659 #, fuzzy #| msgid "Successful payments" msgid "Successful check-ins" msgstr "المدفوعات ناجحة" -#: pretix/control/forms/filter.py:2654 +#: pretix/control/forms/filter.py:2660 #, fuzzy #| msgid "Only successful payments" msgid "Unsuccessful check-ins" msgstr "المدفوعات الناجحة فقط" -#: pretix/control/forms/filter.py:2659 +#: pretix/control/forms/filter.py:2665 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:64 #: pretix/plugins/checkinlists/exporters.py:758 msgid "Scan type" msgstr "نوع المسح الضوئي" -#: pretix/control/forms/filter.py:2661 +#: pretix/control/forms/filter.py:2667 #, fuzzy #| msgid "All actions" msgid "All directions" msgstr "جميع الإجراءات" -#: pretix/control/forms/filter.py:2670 pretix/control/forms/filter.py:2710 +#: pretix/control/forms/filter.py:2676 pretix/control/forms/filter.py:2716 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:67 #: pretix/plugins/checkinlists/exporters.py:764 msgid "Device" msgstr "جهاز" -#: pretix/control/forms/filter.py:2671 pretix/control/forms/filter.py:2706 -#: pretix/control/forms/filter.py:2897 +#: pretix/control/forms/filter.py:2677 pretix/control/forms/filter.py:2712 +#: pretix/control/forms/filter.py:2903 #, fuzzy #| msgid "All invoices" msgid "All devices" msgstr "جميع الفواتير" -#: pretix/control/forms/filter.py:2685 +#: pretix/control/forms/filter.py:2691 #, fuzzy #| msgid "Start date" msgctxt "filter" msgid "Start date" msgstr "تاريخ البداية" -#: pretix/control/forms/filter.py:2691 +#: pretix/control/forms/filter.py:2697 #, fuzzy #| msgid "End date" msgctxt "filter" msgid "End date" msgstr "تاريخ الإنتهاء" -#: pretix/control/forms/filter.py:2733 +#: pretix/control/forms/filter.py:2739 #: pretix/plugins/checkinlists/exporters.py:882 msgid "All check-in lists" msgstr "جميع قوائم التسجيل" -#: pretix/control/forms/filter.py:2737 +#: pretix/control/forms/filter.py:2743 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:64 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:11 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:26 @@ -16089,30 +16278,30 @@ msgstr "جميع قوائم التسجيل" msgid "Check-in list" msgstr "تحقق في قائمة" -#: pretix/control/forms/filter.py:2888 +#: pretix/control/forms/filter.py:2894 #: pretix/control/templates/pretixcontrol/organizers/devices.html:86 msgid "Software" msgstr "البرمجيات" -#: pretix/control/forms/filter.py:2895 +#: pretix/control/forms/filter.py:2901 #, fuzzy #| msgid "Devices" msgid "Device status" msgstr "الأجهزة" -#: pretix/control/forms/filter.py:2898 +#: pretix/control/forms/filter.py:2904 #, fuzzy #| msgid "All invoices" msgid "Active devices" msgstr "جميع الفواتير" -#: pretix/control/forms/filter.py:2899 +#: pretix/control/forms/filter.py:2905 #, fuzzy #| msgid "Revoke device access:" msgid "Revoked devices" msgstr "وصول الجهاز إلغاء:" -#: pretix/control/forms/filter.py:2954 pretix/control/forms/filter.py:2956 +#: pretix/control/forms/filter.py:2960 pretix/control/forms/filter.py:2962 #, fuzzy #| msgid "Require email addresses per ticket" msgid "Search email address or subject" @@ -17264,11 +17453,11 @@ msgstr "تحتاج إلى تحديد تاريخ." msgid "You may set only one organizer domain." msgstr "" -#: pretix/control/forms/organizer.py:322 +#: pretix/control/forms/organizer.py:331 msgid "Provided by a plugin" msgstr "" -#: pretix/control/forms/organizer.py:438 +#: pretix/control/forms/organizer.py:447 msgid "" "The changes could not be saved because there would be no remaining team with " "the permission to change teams and permissions." @@ -17276,117 +17465,117 @@ msgstr "" "لا يمكن حفظ التغييرات لأنه لن يكون هناك أي فريق المتبقية مع الإذن لفرق " "التغيير والأذونات." -#: pretix/control/forms/organizer.py:487 pretix/control/forms/organizer.py:525 +#: pretix/control/forms/organizer.py:496 pretix/control/forms/organizer.py:534 msgid "" "Your device will not have access to anything, please select some events." msgstr "سوف جهازك لا يحصلون على أي شيء، يرجى اختيار بعض الأحداث." -#: pretix/control/forms/organizer.py:677 pretix/plugins/stripe/payment.py:330 +#: pretix/control/forms/organizer.py:687 pretix/plugins/stripe/payment.py:330 #, fuzzy #| msgid "Features" msgid "experimental" msgstr "المميزات" -#: pretix/control/forms/organizer.py:683 +#: pretix/control/forms/organizer.py:693 msgid "" "This feature is currently in an experimental stage. It only supports very " "limited use cases and might change at any point." msgstr "" -#: pretix/control/forms/organizer.py:706 +#: pretix/control/forms/organizer.py:716 msgid "Sensitive emails like password resets will not be sent in Bcc." msgstr "" -#: pretix/control/forms/organizer.py:716 +#: pretix/control/forms/organizer.py:726 msgid "This will be attached to every email." msgstr "سيرفق هذا مع كل بريد إلكتروني." -#: pretix/control/forms/organizer.py:790 pretix/control/logdisplay.py:671 +#: pretix/control/forms/organizer.py:800 pretix/control/logdisplay.py:671 #: pretix/control/views/user.py:850 pretix/presale/views/customer.py:289 -#: pretix/presale/views/customer.py:545 +#: pretix/presale/views/customer.py:547 msgid "Your password has been changed." msgstr "تم تغيير كلمة السر الخاصة بك." -#: pretix/control/forms/organizer.py:823 +#: pretix/control/forms/organizer.py:833 msgctxt "webhooks" msgid "Event types" msgstr "أنواع الأحداث" -#: pretix/control/forms/organizer.py:857 +#: pretix/control/forms/organizer.py:867 msgid "Gift card value" msgstr "قيمة بطاقة هدية" -#: pretix/control/forms/organizer.py:961 +#: pretix/control/forms/organizer.py:971 #, fuzzy #| msgid "An account with this email address is already registered." msgid "An medium with this type and identifier is already registered." msgstr "هناك حساب مرتبط بهذا البريد الإلكتروني مسبقا." -#: pretix/control/forms/organizer.py:1059 +#: pretix/control/forms/organizer.py:1069 #, fuzzy #| msgid "An account with this email address is already registered." msgid "An account with this customer ID is already registered." msgstr "هناك حساب مرتبط بهذا البريد الإلكتروني مسبقا." -#: pretix/control/forms/organizer.py:1076 +#: pretix/control/forms/organizer.py:1086 #: pretix/control/templates/pretixcontrol/organizers/customer.html:62 #: pretix/presale/forms/customer.py:169 pretix/presale/forms/customer.py:507 msgid "Phone" msgstr "" -#: pretix/control/forms/organizer.py:1190 +#: pretix/control/forms/organizer.py:1200 #, fuzzy #| msgid "Target URL" msgctxt "sso_oidc" msgid "Base URL" msgstr "الرابط المستهدف" -#: pretix/control/forms/organizer.py:1194 +#: pretix/control/forms/organizer.py:1204 #, fuzzy #| msgid "Client ID" msgctxt "sso_oidc" msgid "Client ID" msgstr "هوية العميل" -#: pretix/control/forms/organizer.py:1198 +#: pretix/control/forms/organizer.py:1208 #, fuzzy #| msgid "Client secret" msgctxt "sso_oidc" msgid "Client secret" msgstr "سر العميل" -#: pretix/control/forms/organizer.py:1202 +#: pretix/control/forms/organizer.py:1212 msgctxt "sso_oidc" msgid "Scope" msgstr "" -#: pretix/control/forms/organizer.py:1203 +#: pretix/control/forms/organizer.py:1213 msgctxt "sso_oidc" msgid "Multiple scopes separated with spaces." msgstr "" -#: pretix/control/forms/organizer.py:1207 +#: pretix/control/forms/organizer.py:1217 #, fuzzy #| msgid "User profile only" msgctxt "sso_oidc" msgid "User ID field" msgstr "ملف تعريف المستخدم فقط" -#: pretix/control/forms/organizer.py:1208 +#: pretix/control/forms/organizer.py:1218 msgctxt "sso_oidc" msgid "" "We will assume that the contents of the user ID fields are unique and can " "never change for a user." msgstr "" -#: pretix/control/forms/organizer.py:1214 +#: pretix/control/forms/organizer.py:1224 #, fuzzy #| msgid "All invoices" msgctxt "sso_oidc" msgid "Email field" msgstr "جميع الفواتير" -#: pretix/control/forms/organizer.py:1215 +#: pretix/control/forms/organizer.py:1225 msgctxt "sso_oidc" msgid "" "We will assume that all email addresses received from the SSO provider are " @@ -17394,19 +17583,19 @@ msgid "" "security issues might arise." msgstr "" -#: pretix/control/forms/organizer.py:1222 +#: pretix/control/forms/organizer.py:1232 #, fuzzy #| msgid "Phone number" msgctxt "sso_oidc" msgid "Phone field" msgstr "رقم الجوال" -#: pretix/control/forms/organizer.py:1226 +#: pretix/control/forms/organizer.py:1236 msgctxt "sso_oidc" msgid "Query parameters" msgstr "" -#: pretix/control/forms/organizer.py:1227 +#: pretix/control/forms/organizer.py:1237 #, python-brace-format msgctxt "sso_oidc" msgid "" @@ -17414,25 +17603,25 @@ msgid "" "endpoint. Enter as: {example}" msgstr "" -#: pretix/control/forms/organizer.py:1288 +#: pretix/control/forms/organizer.py:1298 #, fuzzy #| msgid "A new client secret has been generated and is now effective." msgid "Invalidate old client secret and generate a new one" msgstr "تم إنشاء سر عميل جديد، وهو الآن فعال." -#: pretix/control/forms/organizer.py:1321 +#: pretix/control/forms/organizer.py:1331 #, fuzzy #| msgid "Organizer name" msgid "Organizer short name" msgstr "اسم المنظم" -#: pretix/control/forms/organizer.py:1325 +#: pretix/control/forms/organizer.py:1335 #, fuzzy #| msgid "Disable selected" msgid "Allow access to reusable media" msgstr "تعطيل المختارة" -#: pretix/control/forms/organizer.py:1326 +#: pretix/control/forms/organizer.py:1336 msgid "" "This is required if you want the other organizer to participate in a shared " "system with e.g. NFC payment chips. You should only use this option for " @@ -17441,25 +17630,25 @@ msgid "" "to interact with the media type." msgstr "" -#: pretix/control/forms/organizer.py:1342 +#: pretix/control/forms/organizer.py:1352 #, fuzzy #| msgid "The selected date does not exist in this event series." msgid "The selected organizer does not exist or cannot be invited." msgstr "التاريخ المحدد غير موجود في سلسلة الفعاليات هذه." -#: pretix/control/forms/organizer.py:1344 +#: pretix/control/forms/organizer.py:1354 #, fuzzy #| msgid "The selected organizer was not found." msgid "The selected organizer has already been invited." msgstr "لم يتم العثور على المنظم المحدد." -#: pretix/control/forms/organizer.py:1379 +#: pretix/control/forms/organizer.py:1389 #, fuzzy #| msgid "A voucher with this code already exists." msgid "A sales channel with the same identifier already exists." msgstr "يوجد كود الخصم مسبقا يحمل هذا الرمز." -#: pretix/control/forms/organizer.py:1391 +#: pretix/control/forms/organizer.py:1401 msgid "Events with active plugin" msgstr "" @@ -18006,7 +18195,7 @@ msgid "The check-in of position #{posid} on list \"{list}\" has been reverted." msgstr "في الاختيار من موقف # {posid} على قائمة \"{list}\" وقد عادت." #: pretix/control/logdisplay.py:359 pretix/control/logdisplay.py:361 -#: pretix/control/logdisplay.py:995 pretix/control/logdisplay.py:997 +#: pretix/control/logdisplay.py:998 pretix/control/logdisplay.py:1000 msgid "(unknown)" msgstr "(غير معروف)" @@ -18061,7 +18250,7 @@ msgstr "أكد المستخدم الرسالة التالية: \"{}\"" msgid "The order has been canceled (comment: \"{comment}\")." msgstr "تم رفض الطلب." -#: pretix/control/logdisplay.py:422 pretix/control/views/orders.py:1559 +#: pretix/control/logdisplay.py:422 pretix/control/views/orders.py:1573 #: pretix/presale/views/order.py:1138 msgid "The order has been canceled." msgstr "تم إلغاء هذا الأمر." @@ -18102,11 +18291,11 @@ msgstr "" msgid "Internal error while transferring data to {provider_display_name}." msgstr "" -#: pretix/control/logdisplay.py:489 pretix/control/logdisplay.py:842 +#: pretix/control/logdisplay.py:489 pretix/control/logdisplay.py:845 msgid "The settings of a payment provider have been changed." msgstr "تم تغيير الإعدادات من مقدم الدفع." -#: pretix/control/logdisplay.py:492 pretix/control/logdisplay.py:841 +#: pretix/control/logdisplay.py:492 pretix/control/logdisplay.py:844 msgid "The settings of a ticket output provider have been changed." msgstr "تم تغيير إعدادات مزود الناتج التذاكر." @@ -18153,11 +18342,11 @@ msgstr "تم وضع علامة على الترتيب كما المدفوعة." msgid "The order has been set to require payment before use." msgstr "تم إرسال كود الخصم إلى {recipient}." -#: pretix/control/logdisplay.py:511 pretix/control/views/orders.py:1564 +#: pretix/control/logdisplay.py:511 pretix/control/views/orders.py:1578 msgid "The order has been marked as expired." msgstr "تم وضع علامة على النظام ومنتهية الصلاحية." -#: pretix/control/logdisplay.py:512 pretix/control/views/orders.py:1466 +#: pretix/control/logdisplay.py:512 pretix/control/views/orders.py:1480 msgid "The order has been marked as paid." msgstr "تم وضع علامة على الترتيب كما المدفوعة." @@ -18169,7 +18358,7 @@ msgstr "تم حذف طلب الإلغاء." msgid "The order has been refunded." msgstr "وقد تم ترتيب ردها." -#: pretix/control/logdisplay.py:515 pretix/control/views/orders.py:1904 +#: pretix/control/logdisplay.py:515 pretix/control/views/orders.py:1918 msgid "The order has been reactivated." msgstr "تم إعادة تنشيط الطلب." @@ -18181,7 +18370,7 @@ msgstr "تم إنشاء هذا الأمر." msgid "The order requires approval before it can continue to be processed." msgstr "الأمر يتطلب موافقة قبل أن تتمكن من الاستمرار في معالجتها." -#: pretix/control/logdisplay.py:519 pretix/control/views/orders.py:786 +#: pretix/control/logdisplay.py:519 pretix/control/views/orders.py:800 msgid "The order has been approved." msgstr "تمت الموافقة على النظام." @@ -18224,7 +18413,7 @@ msgstr "تم تغيير حساب العميل." msgid "The order locale has been changed." msgstr "تم تغيير لغة النظام." -#: pretix/control/logdisplay.py:531 pretix/control/views/orders.py:1603 +#: pretix/control/logdisplay.py:531 pretix/control/views/orders.py:1617 #: pretix/presale/views/order.py:797 pretix/presale/views/order.py:877 msgid "The invoice has been generated." msgstr "تم إنشاء الفاتورة." @@ -18235,11 +18424,11 @@ msgstr "تم إنشاء الفاتورة." msgid "The invoice could not be generated." msgstr "تم إنشاء الفاتورة." -#: pretix/control/logdisplay.py:533 pretix/control/views/orders.py:1684 +#: pretix/control/logdisplay.py:533 pretix/control/views/orders.py:1698 msgid "The invoice has been regenerated." msgstr "تم إعادة إنشاء الفاتورة." -#: pretix/control/logdisplay.py:534 pretix/control/views/orders.py:1741 +#: pretix/control/logdisplay.py:534 pretix/control/views/orders.py:1755 #: pretix/presale/views/order.py:897 msgid "The invoice has been reissued." msgstr "تم إعادة إصدار الفاتورة." @@ -18304,7 +18493,7 @@ msgid "An unidentified type email has been sent." msgstr "تم ارسال نوع البريد الإلكتروني مجهول." #: pretix/control/logdisplay.py:549 pretix/control/logdisplay.py:742 -#: pretix/control/logdisplay.py:748 pretix/control/logdisplay.py:776 +#: pretix/control/logdisplay.py:751 pretix/control/logdisplay.py:779 msgid "Sending of an email has failed." msgstr "ارسال بريد الكتروني قد فشلت." @@ -18526,7 +18715,7 @@ msgstr "تم تمكين حسابك." msgid "Your account has been disabled." msgstr "تم تعطيل حسابك." -#: pretix/control/logdisplay.py:680 pretix/presale/views/customer.py:642 +#: pretix/control/logdisplay.py:680 pretix/presale/views/customer.py:644 #, fuzzy, python-brace-format #| msgid "" #| "The email address has been changed from \"{old_email}\" to \"{new_email}" @@ -18563,37 +18752,37 @@ msgstr "تم تغيير المنظم." msgid "The organizer settings have been changed." msgstr "تم تغيير إعدادات المنظم." -#: pretix/control/logdisplay.py:704 pretix/control/logdisplay.py:849 +#: pretix/control/logdisplay.py:704 pretix/control/logdisplay.py:852 #, fuzzy #| msgid "The order details have been changed." msgid "The footer links have been changed." msgstr "تم تغيير تفاصيل النظام." -#: pretix/control/logdisplay.py:705 pretix/control/logdisplay.py:754 +#: pretix/control/logdisplay.py:705 pretix/control/logdisplay.py:757 #, fuzzy #| msgid "The quota has been added." msgid "A scheduled export has been added." msgstr "تمت إضافة الحصص." -#: pretix/control/logdisplay.py:706 pretix/control/logdisplay.py:755 +#: pretix/control/logdisplay.py:706 pretix/control/logdisplay.py:758 #, fuzzy #| msgid "The product has been changed." msgid "A scheduled export has been changed." msgstr "تم تغيير المنتج." -#: pretix/control/logdisplay.py:707 pretix/control/logdisplay.py:756 +#: pretix/control/logdisplay.py:707 pretix/control/logdisplay.py:759 #, fuzzy #| msgid "The selected product has been deleted." msgid "A scheduled export has been deleted." msgstr "تم حذف المنتج المحدد." -#: pretix/control/logdisplay.py:708 pretix/control/logdisplay.py:757 +#: pretix/control/logdisplay.py:708 pretix/control/logdisplay.py:760 #, fuzzy #| msgid "The selected product has been deleted." msgid "A scheduled export has been executed." msgstr "تم حذف المنتج المحدد." -#: pretix/control/logdisplay.py:709 pretix/control/logdisplay.py:758 +#: pretix/control/logdisplay.py:709 pretix/control/logdisplay.py:761 #, python-brace-format msgid "A scheduled export has failed: {reason}." msgstr "" @@ -18708,7 +18897,7 @@ msgstr "تم تغيير نوع العضوية." msgid "The membership type has been deleted." msgstr "تم حذف نوع العضوية." -#: pretix/control/logdisplay.py:731 pretix/control/views/organizer.py:3556 +#: pretix/control/logdisplay.py:731 pretix/control/views/organizer.py:3591 #, fuzzy #| msgctxt "subevent" #| msgid "The new date has been created." @@ -18781,560 +18970,579 @@ msgstr "تم تغيير القاعدة الضريبية." #: pretix/control/logdisplay.py:746 #, fuzzy +#| msgid "The new member has been added to the team." +msgid "A new ticket has been added to the medium." +msgstr "تمت إضافة عضو جديد إلى الفريق." + +#: pretix/control/logdisplay.py:747 +#, fuzzy +#| msgid "{user} has been removed from the team." +msgid "A ticket has been removed from the medium." +msgstr "{user} تمت إزالته من الفريق." + +#: pretix/control/logdisplay.py:748 +#, fuzzy #| msgid "The email has been queued to be sent." msgid "The medium has been connected to a new ticket." msgstr "وقد تم في قائمة الانتظار البريد الإلكتروني لإرسالها." -#: pretix/control/logdisplay.py:747 +#: pretix/control/logdisplay.py:749 +#, python-brace-format +msgid "" +"The ticket #{positionid} was exchanged for reusable medium " +"{medium_identifier}." +msgstr "" + +#: pretix/control/logdisplay.py:750 #, fuzzy #| msgid "The email has been queued to be sent." msgid "The medium has been connected to a new gift card." msgstr "وقد تم في قائمة الانتظار البريد الإلكتروني لإرسالها." -#: pretix/control/logdisplay.py:749 +#: pretix/control/logdisplay.py:752 msgid "The event's internal comment has been updated." msgstr "تم تحديث التعليق الداخلي للحدث." -#: pretix/control/logdisplay.py:750 +#: pretix/control/logdisplay.py:753 msgid "The event has been canceled." msgstr "تم إلغاء الفعالية." -#: pretix/control/logdisplay.py:751 +#: pretix/control/logdisplay.py:754 msgid "An event has been deleted." msgstr "تم حذف فعالية." -#: pretix/control/logdisplay.py:752 +#: pretix/control/logdisplay.py:755 msgid "A removal process for personal data has been started." msgstr "" -#: pretix/control/logdisplay.py:753 +#: pretix/control/logdisplay.py:756 msgid "A removal process for personal data has been completed." msgstr "" -#: pretix/control/logdisplay.py:759 +#: pretix/control/logdisplay.py:762 msgid "The user has been created." msgstr "تم إنشاء المستخدم." -#: pretix/control/logdisplay.py:760 +#: pretix/control/logdisplay.py:763 #, python-brace-format msgid "" "A first login using {agent_type} on {os_type} from {country} has been " "detected." msgstr "" -#: pretix/control/logdisplay.py:762 pretix/control/views/user.py:474 +#: pretix/control/logdisplay.py:765 pretix/control/views/user.py:474 #: pretix/control/views/user.py:534 pretix/control/views/user.py:593 msgid "Two-factor authentication has been enabled." msgstr "تم تمكين مصادقة اثنين عامل." -#: pretix/control/logdisplay.py:763 pretix/control/views/user.py:377 +#: pretix/control/logdisplay.py:766 pretix/control/views/user.py:377 #: pretix/control/views/user.py:609 msgid "Two-factor authentication has been disabled." msgstr "تم تعطيل المصادقة اثنين عامل." -#: pretix/control/logdisplay.py:764 pretix/control/views/user.py:626 +#: pretix/control/logdisplay.py:767 pretix/control/views/user.py:626 msgid "Your two-factor emergency codes have been regenerated." msgstr "وقد جددت بك رموز الطوارئ اثنين عامل." -#: pretix/control/logdisplay.py:765 +#: pretix/control/logdisplay.py:768 #, fuzzy #| msgid "Your two-factor emergency codes have been regenerated." msgid "A two-factor emergency code has been generated." msgstr "وقد جددت بك رموز الطوارئ اثنين عامل." -#: pretix/control/logdisplay.py:766 +#: pretix/control/logdisplay.py:769 #, python-brace-format msgid "" "A new two-factor authentication device \"{name}\" has been added to your " "account." msgstr "A اثنين عامل جهاز التوثيق جديد \"{name}\" قد أضيفت إلى حسابك." -#: pretix/control/logdisplay.py:768 +#: pretix/control/logdisplay.py:771 #, python-brace-format msgid "" "The two-factor authentication device \"{name}\" has been removed from your " "account." msgstr "الجهاز اثنين عامل التوثيق \"{name}\" تمت إزالة من حسابك." -#: pretix/control/logdisplay.py:770 +#: pretix/control/logdisplay.py:773 msgid "Notifications have been enabled." msgstr "تم تمكين الإشعارات." -#: pretix/control/logdisplay.py:771 +#: pretix/control/logdisplay.py:774 msgid "Notifications have been disabled." msgstr "تم تعطيل الإشعارات." -#: pretix/control/logdisplay.py:772 +#: pretix/control/logdisplay.py:775 msgid "Your notification settings have been changed." msgstr "تم تغيير إعدادات الإشعار." -#: pretix/control/logdisplay.py:773 +#: pretix/control/logdisplay.py:776 msgid "This user has been anonymized." msgstr "تم طمس هويتها لهذا المستخدم." -#: pretix/control/logdisplay.py:777 +#: pretix/control/logdisplay.py:780 msgid "Password reset mail sent." msgstr "إرسال كلمة المرور الإلكتروني إعادة تعيين." -#: pretix/control/logdisplay.py:778 +#: pretix/control/logdisplay.py:781 msgid "The password has been reset." msgstr "وقد تم إعادة تعيين كلمة المرور." -#: pretix/control/logdisplay.py:779 +#: pretix/control/logdisplay.py:782 msgid "" "A repeated password reset has been denied, as the last request was less than " "24 hours ago." msgstr "" -#: pretix/control/logdisplay.py:781 +#: pretix/control/logdisplay.py:784 #, python-brace-format msgid "The organizer \"{name}\" has been deleted." msgstr "منظم \"{name}\" تم حذفها." -#: pretix/control/logdisplay.py:782 pretix/control/logdisplay.py:1013 +#: pretix/control/logdisplay.py:785 pretix/control/logdisplay.py:1016 msgid "A voucher has been sent to a person on the waiting list." msgstr "تم إرسال قسيمة لشخص على قائمة الانتظار." -#: pretix/control/logdisplay.py:783 +#: pretix/control/logdisplay.py:786 #, fuzzy #| msgid "An entry has been added to the waiting list." msgid "An entry has been transferred to another waiting list." msgstr "تمت إضافة إدخال إلى قائمة الانتظار." -#: pretix/control/logdisplay.py:784 +#: pretix/control/logdisplay.py:787 msgid "The team has been created." msgstr "تم إنشاء فريق." -#: pretix/control/logdisplay.py:785 +#: pretix/control/logdisplay.py:788 msgid "The team settings have been changed." msgstr "تم تغيير إعدادات الفريق." -#: pretix/control/logdisplay.py:786 +#: pretix/control/logdisplay.py:789 msgid "The team has been deleted." msgstr "تم حذف الفريق." -#: pretix/control/logdisplay.py:787 pretix/control/views/organizer.py:2381 +#: pretix/control/logdisplay.py:790 pretix/control/views/organizer.py:2381 msgid "The gate has been created." msgstr "تم إنشاء البوابة." -#: pretix/control/logdisplay.py:788 +#: pretix/control/logdisplay.py:791 msgid "The gate has been changed." msgstr "تم تغيير البوابة." -#: pretix/control/logdisplay.py:789 +#: pretix/control/logdisplay.py:792 msgid "The gate has been deleted." msgstr "تم حذف البوابة." -#: pretix/control/logdisplay.py:790 +#: pretix/control/logdisplay.py:793 msgctxt "subevent" msgid "The event date has been deleted." msgstr "تم حذف تاريخ الحدث." -#: pretix/control/logdisplay.py:791 +#: pretix/control/logdisplay.py:794 msgctxt "subevent" msgid "The event date has been canceled." msgstr "تم تغيير تاريخ الفعالية." -#: pretix/control/logdisplay.py:792 +#: pretix/control/logdisplay.py:795 msgctxt "subevent" msgid "The event date has been changed." msgstr "تم تغيير تاريخ الحدث." -#: pretix/control/logdisplay.py:793 +#: pretix/control/logdisplay.py:796 msgctxt "subevent" msgid "The event date has been created." msgstr "تم إنشاء تاريخ الحدث." -#: pretix/control/logdisplay.py:794 +#: pretix/control/logdisplay.py:797 msgctxt "subevent" msgid "A quota has been added to the event date." msgstr "تمت إضافة الحصص لتاريخ الحدث." -#: pretix/control/logdisplay.py:795 +#: pretix/control/logdisplay.py:798 msgctxt "subevent" msgid "A quota has been changed on the event date." msgstr "تم تغيير الحصص في تاريخ الحدث." -#: pretix/control/logdisplay.py:796 +#: pretix/control/logdisplay.py:799 msgctxt "subevent" msgid "A quota has been removed from the event date." msgstr "تمت إزالة حصة من تاريخ الحدث." -#: pretix/control/logdisplay.py:797 +#: pretix/control/logdisplay.py:800 msgid "The device has been created." msgstr "تم إنشاء الجهاز." -#: pretix/control/logdisplay.py:798 +#: pretix/control/logdisplay.py:801 msgid "The device has been changed." msgstr "تم تغيير الجهاز." -#: pretix/control/logdisplay.py:799 +#: pretix/control/logdisplay.py:802 msgid "Access of the device has been revoked." msgstr "تم إبطال الوصول للجهاز." -#: pretix/control/logdisplay.py:800 +#: pretix/control/logdisplay.py:803 msgid "The device has been initialized." msgstr "تم تهيئة الجهاز." -#: pretix/control/logdisplay.py:801 +#: pretix/control/logdisplay.py:804 msgid "The access token of the device has been regenerated." msgstr "تم إعادة إنشاء الوصول رمزية للجهاز." -#: pretix/control/logdisplay.py:802 +#: pretix/control/logdisplay.py:805 msgid "The device has notified the server of an hardware or software update." msgstr "وقد أخطرت جهاز الخادم من تحديث الأجهزة أو البرامج." -#: pretix/control/logdisplay.py:803 +#: pretix/control/logdisplay.py:806 msgid "The gift card has been created." msgstr "تم إنشاء بطاقة هدية." -#: pretix/control/logdisplay.py:804 pretix/control/views/organizer.py:1943 +#: pretix/control/logdisplay.py:807 pretix/control/views/organizer.py:1943 msgid "The gift card has been changed." msgstr "تم تغيير بطاقة الهدية." -#: pretix/control/logdisplay.py:805 +#: pretix/control/logdisplay.py:808 msgid "A manual transaction has been performed." msgstr "تم إجراء عملية يدوية." -#: pretix/control/logdisplay.py:806 +#: pretix/control/logdisplay.py:809 #, fuzzy #| msgid "This payment has been canceled." msgid "A payment has been performed." msgstr "تم إلغاء هذا الدفع." -#: pretix/control/logdisplay.py:807 +#: pretix/control/logdisplay.py:810 #, fuzzy #| msgid "The refund has been processed." msgid "A refund has been performed. " msgstr "تم معالجة استرداد." -#: pretix/control/logdisplay.py:808 +#: pretix/control/logdisplay.py:811 #, python-brace-format msgid "The token \"{name}\" has been created." msgstr "ورمزي \"{name}\" تم إنشاؤه." -#: pretix/control/logdisplay.py:809 +#: pretix/control/logdisplay.py:812 #, python-brace-format msgid "The token \"{name}\" has been revoked." msgstr "ورمزي \"{name}\" تم إبطال." -#: pretix/control/logdisplay.py:810 +#: pretix/control/logdisplay.py:813 #, fuzzy #| msgid "The check-in list has been deleted." msgid "The check-in and print log state has been reset." msgstr "تم حذف الاختيار في القائمة." -#: pretix/control/logdisplay.py:817 pretix/control/logdisplay.py:876 +#: pretix/control/logdisplay.py:820 pretix/control/logdisplay.py:879 #, fuzzy #| msgid "A plugin has been enabled." msgid "The plugin has been enabled." msgstr "تم تمكين البرنامج المساعد." -#: pretix/control/logdisplay.py:818 pretix/control/logdisplay.py:877 -#: pretix/control/views/event.py:497 pretix/control/views/organizer.py:757 +#: pretix/control/logdisplay.py:821 pretix/control/logdisplay.py:880 +#: pretix/control/views/event.py:498 pretix/control/views/organizer.py:757 #, fuzzy #| msgid "A plugin has been disabled." msgid "The plugin has been disabled." msgstr "تم تعطيل البرنامج المساعد." -#: pretix/control/logdisplay.py:821 pretix/control/logdisplay.py:880 +#: pretix/control/logdisplay.py:824 pretix/control/logdisplay.py:883 #, fuzzy, python-brace-format #| msgid "Question {val}" msgid "Plugin {val}" msgstr "سؤال{val}" -#: pretix/control/logdisplay.py:836 +#: pretix/control/logdisplay.py:839 #, fuzzy #| msgid "A user has been added to the event team." msgid "A meta property has been added to this event." msgstr "تمت إضافة المستخدم إلى فريق الحدث." -#: pretix/control/logdisplay.py:837 +#: pretix/control/logdisplay.py:840 #, fuzzy #| msgid "A user has been removed from the event team." msgid "A meta property has been removed from this event." msgstr "تمت إزالة مستخدم من فريق الحدث." -#: pretix/control/logdisplay.py:838 +#: pretix/control/logdisplay.py:841 #, fuzzy #| msgctxt "subevent" #| msgid "A quota has been changed on the event date." msgid "A meta property has been changed on this event." msgstr "تم تغيير الحصص في تاريخ الحدث." -#: pretix/control/logdisplay.py:839 +#: pretix/control/logdisplay.py:842 msgid "The event settings have been changed." msgstr "تم تغيير إعدادات الحدث." -#: pretix/control/logdisplay.py:840 +#: pretix/control/logdisplay.py:843 msgid "The ticket download settings have been changed." msgstr "تم تغيير إعدادات تذكرة تنزيل." -#: pretix/control/logdisplay.py:843 +#: pretix/control/logdisplay.py:846 msgid "The shop has been taken live." msgstr "وقد اتخذت المحل الحية." -#: pretix/control/logdisplay.py:844 +#: pretix/control/logdisplay.py:847 msgid "The shop has been taken offline." msgstr "وقد اتخذت المحل حاليا." -#: pretix/control/logdisplay.py:845 +#: pretix/control/logdisplay.py:848 msgid "The shop has been taken into test mode." msgstr "وقد اتخذت المحل في وضع الاختبار." -#: pretix/control/logdisplay.py:846 +#: pretix/control/logdisplay.py:849 msgid "The test mode has been disabled." msgstr "تم تعطيل وضع الاختبار." -#: pretix/control/logdisplay.py:847 +#: pretix/control/logdisplay.py:850 msgid "The event has been created." msgstr "تم إنشاء هذا الحدث." -#: pretix/control/logdisplay.py:848 +#: pretix/control/logdisplay.py:851 msgid "The event details have been changed." msgstr "تم تغيير تفاصيل الفعالية." -#: pretix/control/logdisplay.py:850 +#: pretix/control/logdisplay.py:853 msgid "An answer option has been added to the question." msgstr "تمت إضافة خيار الإجابة على السؤال." -#: pretix/control/logdisplay.py:851 +#: pretix/control/logdisplay.py:854 msgid "An answer option has been removed from the question." msgstr "تمت إزالة خيار الإجابة عن السؤال." -#: pretix/control/logdisplay.py:852 +#: pretix/control/logdisplay.py:855 msgid "An answer option has been changed." msgstr "تم تغيير خيار الإجابة." -#: pretix/control/logdisplay.py:853 +#: pretix/control/logdisplay.py:856 msgid "A user has been added to the event team." msgstr "تمت إضافة المستخدم إلى فريق الحدث." -#: pretix/control/logdisplay.py:854 +#: pretix/control/logdisplay.py:857 msgid "A user has been invited to the event team." msgstr "وقد وجهت الدعوة للمستخدم لفريق الحدث." -#: pretix/control/logdisplay.py:855 +#: pretix/control/logdisplay.py:858 msgid "A user's permissions have been changed." msgstr "تم تغيير الأذونات للمستخدم." -#: pretix/control/logdisplay.py:856 +#: pretix/control/logdisplay.py:859 msgid "A user has been removed from the event team." msgstr "تمت إزالة مستخدم من فريق الحدث." -#: pretix/control/logdisplay.py:863 +#: pretix/control/logdisplay.py:866 msgid "The check-in list has been added." msgstr "تمت إضافة الاختيار في القائمة." -#: pretix/control/logdisplay.py:864 pretix/control/logdisplay.py:865 +#: pretix/control/logdisplay.py:867 pretix/control/logdisplay.py:868 msgid "The check-in list has been deleted." msgstr "تم حذف الاختيار في القائمة." -#: pretix/control/logdisplay.py:866 +#: pretix/control/logdisplay.py:869 msgid "The check-in list has been changed." msgstr "تم تغيير الاختيار في القائمة." -#: pretix/control/logdisplay.py:869 +#: pretix/control/logdisplay.py:872 #, fuzzy, python-brace-format #| msgid "Check-in list" msgid "Check-in list {val}" msgstr "تحقق في قائمة" -#: pretix/control/logdisplay.py:896 +#: pretix/control/logdisplay.py:899 msgid "The product has been created." msgstr "تم إنشاء المنتج." -#: pretix/control/logdisplay.py:897 +#: pretix/control/logdisplay.py:900 msgid "The product has been changed." msgstr "تم تغيير المنتج." -#: pretix/control/logdisplay.py:898 +#: pretix/control/logdisplay.py:901 #, fuzzy #| msgid "The product has been created." msgid "The product has been reordered." msgstr "تم إنشاء المنتج." -#: pretix/control/logdisplay.py:899 +#: pretix/control/logdisplay.py:902 msgid "The product has been deleted." msgstr "تم حذف المنتج." -#: pretix/control/logdisplay.py:900 +#: pretix/control/logdisplay.py:903 msgid "An add-on has been added to this product." msgstr "تمت إضافة وظيفة إضافية على هذا المنتج." -#: pretix/control/logdisplay.py:901 +#: pretix/control/logdisplay.py:904 msgid "An add-on has been removed from this product." msgstr "تمت إزالة وظيفة إضافية على من هذا المنتج." -#: pretix/control/logdisplay.py:902 +#: pretix/control/logdisplay.py:905 msgid "An add-on has been changed on this product." msgstr "تم تغيير وظيفة إضافية على على هذا المنتج." -#: pretix/control/logdisplay.py:903 +#: pretix/control/logdisplay.py:906 msgid "A bundled item has been added to this product." msgstr "تمت إضافة بند المجمعة لهذا المنتج." -#: pretix/control/logdisplay.py:904 +#: pretix/control/logdisplay.py:907 msgid "A bundled item has been removed from this product." msgstr "تمت إزالة عنصر المجمعة من هذا المنتج." -#: pretix/control/logdisplay.py:905 +#: pretix/control/logdisplay.py:908 msgid "A bundled item has been changed on this product." msgstr "تم تغيير عنصر المجمعة لهذا المنتج." -#: pretix/control/logdisplay.py:906 +#: pretix/control/logdisplay.py:909 #, fuzzy #| msgid "An add-on has been added to this product." msgid "A program time has been added to this product." msgstr "تمت إضافة وظيفة إضافية على هذا المنتج." -#: pretix/control/logdisplay.py:907 +#: pretix/control/logdisplay.py:910 #, fuzzy #| msgid "An add-on has been changed on this product." msgid "A program time has been changed on this product." msgstr "تم تغيير وظيفة إضافية على على هذا المنتج." -#: pretix/control/logdisplay.py:908 +#: pretix/control/logdisplay.py:911 #, fuzzy #| msgid "An add-on has been removed from this product." msgid "A program time has been removed from this product." msgstr "تمت إزالة وظيفة إضافية على من هذا المنتج." -#: pretix/control/logdisplay.py:915 +#: pretix/control/logdisplay.py:918 #, python-brace-format msgid "The variation \"{value}\" has been created." msgstr "الاختلاف \"{value}\" تم إنشاؤه." -#: pretix/control/logdisplay.py:916 +#: pretix/control/logdisplay.py:919 #, python-brace-format msgid "The variation \"{value}\" has been deleted." msgstr "الاختلاف \"{value}\" تم حذفها." -#: pretix/control/logdisplay.py:917 +#: pretix/control/logdisplay.py:920 #, python-brace-format msgid "The variation \"{value}\" has been changed." msgstr "الاختلاف \"{value}\" تم تغيير." -#: pretix/control/logdisplay.py:934 +#: pretix/control/logdisplay.py:937 #, python-brace-format msgid "Payment {local_id} has been confirmed." msgstr "وقد تم تأكيد الدفع {local_id}." -#: pretix/control/logdisplay.py:935 +#: pretix/control/logdisplay.py:938 #, python-brace-format msgid "Payment {local_id} has been canceled." msgstr "تم إلغاء الدفع {local_id}." -#: pretix/control/logdisplay.py:936 +#: pretix/control/logdisplay.py:939 #, python-brace-format msgid "Canceling payment {local_id} has failed." msgstr "فشل إلغاء الدفع {local_id}." -#: pretix/control/logdisplay.py:937 +#: pretix/control/logdisplay.py:940 #, python-brace-format msgid "Payment {local_id} has been started." msgstr "وقد بدأ الدفع {local_id}." -#: pretix/control/logdisplay.py:938 +#: pretix/control/logdisplay.py:941 #, python-brace-format msgid "Payment {local_id} has failed." msgstr "فشلت الدفع {local_id}." -#: pretix/control/logdisplay.py:939 +#: pretix/control/logdisplay.py:942 #, python-brace-format msgid "The order could not be marked as paid: {message}" msgstr "لا يمكن أن تكون وضعت النظام كما المدفوعة: {message}" -#: pretix/control/logdisplay.py:940 +#: pretix/control/logdisplay.py:943 msgid "The order has been overpaid." msgstr "وقد تم ترتيب زائدة." -#: pretix/control/logdisplay.py:941 +#: pretix/control/logdisplay.py:944 #, python-brace-format msgid "Refund {local_id} has been created." msgstr "تم إنشاء استرداد {local_id}." -#: pretix/control/logdisplay.py:942 +#: pretix/control/logdisplay.py:945 #, python-brace-format msgid "Refund {local_id} has been created by an external entity." msgstr "تم إنشاء استرداد {local_id} كيان خارجي." -#: pretix/control/logdisplay.py:943 +#: pretix/control/logdisplay.py:946 msgid "The customer requested you to issue a refund." msgstr "طلب لك العملاء لإصدار رد." -#: pretix/control/logdisplay.py:944 +#: pretix/control/logdisplay.py:947 #, python-brace-format msgid "Refund {local_id} has been completed." msgstr "وقد تم الانتهاء استرداد {local_id}." -#: pretix/control/logdisplay.py:945 +#: pretix/control/logdisplay.py:948 #, python-brace-format msgid "Refund {local_id} has been canceled." msgstr "تم إلغاء استرداد {local_id}." -#: pretix/control/logdisplay.py:946 +#: pretix/control/logdisplay.py:949 #, python-brace-format msgid "Refund {local_id} has failed." msgstr "فشل استرداد {local_id}." -#: pretix/control/logdisplay.py:953 +#: pretix/control/logdisplay.py:956 msgid "The quota has been added." msgstr "تمت إضافة الحصص." -#: pretix/control/logdisplay.py:954 +#: pretix/control/logdisplay.py:957 msgid "The quota has been deleted." msgstr "تم حذف الحصص." -#: pretix/control/logdisplay.py:955 +#: pretix/control/logdisplay.py:958 msgid "The quota has been changed." msgstr "تم تغيير الحصص." -#: pretix/control/logdisplay.py:956 +#: pretix/control/logdisplay.py:959 msgid "The quota has closed." msgstr "وقد أغلقت الحصص." -#: pretix/control/logdisplay.py:957 pretix/control/views/item.py:1236 +#: pretix/control/logdisplay.py:960 pretix/control/views/item.py:1236 msgid "The quota has been re-opened." msgstr "وكانت الحصة إعادة فتح." -#: pretix/control/logdisplay.py:964 +#: pretix/control/logdisplay.py:967 msgid "The question has been added." msgstr "تمت إضافة هذا السؤال." -#: pretix/control/logdisplay.py:965 +#: pretix/control/logdisplay.py:968 msgid "The question has been deleted." msgstr "تم حذف السؤال." -#: pretix/control/logdisplay.py:966 +#: pretix/control/logdisplay.py:969 msgid "The question has been changed." msgstr "تم تغيير السؤال." -#: pretix/control/logdisplay.py:967 +#: pretix/control/logdisplay.py:970 #, fuzzy #| msgid "The question has been deleted." msgid "The question has been reordered." msgstr "تم حذف السؤال." -#: pretix/control/logdisplay.py:974 +#: pretix/control/logdisplay.py:977 #, fuzzy #| msgid "The quota has been added." msgid "The discount has been added." msgstr "تمت إضافة الحصص." -#: pretix/control/logdisplay.py:975 +#: pretix/control/logdisplay.py:978 #, fuzzy #| msgid "The product has been deleted." msgid "The discount has been deleted." msgstr "تم حذف المنتج." -#: pretix/control/logdisplay.py:976 +#: pretix/control/logdisplay.py:979 #, fuzzy #| msgid "The account has been changed." msgid "The discount has been changed." msgstr "تم تغيير الحساب." -#: pretix/control/logdisplay.py:1000 +#: pretix/control/logdisplay.py:1003 #, python-brace-format msgid "" "Position #{posid} has been checked in manually at {datetime} on list \"{list}" @@ -19342,7 +19550,7 @@ msgid "" msgstr "" "وقد تم التحقق من موقف # {posid} في يدويا في{datetime} على قائمة \"{list}\"." -#: pretix/control/logdisplay.py:1005 +#: pretix/control/logdisplay.py:1008 #, python-brace-format msgid "" "Position #{posid} has been checked in again at {datetime} on list \"{list}\"." @@ -19350,15 +19558,15 @@ msgstr "" "وقد تم التحقق من موقف # {posid} الدخول مرة أخرى في{datetime} على قائمة " "\"{list}\"." -#: pretix/control/logdisplay.py:1014 +#: pretix/control/logdisplay.py:1017 msgid "An entry has been removed from the waiting list." msgstr "تمت إزالة إدخال من قائمة الانتظار." -#: pretix/control/logdisplay.py:1015 +#: pretix/control/logdisplay.py:1018 msgid "An entry has been changed on the waiting list." msgstr "تم تغيير دخول على قائمة الانتظار." -#: pretix/control/logdisplay.py:1016 +#: pretix/control/logdisplay.py:1019 msgid "An entry has been added to the waiting list." msgstr "تمت إضافة إدخال إلى قائمة الانتظار." @@ -19408,9 +19616,9 @@ msgstr "جنرال لواء" msgid "Payment" msgstr "دفع" -#: pretix/control/navigation.py:78 pretix/control/views/event.py:1653 -#: pretix/control/views/event.py:1655 pretix/control/views/event.py:1687 -#: pretix/control/views/event.py:1692 pretix/control/views/subevents.py:310 +#: pretix/control/navigation.py:78 pretix/control/views/event.py:1657 +#: pretix/control/views/event.py:1659 pretix/control/views/event.py:1691 +#: pretix/control/views/event.py:1696 pretix/control/views/subevents.py:316 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:60 #: pretix/plugins/ticketoutputpdf/apps.py:55 #: pretix/plugins/ticketoutputpdf/exporters.py:68 @@ -19606,13 +19814,13 @@ msgid "You do not have permission to view this content." msgstr "ليس لديك إذن لعرض هذا المحتوى." #: pretix/control/templates/pretixcontrol/auth/base.html:42 -#: pretix/control/templates/pretixcontrol/base.html:362 +#: pretix/control/templates/pretixcontrol/base.html:363 #, python-format msgid "You are currently working on behalf of %(user)s." msgstr "كنت أعمل حاليا باسم%(user)s." #: pretix/control/templates/pretixcontrol/auth/base.html:47 -#: pretix/control/templates/pretixcontrol/base.html:367 +#: pretix/control/templates/pretixcontrol/base.html:368 msgid "Stop impersonating" msgstr "توقف انتحالا للشخصية" @@ -19804,7 +20012,7 @@ msgstr "كلمة المرور الجديدة تعيين" #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:25 #: pretix/control/templates/pretixcontrol/organizers/device_bulk_edit.html:42 #: pretix/control/templates/pretixcontrol/organizers/device_edit.html:30 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:384 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:385 #: pretix/control/templates/pretixcontrol/organizers/export_form.html:50 #: pretix/control/templates/pretixcontrol/organizers/gate_edit.html:15 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_invite.html:15 @@ -19817,12 +20025,12 @@ msgstr "كلمة المرور الجديدة تعيين" #: pretix/control/templates/pretixcontrol/organizers/reusable_medium_edit.html:28 #: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html:15 #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html:28 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:47 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:71 #: pretix/control/templates/pretixcontrol/organizers/webhook_edit.html:21 -#: pretix/control/templates/pretixcontrol/pdf/index.html:46 +#: pretix/control/templates/pretixcontrol/pdf/index.html:44 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:634 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:368 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:289 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:292 #: pretix/control/templates/pretixcontrol/user/notifications.html:85 #: pretix/control/templates/pretixcontrol/user/settings.html:109 #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:13 @@ -19848,76 +20056,76 @@ msgstr "احفظ" msgid "Create a new account" msgstr "انشاء حساب جديد" -#: pretix/control/templates/pretixcontrol/base.html:103 +#: pretix/control/templates/pretixcontrol/base.html:104 msgid "Toggle navigation" msgstr "تبديل الملاحة" -#: pretix/control/templates/pretixcontrol/base.html:118 -#: pretix/control/templates/pretixcontrol/base.html:143 -#: pretix/control/templates/pretixcontrol/base.html:147 +#: pretix/control/templates/pretixcontrol/base.html:119 +#: pretix/control/templates/pretixcontrol/base.html:144 #: pretix/control/templates/pretixcontrol/base.html:148 +#: pretix/control/templates/pretixcontrol/base.html:149 msgid "Go to shop" msgstr "الذهاب للتسوق" -#: pretix/control/templates/pretixcontrol/base.html:124 -#: pretix/control/templates/pretixcontrol/base.html:154 +#: pretix/control/templates/pretixcontrol/base.html:125 #: pretix/control/templates/pretixcontrol/base.html:155 +#: pretix/control/templates/pretixcontrol/base.html:156 msgid "Public profile" msgstr "حساب عام" -#: pretix/control/templates/pretixcontrol/base.html:206 +#: pretix/control/templates/pretixcontrol/base.html:207 msgid "End admin session" msgstr "إنهاء جلسة مشرف" -#: pretix/control/templates/pretixcontrol/base.html:218 +#: pretix/control/templates/pretixcontrol/base.html:219 msgid "Account Settings" msgstr "إعدادت الحساب" -#: pretix/control/templates/pretixcontrol/base.html:223 -#: pretix/control/templates/pretixcontrol/base.html:225 +#: pretix/control/templates/pretixcontrol/base.html:224 +#: pretix/control/templates/pretixcontrol/base.html:226 #: pretix/presale/templates/pretixpresale/fragment_login_status.html:14 msgid "Log out" msgstr "الخروج" -#: pretix/control/templates/pretixcontrol/base.html:251 +#: pretix/control/templates/pretixcontrol/base.html:252 msgid "Organizer account" msgstr "حساب منظم" -#: pretix/control/templates/pretixcontrol/base.html:274 +#: pretix/control/templates/pretixcontrol/base.html:275 msgid "Search for events" msgstr "البحث عن الأحداث" -#: pretix/control/templates/pretixcontrol/base.html:331 +#: pretix/control/templates/pretixcontrol/base.html:332 #: pretix/presale/templates/pretixpresale/base.html:51 msgid "" "We've detected that you are using Microsoft Internet Explorer." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:334 +#: pretix/control/templates/pretixcontrol/base.html:335 #: pretix/presale/templates/pretixpresale/base.html:54 msgid "" "Internet Explorer is an old browser that does not support lots of recent web-" "based technologies and is no longer supported by this website." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:338 +#: pretix/control/templates/pretixcontrol/base.html:339 #: pretix/presale/templates/pretixpresale/base.html:58 msgid "" "We kindly ask you to move to one of our supported browsers, such as " "Microsoft Edge, Mozilla Firefox, Google Chrome, or Safari." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:347 +#: pretix/control/templates/pretixcontrol/base.html:348 msgid "" "Please leave a short comment on what you did in the following admin sessions:" msgstr "يرجى ترك تعليق قصير على ما فعلتم في دورات المشرف التالية:" -#: pretix/control/templates/pretixcontrol/base.html:378 +#: pretix/control/templates/pretixcontrol/base.html:379 msgid "Read more" msgstr "اقرأ أكثر" -#: pretix/control/templates/pretixcontrol/base.html:395 +#: pretix/control/templates/pretixcontrol/base.html:396 msgid "" "Your event contains test mode orders even though " "test mode has been disabled. You should delete those orders " @@ -19928,11 +20136,11 @@ msgstr "" "من أن وضع على اختبار تم تعطيل . يجب حذف تلك الأوامر للتأكد " "من أنها لا تظهر في التقارير والإحصاءات وكتلة الناس من شراء تذاكر الواقع." -#: pretix/control/templates/pretixcontrol/base.html:402 +#: pretix/control/templates/pretixcontrol/base.html:403 msgid "Show all test mode orders" msgstr "عرض كل أوامر وضع الاختبار" -#: pretix/control/templates/pretixcontrol/base.html:410 +#: pretix/control/templates/pretixcontrol/base.html:411 msgid "" "Starting with version 1.2.0, pretix automatically checks for updates in the " "background. During this check, anonymous data is transmitted to servers " @@ -19946,20 +20154,20 @@ msgstr "" "الإلكتروني للحصول على إشعار عبر البريد الإلكتروني في حالة وصول التحديث " "الجديد. وسوف تختفي هذه الرسالة بمجرد النقر فوقه." -#: pretix/control/templates/pretixcontrol/base.html:423 +#: pretix/control/templates/pretixcontrol/base.html:424 msgid "" "Click here to do a license compliance check to make sure your usage of " "pretix is in line with pretix' license." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:432 +#: pretix/control/templates/pretixcontrol/base.html:433 msgid "" "The cronjob component of pretix was not executed in the last hours. Please " "check that you have completed all installation steps and your cronjob is " "executed correctly." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:441 +#: pretix/control/templates/pretixcontrol/base.html:442 msgid "" "pretix is running in debug mode. For security reasons, please never run " "debug mode on a production instance." @@ -19967,22 +20175,22 @@ msgstr "" "يشغل pretix في وضع التصحيح. لأسباب أمنية، من فضلك لا تشغيل وضع التصحيح على " "نسخة الإنتاج." -#: pretix/control/templates/pretixcontrol/base.html:447 +#: pretix/control/templates/pretixcontrol/base.html:448 msgid "" "For security reasons, please change your password before you continue. " "Afterwards you will be redirected to your original destination." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:459 +#: pretix/control/templates/pretixcontrol/base.html:460 #, python-format msgid "Times displayed in %(tz)s" msgstr "عرض مرة في %(tz)s" -#: pretix/control/templates/pretixcontrol/base.html:465 +#: pretix/control/templates/pretixcontrol/base.html:466 msgid "running in development mode" msgstr "يعمل في نمط التنمية" -#: pretix/control/templates/pretixcontrol/base.html:474 +#: pretix/control/templates/pretixcontrol/base.html:475 #: pretix/presale/templates/pretixpresale/fragment_modals.html:38 #: pretix/presale/templates/pretixpresale/postmessage.html:27 #: pretix/presale/templates/pretixpresale/waiting.html:42 @@ -19999,6 +20207,7 @@ msgid "Receipt ID" msgstr "ID استلام" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:11 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:29 msgid "ID" msgstr "هوية شخصية" @@ -20220,10 +20429,11 @@ msgstr[5] "" #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html:16 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:10 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:21 -#: pretix/control/templates/pretixcontrol/pdf/index.html:153 +#: pretix/control/templates/pretixcontrol/pdf/index.html:151 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:378 #: pretix/control/templates/pretixcontrol/subevents/delete.html:12 #: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:41 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:289 #: pretix/control/templates/pretixcontrol/user/2fa_delete.html:18 #: pretix/control/templates/pretixcontrol/user/2fa_disable.html:17 #: pretix/control/templates/pretixcontrol/user/2fa_enable.html:18 @@ -20280,7 +20490,7 @@ msgstr "قم بالإلغاء" #: pretix/control/templates/pretixcontrol/organizers/ssoclient_delete.html:20 #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html:20 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:24 -#: pretix/control/templates/pretixcontrol/pdf/index.html:111 +#: pretix/control/templates/pretixcontrol/pdf/index.html:109 #: pretix/control/templates/pretixcontrol/subevents/delete.html:15 #: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:44 #: pretix/control/templates/pretixcontrol/user/2fa_delete.html:21 @@ -20289,7 +20499,7 @@ msgstr "قم بالإلغاء" #: pretix/control/templates/pretixcontrol/vouchers/delete_carts.html:16 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:15 #: pretix/control/templates/pretixcontrol/waitinglist/delete_bulk.html:36 -#: pretix/control/views/orders.py:390 +#: pretix/control/views/orders.py:391 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/delete.html:15 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:16 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_delete.html:15 @@ -20429,6 +20639,7 @@ msgstr "أمر مرفوض" #: pretix/control/templates/pretixcontrol/event/index.html:24 #: pretix/control/templates/pretixcontrol/organizers/device_connect.html:27 #: pretix/control/templates/pretixcontrol/organizers/device_connect.html:33 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:33 msgid "Copy to clipboard" msgstr "" @@ -20657,6 +20868,7 @@ msgstr "الاختيار في حذف قائمة" #: pretix/control/templates/pretixcontrol/items/discounts.html:158 #: pretix/control/templates/pretixcontrol/items/index.html:176 #: pretix/control/templates/pretixcontrol/items/quotas.html:162 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:185 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:89 #: pretix/plugins/badges/templates/pretixplugins/badges/index.html:72 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:69 @@ -20726,24 +20938,37 @@ msgstr "" msgid "Simulate" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:67 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:69 #, fuzzy #| msgid "All check-in lists" msgid "Valid check-in" msgstr "جميع قوائم التسجيل" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:69 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:71 #, fuzzy #| msgid "Additional information" msgid "Additional information required" msgstr "معلومة اضافية" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:71 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:73 msgid "" "The following questions must be answered before check-in can be completed:" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:93 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:85 +#, fuzzy +#| msgid "Requires special attention" +msgid "Media exchange required" +msgstr "يتطلب اهتماما خاصا" + +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:87 +#, python-format +msgid "" +"This ticket needs to be exchanged into a %(media_type)s " +"reusable medium. %(media_policy)s." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:103 #, fuzzy #| msgid "Requires special attention" msgid "Special attention required" @@ -21306,20 +21531,20 @@ msgid "Cancel or delete event" msgstr "إلغاء أو حذف فعالية" #: pretix/control/templates/pretixcontrol/event/dangerzone.html:9 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:25 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:27 #: pretix/control/templates/pretixcontrol/event/delete.html:60 #: pretix/control/templates/pretixcontrol/event/live.html:31 msgid "Go offline" msgstr "العودة متواجد حاليا" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:13 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:14 msgid "" "You can take your event offline. Nobody except your team will be able to see " "or access it any more." msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:34 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:48 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:35 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:51 #: pretix/control/templates/pretixcontrol/orders/cancel.html:5 #: pretix/control/templates/pretixcontrol/orders/cancel.html:7 #: pretix/control/templates/pretixcontrol/orders/cancel_confirm.html:6 @@ -21327,39 +21552,39 @@ msgstr "" msgid "Cancel event" msgstr "حذف فعالية" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:38 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:40 msgid "" "If you need to call off your event you want to cancel and refund all " "tickets, you can do so through this option." msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:51 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:53 #, fuzzy #| msgid "Permissions" msgid "No permission" msgstr "أذونات" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:59 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:72 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:62 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:76 #: pretix/control/templates/pretixcontrol/event/delete.html:56 #: pretix/control/templates/pretixcontrol/event/delete.html:70 msgid "Delete personal data" msgstr "حذف البيانات الشخصية" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:63 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:67 msgid "" "You can remove personal data such as names and email addresses from your " "event and only retain the financial information such as the number and type " "of tickets sold." msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:80 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:93 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:84 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:99 #: pretix/control/templates/pretixcontrol/event/delete.html:5 msgid "Delete event" msgstr "حدث الحذف" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:84 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:89 msgid "" "You can delete your event completely only as long as it does not contain any " "undeletable data, such as orders not performed in test mode." @@ -21496,6 +21721,7 @@ msgid "Shop URL:" msgstr "URL النظام:" #: pretix/control/templates/pretixcontrol/event/index.html:27 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:38 #: pretix/control/templates/pretixcontrol/vouchers/detail.html:57 #, fuzzy #| msgid "Order code" @@ -21866,9 +22092,10 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:16 #: pretix/control/templates/pretixcontrol/organizers/mail.html:34 #: pretix/control/templates/pretixcontrol/organizers/mail.html:48 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:83 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:95 #: pretix/control/templates/pretixcontrol/organizers/team_members.html:10 #: pretix/control/templates/pretixcontrol/organizers/webhooks.html:72 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:18 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:94 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:117 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:85 @@ -21888,7 +22115,7 @@ msgstr "البريد الإلكتروني تصميم" #: pretix/control/templates/pretixcontrol/event/mail.html:79 #: pretix/control/templates/pretixcontrol/event/mail_settings_fragment.html:29 #: pretix/control/templates/pretixcontrol/event/tickets.html:35 -#: pretix/control/templates/pretixcontrol/pdf/index.html:41 +#: pretix/control/templates/pretixcontrol/pdf/index.html:39 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:97 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:120 msgid "Preview" @@ -21957,6 +22184,7 @@ msgid "Enabled" msgstr "تمكين" #: pretix/control/templates/pretixcontrol/event/payment.html:28 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:34 #: pretix/control/templates/pretixcontrol/subevents/index.html:170 #: pretix/control/templates/pretixcontrol/user/settings.html:81 msgid "Disabled" @@ -22030,11 +22258,11 @@ msgstr "" #: pretix/control/templates/pretixcontrol/event/plugins.html:15 #: pretix/control/templates/pretixcontrol/organizers/plugins.html:15 -#: pretix/control/views/checkin.py:425 pretix/control/views/discounts.py:113 -#: pretix/control/views/event.py:254 pretix/control/views/event.py:583 -#: pretix/control/views/event.py:622 pretix/control/views/event.py:819 -#: pretix/control/views/event.py:1060 pretix/control/views/event.py:1423 -#: pretix/control/views/event.py:1463 +#: pretix/control/views/checkin.py:426 pretix/control/views/discounts.py:113 +#: pretix/control/views/event.py:255 pretix/control/views/event.py:584 +#: pretix/control/views/event.py:623 pretix/control/views/event.py:820 +#: pretix/control/views/event.py:1061 pretix/control/views/event.py:1427 +#: pretix/control/views/event.py:1467 #: pretix/control/views/global_settings.py:65 #: pretix/control/views/global_settings.py:88 pretix/control/views/item.py:271 #: pretix/control/views/item.py:784 pretix/control/views/item.py:1035 @@ -22050,22 +22278,22 @@ msgstr "" #: pretix/control/views/organizer.py:2421 #: pretix/control/views/organizer.py:2558 #: pretix/control/views/organizer.py:2755 -#: pretix/control/views/organizer.py:2871 -#: pretix/control/views/organizer.py:3000 -#: pretix/control/views/organizer.py:3197 -#: pretix/control/views/organizer.py:3226 -#: pretix/control/views/organizer.py:3266 -#: pretix/control/views/organizer.py:3343 -#: pretix/control/views/organizer.py:3440 -#: pretix/control/views/organizer.py:3469 -#: pretix/control/views/organizer.py:3607 pretix/control/views/subevents.py:543 -#: pretix/control/views/subevents.py:1666 pretix/control/views/user.py:241 +#: pretix/control/views/organizer.py:2873 +#: pretix/control/views/organizer.py:3002 +#: pretix/control/views/organizer.py:3199 +#: pretix/control/views/organizer.py:3228 +#: pretix/control/views/organizer.py:3268 +#: pretix/control/views/organizer.py:3345 +#: pretix/control/views/organizer.py:3448 +#: pretix/control/views/organizer.py:3504 +#: pretix/control/views/organizer.py:3642 pretix/control/views/subevents.py:608 +#: pretix/control/views/subevents.py:1739 pretix/control/views/user.py:241 #: pretix/control/views/user.py:857 pretix/control/views/users.py:113 #: pretix/control/views/vouchers.py:306 pretix/plugins/autocheckin/views.py:164 #: pretix/plugins/badges/views.py:158 pretix/plugins/sendmail/views.py:645 #: pretix/plugins/stripe/views.py:699 #: pretix/plugins/ticketoutputpdf/views.py:172 -#: pretix/presale/views/customer.py:544 pretix/presale/views/customer.py:597 +#: pretix/presale/views/customer.py:546 pretix/presale/views/customer.py:599 msgid "Your changes have been saved." msgstr "تم حفظ التغييرات." @@ -22282,7 +22510,7 @@ msgstr "مبادئ" #: pretix/control/templates/pretixcontrol/item/index.html:127 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:394 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:77 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:35 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:35 msgid "Meta data" msgstr "البيانات الوصفية" @@ -22365,7 +22593,7 @@ msgstr "تصميم متجر" #: pretix/control/templates/pretixcontrol/events/create_basics.html:59 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:413 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:96 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:54 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:54 msgid "Timeline" msgstr "الجدول الزمني" @@ -22659,7 +22887,7 @@ msgid "Add a new rule" msgstr "إضافة قاعدة جديدة" #: pretix/control/templates/pretixcontrol/event/tax_edit.html:153 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:392 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:393 msgid "Change history" msgstr "تغيير السجل" @@ -22782,10 +23010,11 @@ msgstr "إنشاء منظم جديد" #: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:22 #: pretix/control/templates/pretixcontrol/items/quota_edit.html:21 #: pretix/control/templates/pretixcontrol/organizers/create.html:11 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:20 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:21 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:386 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:31 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:23 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:25 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:23 msgid "General information" msgstr "معلومات عامة" @@ -23569,7 +23798,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/item/index.html:254 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:621 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:262 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:262 msgid "Additional settings" msgstr "إعدادات إضافية" @@ -23815,7 +24044,7 @@ msgstr "محفوظة بالكامل" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:108 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:36 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:72 -#: pretix/presale/views/widget.py:490 +#: pretix/presale/views/widget.py:493 msgid "Sold out" msgstr "بيعت كلها" @@ -24229,6 +24458,7 @@ msgid "You haven't created any quotas yet." msgstr "لم تقم بإنشاء أي حصص حتى الان." #: pretix/control/templates/pretixcontrol/items/quotas.html:108 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:84 msgid "Capacity left" msgstr "اليسار قدرة" @@ -24360,16 +24590,16 @@ msgstr "أذونات" msgid "No applications have access to your pretix account." msgstr "لا توجد تطبيقات من الوصول إلى حساب pretix الخاص بك." -#: pretix/control/templates/pretixcontrol/order/approve.html:4 -#: pretix/control/templates/pretixcontrol/order/approve.html:8 +#: pretix/control/templates/pretixcontrol/order/approve.html:5 +#: pretix/control/templates/pretixcontrol/order/approve.html:9 msgid "Approve order" msgstr "الموافقة على النظام" -#: pretix/control/templates/pretixcontrol/order/approve.html:10 +#: pretix/control/templates/pretixcontrol/order/approve.html:14 msgid "Do you really want to approve this order?" msgstr "هل تريد حقا أن الموافقة على هذا النظام؟" -#: pretix/control/templates/pretixcontrol/order/approve.html:20 +#: pretix/control/templates/pretixcontrol/order/approve.html:24 #: pretix/control/templates/pretixcontrol/order/cancel.html:46 #: pretix/control/templates/pretixcontrol/order/cancellation_request_delete.html:21 #: pretix/control/templates/pretixcontrol/order/delete.html:20 @@ -24380,7 +24610,7 @@ msgstr "هل تريد حقا أن الموافقة على هذا النظام؟" msgid "No, take me back" msgstr "لا، أعدني" -#: pretix/control/templates/pretixcontrol/order/approve.html:25 +#: pretix/control/templates/pretixcontrol/order/approve.html:29 msgid "Yes, approve order" msgstr "نعم، والموافقة على النظام" @@ -24716,13 +24946,13 @@ msgstr "تفاصيل الطلب: %(code)s" #: pretix/control/templates/pretixcontrol/order/index.html:46 #: pretix/control/templates/pretixcontrol/orders/index.html:297 -#: pretix/control/views/orders.py:314 +#: pretix/control/views/orders.py:315 msgid "Approve" msgstr "يوافق" #: pretix/control/templates/pretixcontrol/order/index.html:51 #: pretix/control/templates/pretixcontrol/orders/index.html:304 -#: pretix/control/views/orders.py:328 +#: pretix/control/views/orders.py:329 msgid "Deny" msgstr "أنكر" @@ -24767,7 +24997,7 @@ msgstr "" "المجانية، يمكنك وضع علامة على أنها منتهية الصلاحية يدويا." #: pretix/control/templates/pretixcontrol/order/index.html:116 -#: pretix/control/views/orders.py:376 +#: pretix/control/views/orders.py:377 #, fuzzy #| msgid "Refund order" msgid "Refund for overpayment" @@ -26049,6 +26279,8 @@ msgstr "المجموع" #: pretix/control/templates/pretixcontrol/orders/index.html:194 #: pretix/control/templates/pretixcontrol/search/orders.html:80 #: pretix/control/templates/pretixcontrol/search/orders.html:82 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:265 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:269 #, fuzzy, python-format #| msgid "Exit: %(date)s" msgctxt "followup" @@ -26123,14 +26355,14 @@ msgid "Select action" msgstr "اختر ولايه" #: pretix/control/templates/pretixcontrol/orders/index.html:311 -#: pretix/control/views/orders.py:360 +#: pretix/control/views/orders.py:361 #, fuzzy #| msgid "Refund full paid amount" msgid "Refund overpaid amount" msgstr "برد المبلغ المدفوع كاملا" #: pretix/control/templates/pretixcontrol/orders/index.html:319 -#: pretix/control/views/orders.py:345 +#: pretix/control/views/orders.py:346 msgid "Mark as expired if overdue" msgstr "" @@ -26655,11 +26887,11 @@ msgid "" "pretix. This will be ignored if a URL is configured." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:229 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:230 msgid "Barcode media" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:233 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:234 msgid "" "A \"barcode medium\" can be any printed or digital representation of a " "barcode. The medium will initially be created through the sale of a product " @@ -26668,59 +26900,59 @@ msgid "" "same barcode may be re-used during the sale of a different product." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:240 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:241 msgid "Barcode media can currently only be connected to tickets." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:243 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:244 msgid "" "This subsequent reuse of the barcode is currently only supported during POS " "sales." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:260 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:261 msgid "" "This medium type can work with almost any type of NFC chip. With this " "option, only the UID of the NFC chip is used for identification." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:264 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:296 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:265 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:297 msgid "NFC media can currently only be connected to gift cards." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:270 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:271 msgid "" "This method does not provide a high level of protection against abuse since " "it is possible for malicious users to clone someone's chip with the same UID." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:291 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:292 msgid "" "This medium type works only with NFC chips of the type Mifare Ultralight AES " "made by NXP. This provides a higher level of security than other approaches, " "but requires all chips to be encoded prior to use." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:318 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:319 #, fuzzy #| msgid "Known domains" msgid "Domains" msgstr "نطاقات معروفة" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:320 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:321 #, fuzzy #| msgid "This action is only allowed for pending orders." msgid "This dialog is intended for advanced users." msgstr "يسمح هذا الإجراء فقط لانتظار أوامر." -#: pretix/control/templates/pretixcontrol/organizers/edit.html:321 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:322 msgid "" "The domain needs to be configured on your webserver before it can be used " "here." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:377 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:378 #, fuzzy #| msgid "Address line" msgid "Add domain" @@ -27276,7 +27508,7 @@ msgid "Media type" msgstr "نوع الرسوم" #: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:63 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:40 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:52 #, fuzzy #| msgid "Connect" msgctxt "reusable_media" @@ -27293,7 +27525,7 @@ msgctxt "reusable_media" msgid "Medium %(id)s" msgstr "عنوان البريد الإلكتروني التحقق منها" -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:94 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:106 #, fuzzy #| msgid "Team history" msgctxt "reusable_media" @@ -27402,20 +27634,41 @@ msgstr "" msgid "Are you sure you want to delete the team?" msgstr "هل أنت متأكد أنك تريد حذف الفريق؟" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:7 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:8 #: pretix/control/templates/pretixcontrol/organizers/team_members.html:6 msgid "Team:" msgstr "الفريق:" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:9 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:10 #: pretix/control/templates/pretixcontrol/organizers/teams.html:30 msgid "Create a new team" msgstr "إنشاء فريق جديد" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:11 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:12 msgid "You will be able to add team members in the next step." msgstr "سوف تكون قادرا على إضافة أعضاء الفريق في الخطوة التالية." +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:31 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:55 +msgid "" +"Even if a team has no access to a certain category of data, they might still " +"be able to see parts of this data when it is linked to data they can see." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:35 +msgid "" +"For example, someone with access to customer accounts will be able to see " +"some information about gift cards linked to a customer account, even if they " +"generally can't see gift cards directly." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:59 +msgid "" +"For example, someone with access to orders will be able to see some " +"information about vouchers used to create an order, even if they generally " +"can't see vouchers directly." +msgstr "" + #: pretix/control/templates/pretixcontrol/organizers/team_members.html:21 msgid "Member" msgstr "عضو" @@ -27608,69 +27861,69 @@ msgstr "الصفحة %(page)s" msgid "PDF Editor" msgstr "PDF محرر" -#: pretix/control/templates/pretixcontrol/pdf/index.html:36 +#: pretix/control/templates/pretixcontrol/pdf/index.html:34 #: pretix/plugins/banktransfer/refund_export.py:47 msgid "Code" msgstr "الشفرة" -#: pretix/control/templates/pretixcontrol/pdf/index.html:52 +#: pretix/control/templates/pretixcontrol/pdf/index.html:50 #, fuzzy #| msgid "Text color" msgid "Text box" msgstr "لون الخط" -#: pretix/control/templates/pretixcontrol/pdf/index.html:59 +#: pretix/control/templates/pretixcontrol/pdf/index.html:57 #, fuzzy #| msgid "Code" msgid "QR Code" msgstr "الشفرة" -#: pretix/control/templates/pretixcontrol/pdf/index.html:64 +#: pretix/control/templates/pretixcontrol/pdf/index.html:62 msgid "QR code for Check-In" msgstr "رمز الاستجابة السريعة لتسلم الغرف" -#: pretix/control/templates/pretixcontrol/pdf/index.html:71 +#: pretix/control/templates/pretixcontrol/pdf/index.html:69 msgid "QR code for Lead Scanning" msgstr "رمز الاستجابة السريعة لالضوئي الرصاص" -#: pretix/control/templates/pretixcontrol/pdf/index.html:78 +#: pretix/control/templates/pretixcontrol/pdf/index.html:76 #, fuzzy #| msgid "Order code" msgid "Other QR code" msgstr "رمز الطلب" -#: pretix/control/templates/pretixcontrol/pdf/index.html:87 +#: pretix/control/templates/pretixcontrol/pdf/index.html:85 msgid "Image" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:92 +#: pretix/control/templates/pretixcontrol/pdf/index.html:90 msgid "" "You can use this to add user-uploaded pictures from questions or pictures " "generated by plugins. If you want to embed a logo or other images, use a " "custom background instead." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:93 +#: pretix/control/templates/pretixcontrol/pdf/index.html:91 msgid "Dynamic image" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:100 +#: pretix/control/templates/pretixcontrol/pdf/index.html:98 msgid "pretix Logo" msgstr "pretix شعار" -#: pretix/control/templates/pretixcontrol/pdf/index.html:107 +#: pretix/control/templates/pretixcontrol/pdf/index.html:105 msgid "Duplicate" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:117 +#: pretix/control/templates/pretixcontrol/pdf/index.html:115 msgid "Undo" msgstr "تراجع" -#: pretix/control/templates/pretixcontrol/pdf/index.html:121 +#: pretix/control/templates/pretixcontrol/pdf/index.html:119 msgid "Redo" msgstr "الإعادة" -#: pretix/control/templates/pretixcontrol/pdf/index.html:142 +#: pretix/control/templates/pretixcontrol/pdf/index.html:140 msgid "" "This feature is only intended for advanced users. We recommend to only use " "it to copy and share ticket designs, not to modify the design source code." @@ -27678,20 +27931,20 @@ msgstr "" "والغرض من هذه الميزة فقط للمستخدمين المتقدمين. من المستحسن استخدامه فقط لنسخ " "والتصاميم حصة التذاكر، وليس لتعديل التعليمات البرمجية المصدر التصميم." -#: pretix/control/templates/pretixcontrol/pdf/index.html:156 +#: pretix/control/templates/pretixcontrol/pdf/index.html:154 #: pretix/presale/templates/pretixpresale/giftcard/checkout.html:26 msgid "Apply" msgstr "تطبيق" -#: pretix/control/templates/pretixcontrol/pdf/index.html:164 +#: pretix/control/templates/pretixcontrol/pdf/index.html:162 msgid "Uploading new PDF background…" msgstr "تحميل خلفية PDF جديدة ..." -#: pretix/control/templates/pretixcontrol/pdf/index.html:172 +#: pretix/control/templates/pretixcontrol/pdf/index.html:170 msgid "Welcome to the PDF ticket editor!" msgstr "أهلا وسهلا بك إلى المحرر PDF تذكرة!" -#: pretix/control/templates/pretixcontrol/pdf/index.html:174 +#: pretix/control/templates/pretixcontrol/pdf/index.html:172 msgid "" "This editor allows you to create a design for the PDF tickets of your event. " "You can upload a background PDF and then use this tool to place texts and a " @@ -27701,7 +27954,7 @@ msgstr "" "تحميل خلفية PDF ومن ثم استخدام هذه الأداة لنصوص المكان ورمز الاستجابة " "السريعة على التذكرة." -#: pretix/control/templates/pretixcontrol/pdf/index.html:185 +#: pretix/control/templates/pretixcontrol/pdf/index.html:183 msgid "" "Please note that the editor can only provide a rough preview. Some details, " "for example in text rendering, might look slightly different in the final " @@ -27712,7 +27965,7 @@ msgstr "" "المثال في تقديم النص، قد تبدو مختلفة قليلا في تذاكر النهائي. يمكنك استخدام " "زر \"معاينة\" على اليمين لمعاينة أكثر دقة." -#: pretix/control/templates/pretixcontrol/pdf/index.html:199 +#: pretix/control/templates/pretixcontrol/pdf/index.html:197 msgid "" "The editor is tested with recent versions of Google Chrome, Mozilla Firefox " "and Opera. Other browsers, especially Internet Explorer or Microsoft Edge, " @@ -27723,7 +27976,7 @@ msgstr "" "وأوبرا. المتصفحات الأخرى، وخاصة برنامج Internet Explorer أو Microsoft " "الحافة، قد تواجه مشاكل في عرض خلفيتك PDF أو تحميل الخطوط الصحيحة." -#: pretix/control/templates/pretixcontrol/pdf/index.html:207 +#: pretix/control/templates/pretixcontrol/pdf/index.html:205 msgid "" "The editor requires JavaScript to work. Please enable JavaScript in your " "browser to continue." @@ -27731,97 +27984,97 @@ msgstr "" "يتطلب محرر جافا سكريبت لعمل. الرجاء تمكين جافا سكريبت في المتصفح الخاص بك " "للمتابعة." -#: pretix/control/templates/pretixcontrol/pdf/index.html:217 -#: pretix/control/templates/pretixcontrol/pdf/index.html:233 +#: pretix/control/templates/pretixcontrol/pdf/index.html:215 +#: pretix/control/templates/pretixcontrol/pdf/index.html:231 msgid "Loading…" msgstr "جار التحميل…" -#: pretix/control/templates/pretixcontrol/pdf/index.html:220 +#: pretix/control/templates/pretixcontrol/pdf/index.html:218 msgid "Start editing" msgstr "بدء التعديل" -#: pretix/control/templates/pretixcontrol/pdf/index.html:240 +#: pretix/control/templates/pretixcontrol/pdf/index.html:238 #, fuzzy #| msgid "Seat name" msgid "Layout name" msgstr "اسم المقعد" -#: pretix/control/templates/pretixcontrol/pdf/index.html:247 +#: pretix/control/templates/pretixcontrol/pdf/index.html:245 #, fuzzy #| msgid "Use languages" msgid "Preferred language" msgstr "استخدام اللغات" -#: pretix/control/templates/pretixcontrol/pdf/index.html:260 -#: pretix/control/templates/pretixcontrol/pdf/index.html:270 +#: pretix/control/templates/pretixcontrol/pdf/index.html:258 +#: pretix/control/templates/pretixcontrol/pdf/index.html:268 #, fuzzy #| msgid "Upload custom background" msgid "Upload PDF as background" msgstr "خلفية مخصصة تحميل" -#: pretix/control/templates/pretixcontrol/pdf/index.html:262 +#: pretix/control/templates/pretixcontrol/pdf/index.html:260 msgid "" "You can upload a PDF to use as a custom background. The paper size will " "match the PDF." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:274 +#: pretix/control/templates/pretixcontrol/pdf/index.html:272 #, python-format msgid "max. %(size)s, smaller is better" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:282 +#: pretix/control/templates/pretixcontrol/pdf/index.html:280 #, fuzzy #| msgid "Upload custom background" msgid "Download current background" msgstr "خلفية مخصصة تحميل" -#: pretix/control/templates/pretixcontrol/pdf/index.html:289 +#: pretix/control/templates/pretixcontrol/pdf/index.html:287 #, fuzzy #| msgid "Canceled by customer" msgid "Or choose custom paper size" msgstr "تم الإلغاء من قبل العميل" -#: pretix/control/templates/pretixcontrol/pdf/index.html:291 +#: pretix/control/templates/pretixcontrol/pdf/index.html:289 msgid "" "To manually change the paper size, you need to create a new, empty " "background." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:299 -#: pretix/control/templates/pretixcontrol/pdf/index.html:386 -#: pretix/control/templates/pretixcontrol/pdf/index.html:428 +#: pretix/control/templates/pretixcontrol/pdf/index.html:297 +#: pretix/control/templates/pretixcontrol/pdf/index.html:384 +#: pretix/control/templates/pretixcontrol/pdf/index.html:426 msgid "Width (mm)" msgstr "العرض (مم)" -#: pretix/control/templates/pretixcontrol/pdf/index.html:303 -#: pretix/control/templates/pretixcontrol/pdf/index.html:391 +#: pretix/control/templates/pretixcontrol/pdf/index.html:301 +#: pretix/control/templates/pretixcontrol/pdf/index.html:389 msgid "Height (mm)" msgstr "الارتفاع (مم)" -#: pretix/control/templates/pretixcontrol/pdf/index.html:312 +#: pretix/control/templates/pretixcontrol/pdf/index.html:310 msgid "Create empty background" msgstr "إنشاء خلفية فارغة" -#: pretix/control/templates/pretixcontrol/pdf/index.html:319 +#: pretix/control/templates/pretixcontrol/pdf/index.html:317 msgid "Style" msgstr "قلم المدقة" -#: pretix/control/templates/pretixcontrol/pdf/index.html:321 +#: pretix/control/templates/pretixcontrol/pdf/index.html:319 msgid "Dark" msgstr "داكن" -#: pretix/control/templates/pretixcontrol/pdf/index.html:322 +#: pretix/control/templates/pretixcontrol/pdf/index.html:320 msgid "Light" msgstr "ضوء" -#: pretix/control/templates/pretixcontrol/pdf/index.html:328 +#: pretix/control/templates/pretixcontrol/pdf/index.html:326 #, fuzzy #| msgid "Email content" msgid "Image content" msgstr "البريد الإلكتروني المحتوى" -#: pretix/control/templates/pretixcontrol/pdf/index.html:339 +#: pretix/control/templates/pretixcontrol/pdf/index.html:337 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_create.html:20 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_update.html:34 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:29 @@ -27830,93 +28083,93 @@ msgstr "البريد الإلكتروني المحتوى" msgid "Content" msgstr "جهة اتصال:" -#: pretix/control/templates/pretixcontrol/pdf/index.html:348 +#: pretix/control/templates/pretixcontrol/pdf/index.html:346 #: pretix/control/templates/pretixcontrol/pdf/placeholders.html:50 msgid "Event attribute:" msgstr "السمة الحدث:" -#: pretix/control/templates/pretixcontrol/pdf/index.html:353 +#: pretix/control/templates/pretixcontrol/pdf/index.html:351 #: pretix/control/templates/pretixcontrol/pdf/placeholders.html:59 #, fuzzy #| msgid "Event attribute:" msgid "Item attribute:" msgstr "السمة الحدث:" -#: pretix/control/templates/pretixcontrol/pdf/index.html:356 +#: pretix/control/templates/pretixcontrol/pdf/index.html:354 msgid "Other… (multilingual)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:357 +#: pretix/control/templates/pretixcontrol/pdf/index.html:355 msgid "Other…" msgstr "آخر…" -#: pretix/control/templates/pretixcontrol/pdf/index.html:367 +#: pretix/control/templates/pretixcontrol/pdf/index.html:365 #, fuzzy #| msgid "Available placeholders: {list}" msgid "Show available placeholders" msgstr "النائبة المتاحة: {list}" -#: pretix/control/templates/pretixcontrol/pdf/index.html:374 +#: pretix/control/templates/pretixcontrol/pdf/index.html:372 msgid "x (mm)" msgstr "س (مم)" -#: pretix/control/templates/pretixcontrol/pdf/index.html:379 +#: pretix/control/templates/pretixcontrol/pdf/index.html:377 msgid "y (mm)" msgstr "ص (مم)" -#: pretix/control/templates/pretixcontrol/pdf/index.html:398 +#: pretix/control/templates/pretixcontrol/pdf/index.html:396 msgid "Size (mm)" msgstr "حجم (مم)" -#: pretix/control/templates/pretixcontrol/pdf/index.html:405 +#: pretix/control/templates/pretixcontrol/pdf/index.html:403 #, fuzzy #| msgid "Text color" msgid "QR color" msgstr "لون الخط" -#: pretix/control/templates/pretixcontrol/pdf/index.html:420 +#: pretix/control/templates/pretixcontrol/pdf/index.html:418 msgid "Render without whitespace" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:422 +#: pretix/control/templates/pretixcontrol/pdf/index.html:420 msgid "" "Required for consistent size across platforms. Supported on Android starting " "with pretixPRINT 2.3.3 and on Desktop with pretixSCAN 1.9.3." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:433 +#: pretix/control/templates/pretixcontrol/pdf/index.html:431 msgid "Rotation (°)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:452 +#: pretix/control/templates/pretixcontrol/pdf/index.html:450 msgid "Font size (pt)" msgstr "حجم الخط (نقطة)" -#: pretix/control/templates/pretixcontrol/pdf/index.html:457 +#: pretix/control/templates/pretixcontrol/pdf/index.html:455 #, fuzzy #| msgid "Light" msgid "Line height" msgstr "ضوء" -#: pretix/control/templates/pretixcontrol/pdf/index.html:464 +#: pretix/control/templates/pretixcontrol/pdf/index.html:462 msgid "Text color" msgstr "لون الخط" -#: pretix/control/templates/pretixcontrol/pdf/index.html:487 +#: pretix/control/templates/pretixcontrol/pdf/index.html:485 msgid "Flow multiple lines downward from specified position" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:541 +#: pretix/control/templates/pretixcontrol/pdf/index.html:539 #, fuzzy #| msgid "Automatically refund money if possible" msgid "Automatically reduce font size to fit content" msgstr "استرد المبلغ تلقائيا إن أمكن الأمر" -#: pretix/control/templates/pretixcontrol/pdf/index.html:547 +#: pretix/control/templates/pretixcontrol/pdf/index.html:545 msgid "Allow long words to be split (preview is not accurate)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:558 +#: pretix/control/templates/pretixcontrol/pdf/index.html:556 #, python-format msgid "" "This layout uses new features. If you print from your device, make sure you " @@ -28185,26 +28438,26 @@ msgstr "إضافة نوع تذكرة جديدة" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:483 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:266 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:124 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:124 msgid "Add a new quota" msgstr "إضافة حصة جديدة" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:487 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:128 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:128 #, fuzzy #| msgid "Price settings" msgid "Product settings" msgstr "ضبط الأسعار" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:489 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:130 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:130 msgid "" "These settings are optional, if you leave them empty, the default values " "from the product settings will be used." msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:525 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:166 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:166 msgid "" "You can choose to either add one or more check-in lists for every date in " "your series individually, or use just one check-in list for all your dates " @@ -28218,7 +28471,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:604 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:359 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:245 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:245 msgid "Add a new check-in list" msgstr "إضافة الاختيار في قائمة جديدة" @@ -28304,16 +28557,43 @@ msgid "" msgstr "" "لا يمكن حذف التواريخ التالية لأنها بالفعل أوامر، ولكن سيتم تعطيل بدلا من ذلك." -#: pretix/control/templates/pretixcontrol/subevents/detail.html:10 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:9 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:13 +#, fuzzy, python-format +#| msgid "Quota: %(name)s" msgctxt "subevent" -msgid "Create date" -msgstr "تاريخ إنشاء" +msgid "Date: %(name)s" +msgstr "الحصة: %(name)s" -#: pretix/control/templates/pretixcontrol/subevents/detail.html:279 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:234 +#, fuzzy +#| msgid "Partially paid" +msgid "partially canceled" +msgstr "مدفوع جزئيا" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:282 +#, fuzzy +#| msgid "View full log" +msgid "View all" +msgstr "عرض السجل الكامل" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:289 +#, fuzzy +#| msgid "No archived events found." +msgid "No orders found." +msgstr "لم يتم العثور على الفعاليات في الأرشيف." + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:302 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:279 msgctxt "subevent" msgid "Date history" msgstr "تاريخ التاريخ" +#: pretix/control/templates/pretixcontrol/subevents/edit.html:10 +msgctxt "subevent" +msgid "Create date" +msgstr "تاريخ إنشاء" + #: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:3 #: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:5 #, fuzzy @@ -29506,21 +29786,21 @@ msgstr "وقد اتسمت تذاكر اختياره إيداعه." msgid "The new check-in list has been created." msgstr "تم إنشاء الاختيار في قائمة جديدة." -#: pretix/control/views/checkin.py:382 pretix/control/views/checkin.py:442 +#: pretix/control/views/checkin.py:382 pretix/control/views/checkin.py:443 #: pretix/control/views/discounts.py:134 pretix/control/views/discounts.py:182 -#: pretix/control/views/event.py:283 pretix/control/views/event.py:586 -#: pretix/control/views/event.py:625 pretix/control/views/event.py:822 -#: pretix/control/views/event.py:1026 pretix/control/views/event.py:1376 -#: pretix/control/views/event.py:1442 pretix/control/views/event.py:1594 +#: pretix/control/views/event.py:284 pretix/control/views/event.py:587 +#: pretix/control/views/event.py:626 pretix/control/views/event.py:823 +#: pretix/control/views/event.py:1027 pretix/control/views/event.py:1380 +#: pretix/control/views/event.py:1446 pretix/control/views/event.py:1598 #: pretix/control/views/item.py:287 pretix/control/views/item.py:334 #: pretix/control/views/item.py:794 pretix/control/views/item.py:820 #: pretix/control/views/item.py:1054 pretix/control/views/item.py:1106 #: pretix/control/views/item.py:1310 pretix/control/views/item.py:1476 #: pretix/control/views/item.py:1668 pretix/control/views/organizer.py:281 #: pretix/control/views/organizer.py:309 pretix/control/views/organizer.py:1450 -#: pretix/control/views/subevents.py:521 pretix/control/views/subevents.py:667 -#: pretix/control/views/subevents.py:1112 -#: pretix/control/views/subevents.py:1574 pretix/control/views/user.py:342 +#: pretix/control/views/subevents.py:586 pretix/control/views/subevents.py:740 +#: pretix/control/views/subevents.py:1185 +#: pretix/control/views/subevents.py:1647 pretix/control/views/user.py:342 #: pretix/control/views/user.py:861 pretix/control/views/user.py:901 #: pretix/control/views/vouchers.py:278 pretix/control/views/vouchers.py:352 #: pretix/control/views/vouchers.py:535 pretix/control/views/waitinglist.py:427 @@ -29532,11 +29812,11 @@ msgstr "تم إنشاء الاختيار في قائمة جديدة." msgid "We could not save your changes. See below for details." msgstr "لم نتمكن من حفظ التغييرات الخاصة بك. انظر أدناه للحصول على التفاصيل." -#: pretix/control/views/checkin.py:421 pretix/control/views/checkin.py:458 +#: pretix/control/views/checkin.py:422 pretix/control/views/checkin.py:459 msgid "The requested list does not exist." msgstr "عدم وجود قائمة المطلوب." -#: pretix/control/views/checkin.py:467 +#: pretix/control/views/checkin.py:468 msgid "The selected list has been deleted." msgstr "تم حذف القائمة المحددة." @@ -29625,7 +29905,7 @@ msgstr "اقامة الحدث" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:117 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:48 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:80 -#: pretix/presale/views/widget.py:504 +#: pretix/presale/views/widget.py:507 msgid "Sale over" msgstr "انتهت فترة البيع" @@ -29633,7 +29913,7 @@ msgstr "انتهت فترة البيع" #: pretix/presale/templates/pretixpresale/fragment_calendar.html:119 #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:125 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:88 -#: pretix/presale/views/widget.py:515 +#: pretix/presale/views/widget.py:518 msgid "Soon" msgstr "هكذا" @@ -29722,7 +30002,7 @@ msgstr "تم تحديث ترتيب العناصر." #: pretix/control/views/discounts.py:260 pretix/control/views/item.py:197 #: pretix/control/views/item.py:409 pretix/control/views/item.py:543 #: pretix/control/views/organizer.py:2641 -#: pretix/control/views/organizer.py:3702 +#: pretix/control/views/organizer.py:3737 #, fuzzy #| msgid "Some of the provided question ids are invalid." msgid "Some of the provided object ids are invalid." @@ -29734,7 +30014,7 @@ msgstr "بعض معرفات السؤال المقدمة غير صالحة." msgid "Not all discounts have been selected." msgstr "تم حذف السؤال." -#: pretix/control/views/event.py:463 +#: pretix/control/views/event.py:464 #, fuzzy #| msgid "You do not have permission to perform this action." msgid "" @@ -29742,55 +30022,55 @@ msgid "" "enabled for the entire organizer account." msgstr "ليس لديك إذن لتنفيذ هذا الإجراء." -#: pretix/control/views/event.py:480 pretix/control/views/organizer.py:717 +#: pretix/control/views/event.py:481 pretix/control/views/organizer.py:717 #, python-brace-format msgid "The plugin {} is now active, you can configure it here:" msgstr "" -#: pretix/control/views/event.py:489 pretix/control/views/organizer.py:726 +#: pretix/control/views/event.py:490 pretix/control/views/organizer.py:726 #, fuzzy, python-brace-format #| msgid "The selected ticket shop is currently not available." msgid "The plugin {} is now active." msgstr "متجر التذاكر المختار غير متوفر حاليا." -#: pretix/control/views/event.py:554 +#: pretix/control/views/event.py:555 msgid "" "This payment provider does not exist or the respective plugin is disabled." msgstr "عدم وجود هذا مزود خدمة الدفع أو تعطيل البرنامج المساعد المعني." -#: pretix/control/views/event.py:861 pretix/control/views/organizer.py:362 +#: pretix/control/views/event.py:862 pretix/control/views/organizer.py:362 #: pretix/control/views/vouchers.py:562 msgid "invalid item" msgstr "البند غير صالح" -#: pretix/control/views/event.py:948 +#: pretix/control/views/event.py:949 #, fuzzy, python-format #| msgid "Your order: {code}" msgid "Your order: %(code)s" msgstr "طلبك هو: {code}" -#: pretix/control/views/event.py:957 +#: pretix/control/views/event.py:958 msgid "Unknown email renderer." msgstr "غير معروف العارض البريد الإلكتروني." -#: pretix/control/views/event.py:973 pretix/control/views/orders.py:687 +#: pretix/control/views/event.py:974 pretix/control/views/orders.py:701 #: pretix/presale/views/order.py:1177 pretix/presale/views/order.py:1184 msgid "You requested an invalid ticket output type." msgstr "لقد طلبت صالح نوع الانتاج التذاكر." -#: pretix/control/views/event.py:1121 +#: pretix/control/views/event.py:1122 msgid "Your shop is live now!" msgstr "متجرك مباشرة الآن!" -#: pretix/control/views/event.py:1129 +#: pretix/control/views/event.py:1130 msgid "We've taken your shop down. You can re-enable it whenever you want!" msgstr "لقد اتخذنا متجر أسفل الخاص بك. يمكنك إعادة تمكينها وقتما تشاء!" -#: pretix/control/views/event.py:1137 +#: pretix/control/views/event.py:1138 msgid "Your shop is now in test mode!" msgstr "متجر الخاص بك هو الآن في وضع الاختبار!" -#: pretix/control/views/event.py:1154 +#: pretix/control/views/event.py:1158 msgid "" "An order could not be deleted as some constraints (e.g. data created by plug-" "ins) do not allow it." @@ -29798,19 +30078,19 @@ msgstr "" "لا يمكن حذف أمر وبعض القيود (مثل البيانات التي تم إنشاؤها من قبل المكونات " "الإضافية) لا تسمح بذلك." -#: pretix/control/views/event.py:1160 +#: pretix/control/views/event.py:1164 msgid "We've disabled test mode for you. Let's sell some real tickets!" msgstr "لقد تعطيل وضع الاختبار بالنسبة لك. دعونا بيع بعض التذاكر الحقيقية!" -#: pretix/control/views/event.py:1182 +#: pretix/control/views/event.py:1186 msgid "This event can not be deleted." msgstr "لا يمكن حذف هذا الحدث." -#: pretix/control/views/event.py:1205 +#: pretix/control/views/event.py:1209 msgid "The event has been deleted." msgstr "الحدث تم الغائه." -#: pretix/control/views/event.py:1208 +#: pretix/control/views/event.py:1212 msgid "" "The event could not be deleted as some constraints (e.g. data created by " "plug-ins) do not allow it." @@ -29818,47 +30098,47 @@ msgstr "" "لا يمكن حذف الحدث عن بعض القيود (مثل البيانات التي تم إنشاؤها من قبل " "المكونات الإضافية) لا تسمح بذلك." -#: pretix/control/views/event.py:1224 +#: pretix/control/views/event.py:1228 #, python-brace-format msgid "" "Specifically, the following plugins still contain data depends on this " "event: {plugin_names}" msgstr "" -#: pretix/control/views/event.py:1304 pretix/control/views/orders.py:767 +#: pretix/control/views/event.py:1308 pretix/control/views/orders.py:781 msgid "The comment has been updated." msgstr "تم تحديث التعليق." -#: pretix/control/views/event.py:1306 pretix/control/views/orders.py:769 +#: pretix/control/views/event.py:1310 pretix/control/views/orders.py:783 msgid "Could not update the comment." msgstr "لا يمكن تحديث للتعليق." -#: pretix/control/views/event.py:1334 pretix/control/views/main.py:362 +#: pretix/control/views/event.py:1338 pretix/control/views/main.py:362 msgid "VAT" msgstr "ضريبة" -#: pretix/control/views/event.py:1370 +#: pretix/control/views/event.py:1374 msgid "The new tax rule has been created." msgstr "تم إنشاء القاعدة الضريبية الجديدة." -#: pretix/control/views/event.py:1393 pretix/control/views/event.py:1456 -#: pretix/control/views/event.py:1502 +#: pretix/control/views/event.py:1397 pretix/control/views/event.py:1460 +#: pretix/control/views/event.py:1506 msgid "The requested tax rule does not exist." msgstr "عدم وجود حكم الضرائب المطلوبة." -#: pretix/control/views/event.py:1511 +#: pretix/control/views/event.py:1515 msgid "The selected tax rule has been deleted." msgstr "تم حذف قاعدة الضريبة المحدد." -#: pretix/control/views/event.py:1513 +#: pretix/control/views/event.py:1517 msgid "The selected tax rule can not be deleted." msgstr "لا يمكن حذف القاعدة الضريبية المحدد." -#: pretix/control/views/event.py:1564 +#: pretix/control/views/event.py:1568 msgid "Your event is not empty, you need to set it up manually." msgstr "لم يتم تفريغ هذا الحدث الخاص بك، تحتاج إلى إعداده يدويا." -#: pretix/control/views/event.py:1699 +#: pretix/control/views/event.py:1703 msgid "" "Your changes have been saved. You can now go on with looking at the details " "or take your event live to start selling!" @@ -29866,11 +30146,11 @@ msgstr "" "تم حفظ التغييرات. يمكنك الذهاب الآن فصاعدا مع النظر في التفاصيل أو يأخذ " "الحدث على الهواء مباشرة لبدء بيع!" -#: pretix/control/views/event.py:1720 +#: pretix/control/views/event.py:1724 msgid "Regular ticket" msgstr "تذكرة العادية" -#: pretix/control/views/event.py:1725 +#: pretix/control/views/event.py:1729 msgid "Reduced ticket" msgstr "تذكرة مخفضة" @@ -29977,7 +30257,7 @@ msgstr "تم تحديث ترتيب الفئات." #: pretix/control/views/item.py:412 pretix/control/views/item.py:546 #: pretix/control/views/organizer.py:2644 -#: pretix/control/views/organizer.py:3705 +#: pretix/control/views/organizer.py:3740 #, fuzzy #| msgid "The question has been deleted." msgid "Not all objects have been selected." @@ -30235,33 +30515,33 @@ msgstr "" msgid "Access for the selected application has been revoked." msgstr "تم إبطال وصول التطبيق المحدد." -#: pretix/control/views/orders.py:196 +#: pretix/control/views/orders.py:197 #, fuzzy #| msgid "We could not save your changes. See below for details." msgid "We could not process your input. See below for details." msgstr "لم نتمكن من حفظ التغييرات الخاصة بك. انظر أدناه للحصول على التفاصيل." -#: pretix/control/views/orders.py:269 +#: pretix/control/views/orders.py:270 #, python-brace-format msgid "" "Successfully executed the action \"{label}\" on {success} of {total} orders." msgstr "" -#: pretix/control/views/orders.py:689 pretix/presale/views/order.py:114 +#: pretix/control/views/orders.py:703 pretix/presale/views/order.py:114 #: pretix/presale/views/order.py:382 pretix/presale/views/order.py:1006 #: pretix/presale/views/order.py:1186 pretix/presale/views/order.py:1794 msgid "Unknown order code or not authorized to access this order." msgstr "كود أجل غير معروف أو غير مخول للوصول إلى هذا النظام." -#: pretix/control/views/orders.py:691 pretix/presale/views/order.py:1191 +#: pretix/control/views/orders.py:705 pretix/presale/views/order.py:1191 msgid "Ticket download is not enabled for this product." msgstr "لم يتم تمكين حمل تذكرة لهذا المنتج." -#: pretix/control/views/orders.py:803 +#: pretix/control/views/orders.py:817 msgid "The order has been deleted." msgstr "تم حذف هذا الأمر." -#: pretix/control/views/orders.py:810 +#: pretix/control/views/orders.py:824 msgid "" "The order could not be deleted as some constraints (e.g. data created by " "plug-ins) do not allow it." @@ -30269,55 +30549,55 @@ msgstr "" "لا يمكن حذف النظام كما بعض القيود (مثل البيانات التي تم إنشاؤها من قبل " "المكونات الإضافية) لا تسمح بذلك." -#: pretix/control/views/orders.py:818 +#: pretix/control/views/orders.py:832 msgid "Only orders created in test mode can be deleted." msgstr "أوامر الوحيدة التي تم إنشاؤها في وضع الاختبار يمكن حذفها." -#: pretix/control/views/orders.py:839 +#: pretix/control/views/orders.py:853 msgid "The order has been denied and is therefore now canceled." msgstr "تم رفض الطلب، وبالتالي يتم إلغاء الآن." -#: pretix/control/views/orders.py:879 +#: pretix/control/views/orders.py:893 msgid "This payment has been canceled." msgstr "تم إلغاء هذا الدفع." -#: pretix/control/views/orders.py:881 +#: pretix/control/views/orders.py:895 msgid "This payment can not be canceled at the moment." msgstr "لا يمكن إلغاء هذه الدفعة في الوقت الراهن." -#: pretix/control/views/orders.py:907 +#: pretix/control/views/orders.py:921 msgid "The refund has been canceled." msgstr "تم إلغاء استرداد." -#: pretix/control/views/orders.py:909 +#: pretix/control/views/orders.py:923 msgid "This refund can not be canceled at the moment." msgstr "لا يمكن إلغاء هذا رد في الوقت الراهن." -#: pretix/control/views/orders.py:943 +#: pretix/control/views/orders.py:957 msgid "The refund has been processed." msgstr "تم معالجة استرداد." -#: pretix/control/views/orders.py:945 pretix/control/views/orders.py:971 +#: pretix/control/views/orders.py:959 pretix/control/views/orders.py:985 msgid "This refund can not be processed at the moment." msgstr "لا يمكن معالجة هذا رد في الوقت الراهن." -#: pretix/control/views/orders.py:969 +#: pretix/control/views/orders.py:983 msgid "The refund has been marked as done." msgstr "تم وضع علامة على المبلغ في القيام به." -#: pretix/control/views/orders.py:995 +#: pretix/control/views/orders.py:1009 #, fuzzy #| msgid "The device has been verified and can now be used." msgid "The request has been removed. If you want, you can now inform the user." msgstr "تم التحقق من الجهاز ويمكن الآن أن تستخدم." -#: pretix/control/views/orders.py:1002 +#: pretix/control/views/orders.py:1016 #, fuzzy #| msgid "Cancellation fee" msgid "Your cancellation request" msgstr "رسوم الإلغاء" -#: pretix/control/views/orders.py:1003 +#: pretix/control/views/orders.py:1017 #, python-brace-format msgid "" "Hello,\n" @@ -30333,41 +30613,41 @@ msgstr "" "\n" "فريق فعاليتك{event}" -#: pretix/control/views/orders.py:1058 +#: pretix/control/views/orders.py:1072 msgid "The payment has been marked as complete." msgstr "تم وضع علامة الدفع على النحو الكامل." -#: pretix/control/views/orders.py:1060 +#: pretix/control/views/orders.py:1074 msgid "This payment can not be confirmed at the moment." msgstr "لا يمكن تأكيد هذه الدفعة في الوقت الراهن." -#: pretix/control/views/orders.py:1151 +#: pretix/control/views/orders.py:1165 msgid "" "The refund was prevented due to a refund already being processed at the same " "time. Please have a look at the order details and check if your refund is " "still necessary." msgstr "" -#: pretix/control/views/orders.py:1256 +#: pretix/control/views/orders.py:1270 #, fuzzy #| msgid "You entered an order that could not be found." msgid "You entered an order in an event with a different currency." msgstr "لقد أدخلت طلبا لا يمكن العثور عليه." -#: pretix/control/views/orders.py:1307 +#: pretix/control/views/orders.py:1321 msgid "" "You can not refund more than the amount of a payment that is not yet " "refunded." msgstr "لا يمكنك استرداد أكثر من مبلغ الدفعة التي لم يتم ردها حتى الان." -#: pretix/control/views/orders.py:1312 +#: pretix/control/views/orders.py:1326 msgid "" "You selected a partial refund for a payment method that only supports full " "refunds." msgstr "" "لقد حددت استرداد جزئي لطريقة الدفع التي تدعم فقط المبالغ المستردة كامل." -#: pretix/control/views/orders.py:1342 +#: pretix/control/views/orders.py:1356 #, python-brace-format msgid "" "One of the refunds failed to be processed. You should retry to refund in a " @@ -30376,12 +30656,12 @@ msgstr "" "فشل في معالجتها واحدة من المبالغ المستردة. يجب عليك إعادة المحاولة لاسترداد " "بطريقة مختلفة. وكانت رسالة الخطأ: {}" -#: pretix/control/views/orders.py:1348 +#: pretix/control/views/orders.py:1362 #, python-brace-format msgid "A refund of {} has been processed." msgstr "وقد تم تجهيز واسترداد {}." -#: pretix/control/views/orders.py:1352 +#: pretix/control/views/orders.py:1366 #, python-brace-format msgid "" "A refund of {} has been saved, but not yet fully executed. You can mark it " @@ -30390,16 +30670,16 @@ msgstr "" "تم حفظ استرداد {}، ولكن لم يتم تنفيذها بالكامل. يمكنك وضع علامة على أنها " "كاملة أدناه." -#: pretix/control/views/orders.py:1381 +#: pretix/control/views/orders.py:1395 msgid "" "A new gift card was created. You can now send the user their gift card code." msgstr "" -#: pretix/control/views/orders.py:1389 +#: pretix/control/views/orders.py:1403 msgid "Your gift card code" msgstr "" -#: pretix/control/views/orders.py:1391 +#: pretix/control/views/orders.py:1405 #, python-brace-format msgid "" "Hello,\n" @@ -30412,15 +30692,15 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/control/views/orders.py:1402 +#: pretix/control/views/orders.py:1416 msgid "The refunds you selected do not match the selected total refund amount." msgstr "المبالغ المستردة التي حددتها لا تتطابق إجمالي استرداد المبلغ المحدد." -#: pretix/control/views/orders.py:1532 +#: pretix/control/views/orders.py:1546 msgid "The payment has been created successfully." msgstr "تم إنشاء دفع بنجاح." -#: pretix/control/views/orders.py:1546 +#: pretix/control/views/orders.py:1560 msgid "" "The order has been canceled. You can now select how you want to transfer the " "money back to the user." @@ -30428,22 +30708,22 @@ msgstr "" "تم إلغاء هذا الأمر. يمكنك الآن تحديد كيف تريد لنقل الجزء الخلفي المال " "للمستخدم." -#: pretix/control/views/orders.py:1617 pretix/control/views/orders.py:1621 +#: pretix/control/views/orders.py:1631 pretix/control/views/orders.py:1635 msgid "No VAT ID specified." msgstr "يتم تحديد معرف ضريبة القيمة المضافة." -#: pretix/control/views/orders.py:1625 +#: pretix/control/views/orders.py:1639 msgid "No country specified." msgstr "تحديد أي بلد." -#: pretix/control/views/orders.py:1629 +#: pretix/control/views/orders.py:1643 #, fuzzy #| msgid "" #| "VAT ID could not be checked since a non-EU country has been specified." msgid "VAT ID could not be checked since this country is not supported." msgstr "ولم يتسن التحقق VAT ID منذ تم تحديد بلد خارج الاتحاد الأوروبي." -#: pretix/control/views/orders.py:1648 +#: pretix/control/views/orders.py:1662 msgid "" "The VAT ID could not be checked, as the VAT checking service of the country " "is currently not available." @@ -30451,74 +30731,74 @@ msgstr "" "ولم يتسن التحقق من هوية ضريبة القيمة المضافة، مثل خدمة فحص ضريبة القيمة " "المضافة من البلاد غير متوفرة حاليا." -#: pretix/control/views/orders.py:1651 +#: pretix/control/views/orders.py:1665 msgid "This VAT ID is valid." msgstr "هذا ID VAT صالح." -#: pretix/control/views/orders.py:1665 pretix/control/views/orders.py:1699 -#: pretix/control/views/orders.py:1731 +#: pretix/control/views/orders.py:1679 pretix/control/views/orders.py:1713 +#: pretix/control/views/orders.py:1745 msgid "Unknown invoice." msgstr "فاتورة غير معروفة." -#: pretix/control/views/orders.py:1668 +#: pretix/control/views/orders.py:1682 msgid "Invoices may not be changed after they are created." msgstr "" -#: pretix/control/views/orders.py:1670 +#: pretix/control/views/orders.py:1684 msgid "Invoices may not be changed after they are transmitted." msgstr "" -#: pretix/control/views/orders.py:1672 pretix/control/views/orders.py:1734 +#: pretix/control/views/orders.py:1686 pretix/control/views/orders.py:1748 msgid "The invoice has already been canceled." msgstr "وقد تم بالفعل إلغاء الفاتورة." -#: pretix/control/views/orders.py:1674 +#: pretix/control/views/orders.py:1688 #, fuzzy #| msgid "The invoice has already been canceled." msgid "The invoice file has already been exported." msgstr "وقد تم بالفعل إلغاء الفاتورة." -#: pretix/control/views/orders.py:1676 +#: pretix/control/views/orders.py:1690 #, fuzzy #| msgid "The invoice has been regenerated." msgid "The invoice file is too old to be regenerated." msgstr "تم إعادة إنشاء الفاتورة." -#: pretix/control/views/orders.py:1678 pretix/control/views/orders.py:1736 +#: pretix/control/views/orders.py:1692 pretix/control/views/orders.py:1750 msgid "The invoice has been cleaned of personal data." msgstr "وقد تم تنظيف الفاتورة البيانات الشخصية." -#: pretix/control/views/orders.py:1703 +#: pretix/control/views/orders.py:1717 msgid "" "The invoice is currently being transmitted. You can start a new attempt " "after the current one has been completed." msgstr "" -#: pretix/control/views/orders.py:1710 +#: pretix/control/views/orders.py:1724 #, fuzzy #| msgid "The invoice has been cleaned of personal data." msgid "The invoice has been scheduled for retransmission." msgstr "وقد تم تنظيف الفاتورة البيانات الشخصية." -#: pretix/control/views/orders.py:1744 +#: pretix/control/views/orders.py:1758 #, fuzzy #| msgid "The invoice has already been canceled." msgid "The invoice has been canceled." msgstr "وقد تم بالفعل إلغاء الفاتورة." -#: pretix/control/views/orders.py:1783 +#: pretix/control/views/orders.py:1797 msgid "The email has been queued to be sent." msgstr "وقد تم في قائمة الانتظار البريد الإلكتروني لإرسالها." -#: pretix/control/views/orders.py:1807 pretix/presale/views/order.py:1365 +#: pretix/control/views/orders.py:1821 pretix/presale/views/order.py:1365 msgid "This invoice has not been found" msgstr "لم يتم العثور على هذه الفاتورة" -#: pretix/control/views/orders.py:1814 pretix/presale/views/order.py:1372 +#: pretix/control/views/orders.py:1828 pretix/presale/views/order.py:1372 msgid "The invoice file is no longer stored on the server." msgstr "لم يعد تخزين الملف فاتورة على الخادم." -#: pretix/control/views/orders.py:1819 pretix/presale/views/order.py:1377 +#: pretix/control/views/orders.py:1833 pretix/presale/views/order.py:1377 msgid "" "The invoice file has not yet been generated, we will generate it for you " "now. Please try again in a few seconds." @@ -30526,85 +30806,85 @@ msgstr "" "لم يتم إنشاء ملف الفاتورة، وسوف تولد لانها لكم الآن. يرجى المحاولة مرة أخرى " "في بضع ثوان." -#: pretix/control/views/orders.py:1847 +#: pretix/control/views/orders.py:1861 msgid "The payment term has been changed." msgstr "تم تغيير مصطلح الدفع." -#: pretix/control/views/orders.py:1852 pretix/control/views/orders.py:1909 +#: pretix/control/views/orders.py:1866 pretix/control/views/orders.py:1923 msgid "" "We were not able to process the request completely as the server was too " "busy." msgstr "لم نكن قادرين على معالجة الطلب تماما كما كان الملقم مشغول جدا." -#: pretix/control/views/orders.py:1860 +#: pretix/control/views/orders.py:1874 msgid "This action is only allowed for pending orders." msgstr "يسمح هذا الإجراء فقط لانتظار أوامر." -#: pretix/control/views/orders.py:1915 +#: pretix/control/views/orders.py:1929 #, fuzzy #| msgid "This action is only allowed for pending orders." msgid "This action is only allowed for canceled orders." msgstr "يسمح هذا الإجراء فقط لانتظار أوامر." -#: pretix/control/views/orders.py:2174 pretix/presale/views/order.py:1661 +#: pretix/control/views/orders.py:2188 pretix/presale/views/order.py:1661 msgid "An error occurred. Please see the details below." msgstr "حدث خطأ. يرجى الاطلاع على التفاصيل أدناه." -#: pretix/control/views/orders.py:2182 +#: pretix/control/views/orders.py:2196 msgid "The order has been changed and the user has been notified." msgstr "تم تغيير النظام وتم إعلام المستخدم." -#: pretix/control/views/orders.py:2184 pretix/control/views/orders.py:2320 -#: pretix/control/views/orders.py:2357 pretix/presale/views/order.py:1697 +#: pretix/control/views/orders.py:2198 pretix/control/views/orders.py:2334 +#: pretix/control/views/orders.py:2371 pretix/presale/views/order.py:1697 msgid "The order has been changed." msgstr "تم تغيير النظام." -#: pretix/control/views/orders.py:2211 pretix/presale/checkoutflow.py:963 +#: pretix/control/views/orders.py:2225 pretix/presale/checkoutflow.py:964 #: pretix/presale/views/order.py:845 pretix/presale/views/order.py:981 msgid "" "We had difficulties processing your input. Please review the errors below." msgstr "كان لدينا صعوبات معالجة المدخلات الخاصة بك. يرجى مراجعة الأخطاء أدناه." -#: pretix/control/views/orders.py:2322 +#: pretix/control/views/orders.py:2336 msgid "Nothing about the order had to be changed." msgstr "كان شيئا عن هذا الأمر يجب أن يتغير." -#: pretix/control/views/orders.py:2403 pretix/plugins/sendmail/views.py:176 +#: pretix/control/views/orders.py:2417 pretix/plugins/sendmail/views.py:176 msgid "We could not send the email. See below for details." msgstr "لم نتمكن من إرسال البريد الإلكتروني. انظر أدناه للحصول على التفاصيل." -#: pretix/control/views/orders.py:2419 pretix/control/views/orders.py:2483 +#: pretix/control/views/orders.py:2433 pretix/control/views/orders.py:2497 #: pretix/plugins/sendmail/views.py:204 pretix/plugins/sendmail/views.py:671 #, python-brace-format msgid "Subject: {subject}" msgstr "الموضوع: {subject}" -#: pretix/control/views/orders.py:2437 pretix/control/views/orders.py:2502 +#: pretix/control/views/orders.py:2451 pretix/control/views/orders.py:2516 #, python-brace-format msgid "Your message has been queued and will be sent to {}." msgstr "وقد اصطف رسالتك وسوف يتم ارسالهم الى {}." -#: pretix/control/views/orders.py:2555 pretix/presale/views/order.py:1151 +#: pretix/control/views/orders.py:2569 pretix/presale/views/order.py:1151 msgid "" "This link is no longer valid. Please go back, refresh the page, and try " "again." msgstr "هذا الرابط لم يعد صالحا. يرجى العودة، بتحديث الصفحة وحاول مرة أخرى." -#: pretix/control/views/orders.py:2636 +#: pretix/control/views/orders.py:2650 msgid "There is no order with the given order code." msgstr "لا يوجد أي ترتيب مع رمز ترتيب معين." -#: pretix/control/views/orders.py:2745 pretix/control/views/organizer.py:2084 +#: pretix/control/views/orders.py:2759 pretix/control/views/organizer.py:2084 msgid "The selected exporter was not found." msgstr "لم يتم العثور على مصدر المحدد." -#: pretix/control/views/orders.py:2755 pretix/control/views/organizer.py:2094 +#: pretix/control/views/orders.py:2769 pretix/control/views/organizer.py:2094 msgid "There was a problem processing your input. See below for error details." msgstr "" "كانت هناك مشكلة معالجة المدخلات الخاصة بك. انظر أدناه للحصول على تفاصيل " "الخطأ." -#: pretix/control/views/orders.py:2792 pretix/control/views/organizer.py:2130 +#: pretix/control/views/orders.py:2806 pretix/control/views/organizer.py:2130 #, fuzzy #| msgid "You do not have permission to perform this action." msgid "" @@ -30612,7 +30892,7 @@ msgid "" "therefore you cannot change it." msgstr "ليس لديك إذن لتنفيذ هذا الإجراء." -#: pretix/control/views/orders.py:2801 pretix/control/views/organizer.py:2139 +#: pretix/control/views/orders.py:2815 pretix/control/views/organizer.py:2139 #, fuzzy #| msgid "You do not have permission to perform this action." msgid "" @@ -30620,24 +30900,24 @@ msgid "" "therefore you cannot schedule it." msgstr "ليس لديك إذن لتنفيذ هذا الإجراء." -#: pretix/control/views/orders.py:2817 pretix/control/views/organizer.py:2155 +#: pretix/control/views/orders.py:2831 pretix/control/views/organizer.py:2155 #, python-brace-format msgid "" "Your export schedule has been saved. The next export will start around " "{datetime}." msgstr "" -#: pretix/control/views/orders.py:2822 pretix/control/views/organizer.py:2160 +#: pretix/control/views/orders.py:2836 pretix/control/views/organizer.py:2160 msgid "Your export schedule has been saved, but no next export is planned." msgstr "" -#: pretix/control/views/orders.py:2867 pretix/control/views/organizer.py:2206 +#: pretix/control/views/orders.py:2881 pretix/control/views/organizer.py:2206 #, fuzzy, python-brace-format #| msgid "Export date" msgid "Export: {title}" msgstr "تاريخ التصدير" -#: pretix/control/views/orders.py:2868 pretix/control/views/organizer.py:2208 +#: pretix/control/views/orders.py:2882 pretix/control/views/organizer.py:2208 #, python-brace-format msgid "" "Hello,\n" @@ -30645,27 +30925,27 @@ msgid "" "attached to this email, you can find a new scheduled report for {name}." msgstr "" -#: pretix/control/views/orders.py:2974 pretix/control/views/organizer.py:2342 +#: pretix/control/views/orders.py:2988 pretix/control/views/organizer.py:2342 msgid "" "Your export is queued to start soon. The results will be send via email. " "Depending on system load and type and size of export, this may take a few " "minutes." msgstr "" -#: pretix/control/views/orders.py:3061 pretix/control/views/orders.py:3142 +#: pretix/control/views/orders.py:3075 pretix/control/views/orders.py:3156 #, fuzzy #| msgid "The order has been canceled." msgid "All orders have been canceled." msgstr "تم إلغاء هذا الأمر." -#: pretix/control/views/orders.py:3063 pretix/control/views/orders.py:3144 +#: pretix/control/views/orders.py:3077 pretix/control/views/orders.py:3158 #, python-brace-format msgid "" "The orders have been canceled. An error occurred with {count} orders, please " "check all uncanceled orders." msgstr "" -#: pretix/control/views/orders.py:3091 pretix/control/views/orders.py:3165 +#: pretix/control/views/orders.py:3105 pretix/control/views/orders.py:3179 #, fuzzy #| msgid "Your input was invalid, please try again." msgid "Your input was not valid." @@ -30747,11 +31027,11 @@ msgstr "تم إنشاء فريق. يمكنك الآن إضافة أعضاء لل #: pretix/control/views/organizer.py:2724 #: pretix/control/views/organizer.py:2759 #: pretix/control/views/organizer.py:2833 -#: pretix/control/views/organizer.py:2875 -#: pretix/control/views/organizer.py:2955 -#: pretix/control/views/organizer.py:3005 -#: pretix/control/views/organizer.py:3567 -#: pretix/control/views/organizer.py:3611 +#: pretix/control/views/organizer.py:2877 +#: pretix/control/views/organizer.py:2957 +#: pretix/control/views/organizer.py:3007 +#: pretix/control/views/organizer.py:3602 +#: pretix/control/views/organizer.py:3646 msgid "Your changes could not be saved." msgstr "لا يمكن حفظ التغييرات الخاصة بك." @@ -30940,9 +31220,9 @@ msgid "The order of properties has been updated." msgstr "تم تحديث ترتيب العناصر." #: pretix/control/views/organizer.py:2789 -#: pretix/control/views/organizer.py:2905 -#: pretix/control/views/organizer.py:3035 -#: pretix/control/views/organizer.py:3304 +#: pretix/control/views/organizer.py:2907 +#: pretix/control/views/organizer.py:3037 +#: pretix/control/views/organizer.py:3306 #, fuzzy #| msgid "The selected product has been deleted." msgid "The selected object has been deleted." @@ -30954,14 +31234,14 @@ msgstr "تم حذف المنتج المحدد." msgid "The provider has been created." msgstr "تم إنشاء هذا الأمر." -#: pretix/control/views/organizer.py:2944 +#: pretix/control/views/organizer.py:2946 #, python-brace-format msgid "" "The SSO client has been created. Please note down the following client " "secret, it will never be shown again: {secret}" msgstr "" -#: pretix/control/views/organizer.py:2994 +#: pretix/control/views/organizer.py:2996 #, fuzzy, python-brace-format #| msgid "" #| "Your changes have been saved. Please note that it can take a short period " @@ -30973,7 +31253,7 @@ msgstr "" "تم حفظ التغييرات. يرجى ملاحظة أنه يمكن أن يستغرق فترة قصيرة من الزمن حتى " "تصبح التغييرات نشطة." -#: pretix/control/views/organizer.py:3104 +#: pretix/control/views/organizer.py:3106 #, fuzzy #| msgid "" #| "We've sent you an email with further instructions on resetting your " @@ -30985,25 +31265,25 @@ msgstr "" "لقد أرسلنا إليك بريدا إلكترونيا يحتوي على مزيد من الإرشادات حول إعادة تعيين " "كلمة المرور الخاصة بك." -#: pretix/control/views/organizer.py:3369 +#: pretix/control/views/organizer.py:3371 #, fuzzy #| msgid "This user has been anonymized." msgid "The customer account has been anonymized." msgstr "تم طمس هويتها لهذا المستخدم." -#: pretix/control/views/organizer.py:3639 +#: pretix/control/views/organizer.py:3674 #, fuzzy #| msgid "This organizer can not be deleted." msgid "This channel can not be deleted." msgstr "لا يمكن حذف هذا منظم." -#: pretix/control/views/organizer.py:3644 +#: pretix/control/views/organizer.py:3679 #, fuzzy #| msgid "The selected list has been deleted." msgid "The selected sales channel has been deleted." msgstr "تم حذف القائمة المحددة." -#: pretix/control/views/organizer.py:3646 +#: pretix/control/views/organizer.py:3681 #, fuzzy #| msgid "" #| "The event could not be deleted as some constraints (e.g. data created by " @@ -31015,7 +31295,7 @@ msgstr "" "لا يمكن حذف الحدث عن بعض القيود (مثل البيانات التي تم إنشاؤها من قبل " "المكونات الإضافية) لا تسمح بذلك." -#: pretix/control/views/organizer.py:3671 +#: pretix/control/views/organizer.py:3706 #, fuzzy #| msgid "The order of items has been updated." msgid "The order of sales channels has been updated." @@ -31046,17 +31326,18 @@ msgstr "" msgid "The selected data was deleted successfully." msgstr "تم حذف البيانات المحددة بنجاح." -#: pretix/control/views/subevents.py:168 pretix/control/views/subevents.py:530 +#: pretix/control/views/subevents.py:174 pretix/control/views/subevents.py:526 +#: pretix/control/views/subevents.py:595 msgctxt "subevent" msgid "The requested date does not exist." msgstr "عدم وجود تاريخ الطلب." -#: pretix/control/views/subevents.py:172 pretix/control/views/subevents.py:184 +#: pretix/control/views/subevents.py:178 pretix/control/views/subevents.py:190 msgctxt "subevent" msgid "A date can not be deleted if orders already have been placed." msgstr "لا يمكن حذف موعد إذا أوامر بالفعل تم وضعها." -#: pretix/control/views/subevents.py:203 +#: pretix/control/views/subevents.py:209 #, fuzzy #| msgid "" #| "The event could not be deleted as some constraints (e.g. data created by " @@ -31069,22 +31350,22 @@ msgstr "" "لا يمكن حذف الحدث عن بعض القيود (مثل البيانات التي تم إنشاؤها من قبل " "المكونات الإضافية) لا تسمح بذلك." -#: pretix/control/views/subevents.py:207 +#: pretix/control/views/subevents.py:213 msgctxt "subevent" msgid "The selected date has been deleted." msgstr "تم حذف التاريخ المحدد." -#: pretix/control/views/subevents.py:631 +#: pretix/control/views/subevents.py:704 msgctxt "subevent" msgid "The new date has been created." msgstr "تم إنشاء الموعد الجديد." -#: pretix/control/views/subevents.py:708 +#: pretix/control/views/subevents.py:781 msgctxt "subevent" msgid "The selected dates have been disabled." msgstr "تم تعطيل التواريخ المحددة." -#: pretix/control/views/subevents.py:721 +#: pretix/control/views/subevents.py:794 #, fuzzy #| msgctxt "subevent" #| msgid "The selected dates have been disabled." @@ -31092,20 +31373,20 @@ msgctxt "subevent" msgid "The selected dates have been enabled." msgstr "تم تعطيل التواريخ المحددة." -#: pretix/control/views/subevents.py:750 +#: pretix/control/views/subevents.py:823 msgctxt "subevent" msgid "The selected dates have been deleted or disabled." msgstr "تم حذف المواعيد المحددة أو تعطيل." -#: pretix/control/views/subevents.py:938 +#: pretix/control/views/subevents.py:1011 msgid "Please do not create more than 100.000 dates at once." msgstr "" -#: pretix/control/views/subevents.py:967 +#: pretix/control/views/subevents.py:1040 msgid "All dates would be skipped because they conflict with existing dates." msgstr "" -#: pretix/control/views/subevents.py:1103 +#: pretix/control/views/subevents.py:1176 #, python-brace-format msgctxt "subevent" msgid "{} new dates have been created." @@ -31125,6 +31406,12 @@ msgstr "طلب {}" msgid "Voucher {}" msgstr "إيصال {}" +#: pretix/control/views/typeahead.py:179 pretix/control/views/typeahead.py:180 +#, fuzzy +#| msgid "Go to event" +msgid "No event" +msgstr "الذهاب إلى الحدث" + #: pretix/control/views/user.py:169 msgid "The password you entered was invalid, please try again." msgstr "وكانت كلمة المرور التي أدخلتها غير صالحة، يرجى المحاولة مرة أخرى." @@ -35650,17 +35937,17 @@ msgstr "" msgid "Web Check-in" msgstr "التسجيل عبر الويب" -#: pretix/presale/checkoutflow.py:119 +#: pretix/presale/checkoutflow.py:120 msgctxt "checkoutflow" msgid "Step" msgstr "خطوة" -#: pretix/presale/checkoutflow.py:251 +#: pretix/presale/checkoutflow.py:252 msgctxt "checkoutflow" msgid "Customer account" msgstr "حساب العميل" -#: pretix/presale/checkoutflow.py:338 +#: pretix/presale/checkoutflow.py:339 #, fuzzy #| msgid "" #| "We were not able to process your request completely as the server was too " @@ -35669,35 +35956,35 @@ msgid "We failed to process your authentication request, please try again." msgstr "" "لم نتمكن من معالجة طلبك بالكامل لأن الخادم كان مشغولا للغاية. حاول مرة اخرى." -#: pretix/presale/checkoutflow.py:401 +#: pretix/presale/checkoutflow.py:402 msgctxt "checkoutflow" msgid "Membership" msgstr "عضوية" -#: pretix/presale/checkoutflow.py:449 pretix/presale/checkoutflow.py:470 +#: pretix/presale/checkoutflow.py:450 pretix/presale/checkoutflow.py:471 msgid "" "Your cart includes a product that requires an active membership to be " "selected." msgstr "تتضمن سلة التسوق الخاصة بك منتجا يتطلب تحديد عضوية نشطة." -#: pretix/presale/checkoutflow.py:489 +#: pretix/presale/checkoutflow.py:490 msgctxt "checkoutflow" msgid "Add-on products" msgstr "المنتجات الإضافية" -#: pretix/presale/checkoutflow.py:696 pretix/presale/checkoutflow.py:704 +#: pretix/presale/checkoutflow.py:697 pretix/presale/checkoutflow.py:705 #: pretix/presale/views/cart.py:195 pretix/presale/views/cart.py:200 #: pretix/presale/views/cart.py:218 pretix/presale/views/cart.py:231 #: pretix/presale/views/order.py:1582 pretix/presale/views/order.py:1590 msgid "Please enter numbers only." msgstr "الرجاء إدخال أرقام فقط." -#: pretix/presale/checkoutflow.py:778 +#: pretix/presale/checkoutflow.py:779 msgctxt "checkoutflow" msgid "Your information" msgstr "معلوماتك" -#: pretix/presale/checkoutflow.py:1012 +#: pretix/presale/checkoutflow.py:1013 msgid "" "Unfortunately, based on the invoice address you entered, we're not able to " "sell you the selected products for tax-related legal reasons." @@ -35705,7 +35992,7 @@ msgstr "" "للأسف ، بناء على عنوان الفاتورة التي أدخلتها ، لا يمكننا بيع المنتجات " "المحددة لك لأسباب قانونية متعلقة بالضرائب." -#: pretix/presale/checkoutflow.py:1018 +#: pretix/presale/checkoutflow.py:1019 msgid "" "Due to the invoice address you entered, we need to apply a different tax " "rate to your purchase and the price of the products in your cart has changed " @@ -35714,30 +36001,30 @@ msgstr "" "نظرا لعنوان الفاتورة الذي أدخلته ، نحتاج إلى تطبيق معدل ضريبة مختلف على " "مشترياتك وتغير سعر المنتجات في سلة التسوق وفقا لذلك." -#: pretix/presale/checkoutflow.py:1042 pretix/presale/checkoutflow.py:1048 +#: pretix/presale/checkoutflow.py:1043 pretix/presale/checkoutflow.py:1049 msgid "Please enter a valid email address." msgstr "الرجاء قم بإدخال بريد الكتروني صحيح." -#: pretix/presale/checkoutflow.py:1055 +#: pretix/presale/checkoutflow.py:1056 msgid "Please enter your invoicing address." msgstr "الرجاء إدخال عنوان الفواتير الخاص بك." -#: pretix/presale/checkoutflow.py:1059 +#: pretix/presale/checkoutflow.py:1060 msgid "Please enter your name." msgstr "يرجى إدخال اسمك." -#: pretix/presale/checkoutflow.py:1094 pretix/presale/checkoutflow.py:1099 -#: pretix/presale/checkoutflow.py:1104 pretix/presale/checkoutflow.py:1109 -#: pretix/presale/checkoutflow.py:1114 +#: pretix/presale/checkoutflow.py:1095 pretix/presale/checkoutflow.py:1100 +#: pretix/presale/checkoutflow.py:1105 pretix/presale/checkoutflow.py:1110 +#: pretix/presale/checkoutflow.py:1115 msgid "Please fill in answers to all required questions." msgstr "يرجى ملء الإجابات على جميع الأسئلة المطلوبة." -#: pretix/presale/checkoutflow.py:1277 +#: pretix/presale/checkoutflow.py:1278 msgctxt "checkoutflow" msgid "Payment" msgstr "المبلغ" -#: pretix/presale/checkoutflow.py:1388 +#: pretix/presale/checkoutflow.py:1389 #, fuzzy, python-brace-format #| msgid "" #| "Your gift card has been applied, but {} still need to be paid. Please " @@ -35749,28 +36036,28 @@ msgstr "" "تم استعمال بطاقة الهدايا الخاصة بك، ولكن {} لا تزال بحاجة إلى أن يتم سدادها. " "الرجاء اختيار طريقة الدفع." -#: pretix/presale/checkoutflow.py:1413 pretix/presale/views/order.py:733 +#: pretix/presale/checkoutflow.py:1414 pretix/presale/views/order.py:733 msgid "Please select a payment method." msgstr "الرجاء اختيار طريقة الدفع." -#: pretix/presale/checkoutflow.py:1445 pretix/presale/checkoutflow.py:1465 -#: pretix/presale/checkoutflow.py:1476 +#: pretix/presale/checkoutflow.py:1446 pretix/presale/checkoutflow.py:1466 +#: pretix/presale/checkoutflow.py:1477 #, fuzzy #| msgid "Please select a payment method." msgid "Please select a payment method to proceed." msgstr "الرجاء اختيار طريقة الدفع." -#: pretix/presale/checkoutflow.py:1481 pretix/presale/views/order.py:489 +#: pretix/presale/checkoutflow.py:1482 pretix/presale/views/order.py:489 #: pretix/presale/views/order.py:559 msgid "The payment information you entered was incomplete." msgstr "معلومات الدفع التي أدخلتها غير مكتملة." -#: pretix/presale/checkoutflow.py:1526 +#: pretix/presale/checkoutflow.py:1527 msgctxt "checkoutflow" msgid "Review order" msgstr "مراجعة الطلب" -#: pretix/presale/checkoutflow.py:1624 +#: pretix/presale/checkoutflow.py:1625 msgid "You need to check all checkboxes on the bottom of the page." msgstr "تحتاج إلى تحديد جميع مربعات الاختيار أسفل الصفحة." @@ -36771,7 +37058,7 @@ msgstr "محجوزة بالكامل" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:105 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:31 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:69 -#: pretix/presale/views/widget.py:485 +#: pretix/presale/views/widget.py:488 msgid "Reserved" msgstr "محجوز" @@ -37432,7 +37719,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:34 #: pretix/presale/templates/pretixpresale/organizers/index.html:93 -#: pretix/presale/views/widget.py:496 +#: pretix/presale/views/widget.py:499 msgid "More info" msgstr "مزيد من المعلومات" @@ -37466,14 +37753,14 @@ msgid "Choose date to book a ticket" msgstr "اختر تاريخا لحجز تذكرة" #: pretix/presale/templates/pretixpresale/event/index.html:155 -#: pretix/presale/views/waiting.py:146 pretix/presale/views/widget.py:836 +#: pretix/presale/views/waiting.py:146 pretix/presale/views/widget.py:839 #, fuzzy #| msgid "The presale period for this event is over." msgid "The booking period for this event is over." msgstr "انتهت فترة العرض ما قبل البيع لهذه الفعالية." #: pretix/presale/templates/pretixpresale/event/index.html:163 -#: pretix/presale/views/widget.py:838 +#: pretix/presale/views/widget.py:841 #, fuzzy, python-format #| msgid "The presale for this event will start on %(date)s at %(time)s." msgid "The booking period for this event will start on %(date)s at %(time)s." @@ -37625,7 +37912,7 @@ msgstr "" "أيضا رسالة بريد إلكتروني تحتوي على رابط العنوان الذي حددته." #: pretix/presale/templates/pretixpresale/event/order.html:75 -#: pretix/presale/templates/pretixpresale/event/position.html:18 +#: pretix/presale/templates/pretixpresale/event/position.html:19 msgid "View in backend" msgstr "استعرض في لوحة التحكم" @@ -37690,13 +37977,13 @@ msgstr "" "تصل إلى 14 يوما حتى تظهر في كشف حسابك." #: pretix/presale/templates/pretixpresale/event/order.html:199 -#: pretix/presale/templates/pretixpresale/event/position.html:33 +#: pretix/presale/templates/pretixpresale/event/position.html:34 msgid "Change ordered items" msgstr "قم بتغيير العناصر المطلوبة" #: pretix/presale/templates/pretixpresale/event/order.html:200 #: pretix/presale/templates/pretixpresale/event/order.html:291 -#: pretix/presale/templates/pretixpresale/event/position.html:34 +#: pretix/presale/templates/pretixpresale/event/position.html:35 msgid "Change details" msgstr "قم بتغيير التفاصيل" @@ -37991,23 +38278,23 @@ msgstr "" msgid "Scan the QR code with your banking app" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:7 +#: pretix/presale/templates/pretixpresale/event/position.html:8 msgid "Registration details" msgstr "تفاصيل التسجيل" -#: pretix/presale/templates/pretixpresale/event/position.html:10 +#: pretix/presale/templates/pretixpresale/event/position.html:11 msgid "Your registration" msgstr "تسجيلك" -#: pretix/presale/templates/pretixpresale/event/position.html:31 +#: pretix/presale/templates/pretixpresale/event/position.html:32 msgid "Your items" msgstr "البنود الخاصة بك" -#: pretix/presale/templates/pretixpresale/event/position.html:46 +#: pretix/presale/templates/pretixpresale/event/position.html:47 msgid "Additional information" msgstr "معلومة اضافية" -#: pretix/presale/templates/pretixpresale/event/position.html:51 +#: pretix/presale/templates/pretixpresale/event/position.html:52 #, python-format msgid "" "This order is managed for you by %(email)s. Please contact them for any " @@ -38016,14 +38303,14 @@ msgstr "" "هذا الطلب يديره لك%(email)s. يرجى الاتصال بهم لأية أسئلة بخصوص الدفع أو " "الإلغاء أو التغييرات في هذا الطلب." -#: pretix/presale/templates/pretixpresale/event/position.html:63 +#: pretix/presale/templates/pretixpresale/event/position.html:64 #, fuzzy #| msgid "Change your information" msgctxt "action" msgid "Change your ticket" msgstr "قم بتغيير بياناتك" -#: pretix/presale/templates/pretixpresale/event/position.html:68 +#: pretix/presale/templates/pretixpresale/event/position.html:69 #, fuzzy #| msgid "" #| "If you want to make changes to the products you bought, you can click on " @@ -38035,7 +38322,7 @@ msgstr "" "إذا كنت ترغب في إجراء تغييرات على المنتجات التي اشتريتها ، يمكنك النقر فوق " "الزر لتغيير طلبك." -#: pretix/presale/templates/pretixpresale/event/position.html:73 +#: pretix/presale/templates/pretixpresale/event/position.html:74 #, python-format msgid "" "You can only make some changes to this ticket yourself. For additional " @@ -38043,7 +38330,7 @@ msgid "" "(%(email)s)." msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:82 +#: pretix/presale/templates/pretixpresale/event/position.html:83 #: pretix/presale/templates/pretixpresale/event/position_change.html:5 #: pretix/presale/templates/pretixpresale/event/position_change.html:10 #: pretix/presale/templates/pretixpresale/event/position_change_confirm.html:6 @@ -38244,7 +38531,7 @@ msgstr "المتابعة" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:94 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:14 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:58 -#: pretix/presale/views/widget.py:470 +#: pretix/presale/views/widget.py:473 #, fuzzy #| msgid "PDF ticket layout" msgid "Few tickets left" @@ -38254,7 +38541,7 @@ msgstr "نسق تذكرة PDF" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:97 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:19 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:61 -#: pretix/presale/views/widget.py:475 +#: pretix/presale/views/widget.py:478 #, fuzzy #| msgid "Pay now" msgctxt "available_event_in_list" @@ -38269,7 +38556,7 @@ msgstr "ادفع الآن" #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:44 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:63 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:78 -#: pretix/presale/views/widget.py:477 pretix/presale/views/widget.py:500 +#: pretix/presale/views/widget.py:480 pretix/presale/views/widget.py:503 msgid "Book now" msgstr "احجز الآن" @@ -38277,7 +38564,7 @@ msgstr "احجز الآن" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:111 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:38 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:74 -#: pretix/presale/views/widget.py:492 +#: pretix/presale/views/widget.py:495 msgid "Fully booked" msgstr "محجوز بالكامل" @@ -38546,7 +38833,7 @@ msgstr "هل أنت متأكد أنك تريد حذف التواريخ التا #: pretix/presale/templates/pretixpresale/organizers/customer_addresses.html:5 #: pretix/presale/templates/pretixpresale/organizers/customer_addresses.html:11 -#: pretix/presale/views/customer.py:380 +#: pretix/presale/views/customer.py:382 #, fuzzy #| msgid "Address" msgid "Addresses" @@ -38709,7 +38996,7 @@ msgstr "هل أنت متأكد أنك تريد حذف التواريخ التا #: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:5 #: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:11 -#: pretix/presale/views/customer.py:386 +#: pretix/presale/views/customer.py:388 #, fuzzy #| msgid "Attendee address" msgid "Attendee profiles" @@ -38845,7 +39132,7 @@ msgid "The products have been successfully added to your cart." msgstr "تمت إضافة المنتجات بنجاح إلى سلة التسوق الخاصة بك." #: pretix/presale/views/cart.py:626 pretix/presale/views/event.py:543 -#: pretix/presale/views/widget.py:428 +#: pretix/presale/views/widget.py:431 msgid "Tickets for this event cannot be purchased on this sales channel." msgstr "لا يمكن شراء تذاكر هذه الفعالية من قناة المبيعات هذه." @@ -38881,7 +39168,7 @@ msgstr "" "أرسلناه لك لتفعيل حسابك واختيار كلمة مرور." #: pretix/presale/views/customer.py:268 pretix/presale/views/customer.py:271 -#: pretix/presale/views/customer.py:625 pretix/presale/views/customer.py:631 +#: pretix/presale/views/customer.py:627 pretix/presale/views/customer.py:633 msgid "You clicked an invalid link." msgstr "لقد قمت بالنقر فوق رابط غير صالح." @@ -38890,14 +39177,14 @@ msgid "Your new password has been set! You can now use it to log in." msgstr "" "تم تعيين كلمة المرور الجديدة الخاصة بك! يمكنك الآن استخدامها لتسجيل الدخول." -#: pretix/presale/views/customer.py:333 +#: pretix/presale/views/customer.py:335 msgid "" "We've sent you an email with further instructions on resetting your password." msgstr "" "لقد أرسلنا إليك بريدا إلكترونيا يحتوي على مزيد من الإرشادات حول إعادة تعيين " "كلمة المرور الخاصة بك." -#: pretix/presale/views/customer.py:593 +#: pretix/presale/views/customer.py:595 msgid "" "Your changes have been saved. We've sent you an email with a link to update " "your email address. The email address of your account will be changed as " @@ -38907,17 +39194,17 @@ msgstr "" "بريدك الإلكتروني. سيتم تغيير عنوان البريد الإلكتروني الخاص بحسابك بمجرد " "النقر فوق هذا الارتباط." -#: pretix/presale/views/customer.py:646 +#: pretix/presale/views/customer.py:648 msgid "" "Your email address has not been updated since the address is already in use " "for another customer account." msgstr "" -#: pretix/presale/views/customer.py:649 +#: pretix/presale/views/customer.py:651 msgid "Your email address has been updated." msgstr "تم تحديث عنوان بريدك الإلكتروني." -#: pretix/presale/views/customer.py:866 pretix/presale/views/customer.py:877 +#: pretix/presale/views/customer.py:868 pretix/presale/views/customer.py:879 #, python-brace-format msgid "" "We were unable to use your login since the email address {email} is already " @@ -39135,42 +39422,42 @@ msgid "" "else." msgstr "" -#: pretix/presale/views/widget.py:423 +#: pretix/presale/views/widget.py:426 msgid "This ticket shop is currently disabled." msgstr "متجر التذاكر هذا معطل حاليا." -#: pretix/presale/views/widget.py:437 +#: pretix/presale/views/widget.py:440 msgid "The selected date does not exist in this event series." msgstr "التاريخ المحدد غير موجود في سلسلة الفعاليات هذه." -#: pretix/presale/views/widget.py:444 +#: pretix/presale/views/widget.py:447 #, fuzzy #| msgid "The selected seat \"{seat}\" is not available." msgid "The selected date is not available." msgstr "المقعد المحدد \"{seat}\" غير متوفر." -#: pretix/presale/views/widget.py:452 +#: pretix/presale/views/widget.py:455 msgid "This is not an event series." msgstr "هذه ليست سلسلة فعالية." -#: pretix/presale/views/widget.py:508 +#: pretix/presale/views/widget.py:511 #, python-format msgid "from %(start_date)s" msgstr "من %(start_date)s" -#: pretix/settings.py:862 +#: pretix/settings.py:863 msgid "User profile only" msgstr "ملف تعريف المستخدم فقط" -#: pretix/settings.py:863 +#: pretix/settings.py:864 msgid "Read access" msgstr "الوصول إلى القراءة" -#: pretix/settings.py:864 +#: pretix/settings.py:865 msgid "Write access" msgstr "الوصول إلى الكتابة" -#: pretix/settings.py:875 +#: pretix/settings.py:876 msgid "Kosovo" msgstr "كوسوفو" @@ -39435,10 +39722,6 @@ msgstr "كوسوفو" #~ msgid "Invoice email text" #~ msgstr "تاريخ الفاتورة" -#, fuzzy -#~ msgid "Invoice recipient email" -#~ msgstr "مستلم الفاتورة:" - #, fuzzy, python-brace-format #~| msgid "" #~| "Hello,\n" diff --git a/src/pretix/locale/ar/LC_MESSAGES/djangojs.po b/src/pretix/locale/ar/LC_MESSAGES/djangojs.po index 8181df3a0..24750f1de 100644 --- a/src/pretix/locale/ar/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/ar/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-27 14:47+0000\n" +"POT-Creation-Date: 2026-06-28 14:44+0000\n" "PO-Revision-Date: 2021-09-15 11:22+0000\n" "Last-Translator: Mohamed Tawfiq \n" "Language-Team: Arabic \n" "Language-Team: Azerbaijani check this option if you want to use this " "product as an add-on product, but only for fixed bundles!" msgstr "" -#: pretix/base/models/items.py:637 +#: pretix/base/models/items.py:642 msgid "" "If this is checked, the usual cancellation and order change settings of this " "event apply. If this is unchecked, orders containing this product can not be " "canceled by users but only by you." msgstr "" -#: pretix/base/models/items.py:644 +#: pretix/base/models/items.py:649 msgid "" "This product can only be bought if it is added to the cart at least this " "many times. If you keep the field empty or set it to 0, there is no special " "limit for this product." msgstr "" -#: pretix/base/models/items.py:651 +#: pretix/base/models/items.py:656 msgid "" "This product can only be bought at most this many times within one order. If " "you keep the field empty or set it to 0, there is no special limit for this " @@ -5407,7 +5461,7 @@ msgid "" "applies regardless." msgstr "" -#: pretix/base/models/items.py:658 pretix/base/models/items.py:1244 +#: pretix/base/models/items.py:663 pretix/base/models/items.py:1254 msgid "" "If you set this, the check-in app will show a visible warning that this " "ticket requires special attention. You can use this for example for student " @@ -5415,62 +5469,62 @@ msgid "" "needs to be checked." msgstr "" -#: pretix/base/models/items.py:665 pretix/base/models/items.py:1251 +#: pretix/base/models/items.py:670 pretix/base/models/items.py:1261 msgid "" "This text will be shown by the check-in app if a ticket of this type is " "scanned." msgstr "" -#: pretix/base/models/items.py:671 pretix/base/models/items.py:1172 +#: pretix/base/models/items.py:676 pretix/base/models/items.py:1182 msgid "" "If set, this will be displayed next to the current price to show that the " "current price is a discounted one. This is just a cosmetic setting and will " "not actually impact pricing." msgstr "" -#: pretix/base/models/items.py:681 +#: pretix/base/models/items.py:686 msgid "Only sell tickets for this product on the selected sales channels." msgstr "" -#: pretix/base/models/items.py:686 +#: pretix/base/models/items.py:691 msgid "" "When a customer buys this product, they will get a gift card with a value " "corresponding to the product price." msgstr "" -#: pretix/base/models/items.py:696 +#: pretix/base/models/items.py:701 msgid "Allowed membership types" msgstr "" -#: pretix/base/models/items.py:701 pretix/base/models/items.py:1200 +#: pretix/base/models/items.py:706 pretix/base/models/items.py:1210 msgid "" "Do not show this unless the customer is logged in and has a valid " "membership. Be aware that this means it will never be visible in the widget." msgstr "" -#: pretix/base/models/items.py:710 +#: pretix/base/models/items.py:715 msgid "This product creates a membership of type" msgstr "" -#: pretix/base/models/items.py:713 +#: pretix/base/models/items.py:718 msgid "" "The duration of the membership is the same as the duration of the event or " "event series date" msgstr "" -#: pretix/base/models/items.py:717 +#: pretix/base/models/items.py:722 msgid "Membership duration in days" msgstr "" -#: pretix/base/models/items.py:721 +#: pretix/base/models/items.py:726 msgid "Membership duration in months" msgstr "" -#: pretix/base/models/items.py:728 +#: pretix/base/models/items.py:733 msgid "Validity" msgstr "" -#: pretix/base/models/items.py:730 +#: pretix/base/models/items.py:735 msgid "" "When setting up a regular event, or an event series with time slots, you " "typically do NOT need to change this value. The default setting means that " @@ -5482,53 +5536,53 @@ msgid "" "change but keep their current validity." msgstr "" -#: pretix/base/models/items.py:738 pretix/control/forms/item.py:794 +#: pretix/base/models/items.py:743 pretix/control/forms/item.py:794 msgid "Start of validity" msgstr "" -#: pretix/base/models/items.py:739 +#: pretix/base/models/items.py:744 msgid "End of validity" msgstr "" -#: pretix/base/models/items.py:742 +#: pretix/base/models/items.py:747 msgid "Minutes" msgstr "" -#: pretix/base/models/items.py:746 +#: pretix/base/models/items.py:751 msgid "Hours" msgstr "" -#: pretix/base/models/items.py:750 +#: pretix/base/models/items.py:755 msgid "Days" msgstr "" -#: pretix/base/models/items.py:754 +#: pretix/base/models/items.py:759 msgid "Months" msgstr "" -#: pretix/base/models/items.py:757 +#: pretix/base/models/items.py:762 msgid "Customers can select the validity start date" msgstr "" -#: pretix/base/models/items.py:758 +#: pretix/base/models/items.py:763 msgid "If not selected, the validity always starts at the time of purchase." msgstr "" -#: pretix/base/models/items.py:763 +#: pretix/base/models/items.py:768 msgid "Maximum future start" msgstr "" -#: pretix/base/models/items.py:764 +#: pretix/base/models/items.py:769 msgid "The selected start date may only be this many days in the future." msgstr "" -#: pretix/base/models/items.py:770 +#: pretix/base/models/items.py:775 msgid "Reusable media policy" msgstr "" -#: pretix/base/models/items.py:772 +#: pretix/base/models/items.py:777 msgid "" -"If this product should be stored on a re-usable physical medium, you can " +"If this product should be stored on a reusable physical medium, you can " "attach a physical media policy. This is not required for regular tickets, " "which just use a one-time barcode, but only for products like renewable " "season tickets or re-chargeable gift card wristbands. This is an advanced " @@ -5536,70 +5590,77 @@ msgid "" "settings." msgstr "" -#: pretix/base/models/items.py:782 +#: pretix/base/models/items.py:787 msgid "Reusable media type" msgstr "" -#: pretix/base/models/items.py:784 +#: pretix/base/models/items.py:789 msgid "" "Select the type of physical medium that should be used for this product. " "Note that not all media types support all types of products, and not all " "media types are supported across all sales channels or check-in processes." msgstr "" -#: pretix/base/models/items.py:989 +#: pretix/base/models/items.py:994 msgid "" "If you select a reusable media policy, you also need to select a reusable " "media type." msgstr "" -#: pretix/base/models/items.py:993 +#: pretix/base/models/items.py:998 msgid "The selected media type is not enabled in your organizer settings." msgstr "" -#: pretix/base/models/items.py:995 +#: pretix/base/models/items.py:1000 msgid "The selected media type does not support usage for tickets currently." msgstr "" -#: pretix/base/models/items.py:997 +#: pretix/base/models/items.py:1002 msgid "" "The selected media type does not support usage for gift cards currently." msgstr "" -#: pretix/base/models/items.py:999 +#: pretix/base/models/items.py:1005 +msgid "" +"The selected media type requires all media to be registered in the system " +"prior to their usage. Therefore, the selected media policy does not make " +"sense for this media type." +msgstr "" + +#: pretix/base/models/items.py:1009 msgid "" "You currently cannot create gift cards with a reusable media policy. " "Instead, gift cards for some reusable media types can be created or re-" "charged directly at the POS." msgstr "" -#: pretix/base/models/items.py:1007 +#: pretix/base/models/items.py:1017 msgid "" "The maximum number per order can not be lower than the minimum number per " "order." msgstr "" -#: pretix/base/models/items.py:1013 +#: pretix/base/models/items.py:1023 msgid "The item's category must belong to the same event as the item." msgstr "" -#: pretix/base/models/items.py:1018 +#: pretix/base/models/items.py:1028 msgid "The item's tax rule must belong to the same event as the item." msgstr "" -#: pretix/base/models/items.py:1024 +#: pretix/base/models/items.py:1034 msgid "The item's availability cannot end before it starts." msgstr "" -#: pretix/base/models/items.py:1156 +#: pretix/base/models/items.py:1166 msgid "This is shown below the variation name in lists." msgstr "" -#: pretix/base/models/items.py:1183 +#: pretix/base/models/items.py:1193 msgid "Require approval" msgstr "" -#: pretix/base/models/items.py:1185 +#: pretix/base/models/items.py:1195 msgid "" "If this variation is part of an order, the order will be put into an " "\"approval\" state and will need to be confirmed by you before it can be " @@ -5607,101 +5668,101 @@ msgid "" "only available to specific groups." msgstr "" -#: pretix/base/models/items.py:1195 pretix/control/navigation.py:618 +#: pretix/base/models/items.py:1205 pretix/control/navigation.py:618 #: pretix/control/templates/pretixcontrol/organizers/membershiptypes.html:4 #: pretix/control/templates/pretixcontrol/organizers/membershiptypes.html:6 msgid "Membership types" msgstr "" -#: pretix/base/models/items.py:1207 +#: pretix/base/models/items.py:1217 msgid "This variation will not be sold before the given date." msgstr "" -#: pretix/base/models/items.py:1217 +#: pretix/base/models/items.py:1227 msgid "This variation will not be sold after the given date." msgstr "" -#: pretix/base/models/items.py:1225 +#: pretix/base/models/items.py:1235 msgid "Sell on all sales channels the product is sold on" msgstr "" -#: pretix/base/models/items.py:1231 +#: pretix/base/models/items.py:1241 msgid "" "The sales channel selection for the product as a whole takes precedence, so " "if a sales channel is selected here but not on product level, the variation " "will not be available." msgstr "" -#: pretix/base/models/items.py:1236 +#: pretix/base/models/items.py:1246 msgid "Show only if a matching voucher is redeemed." msgstr "" -#: pretix/base/models/items.py:1238 +#: pretix/base/models/items.py:1248 msgid "" "This variation will be hidden from the event page until the user enters a " "voucher that unlocks this variation." msgstr "" -#: pretix/base/models/items.py:1258 +#: pretix/base/models/items.py:1268 #: pretix/control/templates/pretixcontrol/item/create.html:111 msgid "Product variations" msgstr "" -#: pretix/base/models/items.py:1463 +#: pretix/base/models/items.py:1473 msgid "Minimum number" msgstr "" -#: pretix/base/models/items.py:1467 +#: pretix/base/models/items.py:1477 msgid "Maximum number" msgstr "" -#: pretix/base/models/items.py:1471 +#: pretix/base/models/items.py:1481 msgid "Add-Ons are included in the price" msgstr "" -#: pretix/base/models/items.py:1472 +#: pretix/base/models/items.py:1482 msgid "" "If selected, adding add-ons to this ticket is free, even if the add-ons " "would normally cost money individually." msgstr "" -#: pretix/base/models/items.py:1477 +#: pretix/base/models/items.py:1487 msgid "Allow the same product to be selected multiple times" msgstr "" -#: pretix/base/models/items.py:1496 +#: pretix/base/models/items.py:1506 msgid "The add-on's category must belong to the same event as the item." msgstr "" -#: pretix/base/models/items.py:1501 +#: pretix/base/models/items.py:1511 msgid "The item already has an add-on of this category." msgstr "" -#: pretix/base/models/items.py:1506 +#: pretix/base/models/items.py:1516 msgid "The minimum count needs to be equal to or greater than zero." msgstr "" -#: pretix/base/models/items.py:1511 +#: pretix/base/models/items.py:1521 msgid "The maximum count needs to be equal to or greater than zero." msgstr "" -#: pretix/base/models/items.py:1516 +#: pretix/base/models/items.py:1526 msgid "The maximum count needs to be greater than the minimum count." msgstr "" -#: pretix/base/models/items.py:1543 +#: pretix/base/models/items.py:1553 msgid "Bundled item" msgstr "" -#: pretix/base/models/items.py:1549 +#: pretix/base/models/items.py:1559 msgid "Bundled variation" msgstr "" -#: pretix/base/models/items.py:1560 +#: pretix/base/models/items.py:1570 msgid "Designated price part" msgstr "" -#: pretix/base/models/items.py:1561 +#: pretix/base/models/items.py:1571 msgid "" "If set, it will be shown that this bundled item is responsible for the given " "value of the total gross price. This might be important in cases of mixed " @@ -5709,246 +5770,248 @@ msgid "" "the base item's price." msgstr "" -#: pretix/base/models/items.py:1584 +#: pretix/base/models/items.py:1594 msgid "The bundled item must belong to the same event as the item." msgstr "" -#: pretix/base/models/items.py:1586 +#: pretix/base/models/items.py:1596 msgid "A variation needs to be set for this item." msgstr "" -#: pretix/base/models/items.py:1588 +#: pretix/base/models/items.py:1598 msgid "The chosen variation does not belong to this item." msgstr "" -#: pretix/base/models/items.py:1593 +#: pretix/base/models/items.py:1603 msgid "The count needs to be equal to or greater than zero." msgstr "" -#: pretix/base/models/items.py:1648 +#: pretix/base/models/items.py:1658 msgid "Number" msgstr "" -#: pretix/base/models/items.py:1649 +#: pretix/base/models/items.py:1659 msgid "Text (one line)" msgstr "" -#: pretix/base/models/items.py:1650 +#: pretix/base/models/items.py:1660 msgid "Multiline text" msgstr "" -#: pretix/base/models/items.py:1651 +#: pretix/base/models/items.py:1661 msgid "Yes/No" msgstr "" -#: pretix/base/models/items.py:1652 +#: pretix/base/models/items.py:1662 msgid "Choose one from a list" msgstr "" -#: pretix/base/models/items.py:1653 +#: pretix/base/models/items.py:1663 msgid "Choose multiple from a list" msgstr "" -#: pretix/base/models/items.py:1654 +#: pretix/base/models/items.py:1664 msgid "File upload" msgstr "" -#: pretix/base/models/items.py:1657 +#: pretix/base/models/items.py:1667 #: pretix/control/templates/pretixcontrol/event/settings.html:240 msgid "Date and time" msgstr "" -#: pretix/base/models/items.py:1658 +#: pretix/base/models/items.py:1668 msgid "Country code (ISO 3166-1 alpha-2)" msgstr "" -#: pretix/base/models/items.py:1681 pretix/base/models/items.py:1957 +#: pretix/base/models/items.py:1691 pretix/base/models/items.py:1967 #: pretix/base/models/organizer.py:654 msgid "" "The identifier may only contain letters, numbers, dots, dashes, and " "underscores." msgstr "" -#: pretix/base/models/items.py:1686 +#: pretix/base/models/items.py:1696 msgid "Help text" msgstr "" -#: pretix/base/models/items.py:1687 +#: pretix/base/models/items.py:1697 msgid "If the question needs to be explained or clarified, do it here!" msgstr "" -#: pretix/base/models/items.py:1693 +#: pretix/base/models/items.py:1703 msgid "Question type" msgstr "" -#: pretix/base/models/items.py:1697 +#: pretix/base/models/items.py:1707 #: pretix/control/templates/pretixcontrol/items/questions.html:59 msgid "Required question" msgstr "" -#: pretix/base/models/items.py:1704 +#: pretix/base/models/items.py:1714 msgid "This question will be asked to buyers of the selected products" msgstr "" -#: pretix/base/models/items.py:1711 +#: pretix/base/models/items.py:1721 msgid "Ask during check-in instead of in the ticket buying process" msgstr "" -#: pretix/base/models/items.py:1712 pretix/base/models/items.py:1717 +#: pretix/base/models/items.py:1722 pretix/base/models/items.py:1727 msgid "Not supported by all check-in apps for all question types." msgstr "" -#: pretix/base/models/items.py:1716 +#: pretix/base/models/items.py:1726 msgid "Show answer during check-in" msgstr "" -#: pretix/base/models/items.py:1721 +#: pretix/base/models/items.py:1731 #: pretix/control/templates/pretixcontrol/items/questions.html:70 msgid "Hidden question" msgstr "" -#: pretix/base/models/items.py:1722 +#: pretix/base/models/items.py:1732 msgid "This question will only show up in the backend." msgstr "" -#: pretix/base/models/items.py:1726 +#: pretix/base/models/items.py:1736 msgid "Print answer on invoices" msgstr "" -#: pretix/base/models/items.py:1734 pretix/base/models/items.py:1740 -#: pretix/base/models/items.py:1746 +#: pretix/base/models/items.py:1744 pretix/base/models/items.py:1750 +#: pretix/base/models/items.py:1756 msgid "Minimum value" msgstr "" -#: pretix/base/models/items.py:1735 pretix/base/models/items.py:1738 -#: pretix/base/models/items.py:1741 pretix/base/models/items.py:1744 -#: pretix/base/models/items.py:1747 pretix/base/models/items.py:1750 -#: pretix/base/models/items.py:1754 +#: pretix/base/models/items.py:1745 pretix/base/models/items.py:1748 +#: pretix/base/models/items.py:1751 pretix/base/models/items.py:1754 +#: pretix/base/models/items.py:1757 pretix/base/models/items.py:1760 +#: pretix/base/models/items.py:1764 msgid "Currently not supported in our apps and during check-in" msgstr "" -#: pretix/base/models/items.py:1737 pretix/base/models/items.py:1743 -#: pretix/base/models/items.py:1749 +#: pretix/base/models/items.py:1747 pretix/base/models/items.py:1753 +#: pretix/base/models/items.py:1759 msgid "Maximum value" msgstr "" -#: pretix/base/models/items.py:1752 +#: pretix/base/models/items.py:1762 msgid "Maximum length" msgstr "" -#: pretix/base/models/items.py:1758 +#: pretix/base/models/items.py:1768 msgid "Validate file to be a portrait" msgstr "" -#: pretix/base/models/items.py:1759 +#: pretix/base/models/items.py:1769 msgid "" "If checked, files must be images with an aspect ratio of 3:4. This is " "commonly used for photos printed on badges." msgstr "" -#: pretix/base/models/items.py:1814 +#: pretix/base/models/items.py:1824 msgid "An answer to this question is required to proceed." msgstr "" -#: pretix/base/models/items.py:1824 +#: pretix/base/models/items.py:1834 msgid "Invalid input type." msgstr "" -#: pretix/base/models/items.py:1858 +#: pretix/base/models/items.py:1868 msgid "The number is to low." msgstr "" -#: pretix/base/models/items.py:1860 +#: pretix/base/models/items.py:1870 msgid "The number is to high." msgstr "" -#: pretix/base/models/items.py:1863 +#: pretix/base/models/items.py:1873 msgid "Invalid number input." msgstr "" -#: pretix/base/models/items.py:1870 pretix/base/models/items.py:1894 +#: pretix/base/models/items.py:1880 pretix/base/models/items.py:1904 msgid "Please choose a later date." msgstr "" -#: pretix/base/models/items.py:1872 pretix/base/models/items.py:1896 +#: pretix/base/models/items.py:1882 pretix/base/models/items.py:1906 msgid "Please choose an earlier date." msgstr "" -#: pretix/base/models/items.py:1875 +#: pretix/base/models/items.py:1885 msgid "Invalid date input." msgstr "" -#: pretix/base/models/items.py:1882 +#: pretix/base/models/items.py:1892 msgid "Invalid time input." msgstr "" -#: pretix/base/models/items.py:1891 +#: pretix/base/models/items.py:1901 msgid "Invalid datetime input." msgstr "" -#: pretix/base/models/items.py:1903 +#: pretix/base/models/items.py:1913 msgid "Unknown country code." msgstr "" -#: pretix/base/models/items.py:1921 pretix/base/models/items.py:1923 +#: pretix/base/models/items.py:1931 pretix/base/models/items.py:1933 msgid "The maximum date must not be before the minimum value." msgstr "" -#: pretix/base/models/items.py:1925 +#: pretix/base/models/items.py:1935 msgid "The maximum value must not be lower than the minimum value." msgstr "" -#: pretix/base/models/items.py:1943 +#: pretix/base/models/items.py:1953 msgid "" "The system already contains answers to this question that are not compatible " "with changing the type of question without data loss. Consider hiding this " "question and creating a new one instead." msgstr "" -#: pretix/base/models/items.py:1961 +#: pretix/base/models/items.py:1971 #: pretix/control/templates/pretixcontrol/items/question.html:87 msgid "Answer" msgstr "" -#: pretix/base/models/items.py:1985 +#: pretix/base/models/items.py:1995 #, python-brace-format msgid "The identifier \"{}\" is already used for a different option." msgstr "" -#: pretix/base/models/items.py:1988 +#: pretix/base/models/items.py:1998 msgid "Question option" msgstr "" -#: pretix/base/models/items.py:1989 +#: pretix/base/models/items.py:1999 msgid "Question options" msgstr "" -#: pretix/base/models/items.py:2074 pretix/control/forms/event.py:1903 +#: pretix/base/models/items.py:2084 pretix/control/forms/event.py:1903 #: pretix/control/templates/pretixcontrol/items/quotas.html:104 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:83 msgid "Total capacity" msgstr "" -#: pretix/base/models/items.py:2076 pretix/control/forms/item.py:512 +#: pretix/base/models/items.py:2086 pretix/control/forms/item.py:512 msgid "Leave empty for an unlimited number of tickets." msgstr "" -#: pretix/base/models/items.py:2080 pretix/base/models/orders.py:1494 -#: pretix/base/models/orders.py:3033 +#: pretix/base/models/items.py:2090 pretix/base/models/orders.py:1516 +#: pretix/base/models/orders.py:3055 #: pretix/control/templates/pretixcontrol/checkin/index.html:97 msgid "Item" msgstr "" -#: pretix/base/models/items.py:2088 pretix/control/forms/item.py:973 +#: pretix/base/models/items.py:2098 pretix/control/forms/item.py:973 #: pretix/plugins/autocheckin/models.py:74 msgid "Variations" msgstr "" -#: pretix/base/models/items.py:2092 +#: pretix/base/models/items.py:2102 #: pretix/control/templates/pretixcontrol/items/quotas.html:135 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:96 msgid "Ignore this quota when determining event availability" msgstr "" -#: pretix/base/models/items.py:2093 +#: pretix/base/models/items.py:2103 msgid "" "If you enable this, this quota will be ignored when determining event " "availability in your event calendar. This is useful e.g. for merchandise " @@ -5956,22 +6019,22 @@ msgid "" "as sold out." msgstr "" -#: pretix/base/models/items.py:2100 +#: pretix/base/models/items.py:2110 msgid "Close this quota permanently once it is sold out" msgstr "" -#: pretix/base/models/items.py:2101 +#: pretix/base/models/items.py:2111 msgid "" "If you enable this, when the quota is sold out once, no more tickets will be " "sold, even if tickets become available again through cancellations or " "expiring orders. Of course, you can always re-open it manually." msgstr "" -#: pretix/base/models/items.py:2109 +#: pretix/base/models/items.py:2119 msgid "Allow to sell more tickets once people have checked out" msgstr "" -#: pretix/base/models/items.py:2110 +#: pretix/base/models/items.py:2120 msgid "" "With this option, quota will be released as soon as people are scanned at an " "exit of your event. This will only happen if they have been scanned both at " @@ -5981,50 +6044,51 @@ msgid "" "prevent accidental overbooking." msgstr "" -#: pretix/base/models/items.py:2122 pretix/control/navigation.py:169 +#: pretix/base/models/items.py:2132 pretix/control/navigation.py:169 #: pretix/control/templates/pretixcontrol/items/quotas.html:5 #: pretix/control/templates/pretixcontrol/items/quotas.html:7 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:418 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:185 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:59 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:76 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:59 msgid "Quotas" msgstr "" -#: pretix/base/models/items.py:2195 +#: pretix/base/models/items.py:2205 msgid "All variations must belong to an item contained in the items list." msgstr "" -#: pretix/base/models/items.py:2206 +#: pretix/base/models/items.py:2216 msgid "" "One or more items has variations but none of these are in the variations " "list." msgstr "" -#: pretix/base/models/items.py:2212 pretix/base/models/waitinglist.py:304 +#: pretix/base/models/items.py:2222 pretix/base/models/waitinglist.py:304 msgid "Subevent cannot be null for event series." msgstr "" -#: pretix/base/models/items.py:2248 +#: pretix/base/models/items.py:2258 msgid "Required for products" msgstr "" -#: pretix/base/models/items.py:2249 +#: pretix/base/models/items.py:2259 msgid "" "If checked, this property must be set in each product. Does not apply if a " "default value is set." msgstr "" -#: pretix/base/models/items.py:2254 +#: pretix/base/models/items.py:2264 msgid "" "If you keep this empty, any value is allowed. Otherwise, enter one possible " "value per line." msgstr "" -#: pretix/base/models/items.py:2313 +#: pretix/base/models/items.py:2323 msgid "Start" msgstr "" -#: pretix/base/models/items.py:2314 +#: pretix/base/models/items.py:2324 #: pretix/plugins/reports/accountingreport.py:129 msgid "End" msgstr "" @@ -6069,6 +6133,27 @@ msgstr "" msgid "bounced" msgstr "" +#: pretix/base/models/media.py:77 +msgctxt "reusable_medium" +msgid "Claim token" +msgstr "" + +#: pretix/base/models/media.py:82 +msgctxt "reusable_medium" +msgid "Label" +msgstr "" + +#: pretix/base/models/media.py:105 +msgid "Linked tickets" +msgstr "" + +#: pretix/base/models/media.py:107 +msgid "" +"If you link to more than one ticket, make sure there is no overlap in " +"validity. If multiple tickets are valid at once, this will lead to failed " +"check-ins." +msgstr "" + #: pretix/base/models/memberships.py:44 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:28 msgid "Membership is transferable" @@ -6123,8 +6208,8 @@ msgstr "" msgid "paid" msgstr "" -#: pretix/base/models/orders.py:203 pretix/control/forms/filter.py:1857 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:35 +#: pretix/base/models/orders.py:203 pretix/control/forms/filter.py:1863 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:47 msgid "expired" msgstr "" @@ -6162,7 +6247,7 @@ msgid "" "scanned." msgstr "" -#: pretix/base/models/orders.py:300 pretix/base/models/orders.py:1534 +#: pretix/base/models/orders.py:300 pretix/base/models/orders.py:1556 msgid "Meta information" msgstr "" @@ -6170,187 +6255,187 @@ msgstr "" msgid "API meta information" msgstr "" -#: pretix/base/models/orders.py:418 pretix/plugins/sendmail/forms.py:236 +#: pretix/base/models/orders.py:440 pretix/plugins/sendmail/forms.py:236 #: pretix/plugins/sendmail/forms.py:389 pretix/plugins/sendmail/views.py:269 msgid "approval pending" msgstr "" -#: pretix/base/models/orders.py:420 +#: pretix/base/models/orders.py:442 msgctxt "order state" msgid "pending (confirmed)" msgstr "" -#: pretix/base/models/orders.py:422 +#: pretix/base/models/orders.py:444 msgid "canceled (paid fee)" msgstr "" -#: pretix/base/models/orders.py:1035 +#: pretix/base/models/orders.py:1057 msgid "" "The payment can not be accepted as the last date of payments configured in " "the payment settings is over." msgstr "" -#: pretix/base/models/orders.py:1037 +#: pretix/base/models/orders.py:1059 msgid "" "The payment can not be accepted as the order is expired and you configured " "that no late payments should be accepted in the payment settings." msgstr "" -#: pretix/base/models/orders.py:1039 +#: pretix/base/models/orders.py:1061 msgid "This order is not yet approved by the event organizer." msgstr "" -#: pretix/base/models/orders.py:1064 +#: pretix/base/models/orders.py:1086 #, python-brace-format msgid "The ordered product \"{item}\" is no longer available." msgstr "" -#: pretix/base/models/orders.py:1065 +#: pretix/base/models/orders.py:1087 #, python-brace-format msgid "The seat \"{seat}\" is no longer available." msgstr "" -#: pretix/base/models/orders.py:1066 +#: pretix/base/models/orders.py:1088 #, python-brace-format msgid "The voucher \"{voucher}\" no longer has sufficient budget." msgstr "" -#: pretix/base/models/orders.py:1067 +#: pretix/base/models/orders.py:1089 #, python-brace-format msgid "The voucher \"{voucher}\" has been used in the meantime." msgstr "" -#: pretix/base/models/orders.py:1395 +#: pretix/base/models/orders.py:1417 msgid "" msgstr "" -#: pretix/base/models/orders.py:1514 pretix/base/models/orders.py:1522 +#: pretix/base/models/orders.py:1536 pretix/base/models/orders.py:1544 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1731 +#: pretix/base/models/orders.py:1753 msgctxt "payment_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1732 +#: pretix/base/models/orders.py:1754 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1733 +#: pretix/base/models/orders.py:1755 msgctxt "payment_state" msgid "confirmed" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1756 msgctxt "payment_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1757 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1736 +#: pretix/base/models/orders.py:1758 msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1764 pretix/base/models/orders.py:2193 +#: pretix/base/models/orders.py:1786 pretix/base/models/orders.py:2215 #: pretix/base/shredder.py:637 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:2134 +#: pretix/base/models/orders.py:2156 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:2135 +#: pretix/base/models/orders.py:2157 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:2136 +#: pretix/base/models/orders.py:2158 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:2137 +#: pretix/base/models/orders.py:2159 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:2138 +#: pretix/base/models/orders.py:2160 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:2140 +#: pretix/base/models/orders.py:2162 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:2148 +#: pretix/base/models/orders.py:2170 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:2149 +#: pretix/base/models/orders.py:2171 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:2150 +#: pretix/base/models/orders.py:2172 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:2188 +#: pretix/base/models/orders.py:2210 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:198 msgid "Refund reason" msgstr "" -#: pretix/base/models/orders.py:2189 +#: pretix/base/models/orders.py:2211 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:199 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:201 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:2309 +#: pretix/base/models/orders.py:2331 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:2310 +#: pretix/base/models/orders.py:2332 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:2311 +#: pretix/base/models/orders.py:2333 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:2312 +#: pretix/base/models/orders.py:2334 #: pretix/control/templates/pretixcontrol/order/index.html:190 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:2313 +#: pretix/base/models/orders.py:2335 msgid "Insurance fee" msgstr "" -#: pretix/base/models/orders.py:2314 +#: pretix/base/models/orders.py:2336 msgid "Late fee" msgstr "" -#: pretix/base/models/orders.py:2315 +#: pretix/base/models/orders.py:2337 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:2316 pretix/base/payment.py:1379 -#: pretix/base/payment.py:1455 pretix/base/settings.py:1101 +#: pretix/base/models/orders.py:2338 pretix/base/payment.py:1379 +#: pretix/base/payment.py:1455 pretix/base/settings.py:1114 #: pretix/control/templates/pretixcontrol/items/index.html:117 #: pretix/control/templates/pretixcontrol/order/index.html:185 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:383 @@ -6359,7 +6444,7 @@ msgstr "" msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:2321 +#: pretix/base/models/orders.py:2343 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:84 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:126 #: pretix/control/views/vouchers.py:121 @@ -6367,55 +6452,55 @@ msgstr "" msgid "Value" msgstr "" -#: pretix/base/models/orders.py:2602 +#: pretix/base/models/orders.py:2624 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:3157 +#: pretix/base/models/orders.py:3179 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:3168 +#: pretix/base/models/orders.py:3190 msgid "Limit for extending expiration date" msgstr "" -#: pretix/base/models/orders.py:3204 +#: pretix/base/models/orders.py:3226 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:3205 +#: pretix/base/models/orders.py:3227 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:3347 +#: pretix/base/models/orders.py:3369 msgid "Business customer" msgstr "" -#: pretix/base/models/orders.py:3363 +#: pretix/base/models/orders.py:3385 msgid "This reference will be printed on your invoice for your convenience." msgstr "" -#: pretix/base/models/orders.py:3489 +#: pretix/base/models/orders.py:3511 msgid "Transmission type" msgstr "" -#: pretix/base/models/orders.py:3580 +#: pretix/base/models/orders.py:3602 #: pretix/plugins/badges/templates/pretixplugins/badges/control_order_position_buttons.html:9 msgid "Badge" msgstr "" -#: pretix/base/models/orders.py:3581 pretix/base/pdf.py:1157 +#: pretix/base/models/orders.py:3603 pretix/base/pdf.py:1162 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:66 #: pretix/plugins/ticketoutputpdf/ticketoutput.py:114 msgid "Ticket" msgstr "" -#: pretix/base/models/orders.py:3582 +#: pretix/base/models/orders.py:3604 msgid "Certificate" msgstr "" -#: pretix/base/models/orders.py:3583 pretix/control/views/event.py:401 -#: pretix/control/views/event.py:406 pretix/control/views/organizer.py:653 +#: pretix/base/models/orders.py:3605 pretix/control/views/event.py:402 +#: pretix/control/views/event.py:407 pretix/control/views/organizer.py:653 #: pretix/control/views/organizer.py:658 msgid "Other" msgstr "" @@ -6460,7 +6545,7 @@ msgid "All event permissions" msgstr "" #: pretix/base/models/organizer.py:385 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:34 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:47 msgid "Event permissions" msgstr "" @@ -6469,7 +6554,7 @@ msgid "All organizer permissions" msgstr "" #: pretix/base/models/organizer.py:387 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:25 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:26 msgid "Organizer permissions" msgstr "" @@ -6506,7 +6591,7 @@ msgid "Type" msgstr "" #: pretix/base/models/seating.py:46 pretix/base/models/tax.py:306 -#: pretix/base/pdf.py:1336 +#: pretix/base/pdf.py:1341 msgid "Your layout file is not a valid JSON file." msgstr "" @@ -6525,12 +6610,12 @@ msgstr "" msgid "Multiple seats have the same ID: {id}" msgstr "" -#: pretix/base/models/seating.py:200 +#: pretix/base/models/seating.py:203 #, python-brace-format msgid "Row {number}" msgstr "" -#: pretix/base/models/seating.py:205 +#: pretix/base/models/seating.py:208 #, python-brace-format msgid "Seat {number}" msgstr "" @@ -7371,7 +7456,7 @@ msgstr "" msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1339 pretix/control/views/orders.py:1252 +#: pretix/base/payment.py:1339 pretix/control/views/orders.py:1266 msgid "You entered an order that could not be found." msgstr "" @@ -7410,7 +7495,7 @@ msgid "Product name" msgstr "" #: pretix/base/pdf.py:124 pretix/base/services/tickets.py:98 -#: pretix/control/views/event.py:941 pretix/control/views/pdf.py:96 +#: pretix/control/views/event.py:942 pretix/control/views/pdf.py:96 msgid "Sample product" msgstr "" @@ -7427,7 +7512,7 @@ msgid "Product description" msgstr "" #: pretix/base/pdf.py:134 pretix/base/services/tickets.py:99 -#: pretix/control/views/event.py:942 pretix/control/views/pdf.py:97 +#: pretix/control/views/event.py:943 pretix/control/views/pdf.py:97 msgid "Sample product description" msgstr "" @@ -7468,7 +7553,7 @@ msgstr "" #: pretix/base/services/placeholders.py:604 #: pretix/base/services/placeholders.py:689 #: pretix/base/services/placeholders.py:705 -#: pretix/base/services/placeholders.py:714 pretix/control/views/event.py:943 +#: pretix/base/services/placeholders.py:714 pretix/control/views/event.py:944 msgid "John Doe" msgstr "" @@ -7544,9 +7629,9 @@ msgstr "" msgid "Event begin date" msgstr "" -#: pretix/base/pdf.py:264 pretix/base/pdf.py:290 pretix/base/pdf.py:406 -#: pretix/base/pdf.py:430 pretix/base/pdf.py:454 pretix/base/pdf.py:478 -#: pretix/base/pdf.py:541 pretix/base/pdf.py:546 +#: pretix/base/pdf.py:264 pretix/base/pdf.py:290 pretix/base/pdf.py:411 +#: pretix/base/pdf.py:435 pretix/base/pdf.py:459 pretix/base/pdf.py:483 +#: pretix/base/pdf.py:546 pretix/base/pdf.py:551 msgid "2017-05-31" msgstr "" @@ -7563,8 +7648,8 @@ msgid "Event begin weekday" msgstr "" #: pretix/base/pdf.py:277 pretix/base/pdf.py:306 -#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1399 -#: pretix/control/forms/filter.py:1577 +#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1405 +#: pretix/control/forms/filter.py:1583 msgid "Friday" msgstr "" @@ -7588,8 +7673,8 @@ msgstr "" msgid "Event admission date and time" msgstr "" -#: pretix/base/pdf.py:311 pretix/base/pdf.py:414 pretix/base/pdf.py:438 -#: pretix/base/pdf.py:462 pretix/base/pdf.py:486 pretix/base/pdf.py:535 +#: pretix/base/pdf.py:311 pretix/base/pdf.py:419 pretix/base/pdf.py:443 +#: pretix/base/pdf.py:467 pretix/base/pdf.py:491 pretix/base/pdf.py:540 msgid "2017-05-31 19:00" msgstr "" @@ -7597,8 +7682,8 @@ msgstr "" msgid "Event admission time" msgstr "" -#: pretix/base/pdf.py:319 pretix/base/pdf.py:422 pretix/base/pdf.py:446 -#: pretix/base/pdf.py:470 pretix/base/pdf.py:494 +#: pretix/base/pdf.py:319 pretix/base/pdf.py:427 pretix/base/pdf.py:451 +#: pretix/base/pdf.py:475 pretix/base/pdf.py:499 msgid "19:00" msgstr "" @@ -7606,7 +7691,7 @@ msgstr "" msgid "Event location" msgstr "" -#: pretix/base/pdf.py:327 pretix/base/settings.py:1335 +#: pretix/base/pdf.py:327 pretix/base/settings.py:1348 msgid "Random City" msgstr "" @@ -7635,168 +7720,176 @@ msgid "Atlantis" msgstr "" #: pretix/base/pdf.py:376 +msgid "Invoice custom recipient field" +msgstr "" + +#: pretix/base/pdf.py:377 +msgid "Custom recipient field" +msgstr "" + +#: pretix/base/pdf.py:381 msgid "List of Add-Ons" msgstr "" -#: pretix/base/pdf.py:377 pretix/base/pdf.py:384 +#: pretix/base/pdf.py:382 pretix/base/pdf.py:389 msgid "" "Add-on 1\n" "2x Add-on 2" msgstr "" -#: pretix/base/pdf.py:383 +#: pretix/base/pdf.py:388 msgid "List of Checked-In Add-Ons" msgstr "" -#: pretix/base/pdf.py:390 pretix/control/forms/filter.py:1664 -#: pretix/control/forms/filter.py:1666 +#: pretix/base/pdf.py:395 pretix/control/forms/filter.py:1670 +#: pretix/control/forms/filter.py:1672 #: pretix/control/templates/pretixcontrol/organizers/index.html:42 msgid "Organizer name" msgstr "" -#: pretix/base/pdf.py:391 +#: pretix/base/pdf.py:396 msgid "Event organizer company" msgstr "" -#: pretix/base/pdf.py:395 +#: pretix/base/pdf.py:400 msgid "Organizer info text" msgstr "" -#: pretix/base/pdf.py:396 +#: pretix/base/pdf.py:401 msgid "Event organizer info text" msgstr "" -#: pretix/base/pdf.py:400 pretix/base/pdf.py:401 +#: pretix/base/pdf.py:405 pretix/base/pdf.py:406 msgid "Event info text" msgstr "" -#: pretix/base/pdf.py:405 +#: pretix/base/pdf.py:410 msgid "Printing date" msgstr "" -#: pretix/base/pdf.py:413 +#: pretix/base/pdf.py:418 msgid "Printing date and time" msgstr "" -#: pretix/base/pdf.py:421 +#: pretix/base/pdf.py:426 msgid "Printing time" msgstr "" -#: pretix/base/pdf.py:429 pretix/control/forms/item.py:796 +#: pretix/base/pdf.py:434 pretix/control/forms/item.py:796 msgid "Purchase date" msgstr "" -#: pretix/base/pdf.py:437 +#: pretix/base/pdf.py:442 msgid "Purchase date and time" msgstr "" -#: pretix/base/pdf.py:445 +#: pretix/base/pdf.py:450 msgid "Purchase time" msgstr "" -#: pretix/base/pdf.py:453 +#: pretix/base/pdf.py:458 msgid "Validity start date" msgstr "" -#: pretix/base/pdf.py:461 +#: pretix/base/pdf.py:466 msgid "Validity start date and time" msgstr "" -#: pretix/base/pdf.py:469 +#: pretix/base/pdf.py:474 msgid "Validity start time" msgstr "" -#: pretix/base/pdf.py:477 +#: pretix/base/pdf.py:482 msgid "Validity end date" msgstr "" -#: pretix/base/pdf.py:485 +#: pretix/base/pdf.py:490 msgid "Validity end date and time" msgstr "" -#: pretix/base/pdf.py:493 +#: pretix/base/pdf.py:498 msgid "Validity end time" msgstr "" -#: pretix/base/pdf.py:501 pretix/control/forms/item.py:1386 +#: pretix/base/pdf.py:506 pretix/control/forms/item.py:1386 msgid "Program times" msgstr "" -#: pretix/base/pdf.py:503 +#: pretix/base/pdf.py:508 msgid "" "2017-05-31 10:00 – 12:00, Room 1\n" "2017-05-31 14:00 – 16:00, Room 2\n" "2017-05-31 14:00 – 2017-06-01 14:00, Building A" msgstr "" -#: pretix/base/pdf.py:507 +#: pretix/base/pdf.py:512 msgid "Reusable Medium ID" msgstr "" -#: pretix/base/pdf.py:512 +#: pretix/base/pdf.py:517 msgid "Seat: Full name" msgstr "" -#: pretix/base/pdf.py:513 +#: pretix/base/pdf.py:518 msgid "Ground floor, Row 3, Seat 4" msgstr "" -#: pretix/base/pdf.py:515 pretix/base/pdf.py:521 +#: pretix/base/pdf.py:520 pretix/base/pdf.py:526 #: pretix/control/forms/orders.py:348 msgid "General admission" msgstr "" -#: pretix/base/pdf.py:518 +#: pretix/base/pdf.py:523 msgid "Seat: zone" msgstr "" -#: pretix/base/pdf.py:519 +#: pretix/base/pdf.py:524 msgid "Ground floor" msgstr "" -#: pretix/base/pdf.py:524 +#: pretix/base/pdf.py:529 msgid "Seat: row" msgstr "" -#: pretix/base/pdf.py:529 +#: pretix/base/pdf.py:534 msgid "Seat: seat number" msgstr "" -#: pretix/base/pdf.py:534 +#: pretix/base/pdf.py:539 msgid "Date and time of first scan" msgstr "" -#: pretix/base/pdf.py:540 +#: pretix/base/pdf.py:545 msgid "Gift card: Issuance date" msgstr "" -#: pretix/base/pdf.py:545 +#: pretix/base/pdf.py:550 msgid "Gift card: Expiration date" msgstr "" -#: pretix/base/pdf.py:586 pretix/base/pdf.py:624 pretix/base/pdf.py:630 +#: pretix/base/pdf.py:591 pretix/base/pdf.py:629 pretix/base/pdf.py:635 #: pretix/plugins/badges/exporters.py:512 #: pretix/plugins/ticketoutputpdf/exporters.py:102 #, python-brace-format msgid "Question: {question}" msgstr "" -#: pretix/base/pdf.py:625 pretix/base/pdf.py:631 +#: pretix/base/pdf.py:630 pretix/base/pdf.py:636 #, python-brace-format msgid "" msgstr "" -#: pretix/base/pdf.py:672 +#: pretix/base/pdf.py:677 msgid "Attendee name for salutation" msgstr "" -#: pretix/base/pdf.py:673 pretix/base/pdf.py:696 +#: pretix/base/pdf.py:678 pretix/base/pdf.py:701 #: pretix/base/services/placeholders.py:732 -#: pretix/control/forms/organizer.py:799 +#: pretix/control/forms/organizer.py:809 msgid "Mr Doe" msgstr "" -#: pretix/base/pdf.py:679 pretix/base/pdf.py:686 +#: pretix/base/pdf.py:684 pretix/base/pdf.py:691 #: pretix/plugins/badges/exporters.py:509 #: pretix/plugins/checkinlists/exporters.py:126 #: pretix/plugins/checkinlists/exporters.py:498 @@ -7805,16 +7898,16 @@ msgstr "" msgid "Attendee name: {part}" msgstr "" -#: pretix/base/pdf.py:695 +#: pretix/base/pdf.py:700 msgid "Invoice address name for salutation" msgstr "" -#: pretix/base/pdf.py:702 +#: pretix/base/pdf.py:707 #, python-brace-format msgid "Invoice address name: {part}" msgstr "" -#: pretix/base/pdf.py:1345 +#: pretix/base/pdf.py:1350 #, python-brace-format msgid "Your layout file is not a valid layout. Error message: {}" msgstr "" @@ -8174,7 +8267,7 @@ msgstr[1] "" #: pretix/base/services/cart.py:152 pretix/base/services/orders.py:164 #: pretix/presale/templates/pretixpresale/event/index.html:170 -#: pretix/presale/views/waiting.py:150 pretix/presale/views/widget.py:843 +#: pretix/presale/views/waiting.py:150 pretix/presale/views/widget.py:846 msgid "The booking period for this event has not yet started." msgstr "" @@ -8450,33 +8543,33 @@ msgstr "" msgid "week day" msgstr "" -#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1395 -#: pretix/control/forms/filter.py:1573 +#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1401 +#: pretix/control/forms/filter.py:1579 msgid "Monday" msgstr "" -#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1396 -#: pretix/control/forms/filter.py:1574 +#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1402 +#: pretix/control/forms/filter.py:1580 msgid "Tuesday" msgstr "" -#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1397 -#: pretix/control/forms/filter.py:1575 +#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1403 +#: pretix/control/forms/filter.py:1581 msgid "Wednesday" msgstr "" -#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1398 -#: pretix/control/forms/filter.py:1576 +#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1404 +#: pretix/control/forms/filter.py:1582 msgid "Thursday" msgstr "" -#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1400 -#: pretix/control/forms/filter.py:1578 +#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1406 +#: pretix/control/forms/filter.py:1584 msgid "Saturday" msgstr "" -#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1401 -#: pretix/control/forms/filter.py:1579 +#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1407 +#: pretix/control/forms/filter.py:1585 msgid "Sunday" msgstr "" @@ -8500,54 +8593,64 @@ msgstr "" msgid "{variable} is {value}" msgstr "" -#: pretix/base/services/checkin.py:972 +#: pretix/base/services/checkin.py:982 msgid "This order position has been canceled." msgstr "" -#: pretix/base/services/checkin.py:981 +#: pretix/base/services/checkin.py:991 msgid "This ticket has been blocked." msgstr "" -#: pretix/base/services/checkin.py:990 +#: pretix/base/services/checkin.py:1000 msgid "This order is not yet approved." msgstr "" -#: pretix/base/services/checkin.py:999 pretix/base/services/checkin.py:1003 +#: pretix/base/services/checkin.py:1009 pretix/base/services/checkin.py:1013 #, python-brace-format msgid "This ticket is only valid after {datetime}." msgstr "" -#: pretix/base/services/checkin.py:1013 pretix/base/services/checkin.py:1017 +#: pretix/base/services/checkin.py:1023 pretix/base/services/checkin.py:1027 #, python-brace-format msgid "This ticket was only valid before {datetime}." msgstr "" -#: pretix/base/services/checkin.py:1048 +#: pretix/base/services/checkin.py:1058 msgid "This order position has an invalid product for this check-in list." msgstr "" -#: pretix/base/services/checkin.py:1057 +#: pretix/base/services/checkin.py:1067 msgid "This order position has an invalid date for this check-in list." msgstr "" -#: pretix/base/services/checkin.py:1068 +#: pretix/base/services/checkin.py:1078 msgid "This order is not marked as paid." msgstr "" -#: pretix/base/services/checkin.py:1080 +#: pretix/base/services/checkin.py:1090 msgid "Evaluation of custom rules has failed." msgstr "" -#: pretix/base/services/checkin.py:1090 +#: pretix/base/services/checkin.py:1100 #, python-brace-format msgid "Entry not permitted: {explanation}." msgstr "" -#: pretix/base/services/checkin.py:1099 +#: pretix/base/services/checkin.py:1109 msgid "You need to answer questions to complete this check-in." msgstr "" -#: pretix/base/services/checkin.py:1152 +#: pretix/base/services/checkin.py:1121 +msgid "Ticket needs to be exchanged to a suitable medium." +msgstr "" + +#: pretix/base/services/checkin.py:1128 +msgid "" +"This ticket has already been exchanged for a reusable medium that now needs " +"to be used instead." +msgstr "" + +#: pretix/base/services/checkin.py:1180 msgid "This ticket has already been redeemed." msgstr "" @@ -8686,6 +8789,48 @@ msgstr "" msgid "You are receiving this email because you placed an order for {event}." msgstr "" +#: pretix/base/services/media.py:93 pretix/base/services/media.py:95 +msgid "Invalid medium type." +msgstr "" + +#: pretix/base/services/media.py:100 pretix/base/services/media.py:102 +msgid "Medium type is not enabled for organizer." +msgstr "" + +#: pretix/base/services/media.py:107 pretix/base/services/media.py:109 +msgid "Incorrect medium type for product." +msgstr "" + +#: pretix/base/services/media.py:114 pretix/base/services/media.py:116 +msgid "Ticket is already exchanged for reusable medium." +msgstr "" + +#: pretix/base/services/media.py:133 pretix/base/services/media.py:135 +msgid "Reusable medium not found." +msgstr "" + +#: pretix/base/services/media.py:140 pretix/base/services/media.py:142 +#: pretix/base/services/media.py:168 pretix/base/services/media.py:170 +msgid "Reusable medium is inactive or expired." +msgstr "" + +#: pretix/base/services/media.py:155 pretix/base/services/media.py:162 +#: pretix/base/services/media.py:176 +msgid "Reusable medium not found and could not be created." +msgstr "" + +#: pretix/base/services/media.py:183 +msgid "Reusable medium already exists." +msgstr "" + +#: pretix/base/services/media.py:189 +msgid "Reusable medium could not be created." +msgstr "" + +#: pretix/base/services/media.py:195 pretix/base/services/media.py:197 +msgid "Product does not support medium exchange." +msgstr "" + #: pretix/base/services/memberships.py:108 #, python-brace-format msgid "" @@ -9263,60 +9408,71 @@ msgid "" msgstr "" #: pretix/base/settings.py:214 -msgid "Activate re-usable media" +msgid "Activate reusable media" msgstr "" #: pretix/base/settings.py:215 msgid "" -"The re-usable media feature allows you to connect tickets and gift cards " -"with physical media such as wristbands or chip cards that may be re-used for " +"The reusable media feature allows you to connect tickets and gift cards with " +"physical media such as wristbands or chip cards that may be reused for " "different tickets or gift cards later." msgstr "" -#: pretix/base/settings.py:241 +#: pretix/base/settings.py:226 +msgid "Enforce the usage of issued reusable media for check-in" +msgstr "" + +#: pretix/base/settings.py:227 +msgid "" +"If enabled, a ticket barcode will not be accepted anymore, if a reusable " +"medium has been created and linked to a ticket. Keeping this option turned " +"off will treat the reusable medium and ticket as equals." +msgstr "" + +#: pretix/base/settings.py:254 msgid "Length of barcodes" msgstr "" -#: pretix/base/settings.py:270 +#: pretix/base/settings.py:283 msgid "" "Automatically create a new gift card if a previously unknown chip is seen" msgstr "" -#: pretix/base/settings.py:283 pretix/base/settings.py:314 +#: pretix/base/settings.py:296 pretix/base/settings.py:327 msgid "Gift card currency" msgstr "" -#: pretix/base/settings.py:301 +#: pretix/base/settings.py:314 msgid "Automatically create a new gift card if a new chip is encoded" msgstr "" -#: pretix/base/settings.py:323 +#: pretix/base/settings.py:336 msgid "Use UID protection feature of NFC chip" msgstr "" -#: pretix/base/settings.py:339 +#: pretix/base/settings.py:352 msgid "Maximum number of items per order" msgstr "" -#: pretix/base/settings.py:340 +#: pretix/base/settings.py:353 msgid "Add-on products will not be counted." msgstr "" -#: pretix/base/settings.py:350 +#: pretix/base/settings.py:363 msgid "Show net prices instead of gross prices in the product list" msgstr "" -#: pretix/base/settings.py:351 +#: pretix/base/settings.py:364 msgid "" "Independent of your choice, the cart will show gross prices as this is the " "price that needs to be paid." msgstr "" -#: pretix/base/settings.py:362 +#: pretix/base/settings.py:375 msgid "Hide prices on attendee ticket page" msgstr "" -#: pretix/base/settings.py:363 +#: pretix/base/settings.py:376 msgid "" "If a person buys multiple tickets and you send emails to all of the " "attendees, with this option the ticket price will not be shown on the ticket " @@ -9324,27 +9480,27 @@ msgid "" "price." msgstr "" -#: pretix/base/settings.py:381 +#: pretix/base/settings.py:394 msgid "Ask for attendee names" msgstr "" -#: pretix/base/settings.py:382 +#: pretix/base/settings.py:395 msgid "Ask for a name for all personalized tickets." msgstr "" -#: pretix/base/settings.py:391 +#: pretix/base/settings.py:404 msgid "Require attendee names" msgstr "" -#: pretix/base/settings.py:392 +#: pretix/base/settings.py:405 msgid "Require customers to fill in the names of all attendees." msgstr "" -#: pretix/base/settings.py:402 +#: pretix/base/settings.py:415 msgid "Ask for email addresses per ticket" msgstr "" -#: pretix/base/settings.py:403 +#: pretix/base/settings.py:416 msgid "" "Normally, pretix asks for one email address per order and the order " "confirmation will be sent only to that email address. If you enable this " @@ -9356,136 +9512,136 @@ msgid "" "enable this in the email settings." msgstr "" -#: pretix/base/settings.py:417 +#: pretix/base/settings.py:430 msgid "Require email addresses per ticket" msgstr "" -#: pretix/base/settings.py:418 +#: pretix/base/settings.py:431 msgid "" "Require customers to fill in individual email addresses for all personalized " "tickets. See the above option for more details. One email address for the " "order confirmation will always be required regardless of this setting." msgstr "" -#: pretix/base/settings.py:430 +#: pretix/base/settings.py:443 msgid "Ask for company per ticket" msgstr "" -#: pretix/base/settings.py:439 +#: pretix/base/settings.py:452 msgid "Require company per ticket" msgstr "" -#: pretix/base/settings.py:449 +#: pretix/base/settings.py:462 msgid "Ask for postal addresses per ticket" msgstr "" -#: pretix/base/settings.py:458 +#: pretix/base/settings.py:471 msgid "Require postal addresses per ticket" msgstr "" -#: pretix/base/settings.py:468 +#: pretix/base/settings.py:481 msgid "Ask for the order email address twice" msgstr "" -#: pretix/base/settings.py:469 +#: pretix/base/settings.py:482 msgid "" "Require customers to fill in the primary email address twice to avoid errors." msgstr "" -#: pretix/base/settings.py:478 +#: pretix/base/settings.py:491 msgid "Ask for a phone number per order" msgstr "" -#: pretix/base/settings.py:487 +#: pretix/base/settings.py:500 msgid "Require a phone number per order" msgstr "" -#: pretix/base/settings.py:498 +#: pretix/base/settings.py:511 msgid "Rounding of taxes" msgstr "" -#: pretix/base/settings.py:502 +#: pretix/base/settings.py:515 msgid "" "Note that if you transfer your sales data from pretix to an external system " "for tax reporting, you need to make sure to account for possible rounding " "differences if your external system rounds differently than pretix." msgstr "" -#: pretix/base/settings.py:518 +#: pretix/base/settings.py:531 msgid "Ask for invoice address" msgstr "" -#: pretix/base/settings.py:528 +#: pretix/base/settings.py:541 msgid "Do not ask for invoice address if an order is free" msgstr "" -#: pretix/base/settings.py:538 +#: pretix/base/settings.py:551 msgid "Require customer name" msgstr "" -#: pretix/base/settings.py:548 +#: pretix/base/settings.py:561 msgid "Show attendee names on invoices" msgstr "" -#: pretix/base/settings.py:558 +#: pretix/base/settings.py:571 msgid "Show event location on invoices" msgstr "" -#: pretix/base/settings.py:559 +#: pretix/base/settings.py:572 msgid "" "The event location will be shown below the list of products if it is the " "same for all lines. It will be shown on every line if there are different " "locations." msgstr "" -#: pretix/base/settings.py:570 +#: pretix/base/settings.py:583 msgid "Show exchange rates" msgstr "" -#: pretix/base/settings.py:573 pretix/base/settings.py:582 +#: pretix/base/settings.py:586 pretix/base/settings.py:595 #: pretix/control/forms/item.py:684 msgid "Never" msgstr "" -#: pretix/base/settings.py:574 pretix/base/settings.py:583 +#: pretix/base/settings.py:587 pretix/base/settings.py:596 msgid "" "Based on European Central Bank daily rates, whenever the invoice recipient " "is in an EU country that uses a different currency." msgstr "" -#: pretix/base/settings.py:576 pretix/base/settings.py:585 +#: pretix/base/settings.py:589 pretix/base/settings.py:598 msgid "" "Based on Czech National Bank daily rates, whenever the invoice amount is not " "in CZK." msgstr "" -#: pretix/base/settings.py:577 pretix/base/settings.py:586 +#: pretix/base/settings.py:590 pretix/base/settings.py:599 msgid "" "Based on National Bank of Poland daily rates, whenever the invoice amount is " "not in PLN." msgstr "" -#: pretix/base/settings.py:597 +#: pretix/base/settings.py:610 msgid "Require invoice address" msgstr "" -#: pretix/base/settings.py:608 +#: pretix/base/settings.py:621 msgid "Require a business address" msgstr "" -#: pretix/base/settings.py:609 +#: pretix/base/settings.py:622 msgid "This will require users to enter a company name." msgstr "" -#: pretix/base/settings.py:620 +#: pretix/base/settings.py:633 msgid "Ask for beneficiary" msgstr "" -#: pretix/base/settings.py:631 +#: pretix/base/settings.py:644 msgid "Custom recipient field label" msgstr "" -#: pretix/base/settings.py:633 +#: pretix/base/settings.py:646 msgid "" "If you want to add a custom text field, e.g. for a country-specific " "registration number, to your invoice address form, please fill in the label " @@ -9494,100 +9650,100 @@ msgid "" "on the invoice below the headline. The field will not be required." msgstr "" -#: pretix/base/settings.py:647 +#: pretix/base/settings.py:660 msgid "Custom recipient field help text" msgstr "" -#: pretix/base/settings.py:649 +#: pretix/base/settings.py:662 msgid "" "If you use the custom recipient field, you can specify a help text which " "will be displayed underneath the field. It will not be displayed on the " "invoice." msgstr "" -#: pretix/base/settings.py:660 +#: pretix/base/settings.py:673 msgid "Ask for VAT ID" msgstr "" -#: pretix/base/settings.py:662 +#: pretix/base/settings.py:675 #, python-brace-format msgid "" "Only works if an invoice address is asked for. VAT ID is only requested from " "business customers in the following countries: {countries}." msgstr "" -#: pretix/base/settings.py:682 +#: pretix/base/settings.py:695 msgid "Require VAT ID in" msgstr "" -#: pretix/base/settings.py:688 +#: pretix/base/settings.py:701 msgid "" "VAT ID is optional by default, because not all businesses are assigned a VAT " "ID in all countries. VAT ID will be required for all business addresses in " "the selected countries." msgstr "" -#: pretix/base/settings.py:704 +#: pretix/base/settings.py:717 msgid "Invoice address explanation" msgstr "" -#: pretix/base/settings.py:707 +#: pretix/base/settings.py:720 msgid "This text will be shown above the invoice address form during checkout." msgstr "" -#: pretix/base/settings.py:717 +#: pretix/base/settings.py:730 msgid "Show paid amount on partially paid invoices" msgstr "" -#: pretix/base/settings.py:718 +#: pretix/base/settings.py:731 msgid "" "If an invoice has already been paid partially, this option will add the paid " "and pending amount to the invoice." msgstr "" -#: pretix/base/settings.py:729 +#: pretix/base/settings.py:742 msgid "Show free products on invoices" msgstr "" -#: pretix/base/settings.py:730 +#: pretix/base/settings.py:743 msgid "" "Note that invoices will never be generated for orders that contain only free " "products." msgstr "" -#: pretix/base/settings.py:741 +#: pretix/base/settings.py:754 msgid "Show expiration date of order" msgstr "" -#: pretix/base/settings.py:742 +#: pretix/base/settings.py:755 msgid "" "The expiration date will not be shown if the invoice is generated after the " "order is paid." msgstr "" -#: pretix/base/settings.py:753 +#: pretix/base/settings.py:766 msgid "Minimum length of invoice number after prefix" msgstr "" -#: pretix/base/settings.py:754 +#: pretix/base/settings.py:767 msgid "" "The part of your invoice number after your prefix will be filled up with " "leading zeros up to this length, e.g. INV-001 or INV-00001." msgstr "" -#: pretix/base/settings.py:767 +#: pretix/base/settings.py:780 msgid "Generate invoices with consecutive numbers" msgstr "" -#: pretix/base/settings.py:768 +#: pretix/base/settings.py:781 msgid "If deactivated, the order code will be used in the invoice number." msgstr "" -#: pretix/base/settings.py:778 +#: pretix/base/settings.py:791 msgid "Invoice number prefix" msgstr "" -#: pretix/base/settings.py:779 +#: pretix/base/settings.py:792 msgid "" "This will be prepended to invoice numbers. If you leave this field empty, " "your event slug will be used followed by a dash. Attention: If multiple " @@ -9598,97 +9754,97 @@ msgid "" "invoice, or %m and %d for the day of month." msgstr "" -#: pretix/base/settings.py:791 pretix/base/settings.py:815 +#: pretix/base/settings.py:804 pretix/base/settings.py:828 #, python-brace-format msgid "Please only use the characters {allowed} in this field." msgstr "" -#: pretix/base/settings.py:806 +#: pretix/base/settings.py:819 msgid "Invoice number prefix for cancellations" msgstr "" -#: pretix/base/settings.py:807 +#: pretix/base/settings.py:820 msgid "" "This will be prepended to invoice numbers of cancellations. If you leave " "this field empty, the same numbering scheme will be used that you configured " "for regular invoices." msgstr "" -#: pretix/base/settings.py:830 +#: pretix/base/settings.py:843 msgid "Highlight order code to make it stand out visibly" msgstr "" -#: pretix/base/settings.py:831 pretix/base/settings.py:843 +#: pretix/base/settings.py:844 pretix/base/settings.py:856 msgid "Only respected by some invoice renderers." msgstr "" -#: pretix/base/settings.py:842 pretix/base/settings.py:3176 -#: pretix/control/templates/pretixcontrol/pdf/index.html:441 +#: pretix/base/settings.py:855 pretix/base/settings.py:3189 +#: pretix/control/templates/pretixcontrol/pdf/index.html:439 msgid "Font" msgstr "" -#: pretix/base/settings.py:869 +#: pretix/base/settings.py:882 msgid "Length of ticket codes" msgstr "" -#: pretix/base/settings.py:896 +#: pretix/base/settings.py:909 msgid "Reservation period" msgstr "" -#: pretix/base/settings.py:898 +#: pretix/base/settings.py:911 msgid "" "The number of minutes the items in a user's cart are reserved for this user." msgstr "" -#: pretix/base/settings.py:907 +#: pretix/base/settings.py:920 msgid "" "Directly redirect to check-out after a product has been added to the cart." msgstr "" -#: pretix/base/settings.py:916 +#: pretix/base/settings.py:929 msgid "End of presale text" msgstr "" -#: pretix/base/settings.py:919 +#: pretix/base/settings.py:932 msgid "" "This text will be shown above the ticket shop once the designated sales " "timeframe for this event is over. You can use it to describe other options " "to get a ticket, such as a box office." msgstr "" -#: pretix/base/settings.py:934 +#: pretix/base/settings.py:947 msgid "Guidance text" msgstr "" -#: pretix/base/settings.py:935 +#: pretix/base/settings.py:948 msgid "" "This text will be shown above the payment options. You can explain the " "choices to the user here, if you want." msgstr "" -#: pretix/base/settings.py:946 pretix/base/settings.py:956 +#: pretix/base/settings.py:959 pretix/base/settings.py:969 msgid "in days" msgstr "" -#: pretix/base/settings.py:947 pretix/base/settings.py:957 +#: pretix/base/settings.py:960 pretix/base/settings.py:970 msgid "in minutes" msgstr "" -#: pretix/base/settings.py:952 +#: pretix/base/settings.py:965 msgid "Set payment term" msgstr "" -#: pretix/base/settings.py:959 +#: pretix/base/settings.py:972 msgid "" "If using days, the order will expire at the end of the last day. Using " "minutes is more exact, but should only be used for real-time payment methods." msgstr "" -#: pretix/base/settings.py:970 +#: pretix/base/settings.py:983 msgid "Payment term in days" msgstr "" -#: pretix/base/settings.py:977 +#: pretix/base/settings.py:990 msgid "" "The number of days after placing an order the user has to pay to preserve " "their reservation. If you use slow payment methods like bank transfer, we " @@ -9696,11 +9852,11 @@ msgid "" "still setting two or three days to allow people to retry failed payments." msgstr "" -#: pretix/base/settings.py:996 +#: pretix/base/settings.py:1009 msgid "Only end payment terms on weekdays" msgstr "" -#: pretix/base/settings.py:997 +#: pretix/base/settings.py:1010 msgid "" "If this is activated and the payment term of any order ends on a Saturday or " "Sunday, it will be moved to the next Monday instead. This is required in " @@ -9708,11 +9864,11 @@ msgid "" "configured below." msgstr "" -#: pretix/base/settings.py:1014 +#: pretix/base/settings.py:1027 msgid "Payment term in minutes" msgstr "" -#: pretix/base/settings.py:1015 +#: pretix/base/settings.py:1028 msgid "" "The number of minutes after placing an order the user has to pay to preserve " "their reservation. Only use this if you exclusively offer real-time payment " @@ -9720,33 +9876,33 @@ msgid "" "be a few minutes longer before the order is marked as expired." msgstr "" -#: pretix/base/settings.py:1039 +#: pretix/base/settings.py:1052 msgid "Last date of payments" msgstr "" -#: pretix/base/settings.py:1040 +#: pretix/base/settings.py:1053 msgid "" "The last date any payments are accepted. This has precedence over the terms " "configured above. If you use the event series feature and an order contains " "tickets for multiple dates, the earliest date will be used." msgstr "" -#: pretix/base/settings.py:1052 +#: pretix/base/settings.py:1065 msgid "Automatically expire unpaid orders" msgstr "" -#: pretix/base/settings.py:1053 +#: pretix/base/settings.py:1066 msgid "" "If checked, all unpaid orders will automatically go from 'pending' to " "'expired' after the end of their payment deadline. This means that those " "tickets go back to the pool and can be ordered by other people." msgstr "" -#: pretix/base/settings.py:1065 +#: pretix/base/settings.py:1078 msgid "Expiration delay" msgstr "" -#: pretix/base/settings.py:1066 +#: pretix/base/settings.py:1079 msgid "" "The order will only actually expire this many days after the expiration date " "communicated to the customer. If you select \"Only end payment terms on " @@ -9755,18 +9911,18 @@ msgid "" "enforced." msgstr "" -#: pretix/base/settings.py:1088 +#: pretix/base/settings.py:1101 msgid "Hide \"payment pending\" state on customer-facing pages" msgstr "" -#: pretix/base/settings.py:1089 +#: pretix/base/settings.py:1102 msgid "" "The payment instructions panel will still be shown to the primary customer, " "but no indication of missing payment will be visible on the ticket pages of " "attendees who did not buy the ticket themselves." msgstr "" -#: pretix/base/settings.py:1107 +#: pretix/base/settings.py:1120 msgid "" "If you have a gift card, please enter the gift card code here. If the gift " "card does not have enough credit to pay for the full order, you will be " @@ -9774,204 +9930,204 @@ msgid "" "a different payment method for the difference." msgstr "" -#: pretix/base/settings.py:1126 +#: pretix/base/settings.py:1139 msgid "Accept late payments" msgstr "" -#: pretix/base/settings.py:1127 +#: pretix/base/settings.py:1140 msgid "" "Accept payments for orders even when they are in 'expired' state as long as " "enough capacity is available. No payments will ever be accepted after the " "'Last date of payments' configured above." msgstr "" -#: pretix/base/settings.py:1138 +#: pretix/base/settings.py:1151 msgid "Show start date" msgstr "" -#: pretix/base/settings.py:1139 +#: pretix/base/settings.py:1152 msgid "Show the presale start date before presale has started." msgstr "" -#: pretix/base/settings.py:1150 pretix/base/settings.py:1159 -#: pretix/base/settings.py:1173 pretix/base/settings.py:1182 +#: pretix/base/settings.py:1163 pretix/base/settings.py:1172 +#: pretix/base/settings.py:1186 pretix/base/settings.py:1195 msgid "Use default tax rate" msgstr "" -#: pretix/base/settings.py:1151 pretix/base/settings.py:1160 -#: pretix/base/settings.py:1171 pretix/base/settings.py:1180 +#: pretix/base/settings.py:1164 pretix/base/settings.py:1173 +#: pretix/base/settings.py:1184 pretix/base/settings.py:1193 msgid "Charge no taxes" msgstr "" -#: pretix/base/settings.py:1156 +#: pretix/base/settings.py:1169 msgid "Tax handling on payment fees" msgstr "" -#: pretix/base/settings.py:1172 pretix/base/settings.py:1181 +#: pretix/base/settings.py:1185 pretix/base/settings.py:1194 msgid "Use same taxes as order positions (split according to net prices)" msgstr "" -#: pretix/base/settings.py:1177 +#: pretix/base/settings.py:1190 msgid "Tax handling on cancellation fees" msgstr "" -#: pretix/base/settings.py:1193 pretix/base/settings.py:1206 +#: pretix/base/settings.py:1206 pretix/base/settings.py:1219 msgid "Do not generate invoices" msgstr "" -#: pretix/base/settings.py:1194 pretix/base/settings.py:1211 +#: pretix/base/settings.py:1207 pretix/base/settings.py:1224 msgid "Only manually in admin panel" msgstr "" -#: pretix/base/settings.py:1195 pretix/base/settings.py:1209 +#: pretix/base/settings.py:1208 pretix/base/settings.py:1222 msgid "Automatically on user request" msgstr "" -#: pretix/base/settings.py:1196 pretix/base/settings.py:1210 +#: pretix/base/settings.py:1209 pretix/base/settings.py:1223 msgid "Automatically on user request for paid orders" msgstr "" -#: pretix/base/settings.py:1197 +#: pretix/base/settings.py:1210 msgid "Automatically for all created orders" msgstr "" -#: pretix/base/settings.py:1198 +#: pretix/base/settings.py:1211 msgid "Automatically on payment or when required by payment method" msgstr "" -#: pretix/base/settings.py:1203 +#: pretix/base/settings.py:1216 msgid "Generate invoices" msgstr "" -#: pretix/base/settings.py:1207 +#: pretix/base/settings.py:1220 msgid "Automatically after payment or when required by payment method" msgstr "" -#: pretix/base/settings.py:1208 +#: pretix/base/settings.py:1221 msgid "Automatically before payment for all created orders" msgstr "" -#: pretix/base/settings.py:1213 +#: pretix/base/settings.py:1226 msgid "Invoices will never be automatically generated for free orders." msgstr "" -#: pretix/base/settings.py:1223 pretix/base/settings.py:1235 +#: pretix/base/settings.py:1236 pretix/base/settings.py:1248 msgid "" "Automatic based on ticket-specific validity, membership validity, event " "series date, or event date" msgstr "" -#: pretix/base/settings.py:1224 pretix/base/settings.py:1236 +#: pretix/base/settings.py:1237 pretix/base/settings.py:1249 msgid "Automatic, but prefer invoice date over event date" msgstr "" -#: pretix/base/settings.py:1227 pretix/base/settings.py:1239 +#: pretix/base/settings.py:1240 pretix/base/settings.py:1252 msgid "Invoice date" msgstr "" -#: pretix/base/settings.py:1232 +#: pretix/base/settings.py:1245 msgid "Date of service" msgstr "" -#: pretix/base/settings.py:1241 +#: pretix/base/settings.py:1254 msgid "" "This controls what dates are shown on the invoice, but is especially " "important for electronic invoicing." msgstr "" -#: pretix/base/settings.py:1253 +#: pretix/base/settings.py:1266 msgid "Automatically cancel and reissue invoice on address changes" msgstr "" -#: pretix/base/settings.py:1254 +#: pretix/base/settings.py:1267 msgid "" "If customers change their invoice address on an existing order, the invoice " "will automatically be canceled and a new invoice will be issued. This " "setting does not affect changes made through the backend." msgstr "" -#: pretix/base/settings.py:1266 +#: pretix/base/settings.py:1279 msgid "Allow to update existing invoices" msgstr "" -#: pretix/base/settings.py:1267 +#: pretix/base/settings.py:1280 msgid "" "By default, invoices can never again be changed once they are issued. In " "most countries, we recommend to leave this option turned off and always " "issue a new invoice if a change needs to be made." msgstr "" -#: pretix/base/settings.py:1283 +#: pretix/base/settings.py:1296 msgid "Only issue invoices to business customers" msgstr "" -#: pretix/base/settings.py:1293 +#: pretix/base/settings.py:1306 msgid "Address line" msgstr "" -#: pretix/base/settings.py:1297 +#: pretix/base/settings.py:1310 msgid "Albert Einstein Road 52" msgstr "" -#: pretix/base/settings.py:1377 +#: pretix/base/settings.py:1390 msgid "Domestic tax ID" msgstr "" -#: pretix/base/settings.py:1378 +#: pretix/base/settings.py:1391 msgid "e.g. tax number in Germany, ABN in Australia, …" msgstr "" -#: pretix/base/settings.py:1389 +#: pretix/base/settings.py:1402 msgid "EU VAT ID" msgstr "" -#: pretix/base/settings.py:1404 +#: pretix/base/settings.py:1417 msgid "e.g. With this document, we sent you the invoice for your ticket order." msgstr "" -#: pretix/base/settings.py:1407 +#: pretix/base/settings.py:1420 msgid "Introductory text" msgstr "" -#: pretix/base/settings.py:1408 +#: pretix/base/settings.py:1421 msgid "Will be printed on every invoice above the invoice rows." msgstr "" -#: pretix/base/settings.py:1422 +#: pretix/base/settings.py:1435 msgid "" "e.g. Thank you for your purchase! You can find more information on the event " "at ..." msgstr "" -#: pretix/base/settings.py:1425 +#: pretix/base/settings.py:1438 msgid "Additional text" msgstr "" -#: pretix/base/settings.py:1426 +#: pretix/base/settings.py:1439 msgid "Will be printed on every invoice below the invoice total." msgstr "" -#: pretix/base/settings.py:1440 +#: pretix/base/settings.py:1453 msgid "" "e.g. your bank details, legal details like your VAT ID, registration " "numbers, etc." msgstr "" -#: pretix/base/settings.py:1443 +#: pretix/base/settings.py:1456 msgid "Footer" msgstr "" -#: pretix/base/settings.py:1444 +#: pretix/base/settings.py:1457 msgid "" "Will be printed centered and in a smaller font at the end of every invoice " "page." msgstr "" -#: pretix/base/settings.py:1459 +#: pretix/base/settings.py:1472 msgid "Attach invoices to emails" msgstr "" -#: pretix/base/settings.py:1460 +#: pretix/base/settings.py:1473 msgid "" "If invoices are automatically generated for all orders, they will be " "attached to the order confirmation mail. If they are automatically generated " @@ -9979,39 +10135,39 @@ msgid "" "are not automatically generated, they will not be attached to emails." msgstr "" -#: pretix/base/settings.py:1473 +#: pretix/base/settings.py:1486 msgid "Email address to receive a copy of each invoice" msgstr "" -#: pretix/base/settings.py:1474 +#: pretix/base/settings.py:1487 msgid "" "Each newly created invoice will be sent to this email address shortly after " "creation. You can use this for an automated import of invoices to your " "accounting system. The invoice will be the only attachment of the email." msgstr "" -#: pretix/base/settings.py:1489 +#: pretix/base/settings.py:1502 msgid "Show items outside presale period" msgstr "" -#: pretix/base/settings.py:1490 +#: pretix/base/settings.py:1503 msgid "" "Show item details before presale has started and after presale has ended" msgstr "" -#: pretix/base/settings.py:1510 +#: pretix/base/settings.py:1523 msgid "Available languages" msgstr "" -#: pretix/base/settings.py:1526 pretix/control/forms/event.py:151 +#: pretix/base/settings.py:1539 pretix/control/forms/event.py:151 msgid "Default language" msgstr "" -#: pretix/base/settings.py:1536 +#: pretix/base/settings.py:1549 msgid "Region" msgstr "" -#: pretix/base/settings.py:1537 +#: pretix/base/settings.py:1550 msgid "" "Will be used to determine date and time formatting as well as default " "country for customer addresses and phone numbers. For formatting, this takes " @@ -10019,11 +10175,11 @@ msgid "" "languages used in different regions globally (like English)." msgstr "" -#: pretix/base/settings.py:1549 +#: pretix/base/settings.py:1562 msgid "This shop represents an event" msgstr "" -#: pretix/base/settings.py:1551 +#: pretix/base/settings.py:1564 msgid "" "Uncheck this box if you are only selling something that has no specific " "date, such as gift cards or a ticket that can be used any time. The system " @@ -10032,45 +10188,45 @@ msgid "" "may still show up in other places." msgstr "" -#: pretix/base/settings.py:1564 +#: pretix/base/settings.py:1577 msgid "Show event end date" msgstr "" -#: pretix/base/settings.py:1565 +#: pretix/base/settings.py:1578 msgid "If disabled, only event's start date will be displayed to the public." msgstr "" -#: pretix/base/settings.py:1574 +#: pretix/base/settings.py:1587 msgid "Show dates with time" msgstr "" -#: pretix/base/settings.py:1575 +#: pretix/base/settings.py:1588 msgid "" "If disabled, the event's start and end date will be displayed without the " "time of day." msgstr "" -#: pretix/base/settings.py:1584 +#: pretix/base/settings.py:1597 msgid "Hide all products that are sold out" msgstr "" -#: pretix/base/settings.py:1594 pretix/control/forms/event.py:1870 +#: pretix/base/settings.py:1607 pretix/control/forms/event.py:1870 msgid "Publicly show how many tickets of a certain type are still available." msgstr "" -#: pretix/base/settings.py:1603 +#: pretix/base/settings.py:1616 msgid "Ask search engines not to index the ticket shop" msgstr "" -#: pretix/base/settings.py:1612 +#: pretix/base/settings.py:1625 msgid "Show variations of a product expanded by default" msgstr "" -#: pretix/base/settings.py:1621 +#: pretix/base/settings.py:1634 msgid "Enable waiting list" msgstr "" -#: pretix/base/settings.py:1622 pretix/control/forms/event.py:1875 +#: pretix/base/settings.py:1635 pretix/control/forms/event.py:1875 msgid "" "Once a ticket is sold out, people can add themselves to a waiting list. As " "soon as a ticket becomes available again, it will be reserved for the first " @@ -10078,11 +10234,11 @@ msgid "" "notification with a voucher that can be used to buy a ticket." msgstr "" -#: pretix/base/settings.py:1633 +#: pretix/base/settings.py:1646 msgid "Automatic waiting list assignments" msgstr "" -#: pretix/base/settings.py:1634 +#: pretix/base/settings.py:1647 msgid "" "If ticket capacity becomes free, automatically create a voucher and send it " "to the first person on the waiting list for that product. If this is not " @@ -10091,22 +10247,22 @@ msgid "" "enabled, tickets will still be sent out." msgstr "" -#: pretix/base/settings.py:1650 +#: pretix/base/settings.py:1663 msgid "Waiting list response time" msgstr "" -#: pretix/base/settings.py:1653 +#: pretix/base/settings.py:1666 msgid "" "If a ticket voucher is sent to a person on the waiting list, it has to be " "redeemed within this number of hours until it expires and can be re-assigned " "to the next person on the list." msgstr "" -#: pretix/base/settings.py:1664 +#: pretix/base/settings.py:1677 msgid "Disable waiting list" msgstr "" -#: pretix/base/settings.py:1665 +#: pretix/base/settings.py:1678 msgid "" "The waiting list will be fully disabled after this date. This means that " "nobody can add themselves to the waiting list any more, but also that " @@ -10115,53 +10271,53 @@ msgid "" "remain active." msgstr "" -#: pretix/base/settings.py:1677 +#: pretix/base/settings.py:1690 msgid "Ask for a name" msgstr "" -#: pretix/base/settings.py:1678 +#: pretix/base/settings.py:1691 msgid "Ask for a name when signing up to the waiting list." msgstr "" -#: pretix/base/settings.py:1687 +#: pretix/base/settings.py:1700 msgid "Require name" msgstr "" -#: pretix/base/settings.py:1688 +#: pretix/base/settings.py:1701 msgid "Require a name when signing up to the waiting list.." msgstr "" -#: pretix/base/settings.py:1698 +#: pretix/base/settings.py:1711 msgid "Ask for a phone number" msgstr "" -#: pretix/base/settings.py:1699 +#: pretix/base/settings.py:1712 msgid "Ask for a phone number when signing up to the waiting list." msgstr "" -#: pretix/base/settings.py:1708 +#: pretix/base/settings.py:1721 msgid "Require phone number" msgstr "" -#: pretix/base/settings.py:1709 +#: pretix/base/settings.py:1722 msgid "Require a phone number when signing up to the waiting list.." msgstr "" -#: pretix/base/settings.py:1719 +#: pretix/base/settings.py:1732 msgid "Phone number explanation" msgstr "" -#: pretix/base/settings.py:1722 +#: pretix/base/settings.py:1735 msgid "" "If you ask for a phone number, explain why you do so and what you will use " "the phone number for." msgstr "" -#: pretix/base/settings.py:1734 +#: pretix/base/settings.py:1747 msgid "Maximum number of entries per email address for the same product" msgstr "" -#: pretix/base/settings.py:1738 +#: pretix/base/settings.py:1751 msgid "" "With an increased limit, a customer may request more than one ticket for a " "specific product using the same, unique email address. However, regardless " @@ -10170,11 +10326,11 @@ msgid "" "ticket at a time." msgstr "" -#: pretix/base/settings.py:1750 +#: pretix/base/settings.py:1763 msgid "Show number of check-ins to customer" msgstr "" -#: pretix/base/settings.py:1751 +#: pretix/base/settings.py:1764 msgid "" "With this option enabled, your customers will be able to see how many times " "they entered the event. This is usually not necessary, but might be useful " @@ -10184,62 +10340,62 @@ msgid "" "check-in lists." msgstr "" -#: pretix/base/settings.py:1764 +#: pretix/base/settings.py:1777 msgid "Allow users to download tickets" msgstr "" -#: pretix/base/settings.py:1765 +#: pretix/base/settings.py:1778 msgid "If this is off, nobody can download a ticket." msgstr "" -#: pretix/base/settings.py:1774 +#: pretix/base/settings.py:1787 msgid "Download date" msgstr "" -#: pretix/base/settings.py:1775 +#: pretix/base/settings.py:1788 msgid "" "Ticket download will be offered after this date. If you use the event series " "feature and an order contains tickets for multiple event dates, download of " "all tickets will be available if at least one of the event dates allows it." msgstr "" -#: pretix/base/settings.py:1786 +#: pretix/base/settings.py:1799 msgid "Generate tickets for add-on products and bundled products" msgstr "" -#: pretix/base/settings.py:1787 +#: pretix/base/settings.py:1800 msgid "" "By default, tickets are only issued for products selected individually, not " "for add-on products or bundled products. With this option, a separate ticket " "is issued for every add-on product or bundled product as well." msgstr "" -#: pretix/base/settings.py:1800 +#: pretix/base/settings.py:1813 msgid "Generate tickets for all products" msgstr "" -#: pretix/base/settings.py:1801 +#: pretix/base/settings.py:1814 msgid "" "If turned off, tickets are only issued for products that are marked as an " "\"admission ticket\"in the product settings. You can also turn off ticket " "issuing in every product separately." msgstr "" -#: pretix/base/settings.py:1813 +#: pretix/base/settings.py:1826 msgid "Generate tickets for pending orders" msgstr "" -#: pretix/base/settings.py:1814 +#: pretix/base/settings.py:1827 msgid "" "If turned off, ticket downloads are only possible after an order has been " "marked as paid." msgstr "" -#: pretix/base/settings.py:1825 +#: pretix/base/settings.py:1838 msgid "Do not issue ticket before email address is validated" msgstr "" -#: pretix/base/settings.py:1826 +#: pretix/base/settings.py:1839 msgid "" "If turned on, tickets will not be offered for download directly after " "purchase. They will be attached to the payment confirmation email (if the " @@ -10248,11 +10404,11 @@ msgid "" "orders performed through other sales channels." msgstr "" -#: pretix/base/settings.py:1842 +#: pretix/base/settings.py:1855 msgid "Low availability threshold" msgstr "" -#: pretix/base/settings.py:1843 +#: pretix/base/settings.py:1856 msgid "" "If the availability of tickets falls below this percentage, the event (or a " "date, if it is an event series) will be highlighted to have low availability " @@ -10260,95 +10416,95 @@ msgid "" "availability will not be shown publicly." msgstr "" -#: pretix/base/settings.py:1857 +#: pretix/base/settings.py:1870 msgid "Show availability in event overviews" msgstr "" -#: pretix/base/settings.py:1858 +#: pretix/base/settings.py:1871 msgid "" "If checked, the list of events will show if events are sold out. This might " "make for longer page loading times if you have lots of events and the shown " "status might be out of date for up to two minutes." msgstr "" -#: pretix/base/settings.py:1871 pretix/base/settings.py:1879 +#: pretix/base/settings.py:1884 pretix/base/settings.py:1892 #: pretix/presale/templates/pretixpresale/fragment_calendar_nav.html:8 msgid "List" msgstr "" -#: pretix/base/settings.py:1872 pretix/base/settings.py:1880 +#: pretix/base/settings.py:1885 pretix/base/settings.py:1893 msgid "Week calendar" msgstr "" -#: pretix/base/settings.py:1873 pretix/base/settings.py:1881 +#: pretix/base/settings.py:1886 pretix/base/settings.py:1894 msgid "Month calendar" msgstr "" -#: pretix/base/settings.py:1877 +#: pretix/base/settings.py:1890 msgid "Default overview style" msgstr "" -#: pretix/base/settings.py:1883 +#: pretix/base/settings.py:1896 msgid "" "If your event series has more than 50 dates in the future, only the month or " "week calendar can be used." msgstr "" -#: pretix/base/settings.py:1892 +#: pretix/base/settings.py:1905 msgid "Show filter options for calendar or list view" msgstr "" -#: pretix/base/settings.py:1893 +#: pretix/base/settings.py:1906 msgid "" "You can set up possible filters as meta properties in your organizer " "settings." msgstr "" -#: pretix/base/settings.py:1902 +#: pretix/base/settings.py:1915 msgid "Hide all unavailable dates from calendar or list views" msgstr "" -#: pretix/base/settings.py:1903 pretix/base/settings.py:1914 +#: pretix/base/settings.py:1916 pretix/base/settings.py:1927 msgid "" "This option currently only affects the calendar of this event series, not " "the organizer-wide calendar." msgstr "" -#: pretix/base/settings.py:1913 +#: pretix/base/settings.py:1926 msgid "Hide all past dates from calendar" msgstr "" -#: pretix/base/settings.py:1925 pretix/base/settings.py:1934 +#: pretix/base/settings.py:1938 pretix/base/settings.py:1947 msgid "No modifications after order was submitted" msgstr "" -#: pretix/base/settings.py:1926 pretix/base/settings.py:1935 +#: pretix/base/settings.py:1939 pretix/base/settings.py:1948 msgid "Only the person who ordered can make changes" msgstr "" -#: pretix/base/settings.py:1927 pretix/base/settings.py:1936 +#: pretix/base/settings.py:1940 pretix/base/settings.py:1949 msgid "Both the attendee and the person who ordered can make changes" msgstr "" -#: pretix/base/settings.py:1931 +#: pretix/base/settings.py:1944 msgid "Allow customers to modify their information" msgstr "" -#: pretix/base/settings.py:1946 +#: pretix/base/settings.py:1959 msgid "Allow customers to modify their information after they checked in." msgstr "" -#: pretix/base/settings.py:1947 +#: pretix/base/settings.py:1960 msgid "" "By default, no more modifications are possible for an order as soon as one " "of the tickets in the order has been checked in." msgstr "" -#: pretix/base/settings.py:1957 +#: pretix/base/settings.py:1970 msgid "Last date of modifications" msgstr "" -#: pretix/base/settings.py:1958 +#: pretix/base/settings.py:1971 msgid "" "The last date users can modify details of their orders, such as attendee " "names or answers to questions. If you use the event series feature and an " @@ -10356,53 +10512,53 @@ msgid "" "used." msgstr "" -#: pretix/base/settings.py:1969 +#: pretix/base/settings.py:1982 msgid "Customers can change the variation of the products they purchased" msgstr "" -#: pretix/base/settings.py:1978 +#: pretix/base/settings.py:1991 msgid "Customers can change their selected add-on products" msgstr "" -#: pretix/base/settings.py:1988 pretix/base/settings.py:1999 +#: pretix/base/settings.py:2001 pretix/base/settings.py:2012 msgid "" "Only allow changes if the resulting price is higher or equal than the " "previous price." msgstr "" -#: pretix/base/settings.py:1989 pretix/base/settings.py:2000 +#: pretix/base/settings.py:2002 pretix/base/settings.py:2013 msgid "" "Only allow changes if the resulting price is higher than the previous price." msgstr "" -#: pretix/base/settings.py:1990 pretix/base/settings.py:2001 +#: pretix/base/settings.py:2003 pretix/base/settings.py:2014 msgid "" "Only allow changes if the resulting price is equal to the previous price." msgstr "" -#: pretix/base/settings.py:1991 pretix/base/settings.py:2002 +#: pretix/base/settings.py:2004 pretix/base/settings.py:2015 msgid "" "Allow changes regardless of price, as long as no refund is required (i.e. " "the resulting price is not lower than what has already been paid)." msgstr "" -#: pretix/base/settings.py:1993 pretix/base/settings.py:2004 +#: pretix/base/settings.py:2006 pretix/base/settings.py:2017 msgid "Allow changes regardless of price, even if this results in a refund." msgstr "" -#: pretix/base/settings.py:1997 +#: pretix/base/settings.py:2010 msgid "Requirement for changed prices" msgstr "" -#: pretix/base/settings.py:2015 +#: pretix/base/settings.py:2028 msgid "Do not allow changes after" msgstr "" -#: pretix/base/settings.py:2024 +#: pretix/base/settings.py:2037 msgid "Allow change even though the ticket has already been checked in" msgstr "" -#: pretix/base/settings.py:2025 +#: pretix/base/settings.py:2038 msgid "" "By default, order changes are disabled after any ticket in the order has " "been checked in. If you check this box, this requirement is lifted. It is " @@ -10411,11 +10567,11 @@ msgid "" "limitation on price changes above." msgstr "" -#: pretix/base/settings.py:2037 +#: pretix/base/settings.py:2050 msgid "Allow individual attendees to change their ticket" msgstr "" -#: pretix/base/settings.py:2038 +#: pretix/base/settings.py:2051 msgid "" "By default, only the person who ordered the tickets can make any changes. If " "you check this box, individual attendees can also make changes. However, " @@ -10424,77 +10580,77 @@ msgid "" "customer." msgstr "" -#: pretix/base/settings.py:2050 +#: pretix/base/settings.py:2063 msgid "Customers can cancel their unpaid orders" msgstr "" -#: pretix/base/settings.py:2062 +#: pretix/base/settings.py:2075 msgid "Charge a fixed cancellation fee" msgstr "" -#: pretix/base/settings.py:2063 pretix/base/settings.py:2074 -#: pretix/base/settings.py:2088 +#: pretix/base/settings.py:2076 pretix/base/settings.py:2087 +#: pretix/base/settings.py:2101 msgid "" "Only affects orders pending payments, a cancellation fee for free orders is " "never charged. Note that it will be your responsibility to claim the " "cancellation fee from the user." msgstr "" -#: pretix/base/settings.py:2073 +#: pretix/base/settings.py:2086 msgid "Charge payment, shipping and service fees" msgstr "" -#: pretix/base/settings.py:2087 +#: pretix/base/settings.py:2100 msgid "Charge a percentual cancellation fee" msgstr "" -#: pretix/base/settings.py:2098 pretix/base/settings.py:2237 +#: pretix/base/settings.py:2111 pretix/base/settings.py:2250 msgid "Do not allow cancellations after" msgstr "" -#: pretix/base/settings.py:2107 +#: pretix/base/settings.py:2120 msgid "Customers can cancel their paid orders" msgstr "" -#: pretix/base/settings.py:2108 +#: pretix/base/settings.py:2121 msgid "" "Paid money will be automatically paid back if the payment method allows it. " "Otherwise, a manual refund will be created for you to process manually." msgstr "" -#: pretix/base/settings.py:2121 pretix/control/forms/orders.py:917 +#: pretix/base/settings.py:2134 pretix/control/forms/orders.py:917 msgid "Keep a fixed cancellation fee" msgstr "" -#: pretix/base/settings.py:2130 +#: pretix/base/settings.py:2143 msgid "Keep payment, shipping and service fees" msgstr "" -#: pretix/base/settings.py:2142 pretix/control/forms/orders.py:928 +#: pretix/base/settings.py:2155 pretix/control/forms/orders.py:928 msgid "Keep a percentual cancellation fee" msgstr "" -#: pretix/base/settings.py:2151 +#: pretix/base/settings.py:2164 msgid "Allow customers to voluntarily choose a lower refund" msgstr "" -#: pretix/base/settings.py:2152 +#: pretix/base/settings.py:2165 msgid "" "With this option enabled, your customers can choose to get a smaller refund " "to support you." msgstr "" -#: pretix/base/settings.py:2157 +#: pretix/base/settings.py:2170 msgid "" "However, if you want us to help keep the lights on here, please consider " "using the slider below to request a smaller refund. Thank you!" msgstr "" -#: pretix/base/settings.py:2164 +#: pretix/base/settings.py:2177 msgid "Voluntary lower refund explanation" msgstr "" -#: pretix/base/settings.py:2167 +#: pretix/base/settings.py:2180 msgid "" "This text will be shown in between the explanation of how the refunds work " "and the slider which your customers can use to choose the amount they would " @@ -10502,107 +10658,107 @@ msgid "" "help your organization." msgstr "" -#: pretix/base/settings.py:2182 +#: pretix/base/settings.py:2195 msgid "Step size for reduction amount" msgstr "" -#: pretix/base/settings.py:2183 +#: pretix/base/settings.py:2196 msgid "" "By default, customers can choose an arbitrary amount for you to keep. If you " "set this to e.g. 10, they will only be able to choose values in increments " "of 10." msgstr "" -#: pretix/base/settings.py:2193 +#: pretix/base/settings.py:2206 msgid "" "Customers can only request a cancellation that needs to be approved by the " "event organizer before the order is canceled and a refund is issued." msgstr "" -#: pretix/base/settings.py:2203 +#: pretix/base/settings.py:2216 msgid "" "Do not show the cancellation fee to users when they request cancellation." msgstr "" -#: pretix/base/settings.py:2212 pretix/base/settings.py:2222 +#: pretix/base/settings.py:2225 pretix/base/settings.py:2235 msgid "All refunds are issued to the original payment method" msgstr "" -#: pretix/base/settings.py:2213 pretix/base/settings.py:2223 +#: pretix/base/settings.py:2226 pretix/base/settings.py:2236 msgid "" "Customers can choose between a gift card and a refund to their payment method" msgstr "" -#: pretix/base/settings.py:2214 pretix/base/settings.py:2224 +#: pretix/base/settings.py:2227 pretix/base/settings.py:2237 msgid "All refunds are issued as gift cards" msgstr "" -#: pretix/base/settings.py:2215 pretix/base/settings.py:2225 +#: pretix/base/settings.py:2228 pretix/base/settings.py:2238 msgid "Do not handle refunds automatically at all" msgstr "" -#: pretix/base/settings.py:2220 +#: pretix/base/settings.py:2233 #: pretix/control/templates/pretixcontrol/order/index.html:182 msgid "Refund method" msgstr "" -#: pretix/base/settings.py:2246 pretix/base/settings.py:2259 +#: pretix/base/settings.py:2259 pretix/base/settings.py:2272 msgid "Terms of cancellation" msgstr "" -#: pretix/base/settings.py:2249 +#: pretix/base/settings.py:2262 msgid "" "This text will be shown when cancellation is allowed for a paid order. Leave " "empty if you want pretix to automatically generate the terms of cancellation " "based on your settings." msgstr "" -#: pretix/base/settings.py:2262 +#: pretix/base/settings.py:2275 msgid "" "This text will be shown when cancellation is allowed for an unpaid or free " "order. Leave empty if you want pretix to automatically generate the terms of " "cancellation based on your settings." msgstr "" -#: pretix/base/settings.py:2272 pretix/control/forms/event.py:1898 +#: pretix/base/settings.py:2285 pretix/control/forms/event.py:1898 msgid "Contact address" msgstr "" -#: pretix/base/settings.py:2273 pretix/control/forms/event.py:1900 +#: pretix/base/settings.py:2286 pretix/control/forms/event.py:1900 msgid "We'll show this publicly to allow attendees to contact you." msgstr "" -#: pretix/base/settings.py:2281 pretix/control/forms/event.py:1892 +#: pretix/base/settings.py:2294 pretix/control/forms/event.py:1892 msgid "Imprint URL" msgstr "" -#: pretix/base/settings.py:2282 pretix/control/forms/event.py:1893 +#: pretix/base/settings.py:2295 pretix/control/forms/event.py:1893 msgid "" "This should point e.g. to a part of your website that has your contact " "details and legal information." msgstr "" -#: pretix/base/settings.py:2292 +#: pretix/base/settings.py:2305 msgid "Privacy Policy URL" msgstr "" -#: pretix/base/settings.py:2293 +#: pretix/base/settings.py:2306 msgid "" "This should point e.g. to a part of your website that explains how you use " "data gathered in your ticket shop." msgstr "" -#: pretix/base/settings.py:2304 +#: pretix/base/settings.py:2317 msgid "Accessibility information URL" msgstr "" -#: pretix/base/settings.py:2305 +#: pretix/base/settings.py:2318 msgid "" "This should point e.g. to a part of your website that explains how your " "ticket shop complies with accessibility regulation." msgstr "" -#: pretix/base/settings.py:2312 +#: pretix/base/settings.py:2325 #: pretix/presale/templates/pretixpresale/event/base.html:229 #: pretix/presale/templates/pretixpresale/event/base.html:234 #: pretix/presale/templates/pretixpresale/organizers/accessibility.html:6 @@ -10611,52 +10767,52 @@ msgstr "" msgid "Accessibility information" msgstr "" -#: pretix/base/settings.py:2316 +#: pretix/base/settings.py:2329 msgid "Accessibility information title" msgstr "" -#: pretix/base/settings.py:2326 +#: pretix/base/settings.py:2339 msgid "Accessibility information text" msgstr "" -#: pretix/base/settings.py:2347 +#: pretix/base/settings.py:2360 msgid "Attach ticket files" msgstr "" -#: pretix/base/settings.py:2349 +#: pretix/base/settings.py:2362 #, python-brace-format msgid "" "Tickets will never be attached if they're larger than {size} to avoid email " "delivery problems." msgstr "" -#: pretix/base/settings.py:2360 pretix/plugins/sendmail/forms.py:201 +#: pretix/base/settings.py:2373 pretix/plugins/sendmail/forms.py:201 #: pretix/plugins/sendmail/models.py:263 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:66 msgid "Attach calendar files" msgstr "" -#: pretix/base/settings.py:2361 +#: pretix/base/settings.py:2374 msgid "" "If enabled, we will attach an .ics calendar file to order confirmation " "emails." msgstr "" -#: pretix/base/settings.py:2370 +#: pretix/base/settings.py:2383 msgid "Attach calendar files only after order has been paid" msgstr "" -#: pretix/base/settings.py:2371 +#: pretix/base/settings.py:2384 msgid "" "Use this if you e.g. put a private access link into the calendar file to " "make sure people only receive it after their payment was confirmed." msgstr "" -#: pretix/base/settings.py:2380 +#: pretix/base/settings.py:2393 msgid "Event description" msgstr "" -#: pretix/base/settings.py:2383 +#: pretix/base/settings.py:2396 msgid "" "You can use this to share information with your attendees, such as travel " "information or the link to a digital event. If you keep it empty, we will " @@ -10666,52 +10822,52 @@ msgid "" "people." msgstr "" -#: pretix/base/settings.py:2396 +#: pretix/base/settings.py:2409 msgid "Subject prefix" msgstr "" -#: pretix/base/settings.py:2397 +#: pretix/base/settings.py:2410 msgid "" "This will be prepended to the subject of all outgoing emails, formatted as " "[prefix]. Choose, for example, a short form of your event name." msgstr "" -#: pretix/base/settings.py:2411 pretix/control/forms/mailsetup.py:37 +#: pretix/base/settings.py:2424 pretix/control/forms/mailsetup.py:37 #: pretix/control/forms/mailsetup.py:119 #: pretix/control/templates/pretixcontrol/event/mail.html:39 #: pretix/control/templates/pretixcontrol/organizers/mail.html:40 msgid "Sender address" msgstr "" -#: pretix/base/settings.py:2412 pretix/control/forms/mailsetup.py:38 +#: pretix/base/settings.py:2425 pretix/control/forms/mailsetup.py:38 #: pretix/control/forms/mailsetup.py:120 msgid "Sender address for outgoing emails" msgstr "" -#: pretix/base/settings.py:2421 +#: pretix/base/settings.py:2434 msgid "Sender name" msgstr "" -#: pretix/base/settings.py:2422 +#: pretix/base/settings.py:2435 msgid "" "Sender name used in conjunction with the sender address for outgoing emails. " "Defaults to your event name." msgstr "" -#: pretix/base/settings.py:2440 pretix/base/settings.py:2497 -#: pretix/base/settings.py:2514 pretix/base/settings.py:2532 +#: pretix/base/settings.py:2453 pretix/base/settings.py:2510 +#: pretix/base/settings.py:2527 pretix/base/settings.py:2545 #, python-brace-format msgid "Your order: {code}" msgstr "" -#: pretix/base/settings.py:2444 pretix/base/settings.py:2477 -#: pretix/base/settings.py:2582 pretix/base/settings.py:2815 -#: pretix/base/settings.py:2852 +#: pretix/base/settings.py:2457 pretix/base/settings.py:2490 +#: pretix/base/settings.py:2595 pretix/base/settings.py:2828 +#: pretix/base/settings.py:2865 #, python-brace-format msgid "Your event registration: {code}" msgstr "" -#: pretix/base/settings.py:2448 +#: pretix/base/settings.py:2461 #, python-brace-format msgid "" "Hello,\n" @@ -10726,12 +10882,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2461 +#: pretix/base/settings.py:2474 #, python-brace-format msgid "Your orders for {event}" msgstr "" -#: pretix/base/settings.py:2465 +#: pretix/base/settings.py:2478 #, python-brace-format msgid "" "Hello,\n" @@ -10745,7 +10901,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2481 +#: pretix/base/settings.py:2494 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -10759,7 +10915,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2501 +#: pretix/base/settings.py:2514 #, python-brace-format msgid "" "Hello,\n" @@ -10774,7 +10930,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2518 +#: pretix/base/settings.py:2531 #, python-brace-format msgid "" "Hello,\n" @@ -10790,7 +10946,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2536 +#: pretix/base/settings.py:2549 #, python-brace-format msgid "" "Hello,\n" @@ -10808,11 +10964,11 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2554 +#: pretix/base/settings.py:2567 msgid "Attachment for new orders" msgstr "" -#: pretix/base/settings.py:2559 +#: pretix/base/settings.py:2572 #, python-brace-format msgid "" "This file will be attached to the first email that we send for every new " @@ -10824,7 +10980,7 @@ msgid "" "vital email going to spam, you can only upload PDF files of up to {size} MB." msgstr "" -#: pretix/base/settings.py:2586 +#: pretix/base/settings.py:2599 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -10838,12 +10994,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2598 +#: pretix/base/settings.py:2611 #, python-brace-format msgid "Your order has been changed: {code}" msgstr "" -#: pretix/base/settings.py:2602 +#: pretix/base/settings.py:2615 #, python-brace-format msgid "" "Hello,\n" @@ -10857,12 +11013,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2614 +#: pretix/base/settings.py:2627 #, python-brace-format msgid "Payment received for your order: {code}" msgstr "" -#: pretix/base/settings.py:2618 +#: pretix/base/settings.py:2631 #, python-brace-format msgid "" "Hello,\n" @@ -10878,12 +11034,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2636 +#: pretix/base/settings.py:2649 #, python-brace-format msgid "Event registration confirmed: {code}" msgstr "" -#: pretix/base/settings.py:2640 +#: pretix/base/settings.py:2653 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -10897,23 +11053,23 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2657 pretix/control/forms/event.py:1294 +#: pretix/base/settings.py:2670 pretix/control/forms/event.py:1294 #: pretix/control/forms/event.py:1416 pretix/plugins/sendmail/models.py:268 msgid "Number of days" msgstr "" -#: pretix/base/settings.py:2659 pretix/control/forms/event.py:1297 +#: pretix/base/settings.py:2672 pretix/control/forms/event.py:1297 msgid "" "This email will be sent out this many days before the order expires. If the " "value is 0, the mail will never be sent." msgstr "" -#: pretix/base/settings.py:2667 +#: pretix/base/settings.py:2680 #, python-brace-format msgid "Your order is about to expire: {code}" msgstr "" -#: pretix/base/settings.py:2671 +#: pretix/base/settings.py:2684 #, python-brace-format msgid "" "Hello,\n" @@ -10929,12 +11085,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2685 +#: pretix/base/settings.py:2698 #, python-brace-format msgid "Your order is pending payment: {code}" msgstr "" -#: pretix/base/settings.py:2689 +#: pretix/base/settings.py:2702 #, python-brace-format msgid "" "Hello,\n" @@ -10949,12 +11105,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2702 +#: pretix/base/settings.py:2715 #, python-brace-format msgid "Incomplete payment received: {code}" msgstr "" -#: pretix/base/settings.py:2706 +#: pretix/base/settings.py:2719 #, python-brace-format msgid "" "Hello,\n" @@ -10972,12 +11128,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2722 +#: pretix/base/settings.py:2735 #, python-brace-format msgid "Payment failed for your order: {code}" msgstr "" -#: pretix/base/settings.py:2726 +#: pretix/base/settings.py:2739 #, python-brace-format msgid "" "Hello,\n" @@ -10995,12 +11151,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2740 +#: pretix/base/settings.py:2753 #, python-brace-format msgid "You have been selected from the waitinglist for {event}" msgstr "" -#: pretix/base/settings.py:2744 +#: pretix/base/settings.py:2757 #, python-brace-format msgid "" "Hello,\n" @@ -11031,12 +11187,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2773 +#: pretix/base/settings.py:2786 #, python-brace-format msgid "Order canceled: {code}" msgstr "" -#: pretix/base/settings.py:2777 +#: pretix/base/settings.py:2790 #, python-brace-format msgid "" "Hello,\n" @@ -11052,12 +11208,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2791 +#: pretix/base/settings.py:2804 #, python-brace-format msgid "Order approved and awaiting payment: {code}" msgstr "" -#: pretix/base/settings.py:2795 +#: pretix/base/settings.py:2808 #, python-brace-format msgid "" "Hello,\n" @@ -11075,7 +11231,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2819 pretix/base/settings.py:2856 +#: pretix/base/settings.py:2832 pretix/base/settings.py:2869 #, python-brace-format msgid "" "Hello,\n" @@ -11089,12 +11245,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2831 +#: pretix/base/settings.py:2844 #, python-brace-format msgid "Order approved and confirmed: {code}" msgstr "" -#: pretix/base/settings.py:2835 +#: pretix/base/settings.py:2848 #, python-brace-format msgid "" "Hello,\n" @@ -11109,12 +11265,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2868 +#: pretix/base/settings.py:2881 #, python-brace-format msgid "Order denied: {code}" msgstr "" -#: pretix/base/settings.py:2872 +#: pretix/base/settings.py:2885 #, python-brace-format msgid "" "Hello,\n" @@ -11131,7 +11287,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2887 +#: pretix/base/settings.py:2900 #, python-brace-format msgid "" "Hello,\n" @@ -11143,12 +11299,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2897 +#: pretix/base/settings.py:2910 #, python-brace-format msgid "Invoice {invoice_number}" msgstr "" -#: pretix/base/settings.py:2901 +#: pretix/base/settings.py:2914 #, python-brace-format msgid "" "Hello,\n" @@ -11161,12 +11317,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2919 pretix/base/settings.py:2935 +#: pretix/base/settings.py:2932 pretix/base/settings.py:2948 #, python-brace-format msgid "Your ticket is ready for download: {code}" msgstr "" -#: pretix/base/settings.py:2923 +#: pretix/base/settings.py:2936 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -11180,7 +11336,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2939 +#: pretix/base/settings.py:2952 #, python-brace-format msgid "" "Hello,\n" @@ -11194,12 +11350,12 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/base/settings.py:2951 +#: pretix/base/settings.py:2964 #, python-brace-format msgid "Activate your account at {organizer}" msgstr "" -#: pretix/base/settings.py:2955 +#: pretix/base/settings.py:2968 #, python-brace-format msgid "" "Hello {name},\n" @@ -11219,12 +11375,12 @@ msgid "" "Your {organizer} team" msgstr "" -#: pretix/base/settings.py:2973 +#: pretix/base/settings.py:2986 #, python-brace-format msgid "Confirm email address for your account at {organizer}" msgstr "" -#: pretix/base/settings.py:2977 +#: pretix/base/settings.py:2990 #, python-brace-format msgid "" "Hello {name},\n" @@ -11244,12 +11400,12 @@ msgid "" "Your {organizer} team" msgstr "" -#: pretix/base/settings.py:2995 +#: pretix/base/settings.py:3008 #, python-brace-format msgid "Set a new password for your account at {organizer}" msgstr "" -#: pretix/base/settings.py:2999 +#: pretix/base/settings.py:3012 #, python-brace-format msgid "" "Hello {name},\n" @@ -11269,12 +11425,12 @@ msgid "" "Your {organizer} team" msgstr "" -#: pretix/base/settings.py:3017 +#: pretix/base/settings.py:3030 #, python-brace-format msgid "Changes to your account at {organizer}" msgstr "" -#: pretix/base/settings.py:3021 +#: pretix/base/settings.py:3034 #, python-brace-format msgid "" "Hello {name},\n" @@ -11294,57 +11450,57 @@ msgid "" "Your {organizer} team" msgstr "" -#: pretix/base/settings.py:3073 pretix/base/settings.py:3080 -#: pretix/base/settings.py:3094 pretix/base/settings.py:3102 -#: pretix/base/settings.py:3116 pretix/base/settings.py:3124 -#: pretix/base/settings.py:3138 pretix/base/settings.py:3145 +#: pretix/base/settings.py:3086 pretix/base/settings.py:3093 +#: pretix/base/settings.py:3107 pretix/base/settings.py:3115 +#: pretix/base/settings.py:3129 pretix/base/settings.py:3137 +#: pretix/base/settings.py:3151 pretix/base/settings.py:3158 msgid "Please enter the hexadecimal code of a color, e.g. #990000." msgstr "" -#: pretix/base/settings.py:3077 +#: pretix/base/settings.py:3090 msgid "Primary color" msgstr "" -#: pretix/base/settings.py:3098 +#: pretix/base/settings.py:3111 msgid "Accent color for success" msgstr "" -#: pretix/base/settings.py:3099 +#: pretix/base/settings.py:3112 msgid "We strongly suggest to use a shade of green." msgstr "" -#: pretix/base/settings.py:3120 +#: pretix/base/settings.py:3133 msgid "Accent color for errors" msgstr "" -#: pretix/base/settings.py:3121 +#: pretix/base/settings.py:3134 msgid "We strongly suggest to use a shade of red." msgstr "" -#: pretix/base/settings.py:3142 +#: pretix/base/settings.py:3155 msgid "Page background color" msgstr "" -#: pretix/base/settings.py:3157 +#: pretix/base/settings.py:3170 msgid "Use round edges" msgstr "" -#: pretix/base/settings.py:3166 +#: pretix/base/settings.py:3179 msgid "" "Use native spinners in the widget instead of custom ones for numeric inputs " "such as quantity." msgstr "" -#: pretix/base/settings.py:3177 +#: pretix/base/settings.py:3190 msgid "Only respected by modern browsers." msgstr "" -#: pretix/base/settings.py:3188 pretix/base/settings.py:3232 -#: pretix/control/forms/organizer.py:642 +#: pretix/base/settings.py:3201 pretix/base/settings.py:3245 +#: pretix/control/forms/organizer.py:652 msgid "Header image" msgstr "" -#: pretix/base/settings.py:3191 +#: pretix/base/settings.py:3204 msgid "" "If you provide a logo image, we will by default not show your event name and " "date in the page header. If you use a white background, we show your logo " @@ -11353,26 +11509,26 @@ msgid "" "using small details on the picture as it will be resized on smaller screens." msgstr "" -#: pretix/base/settings.py:3212 pretix/base/settings.py:3255 +#: pretix/base/settings.py:3225 pretix/base/settings.py:3268 msgid "Use header image in its full size" msgstr "" -#: pretix/base/settings.py:3213 pretix/base/settings.py:3256 +#: pretix/base/settings.py:3226 pretix/base/settings.py:3269 msgid "We recommend to upload a picture at least 1170 pixels wide." msgstr "" -#: pretix/base/settings.py:3222 +#: pretix/base/settings.py:3235 msgid "Show event title even if a header image is present" msgstr "" -#: pretix/base/settings.py:3223 +#: pretix/base/settings.py:3236 msgid "" "The title will only be shown on the event front page. If no header image is " "uploaded for the event, but the header image from the organizer profile is " "used, this option will be ignored and the event title will always be shown." msgstr "" -#: pretix/base/settings.py:3235 pretix/control/forms/organizer.py:646 +#: pretix/base/settings.py:3248 pretix/control/forms/organizer.py:656 msgid "" "If you provide a logo image, we will by default not show your organization " "name in the page header. If you use a white background, we show your logo " @@ -11381,25 +11537,25 @@ msgid "" "using small details on the picture as it will be resized on smaller screens." msgstr "" -#: pretix/base/settings.py:3265 +#: pretix/base/settings.py:3278 msgid "Use header image also for events without an individually uploaded logo" msgstr "" -#: pretix/base/settings.py:3273 +#: pretix/base/settings.py:3286 msgid "Favicon" msgstr "" -#: pretix/base/settings.py:3276 +#: pretix/base/settings.py:3289 msgid "" "If you provide a favicon, we will show it instead of the default pretix " "icon. We recommend a size of at least 200x200px to accommodate most devices." msgstr "" -#: pretix/base/settings.py:3292 +#: pretix/base/settings.py:3305 msgid "Social media image" msgstr "" -#: pretix/base/settings.py:3295 +#: pretix/base/settings.py:3308 msgid "" "This picture will be used as a preview if you post links to your ticket shop " "on social media. Facebook advises to use a picture size of 1200 x 630 " @@ -11408,93 +11564,93 @@ msgid "" "square is shown. If you do not fill this, we will use the logo given above." msgstr "" -#: pretix/base/settings.py:3313 +#: pretix/base/settings.py:3326 msgid "Logo image" msgstr "" -#: pretix/base/settings.py:3317 +#: pretix/base/settings.py:3330 msgid "We will show your logo with a maximal height and width of 2.5 cm." msgstr "" -#: pretix/base/settings.py:3344 pretix/base/settings.py:3450 +#: pretix/base/settings.py:3357 pretix/base/settings.py:3463 msgid "Info text" msgstr "" -#: pretix/base/settings.py:3347 pretix/base/settings.py:3452 +#: pretix/base/settings.py:3360 pretix/base/settings.py:3465 msgid "" "Not displayed anywhere by default, but if you want to, you can use this e.g. " "in ticket templates." msgstr "" -#: pretix/base/settings.py:3356 +#: pretix/base/settings.py:3369 msgid "Banner text (top)" msgstr "" -#: pretix/base/settings.py:3359 +#: pretix/base/settings.py:3372 msgid "" "This text will be shown above every page of your shop. Please only use this " "for very important messages." msgstr "" -#: pretix/base/settings.py:3369 +#: pretix/base/settings.py:3382 msgid "Banner text (bottom)" msgstr "" -#: pretix/base/settings.py:3372 +#: pretix/base/settings.py:3385 msgid "" "This text will be shown below every page of your shop. Please only use this " "for very important messages." msgstr "" -#: pretix/base/settings.py:3382 +#: pretix/base/settings.py:3395 msgid "Voucher explanation" msgstr "" -#: pretix/base/settings.py:3385 +#: pretix/base/settings.py:3398 msgid "" "This text will be shown next to the input for a voucher code. You can use it " "e.g. to explain how to obtain a voucher code." msgstr "" -#: pretix/base/settings.py:3395 +#: pretix/base/settings.py:3408 msgid "Attendee data explanation" msgstr "" -#: pretix/base/settings.py:3398 +#: pretix/base/settings.py:3411 msgid "" "This text will be shown above the questions asked for every personalized " "product. You can use it e.g. to explain why you need information from them." msgstr "" -#: pretix/base/settings.py:3408 +#: pretix/base/settings.py:3421 msgid "Additional success message" msgstr "" -#: pretix/base/settings.py:3409 +#: pretix/base/settings.py:3422 msgid "" "This message will be shown after an order has been created successfully. It " "will be shown in additional to the default text." msgstr "" -#: pretix/base/settings.py:3421 +#: pretix/base/settings.py:3434 msgid "Help text of the phone number field" msgstr "" -#: pretix/base/settings.py:3428 +#: pretix/base/settings.py:3441 msgid "" "Make sure to enter a valid email address. We will send you an order " "confirmation including a link that you need to access your order later." msgstr "" -#: pretix/base/settings.py:3435 +#: pretix/base/settings.py:3448 msgid "Help text of the email field" msgstr "" -#: pretix/base/settings.py:3461 +#: pretix/base/settings.py:3474 msgid "Allow creating a new team during event creation" msgstr "" -#: pretix/base/settings.py:3462 +#: pretix/base/settings.py:3475 msgid "" "Users that do not have access to all events under this organizer, must " "select one of their teams to have access to the created event. This setting " @@ -11502,68 +11658,68 @@ msgid "" "not have \"Can change teams and permissions\" permission." msgstr "" -#: pretix/base/settings.py:3534 pretix/base/settings.py:3544 +#: pretix/base/settings.py:3547 pretix/base/settings.py:3557 msgid "Event start time (descending)" msgstr "" -#: pretix/base/settings.py:3536 pretix/base/settings.py:3546 +#: pretix/base/settings.py:3549 pretix/base/settings.py:3559 msgid "Name (descending)" msgstr "" -#: pretix/base/settings.py:3541 +#: pretix/base/settings.py:3554 msgctxt "subevent" msgid "Date ordering" msgstr "" -#: pretix/base/settings.py:3557 +#: pretix/base/settings.py:3570 msgid "Link back to organizer overview on all event pages" msgstr "" -#: pretix/base/settings.py:3566 +#: pretix/base/settings.py:3579 msgid "Homepage text" msgstr "" -#: pretix/base/settings.py:3568 +#: pretix/base/settings.py:3581 msgid "This will be displayed on the organizer homepage." msgstr "" -#: pretix/base/settings.py:3583 +#: pretix/base/settings.py:3596 msgid "Length of gift card codes" msgstr "" -#: pretix/base/settings.py:3584 +#: pretix/base/settings.py:3597 #, python-brace-format msgid "" "The system generates by default {}-character long gift card codes. However, " "if a different length is required, it can be set here." msgstr "" -#: pretix/base/settings.py:3600 +#: pretix/base/settings.py:3613 msgid "Validity of gift card codes in years" msgstr "" -#: pretix/base/settings.py:3601 +#: pretix/base/settings.py:3614 msgid "" "If you set a number here, gift cards will by default expire at the end of " "the year after this many years. If you keep it empty, gift cards do not have " "an explicit expiry date." msgstr "" -#: pretix/base/settings.py:3612 +#: pretix/base/settings.py:3625 msgid "Enable cookie consent management features" msgstr "" -#: pretix/base/settings.py:3618 +#: pretix/base/settings.py:3631 msgid "" "By clicking \"Accept all cookies\", you agree to the storing of cookies and " "use of similar technologies on your device." msgstr "" -#: pretix/base/settings.py:3625 +#: pretix/base/settings.py:3638 msgid "Dialog text" msgstr "" -#: pretix/base/settings.py:3632 +#: pretix/base/settings.py:3645 msgid "" "We use cookies and similar technologies to gather data that allows us to " "improve this website and our offerings. If you do not agree, we will only " @@ -11571,197 +11727,197 @@ msgid "" "offers." msgstr "" -#: pretix/base/settings.py:3640 +#: pretix/base/settings.py:3653 msgid "Secondary dialog text" msgstr "" -#: pretix/base/settings.py:3646 +#: pretix/base/settings.py:3659 msgid "Privacy settings" msgstr "" -#: pretix/base/settings.py:3651 +#: pretix/base/settings.py:3664 msgid "Dialog title" msgstr "" -#: pretix/base/settings.py:3657 +#: pretix/base/settings.py:3670 msgid "Accept all cookies" msgstr "" -#: pretix/base/settings.py:3662 +#: pretix/base/settings.py:3675 msgid "\"Accept\" button description" msgstr "" -#: pretix/base/settings.py:3668 +#: pretix/base/settings.py:3681 msgid "Required cookies only" msgstr "" -#: pretix/base/settings.py:3673 +#: pretix/base/settings.py:3686 msgid "\"Reject\" button description" msgstr "" -#: pretix/base/settings.py:3683 +#: pretix/base/settings.py:3696 msgid "Customers can choose their own seats" msgstr "" -#: pretix/base/settings.py:3684 +#: pretix/base/settings.py:3697 msgid "" "If disabled, you will need to manually assign seats in the backend. Note " "that this can mean people will not know their seat after their purchase and " "it might not be written on their ticket." msgstr "" -#: pretix/base/settings.py:3710 +#: pretix/base/settings.py:3723 msgid "Show button to copy user input from other products" msgstr "" -#: pretix/base/settings.py:3724 +#: pretix/base/settings.py:3737 msgid "Most common English titles" msgstr "" -#: pretix/base/settings.py:3734 +#: pretix/base/settings.py:3747 msgid "Most common German titles" msgstr "" -#: pretix/base/settings.py:3747 +#: pretix/base/settings.py:3760 msgctxt "person_name_salutation" msgid "Ms" msgstr "" -#: pretix/base/settings.py:3748 +#: pretix/base/settings.py:3761 msgctxt "person_name_salutation" msgid "Mr" msgstr "" -#: pretix/base/settings.py:3749 +#: pretix/base/settings.py:3762 msgctxt "person_name_salutation" msgid "Mx" msgstr "" -#: pretix/base/settings.py:3786 pretix/base/settings.py:3802 -#: pretix/base/settings.py:3818 pretix/base/settings.py:3833 -#: pretix/base/settings.py:3851 pretix/base/settings.py:3866 -#: pretix/base/settings.py:3896 pretix/base/settings.py:3920 -#: pretix/base/settings.py:3952 pretix/base/settings.py:3974 -#: pretix/base/settings.py:4005 +#: pretix/base/settings.py:3799 pretix/base/settings.py:3815 +#: pretix/base/settings.py:3831 pretix/base/settings.py:3846 +#: pretix/base/settings.py:3864 pretix/base/settings.py:3879 +#: pretix/base/settings.py:3909 pretix/base/settings.py:3933 +#: pretix/base/settings.py:3965 pretix/base/settings.py:3987 +#: pretix/base/settings.py:4018 msgctxt "person_name_sample" msgid "John" msgstr "" -#: pretix/base/settings.py:3787 pretix/base/settings.py:3803 -#: pretix/base/settings.py:3819 pretix/base/settings.py:3835 -#: pretix/base/settings.py:3853 pretix/base/settings.py:3867 -#: pretix/base/settings.py:3897 pretix/base/settings.py:3953 -#: pretix/base/settings.py:3975 pretix/base/settings.py:4006 +#: pretix/base/settings.py:3800 pretix/base/settings.py:3816 +#: pretix/base/settings.py:3832 pretix/base/settings.py:3848 +#: pretix/base/settings.py:3866 pretix/base/settings.py:3880 +#: pretix/base/settings.py:3910 pretix/base/settings.py:3966 +#: pretix/base/settings.py:3988 pretix/base/settings.py:4019 msgctxt "person_name_sample" msgid "Doe" msgstr "" -#: pretix/base/settings.py:3793 pretix/base/settings.py:3809 -#: pretix/base/settings.py:3841 pretix/base/settings.py:3960 -#: pretix/base/settings.py:3982 +#: pretix/base/settings.py:3806 pretix/base/settings.py:3822 +#: pretix/base/settings.py:3854 pretix/base/settings.py:3973 +#: pretix/base/settings.py:3995 msgctxt "person_name" msgid "Title" msgstr "" -#: pretix/base/settings.py:3801 pretix/base/settings.py:3817 -#: pretix/base/settings.py:3850 pretix/base/settings.py:3973 -#: pretix/base/settings.py:4004 +#: pretix/base/settings.py:3814 pretix/base/settings.py:3830 +#: pretix/base/settings.py:3863 pretix/base/settings.py:3986 +#: pretix/base/settings.py:4017 msgctxt "person_name_sample" msgid "Dr" msgstr "" -#: pretix/base/settings.py:3825 pretix/base/settings.py:3842 +#: pretix/base/settings.py:3838 pretix/base/settings.py:3855 msgid "First name" msgstr "" -#: pretix/base/settings.py:3826 pretix/base/settings.py:3843 +#: pretix/base/settings.py:3839 pretix/base/settings.py:3856 msgid "Middle name" msgstr "" -#: pretix/base/settings.py:3907 pretix/base/settings.py:3919 -#: pretix/control/forms/organizer.py:793 +#: pretix/base/settings.py:3920 pretix/base/settings.py:3932 +#: pretix/control/forms/organizer.py:803 msgctxt "person_name_sample" msgid "John Doe" msgstr "" -#: pretix/base/settings.py:3913 +#: pretix/base/settings.py:3926 msgid "Calling name" msgstr "" -#: pretix/base/settings.py:3927 +#: pretix/base/settings.py:3940 msgid "Latin transcription" msgstr "" -#: pretix/base/settings.py:3939 pretix/base/settings.py:3959 -#: pretix/base/settings.py:3981 +#: pretix/base/settings.py:3952 pretix/base/settings.py:3972 +#: pretix/base/settings.py:3994 msgctxt "person_name" msgid "Salutation" msgstr "" -#: pretix/base/settings.py:3951 pretix/base/settings.py:3972 -#: pretix/base/settings.py:4003 +#: pretix/base/settings.py:3964 pretix/base/settings.py:3985 +#: pretix/base/settings.py:4016 msgctxt "person_name_sample" msgid "Mr" msgstr "" -#: pretix/base/settings.py:3985 +#: pretix/base/settings.py:3998 msgctxt "person_name" msgid "Degree (after name)" msgstr "" -#: pretix/base/settings.py:4007 +#: pretix/base/settings.py:4020 msgctxt "person_name_sample" msgid "MA" msgstr "" -#: pretix/base/settings.py:4033 pretix/base/settings.py:4035 +#: pretix/base/settings.py:4046 pretix/base/settings.py:4048 msgctxt "address" msgid "Province" msgstr "" -#: pretix/base/settings.py:4034 +#: pretix/base/settings.py:4047 msgctxt "address" msgid "Prefecture" msgstr "" -#: pretix/base/settings.py:4125 pretix/control/forms/event.py:242 +#: pretix/base/settings.py:4138 pretix/control/forms/event.py:242 msgid "" "Your default locale must also be enabled for your event (see box above)." msgstr "" -#: pretix/base/settings.py:4129 +#: pretix/base/settings.py:4142 msgid "" "You cannot require specifying attendee names if you do not ask for them." msgstr "" -#: pretix/base/settings.py:4133 +#: pretix/base/settings.py:4146 msgid "You have to ask for attendee emails if you want to make them required." msgstr "" -#: pretix/base/settings.py:4137 +#: pretix/base/settings.py:4150 msgid "" "You have to ask for invoice addresses if you want to make them required." msgstr "" -#: pretix/base/settings.py:4141 +#: pretix/base/settings.py:4154 msgid "You have to require invoice addresses to require for company names." msgstr "" -#: pretix/base/settings.py:4163 +#: pretix/base/settings.py:4176 #, python-brace-format msgid "VAT-ID is not supported for \"{}\"." msgstr "" -#: pretix/base/settings.py:4170 +#: pretix/base/settings.py:4183 msgid "The last payment date cannot be before the end of presale." msgstr "" -#: pretix/base/settings.py:4178 +#: pretix/base/settings.py:4191 #, python-brace-format msgid "The value \"{identifier}\" is not a valid sales channel." msgstr "" -#: pretix/base/settings.py:4193 +#: pretix/base/settings.py:4206 msgid "This needs to be disabled if other NFC-based types are active." msgstr "" @@ -11921,7 +12077,7 @@ msgid "You do not have access to this page." msgstr "" #: pretix/base/templates/403.html:20 pretix/base/templates/404.html:16 -#: pretix/control/templates/pretixcontrol/base.html:199 +#: pretix/control/templates/pretixcontrol/base.html:200 #: pretix/control/templates/pretixcontrol/user/staff_session_start.html:4 #: pretix/control/templates/pretixcontrol/user/staff_session_start.html:6 #: pretix/presale/templates/pretixpresale/event/offline.html:21 @@ -12073,6 +12229,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcards.html:98 #: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:114 #: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:21 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:214 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:390 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:114 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:95 @@ -12132,23 +12289,23 @@ msgstr "" msgid "%(number)s days %(relation)s %(relation_to)s at %(time_of_day)s" msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:5 -#: pretix/base/templates/pretixbase/redirect.html:9 +#: pretix/base/templates/pretixbase/redirect.html:6 +#: pretix/base/templates/pretixbase/redirect.html:10 msgid "Redirect" msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:11 +#: pretix/base/templates/pretixbase/redirect.html:12 #, python-format msgid "" "The link you clicked on wants to redirect you to a destination on the " "website %(host)s." msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:14 +#: pretix/base/templates/pretixbase/redirect.html:15 msgid "Please only proceed if you trust this website to be safe." msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:20 +#: pretix/base/templates/pretixbase/redirect.html:21 #, python-format msgid "Proceed to %(host)s" msgstr "" @@ -12616,8 +12773,8 @@ msgid "Support for check-in questions" msgstr "" #: pretix/control/forms/checkin.py:197 pretix/control/forms/checkin.py:213 -#: pretix/control/forms/filter.py:2677 pretix/control/forms/filter.py:2719 -#: pretix/control/forms/filter.py:2884 +#: pretix/control/forms/filter.py:2683 pretix/control/forms/filter.py:2725 +#: pretix/control/forms/filter.py:2890 msgid "All gates" msgstr "" @@ -12757,33 +12914,33 @@ msgid "" "{error}" msgstr "" -#: pretix/control/forms/event.py:587 pretix/control/forms/organizer.py:579 +#: pretix/control/forms/event.py:587 pretix/control/forms/organizer.py:588 msgid "Name format" msgstr "" -#: pretix/control/forms/event.py:588 pretix/control/forms/organizer.py:580 +#: pretix/control/forms/event.py:588 pretix/control/forms/organizer.py:589 msgid "" "This defines how pretix will ask for human names. Changing this after you " "already received orders might lead to unexpected behavior when sorting or " "changing names." msgstr "" -#: pretix/control/forms/event.py:593 pretix/control/forms/organizer.py:585 +#: pretix/control/forms/event.py:593 pretix/control/forms/organizer.py:594 msgid "Allowed titles" msgstr "" -#: pretix/control/forms/event.py:594 pretix/control/forms/organizer.py:586 +#: pretix/control/forms/event.py:594 pretix/control/forms/organizer.py:595 msgid "" "If the naming scheme you defined above allows users to input a title, you " "can use this to restrict the set of selectable titles." msgstr "" -#: pretix/control/forms/event.py:712 pretix/control/forms/organizer.py:661 +#: pretix/control/forms/event.py:712 pretix/control/forms/organizer.py:671 #, python-brace-format msgid "Ask for {fields}, display like {example}" msgstr "" -#: pretix/control/forms/event.py:718 pretix/control/forms/organizer.py:667 +#: pretix/control/forms/event.py:718 pretix/control/forms/organizer.py:677 msgid "Free text input" msgstr "" @@ -12919,15 +13076,15 @@ msgid "" "shop must be enabled." msgstr "" -#: pretix/control/forms/event.py:1150 pretix/control/forms/organizer.py:702 +#: pretix/control/forms/event.py:1150 pretix/control/forms/organizer.py:712 msgid "Bcc address" msgstr "" -#: pretix/control/forms/event.py:1152 pretix/control/forms/organizer.py:704 +#: pretix/control/forms/event.py:1152 pretix/control/forms/organizer.py:714 msgid "All emails will be sent to this address as a Bcc copy." msgstr "" -#: pretix/control/forms/event.py:1160 pretix/control/forms/organizer.py:713 +#: pretix/control/forms/event.py:1160 pretix/control/forms/organizer.py:723 msgid "Signature" msgstr "" @@ -12936,7 +13093,7 @@ msgstr "" msgid "This will be attached to every email. Available placeholders: {event}" msgstr "" -#: pretix/control/forms/event.py:1168 pretix/control/forms/organizer.py:721 +#: pretix/control/forms/event.py:1168 pretix/control/forms/organizer.py:731 msgid "e.g. your contact details" msgstr "" @@ -12984,8 +13141,8 @@ msgstr "" #: pretix/control/forms/event.py:1264 pretix/control/forms/event.py:1338 #: pretix/control/forms/event.py:1348 pretix/control/forms/event.py:1358 #: pretix/control/forms/event.py:1363 pretix/control/forms/event.py:1375 -#: pretix/control/forms/organizer.py:732 pretix/control/forms/organizer.py:742 -#: pretix/control/forms/organizer.py:752 pretix/control/forms/organizer.py:762 +#: pretix/control/forms/organizer.py:742 pretix/control/forms/organizer.py:752 +#: pretix/control/forms/organizer.py:762 pretix/control/forms/organizer.py:772 #: pretix/control/templates/pretixcontrol/event/mail.html:88 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:122 msgid "Text" @@ -13378,8 +13535,8 @@ msgid "Follow-up due" msgstr "" #: pretix/control/forms/filter.py:483 pretix/control/forms/filter.py:1267 -#: pretix/control/forms/filter.py:2180 pretix/control/forms/filter.py:2435 -#: pretix/control/forms/filter.py:2739 pretix/control/forms/filter.py:2758 +#: pretix/control/forms/filter.py:2186 pretix/control/forms/filter.py:2441 +#: pretix/control/forms/filter.py:2745 pretix/control/forms/filter.py:2764 #: pretix/control/forms/vouchers.py:151 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:121 #: pretix/plugins/sendmail/models.py:244 @@ -13387,9 +13544,9 @@ msgid "All products" msgstr "" #: pretix/control/forms/filter.py:487 pretix/control/forms/filter.py:1271 -#: pretix/control/forms/filter.py:2439 pretix/control/forms/filter.py:2743 -#: pretix/control/forms/vouchers.py:139 pretix/control/views/typeahead.py:663 -#: pretix/control/views/typeahead.py:780 +#: pretix/control/forms/filter.py:2445 pretix/control/forms/filter.py:2749 +#: pretix/control/forms/vouchers.py:139 pretix/control/views/typeahead.py:682 +#: pretix/control/views/typeahead.py:799 #, python-brace-format msgid "{product} – Any variation" msgstr "" @@ -13438,12 +13595,12 @@ msgstr "" #: pretix/control/forms/filter.py:927 pretix/control/forms/filter.py:932 #: pretix/control/forms/filter.py:1045 pretix/control/forms/filter.py:1050 -#: pretix/control/forms/filter.py:1969 pretix/control/forms/filter.py:1974 +#: pretix/control/forms/filter.py:1975 pretix/control/forms/filter.py:1980 msgid "All organizers" msgstr "" -#: pretix/control/forms/filter.py:1037 pretix/control/forms/filter.py:1953 -#: pretix/control/forms/filter.py:2963 +#: pretix/control/forms/filter.py:1037 pretix/control/forms/filter.py:1959 +#: pretix/control/forms/filter.py:2969 msgid "All events" msgstr "" @@ -13482,278 +13639,279 @@ msgctxt "subevent" msgid "Date doesn't start in selected date range." msgstr "" -#: pretix/control/forms/filter.py:1361 pretix/control/forms/filter.py:1955 +#: pretix/control/forms/filter.py:1367 pretix/control/forms/filter.py:1961 msgid "Shop live and presale running" msgstr "" -#: pretix/control/forms/filter.py:1362 pretix/control/forms/filter.py:2293 +#: pretix/control/forms/filter.py:1368 pretix/control/forms/filter.py:2299 msgid "Inactive" msgstr "" -#: pretix/control/forms/filter.py:1369 pretix/control/forms/filter.py:1372 -#: pretix/control/forms/filter.py:1547 pretix/control/forms/filter.py:1550 -#: pretix/control/forms/filter.py:1984 pretix/control/forms/filter.py:1987 -#: pretix/control/forms/filter.py:2617 +#: pretix/control/forms/filter.py:1375 pretix/control/forms/filter.py:1378 +#: pretix/control/forms/filter.py:1553 pretix/control/forms/filter.py:1556 +#: pretix/control/forms/filter.py:1990 pretix/control/forms/filter.py:1993 +#: pretix/control/forms/filter.py:2623 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:84 msgid "Date from" msgstr "" -#: pretix/control/forms/filter.py:1376 pretix/control/forms/filter.py:1379 -#: pretix/control/forms/filter.py:1554 pretix/control/forms/filter.py:1557 -#: pretix/control/forms/filter.py:1991 pretix/control/forms/filter.py:1994 -#: pretix/control/forms/filter.py:2622 +#: pretix/control/forms/filter.py:1382 pretix/control/forms/filter.py:1385 +#: pretix/control/forms/filter.py:1560 pretix/control/forms/filter.py:1563 +#: pretix/control/forms/filter.py:1997 pretix/control/forms/filter.py:2000 +#: pretix/control/forms/filter.py:2628 msgid "Date until" msgstr "" -#: pretix/control/forms/filter.py:1383 pretix/control/forms/filter.py:1561 +#: pretix/control/forms/filter.py:1389 pretix/control/forms/filter.py:1567 msgid "Start time from" msgstr "" -#: pretix/control/forms/filter.py:1388 pretix/control/forms/filter.py:1566 +#: pretix/control/forms/filter.py:1394 pretix/control/forms/filter.py:1572 msgid "Start time until" msgstr "" -#: pretix/control/forms/filter.py:1393 pretix/control/forms/filter.py:1571 +#: pretix/control/forms/filter.py:1399 pretix/control/forms/filter.py:1577 #: pretix/control/forms/rrule.py:112 pretix/control/forms/rrule.py:151 msgid "Weekday" msgstr "" -#: pretix/control/forms/filter.py:1721 pretix/control/forms/filter.py:1723 -#: pretix/control/forms/filter.py:1772 pretix/control/forms/filter.py:1774 -#: pretix/control/forms/filter.py:1844 pretix/control/forms/filter.py:1846 -#: pretix/control/forms/filter.py:1898 pretix/control/forms/filter.py:1900 -#: pretix/control/forms/filter.py:2307 pretix/control/forms/filter.py:2309 -#: pretix/control/forms/filter.py:2875 pretix/control/forms/filter.py:2877 +#: pretix/control/forms/filter.py:1727 pretix/control/forms/filter.py:1729 +#: pretix/control/forms/filter.py:1778 pretix/control/forms/filter.py:1780 +#: pretix/control/forms/filter.py:1850 pretix/control/forms/filter.py:1852 +#: pretix/control/forms/filter.py:1904 pretix/control/forms/filter.py:1906 +#: pretix/control/forms/filter.py:2313 pretix/control/forms/filter.py:2315 +#: pretix/control/forms/filter.py:2881 pretix/control/forms/filter.py:2883 msgid "Search query" msgstr "" -#: pretix/control/forms/filter.py:1783 pretix/control/forms/filter.py:1855 +#: pretix/control/forms/filter.py:1789 pretix/control/forms/filter.py:1861 #: pretix/control/templates/pretixcontrol/organizers/customer.html:47 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:47 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:54 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:126 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:133 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:37 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:49 msgid "active" msgstr "" -#: pretix/control/forms/filter.py:1785 +#: pretix/control/forms/filter.py:1791 #: pretix/control/templates/pretixcontrol/organizers/customer.html:45 msgid "not yet activated" msgstr "" -#: pretix/control/forms/filter.py:1789 +#: pretix/control/forms/filter.py:1795 #: pretix/control/templates/pretixcontrol/organizers/customer.html:113 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:6 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:12 -#: pretix/presale/views/customer.py:368 +#: pretix/presale/views/customer.py:370 msgid "Memberships" msgstr "" -#: pretix/control/forms/filter.py:1793 +#: pretix/control/forms/filter.py:1799 msgid "Has no memberships" msgstr "" -#: pretix/control/forms/filter.py:1794 +#: pretix/control/forms/filter.py:1800 msgid "Has any membership" msgstr "" -#: pretix/control/forms/filter.py:1795 +#: pretix/control/forms/filter.py:1801 msgid "Has valid membership" msgstr "" -#: pretix/control/forms/filter.py:1954 +#: pretix/control/forms/filter.py:1960 msgid "Shop live" msgstr "" -#: pretix/control/forms/filter.py:1956 +#: pretix/control/forms/filter.py:1962 msgid "Shop not live" msgstr "" -#: pretix/control/forms/filter.py:1959 +#: pretix/control/forms/filter.py:1965 msgid "Single event running or in the future" msgstr "" -#: pretix/control/forms/filter.py:1960 +#: pretix/control/forms/filter.py:1966 msgid "Single event in the past" msgstr "" -#: pretix/control/forms/filter.py:2159 pretix/control/forms/filter.py:2161 +#: pretix/control/forms/filter.py:2165 pretix/control/forms/filter.py:2167 msgid "Search attendee…" msgstr "" -#: pretix/control/forms/filter.py:2166 +#: pretix/control/forms/filter.py:2172 #: pretix/plugins/checkinlists/exporters.py:107 msgid "Check-in status" msgstr "" -#: pretix/control/forms/filter.py:2168 +#: pretix/control/forms/filter.py:2174 #: pretix/plugins/checkinlists/exporters.py:109 msgid "All attendees" msgstr "" -#: pretix/control/forms/filter.py:2169 +#: pretix/control/forms/filter.py:2175 #: pretix/control/templates/pretixcontrol/checkin/index.html:183 #: pretix/control/templates/pretixcontrol/checkin/lists.html:104 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:138 #: pretix/plugins/checkinlists/exporters.py:110 #: pretix/plugins/checkinlists/exporters.py:500 msgid "Checked in" msgstr "" -#: pretix/control/forms/filter.py:2170 +#: pretix/control/forms/filter.py:2176 #: pretix/plugins/checkinlists/exporters.py:111 msgctxt "checkin state" msgid "Present" msgstr "" -#: pretix/control/forms/filter.py:2171 +#: pretix/control/forms/filter.py:2177 #: pretix/plugins/checkinlists/exporters.py:112 msgctxt "checkin state" msgid "Checked in but left" msgstr "" -#: pretix/control/forms/filter.py:2172 +#: pretix/control/forms/filter.py:2178 #: pretix/control/templates/pretixcontrol/checkin/index.html:178 #: pretix/plugins/checkinlists/exporters.py:113 msgid "Not checked in" msgstr "" -#: pretix/control/forms/filter.py:2191 +#: pretix/control/forms/filter.py:2197 msgctxt "subevent" msgid "Date start from" msgstr "" -#: pretix/control/forms/filter.py:2197 +#: pretix/control/forms/filter.py:2203 msgctxt "subevent" msgid "Date start until" msgstr "" -#: pretix/control/forms/filter.py:2298 pretix/control/forms/filter.py:2301 +#: pretix/control/forms/filter.py:2304 pretix/control/forms/filter.py:2307 #: pretix/control/templates/pretixcontrol/users/index.html:52 msgid "Administrator" msgstr "" -#: pretix/control/forms/filter.py:2302 +#: pretix/control/forms/filter.py:2308 msgid "No administrator" msgstr "" -#: pretix/control/forms/filter.py:2372 +#: pretix/control/forms/filter.py:2378 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:51 msgid "Valid" msgstr "" -#: pretix/control/forms/filter.py:2373 +#: pretix/control/forms/filter.py:2379 msgid "Unredeemed" msgstr "" -#: pretix/control/forms/filter.py:2374 +#: pretix/control/forms/filter.py:2380 msgid "Redeemed at least once" msgstr "" -#: pretix/control/forms/filter.py:2375 +#: pretix/control/forms/filter.py:2381 msgid "Fully redeemed" msgstr "" -#: pretix/control/forms/filter.py:2377 +#: pretix/control/forms/filter.py:2383 msgid "Redeemed and checked in with ticket" msgstr "" -#: pretix/control/forms/filter.py:2382 +#: pretix/control/forms/filter.py:2388 msgid "Quota handling" msgstr "" -#: pretix/control/forms/filter.py:2386 +#: pretix/control/forms/filter.py:2392 msgid "Allow to ignore quota" msgstr "" -#: pretix/control/forms/filter.py:2391 pretix/control/forms/filter.py:2393 +#: pretix/control/forms/filter.py:2397 pretix/control/forms/filter.py:2399 msgid "Filter by tag" msgstr "" -#: pretix/control/forms/filter.py:2398 pretix/control/forms/filter.py:2400 +#: pretix/control/forms/filter.py:2404 pretix/control/forms/filter.py:2406 msgid "Search voucher" msgstr "" -#: pretix/control/forms/filter.py:2445 pretix/control/forms/vouchers.py:130 -#: pretix/control/views/typeahead.py:788 pretix/control/views/typeahead.py:792 +#: pretix/control/forms/filter.py:2451 pretix/control/forms/vouchers.py:130 +#: pretix/control/views/typeahead.py:807 pretix/control/views/typeahead.py:811 #: pretix/control/views/vouchers.py:133 #, python-brace-format msgid "Any product in quota \"{quota}\"" msgstr "" -#: pretix/control/forms/filter.py:2567 +#: pretix/control/forms/filter.py:2573 msgid "Refund status" msgstr "" -#: pretix/control/forms/filter.py:2569 +#: pretix/control/forms/filter.py:2575 msgid "All open refunds" msgstr "" -#: pretix/control/forms/filter.py:2570 +#: pretix/control/forms/filter.py:2576 msgid "All refunds" msgstr "" -#: pretix/control/forms/filter.py:2608 pretix/plugins/reports/exporters.py:704 +#: pretix/control/forms/filter.py:2614 pretix/plugins/reports/exporters.py:704 msgid "Date filter" msgstr "" -#: pretix/control/forms/filter.py:2610 pretix/plugins/reports/exporters.py:706 +#: pretix/control/forms/filter.py:2616 pretix/plugins/reports/exporters.py:706 msgid "Filter by…" msgstr "" -#: pretix/control/forms/filter.py:2612 pretix/plugins/reports/exporters.py:708 +#: pretix/control/forms/filter.py:2618 pretix/plugins/reports/exporters.py:708 msgid "Date of last successful payment" msgstr "" -#: pretix/control/forms/filter.py:2652 +#: pretix/control/forms/filter.py:2658 msgid "All check-ins" msgstr "" -#: pretix/control/forms/filter.py:2653 +#: pretix/control/forms/filter.py:2659 msgid "Successful check-ins" msgstr "" -#: pretix/control/forms/filter.py:2654 +#: pretix/control/forms/filter.py:2660 msgid "Unsuccessful check-ins" msgstr "" -#: pretix/control/forms/filter.py:2659 +#: pretix/control/forms/filter.py:2665 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:64 #: pretix/plugins/checkinlists/exporters.py:758 msgid "Scan type" msgstr "" -#: pretix/control/forms/filter.py:2661 +#: pretix/control/forms/filter.py:2667 msgid "All directions" msgstr "" -#: pretix/control/forms/filter.py:2670 pretix/control/forms/filter.py:2710 +#: pretix/control/forms/filter.py:2676 pretix/control/forms/filter.py:2716 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:67 #: pretix/plugins/checkinlists/exporters.py:764 msgid "Device" msgstr "" -#: pretix/control/forms/filter.py:2671 pretix/control/forms/filter.py:2706 -#: pretix/control/forms/filter.py:2897 +#: pretix/control/forms/filter.py:2677 pretix/control/forms/filter.py:2712 +#: pretix/control/forms/filter.py:2903 msgid "All devices" msgstr "" -#: pretix/control/forms/filter.py:2685 -msgctxt "filter" -msgid "Start date" -msgstr "" - #: pretix/control/forms/filter.py:2691 msgctxt "filter" +msgid "Start date" +msgstr "" + +#: pretix/control/forms/filter.py:2697 +msgctxt "filter" msgid "End date" msgstr "" -#: pretix/control/forms/filter.py:2733 +#: pretix/control/forms/filter.py:2739 #: pretix/plugins/checkinlists/exporters.py:882 msgid "All check-in lists" msgstr "" -#: pretix/control/forms/filter.py:2737 +#: pretix/control/forms/filter.py:2743 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:64 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:11 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:26 @@ -13768,24 +13926,24 @@ msgstr "" msgid "Check-in list" msgstr "" -#: pretix/control/forms/filter.py:2888 +#: pretix/control/forms/filter.py:2894 #: pretix/control/templates/pretixcontrol/organizers/devices.html:86 msgid "Software" msgstr "" -#: pretix/control/forms/filter.py:2895 +#: pretix/control/forms/filter.py:2901 msgid "Device status" msgstr "" -#: pretix/control/forms/filter.py:2898 +#: pretix/control/forms/filter.py:2904 msgid "Active devices" msgstr "" -#: pretix/control/forms/filter.py:2899 +#: pretix/control/forms/filter.py:2905 msgid "Revoked devices" msgstr "" -#: pretix/control/forms/filter.py:2954 pretix/control/forms/filter.py:2956 +#: pretix/control/forms/filter.py:2960 pretix/control/forms/filter.py:2962 msgid "Search email address or subject" msgstr "" @@ -14806,111 +14964,111 @@ msgstr "" msgid "You may set only one organizer domain." msgstr "" -#: pretix/control/forms/organizer.py:322 +#: pretix/control/forms/organizer.py:331 msgid "Provided by a plugin" msgstr "" -#: pretix/control/forms/organizer.py:438 +#: pretix/control/forms/organizer.py:447 msgid "" "The changes could not be saved because there would be no remaining team with " "the permission to change teams and permissions." msgstr "" -#: pretix/control/forms/organizer.py:487 pretix/control/forms/organizer.py:525 +#: pretix/control/forms/organizer.py:496 pretix/control/forms/organizer.py:534 msgid "" "Your device will not have access to anything, please select some events." msgstr "" -#: pretix/control/forms/organizer.py:677 pretix/plugins/stripe/payment.py:330 +#: pretix/control/forms/organizer.py:687 pretix/plugins/stripe/payment.py:330 msgid "experimental" msgstr "" -#: pretix/control/forms/organizer.py:683 +#: pretix/control/forms/organizer.py:693 msgid "" "This feature is currently in an experimental stage. It only supports very " "limited use cases and might change at any point." msgstr "" -#: pretix/control/forms/organizer.py:706 +#: pretix/control/forms/organizer.py:716 msgid "Sensitive emails like password resets will not be sent in Bcc." msgstr "" -#: pretix/control/forms/organizer.py:716 +#: pretix/control/forms/organizer.py:726 msgid "This will be attached to every email." msgstr "" -#: pretix/control/forms/organizer.py:790 pretix/control/logdisplay.py:671 +#: pretix/control/forms/organizer.py:800 pretix/control/logdisplay.py:671 #: pretix/control/views/user.py:850 pretix/presale/views/customer.py:289 -#: pretix/presale/views/customer.py:545 +#: pretix/presale/views/customer.py:547 msgid "Your password has been changed." msgstr "" -#: pretix/control/forms/organizer.py:823 +#: pretix/control/forms/organizer.py:833 msgctxt "webhooks" msgid "Event types" msgstr "" -#: pretix/control/forms/organizer.py:857 +#: pretix/control/forms/organizer.py:867 msgid "Gift card value" msgstr "" -#: pretix/control/forms/organizer.py:961 +#: pretix/control/forms/organizer.py:971 msgid "An medium with this type and identifier is already registered." msgstr "" -#: pretix/control/forms/organizer.py:1059 +#: pretix/control/forms/organizer.py:1069 msgid "An account with this customer ID is already registered." msgstr "" -#: pretix/control/forms/organizer.py:1076 +#: pretix/control/forms/organizer.py:1086 #: pretix/control/templates/pretixcontrol/organizers/customer.html:62 #: pretix/presale/forms/customer.py:169 pretix/presale/forms/customer.py:507 msgid "Phone" msgstr "" -#: pretix/control/forms/organizer.py:1190 +#: pretix/control/forms/organizer.py:1200 msgctxt "sso_oidc" msgid "Base URL" msgstr "" -#: pretix/control/forms/organizer.py:1194 +#: pretix/control/forms/organizer.py:1204 msgctxt "sso_oidc" msgid "Client ID" msgstr "" -#: pretix/control/forms/organizer.py:1198 +#: pretix/control/forms/organizer.py:1208 msgctxt "sso_oidc" msgid "Client secret" msgstr "" -#: pretix/control/forms/organizer.py:1202 +#: pretix/control/forms/organizer.py:1212 msgctxt "sso_oidc" msgid "Scope" msgstr "" -#: pretix/control/forms/organizer.py:1203 +#: pretix/control/forms/organizer.py:1213 msgctxt "sso_oidc" msgid "Multiple scopes separated with spaces." msgstr "" -#: pretix/control/forms/organizer.py:1207 +#: pretix/control/forms/organizer.py:1217 msgctxt "sso_oidc" msgid "User ID field" msgstr "" -#: pretix/control/forms/organizer.py:1208 +#: pretix/control/forms/organizer.py:1218 msgctxt "sso_oidc" msgid "" "We will assume that the contents of the user ID fields are unique and can " "never change for a user." msgstr "" -#: pretix/control/forms/organizer.py:1214 +#: pretix/control/forms/organizer.py:1224 msgctxt "sso_oidc" msgid "Email field" msgstr "" -#: pretix/control/forms/organizer.py:1215 +#: pretix/control/forms/organizer.py:1225 msgctxt "sso_oidc" msgid "" "We will assume that all email addresses received from the SSO provider are " @@ -14918,17 +15076,17 @@ msgid "" "security issues might arise." msgstr "" -#: pretix/control/forms/organizer.py:1222 +#: pretix/control/forms/organizer.py:1232 msgctxt "sso_oidc" msgid "Phone field" msgstr "" -#: pretix/control/forms/organizer.py:1226 +#: pretix/control/forms/organizer.py:1236 msgctxt "sso_oidc" msgid "Query parameters" msgstr "" -#: pretix/control/forms/organizer.py:1227 +#: pretix/control/forms/organizer.py:1237 #, python-brace-format msgctxt "sso_oidc" msgid "" @@ -14936,19 +15094,19 @@ msgid "" "endpoint. Enter as: {example}" msgstr "" -#: pretix/control/forms/organizer.py:1288 +#: pretix/control/forms/organizer.py:1298 msgid "Invalidate old client secret and generate a new one" msgstr "" -#: pretix/control/forms/organizer.py:1321 +#: pretix/control/forms/organizer.py:1331 msgid "Organizer short name" msgstr "" -#: pretix/control/forms/organizer.py:1325 +#: pretix/control/forms/organizer.py:1335 msgid "Allow access to reusable media" msgstr "" -#: pretix/control/forms/organizer.py:1326 +#: pretix/control/forms/organizer.py:1336 msgid "" "This is required if you want the other organizer to participate in a shared " "system with e.g. NFC payment chips. You should only use this option for " @@ -14957,19 +15115,19 @@ msgid "" "to interact with the media type." msgstr "" -#: pretix/control/forms/organizer.py:1342 +#: pretix/control/forms/organizer.py:1352 msgid "The selected organizer does not exist or cannot be invited." msgstr "" -#: pretix/control/forms/organizer.py:1344 +#: pretix/control/forms/organizer.py:1354 msgid "The selected organizer has already been invited." msgstr "" -#: pretix/control/forms/organizer.py:1379 +#: pretix/control/forms/organizer.py:1389 msgid "A sales channel with the same identifier already exists." msgstr "" -#: pretix/control/forms/organizer.py:1391 +#: pretix/control/forms/organizer.py:1401 msgid "Events with active plugin" msgstr "" @@ -15436,7 +15594,7 @@ msgid "The check-in of position #{posid} on list \"{list}\" has been reverted." msgstr "" #: pretix/control/logdisplay.py:359 pretix/control/logdisplay.py:361 -#: pretix/control/logdisplay.py:995 pretix/control/logdisplay.py:997 +#: pretix/control/logdisplay.py:998 pretix/control/logdisplay.py:1000 msgid "(unknown)" msgstr "" @@ -15486,7 +15644,7 @@ msgstr "" msgid "The order has been canceled (comment: \"{comment}\")." msgstr "" -#: pretix/control/logdisplay.py:422 pretix/control/views/orders.py:1559 +#: pretix/control/logdisplay.py:422 pretix/control/views/orders.py:1573 #: pretix/presale/views/order.py:1138 msgid "The order has been canceled." msgstr "" @@ -15525,11 +15683,11 @@ msgstr "" msgid "Internal error while transferring data to {provider_display_name}." msgstr "" -#: pretix/control/logdisplay.py:489 pretix/control/logdisplay.py:842 +#: pretix/control/logdisplay.py:489 pretix/control/logdisplay.py:845 msgid "The settings of a payment provider have been changed." msgstr "" -#: pretix/control/logdisplay.py:492 pretix/control/logdisplay.py:841 +#: pretix/control/logdisplay.py:492 pretix/control/logdisplay.py:844 msgid "The settings of a ticket output provider have been changed." msgstr "" @@ -15570,11 +15728,11 @@ msgstr "" msgid "The order has been set to require payment before use." msgstr "" -#: pretix/control/logdisplay.py:511 pretix/control/views/orders.py:1564 +#: pretix/control/logdisplay.py:511 pretix/control/views/orders.py:1578 msgid "The order has been marked as expired." msgstr "" -#: pretix/control/logdisplay.py:512 pretix/control/views/orders.py:1466 +#: pretix/control/logdisplay.py:512 pretix/control/views/orders.py:1480 msgid "The order has been marked as paid." msgstr "" @@ -15586,7 +15744,7 @@ msgstr "" msgid "The order has been refunded." msgstr "" -#: pretix/control/logdisplay.py:515 pretix/control/views/orders.py:1904 +#: pretix/control/logdisplay.py:515 pretix/control/views/orders.py:1918 msgid "The order has been reactivated." msgstr "" @@ -15598,7 +15756,7 @@ msgstr "" msgid "The order requires approval before it can continue to be processed." msgstr "" -#: pretix/control/logdisplay.py:519 pretix/control/views/orders.py:786 +#: pretix/control/logdisplay.py:519 pretix/control/views/orders.py:800 msgid "The order has been approved." msgstr "" @@ -15637,7 +15795,7 @@ msgstr "" msgid "The order locale has been changed." msgstr "" -#: pretix/control/logdisplay.py:531 pretix/control/views/orders.py:1603 +#: pretix/control/logdisplay.py:531 pretix/control/views/orders.py:1617 #: pretix/presale/views/order.py:797 pretix/presale/views/order.py:877 msgid "The invoice has been generated." msgstr "" @@ -15646,11 +15804,11 @@ msgstr "" msgid "The invoice could not be generated." msgstr "" -#: pretix/control/logdisplay.py:533 pretix/control/views/orders.py:1684 +#: pretix/control/logdisplay.py:533 pretix/control/views/orders.py:1698 msgid "The invoice has been regenerated." msgstr "" -#: pretix/control/logdisplay.py:534 pretix/control/views/orders.py:1741 +#: pretix/control/logdisplay.py:534 pretix/control/views/orders.py:1755 #: pretix/presale/views/order.py:897 msgid "The invoice has been reissued." msgstr "" @@ -15708,7 +15866,7 @@ msgid "An unidentified type email has been sent." msgstr "" #: pretix/control/logdisplay.py:549 pretix/control/logdisplay.py:742 -#: pretix/control/logdisplay.py:748 pretix/control/logdisplay.py:776 +#: pretix/control/logdisplay.py:751 pretix/control/logdisplay.py:779 msgid "Sending of an email has failed." msgstr "" @@ -15904,7 +16062,7 @@ msgstr "" msgid "Your account has been disabled." msgstr "" -#: pretix/control/logdisplay.py:680 pretix/presale/views/customer.py:642 +#: pretix/control/logdisplay.py:680 pretix/presale/views/customer.py:644 #, python-brace-format msgid "Your email address has been changed from {old_email} to {email}." msgstr "" @@ -15936,27 +16094,27 @@ msgstr "" msgid "The organizer settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:704 pretix/control/logdisplay.py:849 +#: pretix/control/logdisplay.py:704 pretix/control/logdisplay.py:852 msgid "The footer links have been changed." msgstr "" -#: pretix/control/logdisplay.py:705 pretix/control/logdisplay.py:754 +#: pretix/control/logdisplay.py:705 pretix/control/logdisplay.py:757 msgid "A scheduled export has been added." msgstr "" -#: pretix/control/logdisplay.py:706 pretix/control/logdisplay.py:755 +#: pretix/control/logdisplay.py:706 pretix/control/logdisplay.py:758 msgid "A scheduled export has been changed." msgstr "" -#: pretix/control/logdisplay.py:707 pretix/control/logdisplay.py:756 +#: pretix/control/logdisplay.py:707 pretix/control/logdisplay.py:759 msgid "A scheduled export has been deleted." msgstr "" -#: pretix/control/logdisplay.py:708 pretix/control/logdisplay.py:757 +#: pretix/control/logdisplay.py:708 pretix/control/logdisplay.py:760 msgid "A scheduled export has been executed." msgstr "" -#: pretix/control/logdisplay.py:709 pretix/control/logdisplay.py:758 +#: pretix/control/logdisplay.py:709 pretix/control/logdisplay.py:761 #, python-brace-format msgid "A scheduled export has failed: {reason}." msgstr "" @@ -16045,7 +16203,7 @@ msgstr "" msgid "The membership type has been deleted." msgstr "" -#: pretix/control/logdisplay.py:731 pretix/control/views/organizer.py:3556 +#: pretix/control/logdisplay.py:731 pretix/control/views/organizer.py:3591 msgid "The sales channel has been created." msgstr "" @@ -16102,539 +16260,554 @@ msgid "The reusable medium has been changed." msgstr "" #: pretix/control/logdisplay.py:746 -msgid "The medium has been connected to a new ticket." +msgid "A new ticket has been added to the medium." msgstr "" #: pretix/control/logdisplay.py:747 -msgid "The medium has been connected to a new gift card." +msgid "A ticket has been removed from the medium." +msgstr "" + +#: pretix/control/logdisplay.py:748 +msgid "The medium has been connected to a new ticket." msgstr "" #: pretix/control/logdisplay.py:749 -msgid "The event's internal comment has been updated." +#, python-brace-format +msgid "" +"The ticket #{positionid} was exchanged for reusable medium " +"{medium_identifier}." msgstr "" #: pretix/control/logdisplay.py:750 -msgid "The event has been canceled." -msgstr "" - -#: pretix/control/logdisplay.py:751 -msgid "An event has been deleted." +msgid "The medium has been connected to a new gift card." msgstr "" #: pretix/control/logdisplay.py:752 -msgid "A removal process for personal data has been started." +msgid "The event's internal comment has been updated." msgstr "" #: pretix/control/logdisplay.py:753 +msgid "The event has been canceled." +msgstr "" + +#: pretix/control/logdisplay.py:754 +msgid "An event has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:755 +msgid "A removal process for personal data has been started." +msgstr "" + +#: pretix/control/logdisplay.py:756 msgid "A removal process for personal data has been completed." msgstr "" -#: pretix/control/logdisplay.py:759 +#: pretix/control/logdisplay.py:762 msgid "The user has been created." msgstr "" -#: pretix/control/logdisplay.py:760 +#: pretix/control/logdisplay.py:763 #, python-brace-format msgid "" "A first login using {agent_type} on {os_type} from {country} has been " "detected." msgstr "" -#: pretix/control/logdisplay.py:762 pretix/control/views/user.py:474 +#: pretix/control/logdisplay.py:765 pretix/control/views/user.py:474 #: pretix/control/views/user.py:534 pretix/control/views/user.py:593 msgid "Two-factor authentication has been enabled." msgstr "" -#: pretix/control/logdisplay.py:763 pretix/control/views/user.py:377 +#: pretix/control/logdisplay.py:766 pretix/control/views/user.py:377 #: pretix/control/views/user.py:609 msgid "Two-factor authentication has been disabled." msgstr "" -#: pretix/control/logdisplay.py:764 pretix/control/views/user.py:626 +#: pretix/control/logdisplay.py:767 pretix/control/views/user.py:626 msgid "Your two-factor emergency codes have been regenerated." msgstr "" -#: pretix/control/logdisplay.py:765 +#: pretix/control/logdisplay.py:768 msgid "A two-factor emergency code has been generated." msgstr "" -#: pretix/control/logdisplay.py:766 +#: pretix/control/logdisplay.py:769 #, python-brace-format msgid "" "A new two-factor authentication device \"{name}\" has been added to your " "account." msgstr "" -#: pretix/control/logdisplay.py:768 +#: pretix/control/logdisplay.py:771 #, python-brace-format msgid "" "The two-factor authentication device \"{name}\" has been removed from your " "account." msgstr "" -#: pretix/control/logdisplay.py:770 +#: pretix/control/logdisplay.py:773 msgid "Notifications have been enabled." msgstr "" -#: pretix/control/logdisplay.py:771 +#: pretix/control/logdisplay.py:774 msgid "Notifications have been disabled." msgstr "" -#: pretix/control/logdisplay.py:772 +#: pretix/control/logdisplay.py:775 msgid "Your notification settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:773 +#: pretix/control/logdisplay.py:776 msgid "This user has been anonymized." msgstr "" -#: pretix/control/logdisplay.py:777 +#: pretix/control/logdisplay.py:780 msgid "Password reset mail sent." msgstr "" -#: pretix/control/logdisplay.py:778 +#: pretix/control/logdisplay.py:781 msgid "The password has been reset." msgstr "" -#: pretix/control/logdisplay.py:779 +#: pretix/control/logdisplay.py:782 msgid "" "A repeated password reset has been denied, as the last request was less than " "24 hours ago." msgstr "" -#: pretix/control/logdisplay.py:781 +#: pretix/control/logdisplay.py:784 #, python-brace-format msgid "The organizer \"{name}\" has been deleted." msgstr "" -#: pretix/control/logdisplay.py:782 pretix/control/logdisplay.py:1013 +#: pretix/control/logdisplay.py:785 pretix/control/logdisplay.py:1016 msgid "A voucher has been sent to a person on the waiting list." msgstr "" -#: pretix/control/logdisplay.py:783 +#: pretix/control/logdisplay.py:786 msgid "An entry has been transferred to another waiting list." msgstr "" -#: pretix/control/logdisplay.py:784 +#: pretix/control/logdisplay.py:787 msgid "The team has been created." msgstr "" -#: pretix/control/logdisplay.py:785 +#: pretix/control/logdisplay.py:788 msgid "The team settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:786 +#: pretix/control/logdisplay.py:789 msgid "The team has been deleted." msgstr "" -#: pretix/control/logdisplay.py:787 pretix/control/views/organizer.py:2381 +#: pretix/control/logdisplay.py:790 pretix/control/views/organizer.py:2381 msgid "The gate has been created." msgstr "" -#: pretix/control/logdisplay.py:788 +#: pretix/control/logdisplay.py:791 msgid "The gate has been changed." msgstr "" -#: pretix/control/logdisplay.py:789 -msgid "The gate has been deleted." -msgstr "" - -#: pretix/control/logdisplay.py:790 -msgctxt "subevent" -msgid "The event date has been deleted." -msgstr "" - -#: pretix/control/logdisplay.py:791 -msgctxt "subevent" -msgid "The event date has been canceled." -msgstr "" - #: pretix/control/logdisplay.py:792 -msgctxt "subevent" -msgid "The event date has been changed." +msgid "The gate has been deleted." msgstr "" #: pretix/control/logdisplay.py:793 msgctxt "subevent" -msgid "The event date has been created." +msgid "The event date has been deleted." msgstr "" #: pretix/control/logdisplay.py:794 msgctxt "subevent" -msgid "A quota has been added to the event date." +msgid "The event date has been canceled." msgstr "" #: pretix/control/logdisplay.py:795 msgctxt "subevent" -msgid "A quota has been changed on the event date." +msgid "The event date has been changed." msgstr "" #: pretix/control/logdisplay.py:796 msgctxt "subevent" -msgid "A quota has been removed from the event date." +msgid "The event date has been created." msgstr "" #: pretix/control/logdisplay.py:797 -msgid "The device has been created." +msgctxt "subevent" +msgid "A quota has been added to the event date." msgstr "" #: pretix/control/logdisplay.py:798 -msgid "The device has been changed." +msgctxt "subevent" +msgid "A quota has been changed on the event date." msgstr "" #: pretix/control/logdisplay.py:799 -msgid "Access of the device has been revoked." +msgctxt "subevent" +msgid "A quota has been removed from the event date." msgstr "" #: pretix/control/logdisplay.py:800 -msgid "The device has been initialized." +msgid "The device has been created." msgstr "" #: pretix/control/logdisplay.py:801 -msgid "The access token of the device has been regenerated." +msgid "The device has been changed." msgstr "" #: pretix/control/logdisplay.py:802 -msgid "The device has notified the server of an hardware or software update." +msgid "Access of the device has been revoked." msgstr "" #: pretix/control/logdisplay.py:803 -msgid "The gift card has been created." +msgid "The device has been initialized." msgstr "" -#: pretix/control/logdisplay.py:804 pretix/control/views/organizer.py:1943 -msgid "The gift card has been changed." +#: pretix/control/logdisplay.py:804 +msgid "The access token of the device has been regenerated." msgstr "" #: pretix/control/logdisplay.py:805 -msgid "A manual transaction has been performed." +msgid "The device has notified the server of an hardware or software update." msgstr "" #: pretix/control/logdisplay.py:806 -msgid "A payment has been performed." +msgid "The gift card has been created." msgstr "" -#: pretix/control/logdisplay.py:807 -msgid "A refund has been performed. " +#: pretix/control/logdisplay.py:807 pretix/control/views/organizer.py:1943 +msgid "The gift card has been changed." msgstr "" #: pretix/control/logdisplay.py:808 +msgid "A manual transaction has been performed." +msgstr "" + +#: pretix/control/logdisplay.py:809 +msgid "A payment has been performed." +msgstr "" + +#: pretix/control/logdisplay.py:810 +msgid "A refund has been performed. " +msgstr "" + +#: pretix/control/logdisplay.py:811 #, python-brace-format msgid "The token \"{name}\" has been created." msgstr "" -#: pretix/control/logdisplay.py:809 +#: pretix/control/logdisplay.py:812 #, python-brace-format msgid "The token \"{name}\" has been revoked." msgstr "" -#: pretix/control/logdisplay.py:810 +#: pretix/control/logdisplay.py:813 msgid "The check-in and print log state has been reset." msgstr "" -#: pretix/control/logdisplay.py:817 pretix/control/logdisplay.py:876 +#: pretix/control/logdisplay.py:820 pretix/control/logdisplay.py:879 msgid "The plugin has been enabled." msgstr "" -#: pretix/control/logdisplay.py:818 pretix/control/logdisplay.py:877 -#: pretix/control/views/event.py:497 pretix/control/views/organizer.py:757 +#: pretix/control/logdisplay.py:821 pretix/control/logdisplay.py:880 +#: pretix/control/views/event.py:498 pretix/control/views/organizer.py:757 msgid "The plugin has been disabled." msgstr "" -#: pretix/control/logdisplay.py:821 pretix/control/logdisplay.py:880 +#: pretix/control/logdisplay.py:824 pretix/control/logdisplay.py:883 #, python-brace-format msgid "Plugin {val}" msgstr "" -#: pretix/control/logdisplay.py:836 +#: pretix/control/logdisplay.py:839 msgid "A meta property has been added to this event." msgstr "" -#: pretix/control/logdisplay.py:837 +#: pretix/control/logdisplay.py:840 msgid "A meta property has been removed from this event." msgstr "" -#: pretix/control/logdisplay.py:838 +#: pretix/control/logdisplay.py:841 msgid "A meta property has been changed on this event." msgstr "" -#: pretix/control/logdisplay.py:839 +#: pretix/control/logdisplay.py:842 msgid "The event settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:840 +#: pretix/control/logdisplay.py:843 msgid "The ticket download settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:843 +#: pretix/control/logdisplay.py:846 msgid "The shop has been taken live." msgstr "" -#: pretix/control/logdisplay.py:844 +#: pretix/control/logdisplay.py:847 msgid "The shop has been taken offline." msgstr "" -#: pretix/control/logdisplay.py:845 +#: pretix/control/logdisplay.py:848 msgid "The shop has been taken into test mode." msgstr "" -#: pretix/control/logdisplay.py:846 +#: pretix/control/logdisplay.py:849 msgid "The test mode has been disabled." msgstr "" -#: pretix/control/logdisplay.py:847 +#: pretix/control/logdisplay.py:850 msgid "The event has been created." msgstr "" -#: pretix/control/logdisplay.py:848 +#: pretix/control/logdisplay.py:851 msgid "The event details have been changed." msgstr "" -#: pretix/control/logdisplay.py:850 +#: pretix/control/logdisplay.py:853 msgid "An answer option has been added to the question." msgstr "" -#: pretix/control/logdisplay.py:851 +#: pretix/control/logdisplay.py:854 msgid "An answer option has been removed from the question." msgstr "" -#: pretix/control/logdisplay.py:852 +#: pretix/control/logdisplay.py:855 msgid "An answer option has been changed." msgstr "" -#: pretix/control/logdisplay.py:853 +#: pretix/control/logdisplay.py:856 msgid "A user has been added to the event team." msgstr "" -#: pretix/control/logdisplay.py:854 +#: pretix/control/logdisplay.py:857 msgid "A user has been invited to the event team." msgstr "" -#: pretix/control/logdisplay.py:855 +#: pretix/control/logdisplay.py:858 msgid "A user's permissions have been changed." msgstr "" -#: pretix/control/logdisplay.py:856 +#: pretix/control/logdisplay.py:859 msgid "A user has been removed from the event team." msgstr "" -#: pretix/control/logdisplay.py:863 +#: pretix/control/logdisplay.py:866 msgid "The check-in list has been added." msgstr "" -#: pretix/control/logdisplay.py:864 pretix/control/logdisplay.py:865 +#: pretix/control/logdisplay.py:867 pretix/control/logdisplay.py:868 msgid "The check-in list has been deleted." msgstr "" -#: pretix/control/logdisplay.py:866 +#: pretix/control/logdisplay.py:869 msgid "The check-in list has been changed." msgstr "" -#: pretix/control/logdisplay.py:869 +#: pretix/control/logdisplay.py:872 #, python-brace-format msgid "Check-in list {val}" msgstr "" -#: pretix/control/logdisplay.py:896 +#: pretix/control/logdisplay.py:899 msgid "The product has been created." msgstr "" -#: pretix/control/logdisplay.py:897 +#: pretix/control/logdisplay.py:900 msgid "The product has been changed." msgstr "" -#: pretix/control/logdisplay.py:898 +#: pretix/control/logdisplay.py:901 msgid "The product has been reordered." msgstr "" -#: pretix/control/logdisplay.py:899 +#: pretix/control/logdisplay.py:902 msgid "The product has been deleted." msgstr "" -#: pretix/control/logdisplay.py:900 +#: pretix/control/logdisplay.py:903 msgid "An add-on has been added to this product." msgstr "" -#: pretix/control/logdisplay.py:901 +#: pretix/control/logdisplay.py:904 msgid "An add-on has been removed from this product." msgstr "" -#: pretix/control/logdisplay.py:902 +#: pretix/control/logdisplay.py:905 msgid "An add-on has been changed on this product." msgstr "" -#: pretix/control/logdisplay.py:903 +#: pretix/control/logdisplay.py:906 msgid "A bundled item has been added to this product." msgstr "" -#: pretix/control/logdisplay.py:904 +#: pretix/control/logdisplay.py:907 msgid "A bundled item has been removed from this product." msgstr "" -#: pretix/control/logdisplay.py:905 +#: pretix/control/logdisplay.py:908 msgid "A bundled item has been changed on this product." msgstr "" -#: pretix/control/logdisplay.py:906 +#: pretix/control/logdisplay.py:909 msgid "A program time has been added to this product." msgstr "" -#: pretix/control/logdisplay.py:907 +#: pretix/control/logdisplay.py:910 msgid "A program time has been changed on this product." msgstr "" -#: pretix/control/logdisplay.py:908 +#: pretix/control/logdisplay.py:911 msgid "A program time has been removed from this product." msgstr "" -#: pretix/control/logdisplay.py:915 +#: pretix/control/logdisplay.py:918 #, python-brace-format msgid "The variation \"{value}\" has been created." msgstr "" -#: pretix/control/logdisplay.py:916 +#: pretix/control/logdisplay.py:919 #, python-brace-format msgid "The variation \"{value}\" has been deleted." msgstr "" -#: pretix/control/logdisplay.py:917 +#: pretix/control/logdisplay.py:920 #, python-brace-format msgid "The variation \"{value}\" has been changed." msgstr "" -#: pretix/control/logdisplay.py:934 +#: pretix/control/logdisplay.py:937 #, python-brace-format msgid "Payment {local_id} has been confirmed." msgstr "" -#: pretix/control/logdisplay.py:935 +#: pretix/control/logdisplay.py:938 #, python-brace-format msgid "Payment {local_id} has been canceled." msgstr "" -#: pretix/control/logdisplay.py:936 +#: pretix/control/logdisplay.py:939 #, python-brace-format msgid "Canceling payment {local_id} has failed." msgstr "" -#: pretix/control/logdisplay.py:937 +#: pretix/control/logdisplay.py:940 #, python-brace-format msgid "Payment {local_id} has been started." msgstr "" -#: pretix/control/logdisplay.py:938 +#: pretix/control/logdisplay.py:941 #, python-brace-format msgid "Payment {local_id} has failed." msgstr "" -#: pretix/control/logdisplay.py:939 +#: pretix/control/logdisplay.py:942 #, python-brace-format msgid "The order could not be marked as paid: {message}" msgstr "" -#: pretix/control/logdisplay.py:940 -msgid "The order has been overpaid." -msgstr "" - -#: pretix/control/logdisplay.py:941 -#, python-brace-format -msgid "Refund {local_id} has been created." -msgstr "" - -#: pretix/control/logdisplay.py:942 -#, python-brace-format -msgid "Refund {local_id} has been created by an external entity." -msgstr "" - #: pretix/control/logdisplay.py:943 -msgid "The customer requested you to issue a refund." +msgid "The order has been overpaid." msgstr "" #: pretix/control/logdisplay.py:944 #, python-brace-format -msgid "Refund {local_id} has been completed." +msgid "Refund {local_id} has been created." msgstr "" #: pretix/control/logdisplay.py:945 #, python-brace-format -msgid "Refund {local_id} has been canceled." +msgid "Refund {local_id} has been created by an external entity." msgstr "" #: pretix/control/logdisplay.py:946 +msgid "The customer requested you to issue a refund." +msgstr "" + +#: pretix/control/logdisplay.py:947 +#, python-brace-format +msgid "Refund {local_id} has been completed." +msgstr "" + +#: pretix/control/logdisplay.py:948 +#, python-brace-format +msgid "Refund {local_id} has been canceled." +msgstr "" + +#: pretix/control/logdisplay.py:949 #, python-brace-format msgid "Refund {local_id} has failed." msgstr "" -#: pretix/control/logdisplay.py:953 +#: pretix/control/logdisplay.py:956 msgid "The quota has been added." msgstr "" -#: pretix/control/logdisplay.py:954 +#: pretix/control/logdisplay.py:957 msgid "The quota has been deleted." msgstr "" -#: pretix/control/logdisplay.py:955 +#: pretix/control/logdisplay.py:958 msgid "The quota has been changed." msgstr "" -#: pretix/control/logdisplay.py:956 +#: pretix/control/logdisplay.py:959 msgid "The quota has closed." msgstr "" -#: pretix/control/logdisplay.py:957 pretix/control/views/item.py:1236 +#: pretix/control/logdisplay.py:960 pretix/control/views/item.py:1236 msgid "The quota has been re-opened." msgstr "" -#: pretix/control/logdisplay.py:964 +#: pretix/control/logdisplay.py:967 msgid "The question has been added." msgstr "" -#: pretix/control/logdisplay.py:965 +#: pretix/control/logdisplay.py:968 msgid "The question has been deleted." msgstr "" -#: pretix/control/logdisplay.py:966 +#: pretix/control/logdisplay.py:969 msgid "The question has been changed." msgstr "" -#: pretix/control/logdisplay.py:967 +#: pretix/control/logdisplay.py:970 msgid "The question has been reordered." msgstr "" -#: pretix/control/logdisplay.py:974 +#: pretix/control/logdisplay.py:977 msgid "The discount has been added." msgstr "" -#: pretix/control/logdisplay.py:975 +#: pretix/control/logdisplay.py:978 msgid "The discount has been deleted." msgstr "" -#: pretix/control/logdisplay.py:976 +#: pretix/control/logdisplay.py:979 msgid "The discount has been changed." msgstr "" -#: pretix/control/logdisplay.py:1000 +#: pretix/control/logdisplay.py:1003 #, python-brace-format msgid "" "Position #{posid} has been checked in manually at {datetime} on list \"{list}" "\"." msgstr "" -#: pretix/control/logdisplay.py:1005 +#: pretix/control/logdisplay.py:1008 #, python-brace-format msgid "" "Position #{posid} has been checked in again at {datetime} on list \"{list}\"." msgstr "" -#: pretix/control/logdisplay.py:1014 +#: pretix/control/logdisplay.py:1017 msgid "An entry has been removed from the waiting list." msgstr "" -#: pretix/control/logdisplay.py:1015 +#: pretix/control/logdisplay.py:1018 msgid "An entry has been changed on the waiting list." msgstr "" -#: pretix/control/logdisplay.py:1016 +#: pretix/control/logdisplay.py:1019 msgid "An entry has been added to the waiting list." msgstr "" @@ -16684,9 +16857,9 @@ msgstr "" msgid "Payment" msgstr "" -#: pretix/control/navigation.py:78 pretix/control/views/event.py:1653 -#: pretix/control/views/event.py:1655 pretix/control/views/event.py:1687 -#: pretix/control/views/event.py:1692 pretix/control/views/subevents.py:310 +#: pretix/control/navigation.py:78 pretix/control/views/event.py:1657 +#: pretix/control/views/event.py:1659 pretix/control/views/event.py:1691 +#: pretix/control/views/event.py:1696 pretix/control/views/subevents.py:316 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:60 #: pretix/plugins/ticketoutputpdf/apps.py:55 #: pretix/plugins/ticketoutputpdf/exporters.py:68 @@ -16868,13 +17041,13 @@ msgid "You do not have permission to view this content." msgstr "" #: pretix/control/templates/pretixcontrol/auth/base.html:42 -#: pretix/control/templates/pretixcontrol/base.html:362 +#: pretix/control/templates/pretixcontrol/base.html:363 #, python-format msgid "You are currently working on behalf of %(user)s." msgstr "" #: pretix/control/templates/pretixcontrol/auth/base.html:47 -#: pretix/control/templates/pretixcontrol/base.html:367 +#: pretix/control/templates/pretixcontrol/base.html:368 msgid "Stop impersonating" msgstr "" @@ -17055,7 +17228,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:25 #: pretix/control/templates/pretixcontrol/organizers/device_bulk_edit.html:42 #: pretix/control/templates/pretixcontrol/organizers/device_edit.html:30 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:384 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:385 #: pretix/control/templates/pretixcontrol/organizers/export_form.html:50 #: pretix/control/templates/pretixcontrol/organizers/gate_edit.html:15 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_invite.html:15 @@ -17068,12 +17241,12 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/reusable_medium_edit.html:28 #: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html:15 #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html:28 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:47 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:71 #: pretix/control/templates/pretixcontrol/organizers/webhook_edit.html:21 -#: pretix/control/templates/pretixcontrol/pdf/index.html:46 +#: pretix/control/templates/pretixcontrol/pdf/index.html:44 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:634 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:368 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:289 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:292 #: pretix/control/templates/pretixcontrol/user/notifications.html:85 #: pretix/control/templates/pretixcontrol/user/settings.html:109 #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:13 @@ -17099,76 +17272,76 @@ msgstr "" msgid "Create a new account" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:103 +#: pretix/control/templates/pretixcontrol/base.html:104 msgid "Toggle navigation" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:118 -#: pretix/control/templates/pretixcontrol/base.html:143 -#: pretix/control/templates/pretixcontrol/base.html:147 +#: pretix/control/templates/pretixcontrol/base.html:119 +#: pretix/control/templates/pretixcontrol/base.html:144 #: pretix/control/templates/pretixcontrol/base.html:148 +#: pretix/control/templates/pretixcontrol/base.html:149 msgid "Go to shop" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:124 -#: pretix/control/templates/pretixcontrol/base.html:154 +#: pretix/control/templates/pretixcontrol/base.html:125 #: pretix/control/templates/pretixcontrol/base.html:155 +#: pretix/control/templates/pretixcontrol/base.html:156 msgid "Public profile" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:206 +#: pretix/control/templates/pretixcontrol/base.html:207 msgid "End admin session" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:218 +#: pretix/control/templates/pretixcontrol/base.html:219 msgid "Account Settings" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:223 -#: pretix/control/templates/pretixcontrol/base.html:225 +#: pretix/control/templates/pretixcontrol/base.html:224 +#: pretix/control/templates/pretixcontrol/base.html:226 #: pretix/presale/templates/pretixpresale/fragment_login_status.html:14 msgid "Log out" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:251 +#: pretix/control/templates/pretixcontrol/base.html:252 msgid "Organizer account" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:274 +#: pretix/control/templates/pretixcontrol/base.html:275 msgid "Search for events" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:331 +#: pretix/control/templates/pretixcontrol/base.html:332 #: pretix/presale/templates/pretixpresale/base.html:51 msgid "" "We've detected that you are using Microsoft Internet Explorer." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:334 +#: pretix/control/templates/pretixcontrol/base.html:335 #: pretix/presale/templates/pretixpresale/base.html:54 msgid "" "Internet Explorer is an old browser that does not support lots of recent web-" "based technologies and is no longer supported by this website." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:338 +#: pretix/control/templates/pretixcontrol/base.html:339 #: pretix/presale/templates/pretixpresale/base.html:58 msgid "" "We kindly ask you to move to one of our supported browsers, such as " "Microsoft Edge, Mozilla Firefox, Google Chrome, or Safari." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:347 +#: pretix/control/templates/pretixcontrol/base.html:348 msgid "" "Please leave a short comment on what you did in the following admin sessions:" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:378 +#: pretix/control/templates/pretixcontrol/base.html:379 msgid "Read more" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:395 +#: pretix/control/templates/pretixcontrol/base.html:396 msgid "" "Your event contains test mode orders even though " "test mode has been disabled. You should delete those orders " @@ -17176,11 +17349,11 @@ msgid "" "people from actually buying tickets." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:402 +#: pretix/control/templates/pretixcontrol/base.html:403 msgid "Show all test mode orders" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:410 +#: pretix/control/templates/pretixcontrol/base.html:411 msgid "" "Starting with version 1.2.0, pretix automatically checks for updates in the " "background. During this check, anonymous data is transmitted to servers " @@ -17189,41 +17362,41 @@ msgid "" "if a new update arrives. This message will disappear once you clicked it." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:423 +#: pretix/control/templates/pretixcontrol/base.html:424 msgid "" "Click here to do a license compliance check to make sure your usage of " "pretix is in line with pretix' license." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:432 +#: pretix/control/templates/pretixcontrol/base.html:433 msgid "" "The cronjob component of pretix was not executed in the last hours. Please " "check that you have completed all installation steps and your cronjob is " "executed correctly." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:441 +#: pretix/control/templates/pretixcontrol/base.html:442 msgid "" "pretix is running in debug mode. For security reasons, please never run " "debug mode on a production instance." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:447 +#: pretix/control/templates/pretixcontrol/base.html:448 msgid "" "For security reasons, please change your password before you continue. " "Afterwards you will be redirected to your original destination." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:459 +#: pretix/control/templates/pretixcontrol/base.html:460 #, python-format msgid "Times displayed in %(tz)s" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:465 +#: pretix/control/templates/pretixcontrol/base.html:466 msgid "running in development mode" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:474 +#: pretix/control/templates/pretixcontrol/base.html:475 #: pretix/presale/templates/pretixpresale/fragment_modals.html:38 #: pretix/presale/templates/pretixpresale/postmessage.html:27 #: pretix/presale/templates/pretixpresale/waiting.html:42 @@ -17240,6 +17413,7 @@ msgid "Receipt ID" msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:11 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:29 msgid "ID" msgstr "" @@ -17427,10 +17601,11 @@ msgstr[1] "" #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html:16 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:10 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:21 -#: pretix/control/templates/pretixcontrol/pdf/index.html:153 +#: pretix/control/templates/pretixcontrol/pdf/index.html:151 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:378 #: pretix/control/templates/pretixcontrol/subevents/delete.html:12 #: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:41 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:289 #: pretix/control/templates/pretixcontrol/user/2fa_delete.html:18 #: pretix/control/templates/pretixcontrol/user/2fa_disable.html:17 #: pretix/control/templates/pretixcontrol/user/2fa_enable.html:18 @@ -17487,7 +17662,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/ssoclient_delete.html:20 #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html:20 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:24 -#: pretix/control/templates/pretixcontrol/pdf/index.html:111 +#: pretix/control/templates/pretixcontrol/pdf/index.html:109 #: pretix/control/templates/pretixcontrol/subevents/delete.html:15 #: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:44 #: pretix/control/templates/pretixcontrol/user/2fa_delete.html:21 @@ -17496,7 +17671,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_carts.html:16 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:15 #: pretix/control/templates/pretixcontrol/waitinglist/delete_bulk.html:36 -#: pretix/control/views/orders.py:390 +#: pretix/control/views/orders.py:391 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/delete.html:15 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:16 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_delete.html:15 @@ -17621,6 +17796,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/event/index.html:24 #: pretix/control/templates/pretixcontrol/organizers/device_connect.html:27 #: pretix/control/templates/pretixcontrol/organizers/device_connect.html:33 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:33 msgid "Copy to clipboard" msgstr "" @@ -17824,6 +18000,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/items/discounts.html:158 #: pretix/control/templates/pretixcontrol/items/index.html:176 #: pretix/control/templates/pretixcontrol/items/quotas.html:162 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:185 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:89 #: pretix/plugins/badges/templates/pretixplugins/badges/index.html:72 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:69 @@ -17881,20 +18058,31 @@ msgstr "" msgid "Simulate" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:67 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:69 msgid "Valid check-in" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:69 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:71 msgid "Additional information required" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:71 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:73 msgid "" "The following questions must be answered before check-in can be completed:" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:93 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:85 +msgid "Media exchange required" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:87 +#, python-format +msgid "" +"This ticket needs to be exchanged into a %(media_type)s " +"reusable medium. %(media_policy)s." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:103 msgid "Special attention required" msgstr "" @@ -18331,20 +18519,20 @@ msgid "Cancel or delete event" msgstr "" #: pretix/control/templates/pretixcontrol/event/dangerzone.html:9 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:25 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:27 #: pretix/control/templates/pretixcontrol/event/delete.html:60 #: pretix/control/templates/pretixcontrol/event/live.html:31 msgid "Go offline" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:13 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:14 msgid "" "You can take your event offline. Nobody except your team will be able to see " "or access it any more." msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:34 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:48 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:35 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:51 #: pretix/control/templates/pretixcontrol/orders/cancel.html:5 #: pretix/control/templates/pretixcontrol/orders/cancel.html:7 #: pretix/control/templates/pretixcontrol/orders/cancel_confirm.html:6 @@ -18352,37 +18540,37 @@ msgstr "" msgid "Cancel event" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:38 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:40 msgid "" "If you need to call off your event you want to cancel and refund all " "tickets, you can do so through this option." msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:51 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:53 msgid "No permission" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:59 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:72 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:62 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:76 #: pretix/control/templates/pretixcontrol/event/delete.html:56 #: pretix/control/templates/pretixcontrol/event/delete.html:70 msgid "Delete personal data" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:63 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:67 msgid "" "You can remove personal data such as names and email addresses from your " "event and only retain the financial information such as the number and type " "of tickets sold." msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:80 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:93 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:84 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:99 #: pretix/control/templates/pretixcontrol/event/delete.html:5 msgid "Delete event" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:84 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:89 msgid "" "You can delete your event completely only as long as it does not contain any " "undeletable data, such as orders not performed in test mode." @@ -18502,6 +18690,7 @@ msgid "Shop URL:" msgstr "" #: pretix/control/templates/pretixcontrol/event/index.html:27 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:38 #: pretix/control/templates/pretixcontrol/vouchers/detail.html:57 msgid "Create QR code" msgstr "" @@ -18829,9 +19018,10 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:16 #: pretix/control/templates/pretixcontrol/organizers/mail.html:34 #: pretix/control/templates/pretixcontrol/organizers/mail.html:48 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:83 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:95 #: pretix/control/templates/pretixcontrol/organizers/team_members.html:10 #: pretix/control/templates/pretixcontrol/organizers/webhooks.html:72 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:18 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:94 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:117 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:85 @@ -18849,7 +19039,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/event/mail.html:79 #: pretix/control/templates/pretixcontrol/event/mail_settings_fragment.html:29 #: pretix/control/templates/pretixcontrol/event/tickets.html:35 -#: pretix/control/templates/pretixcontrol/pdf/index.html:41 +#: pretix/control/templates/pretixcontrol/pdf/index.html:39 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:97 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:120 msgid "Preview" @@ -18914,6 +19104,7 @@ msgid "Enabled" msgstr "" #: pretix/control/templates/pretixcontrol/event/payment.html:28 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:34 #: pretix/control/templates/pretixcontrol/subevents/index.html:170 #: pretix/control/templates/pretixcontrol/user/settings.html:81 msgid "Disabled" @@ -18976,11 +19167,11 @@ msgstr "" #: pretix/control/templates/pretixcontrol/event/plugins.html:15 #: pretix/control/templates/pretixcontrol/organizers/plugins.html:15 -#: pretix/control/views/checkin.py:425 pretix/control/views/discounts.py:113 -#: pretix/control/views/event.py:254 pretix/control/views/event.py:583 -#: pretix/control/views/event.py:622 pretix/control/views/event.py:819 -#: pretix/control/views/event.py:1060 pretix/control/views/event.py:1423 -#: pretix/control/views/event.py:1463 +#: pretix/control/views/checkin.py:426 pretix/control/views/discounts.py:113 +#: pretix/control/views/event.py:255 pretix/control/views/event.py:584 +#: pretix/control/views/event.py:623 pretix/control/views/event.py:820 +#: pretix/control/views/event.py:1061 pretix/control/views/event.py:1427 +#: pretix/control/views/event.py:1467 #: pretix/control/views/global_settings.py:65 #: pretix/control/views/global_settings.py:88 pretix/control/views/item.py:271 #: pretix/control/views/item.py:784 pretix/control/views/item.py:1035 @@ -18996,22 +19187,22 @@ msgstr "" #: pretix/control/views/organizer.py:2421 #: pretix/control/views/organizer.py:2558 #: pretix/control/views/organizer.py:2755 -#: pretix/control/views/organizer.py:2871 -#: pretix/control/views/organizer.py:3000 -#: pretix/control/views/organizer.py:3197 -#: pretix/control/views/organizer.py:3226 -#: pretix/control/views/organizer.py:3266 -#: pretix/control/views/organizer.py:3343 -#: pretix/control/views/organizer.py:3440 -#: pretix/control/views/organizer.py:3469 -#: pretix/control/views/organizer.py:3607 pretix/control/views/subevents.py:543 -#: pretix/control/views/subevents.py:1666 pretix/control/views/user.py:241 +#: pretix/control/views/organizer.py:2873 +#: pretix/control/views/organizer.py:3002 +#: pretix/control/views/organizer.py:3199 +#: pretix/control/views/organizer.py:3228 +#: pretix/control/views/organizer.py:3268 +#: pretix/control/views/organizer.py:3345 +#: pretix/control/views/organizer.py:3448 +#: pretix/control/views/organizer.py:3504 +#: pretix/control/views/organizer.py:3642 pretix/control/views/subevents.py:608 +#: pretix/control/views/subevents.py:1739 pretix/control/views/user.py:241 #: pretix/control/views/user.py:857 pretix/control/views/users.py:113 #: pretix/control/views/vouchers.py:306 pretix/plugins/autocheckin/views.py:164 #: pretix/plugins/badges/views.py:158 pretix/plugins/sendmail/views.py:645 #: pretix/plugins/stripe/views.py:699 #: pretix/plugins/ticketoutputpdf/views.py:172 -#: pretix/presale/views/customer.py:544 pretix/presale/views/customer.py:597 +#: pretix/presale/views/customer.py:546 pretix/presale/views/customer.py:599 msgid "Your changes have been saved." msgstr "" @@ -19194,7 +19385,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/item/index.html:127 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:394 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:77 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:35 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:35 msgid "Meta data" msgstr "" @@ -19268,7 +19459,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/events/create_basics.html:59 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:413 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:96 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:54 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:54 msgid "Timeline" msgstr "" @@ -19509,7 +19700,7 @@ msgid "Add a new rule" msgstr "" #: pretix/control/templates/pretixcontrol/event/tax_edit.html:153 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:392 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:393 msgid "Change history" msgstr "" @@ -19617,10 +19808,11 @@ msgstr "" #: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:22 #: pretix/control/templates/pretixcontrol/items/quota_edit.html:21 #: pretix/control/templates/pretixcontrol/organizers/create.html:11 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:20 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:21 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:386 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:31 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:23 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:25 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:23 msgid "General information" msgstr "" @@ -20294,7 +20486,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/item/index.html:254 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:621 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:262 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:262 msgid "Additional settings" msgstr "" @@ -20504,7 +20696,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:108 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:36 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:72 -#: pretix/presale/views/widget.py:490 +#: pretix/presale/views/widget.py:493 msgid "Sold out" msgstr "" @@ -20857,6 +21049,7 @@ msgid "You haven't created any quotas yet." msgstr "" #: pretix/control/templates/pretixcontrol/items/quotas.html:108 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:84 msgid "Capacity left" msgstr "" @@ -20979,16 +21172,16 @@ msgstr "" msgid "No applications have access to your pretix account." msgstr "" -#: pretix/control/templates/pretixcontrol/order/approve.html:4 -#: pretix/control/templates/pretixcontrol/order/approve.html:8 +#: pretix/control/templates/pretixcontrol/order/approve.html:5 +#: pretix/control/templates/pretixcontrol/order/approve.html:9 msgid "Approve order" msgstr "" -#: pretix/control/templates/pretixcontrol/order/approve.html:10 +#: pretix/control/templates/pretixcontrol/order/approve.html:14 msgid "Do you really want to approve this order?" msgstr "" -#: pretix/control/templates/pretixcontrol/order/approve.html:20 +#: pretix/control/templates/pretixcontrol/order/approve.html:24 #: pretix/control/templates/pretixcontrol/order/cancel.html:46 #: pretix/control/templates/pretixcontrol/order/cancellation_request_delete.html:21 #: pretix/control/templates/pretixcontrol/order/delete.html:20 @@ -20999,7 +21192,7 @@ msgstr "" msgid "No, take me back" msgstr "" -#: pretix/control/templates/pretixcontrol/order/approve.html:25 +#: pretix/control/templates/pretixcontrol/order/approve.html:29 msgid "Yes, approve order" msgstr "" @@ -21300,13 +21493,13 @@ msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:46 #: pretix/control/templates/pretixcontrol/orders/index.html:297 -#: pretix/control/views/orders.py:314 +#: pretix/control/views/orders.py:315 msgid "Approve" msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:51 #: pretix/control/templates/pretixcontrol/orders/index.html:304 -#: pretix/control/views/orders.py:328 +#: pretix/control/views/orders.py:329 msgid "Deny" msgstr "" @@ -21345,7 +21538,7 @@ msgid "" msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:116 -#: pretix/control/views/orders.py:376 +#: pretix/control/views/orders.py:377 msgid "Refund for overpayment" msgstr "" @@ -22438,6 +22631,8 @@ msgstr "" #: pretix/control/templates/pretixcontrol/orders/index.html:194 #: pretix/control/templates/pretixcontrol/search/orders.html:80 #: pretix/control/templates/pretixcontrol/search/orders.html:82 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:265 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:269 #, python-format msgctxt "followup" msgid "TODO %(date)s" @@ -22504,12 +22699,12 @@ msgid "Select action" msgstr "" #: pretix/control/templates/pretixcontrol/orders/index.html:311 -#: pretix/control/views/orders.py:360 +#: pretix/control/views/orders.py:361 msgid "Refund overpaid amount" msgstr "" #: pretix/control/templates/pretixcontrol/orders/index.html:319 -#: pretix/control/views/orders.py:345 +#: pretix/control/views/orders.py:346 msgid "Mark as expired if overdue" msgstr "" @@ -22958,11 +23153,11 @@ msgid "" "pretix. This will be ignored if a URL is configured." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:229 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:230 msgid "Barcode media" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:233 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:234 msgid "" "A \"barcode medium\" can be any printed or digital representation of a " "barcode. The medium will initially be created through the sale of a product " @@ -22971,55 +23166,55 @@ msgid "" "same barcode may be re-used during the sale of a different product." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:240 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:241 msgid "Barcode media can currently only be connected to tickets." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:243 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:244 msgid "" "This subsequent reuse of the barcode is currently only supported during POS " "sales." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:260 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:261 msgid "" "This medium type can work with almost any type of NFC chip. With this " "option, only the UID of the NFC chip is used for identification." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:264 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:296 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:265 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:297 msgid "NFC media can currently only be connected to gift cards." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:270 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:271 msgid "" "This method does not provide a high level of protection against abuse since " "it is possible for malicious users to clone someone's chip with the same UID." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:291 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:292 msgid "" "This medium type works only with NFC chips of the type Mifare Ultralight AES " "made by NXP. This provides a higher level of security than other approaches, " "but requires all chips to be encoded prior to use." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:318 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:319 msgid "Domains" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:320 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:321 msgid "This dialog is intended for advanced users." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:321 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:322 msgid "" "The domain needs to be configured on your webserver before it can be used " "here." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:377 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:378 msgid "Add domain" msgstr "" @@ -23463,7 +23658,7 @@ msgid "Media type" msgstr "" #: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:63 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:40 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:52 msgctxt "reusable_media" msgid "Connections" msgstr "" @@ -23477,7 +23672,7 @@ msgctxt "reusable_media" msgid "Medium %(id)s" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:94 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:106 msgctxt "reusable_media" msgid "Medium history" msgstr "" @@ -23562,20 +23757,41 @@ msgstr "" msgid "Are you sure you want to delete the team?" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:7 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:8 #: pretix/control/templates/pretixcontrol/organizers/team_members.html:6 msgid "Team:" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:9 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:10 #: pretix/control/templates/pretixcontrol/organizers/teams.html:30 msgid "Create a new team" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:11 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:12 msgid "You will be able to add team members in the next step." msgstr "" +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:31 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:55 +msgid "" +"Even if a team has no access to a certain category of data, they might still " +"be able to see parts of this data when it is linked to data they can see." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:35 +msgid "" +"For example, someone with access to customer accounts will be able to see " +"some information about gift cards linked to a customer account, even if they " +"generally can't see gift cards directly." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:59 +msgid "" +"For example, someone with access to orders will be able to see some " +"information about vouchers used to create an order, even if they generally " +"can't see vouchers directly." +msgstr "" + #: pretix/control/templates/pretixcontrol/organizers/team_members.html:21 msgid "Member" msgstr "" @@ -23750,89 +23966,89 @@ msgstr "" msgid "PDF Editor" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:36 +#: pretix/control/templates/pretixcontrol/pdf/index.html:34 #: pretix/plugins/banktransfer/refund_export.py:47 msgid "Code" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:52 +#: pretix/control/templates/pretixcontrol/pdf/index.html:50 msgid "Text box" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:59 +#: pretix/control/templates/pretixcontrol/pdf/index.html:57 msgid "QR Code" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:64 +#: pretix/control/templates/pretixcontrol/pdf/index.html:62 msgid "QR code for Check-In" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:71 +#: pretix/control/templates/pretixcontrol/pdf/index.html:69 msgid "QR code for Lead Scanning" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:78 +#: pretix/control/templates/pretixcontrol/pdf/index.html:76 msgid "Other QR code" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:87 +#: pretix/control/templates/pretixcontrol/pdf/index.html:85 msgid "Image" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:92 +#: pretix/control/templates/pretixcontrol/pdf/index.html:90 msgid "" "You can use this to add user-uploaded pictures from questions or pictures " "generated by plugins. If you want to embed a logo or other images, use a " "custom background instead." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:93 +#: pretix/control/templates/pretixcontrol/pdf/index.html:91 msgid "Dynamic image" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:100 +#: pretix/control/templates/pretixcontrol/pdf/index.html:98 msgid "pretix Logo" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:107 +#: pretix/control/templates/pretixcontrol/pdf/index.html:105 msgid "Duplicate" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:117 +#: pretix/control/templates/pretixcontrol/pdf/index.html:115 msgid "Undo" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:121 +#: pretix/control/templates/pretixcontrol/pdf/index.html:119 msgid "Redo" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:142 +#: pretix/control/templates/pretixcontrol/pdf/index.html:140 msgid "" "This feature is only intended for advanced users. We recommend to only use " "it to copy and share ticket designs, not to modify the design source code." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:156 +#: pretix/control/templates/pretixcontrol/pdf/index.html:154 #: pretix/presale/templates/pretixpresale/giftcard/checkout.html:26 msgid "Apply" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:164 +#: pretix/control/templates/pretixcontrol/pdf/index.html:162 msgid "Uploading new PDF background…" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:172 +#: pretix/control/templates/pretixcontrol/pdf/index.html:170 msgid "Welcome to the PDF ticket editor!" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:174 +#: pretix/control/templates/pretixcontrol/pdf/index.html:172 msgid "" "This editor allows you to create a design for the PDF tickets of your event. " "You can upload a background PDF and then use this tool to place texts and a " "QR code on the ticket." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:185 +#: pretix/control/templates/pretixcontrol/pdf/index.html:183 msgid "" "Please note that the editor can only provide a rough preview. Some details, " "for example in text rendering, might look slightly different in the final " @@ -23840,7 +24056,7 @@ msgid "" "preview." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:199 +#: pretix/control/templates/pretixcontrol/pdf/index.html:197 msgid "" "The editor is tested with recent versions of Google Chrome, Mozilla Firefox " "and Opera. Other browsers, especially Internet Explorer or Microsoft Edge, " @@ -23848,174 +24064,174 @@ msgid "" "fonts." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:207 +#: pretix/control/templates/pretixcontrol/pdf/index.html:205 msgid "" "The editor requires JavaScript to work. Please enable JavaScript in your " "browser to continue." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:217 -#: pretix/control/templates/pretixcontrol/pdf/index.html:233 +#: pretix/control/templates/pretixcontrol/pdf/index.html:215 +#: pretix/control/templates/pretixcontrol/pdf/index.html:231 msgid "Loading…" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:220 +#: pretix/control/templates/pretixcontrol/pdf/index.html:218 msgid "Start editing" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:240 +#: pretix/control/templates/pretixcontrol/pdf/index.html:238 msgid "Layout name" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:247 +#: pretix/control/templates/pretixcontrol/pdf/index.html:245 msgid "Preferred language" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:260 -#: pretix/control/templates/pretixcontrol/pdf/index.html:270 +#: pretix/control/templates/pretixcontrol/pdf/index.html:258 +#: pretix/control/templates/pretixcontrol/pdf/index.html:268 msgid "Upload PDF as background" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:262 +#: pretix/control/templates/pretixcontrol/pdf/index.html:260 msgid "" "You can upload a PDF to use as a custom background. The paper size will " "match the PDF." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:274 +#: pretix/control/templates/pretixcontrol/pdf/index.html:272 #, python-format msgid "max. %(size)s, smaller is better" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:282 +#: pretix/control/templates/pretixcontrol/pdf/index.html:280 msgid "Download current background" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:289 +#: pretix/control/templates/pretixcontrol/pdf/index.html:287 msgid "Or choose custom paper size" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:291 +#: pretix/control/templates/pretixcontrol/pdf/index.html:289 msgid "" "To manually change the paper size, you need to create a new, empty " "background." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:299 -#: pretix/control/templates/pretixcontrol/pdf/index.html:386 -#: pretix/control/templates/pretixcontrol/pdf/index.html:428 +#: pretix/control/templates/pretixcontrol/pdf/index.html:297 +#: pretix/control/templates/pretixcontrol/pdf/index.html:384 +#: pretix/control/templates/pretixcontrol/pdf/index.html:426 msgid "Width (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:303 -#: pretix/control/templates/pretixcontrol/pdf/index.html:391 +#: pretix/control/templates/pretixcontrol/pdf/index.html:301 +#: pretix/control/templates/pretixcontrol/pdf/index.html:389 msgid "Height (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:312 +#: pretix/control/templates/pretixcontrol/pdf/index.html:310 msgid "Create empty background" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:319 +#: pretix/control/templates/pretixcontrol/pdf/index.html:317 msgid "Style" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:321 +#: pretix/control/templates/pretixcontrol/pdf/index.html:319 msgid "Dark" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:322 +#: pretix/control/templates/pretixcontrol/pdf/index.html:320 msgid "Light" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:328 +#: pretix/control/templates/pretixcontrol/pdf/index.html:326 msgid "Image content" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:339 +#: pretix/control/templates/pretixcontrol/pdf/index.html:337 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_create.html:20 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_update.html:34 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:29 msgid "Content" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:348 +#: pretix/control/templates/pretixcontrol/pdf/index.html:346 #: pretix/control/templates/pretixcontrol/pdf/placeholders.html:50 msgid "Event attribute:" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:353 +#: pretix/control/templates/pretixcontrol/pdf/index.html:351 #: pretix/control/templates/pretixcontrol/pdf/placeholders.html:59 msgid "Item attribute:" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:356 +#: pretix/control/templates/pretixcontrol/pdf/index.html:354 msgid "Other… (multilingual)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:357 +#: pretix/control/templates/pretixcontrol/pdf/index.html:355 msgid "Other…" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:367 +#: pretix/control/templates/pretixcontrol/pdf/index.html:365 msgid "Show available placeholders" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:374 +#: pretix/control/templates/pretixcontrol/pdf/index.html:372 msgid "x (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:379 +#: pretix/control/templates/pretixcontrol/pdf/index.html:377 msgid "y (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:398 +#: pretix/control/templates/pretixcontrol/pdf/index.html:396 msgid "Size (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:405 +#: pretix/control/templates/pretixcontrol/pdf/index.html:403 msgid "QR color" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:420 +#: pretix/control/templates/pretixcontrol/pdf/index.html:418 msgid "Render without whitespace" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:422 +#: pretix/control/templates/pretixcontrol/pdf/index.html:420 msgid "" "Required for consistent size across platforms. Supported on Android starting " "with pretixPRINT 2.3.3 and on Desktop with pretixSCAN 1.9.3." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:433 +#: pretix/control/templates/pretixcontrol/pdf/index.html:431 msgid "Rotation (°)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:452 +#: pretix/control/templates/pretixcontrol/pdf/index.html:450 msgid "Font size (pt)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:457 +#: pretix/control/templates/pretixcontrol/pdf/index.html:455 msgid "Line height" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:464 +#: pretix/control/templates/pretixcontrol/pdf/index.html:462 msgid "Text color" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:487 +#: pretix/control/templates/pretixcontrol/pdf/index.html:485 msgid "Flow multiple lines downward from specified position" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:541 +#: pretix/control/templates/pretixcontrol/pdf/index.html:539 msgid "Automatically reduce font size to fit content" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:547 +#: pretix/control/templates/pretixcontrol/pdf/index.html:545 msgid "Allow long words to be split (preview is not accurate)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:558 +#: pretix/control/templates/pretixcontrol/pdf/index.html:556 #, python-format msgid "" "This layout uses new features. If you print from your device, make sure you " @@ -24221,24 +24437,24 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:483 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:266 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:124 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:124 msgid "Add a new quota" msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:487 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:128 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:128 msgid "Product settings" msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:489 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:130 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:130 msgid "" "These settings are optional, if you leave them empty, the default values " "from the product settings will be used." msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:525 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:166 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:166 msgid "" "You can choose to either add one or more check-in lists for every date in " "your series individually, or use just one check-in list for all your dates " @@ -24252,7 +24468,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:604 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:359 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:245 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:245 msgid "Add a new check-in list" msgstr "" @@ -24328,16 +24544,36 @@ msgid "" "be disabled instead." msgstr "" -#: pretix/control/templates/pretixcontrol/subevents/detail.html:10 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:9 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:13 +#, python-format msgctxt "subevent" -msgid "Create date" +msgid "Date: %(name)s" msgstr "" -#: pretix/control/templates/pretixcontrol/subevents/detail.html:279 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:234 +msgid "partially canceled" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:282 +msgid "View all" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:289 +msgid "No orders found." +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:302 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:279 msgctxt "subevent" msgid "Date history" msgstr "" +#: pretix/control/templates/pretixcontrol/subevents/edit.html:10 +msgctxt "subevent" +msgid "Create date" +msgstr "" + #: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:3 #: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:5 msgid "You can change this option in the variation settings." @@ -25368,21 +25604,21 @@ msgstr "" msgid "The new check-in list has been created." msgstr "" -#: pretix/control/views/checkin.py:382 pretix/control/views/checkin.py:442 +#: pretix/control/views/checkin.py:382 pretix/control/views/checkin.py:443 #: pretix/control/views/discounts.py:134 pretix/control/views/discounts.py:182 -#: pretix/control/views/event.py:283 pretix/control/views/event.py:586 -#: pretix/control/views/event.py:625 pretix/control/views/event.py:822 -#: pretix/control/views/event.py:1026 pretix/control/views/event.py:1376 -#: pretix/control/views/event.py:1442 pretix/control/views/event.py:1594 +#: pretix/control/views/event.py:284 pretix/control/views/event.py:587 +#: pretix/control/views/event.py:626 pretix/control/views/event.py:823 +#: pretix/control/views/event.py:1027 pretix/control/views/event.py:1380 +#: pretix/control/views/event.py:1446 pretix/control/views/event.py:1598 #: pretix/control/views/item.py:287 pretix/control/views/item.py:334 #: pretix/control/views/item.py:794 pretix/control/views/item.py:820 #: pretix/control/views/item.py:1054 pretix/control/views/item.py:1106 #: pretix/control/views/item.py:1310 pretix/control/views/item.py:1476 #: pretix/control/views/item.py:1668 pretix/control/views/organizer.py:281 #: pretix/control/views/organizer.py:309 pretix/control/views/organizer.py:1450 -#: pretix/control/views/subevents.py:521 pretix/control/views/subevents.py:667 -#: pretix/control/views/subevents.py:1112 -#: pretix/control/views/subevents.py:1574 pretix/control/views/user.py:342 +#: pretix/control/views/subevents.py:586 pretix/control/views/subevents.py:740 +#: pretix/control/views/subevents.py:1185 +#: pretix/control/views/subevents.py:1647 pretix/control/views/user.py:342 #: pretix/control/views/user.py:861 pretix/control/views/user.py:901 #: pretix/control/views/vouchers.py:278 pretix/control/views/vouchers.py:352 #: pretix/control/views/vouchers.py:535 pretix/control/views/waitinglist.py:427 @@ -25394,11 +25630,11 @@ msgstr "" msgid "We could not save your changes. See below for details." msgstr "" -#: pretix/control/views/checkin.py:421 pretix/control/views/checkin.py:458 +#: pretix/control/views/checkin.py:422 pretix/control/views/checkin.py:459 msgid "The requested list does not exist." msgstr "" -#: pretix/control/views/checkin.py:467 +#: pretix/control/views/checkin.py:468 msgid "The selected list has been deleted." msgstr "" @@ -25484,7 +25720,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:117 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:48 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:80 -#: pretix/presale/views/widget.py:504 +#: pretix/presale/views/widget.py:507 msgid "Sale over" msgstr "" @@ -25492,7 +25728,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_calendar.html:119 #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:125 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:88 -#: pretix/presale/views/widget.py:515 +#: pretix/presale/views/widget.py:518 msgid "Soon" msgstr "" @@ -25552,7 +25788,7 @@ msgstr "" #: pretix/control/views/discounts.py:260 pretix/control/views/item.py:197 #: pretix/control/views/item.py:409 pretix/control/views/item.py:543 #: pretix/control/views/organizer.py:2641 -#: pretix/control/views/organizer.py:3702 +#: pretix/control/views/organizer.py:3737 msgid "Some of the provided object ids are invalid." msgstr "" @@ -25560,133 +25796,133 @@ msgstr "" msgid "Not all discounts have been selected." msgstr "" -#: pretix/control/views/event.py:463 +#: pretix/control/views/event.py:464 msgid "" "You do not have sufficient permission to enable plugins that need to be " "enabled for the entire organizer account." msgstr "" -#: pretix/control/views/event.py:480 pretix/control/views/organizer.py:717 +#: pretix/control/views/event.py:481 pretix/control/views/organizer.py:717 #, python-brace-format msgid "The plugin {} is now active, you can configure it here:" msgstr "" -#: pretix/control/views/event.py:489 pretix/control/views/organizer.py:726 +#: pretix/control/views/event.py:490 pretix/control/views/organizer.py:726 #, python-brace-format msgid "The plugin {} is now active." msgstr "" -#: pretix/control/views/event.py:554 +#: pretix/control/views/event.py:555 msgid "" "This payment provider does not exist or the respective plugin is disabled." msgstr "" -#: pretix/control/views/event.py:861 pretix/control/views/organizer.py:362 +#: pretix/control/views/event.py:862 pretix/control/views/organizer.py:362 #: pretix/control/views/vouchers.py:562 msgid "invalid item" msgstr "" -#: pretix/control/views/event.py:948 +#: pretix/control/views/event.py:949 #, python-format msgid "Your order: %(code)s" msgstr "" -#: pretix/control/views/event.py:957 +#: pretix/control/views/event.py:958 msgid "Unknown email renderer." msgstr "" -#: pretix/control/views/event.py:973 pretix/control/views/orders.py:687 +#: pretix/control/views/event.py:974 pretix/control/views/orders.py:701 #: pretix/presale/views/order.py:1177 pretix/presale/views/order.py:1184 msgid "You requested an invalid ticket output type." msgstr "" -#: pretix/control/views/event.py:1121 +#: pretix/control/views/event.py:1122 msgid "Your shop is live now!" msgstr "" -#: pretix/control/views/event.py:1129 +#: pretix/control/views/event.py:1130 msgid "We've taken your shop down. You can re-enable it whenever you want!" msgstr "" -#: pretix/control/views/event.py:1137 +#: pretix/control/views/event.py:1138 msgid "Your shop is now in test mode!" msgstr "" -#: pretix/control/views/event.py:1154 +#: pretix/control/views/event.py:1158 msgid "" "An order could not be deleted as some constraints (e.g. data created by plug-" "ins) do not allow it." msgstr "" -#: pretix/control/views/event.py:1160 +#: pretix/control/views/event.py:1164 msgid "We've disabled test mode for you. Let's sell some real tickets!" msgstr "" -#: pretix/control/views/event.py:1182 +#: pretix/control/views/event.py:1186 msgid "This event can not be deleted." msgstr "" -#: pretix/control/views/event.py:1205 +#: pretix/control/views/event.py:1209 msgid "The event has been deleted." msgstr "" -#: pretix/control/views/event.py:1208 +#: pretix/control/views/event.py:1212 msgid "" "The event could not be deleted as some constraints (e.g. data created by " "plug-ins) do not allow it." msgstr "" -#: pretix/control/views/event.py:1224 +#: pretix/control/views/event.py:1228 #, python-brace-format msgid "" "Specifically, the following plugins still contain data depends on this " "event: {plugin_names}" msgstr "" -#: pretix/control/views/event.py:1304 pretix/control/views/orders.py:767 +#: pretix/control/views/event.py:1308 pretix/control/views/orders.py:781 msgid "The comment has been updated." msgstr "" -#: pretix/control/views/event.py:1306 pretix/control/views/orders.py:769 +#: pretix/control/views/event.py:1310 pretix/control/views/orders.py:783 msgid "Could not update the comment." msgstr "" -#: pretix/control/views/event.py:1334 pretix/control/views/main.py:362 +#: pretix/control/views/event.py:1338 pretix/control/views/main.py:362 msgid "VAT" msgstr "" -#: pretix/control/views/event.py:1370 +#: pretix/control/views/event.py:1374 msgid "The new tax rule has been created." msgstr "" -#: pretix/control/views/event.py:1393 pretix/control/views/event.py:1456 -#: pretix/control/views/event.py:1502 +#: pretix/control/views/event.py:1397 pretix/control/views/event.py:1460 +#: pretix/control/views/event.py:1506 msgid "The requested tax rule does not exist." msgstr "" -#: pretix/control/views/event.py:1511 +#: pretix/control/views/event.py:1515 msgid "The selected tax rule has been deleted." msgstr "" -#: pretix/control/views/event.py:1513 +#: pretix/control/views/event.py:1517 msgid "The selected tax rule can not be deleted." msgstr "" -#: pretix/control/views/event.py:1564 +#: pretix/control/views/event.py:1568 msgid "Your event is not empty, you need to set it up manually." msgstr "" -#: pretix/control/views/event.py:1699 +#: pretix/control/views/event.py:1703 msgid "" "Your changes have been saved. You can now go on with looking at the details " "or take your event live to start selling!" msgstr "" -#: pretix/control/views/event.py:1720 +#: pretix/control/views/event.py:1724 msgid "Regular ticket" msgstr "" -#: pretix/control/views/event.py:1725 +#: pretix/control/views/event.py:1729 msgid "Reduced ticket" msgstr "" @@ -25793,7 +26029,7 @@ msgstr "" #: pretix/control/views/item.py:412 pretix/control/views/item.py:546 #: pretix/control/views/organizer.py:2644 -#: pretix/control/views/organizer.py:3705 +#: pretix/control/views/organizer.py:3740 msgid "Not all objects have been selected." msgstr "" @@ -26008,81 +26244,81 @@ msgstr "" msgid "Access for the selected application has been revoked." msgstr "" -#: pretix/control/views/orders.py:196 +#: pretix/control/views/orders.py:197 msgid "We could not process your input. See below for details." msgstr "" -#: pretix/control/views/orders.py:269 +#: pretix/control/views/orders.py:270 #, python-brace-format msgid "" "Successfully executed the action \"{label}\" on {success} of {total} orders." msgstr "" -#: pretix/control/views/orders.py:689 pretix/presale/views/order.py:114 +#: pretix/control/views/orders.py:703 pretix/presale/views/order.py:114 #: pretix/presale/views/order.py:382 pretix/presale/views/order.py:1006 #: pretix/presale/views/order.py:1186 pretix/presale/views/order.py:1794 msgid "Unknown order code or not authorized to access this order." msgstr "" -#: pretix/control/views/orders.py:691 pretix/presale/views/order.py:1191 +#: pretix/control/views/orders.py:705 pretix/presale/views/order.py:1191 msgid "Ticket download is not enabled for this product." msgstr "" -#: pretix/control/views/orders.py:803 +#: pretix/control/views/orders.py:817 msgid "The order has been deleted." msgstr "" -#: pretix/control/views/orders.py:810 +#: pretix/control/views/orders.py:824 msgid "" "The order could not be deleted as some constraints (e.g. data created by " "plug-ins) do not allow it." msgstr "" -#: pretix/control/views/orders.py:818 +#: pretix/control/views/orders.py:832 msgid "Only orders created in test mode can be deleted." msgstr "" -#: pretix/control/views/orders.py:839 +#: pretix/control/views/orders.py:853 msgid "The order has been denied and is therefore now canceled." msgstr "" -#: pretix/control/views/orders.py:879 +#: pretix/control/views/orders.py:893 msgid "This payment has been canceled." msgstr "" -#: pretix/control/views/orders.py:881 +#: pretix/control/views/orders.py:895 msgid "This payment can not be canceled at the moment." msgstr "" -#: pretix/control/views/orders.py:907 +#: pretix/control/views/orders.py:921 msgid "The refund has been canceled." msgstr "" -#: pretix/control/views/orders.py:909 +#: pretix/control/views/orders.py:923 msgid "This refund can not be canceled at the moment." msgstr "" -#: pretix/control/views/orders.py:943 +#: pretix/control/views/orders.py:957 msgid "The refund has been processed." msgstr "" -#: pretix/control/views/orders.py:945 pretix/control/views/orders.py:971 +#: pretix/control/views/orders.py:959 pretix/control/views/orders.py:985 msgid "This refund can not be processed at the moment." msgstr "" -#: pretix/control/views/orders.py:969 +#: pretix/control/views/orders.py:983 msgid "The refund has been marked as done." msgstr "" -#: pretix/control/views/orders.py:995 +#: pretix/control/views/orders.py:1009 msgid "The request has been removed. If you want, you can now inform the user." msgstr "" -#: pretix/control/views/orders.py:1002 +#: pretix/control/views/orders.py:1016 msgid "Your cancellation request" msgstr "" -#: pretix/control/views/orders.py:1003 +#: pretix/control/views/orders.py:1017 #, python-brace-format msgid "" "Hello,\n" @@ -26093,66 +26329,66 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/control/views/orders.py:1058 +#: pretix/control/views/orders.py:1072 msgid "The payment has been marked as complete." msgstr "" -#: pretix/control/views/orders.py:1060 +#: pretix/control/views/orders.py:1074 msgid "This payment can not be confirmed at the moment." msgstr "" -#: pretix/control/views/orders.py:1151 +#: pretix/control/views/orders.py:1165 msgid "" "The refund was prevented due to a refund already being processed at the same " "time. Please have a look at the order details and check if your refund is " "still necessary." msgstr "" -#: pretix/control/views/orders.py:1256 +#: pretix/control/views/orders.py:1270 msgid "You entered an order in an event with a different currency." msgstr "" -#: pretix/control/views/orders.py:1307 +#: pretix/control/views/orders.py:1321 msgid "" "You can not refund more than the amount of a payment that is not yet " "refunded." msgstr "" -#: pretix/control/views/orders.py:1312 +#: pretix/control/views/orders.py:1326 msgid "" "You selected a partial refund for a payment method that only supports full " "refunds." msgstr "" -#: pretix/control/views/orders.py:1342 +#: pretix/control/views/orders.py:1356 #, python-brace-format msgid "" "One of the refunds failed to be processed. You should retry to refund in a " "different way. The error message was: {}" msgstr "" -#: pretix/control/views/orders.py:1348 +#: pretix/control/views/orders.py:1362 #, python-brace-format msgid "A refund of {} has been processed." msgstr "" -#: pretix/control/views/orders.py:1352 +#: pretix/control/views/orders.py:1366 #, python-brace-format msgid "" "A refund of {} has been saved, but not yet fully executed. You can mark it " "as complete below." msgstr "" -#: pretix/control/views/orders.py:1381 +#: pretix/control/views/orders.py:1395 msgid "" "A new gift card was created. You can now send the user their gift card code." msgstr "" -#: pretix/control/views/orders.py:1389 +#: pretix/control/views/orders.py:1403 msgid "Your gift card code" msgstr "" -#: pretix/control/views/orders.py:1391 +#: pretix/control/views/orders.py:1405 #, python-brace-format msgid "" "Hello,\n" @@ -26165,206 +26401,206 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/control/views/orders.py:1402 +#: pretix/control/views/orders.py:1416 msgid "The refunds you selected do not match the selected total refund amount." msgstr "" -#: pretix/control/views/orders.py:1532 +#: pretix/control/views/orders.py:1546 msgid "The payment has been created successfully." msgstr "" -#: pretix/control/views/orders.py:1546 +#: pretix/control/views/orders.py:1560 msgid "" "The order has been canceled. You can now select how you want to transfer the " "money back to the user." msgstr "" -#: pretix/control/views/orders.py:1617 pretix/control/views/orders.py:1621 +#: pretix/control/views/orders.py:1631 pretix/control/views/orders.py:1635 msgid "No VAT ID specified." msgstr "" -#: pretix/control/views/orders.py:1625 +#: pretix/control/views/orders.py:1639 msgid "No country specified." msgstr "" -#: pretix/control/views/orders.py:1629 +#: pretix/control/views/orders.py:1643 msgid "VAT ID could not be checked since this country is not supported." msgstr "" -#: pretix/control/views/orders.py:1648 +#: pretix/control/views/orders.py:1662 msgid "" "The VAT ID could not be checked, as the VAT checking service of the country " "is currently not available." msgstr "" -#: pretix/control/views/orders.py:1651 +#: pretix/control/views/orders.py:1665 msgid "This VAT ID is valid." msgstr "" -#: pretix/control/views/orders.py:1665 pretix/control/views/orders.py:1699 -#: pretix/control/views/orders.py:1731 +#: pretix/control/views/orders.py:1679 pretix/control/views/orders.py:1713 +#: pretix/control/views/orders.py:1745 msgid "Unknown invoice." msgstr "" -#: pretix/control/views/orders.py:1668 +#: pretix/control/views/orders.py:1682 msgid "Invoices may not be changed after they are created." msgstr "" -#: pretix/control/views/orders.py:1670 +#: pretix/control/views/orders.py:1684 msgid "Invoices may not be changed after they are transmitted." msgstr "" -#: pretix/control/views/orders.py:1672 pretix/control/views/orders.py:1734 +#: pretix/control/views/orders.py:1686 pretix/control/views/orders.py:1748 msgid "The invoice has already been canceled." msgstr "" -#: pretix/control/views/orders.py:1674 +#: pretix/control/views/orders.py:1688 msgid "The invoice file has already been exported." msgstr "" -#: pretix/control/views/orders.py:1676 +#: pretix/control/views/orders.py:1690 msgid "The invoice file is too old to be regenerated." msgstr "" -#: pretix/control/views/orders.py:1678 pretix/control/views/orders.py:1736 +#: pretix/control/views/orders.py:1692 pretix/control/views/orders.py:1750 msgid "The invoice has been cleaned of personal data." msgstr "" -#: pretix/control/views/orders.py:1703 +#: pretix/control/views/orders.py:1717 msgid "" "The invoice is currently being transmitted. You can start a new attempt " "after the current one has been completed." msgstr "" -#: pretix/control/views/orders.py:1710 +#: pretix/control/views/orders.py:1724 msgid "The invoice has been scheduled for retransmission." msgstr "" -#: pretix/control/views/orders.py:1744 +#: pretix/control/views/orders.py:1758 msgid "The invoice has been canceled." msgstr "" -#: pretix/control/views/orders.py:1783 +#: pretix/control/views/orders.py:1797 msgid "The email has been queued to be sent." msgstr "" -#: pretix/control/views/orders.py:1807 pretix/presale/views/order.py:1365 +#: pretix/control/views/orders.py:1821 pretix/presale/views/order.py:1365 msgid "This invoice has not been found" msgstr "" -#: pretix/control/views/orders.py:1814 pretix/presale/views/order.py:1372 +#: pretix/control/views/orders.py:1828 pretix/presale/views/order.py:1372 msgid "The invoice file is no longer stored on the server." msgstr "" -#: pretix/control/views/orders.py:1819 pretix/presale/views/order.py:1377 +#: pretix/control/views/orders.py:1833 pretix/presale/views/order.py:1377 msgid "" "The invoice file has not yet been generated, we will generate it for you " "now. Please try again in a few seconds." msgstr "" -#: pretix/control/views/orders.py:1847 +#: pretix/control/views/orders.py:1861 msgid "The payment term has been changed." msgstr "" -#: pretix/control/views/orders.py:1852 pretix/control/views/orders.py:1909 +#: pretix/control/views/orders.py:1866 pretix/control/views/orders.py:1923 msgid "" "We were not able to process the request completely as the server was too " "busy." msgstr "" -#: pretix/control/views/orders.py:1860 +#: pretix/control/views/orders.py:1874 msgid "This action is only allowed for pending orders." msgstr "" -#: pretix/control/views/orders.py:1915 +#: pretix/control/views/orders.py:1929 msgid "This action is only allowed for canceled orders." msgstr "" -#: pretix/control/views/orders.py:2174 pretix/presale/views/order.py:1661 +#: pretix/control/views/orders.py:2188 pretix/presale/views/order.py:1661 msgid "An error occurred. Please see the details below." msgstr "" -#: pretix/control/views/orders.py:2182 +#: pretix/control/views/orders.py:2196 msgid "The order has been changed and the user has been notified." msgstr "" -#: pretix/control/views/orders.py:2184 pretix/control/views/orders.py:2320 -#: pretix/control/views/orders.py:2357 pretix/presale/views/order.py:1697 +#: pretix/control/views/orders.py:2198 pretix/control/views/orders.py:2334 +#: pretix/control/views/orders.py:2371 pretix/presale/views/order.py:1697 msgid "The order has been changed." msgstr "" -#: pretix/control/views/orders.py:2211 pretix/presale/checkoutflow.py:963 +#: pretix/control/views/orders.py:2225 pretix/presale/checkoutflow.py:964 #: pretix/presale/views/order.py:845 pretix/presale/views/order.py:981 msgid "" "We had difficulties processing your input. Please review the errors below." msgstr "" -#: pretix/control/views/orders.py:2322 +#: pretix/control/views/orders.py:2336 msgid "Nothing about the order had to be changed." msgstr "" -#: pretix/control/views/orders.py:2403 pretix/plugins/sendmail/views.py:176 +#: pretix/control/views/orders.py:2417 pretix/plugins/sendmail/views.py:176 msgid "We could not send the email. See below for details." msgstr "" -#: pretix/control/views/orders.py:2419 pretix/control/views/orders.py:2483 +#: pretix/control/views/orders.py:2433 pretix/control/views/orders.py:2497 #: pretix/plugins/sendmail/views.py:204 pretix/plugins/sendmail/views.py:671 #, python-brace-format msgid "Subject: {subject}" msgstr "" -#: pretix/control/views/orders.py:2437 pretix/control/views/orders.py:2502 +#: pretix/control/views/orders.py:2451 pretix/control/views/orders.py:2516 #, python-brace-format msgid "Your message has been queued and will be sent to {}." msgstr "" -#: pretix/control/views/orders.py:2555 pretix/presale/views/order.py:1151 +#: pretix/control/views/orders.py:2569 pretix/presale/views/order.py:1151 msgid "" "This link is no longer valid. Please go back, refresh the page, and try " "again." msgstr "" -#: pretix/control/views/orders.py:2636 +#: pretix/control/views/orders.py:2650 msgid "There is no order with the given order code." msgstr "" -#: pretix/control/views/orders.py:2745 pretix/control/views/organizer.py:2084 +#: pretix/control/views/orders.py:2759 pretix/control/views/organizer.py:2084 msgid "The selected exporter was not found." msgstr "" -#: pretix/control/views/orders.py:2755 pretix/control/views/organizer.py:2094 +#: pretix/control/views/orders.py:2769 pretix/control/views/organizer.py:2094 msgid "There was a problem processing your input. See below for error details." msgstr "" -#: pretix/control/views/orders.py:2792 pretix/control/views/organizer.py:2130 +#: pretix/control/views/orders.py:2806 pretix/control/views/organizer.py:2130 msgid "" "Your user account does not have sufficient permission to run this report, " "therefore you cannot change it." msgstr "" -#: pretix/control/views/orders.py:2801 pretix/control/views/organizer.py:2139 +#: pretix/control/views/orders.py:2815 pretix/control/views/organizer.py:2139 msgid "" "Your user account does not have sufficient permission to run this report, " "therefore you cannot schedule it." msgstr "" -#: pretix/control/views/orders.py:2817 pretix/control/views/organizer.py:2155 +#: pretix/control/views/orders.py:2831 pretix/control/views/organizer.py:2155 #, python-brace-format msgid "" "Your export schedule has been saved. The next export will start around " "{datetime}." msgstr "" -#: pretix/control/views/orders.py:2822 pretix/control/views/organizer.py:2160 +#: pretix/control/views/orders.py:2836 pretix/control/views/organizer.py:2160 msgid "Your export schedule has been saved, but no next export is planned." msgstr "" -#: pretix/control/views/orders.py:2867 pretix/control/views/organizer.py:2206 +#: pretix/control/views/orders.py:2881 pretix/control/views/organizer.py:2206 #, python-brace-format msgid "Export: {title}" msgstr "" -#: pretix/control/views/orders.py:2868 pretix/control/views/organizer.py:2208 +#: pretix/control/views/orders.py:2882 pretix/control/views/organizer.py:2208 #, python-brace-format msgid "" "Hello,\n" @@ -26372,25 +26608,25 @@ msgid "" "attached to this email, you can find a new scheduled report for {name}." msgstr "" -#: pretix/control/views/orders.py:2974 pretix/control/views/organizer.py:2342 +#: pretix/control/views/orders.py:2988 pretix/control/views/organizer.py:2342 msgid "" "Your export is queued to start soon. The results will be send via email. " "Depending on system load and type and size of export, this may take a few " "minutes." msgstr "" -#: pretix/control/views/orders.py:3061 pretix/control/views/orders.py:3142 +#: pretix/control/views/orders.py:3075 pretix/control/views/orders.py:3156 msgid "All orders have been canceled." msgstr "" -#: pretix/control/views/orders.py:3063 pretix/control/views/orders.py:3144 +#: pretix/control/views/orders.py:3077 pretix/control/views/orders.py:3158 #, python-brace-format msgid "" "The orders have been canceled. An error occurred with {count} orders, please " "check all uncanceled orders." msgstr "" -#: pretix/control/views/orders.py:3091 pretix/control/views/orders.py:3165 +#: pretix/control/views/orders.py:3105 pretix/control/views/orders.py:3179 msgid "Your input was not valid." msgstr "" @@ -26461,11 +26697,11 @@ msgstr "" #: pretix/control/views/organizer.py:2724 #: pretix/control/views/organizer.py:2759 #: pretix/control/views/organizer.py:2833 -#: pretix/control/views/organizer.py:2875 -#: pretix/control/views/organizer.py:2955 -#: pretix/control/views/organizer.py:3005 -#: pretix/control/views/organizer.py:3567 -#: pretix/control/views/organizer.py:3611 +#: pretix/control/views/organizer.py:2877 +#: pretix/control/views/organizer.py:2957 +#: pretix/control/views/organizer.py:3007 +#: pretix/control/views/organizer.py:3602 +#: pretix/control/views/organizer.py:3646 msgid "Your changes could not be saved." msgstr "" @@ -26625,9 +26861,9 @@ msgid "The order of properties has been updated." msgstr "" #: pretix/control/views/organizer.py:2789 -#: pretix/control/views/organizer.py:2905 -#: pretix/control/views/organizer.py:3035 -#: pretix/control/views/organizer.py:3304 +#: pretix/control/views/organizer.py:2907 +#: pretix/control/views/organizer.py:3037 +#: pretix/control/views/organizer.py:3306 msgid "The selected object has been deleted." msgstr "" @@ -26635,45 +26871,45 @@ msgstr "" msgid "The provider has been created." msgstr "" -#: pretix/control/views/organizer.py:2944 +#: pretix/control/views/organizer.py:2946 #, python-brace-format msgid "" "The SSO client has been created. Please note down the following client " "secret, it will never be shown again: {secret}" msgstr "" -#: pretix/control/views/organizer.py:2994 +#: pretix/control/views/organizer.py:2996 #, python-brace-format msgid "" "Your changes have been saved. Please note down the following client secret, " "it will never be shown again: {secret}" msgstr "" -#: pretix/control/views/organizer.py:3104 +#: pretix/control/views/organizer.py:3106 msgid "" "We've sent the customer an email with further instructions on resetting your " "password." msgstr "" -#: pretix/control/views/organizer.py:3369 +#: pretix/control/views/organizer.py:3371 msgid "The customer account has been anonymized." msgstr "" -#: pretix/control/views/organizer.py:3639 +#: pretix/control/views/organizer.py:3674 msgid "This channel can not be deleted." msgstr "" -#: pretix/control/views/organizer.py:3644 +#: pretix/control/views/organizer.py:3679 msgid "The selected sales channel has been deleted." msgstr "" -#: pretix/control/views/organizer.py:3646 +#: pretix/control/views/organizer.py:3681 msgid "" "The channel could not be deleted as some constraints (e.g. data created by " "plug-ins) did not allow it." msgstr "" -#: pretix/control/views/organizer.py:3671 +#: pretix/control/views/organizer.py:3706 msgid "The order of sales channels has been updated." msgstr "" @@ -26698,57 +26934,58 @@ msgstr "" msgid "The selected data was deleted successfully." msgstr "" -#: pretix/control/views/subevents.py:168 pretix/control/views/subevents.py:530 +#: pretix/control/views/subevents.py:174 pretix/control/views/subevents.py:526 +#: pretix/control/views/subevents.py:595 msgctxt "subevent" msgid "The requested date does not exist." msgstr "" -#: pretix/control/views/subevents.py:172 pretix/control/views/subevents.py:184 +#: pretix/control/views/subevents.py:178 pretix/control/views/subevents.py:190 msgctxt "subevent" msgid "A date can not be deleted if orders already have been placed." msgstr "" -#: pretix/control/views/subevents.py:203 +#: pretix/control/views/subevents.py:209 msgctxt "subevent" msgid "" "The date could not be deleted as some constraints (e.g. data created by plug-" "ins) did not allow it. The date was disabled instead." msgstr "" -#: pretix/control/views/subevents.py:207 +#: pretix/control/views/subevents.py:213 msgctxt "subevent" msgid "The selected date has been deleted." msgstr "" -#: pretix/control/views/subevents.py:631 +#: pretix/control/views/subevents.py:704 msgctxt "subevent" msgid "The new date has been created." msgstr "" -#: pretix/control/views/subevents.py:708 +#: pretix/control/views/subevents.py:781 msgctxt "subevent" msgid "The selected dates have been disabled." msgstr "" -#: pretix/control/views/subevents.py:721 +#: pretix/control/views/subevents.py:794 msgctxt "subevent" msgid "The selected dates have been enabled." msgstr "" -#: pretix/control/views/subevents.py:750 +#: pretix/control/views/subevents.py:823 msgctxt "subevent" msgid "The selected dates have been deleted or disabled." msgstr "" -#: pretix/control/views/subevents.py:938 +#: pretix/control/views/subevents.py:1011 msgid "Please do not create more than 100.000 dates at once." msgstr "" -#: pretix/control/views/subevents.py:967 +#: pretix/control/views/subevents.py:1040 msgid "All dates would be skipped because they conflict with existing dates." msgstr "" -#: pretix/control/views/subevents.py:1103 +#: pretix/control/views/subevents.py:1176 #, python-brace-format msgctxt "subevent" msgid "{} new dates have been created." @@ -26768,6 +27005,10 @@ msgstr "" msgid "Voucher {}" msgstr "" +#: pretix/control/views/typeahead.py:179 pretix/control/views/typeahead.py:180 +msgid "No event" +msgstr "" + #: pretix/control/views/user.py:169 msgid "The password you entered was invalid, please try again." msgstr "" @@ -30610,111 +30851,111 @@ msgstr "" msgid "Web Check-in" msgstr "" -#: pretix/presale/checkoutflow.py:119 +#: pretix/presale/checkoutflow.py:120 msgctxt "checkoutflow" msgid "Step" msgstr "" -#: pretix/presale/checkoutflow.py:251 +#: pretix/presale/checkoutflow.py:252 msgctxt "checkoutflow" msgid "Customer account" msgstr "" -#: pretix/presale/checkoutflow.py:338 +#: pretix/presale/checkoutflow.py:339 msgid "We failed to process your authentication request, please try again." msgstr "" -#: pretix/presale/checkoutflow.py:401 +#: pretix/presale/checkoutflow.py:402 msgctxt "checkoutflow" msgid "Membership" msgstr "" -#: pretix/presale/checkoutflow.py:449 pretix/presale/checkoutflow.py:470 +#: pretix/presale/checkoutflow.py:450 pretix/presale/checkoutflow.py:471 msgid "" "Your cart includes a product that requires an active membership to be " "selected." msgstr "" -#: pretix/presale/checkoutflow.py:489 +#: pretix/presale/checkoutflow.py:490 msgctxt "checkoutflow" msgid "Add-on products" msgstr "" -#: pretix/presale/checkoutflow.py:696 pretix/presale/checkoutflow.py:704 +#: pretix/presale/checkoutflow.py:697 pretix/presale/checkoutflow.py:705 #: pretix/presale/views/cart.py:195 pretix/presale/views/cart.py:200 #: pretix/presale/views/cart.py:218 pretix/presale/views/cart.py:231 #: pretix/presale/views/order.py:1582 pretix/presale/views/order.py:1590 msgid "Please enter numbers only." msgstr "" -#: pretix/presale/checkoutflow.py:778 +#: pretix/presale/checkoutflow.py:779 msgctxt "checkoutflow" msgid "Your information" msgstr "" -#: pretix/presale/checkoutflow.py:1012 +#: pretix/presale/checkoutflow.py:1013 msgid "" "Unfortunately, based on the invoice address you entered, we're not able to " "sell you the selected products for tax-related legal reasons." msgstr "" -#: pretix/presale/checkoutflow.py:1018 +#: pretix/presale/checkoutflow.py:1019 msgid "" "Due to the invoice address you entered, we need to apply a different tax " "rate to your purchase and the price of the products in your cart has changed " "accordingly." msgstr "" -#: pretix/presale/checkoutflow.py:1042 pretix/presale/checkoutflow.py:1048 +#: pretix/presale/checkoutflow.py:1043 pretix/presale/checkoutflow.py:1049 msgid "Please enter a valid email address." msgstr "" -#: pretix/presale/checkoutflow.py:1055 +#: pretix/presale/checkoutflow.py:1056 msgid "Please enter your invoicing address." msgstr "" -#: pretix/presale/checkoutflow.py:1059 +#: pretix/presale/checkoutflow.py:1060 msgid "Please enter your name." msgstr "" -#: pretix/presale/checkoutflow.py:1094 pretix/presale/checkoutflow.py:1099 -#: pretix/presale/checkoutflow.py:1104 pretix/presale/checkoutflow.py:1109 -#: pretix/presale/checkoutflow.py:1114 +#: pretix/presale/checkoutflow.py:1095 pretix/presale/checkoutflow.py:1100 +#: pretix/presale/checkoutflow.py:1105 pretix/presale/checkoutflow.py:1110 +#: pretix/presale/checkoutflow.py:1115 msgid "Please fill in answers to all required questions." msgstr "" -#: pretix/presale/checkoutflow.py:1277 +#: pretix/presale/checkoutflow.py:1278 msgctxt "checkoutflow" msgid "Payment" msgstr "" -#: pretix/presale/checkoutflow.py:1388 +#: pretix/presale/checkoutflow.py:1389 #, python-brace-format msgid "" "Your payment method has been applied, but {} still need to be paid. Please " "select a payment method for the remainder." msgstr "" -#: pretix/presale/checkoutflow.py:1413 pretix/presale/views/order.py:733 +#: pretix/presale/checkoutflow.py:1414 pretix/presale/views/order.py:733 msgid "Please select a payment method." msgstr "" -#: pretix/presale/checkoutflow.py:1445 pretix/presale/checkoutflow.py:1465 -#: pretix/presale/checkoutflow.py:1476 +#: pretix/presale/checkoutflow.py:1446 pretix/presale/checkoutflow.py:1466 +#: pretix/presale/checkoutflow.py:1477 msgid "Please select a payment method to proceed." msgstr "" -#: pretix/presale/checkoutflow.py:1481 pretix/presale/views/order.py:489 +#: pretix/presale/checkoutflow.py:1482 pretix/presale/views/order.py:489 #: pretix/presale/views/order.py:559 msgid "The payment information you entered was incomplete." msgstr "" -#: pretix/presale/checkoutflow.py:1526 +#: pretix/presale/checkoutflow.py:1527 msgctxt "checkoutflow" msgid "Review order" msgstr "" -#: pretix/presale/checkoutflow.py:1624 +#: pretix/presale/checkoutflow.py:1625 msgid "You need to check all checkboxes on the bottom of the page." msgstr "" @@ -31547,7 +31788,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:105 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:31 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:69 -#: pretix/presale/views/widget.py:485 +#: pretix/presale/views/widget.py:488 msgid "Reserved" msgstr "" @@ -32099,7 +32340,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:34 #: pretix/presale/templates/pretixpresale/organizers/index.html:93 -#: pretix/presale/views/widget.py:496 +#: pretix/presale/views/widget.py:499 msgid "More info" msgstr "" @@ -32130,12 +32371,12 @@ msgid "Choose date to book a ticket" msgstr "" #: pretix/presale/templates/pretixpresale/event/index.html:155 -#: pretix/presale/views/waiting.py:146 pretix/presale/views/widget.py:836 +#: pretix/presale/views/waiting.py:146 pretix/presale/views/widget.py:839 msgid "The booking period for this event is over." msgstr "" #: pretix/presale/templates/pretixpresale/event/index.html:163 -#: pretix/presale/views/widget.py:838 +#: pretix/presale/views/widget.py:841 #, python-format msgid "The booking period for this event will start on %(date)s at %(time)s." msgstr "" @@ -32253,7 +32494,7 @@ msgid "" msgstr "" #: pretix/presale/templates/pretixpresale/event/order.html:75 -#: pretix/presale/templates/pretixpresale/event/position.html:18 +#: pretix/presale/templates/pretixpresale/event/position.html:19 msgid "View in backend" msgstr "" @@ -32311,13 +32552,13 @@ msgid "" msgstr "" #: pretix/presale/templates/pretixpresale/event/order.html:199 -#: pretix/presale/templates/pretixpresale/event/position.html:33 +#: pretix/presale/templates/pretixpresale/event/position.html:34 msgid "Change ordered items" msgstr "" #: pretix/presale/templates/pretixpresale/event/order.html:200 #: pretix/presale/templates/pretixpresale/event/order.html:291 -#: pretix/presale/templates/pretixpresale/event/position.html:34 +#: pretix/presale/templates/pretixpresale/event/position.html:35 msgid "Change details" msgstr "" @@ -32584,41 +32825,41 @@ msgstr "" msgid "Scan the QR code with your banking app" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:7 +#: pretix/presale/templates/pretixpresale/event/position.html:8 msgid "Registration details" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:10 +#: pretix/presale/templates/pretixpresale/event/position.html:11 msgid "Your registration" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:31 +#: pretix/presale/templates/pretixpresale/event/position.html:32 msgid "Your items" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:46 +#: pretix/presale/templates/pretixpresale/event/position.html:47 msgid "Additional information" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:51 +#: pretix/presale/templates/pretixpresale/event/position.html:52 #, python-format msgid "" "This order is managed for you by %(email)s. Please contact them for any " "questions regarding payment, cancellation or changes to this order." msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:63 +#: pretix/presale/templates/pretixpresale/event/position.html:64 msgctxt "action" msgid "Change your ticket" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:68 +#: pretix/presale/templates/pretixpresale/event/position.html:69 msgid "" "If you want to make changes to the components of your ticket, you can click " "on the following button." msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:73 +#: pretix/presale/templates/pretixpresale/event/position.html:74 #, python-format msgid "" "You can only make some changes to this ticket yourself. For additional " @@ -32626,7 +32867,7 @@ msgid "" "(%(email)s)." msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:82 +#: pretix/presale/templates/pretixpresale/event/position.html:83 #: pretix/presale/templates/pretixpresale/event/position_change.html:5 #: pretix/presale/templates/pretixpresale/event/position_change.html:10 #: pretix/presale/templates/pretixpresale/event/position_change_confirm.html:6 @@ -32795,7 +33036,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:94 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:14 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:58 -#: pretix/presale/views/widget.py:470 +#: pretix/presale/views/widget.py:473 msgid "Few tickets left" msgstr "" @@ -32803,7 +33044,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:97 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:19 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:61 -#: pretix/presale/views/widget.py:475 +#: pretix/presale/views/widget.py:478 msgctxt "available_event_in_list" msgid "Buy now" msgstr "" @@ -32816,7 +33057,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:44 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:63 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:78 -#: pretix/presale/views/widget.py:477 pretix/presale/views/widget.py:500 +#: pretix/presale/views/widget.py:480 pretix/presale/views/widget.py:503 msgid "Book now" msgstr "" @@ -32824,7 +33065,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:111 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:38 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:74 -#: pretix/presale/views/widget.py:492 +#: pretix/presale/views/widget.py:495 msgid "Fully booked" msgstr "" @@ -33041,7 +33282,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/organizers/customer_addresses.html:5 #: pretix/presale/templates/pretixpresale/organizers/customer_addresses.html:11 -#: pretix/presale/views/customer.py:380 +#: pretix/presale/views/customer.py:382 msgid "Addresses" msgstr "" @@ -33169,7 +33410,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:5 #: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:11 -#: pretix/presale/views/customer.py:386 +#: pretix/presale/views/customer.py:388 msgid "Attendee profiles" msgstr "" @@ -33295,7 +33536,7 @@ msgid "The products have been successfully added to your cart." msgstr "" #: pretix/presale/views/cart.py:626 pretix/presale/views/event.py:543 -#: pretix/presale/views/widget.py:428 +#: pretix/presale/views/widget.py:431 msgid "Tickets for this event cannot be purchased on this sales channel." msgstr "" @@ -33325,7 +33566,7 @@ msgid "" msgstr "" #: pretix/presale/views/customer.py:268 pretix/presale/views/customer.py:271 -#: pretix/presale/views/customer.py:625 pretix/presale/views/customer.py:631 +#: pretix/presale/views/customer.py:627 pretix/presale/views/customer.py:633 msgid "You clicked an invalid link." msgstr "" @@ -33333,29 +33574,29 @@ msgstr "" msgid "Your new password has been set! You can now use it to log in." msgstr "" -#: pretix/presale/views/customer.py:333 +#: pretix/presale/views/customer.py:335 msgid "" "We've sent you an email with further instructions on resetting your password." msgstr "" -#: pretix/presale/views/customer.py:593 +#: pretix/presale/views/customer.py:595 msgid "" "Your changes have been saved. We've sent you an email with a link to update " "your email address. The email address of your account will be changed as " "soon as you click that link." msgstr "" -#: pretix/presale/views/customer.py:646 +#: pretix/presale/views/customer.py:648 msgid "" "Your email address has not been updated since the address is already in use " "for another customer account." msgstr "" -#: pretix/presale/views/customer.py:649 +#: pretix/presale/views/customer.py:651 msgid "Your email address has been updated." msgstr "" -#: pretix/presale/views/customer.py:866 pretix/presale/views/customer.py:877 +#: pretix/presale/views/customer.py:868 pretix/presale/views/customer.py:879 #, python-brace-format msgid "" "We were unable to use your login since the email address {email} is already " @@ -33550,39 +33791,39 @@ msgid "" "else." msgstr "" -#: pretix/presale/views/widget.py:423 +#: pretix/presale/views/widget.py:426 msgid "This ticket shop is currently disabled." msgstr "" -#: pretix/presale/views/widget.py:437 +#: pretix/presale/views/widget.py:440 msgid "The selected date does not exist in this event series." msgstr "" -#: pretix/presale/views/widget.py:444 +#: pretix/presale/views/widget.py:447 msgid "The selected date is not available." msgstr "" -#: pretix/presale/views/widget.py:452 +#: pretix/presale/views/widget.py:455 msgid "This is not an event series." msgstr "" -#: pretix/presale/views/widget.py:508 +#: pretix/presale/views/widget.py:511 #, python-format msgid "from %(start_date)s" msgstr "" -#: pretix/settings.py:862 +#: pretix/settings.py:863 msgid "User profile only" msgstr "" -#: pretix/settings.py:863 +#: pretix/settings.py:864 msgid "Read access" msgstr "" -#: pretix/settings.py:864 +#: pretix/settings.py:865 msgid "Write access" msgstr "" -#: pretix/settings.py:875 +#: pretix/settings.py:876 msgid "Kosovo" msgstr "" diff --git a/src/pretix/locale/az/LC_MESSAGES/djangojs.po b/src/pretix/locale/az/LC_MESSAGES/djangojs.po index 5f0a2d3f0..8dc4792c9 100644 --- a/src/pretix/locale/az/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/az/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-27 14:47+0000\n" +"POT-Creation-Date: 2026-06-28 14:44+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -210,8 +210,8 @@ msgid "" msgstr "" #: pretix/static/pretixbase/js/asynctask.js:135 -#: pretix/static/pretixbase/js/asynctask.js:192 -#: pretix/static/pretixbase/js/asynctask.js:196 +#: pretix/static/pretixbase/js/asynctask.js:193 +#: pretix/static/pretixbase/js/asynctask.js:197 #: pretix/static/pretixcontrol/js/ui/mail.js:24 msgid "An error of type {code} occurred." msgstr "" @@ -227,28 +227,28 @@ msgstr "" msgid "The request took too long. Please try again." msgstr "" -#: pretix/static/pretixbase/js/asynctask.js:198 +#: pretix/static/pretixbase/js/asynctask.js:199 #: pretix/static/pretixcontrol/js/ui/mail.js:26 msgid "" "We currently cannot reach the server. Please try again. Error code: {code}" msgstr "" -#: pretix/static/pretixbase/js/asynctask.js:226 +#: pretix/static/pretixbase/js/asynctask.js:227 msgid "We are processing your request …" msgstr "" -#: pretix/static/pretixbase/js/asynctask.js:229 +#: pretix/static/pretixbase/js/asynctask.js:230 msgid "" "We are currently sending your request to the server. If this takes longer " "than one minute, please check your internet connection and then reload this " "page and try again." msgstr "" -#: pretix/static/pretixbase/js/asynctask.js:286 +#: pretix/static/pretixbase/js/asynctask.js:287 msgid "If this takes longer than a few minutes, please contact us." msgstr "" -#: pretix/static/pretixbase/js/asynctask.js:341 +#: pretix/static/pretixbase/js/asynctask.js:342 msgid "Close message" msgstr "" @@ -358,23 +358,23 @@ msgstr "" msgid "Selected only" msgstr "" -#: pretix/static/pretixcontrol/js/ui/main.js:842 +#: pretix/static/pretixcontrol/js/ui/main.js:844 msgid "Enter page number between 1 and %(max)s." msgstr "" -#: pretix/static/pretixcontrol/js/ui/main.js:845 +#: pretix/static/pretixcontrol/js/ui/main.js:847 msgid "Invalid page number." msgstr "" -#: pretix/static/pretixcontrol/js/ui/main.js:1003 +#: pretix/static/pretixcontrol/js/ui/main.js:1005 msgid "Use a different name internally" msgstr "" -#: pretix/static/pretixcontrol/js/ui/main.js:1043 +#: pretix/static/pretixcontrol/js/ui/main.js:1045 msgid "Click to close" msgstr "" -#: pretix/static/pretixcontrol/js/ui/main.js:1124 +#: pretix/static/pretixcontrol/js/ui/main.js:1126 msgid "You have unsaved changes!" msgstr "" diff --git a/src/pretix/locale/ca/LC_MESSAGES/django.po b/src/pretix/locale/ca/LC_MESSAGES/django.po index 6e905657d..ecbc34436 100644 --- a/src/pretix/locale/ca/LC_MESSAGES/django.po +++ b/src/pretix/locale/ca/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-27 15:47+0000\n" +"POT-Creation-Date: 2026-06-28 14:42+0000\n" "PO-Revision-Date: 2026-06-25 14:00+0000\n" "Last-Translator: Kim Lozano \n" "Language-Team: Catalan check this option if you want to use this " "product as an add-on product, but only for fixed bundles!" msgstr "" -#: pretix/base/models/items.py:637 +#: pretix/base/models/items.py:642 msgid "" "If this is checked, the usual cancellation and order change settings of this " "event apply. If this is unchecked, orders containing this product can not be " @@ -6009,7 +6074,7 @@ msgstr "" "comandes que contenguin aquest producte no es poden cancel·lar excepte per " "vosaltres." -#: pretix/base/models/items.py:644 +#: pretix/base/models/items.py:649 msgid "" "This product can only be bought if it is added to the cart at least this " "many times. If you keep the field empty or set it to 0, there is no special " @@ -6019,7 +6084,7 @@ msgstr "" "aquesta quantitat. Si deixeu aquest camp buit o l'establiu a 0, no hi ha " "limitacions especials per a aquest producte." -#: pretix/base/models/items.py:651 +#: pretix/base/models/items.py:656 msgid "" "This product can only be bought at most this many times within one order. If " "you keep the field empty or set it to 0, there is no special limit for this " @@ -6031,7 +6096,7 @@ msgstr "" "a aquest producte. Tanmateix, s'aplicarà igualment el límit del número màxim " "d'elements a tota la comanda." -#: pretix/base/models/items.py:658 pretix/base/models/items.py:1244 +#: pretix/base/models/items.py:663 pretix/base/models/items.py:1254 msgid "" "If you set this, the check-in app will show a visible warning that this " "ticket requires special attention. You can use this for example for student " @@ -6043,13 +6108,13 @@ msgstr "" "a tiquets d'estudiants per avisar a la persona que valida que ha de " "comprovar la identificació d'estudiant." -#: pretix/base/models/items.py:665 pretix/base/models/items.py:1251 +#: pretix/base/models/items.py:670 pretix/base/models/items.py:1261 msgid "" "This text will be shown by the check-in app if a ticket of this type is " "scanned." msgstr "" -#: pretix/base/models/items.py:671 pretix/base/models/items.py:1172 +#: pretix/base/models/items.py:676 pretix/base/models/items.py:1182 msgid "" "If set, this will be displayed next to the current price to show that the " "current price is a discounted one. This is just a cosmetic setting and will " @@ -6059,13 +6124,13 @@ msgstr "" "és un descompte. Això és una configuració cosmètica i no afectarà realment " "al preu." -#: pretix/base/models/items.py:681 +#: pretix/base/models/items.py:686 #, fuzzy #| msgid "Only sell tickets for this event on the following sales channels." msgid "Only sell tickets for this product on the selected sales channels." msgstr "Vendre només tiquets per aquest acte als canals de venda següents." -#: pretix/base/models/items.py:686 +#: pretix/base/models/items.py:691 msgid "" "When a customer buys this product, they will get a gift card with a value " "corresponding to the product price." @@ -6073,41 +6138,41 @@ msgstr "" "Quan un client compra aquest producte, rebrà un val regal amb un valor " "equivalent al preu del producte." -#: pretix/base/models/items.py:696 +#: pretix/base/models/items.py:701 msgid "Allowed membership types" msgstr "" -#: pretix/base/models/items.py:701 pretix/base/models/items.py:1200 +#: pretix/base/models/items.py:706 pretix/base/models/items.py:1210 msgid "" "Do not show this unless the customer is logged in and has a valid " "membership. Be aware that this means it will never be visible in the widget." msgstr "" -#: pretix/base/models/items.py:710 +#: pretix/base/models/items.py:715 msgid "This product creates a membership of type" msgstr "" -#: pretix/base/models/items.py:713 +#: pretix/base/models/items.py:718 msgid "" "The duration of the membership is the same as the duration of the event or " "event series date" msgstr "" -#: pretix/base/models/items.py:717 +#: pretix/base/models/items.py:722 msgid "Membership duration in days" msgstr "" -#: pretix/base/models/items.py:721 +#: pretix/base/models/items.py:726 msgid "Membership duration in months" msgstr "" -#: pretix/base/models/items.py:728 +#: pretix/base/models/items.py:733 #, fuzzy #| msgid "Valid until" msgid "Validity" msgstr "Vàlid fins" -#: pretix/base/models/items.py:730 +#: pretix/base/models/items.py:735 msgid "" "When setting up a regular event, or an event series with time slots, you " "typically do NOT need to change this value. The default setting means that " @@ -6119,65 +6184,65 @@ msgid "" "change but keep their current validity." msgstr "" -#: pretix/base/models/items.py:738 pretix/control/forms/item.py:794 +#: pretix/base/models/items.py:743 pretix/control/forms/item.py:794 #, fuzzy #| msgid "Gift card" msgid "Start of validity" msgstr "Targeta regal" -#: pretix/base/models/items.py:739 +#: pretix/base/models/items.py:744 #, fuzzy #| msgid "End of presale" msgid "End of validity" msgstr "Fi de la prevenda" -#: pretix/base/models/items.py:742 +#: pretix/base/models/items.py:747 #, fuzzy #| msgid "in minutes" msgid "Minutes" msgstr "en minuts" -#: pretix/base/models/items.py:746 +#: pretix/base/models/items.py:751 msgid "Hours" msgstr "" -#: pretix/base/models/items.py:750 +#: pretix/base/models/items.py:755 msgid "Days" msgstr "" -#: pretix/base/models/items.py:754 +#: pretix/base/models/items.py:759 #, fuzzy #| msgid "Month" msgid "Months" msgstr "Mes" -#: pretix/base/models/items.py:757 +#: pretix/base/models/items.py:762 #, fuzzy #| msgid "Customers can cancel their paid orders" msgid "Customers can select the validity start date" msgstr "Els clients poden cancel·lar les seves comandes pagades" -#: pretix/base/models/items.py:758 +#: pretix/base/models/items.py:763 msgid "If not selected, the validity always starts at the time of purchase." msgstr "" -#: pretix/base/models/items.py:763 +#: pretix/base/models/items.py:768 #, fuzzy #| msgid "Maximum order total" msgid "Maximum future start" msgstr "Total màxim de comandes" -#: pretix/base/models/items.py:764 +#: pretix/base/models/items.py:769 msgid "The selected start date may only be this many days in the future." msgstr "" -#: pretix/base/models/items.py:770 +#: pretix/base/models/items.py:775 msgid "Reusable media policy" msgstr "" -#: pretix/base/models/items.py:772 +#: pretix/base/models/items.py:777 msgid "" -"If this product should be stored on a re-usable physical medium, you can " +"If this product should be stored on a reusable physical medium, you can " "attach a physical media policy. This is not required for regular tickets, " "which just use a one-time barcode, but only for products like renewable " "season tickets or re-chargeable gift card wristbands. This is an advanced " @@ -6185,82 +6250,89 @@ msgid "" "settings." msgstr "" -#: pretix/base/models/items.py:782 +#: pretix/base/models/items.py:787 msgid "Reusable media type" msgstr "" -#: pretix/base/models/items.py:784 +#: pretix/base/models/items.py:789 msgid "" "Select the type of physical medium that should be used for this product. " "Note that not all media types support all types of products, and not all " "media types are supported across all sales channels or check-in processes." msgstr "" -#: pretix/base/models/items.py:989 +#: pretix/base/models/items.py:994 msgid "" "If you select a reusable media policy, you also need to select a reusable " "media type." msgstr "" -#: pretix/base/models/items.py:993 +#: pretix/base/models/items.py:998 #, fuzzy #| msgid "The selected product is not active or has no price set." msgid "The selected media type is not enabled in your organizer settings." msgstr "El producte seleccionat no està actiu o no te cap preu establert." -#: pretix/base/models/items.py:995 +#: pretix/base/models/items.py:1000 #, fuzzy #| msgid "The selected item does not belong to this event." msgid "The selected media type does not support usage for tickets currently." msgstr "L'element seleccionat no pertany a aquest esdeveniment." -#: pretix/base/models/items.py:997 +#: pretix/base/models/items.py:1002 #, fuzzy #| msgid "The selected item does not belong to this event." msgid "" "The selected media type does not support usage for gift cards currently." msgstr "L'element seleccionat no pertany a aquest esdeveniment." -#: pretix/base/models/items.py:999 +#: pretix/base/models/items.py:1005 +msgid "" +"The selected media type requires all media to be registered in the system " +"prior to their usage. Therefore, the selected media policy does not make " +"sense for this media type." +msgstr "" + +#: pretix/base/models/items.py:1009 msgid "" "You currently cannot create gift cards with a reusable media policy. " "Instead, gift cards for some reusable media types can be created or re-" "charged directly at the POS." msgstr "" -#: pretix/base/models/items.py:1007 +#: pretix/base/models/items.py:1017 msgid "" "The maximum number per order can not be lower than the minimum number per " "order." msgstr "" "El número màxim per comanda no pot ser menor que el número mínim per comanda." -#: pretix/base/models/items.py:1013 +#: pretix/base/models/items.py:1023 msgid "The item's category must belong to the same event as the item." msgstr "" "La categoria d'elements ha de pertànyer al mateix esdeveniment que l'element." -#: pretix/base/models/items.py:1018 +#: pretix/base/models/items.py:1028 msgid "The item's tax rule must belong to the same event as the item." msgstr "" "La regla d'impost de l'element ha de pertànyer al mateix esdeveniment que " "l'element." -#: pretix/base/models/items.py:1024 +#: pretix/base/models/items.py:1034 msgid "The item's availability cannot end before it starts." msgstr "La disponibilitat de l'element no pot acabar abans que comenci." -#: pretix/base/models/items.py:1156 +#: pretix/base/models/items.py:1166 msgid "This is shown below the variation name in lists." msgstr "Això es mostra davall del nom de la variació a les llistes." -#: pretix/base/models/items.py:1183 +#: pretix/base/models/items.py:1193 #, fuzzy #| msgid "New order requires approval" msgid "Require approval" msgstr "La nova comanda requereix aprovació" -#: pretix/base/models/items.py:1185 +#: pretix/base/models/items.py:1195 #, fuzzy #| msgid "" #| "If this product is part of an order, the order will be put into an " @@ -6278,7 +6350,7 @@ msgstr "" "completat. Podeu utilitzar això per exemple per a tiquets de descompte que " "només estan disponibles a groups específics." -#: pretix/base/models/items.py:1195 pretix/control/navigation.py:618 +#: pretix/base/models/items.py:1205 pretix/control/navigation.py:618 #: pretix/control/templates/pretixcontrol/organizers/membershiptypes.html:4 #: pretix/control/templates/pretixcontrol/organizers/membershiptypes.html:6 #, fuzzy @@ -6286,30 +6358,30 @@ msgstr "" msgid "Membership types" msgstr "Membres" -#: pretix/base/models/items.py:1207 +#: pretix/base/models/items.py:1217 #, fuzzy #| msgid "This product will not be sold before the given date." msgid "This variation will not be sold before the given date." msgstr "Aquest producte no es vendrà abans de la data especificada." -#: pretix/base/models/items.py:1217 +#: pretix/base/models/items.py:1227 #, fuzzy #| msgid "This product will not be sold after the given date." msgid "This variation will not be sold after the given date." msgstr "Aquest producte no es vendrà després de la data especificada." -#: pretix/base/models/items.py:1225 +#: pretix/base/models/items.py:1235 msgid "Sell on all sales channels the product is sold on" msgstr "" -#: pretix/base/models/items.py:1231 +#: pretix/base/models/items.py:1241 msgid "" "The sales channel selection for the product as a whole takes precedence, so " "if a sales channel is selected here but not on product level, the variation " "will not be available." msgstr "" -#: pretix/base/models/items.py:1236 +#: pretix/base/models/items.py:1246 #, fuzzy #| msgid "" #| "This product will only be shown if a voucher matching the product is " @@ -6319,7 +6391,7 @@ msgstr "" "Aquest producte només es mostrarà si s'ha bescanviat un val coincident amb " "el producte." -#: pretix/base/models/items.py:1238 +#: pretix/base/models/items.py:1248 #, fuzzy #| msgid "" #| "This product will be hidden from the event page until the user enters a " @@ -6331,24 +6403,24 @@ msgstr "" "Aquest producte romandrà ocult de la pàgina d'esdeveniments fins que " "l'usuari introdueixi un codi de val que el desbloquegi." -#: pretix/base/models/items.py:1258 +#: pretix/base/models/items.py:1268 #: pretix/control/templates/pretixcontrol/item/create.html:111 msgid "Product variations" msgstr "Variacions del producte" -#: pretix/base/models/items.py:1463 +#: pretix/base/models/items.py:1473 msgid "Minimum number" msgstr "Número mínim" -#: pretix/base/models/items.py:1467 +#: pretix/base/models/items.py:1477 msgid "Maximum number" msgstr "Número màxim" -#: pretix/base/models/items.py:1471 +#: pretix/base/models/items.py:1481 msgid "Add-Ons are included in the price" msgstr "Els complements s'inclouen al preu" -#: pretix/base/models/items.py:1472 +#: pretix/base/models/items.py:1482 msgid "" "If selected, adding add-ons to this ticket is free, even if the add-ons " "would normally cost money individually." @@ -6356,45 +6428,45 @@ msgstr "" "Si es selecciona, afegir complement a aquest tiquet és gratuït, fins i tot " "si els complement normalment tenen un cost individual." -#: pretix/base/models/items.py:1477 +#: pretix/base/models/items.py:1487 msgid "Allow the same product to be selected multiple times" msgstr "Permetre triar el mateix producte diverses vegades" -#: pretix/base/models/items.py:1496 +#: pretix/base/models/items.py:1506 msgid "The add-on's category must belong to the same event as the item." msgstr "" "La categoria de complements ha de pertànyer al mateix esdeveniment que " "l'element." -#: pretix/base/models/items.py:1501 +#: pretix/base/models/items.py:1511 msgid "The item already has an add-on of this category." msgstr "L'element ja té un complement d'aquesta categoria." -#: pretix/base/models/items.py:1506 +#: pretix/base/models/items.py:1516 msgid "The minimum count needs to be equal to or greater than zero." msgstr "El recompte mínim ha de ser igual o major que zero." -#: pretix/base/models/items.py:1511 +#: pretix/base/models/items.py:1521 msgid "The maximum count needs to be equal to or greater than zero." msgstr "El recompte màxim ha de ser igual o major que zero." -#: pretix/base/models/items.py:1516 +#: pretix/base/models/items.py:1526 msgid "The maximum count needs to be greater than the minimum count." msgstr "El recompte màxim ha de ser major que el recompte mínim." -#: pretix/base/models/items.py:1543 +#: pretix/base/models/items.py:1553 msgid "Bundled item" msgstr "Element de paquet" -#: pretix/base/models/items.py:1549 +#: pretix/base/models/items.py:1559 msgid "Bundled variation" msgstr "Variació de paquet" -#: pretix/base/models/items.py:1560 +#: pretix/base/models/items.py:1570 msgid "Designated price part" msgstr "Part de preu designat" -#: pretix/base/models/items.py:1561 +#: pretix/base/models/items.py:1571 msgid "" "If set, it will be shown that this bundled item is responsible for the given " "value of the total gross price. This might be important in cases of mixed " @@ -6406,61 +6478,61 @@ msgstr "" "de fiscalització mixta, però es pot deixar en blanc en altres casos. Aquest " "valor NO s'afegirà a la base del preu de l'element." -#: pretix/base/models/items.py:1584 +#: pretix/base/models/items.py:1594 msgid "The bundled item must belong to the same event as the item." msgstr "" "L'element del paquet ha de pertànyer al mateix esdeveniment que l'element." -#: pretix/base/models/items.py:1586 +#: pretix/base/models/items.py:1596 msgid "A variation needs to be set for this item." msgstr "S'ha d'establir una variació per a aquest element." -#: pretix/base/models/items.py:1588 +#: pretix/base/models/items.py:1598 msgid "The chosen variation does not belong to this item." msgstr "La variació triada no pertany a aquest element." -#: pretix/base/models/items.py:1593 +#: pretix/base/models/items.py:1603 msgid "The count needs to be equal to or greater than zero." msgstr "El recompte ha de ser igual o major que zero." -#: pretix/base/models/items.py:1648 +#: pretix/base/models/items.py:1658 msgid "Number" msgstr "Número" -#: pretix/base/models/items.py:1649 +#: pretix/base/models/items.py:1659 msgid "Text (one line)" msgstr "Text (una línia)" -#: pretix/base/models/items.py:1650 +#: pretix/base/models/items.py:1660 msgid "Multiline text" msgstr "Text multi-línia" -#: pretix/base/models/items.py:1651 +#: pretix/base/models/items.py:1661 msgid "Yes/No" msgstr "Si/No" -#: pretix/base/models/items.py:1652 +#: pretix/base/models/items.py:1662 msgid "Choose one from a list" msgstr "Triau-ne un de la llista" -#: pretix/base/models/items.py:1653 +#: pretix/base/models/items.py:1663 msgid "Choose multiple from a list" msgstr "Triau-ne varis de la llista" -#: pretix/base/models/items.py:1654 +#: pretix/base/models/items.py:1664 msgid "File upload" msgstr "Pujada de fitxer" -#: pretix/base/models/items.py:1657 +#: pretix/base/models/items.py:1667 #: pretix/control/templates/pretixcontrol/event/settings.html:240 msgid "Date and time" msgstr "Dia i hora" -#: pretix/base/models/items.py:1658 +#: pretix/base/models/items.py:1668 msgid "Country code (ISO 3166-1 alpha-2)" msgstr "Codi de país (ISO 3166-1 alpha-2)" -#: pretix/base/models/items.py:1681 pretix/base/models/items.py:1957 +#: pretix/base/models/items.py:1691 pretix/base/models/items.py:1967 #: pretix/base/models/organizer.py:654 #, fuzzy #| msgid "The property name may only contain letters, numbers and underscores." @@ -6470,142 +6542,142 @@ msgid "" msgstr "" "El nom de la propietat només pot tenir lletres, números i guions baixos." -#: pretix/base/models/items.py:1686 +#: pretix/base/models/items.py:1696 msgid "Help text" msgstr "Text d'ajuda" -#: pretix/base/models/items.py:1687 +#: pretix/base/models/items.py:1697 msgid "If the question needs to be explained or clarified, do it here!" msgstr "Si la pregunta necessita ser explicada o aclarida, feu-ho aquí!" -#: pretix/base/models/items.py:1693 +#: pretix/base/models/items.py:1703 msgid "Question type" msgstr "Tipus de pregunta" -#: pretix/base/models/items.py:1697 +#: pretix/base/models/items.py:1707 #: pretix/control/templates/pretixcontrol/items/questions.html:59 msgid "Required question" msgstr "Pregunta obligatòria" -#: pretix/base/models/items.py:1704 +#: pretix/base/models/items.py:1714 msgid "This question will be asked to buyers of the selected products" msgstr "" "Aquesta pregunta es demanarà als compradors dels productes seleccionats" -#: pretix/base/models/items.py:1711 +#: pretix/base/models/items.py:1721 msgid "Ask during check-in instead of in the ticket buying process" msgstr "" "Demana durant la validació enlloc de durant el procés de compra del tiquet" -#: pretix/base/models/items.py:1712 pretix/base/models/items.py:1717 +#: pretix/base/models/items.py:1722 pretix/base/models/items.py:1727 msgid "Not supported by all check-in apps for all question types." msgstr "" -#: pretix/base/models/items.py:1716 +#: pretix/base/models/items.py:1726 msgid "Show answer during check-in" msgstr "" -#: pretix/base/models/items.py:1721 +#: pretix/base/models/items.py:1731 #: pretix/control/templates/pretixcontrol/items/questions.html:70 msgid "Hidden question" msgstr "Pregunta oculta" -#: pretix/base/models/items.py:1722 +#: pretix/base/models/items.py:1732 #, fuzzy #| msgid "This question will be asked to buyers of the selected products" msgid "This question will only show up in the backend." msgstr "Aquesta pregunta només es mostrarà a la rebotiga." -#: pretix/base/models/items.py:1726 +#: pretix/base/models/items.py:1736 msgid "Print answer on invoices" msgstr "Mostra la resposta a les factures" -#: pretix/base/models/items.py:1734 pretix/base/models/items.py:1740 -#: pretix/base/models/items.py:1746 +#: pretix/base/models/items.py:1744 pretix/base/models/items.py:1750 +#: pretix/base/models/items.py:1756 msgid "Minimum value" msgstr "Valor mínim" -#: pretix/base/models/items.py:1735 pretix/base/models/items.py:1738 -#: pretix/base/models/items.py:1741 pretix/base/models/items.py:1744 -#: pretix/base/models/items.py:1747 pretix/base/models/items.py:1750 -#: pretix/base/models/items.py:1754 +#: pretix/base/models/items.py:1745 pretix/base/models/items.py:1748 +#: pretix/base/models/items.py:1751 pretix/base/models/items.py:1754 +#: pretix/base/models/items.py:1757 pretix/base/models/items.py:1760 +#: pretix/base/models/items.py:1764 msgid "Currently not supported in our apps and during check-in" msgstr "Actualment no suportat a les nostres apps i durant el check-in" -#: pretix/base/models/items.py:1737 pretix/base/models/items.py:1743 -#: pretix/base/models/items.py:1749 +#: pretix/base/models/items.py:1747 pretix/base/models/items.py:1753 +#: pretix/base/models/items.py:1759 msgid "Maximum value" msgstr "Valor màxim" -#: pretix/base/models/items.py:1752 +#: pretix/base/models/items.py:1762 #, fuzzy #| msgid "Maximum value" msgid "Maximum length" msgstr "Valor màxim" -#: pretix/base/models/items.py:1758 +#: pretix/base/models/items.py:1768 msgid "Validate file to be a portrait" msgstr "" -#: pretix/base/models/items.py:1759 +#: pretix/base/models/items.py:1769 msgid "" "If checked, files must be images with an aspect ratio of 3:4. This is " "commonly used for photos printed on badges." msgstr "" -#: pretix/base/models/items.py:1814 +#: pretix/base/models/items.py:1824 msgid "An answer to this question is required to proceed." msgstr "Es requereix una resposta a aquesta pregunta per poder continuar." -#: pretix/base/models/items.py:1824 +#: pretix/base/models/items.py:1834 #, fuzzy #| msgid "Invalid input data." msgid "Invalid input type." msgstr "Dades d'entrada no vàlides." -#: pretix/base/models/items.py:1858 +#: pretix/base/models/items.py:1868 msgid "The number is to low." msgstr "El número és massa petit." -#: pretix/base/models/items.py:1860 +#: pretix/base/models/items.py:1870 msgid "The number is to high." msgstr "El número és massa gran." -#: pretix/base/models/items.py:1863 +#: pretix/base/models/items.py:1873 msgid "Invalid number input." msgstr "Entrada de número incorrecte." -#: pretix/base/models/items.py:1870 pretix/base/models/items.py:1894 +#: pretix/base/models/items.py:1880 pretix/base/models/items.py:1904 msgid "Please choose a later date." msgstr "Si us plau, trieu una data posterior." -#: pretix/base/models/items.py:1872 pretix/base/models/items.py:1896 +#: pretix/base/models/items.py:1882 pretix/base/models/items.py:1906 msgid "Please choose an earlier date." msgstr "Si us plau, trieu una data anterior." -#: pretix/base/models/items.py:1875 +#: pretix/base/models/items.py:1885 msgid "Invalid date input." msgstr "Entrada de data incorrecta." -#: pretix/base/models/items.py:1882 +#: pretix/base/models/items.py:1892 msgid "Invalid time input." msgstr "Entrada d'hora incorrecta." -#: pretix/base/models/items.py:1891 +#: pretix/base/models/items.py:1901 msgid "Invalid datetime input." msgstr "Entrada de dia i hora incorrecta." -#: pretix/base/models/items.py:1903 +#: pretix/base/models/items.py:1913 msgid "Unknown country code." msgstr "Codi d'estat desconegut." -#: pretix/base/models/items.py:1921 pretix/base/models/items.py:1923 +#: pretix/base/models/items.py:1931 pretix/base/models/items.py:1933 #, fuzzy #| msgid "The maximum count needs to be greater than the minimum count." msgid "The maximum date must not be before the minimum value." msgstr "El recompte màxim ha de ser major que el recompte mínim." -#: pretix/base/models/items.py:1925 +#: pretix/base/models/items.py:1935 #, fuzzy #| msgid "" #| "The maximum number per order can not be lower than the minimum number per " @@ -6614,57 +6686,59 @@ msgid "The maximum value must not be lower than the minimum value." msgstr "" "El número màxim per comanda no pot ser menor que el número mínim per comanda." -#: pretix/base/models/items.py:1943 +#: pretix/base/models/items.py:1953 msgid "" "The system already contains answers to this question that are not compatible " "with changing the type of question without data loss. Consider hiding this " "question and creating a new one instead." msgstr "" -#: pretix/base/models/items.py:1961 +#: pretix/base/models/items.py:1971 #: pretix/control/templates/pretixcontrol/items/question.html:87 msgid "Answer" msgstr "Resposta" -#: pretix/base/models/items.py:1985 +#: pretix/base/models/items.py:1995 #, python-brace-format msgid "The identifier \"{}\" is already used for a different option." msgstr "Ja s'utilitza l'identificador \"{}\" a una altra opció." -#: pretix/base/models/items.py:1988 +#: pretix/base/models/items.py:1998 msgid "Question option" msgstr "Opció de pregunta" -#: pretix/base/models/items.py:1989 +#: pretix/base/models/items.py:1999 msgid "Question options" msgstr "Opcions de preguntes" -#: pretix/base/models/items.py:2074 pretix/control/forms/event.py:1903 +#: pretix/base/models/items.py:2084 pretix/control/forms/event.py:1903 #: pretix/control/templates/pretixcontrol/items/quotas.html:104 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:83 msgid "Total capacity" msgstr "Capacitat total" -#: pretix/base/models/items.py:2076 pretix/control/forms/item.py:512 +#: pretix/base/models/items.py:2086 pretix/control/forms/item.py:512 msgid "Leave empty for an unlimited number of tickets." msgstr "Deixeu-ho buit per a un número de tiquets il·limitat." -#: pretix/base/models/items.py:2080 pretix/base/models/orders.py:1494 -#: pretix/base/models/orders.py:3033 +#: pretix/base/models/items.py:2090 pretix/base/models/orders.py:1516 +#: pretix/base/models/orders.py:3055 #: pretix/control/templates/pretixcontrol/checkin/index.html:97 msgid "Item" msgstr "Element" -#: pretix/base/models/items.py:2088 pretix/control/forms/item.py:973 +#: pretix/base/models/items.py:2098 pretix/control/forms/item.py:973 #: pretix/plugins/autocheckin/models.py:74 msgid "Variations" msgstr "Variacions" -#: pretix/base/models/items.py:2092 +#: pretix/base/models/items.py:2102 #: pretix/control/templates/pretixcontrol/items/quotas.html:135 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:96 msgid "Ignore this quota when determining event availability" msgstr "Ignorar aquesta quota quan es determini la disponibilitat de l'acte" -#: pretix/base/models/items.py:2093 +#: pretix/base/models/items.py:2103 msgid "" "If you enable this, this quota will be ignored when determining event " "availability in your event calendar. This is useful e.g. for merchandise " @@ -6676,22 +6750,22 @@ msgstr "" "merchandising que s'afegeixi a l'acte però que no hagi d'impedir que l'acte " "aparegui com a exhaurit." -#: pretix/base/models/items.py:2100 +#: pretix/base/models/items.py:2110 msgid "Close this quota permanently once it is sold out" msgstr "Tancar aquesta quota permanentment un cop s'hagi exhaurit" -#: pretix/base/models/items.py:2101 +#: pretix/base/models/items.py:2111 msgid "" "If you enable this, when the quota is sold out once, no more tickets will be " "sold, even if tickets become available again through cancellations or " "expiring orders. Of course, you can always re-open it manually." msgstr "" -#: pretix/base/models/items.py:2109 +#: pretix/base/models/items.py:2119 msgid "Allow to sell more tickets once people have checked out" msgstr "Permetre vendre més tiquets un cop la gent hagi sortit de l'acte" -#: pretix/base/models/items.py:2110 +#: pretix/base/models/items.py:2120 msgid "" "With this option, quota will be released as soon as people are scanned at an " "exit of your event. This will only happen if they have been scanned both at " @@ -6701,22 +6775,23 @@ msgid "" "prevent accidental overbooking." msgstr "" -#: pretix/base/models/items.py:2122 pretix/control/navigation.py:169 +#: pretix/base/models/items.py:2132 pretix/control/navigation.py:169 #: pretix/control/templates/pretixcontrol/items/quotas.html:5 #: pretix/control/templates/pretixcontrol/items/quotas.html:7 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:418 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:185 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:59 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:76 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:59 msgid "Quotas" msgstr "Quotes" -#: pretix/base/models/items.py:2195 +#: pretix/base/models/items.py:2205 msgid "All variations must belong to an item contained in the items list." msgstr "" "Totes les variacions han de pertànyer a un element inclòs dins la llista " "d'elements." -#: pretix/base/models/items.py:2206 +#: pretix/base/models/items.py:2216 msgid "" "One or more items has variations but none of these are in the variations " "list." @@ -6724,23 +6799,23 @@ msgstr "" "Un o més elements té variacions però cap d'aquestes es troba dins la llista " "de variacions." -#: pretix/base/models/items.py:2212 pretix/base/models/waitinglist.py:304 +#: pretix/base/models/items.py:2222 pretix/base/models/waitinglist.py:304 msgid "Subevent cannot be null for event series." msgstr "El sub-esdeveniment no pot ser buit per a sèries d'esdeveniments." -#: pretix/base/models/items.py:2248 +#: pretix/base/models/items.py:2258 #, fuzzy #| msgid "Refund order" msgid "Required for products" msgstr "Reemborsar comanda" -#: pretix/base/models/items.py:2249 +#: pretix/base/models/items.py:2259 msgid "" "If checked, this property must be set in each product. Does not apply if a " "default value is set." msgstr "" -#: pretix/base/models/items.py:2254 +#: pretix/base/models/items.py:2264 msgid "" "If you keep this empty, any value is allowed. Otherwise, enter one possible " "value per line." @@ -6748,13 +6823,13 @@ msgstr "" "Si ho deixeu buit, es permet qualsevol valor. Altrament, poseu un valor " "permès a cada línia." -#: pretix/base/models/items.py:2313 +#: pretix/base/models/items.py:2323 #, fuzzy #| msgid "Start date" msgid "Start" msgstr "Data d'inici" -#: pretix/base/models/items.py:2314 +#: pretix/base/models/items.py:2324 #: pretix/plugins/reports/accountingreport.py:129 msgid "End" msgstr "" @@ -6803,6 +6878,29 @@ msgstr "Finalització de la prevenda" msgid "bounced" msgstr "" +#: pretix/base/models/media.py:77 +msgctxt "reusable_medium" +msgid "Claim token" +msgstr "" + +#: pretix/base/models/media.py:82 +msgctxt "reusable_medium" +msgid "Label" +msgstr "" + +#: pretix/base/models/media.py:105 +#, fuzzy +#| msgid "Guidance text" +msgid "Linked tickets" +msgstr "Text de guia" + +#: pretix/base/models/media.py:107 +msgid "" +"If you link to more than one ticket, make sure there is no overlap in " +"validity. If multiple tickets are valid at once, this will lead to failed " +"check-ins." +msgstr "" + #: pretix/base/models/memberships.py:44 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:28 msgid "Membership is transferable" @@ -6861,8 +6959,8 @@ msgstr "pendent" msgid "paid" msgstr "pagat" -#: pretix/base/models/orders.py:203 pretix/control/forms/filter.py:1857 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:35 +#: pretix/base/models/orders.py:203 pretix/control/forms/filter.py:1863 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:47 msgid "expired" msgstr "expirat" @@ -6910,7 +7008,7 @@ msgid "" msgstr "" "Es mostrarà aquest text damunt de l'adreça de la factura durant el pagament." -#: pretix/base/models/orders.py:300 pretix/base/models/orders.py:1534 +#: pretix/base/models/orders.py:300 pretix/base/models/orders.py:1556 msgid "Meta information" msgstr "Informació meta" @@ -6920,25 +7018,25 @@ msgstr "Informació meta" msgid "API meta information" msgstr "Informació meta" -#: pretix/base/models/orders.py:418 pretix/plugins/sendmail/forms.py:236 +#: pretix/base/models/orders.py:440 pretix/plugins/sendmail/forms.py:236 #: pretix/plugins/sendmail/forms.py:389 pretix/plugins/sendmail/views.py:269 msgid "approval pending" msgstr "pendent d'aprovació" -#: pretix/base/models/orders.py:420 +#: pretix/base/models/orders.py:442 #, fuzzy #| msgid "Pending (overdue)" msgctxt "order state" msgid "pending (confirmed)" msgstr "Pendent (endarrerit)" -#: pretix/base/models/orders.py:422 +#: pretix/base/models/orders.py:444 #, fuzzy #| msgid "Canceled (paid fee)" msgid "canceled (paid fee)" msgstr "Cancel·lada (taxa pagada)" -#: pretix/base/models/orders.py:1035 +#: pretix/base/models/orders.py:1057 msgid "" "The payment can not be accepted as the last date of payments configured in " "the payment settings is over." @@ -6946,7 +7044,7 @@ msgstr "" "No es pot acceptar el pagament ja que s'ha acabat el darrer dia configurat " "com a dia de pagament." -#: pretix/base/models/orders.py:1037 +#: pretix/base/models/orders.py:1059 msgid "" "The payment can not be accepted as the order is expired and you configured " "that no late payments should be accepted in the payment settings." @@ -6955,166 +7053,166 @@ msgstr "" "a la configuració de pagaments que no es puguin acceptar pagaments amb " "retard." -#: pretix/base/models/orders.py:1039 +#: pretix/base/models/orders.py:1061 msgid "This order is not yet approved by the event organizer." msgstr "" "Aquesta comanda encara no s'ha aprovat per l'organitzador de l'esdeveniment." -#: pretix/base/models/orders.py:1064 +#: pretix/base/models/orders.py:1086 #, python-brace-format msgid "The ordered product \"{item}\" is no longer available." msgstr "El producte comanat \"{item}\" ja no està disponible." -#: pretix/base/models/orders.py:1065 +#: pretix/base/models/orders.py:1087 #, python-brace-format msgid "The seat \"{seat}\" is no longer available." msgstr "El seient \"{seat}\" ja no està disponible." -#: pretix/base/models/orders.py:1066 +#: pretix/base/models/orders.py:1088 #, python-brace-format msgid "The voucher \"{voucher}\" no longer has sufficient budget." msgstr "" -#: pretix/base/models/orders.py:1067 +#: pretix/base/models/orders.py:1089 #, python-brace-format msgid "The voucher \"{voucher}\" has been used in the meantime." msgstr "El val \"{voucher}\" ha estat usat simultàniament." -#: pretix/base/models/orders.py:1395 +#: pretix/base/models/orders.py:1417 msgid "" msgstr "" -#: pretix/base/models/orders.py:1514 pretix/base/models/orders.py:1522 +#: pretix/base/models/orders.py:1536 pretix/base/models/orders.py:1544 msgid "Empty, if this product is not an admission ticket" msgstr "Buit si aquest producte no és un tiquet d'admissió" -#: pretix/base/models/orders.py:1731 +#: pretix/base/models/orders.py:1753 msgctxt "payment_state" msgid "created" msgstr "creat" -#: pretix/base/models/orders.py:1732 +#: pretix/base/models/orders.py:1754 msgctxt "payment_state" msgid "pending" msgstr "pendent" -#: pretix/base/models/orders.py:1733 +#: pretix/base/models/orders.py:1755 msgctxt "payment_state" msgid "confirmed" msgstr "confirmat" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1756 msgctxt "payment_state" msgid "canceled" msgstr "cancel·lat" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1757 msgctxt "payment_state" msgid "failed" msgstr "fallat" -#: pretix/base/models/orders.py:1736 +#: pretix/base/models/orders.py:1758 msgctxt "payment_state" msgid "refunded" msgstr "reemborsat" -#: pretix/base/models/orders.py:1764 pretix/base/models/orders.py:2193 +#: pretix/base/models/orders.py:1786 pretix/base/models/orders.py:2215 #: pretix/base/shredder.py:637 msgid "Payment information" msgstr "Dades de pagament" -#: pretix/base/models/orders.py:2134 +#: pretix/base/models/orders.py:2156 msgctxt "refund_state" msgid "started externally" msgstr "s'ha iniciat externament" -#: pretix/base/models/orders.py:2135 +#: pretix/base/models/orders.py:2157 msgctxt "refund_state" msgid "created" msgstr "creat" -#: pretix/base/models/orders.py:2136 +#: pretix/base/models/orders.py:2158 msgctxt "refund_state" msgid "in transit" msgstr "en trànsit" -#: pretix/base/models/orders.py:2137 +#: pretix/base/models/orders.py:2159 msgctxt "refund_state" msgid "done" msgstr "fet" -#: pretix/base/models/orders.py:2138 +#: pretix/base/models/orders.py:2160 msgctxt "refund_state" msgid "failed" msgstr "fallat" -#: pretix/base/models/orders.py:2140 +#: pretix/base/models/orders.py:2162 msgctxt "refund_state" msgid "canceled" msgstr "cancel·lat" -#: pretix/base/models/orders.py:2148 +#: pretix/base/models/orders.py:2170 msgctxt "refund_source" msgid "Organizer" msgstr "Organitzador" -#: pretix/base/models/orders.py:2149 +#: pretix/base/models/orders.py:2171 msgctxt "refund_source" msgid "Customer" msgstr "Client" -#: pretix/base/models/orders.py:2150 +#: pretix/base/models/orders.py:2172 msgctxt "refund_source" msgid "External" msgstr "Extern" -#: pretix/base/models/orders.py:2188 +#: pretix/base/models/orders.py:2210 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:198 #, fuzzy #| msgid "Refund only" msgid "Refund reason" msgstr "Només reemborsament" -#: pretix/base/models/orders.py:2189 +#: pretix/base/models/orders.py:2211 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:199 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:201 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:2309 +#: pretix/base/models/orders.py:2331 msgid "Service fee" msgstr "Tarifa de servei" -#: pretix/base/models/orders.py:2310 +#: pretix/base/models/orders.py:2332 msgid "Payment fee" msgstr "Tarifa de pagament" -#: pretix/base/models/orders.py:2311 +#: pretix/base/models/orders.py:2333 msgid "Shipping fee" msgstr "Tarifa d'enviament" -#: pretix/base/models/orders.py:2312 +#: pretix/base/models/orders.py:2334 #: pretix/control/templates/pretixcontrol/order/index.html:190 msgid "Cancellation fee" msgstr "Tarifa de cancel·lació" -#: pretix/base/models/orders.py:2313 +#: pretix/base/models/orders.py:2335 msgid "Insurance fee" msgstr "" -#: pretix/base/models/orders.py:2314 +#: pretix/base/models/orders.py:2336 #, fuzzy #| msgid "Other fees" msgid "Late fee" msgstr "Altres tarifes" -#: pretix/base/models/orders.py:2315 +#: pretix/base/models/orders.py:2337 msgid "Other fees" msgstr "Altres tarifes" -#: pretix/base/models/orders.py:2316 pretix/base/payment.py:1379 -#: pretix/base/payment.py:1455 pretix/base/settings.py:1101 +#: pretix/base/models/orders.py:2338 pretix/base/payment.py:1379 +#: pretix/base/payment.py:1455 pretix/base/settings.py:1114 #: pretix/control/templates/pretixcontrol/items/index.html:117 #: pretix/control/templates/pretixcontrol/order/index.html:185 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:383 @@ -7123,7 +7221,7 @@ msgstr "Altres tarifes" msgid "Gift card" msgstr "Targeta regal" -#: pretix/base/models/orders.py:2321 +#: pretix/base/models/orders.py:2343 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:84 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:126 #: pretix/control/views/vouchers.py:121 @@ -7131,62 +7229,62 @@ msgstr "Targeta regal" msgid "Value" msgstr "Valor" -#: pretix/base/models/orders.py:2602 +#: pretix/base/models/orders.py:2624 msgid "Order position" msgstr "Posició de la comanda" -#: pretix/base/models/orders.py:3157 +#: pretix/base/models/orders.py:3179 msgid "Cart ID (e.g. session key)" msgstr "Identificador del carretó (ex. clau de sessió)" -#: pretix/base/models/orders.py:3168 +#: pretix/base/models/orders.py:3190 #, fuzzy #| msgid "Expiration date" msgid "Limit for extending expiration date" msgstr "Data d'expiració" -#: pretix/base/models/orders.py:3204 +#: pretix/base/models/orders.py:3226 msgid "Cart position" msgstr "Posició del carretó" -#: pretix/base/models/orders.py:3205 +#: pretix/base/models/orders.py:3227 msgid "Cart positions" msgstr "Posicions del carretó" -#: pretix/base/models/orders.py:3347 +#: pretix/base/models/orders.py:3369 msgid "Business customer" msgstr "Client comercial" -#: pretix/base/models/orders.py:3363 +#: pretix/base/models/orders.py:3385 msgid "This reference will be printed on your invoice for your convenience." msgstr "" "S'imprimirà aquesta referència dins la factura per a la vostra conveniència." -#: pretix/base/models/orders.py:3489 +#: pretix/base/models/orders.py:3511 #, fuzzy #| msgid "Variations" msgid "Transmission type" msgstr "Variacions" -#: pretix/base/models/orders.py:3580 +#: pretix/base/models/orders.py:3602 #: pretix/plugins/badges/templates/pretixplugins/badges/control_order_position_buttons.html:9 msgid "Badge" msgstr "Targes d'identificació" -#: pretix/base/models/orders.py:3581 pretix/base/pdf.py:1157 +#: pretix/base/models/orders.py:3603 pretix/base/pdf.py:1162 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:66 #: pretix/plugins/ticketoutputpdf/ticketoutput.py:114 msgid "Ticket" msgstr "Tiquet" -#: pretix/base/models/orders.py:3582 +#: pretix/base/models/orders.py:3604 #, fuzzy #| msgid "Verification failed" msgid "Certificate" msgstr "Ha fallat la verificació" -#: pretix/base/models/orders.py:3583 pretix/control/views/event.py:401 -#: pretix/control/views/event.py:406 pretix/control/views/organizer.py:653 +#: pretix/base/models/orders.py:3605 pretix/control/views/event.py:402 +#: pretix/control/views/event.py:407 pretix/control/views/organizer.py:653 #: pretix/control/views/organizer.py:658 #, fuzzy #| msgid "Other fees" @@ -7238,7 +7336,7 @@ msgid "All event permissions" msgstr "Admissió de l'esdeveniment" #: pretix/base/models/organizer.py:385 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:34 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:47 msgid "Event permissions" msgstr "" @@ -7249,7 +7347,7 @@ msgid "All organizer permissions" msgstr "Tots els organitzadors" #: pretix/base/models/organizer.py:387 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:25 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:26 msgid "Organizer permissions" msgstr "" @@ -7288,7 +7386,7 @@ msgid "Type" msgstr "" #: pretix/base/models/seating.py:46 pretix/base/models/tax.py:306 -#: pretix/base/pdf.py:1336 +#: pretix/base/pdf.py:1341 msgid "Your layout file is not a valid JSON file." msgstr "" @@ -7307,12 +7405,12 @@ msgstr "" msgid "Multiple seats have the same ID: {id}" msgstr "" -#: pretix/base/models/seating.py:200 +#: pretix/base/models/seating.py:203 #, python-brace-format msgid "Row {number}" msgstr "Fila {number}" -#: pretix/base/models/seating.py:205 +#: pretix/base/models/seating.py:208 #, python-brace-format msgid "Seat {number}" msgstr "Seient {number}" @@ -8272,7 +8370,7 @@ msgstr "" msgid "Offsetting" msgstr "Desplaçament" -#: pretix/base/payment.py:1339 pretix/control/views/orders.py:1252 +#: pretix/base/payment.py:1339 pretix/control/views/orders.py:1266 msgid "You entered an order that could not be found." msgstr "Heu introduït una comanda que no es pot trobar." @@ -8314,7 +8412,7 @@ msgid "Product name" msgstr "Nom del producte" #: pretix/base/pdf.py:124 pretix/base/services/tickets.py:98 -#: pretix/control/views/event.py:941 pretix/control/views/pdf.py:96 +#: pretix/control/views/event.py:942 pretix/control/views/pdf.py:96 msgid "Sample product" msgstr "Producte de mostra" @@ -8331,7 +8429,7 @@ msgid "Product description" msgstr "Descripció del producte" #: pretix/base/pdf.py:134 pretix/base/services/tickets.py:99 -#: pretix/control/views/event.py:942 pretix/control/views/pdf.py:97 +#: pretix/control/views/event.py:943 pretix/control/views/pdf.py:97 msgid "Sample product description" msgstr "Descripció del producte de mostra" @@ -8380,7 +8478,7 @@ msgstr "Preu incloent complements" #: pretix/base/services/placeholders.py:604 #: pretix/base/services/placeholders.py:689 #: pretix/base/services/placeholders.py:705 -#: pretix/base/services/placeholders.py:714 pretix/control/views/event.py:943 +#: pretix/base/services/placeholders.py:714 pretix/control/views/event.py:944 msgid "John Doe" msgstr "Joan Pons" @@ -8465,9 +8563,9 @@ msgstr "31-05-2017 20:00" msgid "Event begin date" msgstr "Data de l'inici de l'esdeveniment" -#: pretix/base/pdf.py:264 pretix/base/pdf.py:290 pretix/base/pdf.py:406 -#: pretix/base/pdf.py:430 pretix/base/pdf.py:454 pretix/base/pdf.py:478 -#: pretix/base/pdf.py:541 pretix/base/pdf.py:546 +#: pretix/base/pdf.py:264 pretix/base/pdf.py:290 pretix/base/pdf.py:411 +#: pretix/base/pdf.py:435 pretix/base/pdf.py:459 pretix/base/pdf.py:483 +#: pretix/base/pdf.py:546 pretix/base/pdf.py:551 msgid "2017-05-31" msgstr "31-05-2017" @@ -8486,8 +8584,8 @@ msgid "Event begin weekday" msgstr "Data de l'inici de l'esdeveniment" #: pretix/base/pdf.py:277 pretix/base/pdf.py:306 -#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1399 -#: pretix/control/forms/filter.py:1577 +#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1405 +#: pretix/control/forms/filter.py:1583 msgid "Friday" msgstr "Divendres" @@ -8513,8 +8611,8 @@ msgstr "Data de finalització de l'esdeveniment" msgid "Event admission date and time" msgstr "Dia i hora de l'admissió de l'esdeveniment" -#: pretix/base/pdf.py:311 pretix/base/pdf.py:414 pretix/base/pdf.py:438 -#: pretix/base/pdf.py:462 pretix/base/pdf.py:486 pretix/base/pdf.py:535 +#: pretix/base/pdf.py:311 pretix/base/pdf.py:419 pretix/base/pdf.py:443 +#: pretix/base/pdf.py:467 pretix/base/pdf.py:491 pretix/base/pdf.py:540 msgid "2017-05-31 19:00" msgstr "31-05-2017 19:00" @@ -8522,8 +8620,8 @@ msgstr "31-05-2017 19:00" msgid "Event admission time" msgstr "Hora de l'admissió de l'esdeveniment" -#: pretix/base/pdf.py:319 pretix/base/pdf.py:422 pretix/base/pdf.py:446 -#: pretix/base/pdf.py:470 pretix/base/pdf.py:494 +#: pretix/base/pdf.py:319 pretix/base/pdf.py:427 pretix/base/pdf.py:451 +#: pretix/base/pdf.py:475 pretix/base/pdf.py:499 msgid "19:00" msgstr "19:00" @@ -8531,7 +8629,7 @@ msgstr "19:00" msgid "Event location" msgstr "Ubicació de l'esdeveniment" -#: pretix/base/pdf.py:327 pretix/base/settings.py:1335 +#: pretix/base/pdf.py:327 pretix/base/settings.py:1348 msgid "Random City" msgstr "Ciutat aleatòria" @@ -8562,10 +8660,22 @@ msgid "Atlantis" msgstr "Atlantis" #: pretix/base/pdf.py:376 +#, fuzzy +#| msgid "Custom address field" +msgid "Invoice custom recipient field" +msgstr "Camp d'adreça personalitzat" + +#: pretix/base/pdf.py:377 +#, fuzzy +#| msgid "Custom address field" +msgid "Custom recipient field" +msgstr "Camp d'adreça personalitzat" + +#: pretix/base/pdf.py:381 msgid "List of Add-Ons" msgstr "Llista de complements" -#: pretix/base/pdf.py:377 pretix/base/pdf.py:384 +#: pretix/base/pdf.py:382 pretix/base/pdf.py:389 #, fuzzy #| msgid "" #| "Add-on 1\n" @@ -8577,191 +8687,191 @@ msgstr "" "Complement 1\n" "Complement 2" -#: pretix/base/pdf.py:383 +#: pretix/base/pdf.py:388 #, fuzzy #| msgid "List of Add-Ons" msgid "List of Checked-In Add-Ons" msgstr "Llista de complements" -#: pretix/base/pdf.py:390 pretix/control/forms/filter.py:1664 -#: pretix/control/forms/filter.py:1666 +#: pretix/base/pdf.py:395 pretix/control/forms/filter.py:1670 +#: pretix/control/forms/filter.py:1672 #: pretix/control/templates/pretixcontrol/organizers/index.html:42 msgid "Organizer name" msgstr "Nom de l'organitzador" -#: pretix/base/pdf.py:391 +#: pretix/base/pdf.py:396 msgid "Event organizer company" msgstr "Empresa de l'organitzador de l'esdeveniment" -#: pretix/base/pdf.py:395 +#: pretix/base/pdf.py:400 msgid "Organizer info text" msgstr "Text de la informació de l'organitzador" -#: pretix/base/pdf.py:396 +#: pretix/base/pdf.py:401 msgid "Event organizer info text" msgstr "Text de la informació de l'organització de l'esdeveniment" -#: pretix/base/pdf.py:400 pretix/base/pdf.py:401 +#: pretix/base/pdf.py:405 pretix/base/pdf.py:406 #, fuzzy #| msgid "Event organizer info text" msgid "Event info text" msgstr "Text de la informació de l'organització de l'esdeveniment" -#: pretix/base/pdf.py:405 +#: pretix/base/pdf.py:410 msgid "Printing date" msgstr "Data d'impressió" -#: pretix/base/pdf.py:413 +#: pretix/base/pdf.py:418 msgid "Printing date and time" msgstr "Dia i hora de la impressió" -#: pretix/base/pdf.py:421 +#: pretix/base/pdf.py:426 msgid "Printing time" msgstr "Hora de la impressió" -#: pretix/base/pdf.py:429 pretix/control/forms/item.py:796 +#: pretix/base/pdf.py:434 pretix/control/forms/item.py:796 #, fuzzy #| msgid "Purchased" msgid "Purchase date" msgstr "Comprat" -#: pretix/base/pdf.py:437 +#: pretix/base/pdf.py:442 #, fuzzy #| msgid "Purchased" msgid "Purchase date and time" msgstr "Comprat" -#: pretix/base/pdf.py:445 +#: pretix/base/pdf.py:450 #, fuzzy #| msgid "Purchased" msgid "Purchase time" msgstr "Comprat" -#: pretix/base/pdf.py:453 +#: pretix/base/pdf.py:458 #, fuzzy #| msgid "Valid until" msgid "Validity start date" msgstr "Vàlid fins" -#: pretix/base/pdf.py:461 +#: pretix/base/pdf.py:466 #, fuzzy #| msgid "Printing date and time" msgid "Validity start date and time" msgstr "Dia i hora de la impressió" -#: pretix/base/pdf.py:469 +#: pretix/base/pdf.py:474 #, fuzzy #| msgid "Valid until" msgid "Validity start time" msgstr "Vàlid fins" -#: pretix/base/pdf.py:477 +#: pretix/base/pdf.py:482 #, fuzzy #| msgid "Valid until" msgid "Validity end date" msgstr "Vàlid fins" -#: pretix/base/pdf.py:485 +#: pretix/base/pdf.py:490 #, fuzzy #| msgid "Event end date and time" msgid "Validity end date and time" msgstr "Dia i hora de l'esdeveniment" -#: pretix/base/pdf.py:493 +#: pretix/base/pdf.py:498 #, fuzzy #| msgid "Valid until" msgid "Validity end time" msgstr "Vàlid fins" -#: pretix/base/pdf.py:501 pretix/control/forms/item.py:1386 +#: pretix/base/pdf.py:506 pretix/control/forms/item.py:1386 #, fuzzy #| msgid "Printing time" msgid "Program times" msgstr "Hora de la impressió" -#: pretix/base/pdf.py:503 +#: pretix/base/pdf.py:508 msgid "" "2017-05-31 10:00 – 12:00, Room 1\n" "2017-05-31 14:00 – 16:00, Room 2\n" "2017-05-31 14:00 – 2017-06-01 14:00, Building A" msgstr "" -#: pretix/base/pdf.py:507 +#: pretix/base/pdf.py:512 msgid "Reusable Medium ID" msgstr "" -#: pretix/base/pdf.py:512 +#: pretix/base/pdf.py:517 msgid "Seat: Full name" msgstr "Seient: Nom complet" -#: pretix/base/pdf.py:513 +#: pretix/base/pdf.py:518 msgid "Ground floor, Row 3, Seat 4" msgstr "Platea, Filera 3, Seient 4" -#: pretix/base/pdf.py:515 pretix/base/pdf.py:521 +#: pretix/base/pdf.py:520 pretix/base/pdf.py:526 #: pretix/control/forms/orders.py:348 msgid "General admission" msgstr "Entrada general" -#: pretix/base/pdf.py:518 +#: pretix/base/pdf.py:523 msgid "Seat: zone" msgstr "Seient: Zona" -#: pretix/base/pdf.py:519 +#: pretix/base/pdf.py:524 msgid "Ground floor" msgstr "Platea" -#: pretix/base/pdf.py:524 +#: pretix/base/pdf.py:529 msgid "Seat: row" msgstr "Seient: Filera" -#: pretix/base/pdf.py:529 +#: pretix/base/pdf.py:534 msgid "Seat: seat number" msgstr "Seient: Número" -#: pretix/base/pdf.py:534 +#: pretix/base/pdf.py:539 #, fuzzy #| msgid "Date and time" msgid "Date and time of first scan" msgstr "Dia i hora" -#: pretix/base/pdf.py:540 +#: pretix/base/pdf.py:545 #, fuzzy #| msgid "Gift card code" msgid "Gift card: Issuance date" msgstr "Codi del val regal" -#: pretix/base/pdf.py:545 +#: pretix/base/pdf.py:550 #, fuzzy #| msgid "Expiration date" msgid "Gift card: Expiration date" msgstr "Data d'expiració" -#: pretix/base/pdf.py:586 pretix/base/pdf.py:624 pretix/base/pdf.py:630 +#: pretix/base/pdf.py:591 pretix/base/pdf.py:629 pretix/base/pdf.py:635 #: pretix/plugins/badges/exporters.py:512 #: pretix/plugins/ticketoutputpdf/exporters.py:102 #, python-brace-format msgid "Question: {question}" msgstr "Pregunta: {question}" -#: pretix/base/pdf.py:625 pretix/base/pdf.py:631 +#: pretix/base/pdf.py:630 pretix/base/pdf.py:636 #, python-brace-format msgid "" msgstr "" -#: pretix/base/pdf.py:672 +#: pretix/base/pdf.py:677 #, fuzzy #| msgid "Attendee names" msgid "Attendee name for salutation" msgstr "Noms dels assistents" -#: pretix/base/pdf.py:673 pretix/base/pdf.py:696 +#: pretix/base/pdf.py:678 pretix/base/pdf.py:701 #: pretix/base/services/placeholders.py:732 -#: pretix/control/forms/organizer.py:799 +#: pretix/control/forms/organizer.py:809 msgid "Mr Doe" msgstr "Sr Daixonses" -#: pretix/base/pdf.py:679 pretix/base/pdf.py:686 +#: pretix/base/pdf.py:684 pretix/base/pdf.py:691 #: pretix/plugins/badges/exporters.py:509 #: pretix/plugins/checkinlists/exporters.py:126 #: pretix/plugins/checkinlists/exporters.py:498 @@ -8770,18 +8880,18 @@ msgstr "Sr Daixonses" msgid "Attendee name: {part}" msgstr "Nom de l'assistent: {part}" -#: pretix/base/pdf.py:695 +#: pretix/base/pdf.py:700 #, fuzzy #| msgid "Invoice address explanation" msgid "Invoice address name for salutation" msgstr "Explicació de l'adreça de la factura" -#: pretix/base/pdf.py:702 +#: pretix/base/pdf.py:707 #, python-brace-format msgid "Invoice address name: {part}" msgstr "Nom de l'adreça de la factura: {part}" -#: pretix/base/pdf.py:1345 +#: pretix/base/pdf.py:1350 #, python-brace-format msgid "Your layout file is not a valid layout. Error message: {}" msgstr "" @@ -9220,7 +9330,7 @@ msgstr[1] "" #: pretix/base/services/cart.py:152 pretix/base/services/orders.py:164 #: pretix/presale/templates/pretixpresale/event/index.html:170 -#: pretix/presale/views/waiting.py:150 pretix/presale/views/widget.py:843 +#: pretix/presale/views/waiting.py:150 pretix/presale/views/widget.py:846 #, fuzzy #| msgid "The presale period for this event has not yet started." msgid "The booking period for this event has not yet started." @@ -9578,33 +9688,33 @@ msgstr "Número de dies" msgid "week day" msgstr "" -#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1395 -#: pretix/control/forms/filter.py:1573 +#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1401 +#: pretix/control/forms/filter.py:1579 msgid "Monday" msgstr "Dilluns" -#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1396 -#: pretix/control/forms/filter.py:1574 +#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1402 +#: pretix/control/forms/filter.py:1580 msgid "Tuesday" msgstr "Dimarts" -#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1397 -#: pretix/control/forms/filter.py:1575 +#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1403 +#: pretix/control/forms/filter.py:1581 msgid "Wednesday" msgstr "Dimecres" -#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1398 -#: pretix/control/forms/filter.py:1576 +#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1404 +#: pretix/control/forms/filter.py:1582 msgid "Thursday" msgstr "Dijous" -#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1400 -#: pretix/control/forms/filter.py:1578 +#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1406 +#: pretix/control/forms/filter.py:1584 msgid "Saturday" msgstr "Dissabte" -#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1401 -#: pretix/control/forms/filter.py:1579 +#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1407 +#: pretix/control/forms/filter.py:1585 msgid "Sunday" msgstr "Diumenge" @@ -9630,42 +9740,42 @@ msgstr "Valor mínim" msgid "{variable} is {value}" msgstr "" -#: pretix/base/services/checkin.py:972 +#: pretix/base/services/checkin.py:982 msgid "This order position has been canceled." msgstr "Aquesta posició de la comanda s'ha cancel·lat." -#: pretix/base/services/checkin.py:981 +#: pretix/base/services/checkin.py:991 #, fuzzy #| msgid "This ticket has already been redeemed." msgid "This ticket has been blocked." msgstr "Ja s'ha validat aquest tiquet." -#: pretix/base/services/checkin.py:990 +#: pretix/base/services/checkin.py:1000 #, fuzzy #| msgid "This order is not pending approval." msgid "This order is not yet approved." msgstr "Aquesta comanda no està pendent d'aprovació." -#: pretix/base/services/checkin.py:999 pretix/base/services/checkin.py:1003 +#: pretix/base/services/checkin.py:1009 pretix/base/services/checkin.py:1013 #, fuzzy, python-brace-format #| msgctxt "subevent" #| msgid "This voucher is not valid for this event date." msgid "This ticket is only valid after {datetime}." msgstr "Aquest val no és vàlid per a aquesta data de l'esdeveniment." -#: pretix/base/services/checkin.py:1013 pretix/base/services/checkin.py:1017 +#: pretix/base/services/checkin.py:1023 pretix/base/services/checkin.py:1027 #, fuzzy, python-brace-format #| msgid "This ticket has already been redeemed." msgid "This ticket was only valid before {datetime}." msgstr "Ja s'ha validat aquest tiquet." -#: pretix/base/services/checkin.py:1048 +#: pretix/base/services/checkin.py:1058 msgid "This order position has an invalid product for this check-in list." msgstr "" "Aquesta posició de la comanda té un producte invàlid per a aquesta llista " "de validació." -#: pretix/base/services/checkin.py:1057 +#: pretix/base/services/checkin.py:1067 #, fuzzy #| msgid "This order position has an invalid product for this check-in list." msgid "This order position has an invalid date for this check-in list." @@ -9673,26 +9783,36 @@ msgstr "" "Aquesta posició de la comanda té un producte invàlid per a aquesta llista " "de validació." -#: pretix/base/services/checkin.py:1068 +#: pretix/base/services/checkin.py:1078 msgid "This order is not marked as paid." msgstr "Aquesta comanda no està marcada com a pagada." -#: pretix/base/services/checkin.py:1080 +#: pretix/base/services/checkin.py:1090 msgid "Evaluation of custom rules has failed." msgstr "" -#: pretix/base/services/checkin.py:1090 +#: pretix/base/services/checkin.py:1100 #, fuzzy, python-brace-format #| msgid "Voucher explanation" msgid "Entry not permitted: {explanation}." msgstr "Explicació del val" -#: pretix/base/services/checkin.py:1099 +#: pretix/base/services/checkin.py:1109 msgid "You need to answer questions to complete this check-in." msgstr "" "Necessitau respondre aquestes preguntes per completar aquesta validació." -#: pretix/base/services/checkin.py:1152 +#: pretix/base/services/checkin.py:1121 +msgid "Ticket needs to be exchanged to a suitable medium." +msgstr "" + +#: pretix/base/services/checkin.py:1128 +msgid "" +"This ticket has already been exchanged for a reusable medium that now needs " +"to be used instead." +msgstr "" + +#: pretix/base/services/checkin.py:1180 msgid "This ticket has already been redeemed." msgstr "Ja s'ha validat aquest tiquet." @@ -9854,6 +9974,64 @@ msgstr "" msgid "You are receiving this email because you placed an order for {event}." msgstr "Heu rebut aquest correu perquè heu fet una comanda per {event}." +#: pretix/base/services/media.py:93 pretix/base/services/media.py:95 +#, fuzzy +#| msgid "Invalid input data." +msgid "Invalid medium type." +msgstr "Dades d'entrada no vàlides." + +#: pretix/base/services/media.py:100 pretix/base/services/media.py:102 +#, fuzzy +#| msgid "The selected product is not active or has no price set." +msgid "Medium type is not enabled for organizer." +msgstr "El producte seleccionat no està actiu o no te cap preu establert." + +#: pretix/base/services/media.py:107 pretix/base/services/media.py:109 +msgid "Incorrect medium type for product." +msgstr "" + +#: pretix/base/services/media.py:114 pretix/base/services/media.py:116 +#, fuzzy +#| msgid "This ticket has already been redeemed." +msgid "Ticket is already exchanged for reusable medium." +msgstr "Ja s'ha validat aquest tiquet." + +#: pretix/base/services/media.py:133 pretix/base/services/media.py:135 +#, fuzzy +#| msgid "Reactivate order" +msgid "Reusable medium not found." +msgstr "Reactivar la comanda" + +#: pretix/base/services/media.py:140 pretix/base/services/media.py:142 +#: pretix/base/services/media.py:168 pretix/base/services/media.py:170 +#, fuzzy +#| msgid "The task has been completed." +msgid "Reusable medium is inactive or expired." +msgstr "S'ha completat la tasca." + +#: pretix/base/services/media.py:155 pretix/base/services/media.py:162 +#: pretix/base/services/media.py:176 +#, fuzzy +#| msgid "The task has been completed." +msgid "Reusable medium not found and could not be created." +msgstr "S'ha completat la tasca." + +#: pretix/base/services/media.py:183 +#, fuzzy +#| msgid "Reactivate order" +msgid "Reusable medium already exists." +msgstr "Reactivar la comanda" + +#: pretix/base/services/media.py:189 +#, fuzzy +#| msgid "The task has been completed." +msgid "Reusable medium could not be created." +msgstr "S'ha completat la tasca." + +#: pretix/base/services/media.py:195 pretix/base/services/media.py:197 +msgid "Product does not support medium exchange." +msgstr "" + #: pretix/base/services/memberships.py:108 #, python-brace-format msgid "" @@ -10567,50 +10745,61 @@ msgstr "" #: pretix/base/settings.py:214 #, fuzzy #| msgid "Reactivate order" -msgid "Activate re-usable media" +msgid "Activate reusable media" msgstr "Reactivar la comanda" #: pretix/base/settings.py:215 msgid "" -"The re-usable media feature allows you to connect tickets and gift cards " -"with physical media such as wristbands or chip cards that may be re-used for " +"The reusable media feature allows you to connect tickets and gift cards with " +"physical media such as wristbands or chip cards that may be reused for " "different tickets or gift cards later." msgstr "" -#: pretix/base/settings.py:241 +#: pretix/base/settings.py:226 +msgid "Enforce the usage of issued reusable media for check-in" +msgstr "" + +#: pretix/base/settings.py:227 +msgid "" +"If enabled, a ticket barcode will not be accepted anymore, if a reusable " +"medium has been created and linked to a ticket. Keeping this option turned " +"off will treat the reusable medium and ticket as equals." +msgstr "" + +#: pretix/base/settings.py:254 #, fuzzy #| msgid "Gift card" msgid "Length of barcodes" msgstr "Targeta regal" -#: pretix/base/settings.py:270 +#: pretix/base/settings.py:283 msgid "" "Automatically create a new gift card if a previously unknown chip is seen" msgstr "" -#: pretix/base/settings.py:283 pretix/base/settings.py:314 +#: pretix/base/settings.py:296 pretix/base/settings.py:327 #, fuzzy #| msgid "Gift card code" msgid "Gift card currency" msgstr "Codi del val regal" -#: pretix/base/settings.py:301 +#: pretix/base/settings.py:314 msgid "Automatically create a new gift card if a new chip is encoded" msgstr "" -#: pretix/base/settings.py:323 +#: pretix/base/settings.py:336 msgid "Use UID protection feature of NFC chip" msgstr "" -#: pretix/base/settings.py:339 +#: pretix/base/settings.py:352 msgid "Maximum number of items per order" msgstr "Número màxim d'elements per comanda" -#: pretix/base/settings.py:340 +#: pretix/base/settings.py:353 msgid "Add-on products will not be counted." msgstr "No es comptabilitzaran els productes de complement." -#: pretix/base/settings.py:350 +#: pretix/base/settings.py:363 #, fuzzy #| msgid "" #| "Show net prices instead of gross prices in the product list (not " @@ -10620,7 +10809,7 @@ msgstr "" "Mostra els preus nets enlloc de bruts a la llista dels productes (no es " "recomana!)" -#: pretix/base/settings.py:351 +#: pretix/base/settings.py:364 msgid "" "Independent of your choice, the cart will show gross prices as this is the " "price that needs to be paid." @@ -10628,11 +10817,11 @@ msgstr "" "Independentment de la vostra elecció, la cistella mostrarà el preu brut ja " "que aquest és el preu que s'ha de pagar." -#: pretix/base/settings.py:362 +#: pretix/base/settings.py:375 msgid "Hide prices on attendee ticket page" msgstr "" -#: pretix/base/settings.py:363 +#: pretix/base/settings.py:376 msgid "" "If a person buys multiple tickets and you send emails to all of the " "attendees, with this option the ticket price will not be shown on the ticket " @@ -10640,30 +10829,30 @@ msgid "" "price." msgstr "" -#: pretix/base/settings.py:381 +#: pretix/base/settings.py:394 msgid "Ask for attendee names" msgstr "Demana els nom dels assistents" -#: pretix/base/settings.py:382 +#: pretix/base/settings.py:395 #, fuzzy #| msgid "Ask for a name for all tickets which include admission to the event." msgid "Ask for a name for all personalized tickets." msgstr "" "Demana el nom per tots els tiquets que inclouen l'admissió a l'esdeveniment." -#: pretix/base/settings.py:391 +#: pretix/base/settings.py:404 msgid "Require attendee names" msgstr "Requereix nom dels assistents" -#: pretix/base/settings.py:392 +#: pretix/base/settings.py:405 msgid "Require customers to fill in the names of all attendees." msgstr "Requereix als clients emplenar els noms de tots els assistents." -#: pretix/base/settings.py:402 +#: pretix/base/settings.py:415 msgid "Ask for email addresses per ticket" msgstr "Demana adreces de correu per tiquet" -#: pretix/base/settings.py:403 +#: pretix/base/settings.py:416 #, fuzzy #| msgid "" #| "Normally, pretix asks for one email address per order and the order " @@ -10692,11 +10881,11 @@ msgstr "" "enviarà la confirmació de la comanda a l'adreça de correu primària, no a les " "adreces dels assistents." -#: pretix/base/settings.py:417 +#: pretix/base/settings.py:430 msgid "Require email addresses per ticket" msgstr "Requereix adreces de correu per tiquet" -#: pretix/base/settings.py:418 +#: pretix/base/settings.py:431 #, fuzzy #| msgid "" #| "Require customers to fill in individual email addresses for all admission " @@ -10712,67 +10901,67 @@ msgstr "" "necessitarà una adreça de correu per la confirmació de comanda " "independentment d'aquesta opció." -#: pretix/base/settings.py:430 +#: pretix/base/settings.py:443 #, fuzzy #| msgid "Ask for email addresses per ticket" msgid "Ask for company per ticket" msgstr "Demana adreces de correu per tiquet" -#: pretix/base/settings.py:439 +#: pretix/base/settings.py:452 #, fuzzy #| msgid "Require email addresses per ticket" msgid "Require company per ticket" msgstr "Requereix adreces de correu per tiquet" -#: pretix/base/settings.py:449 +#: pretix/base/settings.py:462 #, fuzzy #| msgid "Ask for email addresses per ticket" msgid "Ask for postal addresses per ticket" msgstr "Demana adreces de correu per tiquet" -#: pretix/base/settings.py:458 +#: pretix/base/settings.py:471 #, fuzzy #| msgid "Require email addresses per ticket" msgid "Require postal addresses per ticket" msgstr "Requereix adreces de correu per tiquet" -#: pretix/base/settings.py:468 +#: pretix/base/settings.py:481 msgid "Ask for the order email address twice" msgstr "Demana dues vegades l'adreça de la comanda" -#: pretix/base/settings.py:469 +#: pretix/base/settings.py:482 msgid "" "Require customers to fill in the primary email address twice to avoid errors." msgstr "" "Requereix que els clients emplenin l'adreça de correu primària dues vegades " "per evitar errors." -#: pretix/base/settings.py:478 +#: pretix/base/settings.py:491 msgid "Ask for a phone number per order" msgstr "" -#: pretix/base/settings.py:487 +#: pretix/base/settings.py:500 msgid "Require a phone number per order" msgstr "" -#: pretix/base/settings.py:498 +#: pretix/base/settings.py:511 #, fuzzy #| msgid "including all taxes" msgid "Rounding of taxes" msgstr "Incloent tots els impostos" -#: pretix/base/settings.py:502 +#: pretix/base/settings.py:515 msgid "" "Note that if you transfer your sales data from pretix to an external system " "for tax reporting, you need to make sure to account for possible rounding " "differences if your external system rounds differently than pretix." msgstr "" -#: pretix/base/settings.py:518 +#: pretix/base/settings.py:531 msgid "Ask for invoice address" msgstr "Demana l'adreça de les factures" -#: pretix/base/settings.py:528 +#: pretix/base/settings.py:541 #, fuzzy #| msgid "" #| "Does only work if an invoice address is asked for. VAT ID is not required." @@ -10781,81 +10970,81 @@ msgstr "" "Només funciona si es demana per una adreça de facturació. No es requereix " "l'identificador d'IVA." -#: pretix/base/settings.py:538 +#: pretix/base/settings.py:551 msgid "Require customer name" msgstr "Requereix un nom de client" -#: pretix/base/settings.py:548 +#: pretix/base/settings.py:561 msgid "Show attendee names on invoices" msgstr "Mostres els noms dels assistents a les factures" -#: pretix/base/settings.py:558 +#: pretix/base/settings.py:571 #, fuzzy #| msgid "Show free products on invoices" msgid "Show event location on invoices" msgstr "Mostra els productes gratuïts a les factures" -#: pretix/base/settings.py:559 +#: pretix/base/settings.py:572 msgid "" "The event location will be shown below the list of products if it is the " "same for all lines. It will be shown on every line if there are different " "locations." msgstr "" -#: pretix/base/settings.py:570 +#: pretix/base/settings.py:583 #, fuzzy #| msgid "Show event end date" msgid "Show exchange rates" msgstr "Mostra la data de finalització de l'esdeveniment" -#: pretix/base/settings.py:573 pretix/base/settings.py:582 +#: pretix/base/settings.py:586 pretix/base/settings.py:595 #: pretix/control/forms/item.py:684 msgid "Never" msgstr "" -#: pretix/base/settings.py:574 pretix/base/settings.py:583 +#: pretix/base/settings.py:587 pretix/base/settings.py:596 msgid "" "Based on European Central Bank daily rates, whenever the invoice recipient " "is in an EU country that uses a different currency." msgstr "" -#: pretix/base/settings.py:576 pretix/base/settings.py:585 +#: pretix/base/settings.py:589 pretix/base/settings.py:598 msgid "" "Based on Czech National Bank daily rates, whenever the invoice amount is not " "in CZK." msgstr "" -#: pretix/base/settings.py:577 pretix/base/settings.py:586 +#: pretix/base/settings.py:590 pretix/base/settings.py:599 msgid "" "Based on National Bank of Poland daily rates, whenever the invoice amount is " "not in PLN." msgstr "" -#: pretix/base/settings.py:597 +#: pretix/base/settings.py:610 msgid "Require invoice address" msgstr "Requereix l'adreça de les factures" -#: pretix/base/settings.py:608 +#: pretix/base/settings.py:621 #, fuzzy #| msgid "Require a business addresses" msgid "Require a business address" msgstr "Requereix les adreces de les empreses" -#: pretix/base/settings.py:609 +#: pretix/base/settings.py:622 msgid "This will require users to enter a company name." msgstr "Això requerirà que l'usuari introdueixi un nom d'empresa." -#: pretix/base/settings.py:620 +#: pretix/base/settings.py:633 msgid "Ask for beneficiary" msgstr "Demana pel beneficiari" -#: pretix/base/settings.py:631 +#: pretix/base/settings.py:644 #, fuzzy #| msgid "Custom address field" msgid "Custom recipient field label" msgstr "Camp d'adreça personalitzat" -#: pretix/base/settings.py:633 +#: pretix/base/settings.py:646 msgid "" "If you want to add a custom text field, e.g. for a country-specific " "registration number, to your invoice address form, please fill in the label " @@ -10864,24 +11053,24 @@ msgid "" "on the invoice below the headline. The field will not be required." msgstr "" -#: pretix/base/settings.py:647 +#: pretix/base/settings.py:660 #, fuzzy #| msgid "Custom address field" msgid "Custom recipient field help text" msgstr "Camp d'adreça personalitzat" -#: pretix/base/settings.py:649 +#: pretix/base/settings.py:662 msgid "" "If you use the custom recipient field, you can specify a help text which " "will be displayed underneath the field. It will not be displayed on the " "invoice." msgstr "" -#: pretix/base/settings.py:660 +#: pretix/base/settings.py:673 msgid "Ask for VAT ID" msgstr "Demana per l'identificador d'IVA" -#: pretix/base/settings.py:662 +#: pretix/base/settings.py:675 #, fuzzy, python-brace-format #| msgid "" #| "Does only work if an invoice address is asked for. VAT ID is not required." @@ -10892,43 +11081,43 @@ msgstr "" "Només funciona si es demana per una adreça de facturació. No es requereix " "l'identificador d'IVA." -#: pretix/base/settings.py:682 +#: pretix/base/settings.py:695 #, fuzzy #| msgid "Require customer name" msgid "Require VAT ID in" msgstr "Requereix un nom de client" -#: pretix/base/settings.py:688 +#: pretix/base/settings.py:701 msgid "" "VAT ID is optional by default, because not all businesses are assigned a VAT " "ID in all countries. VAT ID will be required for all business addresses in " "the selected countries." msgstr "" -#: pretix/base/settings.py:704 +#: pretix/base/settings.py:717 msgid "Invoice address explanation" msgstr "Explicació de l'adreça de la factura" -#: pretix/base/settings.py:707 +#: pretix/base/settings.py:720 msgid "This text will be shown above the invoice address form during checkout." msgstr "" "Es mostrarà aquest text damunt de l'adreça de la factura durant el pagament." -#: pretix/base/settings.py:717 +#: pretix/base/settings.py:730 msgid "Show paid amount on partially paid invoices" msgstr "Mostrar import pagat en les factures parcialment pagades" -#: pretix/base/settings.py:718 +#: pretix/base/settings.py:731 msgid "" "If an invoice has already been paid partially, this option will add the paid " "and pending amount to the invoice." msgstr "" -#: pretix/base/settings.py:729 +#: pretix/base/settings.py:742 msgid "Show free products on invoices" msgstr "Mostra els productes gratuïts a les factures" -#: pretix/base/settings.py:730 +#: pretix/base/settings.py:743 msgid "" "Note that invoices will never be generated for orders that contain only free " "products." @@ -10936,44 +11125,44 @@ msgstr "" "Teniu en compte que mai es generaran factures per a comandes que només " "contenguin productes gratuïts." -#: pretix/base/settings.py:741 +#: pretix/base/settings.py:754 #, fuzzy #| msgid "Expiration date" msgid "Show expiration date of order" msgstr "Data d'expiració" -#: pretix/base/settings.py:742 +#: pretix/base/settings.py:755 msgid "" "The expiration date will not be shown if the invoice is generated after the " "order is paid." msgstr "" -#: pretix/base/settings.py:753 +#: pretix/base/settings.py:766 #, fuzzy #| msgid "Invoice number prefix" msgid "Minimum length of invoice number after prefix" msgstr "Prefix numèric de la factura" -#: pretix/base/settings.py:754 +#: pretix/base/settings.py:767 msgid "" "The part of your invoice number after your prefix will be filled up with " "leading zeros up to this length, e.g. INV-001 or INV-00001." msgstr "" -#: pretix/base/settings.py:767 +#: pretix/base/settings.py:780 msgid "Generate invoices with consecutive numbers" msgstr "Genera factures amb números consecutius" -#: pretix/base/settings.py:768 +#: pretix/base/settings.py:781 msgid "If deactivated, the order code will be used in the invoice number." msgstr "" "Si es desactiva, el codi de la comanda s'utilitzarà com a número de factura." -#: pretix/base/settings.py:778 +#: pretix/base/settings.py:791 msgid "Invoice number prefix" msgstr "Prefix numèric de la factura" -#: pretix/base/settings.py:779 +#: pretix/base/settings.py:792 #, fuzzy #| msgid "" #| "This will be prepended to invoice numbers. If you leave this field empty, " @@ -10998,69 +11187,69 @@ msgstr "" "al menys una vegada en tots els vostres esdeveniment. Aquesta configuració " "només afecta a factures futures." -#: pretix/base/settings.py:791 pretix/base/settings.py:815 +#: pretix/base/settings.py:804 pretix/base/settings.py:828 #, fuzzy, python-brace-format #| msgid "Please enter a shorter name." msgid "Please only use the characters {allowed} in this field." msgstr "Si us plau, introduïu un nom més curt." -#: pretix/base/settings.py:806 +#: pretix/base/settings.py:819 #, fuzzy #| msgid "Invoice number prefix" msgid "Invoice number prefix for cancellations" msgstr "Prefix numèric de la factura" -#: pretix/base/settings.py:807 +#: pretix/base/settings.py:820 msgid "" "This will be prepended to invoice numbers of cancellations. If you leave " "this field empty, the same numbering scheme will be used that you configured " "for regular invoices." msgstr "" -#: pretix/base/settings.py:830 +#: pretix/base/settings.py:843 msgid "Highlight order code to make it stand out visibly" msgstr "" -#: pretix/base/settings.py:831 pretix/base/settings.py:843 +#: pretix/base/settings.py:844 pretix/base/settings.py:856 #, fuzzy #| msgid "Only respected by modern browsers." msgid "Only respected by some invoice renderers." msgstr "Només ho respecten els navegadors moderns." -#: pretix/base/settings.py:842 pretix/base/settings.py:3176 -#: pretix/control/templates/pretixcontrol/pdf/index.html:441 +#: pretix/base/settings.py:855 pretix/base/settings.py:3189 +#: pretix/control/templates/pretixcontrol/pdf/index.html:439 msgid "Font" msgstr "Tipografia" -#: pretix/base/settings.py:869 +#: pretix/base/settings.py:882 #, fuzzy #| msgid "Gift card" msgid "Length of ticket codes" msgstr "Targeta regal" -#: pretix/base/settings.py:896 +#: pretix/base/settings.py:909 msgid "Reservation period" msgstr "Període de reserva" -#: pretix/base/settings.py:898 +#: pretix/base/settings.py:911 msgid "" "The number of minutes the items in a user's cart are reserved for this user." msgstr "" "El número de minuts que es reserven els elements dins la cistella d'un " "usuari." -#: pretix/base/settings.py:907 +#: pretix/base/settings.py:920 msgid "" "Directly redirect to check-out after a product has been added to the cart." msgstr "" "Redirigeix directament a la revisió de la compra una vegada que s'ha afegit " "un producte a la cistella." -#: pretix/base/settings.py:916 +#: pretix/base/settings.py:929 msgid "End of presale text" msgstr "Text del fi de la pre-venda" -#: pretix/base/settings.py:919 +#: pretix/base/settings.py:932 msgid "" "This text will be shown above the ticket shop once the designated sales " "timeframe for this event is over. You can use it to describe other options " @@ -11070,11 +11259,11 @@ msgstr "" "la finestra de temps de venda. Podeu utilitzar-ho per descriure altres " "opcions per obtenir un tiquet, com per exemple una oficina." -#: pretix/base/settings.py:934 +#: pretix/base/settings.py:947 msgid "Guidance text" msgstr "Text de guia" -#: pretix/base/settings.py:935 +#: pretix/base/settings.py:948 msgid "" "This text will be shown above the payment options. You can explain the " "choices to the user here, if you want." @@ -11082,33 +11271,33 @@ msgstr "" "Aquest text es mostrarà a sobre de les opcions de pagament. Si voleu, podeu " "explicar aquí les opcions a l'usuari." -#: pretix/base/settings.py:946 pretix/base/settings.py:956 +#: pretix/base/settings.py:959 pretix/base/settings.py:969 #, fuzzy #| msgid "All days" msgid "in days" msgstr "Tots els dies" -#: pretix/base/settings.py:947 pretix/base/settings.py:957 +#: pretix/base/settings.py:960 pretix/base/settings.py:970 msgid "in minutes" msgstr "en minuts" -#: pretix/base/settings.py:952 +#: pretix/base/settings.py:965 #, fuzzy #| msgid "Enable payment method" msgid "Set payment term" msgstr "Activa el mètode de pagament" -#: pretix/base/settings.py:959 +#: pretix/base/settings.py:972 msgid "" "If using days, the order will expire at the end of the last day. Using " "minutes is more exact, but should only be used for real-time payment methods." msgstr "" -#: pretix/base/settings.py:970 +#: pretix/base/settings.py:983 msgid "Payment term in days" msgstr "Termini de pagament en dies" -#: pretix/base/settings.py:977 +#: pretix/base/settings.py:990 msgid "" "The number of days after placing an order the user has to pay to preserve " "their reservation. If you use slow payment methods like bank transfer, we " @@ -11121,11 +11310,11 @@ msgstr "" "pagament en temps real, recomanem igualment configurar dos o tres dies per " "permetre a la gent que torni a intentar pagaments erronis." -#: pretix/base/settings.py:996 +#: pretix/base/settings.py:1009 msgid "Only end payment terms on weekdays" msgstr "Finalitza els terminis de pagament només en dies feiners" -#: pretix/base/settings.py:997 +#: pretix/base/settings.py:1010 #, fuzzy #| msgid "" #| "If this is activated and the payment term of any order ends on a Saturday " @@ -11143,11 +11332,11 @@ msgstr "" "alguns països per la llei civil. No afectarà al darrer dia de pagament " "configurat més amunt." -#: pretix/base/settings.py:1014 +#: pretix/base/settings.py:1027 msgid "Payment term in minutes" msgstr "Termini de pagament en minuts" -#: pretix/base/settings.py:1015 +#: pretix/base/settings.py:1028 #, fuzzy #| msgid "" #| "The number of days after placing an order the user has to pay to preserve " @@ -11167,11 +11356,11 @@ msgstr "" "pagament en temps real, recomanem igualment configurar dos o tres dies per " "permetre a la gent que torni a intentar pagaments erronis." -#: pretix/base/settings.py:1039 +#: pretix/base/settings.py:1052 msgid "Last date of payments" msgstr "Darrer dia de pagaments" -#: pretix/base/settings.py:1040 +#: pretix/base/settings.py:1053 #, fuzzy #| msgid "" #| "The last date any payments are accepted. This has precedence over the " @@ -11188,11 +11377,11 @@ msgstr "" "d'esdeveniment i una comanda inclou tiquets per múltiples dates, " "s'utilitzarà la data més propera." -#: pretix/base/settings.py:1052 +#: pretix/base/settings.py:1065 msgid "Automatically expire unpaid orders" msgstr "Expira automàticament les comandes no pagades" -#: pretix/base/settings.py:1053 +#: pretix/base/settings.py:1066 msgid "" "If checked, all unpaid orders will automatically go from 'pending' to " "'expired' after the end of their payment deadline. This means that those " @@ -11203,13 +11392,13 @@ msgstr "" "pagament. Això significa que aquests tiquets tornaran a la reserva i es " "podran comanar per altra gent." -#: pretix/base/settings.py:1065 +#: pretix/base/settings.py:1078 #, fuzzy #| msgid "Expiration date" msgid "Expiration delay" msgstr "Data d'expiració" -#: pretix/base/settings.py:1066 +#: pretix/base/settings.py:1079 msgid "" "The order will only actually expire this many days after the expiration date " "communicated to the customer. If you select \"Only end payment terms on " @@ -11218,18 +11407,18 @@ msgid "" "enforced." msgstr "" -#: pretix/base/settings.py:1088 +#: pretix/base/settings.py:1101 msgid "Hide \"payment pending\" state on customer-facing pages" msgstr "" -#: pretix/base/settings.py:1089 +#: pretix/base/settings.py:1102 msgid "" "The payment instructions panel will still be shown to the primary customer, " "but no indication of missing payment will be visible on the ticket pages of " "attendees who did not buy the ticket themselves." msgstr "" -#: pretix/base/settings.py:1107 +#: pretix/base/settings.py:1120 msgid "" "If you have a gift card, please enter the gift card code here. If the gift " "card does not have enough credit to pay for the full order, you will be " @@ -11237,11 +11426,11 @@ msgid "" "a different payment method for the difference." msgstr "" -#: pretix/base/settings.py:1126 +#: pretix/base/settings.py:1139 msgid "Accept late payments" msgstr "Accepta pagaments tardans" -#: pretix/base/settings.py:1127 +#: pretix/base/settings.py:1140 msgid "" "Accept payments for orders even when they are in 'expired' state as long as " "enough capacity is available. No payments will ever be accepted after the " @@ -11251,181 +11440,181 @@ msgstr "" "mentre hi hagi capacitat disponible. Mai s'acceptarà cap pagament després de " "la configuració \"Darrer dia de pagaments\" de més amunt." -#: pretix/base/settings.py:1138 +#: pretix/base/settings.py:1151 msgid "Show start date" msgstr "Mostra la data d'inici" -#: pretix/base/settings.py:1139 +#: pretix/base/settings.py:1152 msgid "Show the presale start date before presale has started." msgstr "Mostra la data d'inici de la pre-venda abans que hagi començat." -#: pretix/base/settings.py:1150 pretix/base/settings.py:1159 -#: pretix/base/settings.py:1173 pretix/base/settings.py:1182 +#: pretix/base/settings.py:1163 pretix/base/settings.py:1172 +#: pretix/base/settings.py:1186 pretix/base/settings.py:1195 #, fuzzy #| msgid "Default price" msgid "Use default tax rate" msgstr "Preu predeterminat" -#: pretix/base/settings.py:1151 pretix/base/settings.py:1160 -#: pretix/base/settings.py:1171 pretix/base/settings.py:1180 +#: pretix/base/settings.py:1164 pretix/base/settings.py:1173 +#: pretix/base/settings.py:1184 pretix/base/settings.py:1193 msgid "Charge no taxes" msgstr "" -#: pretix/base/settings.py:1156 +#: pretix/base/settings.py:1169 #, fuzzy #| msgid "Tax rule for payment fees" msgid "Tax handling on payment fees" msgstr "Regla fiscal per tarifes de pagament" -#: pretix/base/settings.py:1172 pretix/base/settings.py:1181 +#: pretix/base/settings.py:1185 pretix/base/settings.py:1194 msgid "Use same taxes as order positions (split according to net prices)" msgstr "" -#: pretix/base/settings.py:1177 +#: pretix/base/settings.py:1190 #, fuzzy #| msgid "Keep a fixed cancellation fee" msgid "Tax handling on cancellation fees" msgstr "Manté una tarifa fixa de cancel·lació" -#: pretix/base/settings.py:1193 pretix/base/settings.py:1206 +#: pretix/base/settings.py:1206 pretix/base/settings.py:1219 msgid "Do not generate invoices" msgstr "No generis factures" -#: pretix/base/settings.py:1194 pretix/base/settings.py:1211 +#: pretix/base/settings.py:1207 pretix/base/settings.py:1224 msgid "Only manually in admin panel" msgstr "Només manualment al panell administratiu" -#: pretix/base/settings.py:1195 pretix/base/settings.py:1209 +#: pretix/base/settings.py:1208 pretix/base/settings.py:1222 msgid "Automatically on user request" msgstr "Automàticament a petició de l'usuari" -#: pretix/base/settings.py:1196 pretix/base/settings.py:1210 +#: pretix/base/settings.py:1209 pretix/base/settings.py:1223 #, fuzzy #| msgid "Automatically on user request" msgid "Automatically on user request for paid orders" msgstr "Automàticament a petició de l'usuari" -#: pretix/base/settings.py:1197 +#: pretix/base/settings.py:1210 msgid "Automatically for all created orders" msgstr "Automàticament per a totes les comandes creades" -#: pretix/base/settings.py:1198 +#: pretix/base/settings.py:1211 msgid "Automatically on payment or when required by payment method" msgstr "" -#: pretix/base/settings.py:1203 +#: pretix/base/settings.py:1216 msgid "Generate invoices" msgstr "Genera factures" -#: pretix/base/settings.py:1207 +#: pretix/base/settings.py:1220 #, fuzzy #| msgid "Re-try payment or choose another payment method" msgid "Automatically after payment or when required by payment method" msgstr "Torneu a intentar el pagament o trieu un altre mètode" -#: pretix/base/settings.py:1208 +#: pretix/base/settings.py:1221 #, fuzzy #| msgid "Automatically for all created orders" msgid "Automatically before payment for all created orders" msgstr "Automàticament per a totes les comandes creades" -#: pretix/base/settings.py:1213 +#: pretix/base/settings.py:1226 msgid "Invoices will never be automatically generated for free orders." msgstr "Mai es generaran automàticament factures per a comandes gratuïtes." -#: pretix/base/settings.py:1223 pretix/base/settings.py:1235 +#: pretix/base/settings.py:1236 pretix/base/settings.py:1248 msgid "" "Automatic based on ticket-specific validity, membership validity, event " "series date, or event date" msgstr "" -#: pretix/base/settings.py:1224 pretix/base/settings.py:1236 +#: pretix/base/settings.py:1237 pretix/base/settings.py:1249 msgid "Automatic, but prefer invoice date over event date" msgstr "" -#: pretix/base/settings.py:1227 pretix/base/settings.py:1239 +#: pretix/base/settings.py:1240 pretix/base/settings.py:1252 #, fuzzy #| msgctxt "invoice" #| msgid "Invoice date" msgid "Invoice date" msgstr "Data de la factura" -#: pretix/base/settings.py:1232 +#: pretix/base/settings.py:1245 #, fuzzy #| msgctxt "subevent" #| msgid "Date ordering" msgid "Date of service" msgstr "Ordenació de la data" -#: pretix/base/settings.py:1241 +#: pretix/base/settings.py:1254 msgid "" "This controls what dates are shown on the invoice, but is especially " "important for electronic invoicing." msgstr "" -#: pretix/base/settings.py:1253 +#: pretix/base/settings.py:1266 msgid "Automatically cancel and reissue invoice on address changes" msgstr "" -#: pretix/base/settings.py:1254 +#: pretix/base/settings.py:1267 msgid "" "If customers change their invoice address on an existing order, the invoice " "will automatically be canceled and a new invoice will be issued. This " "setting does not affect changes made through the backend." msgstr "" -#: pretix/base/settings.py:1266 +#: pretix/base/settings.py:1279 msgid "Allow to update existing invoices" msgstr "" -#: pretix/base/settings.py:1267 +#: pretix/base/settings.py:1280 msgid "" "By default, invoices can never again be changed once they are issued. In " "most countries, we recommend to leave this option turned off and always " "issue a new invoice if a change needs to be made." msgstr "" -#: pretix/base/settings.py:1283 +#: pretix/base/settings.py:1296 #, fuzzy #| msgid "Business customer" msgid "Only issue invoices to business customers" msgstr "Client comercial" -#: pretix/base/settings.py:1293 +#: pretix/base/settings.py:1306 msgid "Address line" msgstr "Línia de l'adreça" -#: pretix/base/settings.py:1297 +#: pretix/base/settings.py:1310 msgid "Albert Einstein Road 52" msgstr "Carrer Mallorca 40" -#: pretix/base/settings.py:1377 +#: pretix/base/settings.py:1390 msgid "Domestic tax ID" msgstr "Identificació fiscal nacional" -#: pretix/base/settings.py:1378 +#: pretix/base/settings.py:1391 msgid "e.g. tax number in Germany, ABN in Australia, …" msgstr "" -#: pretix/base/settings.py:1389 +#: pretix/base/settings.py:1402 msgid "EU VAT ID" msgstr "Identificador d'IVA europeu" -#: pretix/base/settings.py:1404 +#: pretix/base/settings.py:1417 msgid "e.g. With this document, we sent you the invoice for your ticket order." msgstr "" "és a dir, amb aquest document us enviem la factura per la vostra comanda del " "tiquet." -#: pretix/base/settings.py:1407 +#: pretix/base/settings.py:1420 msgid "Introductory text" msgstr "Text introductori" -#: pretix/base/settings.py:1408 +#: pretix/base/settings.py:1421 msgid "Will be printed on every invoice above the invoice rows." msgstr "S'imprimirà a cada factura per damunt de les fileres de la factura." -#: pretix/base/settings.py:1422 +#: pretix/base/settings.py:1435 msgid "" "e.g. Thank you for your purchase! You can find more information on the event " "at ..." @@ -11433,15 +11622,15 @@ msgstr "" "per exemple: Gràcies per la vostra compra! Podeu trobar més informació de " "l'esdeveniment a..." -#: pretix/base/settings.py:1425 +#: pretix/base/settings.py:1438 msgid "Additional text" msgstr "Text addicional" -#: pretix/base/settings.py:1426 +#: pretix/base/settings.py:1439 msgid "Will be printed on every invoice below the invoice total." msgstr "S'imprimirà a cada factura sota el total." -#: pretix/base/settings.py:1440 +#: pretix/base/settings.py:1453 msgid "" "e.g. your bank details, legal details like your VAT ID, registration " "numbers, etc." @@ -11449,11 +11638,11 @@ msgstr "" "per exemple els detalls del vostre banc, detalls legals com el vostre " "identificador d'IVA, números de registre, etc." -#: pretix/base/settings.py:1443 +#: pretix/base/settings.py:1456 msgid "Footer" msgstr "Peu" -#: pretix/base/settings.py:1444 +#: pretix/base/settings.py:1457 msgid "" "Will be printed centered and in a smaller font at the end of every invoice " "page." @@ -11461,11 +11650,11 @@ msgstr "" "S'imprimirà centrat i en una tipografia menor al final de cada pàgina de la " "factura." -#: pretix/base/settings.py:1459 +#: pretix/base/settings.py:1472 msgid "Attach invoices to emails" msgstr "Adjunta les factures als correus" -#: pretix/base/settings.py:1460 +#: pretix/base/settings.py:1473 msgid "" "If invoices are automatically generated for all orders, they will be " "attached to the order confirmation mail. If they are automatically generated " @@ -11477,41 +11666,41 @@ msgstr "" "el pagament, s'adjuntaran al correu de confirmació de pagament. Si no es " "generen automàticament no s'adjuntaran als correus." -#: pretix/base/settings.py:1473 +#: pretix/base/settings.py:1486 msgid "Email address to receive a copy of each invoice" msgstr "" -#: pretix/base/settings.py:1474 +#: pretix/base/settings.py:1487 msgid "" "Each newly created invoice will be sent to this email address shortly after " "creation. You can use this for an automated import of invoices to your " "accounting system. The invoice will be the only attachment of the email." msgstr "" -#: pretix/base/settings.py:1489 +#: pretix/base/settings.py:1502 msgid "Show items outside presale period" msgstr "Mostra elements fora del seu període de pre-venda" -#: pretix/base/settings.py:1490 +#: pretix/base/settings.py:1503 msgid "" "Show item details before presale has started and after presale has ended" msgstr "" "Mostra els detalls dels elements abans que la prevenda hagi començat i " "després que hagi acabat" -#: pretix/base/settings.py:1510 +#: pretix/base/settings.py:1523 msgid "Available languages" msgstr "Idiomes disponibles" -#: pretix/base/settings.py:1526 pretix/control/forms/event.py:151 +#: pretix/base/settings.py:1539 pretix/control/forms/event.py:151 msgid "Default language" msgstr "Idioma predeterminat" -#: pretix/base/settings.py:1536 +#: pretix/base/settings.py:1549 msgid "Region" msgstr "" -#: pretix/base/settings.py:1537 +#: pretix/base/settings.py:1550 msgid "" "Will be used to determine date and time formatting as well as default " "country for customer addresses and phone numbers. For formatting, this takes " @@ -11519,13 +11708,13 @@ msgid "" "languages used in different regions globally (like English)." msgstr "" -#: pretix/base/settings.py:1549 +#: pretix/base/settings.py:1562 #, fuzzy #| msgid "This is not an event series." msgid "This shop represents an event" msgstr "Això no és una sèrie d'events." -#: pretix/base/settings.py:1551 +#: pretix/base/settings.py:1564 msgid "" "Uncheck this box if you are only selling something that has no specific " "date, such as gift cards or a ticket that can be used any time. The system " @@ -11534,21 +11723,21 @@ msgid "" "may still show up in other places." msgstr "" -#: pretix/base/settings.py:1564 +#: pretix/base/settings.py:1577 msgid "Show event end date" msgstr "Mostra la data de finalització de l'esdeveniment" -#: pretix/base/settings.py:1565 +#: pretix/base/settings.py:1578 msgid "If disabled, only event's start date will be displayed to the public." msgstr "" "Si està desactivat només es mostrarà al públic la data d'inici de " "l'esdeveniment." -#: pretix/base/settings.py:1574 +#: pretix/base/settings.py:1587 msgid "Show dates with time" msgstr "Mostra la dates amb l'hora" -#: pretix/base/settings.py:1575 +#: pretix/base/settings.py:1588 msgid "" "If disabled, the event's start and end date will be displayed without the " "time of day." @@ -11556,27 +11745,27 @@ msgstr "" "Si està desactivat, la data d'inici i finalització de l'esdeveniment es " "mostraran sense l'hora." -#: pretix/base/settings.py:1584 +#: pretix/base/settings.py:1597 msgid "Hide all products that are sold out" msgstr "" -#: pretix/base/settings.py:1594 pretix/control/forms/event.py:1870 +#: pretix/base/settings.py:1607 pretix/control/forms/event.py:1870 msgid "Publicly show how many tickets of a certain type are still available." msgstr "Mostra públicament quants tiquets queden d'un tipus determinat." -#: pretix/base/settings.py:1603 +#: pretix/base/settings.py:1616 msgid "Ask search engines not to index the ticket shop" msgstr "Demana als motors de cerque que no indexin la tenda de tiquets" -#: pretix/base/settings.py:1612 +#: pretix/base/settings.py:1625 msgid "Show variations of a product expanded by default" msgstr "Mostra de manera predeterminada les variacions del producte expandides" -#: pretix/base/settings.py:1621 +#: pretix/base/settings.py:1634 msgid "Enable waiting list" msgstr "Activa la llista d'espera" -#: pretix/base/settings.py:1622 pretix/control/forms/event.py:1875 +#: pretix/base/settings.py:1635 pretix/control/forms/event.py:1875 msgid "" "Once a ticket is sold out, people can add themselves to a waiting list. As " "soon as a ticket becomes available again, it will be reserved for the first " @@ -11588,11 +11777,11 @@ msgstr "" "primera persona de la llista d'espera i aquesta persona rep una notificació " "de correu amb un val que se pot usar per comprar el tiquet." -#: pretix/base/settings.py:1633 +#: pretix/base/settings.py:1646 msgid "Automatic waiting list assignments" msgstr "Assignació automàtica de la llista d'espera" -#: pretix/base/settings.py:1634 +#: pretix/base/settings.py:1647 msgid "" "If ticket capacity becomes free, automatically create a voucher and send it " "to the first person on the waiting list for that product. If this is not " @@ -11607,11 +11796,11 @@ msgstr "" "d'espera però manteniu aquesta opció activada, s'enviaran igualment els " "tiquets." -#: pretix/base/settings.py:1650 +#: pretix/base/settings.py:1663 msgid "Waiting list response time" msgstr "Temps de resposta de la llista d'espera" -#: pretix/base/settings.py:1653 +#: pretix/base/settings.py:1666 msgid "" "If a ticket voucher is sent to a person on the waiting list, it has to be " "redeemed within this number of hours until it expires and can be re-assigned " @@ -11621,13 +11810,13 @@ msgstr "" "validar durant aquest número d'hores fins que expira i es pot reassignar a " "la següent persona de la llista." -#: pretix/base/settings.py:1664 +#: pretix/base/settings.py:1677 #, fuzzy #| msgid "Enable waiting list" msgid "Disable waiting list" msgstr "Activa la llista d'espera" -#: pretix/base/settings.py:1665 +#: pretix/base/settings.py:1678 msgid "" "The waiting list will be fully disabled after this date. This means that " "nobody can add themselves to the waiting list any more, but also that " @@ -11636,67 +11825,67 @@ msgid "" "remain active." msgstr "" -#: pretix/base/settings.py:1677 +#: pretix/base/settings.py:1690 #, fuzzy #| msgid "Ask for attendee names" msgid "Ask for a name" msgstr "Demana els nom dels assistents" -#: pretix/base/settings.py:1678 +#: pretix/base/settings.py:1691 #, fuzzy #| msgid "Add me to the waiting list" msgid "Ask for a name when signing up to the waiting list." msgstr "Afegiu-me a la llista d'espera" -#: pretix/base/settings.py:1687 +#: pretix/base/settings.py:1700 #, fuzzy #| msgid "Require customer name" msgid "Require name" msgstr "Requereix un nom de client" -#: pretix/base/settings.py:1688 +#: pretix/base/settings.py:1701 msgid "Require a name when signing up to the waiting list.." msgstr "" -#: pretix/base/settings.py:1698 +#: pretix/base/settings.py:1711 #, fuzzy #| msgid "Ask for attendee names" msgid "Ask for a phone number" msgstr "Demana els nom dels assistents" -#: pretix/base/settings.py:1699 +#: pretix/base/settings.py:1712 msgid "Ask for a phone number when signing up to the waiting list." msgstr "" -#: pretix/base/settings.py:1708 +#: pretix/base/settings.py:1721 #, fuzzy #| msgid "Phone number" msgid "Require phone number" msgstr "Número de telèfon" -#: pretix/base/settings.py:1709 +#: pretix/base/settings.py:1722 msgid "Require a phone number when signing up to the waiting list.." msgstr "" -#: pretix/base/settings.py:1719 +#: pretix/base/settings.py:1732 #, fuzzy #| msgid "Voucher explanation" msgid "Phone number explanation" msgstr "Explicació del val" -#: pretix/base/settings.py:1722 +#: pretix/base/settings.py:1735 msgid "" "If you ask for a phone number, explain why you do so and what you will use " "the phone number for." msgstr "" -#: pretix/base/settings.py:1734 +#: pretix/base/settings.py:1747 #, fuzzy #| msgid "Maximum number of items per order" msgid "Maximum number of entries per email address for the same product" msgstr "Número màxim d'elements per comanda" -#: pretix/base/settings.py:1738 +#: pretix/base/settings.py:1751 msgid "" "With an increased limit, a customer may request more than one ticket for a " "specific product using the same, unique email address. However, regardless " @@ -11705,13 +11894,13 @@ msgid "" "ticket at a time." msgstr "" -#: pretix/base/settings.py:1750 +#: pretix/base/settings.py:1763 #, fuzzy #| msgid "Show number of tickets left" msgid "Show number of check-ins to customer" msgstr "Mostra el número restant de tiquets" -#: pretix/base/settings.py:1751 +#: pretix/base/settings.py:1764 msgid "" "With this option enabled, your customers will be able to see how many times " "they entered the event. This is usually not necessary, but might be useful " @@ -11721,21 +11910,21 @@ msgid "" "check-in lists." msgstr "" -#: pretix/base/settings.py:1764 +#: pretix/base/settings.py:1777 #, fuzzy #| msgid "Download ticket" msgid "Allow users to download tickets" msgstr "Baixa el tiquet" -#: pretix/base/settings.py:1765 +#: pretix/base/settings.py:1778 msgid "If this is off, nobody can download a ticket." msgstr "" -#: pretix/base/settings.py:1774 +#: pretix/base/settings.py:1787 msgid "Download date" msgstr "Data de descàrrega" -#: pretix/base/settings.py:1775 +#: pretix/base/settings.py:1788 msgid "" "Ticket download will be offered after this date. If you use the event series " "feature and an order contains tickets for multiple event dates, download of " @@ -11746,47 +11935,47 @@ msgstr "" "dates d'esdeveniments, la descàrrega de tots els tiquets estaran disponibles " "si ho permet al menys una de les dates de l'esdeveniment." -#: pretix/base/settings.py:1786 +#: pretix/base/settings.py:1799 #, fuzzy #| msgid "Generate tickets for non-admission products" msgid "Generate tickets for add-on products and bundled products" msgstr "Genera tiquets per a productes de no admissió" -#: pretix/base/settings.py:1787 +#: pretix/base/settings.py:1800 msgid "" "By default, tickets are only issued for products selected individually, not " "for add-on products or bundled products. With this option, a separate ticket " "is issued for every add-on product or bundled product as well." msgstr "" -#: pretix/base/settings.py:1800 +#: pretix/base/settings.py:1813 msgid "Generate tickets for all products" msgstr "Genera tiquets per a tots els productes" -#: pretix/base/settings.py:1801 +#: pretix/base/settings.py:1814 msgid "" "If turned off, tickets are only issued for products that are marked as an " "\"admission ticket\"in the product settings. You can also turn off ticket " "issuing in every product separately." msgstr "" -#: pretix/base/settings.py:1813 +#: pretix/base/settings.py:1826 #, fuzzy #| msgid "Generate tickets for non-admission products" msgid "Generate tickets for pending orders" msgstr "Genera tiquets per a productes de no admissió" -#: pretix/base/settings.py:1814 +#: pretix/base/settings.py:1827 msgid "" "If turned off, ticket downloads are only possible after an order has been " "marked as paid." msgstr "" -#: pretix/base/settings.py:1825 +#: pretix/base/settings.py:1838 msgid "Do not issue ticket before email address is validated" msgstr "" -#: pretix/base/settings.py:1826 +#: pretix/base/settings.py:1839 msgid "" "If turned on, tickets will not be offered for download directly after " "purchase. They will be attached to the payment confirmation email (if the " @@ -11795,13 +11984,13 @@ msgid "" "orders performed through other sales channels." msgstr "" -#: pretix/base/settings.py:1842 +#: pretix/base/settings.py:1855 #, fuzzy #| msgid "Quota availabilities" msgid "Low availability threshold" msgstr "Disponibilitat de quotes" -#: pretix/base/settings.py:1843 +#: pretix/base/settings.py:1856 msgid "" "If the availability of tickets falls below this percentage, the event (or a " "date, if it is an event series) will be highlighted to have low availability " @@ -11809,49 +11998,49 @@ msgid "" "availability will not be shown publicly." msgstr "" -#: pretix/base/settings.py:1857 +#: pretix/base/settings.py:1870 msgid "Show availability in event overviews" msgstr "" -#: pretix/base/settings.py:1858 +#: pretix/base/settings.py:1871 msgid "" "If checked, the list of events will show if events are sold out. This might " "make for longer page loading times if you have lots of events and the shown " "status might be out of date for up to two minutes." msgstr "" -#: pretix/base/settings.py:1871 pretix/base/settings.py:1879 +#: pretix/base/settings.py:1884 pretix/base/settings.py:1892 #: pretix/presale/templates/pretixpresale/fragment_calendar_nav.html:8 msgid "List" msgstr "Llista" -#: pretix/base/settings.py:1872 pretix/base/settings.py:1880 +#: pretix/base/settings.py:1885 pretix/base/settings.py:1893 #, fuzzy #| msgid "Weekday" msgid "Week calendar" msgstr "Dia de la setmana" -#: pretix/base/settings.py:1873 pretix/base/settings.py:1881 +#: pretix/base/settings.py:1886 pretix/base/settings.py:1894 #, fuzzy #| msgid "Cached ticket files" msgid "Month calendar" msgstr "Fitxers dels tiquets en memòria cau" -#: pretix/base/settings.py:1877 +#: pretix/base/settings.py:1890 msgid "Default overview style" msgstr "" -#: pretix/base/settings.py:1883 +#: pretix/base/settings.py:1896 msgid "" "If your event series has more than 50 dates in the future, only the month or " "week calendar can be used." msgstr "" -#: pretix/base/settings.py:1892 +#: pretix/base/settings.py:1905 msgid "Show filter options for calendar or list view" msgstr "" -#: pretix/base/settings.py:1893 +#: pretix/base/settings.py:1906 #, fuzzy #| msgid "The selected product is not active or has no price set." msgid "" @@ -11859,55 +12048,55 @@ msgid "" "settings." msgstr "El producte seleccionat no està actiu o no te cap preu establert." -#: pretix/base/settings.py:1902 +#: pretix/base/settings.py:1915 msgid "Hide all unavailable dates from calendar or list views" msgstr "" -#: pretix/base/settings.py:1903 pretix/base/settings.py:1914 +#: pretix/base/settings.py:1916 pretix/base/settings.py:1927 msgid "" "This option currently only affects the calendar of this event series, not " "the organizer-wide calendar." msgstr "" -#: pretix/base/settings.py:1913 +#: pretix/base/settings.py:1926 msgid "Hide all past dates from calendar" msgstr "" -#: pretix/base/settings.py:1925 pretix/base/settings.py:1934 +#: pretix/base/settings.py:1938 pretix/base/settings.py:1947 msgid "No modifications after order was submitted" msgstr "" -#: pretix/base/settings.py:1926 pretix/base/settings.py:1935 +#: pretix/base/settings.py:1939 pretix/base/settings.py:1948 #, fuzzy #| msgid "Only pending or paid orders can be changed." msgid "Only the person who ordered can make changes" msgstr "Només es poden canviar comandes pagades o pendents." -#: pretix/base/settings.py:1927 pretix/base/settings.py:1936 +#: pretix/base/settings.py:1940 pretix/base/settings.py:1949 msgid "Both the attendee and the person who ordered can make changes" msgstr "" -#: pretix/base/settings.py:1931 +#: pretix/base/settings.py:1944 #, fuzzy #| msgid "All customers not checked in" msgid "Allow customers to modify their information" msgstr "Tots els clients que no han fet check-in" -#: pretix/base/settings.py:1946 +#: pretix/base/settings.py:1959 msgid "Allow customers to modify their information after they checked in." msgstr "" -#: pretix/base/settings.py:1947 +#: pretix/base/settings.py:1960 msgid "" "By default, no more modifications are possible for an order as soon as one " "of the tickets in the order has been checked in." msgstr "" -#: pretix/base/settings.py:1957 +#: pretix/base/settings.py:1970 msgid "Last date of modifications" msgstr "Darrera data de les modificacions" -#: pretix/base/settings.py:1958 +#: pretix/base/settings.py:1971 msgid "" "The last date users can modify details of their orders, such as attendee " "names or answers to questions. If you use the event series feature and an " @@ -11919,64 +12108,64 @@ msgstr "" "useu la funció de sèries d'esdeveniments i la comanda conté tiquets per " "múltiples dates, s'utilitzarà la data més propera." -#: pretix/base/settings.py:1969 +#: pretix/base/settings.py:1982 #, fuzzy #| msgid "Customers can cancel their paid orders" msgid "Customers can change the variation of the products they purchased" msgstr "Els clients poden cancel·lar les seves comandes pagades" -#: pretix/base/settings.py:1978 +#: pretix/base/settings.py:1991 #, fuzzy #| msgid "Customers can cancel their paid orders" msgid "Customers can change their selected add-on products" msgstr "Els clients poden cancel·lar les seves comandes pagades" -#: pretix/base/settings.py:1988 pretix/base/settings.py:1999 +#: pretix/base/settings.py:2001 pretix/base/settings.py:2012 msgid "" "Only allow changes if the resulting price is higher or equal than the " "previous price." msgstr "" -#: pretix/base/settings.py:1989 pretix/base/settings.py:2000 +#: pretix/base/settings.py:2002 pretix/base/settings.py:2013 msgid "" "Only allow changes if the resulting price is higher than the previous price." msgstr "" -#: pretix/base/settings.py:1990 pretix/base/settings.py:2001 +#: pretix/base/settings.py:2003 pretix/base/settings.py:2014 msgid "" "Only allow changes if the resulting price is equal to the previous price." msgstr "" -#: pretix/base/settings.py:1991 pretix/base/settings.py:2002 +#: pretix/base/settings.py:2004 pretix/base/settings.py:2015 msgid "" "Allow changes regardless of price, as long as no refund is required (i.e. " "the resulting price is not lower than what has already been paid)." msgstr "" -#: pretix/base/settings.py:1993 pretix/base/settings.py:2004 +#: pretix/base/settings.py:2006 pretix/base/settings.py:2017 msgid "Allow changes regardless of price, even if this results in a refund." msgstr "" -#: pretix/base/settings.py:1997 +#: pretix/base/settings.py:2010 #, fuzzy #| msgid "Require email addresses per ticket" msgid "Requirement for changed prices" msgstr "Requereix adreces de correu per tiquet" -#: pretix/base/settings.py:2015 +#: pretix/base/settings.py:2028 #, fuzzy #| msgid "Do not allow cancellations after" msgid "Do not allow changes after" msgstr "No permetis cancel·lacions després de" -#: pretix/base/settings.py:2024 +#: pretix/base/settings.py:2037 #, fuzzy #| msgctxt "invoice" #| msgid "The payment for this invoice has already been received." msgid "Allow change even though the ticket has already been checked in" msgstr "Ja s'ha rebut el pagament per a aquesta factura." -#: pretix/base/settings.py:2025 +#: pretix/base/settings.py:2038 msgid "" "By default, order changes are disabled after any ticket in the order has " "been checked in. If you check this box, this requirement is lifted. It is " @@ -11985,11 +12174,11 @@ msgid "" "limitation on price changes above." msgstr "" -#: pretix/base/settings.py:2037 +#: pretix/base/settings.py:2050 msgid "Allow individual attendees to change their ticket" msgstr "" -#: pretix/base/settings.py:2038 +#: pretix/base/settings.py:2051 msgid "" "By default, only the person who ordered the tickets can make any changes. If " "you check this box, individual attendees can also make changes. However, " @@ -11998,45 +12187,45 @@ msgid "" "customer." msgstr "" -#: pretix/base/settings.py:2050 +#: pretix/base/settings.py:2063 msgid "Customers can cancel their unpaid orders" msgstr "Els clients poden cancel·lar les seves comandes no pagades" -#: pretix/base/settings.py:2062 +#: pretix/base/settings.py:2075 #, fuzzy #| msgid "Keep a fixed cancellation fee" msgid "Charge a fixed cancellation fee" msgstr "Manté una tarifa fixa de cancel·lació" -#: pretix/base/settings.py:2063 pretix/base/settings.py:2074 -#: pretix/base/settings.py:2088 +#: pretix/base/settings.py:2076 pretix/base/settings.py:2087 +#: pretix/base/settings.py:2101 msgid "" "Only affects orders pending payments, a cancellation fee for free orders is " "never charged. Note that it will be your responsibility to claim the " "cancellation fee from the user." msgstr "" -#: pretix/base/settings.py:2073 +#: pretix/base/settings.py:2086 #, fuzzy #| msgid "Keep payment, shipping and service fees" msgid "Charge payment, shipping and service fees" msgstr "Manté les tarifes de pagament, enviament i servei" -#: pretix/base/settings.py:2087 +#: pretix/base/settings.py:2100 #, fuzzy #| msgid "Keep a percentual cancellation fee" msgid "Charge a percentual cancellation fee" msgstr "Manté una tarifa de cancel·lació percentual" -#: pretix/base/settings.py:2098 pretix/base/settings.py:2237 +#: pretix/base/settings.py:2111 pretix/base/settings.py:2250 msgid "Do not allow cancellations after" msgstr "No permetis cancel·lacions després de" -#: pretix/base/settings.py:2107 +#: pretix/base/settings.py:2120 msgid "Customers can cancel their paid orders" msgstr "Els clients poden cancel·lar les seves comandes pagades" -#: pretix/base/settings.py:2108 +#: pretix/base/settings.py:2121 msgid "" "Paid money will be automatically paid back if the payment method allows it. " "Otherwise, a manual refund will be created for you to process manually." @@ -12045,41 +12234,41 @@ msgstr "" "ho permet. D'altra manera, es crearà una devolució manual perquè la " "processeu manualment." -#: pretix/base/settings.py:2121 pretix/control/forms/orders.py:917 +#: pretix/base/settings.py:2134 pretix/control/forms/orders.py:917 msgid "Keep a fixed cancellation fee" msgstr "Manté una tarifa fixa de cancel·lació" -#: pretix/base/settings.py:2130 +#: pretix/base/settings.py:2143 msgid "Keep payment, shipping and service fees" msgstr "Manté les tarifes de pagament, enviament i servei" -#: pretix/base/settings.py:2142 pretix/control/forms/orders.py:928 +#: pretix/base/settings.py:2155 pretix/control/forms/orders.py:928 msgid "Keep a percentual cancellation fee" msgstr "Manté una tarifa de cancel·lació percentual" -#: pretix/base/settings.py:2151 +#: pretix/base/settings.py:2164 msgid "Allow customers to voluntarily choose a lower refund" msgstr "" -#: pretix/base/settings.py:2152 +#: pretix/base/settings.py:2165 msgid "" "With this option enabled, your customers can choose to get a smaller refund " "to support you." msgstr "" -#: pretix/base/settings.py:2157 +#: pretix/base/settings.py:2170 msgid "" "However, if you want us to help keep the lights on here, please consider " "using the slider below to request a smaller refund. Thank you!" msgstr "" -#: pretix/base/settings.py:2164 +#: pretix/base/settings.py:2177 #, fuzzy #| msgid "Voucher explanation" msgid "Voluntary lower refund explanation" msgstr "Explicació del val" -#: pretix/base/settings.py:2167 +#: pretix/base/settings.py:2180 msgid "" "This text will be shown in between the explanation of how the refunds work " "and the slider which your customers can use to choose the amount they would " @@ -12087,88 +12276,88 @@ msgid "" "help your organization." msgstr "" -#: pretix/base/settings.py:2182 +#: pretix/base/settings.py:2195 msgid "Step size for reduction amount" msgstr "" -#: pretix/base/settings.py:2183 +#: pretix/base/settings.py:2196 msgid "" "By default, customers can choose an arbitrary amount for you to keep. If you " "set this to e.g. 10, they will only be able to choose values in increments " "of 10." msgstr "" -#: pretix/base/settings.py:2193 +#: pretix/base/settings.py:2206 msgid "" "Customers can only request a cancellation that needs to be approved by the " "event organizer before the order is canceled and a refund is issued." msgstr "" -#: pretix/base/settings.py:2203 +#: pretix/base/settings.py:2216 msgid "" "Do not show the cancellation fee to users when they request cancellation." msgstr "" -#: pretix/base/settings.py:2212 pretix/base/settings.py:2222 +#: pretix/base/settings.py:2225 pretix/base/settings.py:2235 msgid "All refunds are issued to the original payment method" msgstr "" -#: pretix/base/settings.py:2213 pretix/base/settings.py:2223 +#: pretix/base/settings.py:2226 pretix/base/settings.py:2236 msgid "" "Customers can choose between a gift card and a refund to their payment method" msgstr "" -#: pretix/base/settings.py:2214 pretix/base/settings.py:2224 +#: pretix/base/settings.py:2227 pretix/base/settings.py:2237 #, fuzzy #| msgid "Gift card" msgid "All refunds are issued as gift cards" msgstr "Targeta regal" -#: pretix/base/settings.py:2215 pretix/base/settings.py:2225 +#: pretix/base/settings.py:2228 pretix/base/settings.py:2238 msgid "Do not handle refunds automatically at all" msgstr "" -#: pretix/base/settings.py:2220 +#: pretix/base/settings.py:2233 #: pretix/control/templates/pretixcontrol/order/index.html:182 #, fuzzy #| msgid "Refund requested" msgid "Refund method" msgstr "S'ha demanat un reemborsament" -#: pretix/base/settings.py:2246 pretix/base/settings.py:2259 +#: pretix/base/settings.py:2259 pretix/base/settings.py:2272 #, fuzzy #| msgid "Keep a percentual cancellation fee" msgid "Terms of cancellation" msgstr "Manté una tarifa de cancel·lació percentual" -#: pretix/base/settings.py:2249 +#: pretix/base/settings.py:2262 msgid "" "This text will be shown when cancellation is allowed for a paid order. Leave " "empty if you want pretix to automatically generate the terms of cancellation " "based on your settings." msgstr "" -#: pretix/base/settings.py:2262 +#: pretix/base/settings.py:2275 msgid "" "This text will be shown when cancellation is allowed for an unpaid or free " "order. Leave empty if you want pretix to automatically generate the terms of " "cancellation based on your settings." msgstr "" -#: pretix/base/settings.py:2272 pretix/control/forms/event.py:1898 +#: pretix/base/settings.py:2285 pretix/control/forms/event.py:1898 msgid "Contact address" msgstr "Adreça de contacte" -#: pretix/base/settings.py:2273 pretix/control/forms/event.py:1900 +#: pretix/base/settings.py:2286 pretix/control/forms/event.py:1900 msgid "We'll show this publicly to allow attendees to contact you." msgstr "" "Això es mostrarà públicament per permetre que els assistents us contactin." -#: pretix/base/settings.py:2281 pretix/control/forms/event.py:1892 +#: pretix/base/settings.py:2294 pretix/control/forms/event.py:1892 msgid "Imprint URL" msgstr "Imprimeix l'URL" -#: pretix/base/settings.py:2282 pretix/control/forms/event.py:1893 +#: pretix/base/settings.py:2295 pretix/control/forms/event.py:1893 msgid "" "This should point e.g. to a part of your website that has your contact " "details and legal information." @@ -12176,11 +12365,11 @@ msgstr "" "Això hauria d'apuntar a una part del vostre lloc web amb els vostres detalls " "de contacte i informació legal." -#: pretix/base/settings.py:2292 +#: pretix/base/settings.py:2305 msgid "Privacy Policy URL" msgstr "" -#: pretix/base/settings.py:2293 +#: pretix/base/settings.py:2306 #, fuzzy #| msgid "" #| "This should point e.g. to a part of your website that has your contact " @@ -12192,13 +12381,13 @@ msgstr "" "Això hauria d'apuntar a una part del vostre lloc web amb els vostres detalls " "de contacte i informació legal." -#: pretix/base/settings.py:2304 +#: pretix/base/settings.py:2317 #, fuzzy #| msgid "Account information changed" msgid "Accessibility information URL" msgstr "S'ha canviat la informació del compte" -#: pretix/base/settings.py:2305 +#: pretix/base/settings.py:2318 #, fuzzy #| msgid "" #| "This should point e.g. to a part of your website that has your contact " @@ -12210,7 +12399,7 @@ msgstr "" "Això hauria d'apuntar a una part del vostre lloc web amb els vostres detalls " "de contacte i informació legal." -#: pretix/base/settings.py:2312 +#: pretix/base/settings.py:2325 #: pretix/presale/templates/pretixpresale/event/base.html:229 #: pretix/presale/templates/pretixpresale/event/base.html:234 #: pretix/presale/templates/pretixpresale/organizers/accessibility.html:6 @@ -12221,32 +12410,32 @@ msgstr "" msgid "Accessibility information" msgstr "S'ha canviat la informació del compte" -#: pretix/base/settings.py:2316 +#: pretix/base/settings.py:2329 #, fuzzy #| msgid "Account information changed" msgid "Accessibility information title" msgstr "S'ha canviat la informació del compte" -#: pretix/base/settings.py:2326 +#: pretix/base/settings.py:2339 #, fuzzy #| msgid "Account information changed" msgid "Accessibility information text" msgstr "S'ha canviat la informació del compte" -#: pretix/base/settings.py:2347 +#: pretix/base/settings.py:2360 #, fuzzy #| msgid "Cached ticket files" msgid "Attach ticket files" msgstr "Fitxers dels tiquets en memòria cau" -#: pretix/base/settings.py:2349 +#: pretix/base/settings.py:2362 #, python-brace-format msgid "" "Tickets will never be attached if they're larger than {size} to avoid email " "delivery problems." msgstr "" -#: pretix/base/settings.py:2360 pretix/plugins/sendmail/forms.py:201 +#: pretix/base/settings.py:2373 pretix/plugins/sendmail/forms.py:201 #: pretix/plugins/sendmail/models.py:263 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:66 #, fuzzy @@ -12254,29 +12443,29 @@ msgstr "" msgid "Attach calendar files" msgstr "Fitxers dels tiquets en memòria cau" -#: pretix/base/settings.py:2361 +#: pretix/base/settings.py:2374 msgid "" "If enabled, we will attach an .ics calendar file to order confirmation " "emails." msgstr "" -#: pretix/base/settings.py:2370 +#: pretix/base/settings.py:2383 msgid "Attach calendar files only after order has been paid" msgstr "" -#: pretix/base/settings.py:2371 +#: pretix/base/settings.py:2384 msgid "" "Use this if you e.g. put a private access link into the calendar file to " "make sure people only receive it after their payment was confirmed." msgstr "" -#: pretix/base/settings.py:2380 +#: pretix/base/settings.py:2393 #, fuzzy #| msgid "Product description" msgid "Event description" msgstr "Descripció del producte" -#: pretix/base/settings.py:2383 +#: pretix/base/settings.py:2396 msgid "" "You can use this to share information with your attendees, such as travel " "information or the link to a digital event. If you keep it empty, we will " @@ -12286,11 +12475,11 @@ msgid "" "people." msgstr "" -#: pretix/base/settings.py:2396 +#: pretix/base/settings.py:2409 msgid "Subject prefix" msgstr "Prefix de l'assumpte" -#: pretix/base/settings.py:2397 +#: pretix/base/settings.py:2410 msgid "" "This will be prepended to the subject of all outgoing emails, formatted as " "[prefix]. Choose, for example, a short form of your event name." @@ -12298,44 +12487,44 @@ msgstr "" "Això s'anteposarà a l'assumpte de tots els correus sortints, formatat com " "[prefix]. Trieu per exemple una forma curta del nom del vostre esdeveniment." -#: pretix/base/settings.py:2411 pretix/control/forms/mailsetup.py:37 +#: pretix/base/settings.py:2424 pretix/control/forms/mailsetup.py:37 #: pretix/control/forms/mailsetup.py:119 #: pretix/control/templates/pretixcontrol/event/mail.html:39 #: pretix/control/templates/pretixcontrol/organizers/mail.html:40 msgid "Sender address" msgstr "Adreça de l'emisor" -#: pretix/base/settings.py:2412 pretix/control/forms/mailsetup.py:38 +#: pretix/base/settings.py:2425 pretix/control/forms/mailsetup.py:38 #: pretix/control/forms/mailsetup.py:120 msgid "Sender address for outgoing emails" msgstr "L'adreça de l'emissor pels correus sortints" -#: pretix/base/settings.py:2421 +#: pretix/base/settings.py:2434 #, fuzzy #| msgid "Attendee name" msgid "Sender name" msgstr "Nom de l'assistent" -#: pretix/base/settings.py:2422 +#: pretix/base/settings.py:2435 msgid "" "Sender name used in conjunction with the sender address for outgoing emails. " "Defaults to your event name." msgstr "" -#: pretix/base/settings.py:2440 pretix/base/settings.py:2497 -#: pretix/base/settings.py:2514 pretix/base/settings.py:2532 +#: pretix/base/settings.py:2453 pretix/base/settings.py:2510 +#: pretix/base/settings.py:2527 pretix/base/settings.py:2545 #, python-brace-format msgid "Your order: {code}" msgstr "La vostra comanda: {code}" -#: pretix/base/settings.py:2444 pretix/base/settings.py:2477 -#: pretix/base/settings.py:2582 pretix/base/settings.py:2815 -#: pretix/base/settings.py:2852 +#: pretix/base/settings.py:2457 pretix/base/settings.py:2490 +#: pretix/base/settings.py:2595 pretix/base/settings.py:2828 +#: pretix/base/settings.py:2865 #, python-brace-format msgid "Your event registration: {code}" msgstr "El vostre registre: {code}" -#: pretix/base/settings.py:2448 +#: pretix/base/settings.py:2461 #, python-brace-format msgid "" "Hello,\n" @@ -12360,12 +12549,12 @@ msgstr "" "Atentament, \n" "l'equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2461 +#: pretix/base/settings.py:2474 #, python-brace-format msgid "Your orders for {event}" msgstr "Les vostres comandes per a {event}" -#: pretix/base/settings.py:2465 +#: pretix/base/settings.py:2478 #, python-brace-format msgid "" "Hello,\n" @@ -12388,7 +12577,7 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2481 +#: pretix/base/settings.py:2494 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -12421,7 +12610,7 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2501 +#: pretix/base/settings.py:2514 #, python-brace-format msgid "" "Hello,\n" @@ -12447,7 +12636,7 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2518 +#: pretix/base/settings.py:2531 #, python-brace-format msgid "" "Hello,\n" @@ -12475,7 +12664,7 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2536 +#: pretix/base/settings.py:2549 #, python-brace-format msgid "" "Hello,\n" @@ -12506,13 +12695,13 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2554 +#: pretix/base/settings.py:2567 #, fuzzy #| msgid "Can view orders" msgid "Attachment for new orders" msgstr "Pot veure les comandes" -#: pretix/base/settings.py:2559 +#: pretix/base/settings.py:2572 #, python-brace-format msgid "" "This file will be attached to the first email that we send for every new " @@ -12524,7 +12713,7 @@ msgid "" "vital email going to spam, you can only upload PDF files of up to {size} MB." msgstr "" -#: pretix/base/settings.py:2586 +#: pretix/base/settings.py:2599 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -12557,12 +12746,12 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2598 +#: pretix/base/settings.py:2611 #, python-brace-format msgid "Your order has been changed: {code}" msgstr "Ha canviat la vostra comanda: {code}" -#: pretix/base/settings.py:2602 +#: pretix/base/settings.py:2615 #, python-brace-format msgid "" "Hello,\n" @@ -12585,12 +12774,12 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2614 +#: pretix/base/settings.py:2627 #, python-brace-format msgid "Payment received for your order: {code}" msgstr "S'ha rebut el pagament per a la vostra comanda: {code}" -#: pretix/base/settings.py:2618 +#: pretix/base/settings.py:2631 #, python-brace-format msgid "" "Hello,\n" @@ -12617,12 +12806,12 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2636 +#: pretix/base/settings.py:2649 #, python-brace-format msgid "Event registration confirmed: {code}" msgstr "Registre confirmat: {code}" -#: pretix/base/settings.py:2640 +#: pretix/base/settings.py:2653 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -12655,12 +12844,12 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2657 pretix/control/forms/event.py:1294 +#: pretix/base/settings.py:2670 pretix/control/forms/event.py:1294 #: pretix/control/forms/event.py:1416 pretix/plugins/sendmail/models.py:268 msgid "Number of days" msgstr "Número de dies" -#: pretix/base/settings.py:2659 pretix/control/forms/event.py:1297 +#: pretix/base/settings.py:2672 pretix/control/forms/event.py:1297 msgid "" "This email will be sent out this many days before the order expires. If the " "value is 0, the mail will never be sent." @@ -12668,12 +12857,12 @@ msgstr "" "Aquest correu s'enviarà aquest número de dies abans de que la comanda " "expiri. Si el valor és 0 no s'enviarà mai el correu." -#: pretix/base/settings.py:2667 +#: pretix/base/settings.py:2680 #, python-brace-format msgid "Your order is about to expire: {code}" msgstr "La vostra comanda està a punt d'expirar: {code}" -#: pretix/base/settings.py:2671 +#: pretix/base/settings.py:2684 #, python-brace-format msgid "" "Hello,\n" @@ -12700,12 +12889,12 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2685 +#: pretix/base/settings.py:2698 #, python-brace-format msgid "Your order is pending payment: {code}" msgstr "La vostra comanda està pendent de pagament: {code}" -#: pretix/base/settings.py:2689 +#: pretix/base/settings.py:2702 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -12743,13 +12932,13 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2702 +#: pretix/base/settings.py:2715 #, fuzzy, python-brace-format #| msgid "Payment received for your order: {code}" msgid "Incomplete payment received: {code}" msgstr "S'ha rebut el pagament per a la vostra comanda: {code}" -#: pretix/base/settings.py:2706 +#: pretix/base/settings.py:2719 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -12790,13 +12979,13 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2722 +#: pretix/base/settings.py:2735 #, fuzzy, python-brace-format #| msgid "Payment received for your order: {code}" msgid "Payment failed for your order: {code}" msgstr "S'ha rebut el pagament per a la vostra comanda: {code}" -#: pretix/base/settings.py:2726 +#: pretix/base/settings.py:2739 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -12837,12 +13026,12 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2740 +#: pretix/base/settings.py:2753 #, python-brace-format msgid "You have been selected from the waitinglist for {event}" msgstr "Heu sigut seleccionats de la llista d'espera de {event}" -#: pretix/base/settings.py:2744 +#: pretix/base/settings.py:2757 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -12917,12 +13106,12 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2773 +#: pretix/base/settings.py:2786 #, python-brace-format msgid "Order canceled: {code}" msgstr "S'ha cancel·lat la comanda: {code}" -#: pretix/base/settings.py:2777 +#: pretix/base/settings.py:2790 #, python-brace-format msgid "" "Hello,\n" @@ -12949,12 +13138,12 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2791 +#: pretix/base/settings.py:2804 #, python-brace-format msgid "Order approved and awaiting payment: {code}" msgstr "S'ha aprovat i està pendent de pagament la comanda: {code}" -#: pretix/base/settings.py:2795 +#: pretix/base/settings.py:2808 #, python-brace-format msgid "" "Hello,\n" @@ -12986,7 +13175,7 @@ msgstr "" "Atentament, \n" "l'equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2819 pretix/base/settings.py:2856 +#: pretix/base/settings.py:2832 pretix/base/settings.py:2869 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -13019,12 +13208,12 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2831 +#: pretix/base/settings.py:2844 #, python-brace-format msgid "Order approved and confirmed: {code}" msgstr "S'ha confirmat i aprovat la comanda: {code}" -#: pretix/base/settings.py:2835 +#: pretix/base/settings.py:2848 #, python-brace-format msgid "" "Hello,\n" @@ -13050,12 +13239,12 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2868 +#: pretix/base/settings.py:2881 #, python-brace-format msgid "Order denied: {code}" msgstr "S'ha denegat la comanda: {code}" -#: pretix/base/settings.py:2872 +#: pretix/base/settings.py:2885 #, python-brace-format msgid "" "Hello,\n" @@ -13084,7 +13273,7 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2887 +#: pretix/base/settings.py:2900 #, python-brace-format msgid "" "Hello,\n" @@ -13103,13 +13292,13 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2897 +#: pretix/base/settings.py:2910 #, fuzzy, python-brace-format #| msgid "Invoice number" msgid "Invoice {invoice_number}" msgstr "Número de la factura" -#: pretix/base/settings.py:2901 +#: pretix/base/settings.py:2914 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -13141,12 +13330,12 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2919 pretix/base/settings.py:2935 +#: pretix/base/settings.py:2932 pretix/base/settings.py:2948 #, python-brace-format msgid "Your ticket is ready for download: {code}" msgstr "Està llest per la descàrrega el vostre tiquet: {code}" -#: pretix/base/settings.py:2923 +#: pretix/base/settings.py:2936 #, fuzzy, python-brace-format #| msgid "" #| "Hello,\n" @@ -13179,7 +13368,7 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2939 +#: pretix/base/settings.py:2952 #, python-brace-format msgid "" "Hello,\n" @@ -13202,12 +13391,12 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/base/settings.py:2951 +#: pretix/base/settings.py:2964 #, python-brace-format msgid "Activate your account at {organizer}" msgstr "" -#: pretix/base/settings.py:2955 +#: pretix/base/settings.py:2968 #, python-brace-format msgid "" "Hello {name},\n" @@ -13227,12 +13416,12 @@ msgid "" "Your {organizer} team" msgstr "" -#: pretix/base/settings.py:2973 +#: pretix/base/settings.py:2986 #, python-brace-format msgid "Confirm email address for your account at {organizer}" msgstr "" -#: pretix/base/settings.py:2977 +#: pretix/base/settings.py:2990 #, python-brace-format msgid "" "Hello {name},\n" @@ -13252,12 +13441,12 @@ msgid "" "Your {organizer} team" msgstr "" -#: pretix/base/settings.py:2995 +#: pretix/base/settings.py:3008 #, python-brace-format msgid "Set a new password for your account at {organizer}" msgstr "" -#: pretix/base/settings.py:2999 +#: pretix/base/settings.py:3012 #, python-brace-format msgid "" "Hello {name},\n" @@ -13277,13 +13466,13 @@ msgid "" "Your {organizer} team" msgstr "" -#: pretix/base/settings.py:3017 +#: pretix/base/settings.py:3030 #, fuzzy, python-brace-format #| msgid "All organizers" msgid "Changes to your account at {organizer}" msgstr "Tots els organitzadors" -#: pretix/base/settings.py:3021 +#: pretix/base/settings.py:3034 #, python-brace-format msgid "" "Hello {name},\n" @@ -13303,60 +13492,60 @@ msgid "" "Your {organizer} team" msgstr "" -#: pretix/base/settings.py:3073 pretix/base/settings.py:3080 -#: pretix/base/settings.py:3094 pretix/base/settings.py:3102 -#: pretix/base/settings.py:3116 pretix/base/settings.py:3124 -#: pretix/base/settings.py:3138 pretix/base/settings.py:3145 +#: pretix/base/settings.py:3086 pretix/base/settings.py:3093 +#: pretix/base/settings.py:3107 pretix/base/settings.py:3115 +#: pretix/base/settings.py:3129 pretix/base/settings.py:3137 +#: pretix/base/settings.py:3151 pretix/base/settings.py:3158 msgid "Please enter the hexadecimal code of a color, e.g. #990000." msgstr "" "Si us plau, introduïu el codi hexadecimal d'un color, per exemple #990000." -#: pretix/base/settings.py:3077 +#: pretix/base/settings.py:3090 msgid "Primary color" msgstr "Color primari" -#: pretix/base/settings.py:3098 +#: pretix/base/settings.py:3111 msgid "Accent color for success" msgstr "Destaca el color del encerts" -#: pretix/base/settings.py:3099 +#: pretix/base/settings.py:3112 msgid "We strongly suggest to use a shade of green." msgstr "Recomanem fermament utilitzar un to verdós." -#: pretix/base/settings.py:3120 +#: pretix/base/settings.py:3133 msgid "Accent color for errors" msgstr "Destaca el color dels errors" -#: pretix/base/settings.py:3121 +#: pretix/base/settings.py:3134 msgid "We strongly suggest to use a shade of red." msgstr "" -#: pretix/base/settings.py:3142 +#: pretix/base/settings.py:3155 msgid "Page background color" msgstr "" -#: pretix/base/settings.py:3157 +#: pretix/base/settings.py:3170 msgid "Use round edges" msgstr "" -#: pretix/base/settings.py:3166 +#: pretix/base/settings.py:3179 msgid "" "Use native spinners in the widget instead of custom ones for numeric inputs " "such as quantity." msgstr "" -#: pretix/base/settings.py:3177 +#: pretix/base/settings.py:3190 msgid "Only respected by modern browsers." msgstr "Només ho respecten els navegadors moderns." -#: pretix/base/settings.py:3188 pretix/base/settings.py:3232 -#: pretix/control/forms/organizer.py:642 +#: pretix/base/settings.py:3201 pretix/base/settings.py:3245 +#: pretix/control/forms/organizer.py:652 #, fuzzy #| msgid "Attendee name" msgid "Header image" msgstr "Nom de l'assistent" -#: pretix/base/settings.py:3191 +#: pretix/base/settings.py:3204 #, fuzzy #| msgid "" #| "If you provide a logo image, we will by default not show your events name " @@ -13373,26 +13562,26 @@ msgstr "" "el nom i la data de l'esdeveniment a la capçalera de la pàgina. Mostrarem el " "vostre logo amb una alçada màxima de 120 píxels." -#: pretix/base/settings.py:3212 pretix/base/settings.py:3255 +#: pretix/base/settings.py:3225 pretix/base/settings.py:3268 msgid "Use header image in its full size" msgstr "" -#: pretix/base/settings.py:3213 pretix/base/settings.py:3256 +#: pretix/base/settings.py:3226 pretix/base/settings.py:3269 msgid "We recommend to upload a picture at least 1170 pixels wide." msgstr "" -#: pretix/base/settings.py:3222 +#: pretix/base/settings.py:3235 msgid "Show event title even if a header image is present" msgstr "" -#: pretix/base/settings.py:3223 +#: pretix/base/settings.py:3236 msgid "" "The title will only be shown on the event front page. If no header image is " "uploaded for the event, but the header image from the organizer profile is " "used, this option will be ignored and the event title will always be shown." msgstr "" -#: pretix/base/settings.py:3235 pretix/control/forms/organizer.py:646 +#: pretix/base/settings.py:3248 pretix/control/forms/organizer.py:656 #, fuzzy #| msgid "" #| "If you provide a logo image, we will by default not show your events name " @@ -13409,25 +13598,25 @@ msgstr "" "el nom i la data de l'esdeveniment a la capçalera de la pàgina. Mostrarem el " "vostre logo amb una alçada màxima de 120 píxels." -#: pretix/base/settings.py:3265 +#: pretix/base/settings.py:3278 msgid "Use header image also for events without an individually uploaded logo" msgstr "" -#: pretix/base/settings.py:3273 +#: pretix/base/settings.py:3286 msgid "Favicon" msgstr "" -#: pretix/base/settings.py:3276 +#: pretix/base/settings.py:3289 msgid "" "If you provide a favicon, we will show it instead of the default pretix " "icon. We recommend a size of at least 200x200px to accommodate most devices." msgstr "" -#: pretix/base/settings.py:3292 +#: pretix/base/settings.py:3305 msgid "Social media image" msgstr "" -#: pretix/base/settings.py:3295 +#: pretix/base/settings.py:3308 msgid "" "This picture will be used as a preview if you post links to your ticket shop " "on social media. Facebook advises to use a picture size of 1200 x 630 " @@ -13436,29 +13625,29 @@ msgid "" "square is shown. If you do not fill this, we will use the logo given above." msgstr "" -#: pretix/base/settings.py:3313 +#: pretix/base/settings.py:3326 msgid "Logo image" msgstr "Imatge del logo" -#: pretix/base/settings.py:3317 +#: pretix/base/settings.py:3330 msgid "We will show your logo with a maximal height and width of 2.5 cm." msgstr "Mostrarem el vostre logo amb una alçada i amplada màxima de 2,5 cm." -#: pretix/base/settings.py:3344 pretix/base/settings.py:3450 +#: pretix/base/settings.py:3357 pretix/base/settings.py:3463 msgid "Info text" msgstr "" -#: pretix/base/settings.py:3347 pretix/base/settings.py:3452 +#: pretix/base/settings.py:3360 pretix/base/settings.py:3465 msgid "" "Not displayed anywhere by default, but if you want to, you can use this e.g. " "in ticket templates." msgstr "" -#: pretix/base/settings.py:3356 +#: pretix/base/settings.py:3369 msgid "Banner text (top)" msgstr "" -#: pretix/base/settings.py:3359 +#: pretix/base/settings.py:3372 #, fuzzy #| msgid "" #| "This text will be shown above the payment options. You can explain the " @@ -13470,21 +13659,21 @@ msgstr "" "Aquest text es mostrarà a sobre de les opcions de pagament. Podeu explicar " "aquí si voleu les opcions a l'usuari." -#: pretix/base/settings.py:3369 +#: pretix/base/settings.py:3382 msgid "Banner text (bottom)" msgstr "" -#: pretix/base/settings.py:3372 +#: pretix/base/settings.py:3385 msgid "" "This text will be shown below every page of your shop. Please only use this " "for very important messages." msgstr "" -#: pretix/base/settings.py:3382 +#: pretix/base/settings.py:3395 msgid "Voucher explanation" msgstr "Explicació del val" -#: pretix/base/settings.py:3385 +#: pretix/base/settings.py:3398 msgid "" "This text will be shown next to the input for a voucher code. You can use it " "e.g. to explain how to obtain a voucher code." @@ -13492,13 +13681,13 @@ msgstr "" "Aquest text es mostrarà al costat de l'entrada del codi del val. Ho podeu " "utilitzar per explicar com obtenir un codi de val." -#: pretix/base/settings.py:3395 +#: pretix/base/settings.py:3408 #, fuzzy #| msgid "Attendee name" msgid "Attendee data explanation" msgstr "Nom de l'assistent" -#: pretix/base/settings.py:3398 +#: pretix/base/settings.py:3411 #, fuzzy #| msgid "" #| "This text will be shown next to the input for a voucher code. You can use " @@ -13510,23 +13699,23 @@ msgstr "" "Aquest text es mostrarà al costat de l'entrada del codi del val. Ho podeu " "utilitzar per explicar com obtenir un codi de val." -#: pretix/base/settings.py:3408 +#: pretix/base/settings.py:3421 #, fuzzy #| msgid "Additional fee" msgid "Additional success message" msgstr "Tarifa addicional" -#: pretix/base/settings.py:3409 +#: pretix/base/settings.py:3422 msgid "" "This message will be shown after an order has been created successfully. It " "will be shown in additional to the default text." msgstr "" -#: pretix/base/settings.py:3421 +#: pretix/base/settings.py:3434 msgid "Help text of the phone number field" msgstr "" -#: pretix/base/settings.py:3428 +#: pretix/base/settings.py:3441 msgid "" "Make sure to enter a valid email address. We will send you an order " "confirmation including a link that you need to access your order later." @@ -13535,15 +13724,15 @@ msgstr "" "confirmació amb un enllaç que us farà falta per accedir a la comanda més " "endavant." -#: pretix/base/settings.py:3435 +#: pretix/base/settings.py:3448 msgid "Help text of the email field" msgstr "" -#: pretix/base/settings.py:3461 +#: pretix/base/settings.py:3474 msgid "Allow creating a new team during event creation" msgstr "" -#: pretix/base/settings.py:3462 +#: pretix/base/settings.py:3475 msgid "" "Users that do not have access to all events under this organizer, must " "select one of their teams to have access to the created event. This setting " @@ -13551,74 +13740,74 @@ msgid "" "not have \"Can change teams and permissions\" permission." msgstr "" -#: pretix/base/settings.py:3534 pretix/base/settings.py:3544 +#: pretix/base/settings.py:3547 pretix/base/settings.py:3557 msgid "Event start time (descending)" msgstr "Hora d'inici de l'esdeveniment (descendent)" -#: pretix/base/settings.py:3536 pretix/base/settings.py:3546 +#: pretix/base/settings.py:3549 pretix/base/settings.py:3559 msgid "Name (descending)" msgstr "Nom (descendent)" -#: pretix/base/settings.py:3541 +#: pretix/base/settings.py:3554 msgctxt "subevent" msgid "Date ordering" msgstr "Ordenació de la data" -#: pretix/base/settings.py:3557 +#: pretix/base/settings.py:3570 msgid "Link back to organizer overview on all event pages" msgstr "" -#: pretix/base/settings.py:3566 +#: pretix/base/settings.py:3579 msgid "Homepage text" msgstr "" -#: pretix/base/settings.py:3568 +#: pretix/base/settings.py:3581 msgid "This will be displayed on the organizer homepage." msgstr "" -#: pretix/base/settings.py:3583 +#: pretix/base/settings.py:3596 #, fuzzy #| msgid "Gift card" msgid "Length of gift card codes" msgstr "Targeta regal" -#: pretix/base/settings.py:3584 +#: pretix/base/settings.py:3597 #, python-brace-format msgid "" "The system generates by default {}-character long gift card codes. However, " "if a different length is required, it can be set here." msgstr "" -#: pretix/base/settings.py:3600 +#: pretix/base/settings.py:3613 #, fuzzy #| msgid "Gift card" msgid "Validity of gift card codes in years" msgstr "Targeta regal" -#: pretix/base/settings.py:3601 +#: pretix/base/settings.py:3614 msgid "" "If you set a number here, gift cards will by default expire at the end of " "the year after this many years. If you keep it empty, gift cards do not have " "an explicit expiry date." msgstr "" -#: pretix/base/settings.py:3612 +#: pretix/base/settings.py:3625 msgid "Enable cookie consent management features" msgstr "" -#: pretix/base/settings.py:3618 +#: pretix/base/settings.py:3631 msgid "" "By clicking \"Accept all cookies\", you agree to the storing of cookies and " "use of similar technologies on your device." msgstr "" -#: pretix/base/settings.py:3625 +#: pretix/base/settings.py:3638 #, fuzzy #| msgid "Additional text" msgid "Dialog text" msgstr "Text addicional" -#: pretix/base/settings.py:3632 +#: pretix/base/settings.py:3645 msgid "" "We use cookies and similar technologies to gather data that allows us to " "improve this website and our offerings. If you do not agree, we will only " @@ -13626,219 +13815,219 @@ msgid "" "offers." msgstr "" -#: pretix/base/settings.py:3640 +#: pretix/base/settings.py:3653 msgid "Secondary dialog text" msgstr "" -#: pretix/base/settings.py:3646 +#: pretix/base/settings.py:3659 #, fuzzy #| msgid "Account settings" msgid "Privacy settings" msgstr "Configuració del compte" -#: pretix/base/settings.py:3651 +#: pretix/base/settings.py:3664 msgid "Dialog title" msgstr "" -#: pretix/base/settings.py:3657 +#: pretix/base/settings.py:3670 msgid "Accept all cookies" msgstr "" -#: pretix/base/settings.py:3662 +#: pretix/base/settings.py:3675 #, fuzzy #| msgid "Product description" msgid "\"Accept\" button description" msgstr "Descripció del producte" -#: pretix/base/settings.py:3668 +#: pretix/base/settings.py:3681 #, fuzzy #| msgid "Required question" msgid "Required cookies only" msgstr "Pregunta obligatòria" -#: pretix/base/settings.py:3673 +#: pretix/base/settings.py:3686 #, fuzzy #| msgid "Product description" msgid "\"Reject\" button description" msgstr "Descripció del producte" -#: pretix/base/settings.py:3683 +#: pretix/base/settings.py:3696 #, fuzzy #| msgid "Customers can cancel their unpaid orders" msgid "Customers can choose their own seats" msgstr "Els clients poden cancel·lar les seves comandes no pagades" -#: pretix/base/settings.py:3684 +#: pretix/base/settings.py:3697 msgid "" "If disabled, you will need to manually assign seats in the backend. Note " "that this can mean people will not know their seat after their purchase and " "it might not be written on their ticket." msgstr "" -#: pretix/base/settings.py:3710 +#: pretix/base/settings.py:3723 msgid "Show button to copy user input from other products" msgstr "Mostrar el botó per copiar les entrades d'altres productes" -#: pretix/base/settings.py:3724 +#: pretix/base/settings.py:3737 msgid "Most common English titles" msgstr "" -#: pretix/base/settings.py:3734 +#: pretix/base/settings.py:3747 msgid "Most common German titles" msgstr "" -#: pretix/base/settings.py:3747 +#: pretix/base/settings.py:3760 msgctxt "person_name_salutation" msgid "Ms" msgstr "Sra" -#: pretix/base/settings.py:3748 +#: pretix/base/settings.py:3761 msgctxt "person_name_salutation" msgid "Mr" msgstr "Sr" -#: pretix/base/settings.py:3749 +#: pretix/base/settings.py:3762 msgctxt "person_name_salutation" msgid "Mx" msgstr "" -#: pretix/base/settings.py:3786 pretix/base/settings.py:3802 -#: pretix/base/settings.py:3818 pretix/base/settings.py:3833 -#: pretix/base/settings.py:3851 pretix/base/settings.py:3866 -#: pretix/base/settings.py:3896 pretix/base/settings.py:3920 -#: pretix/base/settings.py:3952 pretix/base/settings.py:3974 -#: pretix/base/settings.py:4005 +#: pretix/base/settings.py:3799 pretix/base/settings.py:3815 +#: pretix/base/settings.py:3831 pretix/base/settings.py:3846 +#: pretix/base/settings.py:3864 pretix/base/settings.py:3879 +#: pretix/base/settings.py:3909 pretix/base/settings.py:3933 +#: pretix/base/settings.py:3965 pretix/base/settings.py:3987 +#: pretix/base/settings.py:4018 msgctxt "person_name_sample" msgid "John" msgstr "Jaume" -#: pretix/base/settings.py:3787 pretix/base/settings.py:3803 -#: pretix/base/settings.py:3819 pretix/base/settings.py:3835 -#: pretix/base/settings.py:3853 pretix/base/settings.py:3867 -#: pretix/base/settings.py:3897 pretix/base/settings.py:3953 -#: pretix/base/settings.py:3975 pretix/base/settings.py:4006 +#: pretix/base/settings.py:3800 pretix/base/settings.py:3816 +#: pretix/base/settings.py:3832 pretix/base/settings.py:3848 +#: pretix/base/settings.py:3866 pretix/base/settings.py:3880 +#: pretix/base/settings.py:3910 pretix/base/settings.py:3966 +#: pretix/base/settings.py:3988 pretix/base/settings.py:4019 msgctxt "person_name_sample" msgid "Doe" msgstr "Fuster" -#: pretix/base/settings.py:3793 pretix/base/settings.py:3809 -#: pretix/base/settings.py:3841 pretix/base/settings.py:3960 -#: pretix/base/settings.py:3982 +#: pretix/base/settings.py:3806 pretix/base/settings.py:3822 +#: pretix/base/settings.py:3854 pretix/base/settings.py:3973 +#: pretix/base/settings.py:3995 msgctxt "person_name" msgid "Title" msgstr "Títol" -#: pretix/base/settings.py:3801 pretix/base/settings.py:3817 -#: pretix/base/settings.py:3850 pretix/base/settings.py:3973 -#: pretix/base/settings.py:4004 +#: pretix/base/settings.py:3814 pretix/base/settings.py:3830 +#: pretix/base/settings.py:3863 pretix/base/settings.py:3986 +#: pretix/base/settings.py:4017 msgctxt "person_name_sample" msgid "Dr" msgstr "Dr." -#: pretix/base/settings.py:3825 pretix/base/settings.py:3842 +#: pretix/base/settings.py:3838 pretix/base/settings.py:3855 msgid "First name" msgstr "Nom" -#: pretix/base/settings.py:3826 pretix/base/settings.py:3843 +#: pretix/base/settings.py:3839 pretix/base/settings.py:3856 msgid "Middle name" msgstr "Cognom" -#: pretix/base/settings.py:3907 pretix/base/settings.py:3919 -#: pretix/control/forms/organizer.py:793 +#: pretix/base/settings.py:3920 pretix/base/settings.py:3932 +#: pretix/control/forms/organizer.py:803 msgctxt "person_name_sample" msgid "John Doe" msgstr "Jaume Fuster" -#: pretix/base/settings.py:3913 +#: pretix/base/settings.py:3926 msgid "Calling name" msgstr "Nom" -#: pretix/base/settings.py:3927 +#: pretix/base/settings.py:3940 msgid "Latin transcription" msgstr "Transcripció llatina" -#: pretix/base/settings.py:3939 pretix/base/settings.py:3959 -#: pretix/base/settings.py:3981 +#: pretix/base/settings.py:3952 pretix/base/settings.py:3972 +#: pretix/base/settings.py:3994 msgctxt "person_name" msgid "Salutation" msgstr "Salutació" -#: pretix/base/settings.py:3951 pretix/base/settings.py:3972 -#: pretix/base/settings.py:4003 +#: pretix/base/settings.py:3964 pretix/base/settings.py:3985 +#: pretix/base/settings.py:4016 msgctxt "person_name_sample" msgid "Mr" msgstr "Sr" -#: pretix/base/settings.py:3985 +#: pretix/base/settings.py:3998 msgctxt "person_name" msgid "Degree (after name)" msgstr "Grau (després del nom)" -#: pretix/base/settings.py:4007 +#: pretix/base/settings.py:4020 msgctxt "person_name_sample" msgid "MA" msgstr "" -#: pretix/base/settings.py:4033 pretix/base/settings.py:4035 +#: pretix/base/settings.py:4046 pretix/base/settings.py:4048 #, fuzzy #| msgid "Product name" msgctxt "address" msgid "Province" msgstr "Nom del producte" -#: pretix/base/settings.py:4034 +#: pretix/base/settings.py:4047 #, fuzzy #| msgid "Use feature" msgctxt "address" msgid "Prefecture" msgstr "Utilitza la funció" -#: pretix/base/settings.py:4125 pretix/control/forms/event.py:242 +#: pretix/base/settings.py:4138 pretix/control/forms/event.py:242 msgid "" "Your default locale must also be enabled for your event (see box above)." msgstr "" "Ha d'estar activada també la vostra configuració regional predeterminada " "(mireu el quadre de més amunt)." -#: pretix/base/settings.py:4129 +#: pretix/base/settings.py:4142 msgid "" "You cannot require specifying attendee names if you do not ask for them." msgstr "" "No podeu requerir que s'especifiquin noms d'assistents si no els demaneu." -#: pretix/base/settings.py:4133 +#: pretix/base/settings.py:4146 msgid "You have to ask for attendee emails if you want to make them required." msgstr "" "Heu de demanar els correus dels assistents si voleu que siguin un " "requeriment." -#: pretix/base/settings.py:4137 +#: pretix/base/settings.py:4150 msgid "" "You have to ask for invoice addresses if you want to make them required." msgstr "" "Heu de demanar les adreces de facturació si voleu que siguin un requeriment." -#: pretix/base/settings.py:4141 +#: pretix/base/settings.py:4154 msgid "You have to require invoice addresses to require for company names." msgstr "" "Heu de demanar les adreces de facturació per poder demanar noms d'empresa." -#: pretix/base/settings.py:4163 +#: pretix/base/settings.py:4176 #, python-brace-format msgid "VAT-ID is not supported for \"{}\"." msgstr "" -#: pretix/base/settings.py:4170 +#: pretix/base/settings.py:4183 msgid "The last payment date cannot be before the end of presale." msgstr "El darrer dia de pagament no pot ser abans de la fi de la prevenda." -#: pretix/base/settings.py:4178 +#: pretix/base/settings.py:4191 #, fuzzy, python-brace-format #| msgid "Please enter a valid sales channel." msgid "The value \"{identifier}\" is not a valid sales channel." msgstr "Si us plau, introduïu un canal de venda vàlid." -#: pretix/base/settings.py:4193 +#: pretix/base/settings.py:4206 msgid "This needs to be disabled if other NFC-based types are active." msgstr "" @@ -14039,7 +14228,7 @@ msgid "You do not have access to this page." msgstr "No teniu accés a aquesta pàgina." #: pretix/base/templates/403.html:20 pretix/base/templates/404.html:16 -#: pretix/control/templates/pretixcontrol/base.html:199 +#: pretix/control/templates/pretixcontrol/base.html:200 #: pretix/control/templates/pretixcontrol/user/staff_session_start.html:4 #: pretix/control/templates/pretixcontrol/user/staff_session_start.html:6 #: pretix/presale/templates/pretixpresale/event/offline.html:21 @@ -14217,6 +14406,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcards.html:98 #: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:114 #: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:21 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:214 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:390 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:114 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:95 @@ -14278,25 +14468,25 @@ msgstr "" msgid "%(number)s days %(relation)s %(relation_to)s at %(time_of_day)s" msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:5 -#: pretix/base/templates/pretixbase/redirect.html:9 +#: pretix/base/templates/pretixbase/redirect.html:6 +#: pretix/base/templates/pretixbase/redirect.html:10 #, fuzzy #| msgid "Redirection" msgid "Redirect" msgstr "Redirecció" -#: pretix/base/templates/pretixbase/redirect.html:11 +#: pretix/base/templates/pretixbase/redirect.html:12 #, python-format msgid "" "The link you clicked on wants to redirect you to a destination on the " "website %(host)s." msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:14 +#: pretix/base/templates/pretixbase/redirect.html:15 msgid "Please only proceed if you trust this website to be safe." msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:20 +#: pretix/base/templates/pretixbase/redirect.html:21 #, fuzzy, python-format #| msgid "Proceed with checkout" msgid "Proceed to %(host)s" @@ -14872,8 +15062,8 @@ msgid "Support for check-in questions" msgstr "" #: pretix/control/forms/checkin.py:197 pretix/control/forms/checkin.py:213 -#: pretix/control/forms/filter.py:2677 pretix/control/forms/filter.py:2719 -#: pretix/control/forms/filter.py:2884 +#: pretix/control/forms/filter.py:2683 pretix/control/forms/filter.py:2725 +#: pretix/control/forms/filter.py:2890 #, fuzzy #| msgctxt "subevent" #| msgid "All dates" @@ -15032,11 +15222,11 @@ msgid "" "{error}" msgstr "" -#: pretix/control/forms/event.py:587 pretix/control/forms/organizer.py:579 +#: pretix/control/forms/event.py:587 pretix/control/forms/organizer.py:588 msgid "Name format" msgstr "Format del nom" -#: pretix/control/forms/event.py:588 pretix/control/forms/organizer.py:580 +#: pretix/control/forms/event.py:588 pretix/control/forms/organizer.py:589 msgid "" "This defines how pretix will ask for human names. Changing this after you " "already received orders might lead to unexpected behavior when sorting or " @@ -15046,22 +15236,22 @@ msgstr "" "d'haver rebut comandes pot conduir a comportaments estranys quan s'ordenin o " "canviïn noms." -#: pretix/control/forms/event.py:593 pretix/control/forms/organizer.py:585 +#: pretix/control/forms/event.py:593 pretix/control/forms/organizer.py:594 msgid "Allowed titles" msgstr "" -#: pretix/control/forms/event.py:594 pretix/control/forms/organizer.py:586 +#: pretix/control/forms/event.py:594 pretix/control/forms/organizer.py:595 msgid "" "If the naming scheme you defined above allows users to input a title, you " "can use this to restrict the set of selectable titles." msgstr "" -#: pretix/control/forms/event.py:712 pretix/control/forms/organizer.py:661 +#: pretix/control/forms/event.py:712 pretix/control/forms/organizer.py:671 #, python-brace-format msgid "Ask for {fields}, display like {example}" msgstr "Demana per {fields}, mostra-ho com {example}" -#: pretix/control/forms/event.py:718 pretix/control/forms/organizer.py:667 +#: pretix/control/forms/event.py:718 pretix/control/forms/organizer.py:677 #, fuzzy #| msgid "Free price input" msgid "Free text input" @@ -15213,17 +15403,17 @@ msgid "" "shop must be enabled." msgstr "" -#: pretix/control/forms/event.py:1150 pretix/control/forms/organizer.py:702 +#: pretix/control/forms/event.py:1150 pretix/control/forms/organizer.py:712 msgid "Bcc address" msgstr "Adreça de la CCO" -#: pretix/control/forms/event.py:1152 pretix/control/forms/organizer.py:704 +#: pretix/control/forms/event.py:1152 pretix/control/forms/organizer.py:714 #, fuzzy #| msgid "All emails will be sent to this address as a Bcc copy" msgid "All emails will be sent to this address as a Bcc copy." msgstr "Tots els correus s'enviaran a aquesta adreça com a còpia CCO" -#: pretix/control/forms/event.py:1160 pretix/control/forms/organizer.py:713 +#: pretix/control/forms/event.py:1160 pretix/control/forms/organizer.py:723 msgid "Signature" msgstr "Signatura" @@ -15232,7 +15422,7 @@ msgstr "Signatura" msgid "This will be attached to every email. Available placeholders: {event}" msgstr "Això s'adjuntarà a cada correu. Espais disponibles: {event}" -#: pretix/control/forms/event.py:1168 pretix/control/forms/organizer.py:721 +#: pretix/control/forms/event.py:1168 pretix/control/forms/organizer.py:731 msgid "e.g. your contact details" msgstr "per exemple, els vostres detalls de contactes" @@ -15288,8 +15478,8 @@ msgstr "Text (enviat per l'administrador)" #: pretix/control/forms/event.py:1264 pretix/control/forms/event.py:1338 #: pretix/control/forms/event.py:1348 pretix/control/forms/event.py:1358 #: pretix/control/forms/event.py:1363 pretix/control/forms/event.py:1375 -#: pretix/control/forms/organizer.py:732 pretix/control/forms/organizer.py:742 -#: pretix/control/forms/organizer.py:752 pretix/control/forms/organizer.py:762 +#: pretix/control/forms/organizer.py:742 pretix/control/forms/organizer.py:752 +#: pretix/control/forms/organizer.py:762 pretix/control/forms/organizer.py:772 #: pretix/control/templates/pretixcontrol/event/mail.html:88 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:122 msgid "Text" @@ -15792,8 +15982,8 @@ msgid "Follow-up due" msgstr "" #: pretix/control/forms/filter.py:483 pretix/control/forms/filter.py:1267 -#: pretix/control/forms/filter.py:2180 pretix/control/forms/filter.py:2435 -#: pretix/control/forms/filter.py:2739 pretix/control/forms/filter.py:2758 +#: pretix/control/forms/filter.py:2186 pretix/control/forms/filter.py:2441 +#: pretix/control/forms/filter.py:2745 pretix/control/forms/filter.py:2764 #: pretix/control/forms/vouchers.py:151 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:121 #: pretix/plugins/sendmail/models.py:244 @@ -15801,9 +15991,9 @@ msgid "All products" msgstr "Tots els productes" #: pretix/control/forms/filter.py:487 pretix/control/forms/filter.py:1271 -#: pretix/control/forms/filter.py:2439 pretix/control/forms/filter.py:2743 -#: pretix/control/forms/vouchers.py:139 pretix/control/views/typeahead.py:663 -#: pretix/control/views/typeahead.py:780 +#: pretix/control/forms/filter.py:2445 pretix/control/forms/filter.py:2749 +#: pretix/control/forms/vouchers.py:139 pretix/control/views/typeahead.py:682 +#: pretix/control/views/typeahead.py:799 #, python-brace-format msgid "{product} – Any variation" msgstr "" @@ -15860,12 +16050,12 @@ msgstr "" #: pretix/control/forms/filter.py:927 pretix/control/forms/filter.py:932 #: pretix/control/forms/filter.py:1045 pretix/control/forms/filter.py:1050 -#: pretix/control/forms/filter.py:1969 pretix/control/forms/filter.py:1974 +#: pretix/control/forms/filter.py:1975 pretix/control/forms/filter.py:1980 msgid "All organizers" msgstr "Tots els organitzadors" -#: pretix/control/forms/filter.py:1037 pretix/control/forms/filter.py:1953 -#: pretix/control/forms/filter.py:2963 +#: pretix/control/forms/filter.py:1037 pretix/control/forms/filter.py:1959 +#: pretix/control/forms/filter.py:2969 msgid "All events" msgstr "Tots els esdeveniments" @@ -15914,145 +16104,146 @@ msgctxt "subevent" msgid "Date doesn't start in selected date range." msgstr "" -#: pretix/control/forms/filter.py:1361 pretix/control/forms/filter.py:1955 +#: pretix/control/forms/filter.py:1367 pretix/control/forms/filter.py:1961 msgid "Shop live and presale running" msgstr "La tenda està activa i la pre-venda en marxa" -#: pretix/control/forms/filter.py:1362 pretix/control/forms/filter.py:2293 +#: pretix/control/forms/filter.py:1368 pretix/control/forms/filter.py:2299 msgid "Inactive" msgstr "Inactiu" -#: pretix/control/forms/filter.py:1369 pretix/control/forms/filter.py:1372 -#: pretix/control/forms/filter.py:1547 pretix/control/forms/filter.py:1550 -#: pretix/control/forms/filter.py:1984 pretix/control/forms/filter.py:1987 -#: pretix/control/forms/filter.py:2617 +#: pretix/control/forms/filter.py:1375 pretix/control/forms/filter.py:1378 +#: pretix/control/forms/filter.py:1553 pretix/control/forms/filter.py:1556 +#: pretix/control/forms/filter.py:1990 pretix/control/forms/filter.py:1993 +#: pretix/control/forms/filter.py:2623 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:84 #, fuzzy #| msgid "Date" msgid "Date from" msgstr "Data" -#: pretix/control/forms/filter.py:1376 pretix/control/forms/filter.py:1379 -#: pretix/control/forms/filter.py:1554 pretix/control/forms/filter.py:1557 -#: pretix/control/forms/filter.py:1991 pretix/control/forms/filter.py:1994 -#: pretix/control/forms/filter.py:2622 +#: pretix/control/forms/filter.py:1382 pretix/control/forms/filter.py:1385 +#: pretix/control/forms/filter.py:1560 pretix/control/forms/filter.py:1563 +#: pretix/control/forms/filter.py:1997 pretix/control/forms/filter.py:2000 +#: pretix/control/forms/filter.py:2628 #, fuzzy #| msgid "Date and time" msgid "Date until" msgstr "Dia i hora" -#: pretix/control/forms/filter.py:1383 pretix/control/forms/filter.py:1561 +#: pretix/control/forms/filter.py:1389 pretix/control/forms/filter.py:1567 #, fuzzy #| msgid "Date" msgid "Start time from" msgstr "Data" -#: pretix/control/forms/filter.py:1388 pretix/control/forms/filter.py:1566 +#: pretix/control/forms/filter.py:1394 pretix/control/forms/filter.py:1572 #, fuzzy #| msgid "Date and time" msgid "Start time until" msgstr "Dia i hora" -#: pretix/control/forms/filter.py:1393 pretix/control/forms/filter.py:1571 +#: pretix/control/forms/filter.py:1399 pretix/control/forms/filter.py:1577 #: pretix/control/forms/rrule.py:112 pretix/control/forms/rrule.py:151 msgid "Weekday" msgstr "Dia de la setmana" -#: pretix/control/forms/filter.py:1721 pretix/control/forms/filter.py:1723 -#: pretix/control/forms/filter.py:1772 pretix/control/forms/filter.py:1774 -#: pretix/control/forms/filter.py:1844 pretix/control/forms/filter.py:1846 -#: pretix/control/forms/filter.py:1898 pretix/control/forms/filter.py:1900 -#: pretix/control/forms/filter.py:2307 pretix/control/forms/filter.py:2309 -#: pretix/control/forms/filter.py:2875 pretix/control/forms/filter.py:2877 +#: pretix/control/forms/filter.py:1727 pretix/control/forms/filter.py:1729 +#: pretix/control/forms/filter.py:1778 pretix/control/forms/filter.py:1780 +#: pretix/control/forms/filter.py:1850 pretix/control/forms/filter.py:1852 +#: pretix/control/forms/filter.py:1904 pretix/control/forms/filter.py:1906 +#: pretix/control/forms/filter.py:2313 pretix/control/forms/filter.py:2315 +#: pretix/control/forms/filter.py:2881 pretix/control/forms/filter.py:2883 msgid "Search query" msgstr "" -#: pretix/control/forms/filter.py:1783 pretix/control/forms/filter.py:1855 +#: pretix/control/forms/filter.py:1789 pretix/control/forms/filter.py:1861 #: pretix/control/templates/pretixcontrol/organizers/customer.html:47 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:47 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:54 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:126 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:133 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:37 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:49 #, fuzzy #| msgid "Inactive" msgid "active" msgstr "Inactiu" -#: pretix/control/forms/filter.py:1785 +#: pretix/control/forms/filter.py:1791 #: pretix/control/templates/pretixcontrol/organizers/customer.html:45 #, fuzzy #| msgid "Inactive" msgid "not yet activated" msgstr "Inactiu" -#: pretix/control/forms/filter.py:1789 +#: pretix/control/forms/filter.py:1795 #: pretix/control/templates/pretixcontrol/organizers/customer.html:113 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:6 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:12 -#: pretix/presale/views/customer.py:368 +#: pretix/presale/views/customer.py:370 #, fuzzy #| msgid "Members" msgid "Memberships" msgstr "Membres" -#: pretix/control/forms/filter.py:1793 +#: pretix/control/forms/filter.py:1799 #, fuzzy #| msgid "Event end" msgid "Has no memberships" msgstr "Finalització de l'esdeveniment" -#: pretix/control/forms/filter.py:1794 +#: pretix/control/forms/filter.py:1800 #, fuzzy #| msgid "Team members" msgid "Has any membership" msgstr "Membres de l'equip" -#: pretix/control/forms/filter.py:1795 +#: pretix/control/forms/filter.py:1801 #, fuzzy #| msgid "Team members" msgid "Has valid membership" msgstr "Membres de l'equip" -#: pretix/control/forms/filter.py:1954 +#: pretix/control/forms/filter.py:1960 msgid "Shop live" msgstr "Tenda activa" -#: pretix/control/forms/filter.py:1956 +#: pretix/control/forms/filter.py:1962 msgid "Shop not live" msgstr "Tenda no activa" -#: pretix/control/forms/filter.py:1959 +#: pretix/control/forms/filter.py:1965 msgid "Single event running or in the future" msgstr "" -#: pretix/control/forms/filter.py:1960 +#: pretix/control/forms/filter.py:1966 msgid "Single event in the past" msgstr "" -#: pretix/control/forms/filter.py:2159 pretix/control/forms/filter.py:2161 +#: pretix/control/forms/filter.py:2165 pretix/control/forms/filter.py:2167 msgid "Search attendee…" msgstr "" -#: pretix/control/forms/filter.py:2166 +#: pretix/control/forms/filter.py:2172 #: pretix/plugins/checkinlists/exporters.py:107 msgid "Check-in status" msgstr "" -#: pretix/control/forms/filter.py:2168 +#: pretix/control/forms/filter.py:2174 #: pretix/plugins/checkinlists/exporters.py:109 msgid "All attendees" msgstr "" -#: pretix/control/forms/filter.py:2169 +#: pretix/control/forms/filter.py:2175 #: pretix/control/templates/pretixcontrol/checkin/index.html:183 #: pretix/control/templates/pretixcontrol/checkin/lists.html:104 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:138 #: pretix/plugins/checkinlists/exporters.py:110 #: pretix/plugins/checkinlists/exporters.py:500 msgid "Checked in" msgstr "" -#: pretix/control/forms/filter.py:2170 +#: pretix/control/forms/filter.py:2176 #: pretix/plugins/checkinlists/exporters.py:111 #, fuzzy #| msgid "Presale end" @@ -16060,134 +16251,134 @@ msgctxt "checkin state" msgid "Present" msgstr "Finalització de la prevenda" -#: pretix/control/forms/filter.py:2171 +#: pretix/control/forms/filter.py:2177 #: pretix/plugins/checkinlists/exporters.py:112 msgctxt "checkin state" msgid "Checked in but left" msgstr "" -#: pretix/control/forms/filter.py:2172 +#: pretix/control/forms/filter.py:2178 #: pretix/control/templates/pretixcontrol/checkin/index.html:178 #: pretix/plugins/checkinlists/exporters.py:113 msgid "Not checked in" msgstr "" -#: pretix/control/forms/filter.py:2191 +#: pretix/control/forms/filter.py:2197 #, fuzzy #| msgid "Date" msgctxt "subevent" msgid "Date start from" msgstr "Data" -#: pretix/control/forms/filter.py:2197 +#: pretix/control/forms/filter.py:2203 #, fuzzy #| msgid "Date and time" msgctxt "subevent" msgid "Date start until" msgstr "Dia i hora" -#: pretix/control/forms/filter.py:2298 pretix/control/forms/filter.py:2301 +#: pretix/control/forms/filter.py:2304 pretix/control/forms/filter.py:2307 #: pretix/control/templates/pretixcontrol/users/index.html:52 msgid "Administrator" msgstr "" -#: pretix/control/forms/filter.py:2302 +#: pretix/control/forms/filter.py:2308 msgid "No administrator" msgstr "" -#: pretix/control/forms/filter.py:2372 +#: pretix/control/forms/filter.py:2378 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:51 msgid "Valid" msgstr "" -#: pretix/control/forms/filter.py:2373 +#: pretix/control/forms/filter.py:2379 msgid "Unredeemed" msgstr "" -#: pretix/control/forms/filter.py:2374 +#: pretix/control/forms/filter.py:2380 msgid "Redeemed at least once" msgstr "" -#: pretix/control/forms/filter.py:2375 +#: pretix/control/forms/filter.py:2381 msgid "Fully redeemed" msgstr "" -#: pretix/control/forms/filter.py:2377 +#: pretix/control/forms/filter.py:2383 msgid "Redeemed and checked in with ticket" msgstr "" -#: pretix/control/forms/filter.py:2382 +#: pretix/control/forms/filter.py:2388 msgid "Quota handling" msgstr "" -#: pretix/control/forms/filter.py:2386 +#: pretix/control/forms/filter.py:2392 msgid "Allow to ignore quota" msgstr "" -#: pretix/control/forms/filter.py:2391 pretix/control/forms/filter.py:2393 +#: pretix/control/forms/filter.py:2397 pretix/control/forms/filter.py:2399 msgid "Filter by tag" msgstr "" -#: pretix/control/forms/filter.py:2398 pretix/control/forms/filter.py:2400 +#: pretix/control/forms/filter.py:2404 pretix/control/forms/filter.py:2406 msgid "Search voucher" msgstr "" -#: pretix/control/forms/filter.py:2445 pretix/control/forms/vouchers.py:130 -#: pretix/control/views/typeahead.py:788 pretix/control/views/typeahead.py:792 +#: pretix/control/forms/filter.py:2451 pretix/control/forms/vouchers.py:130 +#: pretix/control/views/typeahead.py:807 pretix/control/views/typeahead.py:811 #: pretix/control/views/vouchers.py:133 #, python-brace-format msgid "Any product in quota \"{quota}\"" msgstr "" -#: pretix/control/forms/filter.py:2567 +#: pretix/control/forms/filter.py:2573 msgid "Refund status" msgstr "" -#: pretix/control/forms/filter.py:2569 +#: pretix/control/forms/filter.py:2575 msgid "All open refunds" msgstr "" -#: pretix/control/forms/filter.py:2570 +#: pretix/control/forms/filter.py:2576 msgid "All refunds" msgstr "" -#: pretix/control/forms/filter.py:2608 pretix/plugins/reports/exporters.py:704 +#: pretix/control/forms/filter.py:2614 pretix/plugins/reports/exporters.py:704 #, fuzzy #| msgid "Date joined" msgid "Date filter" msgstr "Data d'inscripció" -#: pretix/control/forms/filter.py:2610 pretix/plugins/reports/exporters.py:706 +#: pretix/control/forms/filter.py:2616 pretix/plugins/reports/exporters.py:706 #, fuzzy #| msgid "Filter by status" msgid "Filter by…" msgstr "Filtra per estat" -#: pretix/control/forms/filter.py:2612 pretix/plugins/reports/exporters.py:708 +#: pretix/control/forms/filter.py:2618 pretix/plugins/reports/exporters.py:708 #, fuzzy #| msgid "Date of last payment" msgid "Date of last successful payment" msgstr "Darrer dia de pagament" -#: pretix/control/forms/filter.py:2652 +#: pretix/control/forms/filter.py:2658 #, fuzzy #| msgid "Filter by status" msgid "All check-ins" msgstr "Filtra per estat" -#: pretix/control/forms/filter.py:2653 +#: pretix/control/forms/filter.py:2659 #, fuzzy #| msgid "Successful payments" msgid "Successful check-ins" msgstr "Pagaments correctes" -#: pretix/control/forms/filter.py:2654 +#: pretix/control/forms/filter.py:2660 #, fuzzy #| msgid "Only successful payments" msgid "Unsuccessful check-ins" msgstr "Només pagaments correctes" -#: pretix/control/forms/filter.py:2659 +#: pretix/control/forms/filter.py:2665 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:64 #: pretix/plugins/checkinlists/exporters.py:758 #, fuzzy @@ -16195,13 +16386,13 @@ msgstr "Només pagaments correctes" msgid "Scan type" msgstr "Tipus de dispositiu" -#: pretix/control/forms/filter.py:2661 +#: pretix/control/forms/filter.py:2667 #, fuzzy #| msgid "Redirection" msgid "All directions" msgstr "Redirecció" -#: pretix/control/forms/filter.py:2670 pretix/control/forms/filter.py:2710 +#: pretix/control/forms/filter.py:2676 pretix/control/forms/filter.py:2716 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:67 #: pretix/plugins/checkinlists/exporters.py:764 #, fuzzy @@ -16209,35 +16400,35 @@ msgstr "Redirecció" msgid "Device" msgstr "Nom del dispositiu" -#: pretix/control/forms/filter.py:2671 pretix/control/forms/filter.py:2706 -#: pretix/control/forms/filter.py:2897 +#: pretix/control/forms/filter.py:2677 pretix/control/forms/filter.py:2712 +#: pretix/control/forms/filter.py:2903 #, fuzzy #| msgid "All invoices" msgid "All devices" msgstr "Totes les factures" -#: pretix/control/forms/filter.py:2685 +#: pretix/control/forms/filter.py:2691 #, fuzzy #| msgid "Start date" msgctxt "filter" msgid "Start date" msgstr "Data d'inici" -#: pretix/control/forms/filter.py:2691 +#: pretix/control/forms/filter.py:2697 #, fuzzy #| msgid "End date" msgctxt "filter" msgid "End date" msgstr "Data de finalització" -#: pretix/control/forms/filter.py:2733 +#: pretix/control/forms/filter.py:2739 #: pretix/plugins/checkinlists/exporters.py:882 #, fuzzy #| msgid "Filter by status" msgid "All check-in lists" msgstr "Filtra per estat" -#: pretix/control/forms/filter.py:2737 +#: pretix/control/forms/filter.py:2743 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:64 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:11 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:26 @@ -16252,30 +16443,30 @@ msgstr "Filtra per estat" msgid "Check-in list" msgstr "" -#: pretix/control/forms/filter.py:2888 +#: pretix/control/forms/filter.py:2894 #: pretix/control/templates/pretixcontrol/organizers/devices.html:86 msgid "Software" msgstr "Programari" -#: pretix/control/forms/filter.py:2895 +#: pretix/control/forms/filter.py:2901 #, fuzzy #| msgid "Device name" msgid "Device status" msgstr "Nom del dispositiu" -#: pretix/control/forms/filter.py:2898 +#: pretix/control/forms/filter.py:2904 #, fuzzy #| msgid "All invoices" msgid "Active devices" msgstr "Totes les factures" -#: pretix/control/forms/filter.py:2899 +#: pretix/control/forms/filter.py:2905 #, fuzzy #| msgid "Revoke access" msgid "Revoked devices" msgstr "Revocar l'accés" -#: pretix/control/forms/filter.py:2954 pretix/control/forms/filter.py:2956 +#: pretix/control/forms/filter.py:2960 pretix/control/forms/filter.py:2962 #, fuzzy #| msgid "Require email addresses per ticket" msgid "Search email address or subject" @@ -17417,132 +17608,132 @@ msgstr "Heu de triar una data." msgid "You may set only one organizer domain." msgstr "" -#: pretix/control/forms/organizer.py:322 +#: pretix/control/forms/organizer.py:331 msgid "Provided by a plugin" msgstr "" -#: pretix/control/forms/organizer.py:438 +#: pretix/control/forms/organizer.py:447 msgid "" "The changes could not be saved because there would be no remaining team with " "the permission to change teams and permissions." msgstr "" -#: pretix/control/forms/organizer.py:487 pretix/control/forms/organizer.py:525 +#: pretix/control/forms/organizer.py:496 pretix/control/forms/organizer.py:534 #, fuzzy #| msgid "You do not have access to this page." msgid "" "Your device will not have access to anything, please select some events." msgstr "No teniu accés a aquesta pàgina." -#: pretix/control/forms/organizer.py:677 pretix/plugins/stripe/payment.py:330 +#: pretix/control/forms/organizer.py:687 pretix/plugins/stripe/payment.py:330 #, fuzzy #| msgid "Use feature" msgid "experimental" msgstr "Utilitza la funció" -#: pretix/control/forms/organizer.py:683 +#: pretix/control/forms/organizer.py:693 msgid "" "This feature is currently in an experimental stage. It only supports very " "limited use cases and might change at any point." msgstr "" -#: pretix/control/forms/organizer.py:706 +#: pretix/control/forms/organizer.py:716 msgid "Sensitive emails like password resets will not be sent in Bcc." msgstr "" -#: pretix/control/forms/organizer.py:716 +#: pretix/control/forms/organizer.py:726 #, fuzzy #| msgid "" #| "This will be attached to every email. Available placeholders: {event}" msgid "This will be attached to every email." msgstr "Això s'adjuntarà a cada correu. Espais disponibles: {event}" -#: pretix/control/forms/organizer.py:790 pretix/control/logdisplay.py:671 +#: pretix/control/forms/organizer.py:800 pretix/control/logdisplay.py:671 #: pretix/control/views/user.py:850 pretix/presale/views/customer.py:289 -#: pretix/presale/views/customer.py:545 +#: pretix/presale/views/customer.py:547 msgid "Your password has been changed." msgstr "" -#: pretix/control/forms/organizer.py:823 +#: pretix/control/forms/organizer.py:833 msgctxt "webhooks" msgid "Event types" msgstr "" -#: pretix/control/forms/organizer.py:857 +#: pretix/control/forms/organizer.py:867 #, fuzzy #| msgid "Gift card" msgid "Gift card value" msgstr "Targeta regal" -#: pretix/control/forms/organizer.py:961 +#: pretix/control/forms/organizer.py:971 #, fuzzy #| msgid "This ticket has already been redeemed." msgid "An medium with this type and identifier is already registered." msgstr "Ja s'ha validat aquest tiquet." -#: pretix/control/forms/organizer.py:1059 +#: pretix/control/forms/organizer.py:1069 #, fuzzy #| msgid "This ticket has already been redeemed." msgid "An account with this customer ID is already registered." msgstr "Ja s'ha validat aquest tiquet." -#: pretix/control/forms/organizer.py:1076 +#: pretix/control/forms/organizer.py:1086 #: pretix/control/templates/pretixcontrol/organizers/customer.html:62 #: pretix/presale/forms/customer.py:169 pretix/presale/forms/customer.py:507 msgid "Phone" msgstr "" -#: pretix/control/forms/organizer.py:1190 +#: pretix/control/forms/organizer.py:1200 #, fuzzy #| msgid "Target URL" msgctxt "sso_oidc" msgid "Base URL" msgstr "URL objectiu" -#: pretix/control/forms/organizer.py:1194 +#: pretix/control/forms/organizer.py:1204 #, fuzzy #| msgid "Client ID" msgctxt "sso_oidc" msgid "Client ID" msgstr "ID del client" -#: pretix/control/forms/organizer.py:1198 +#: pretix/control/forms/organizer.py:1208 #, fuzzy #| msgid "Client secret" msgctxt "sso_oidc" msgid "Client secret" msgstr "Secret del client" -#: pretix/control/forms/organizer.py:1202 +#: pretix/control/forms/organizer.py:1212 msgctxt "sso_oidc" msgid "Scope" msgstr "" -#: pretix/control/forms/organizer.py:1203 +#: pretix/control/forms/organizer.py:1213 msgctxt "sso_oidc" msgid "Multiple scopes separated with spaces." msgstr "" -#: pretix/control/forms/organizer.py:1207 +#: pretix/control/forms/organizer.py:1217 msgctxt "sso_oidc" msgid "User ID field" msgstr "" -#: pretix/control/forms/organizer.py:1208 +#: pretix/control/forms/organizer.py:1218 msgctxt "sso_oidc" msgid "" "We will assume that the contents of the user ID fields are unique and can " "never change for a user." msgstr "" -#: pretix/control/forms/organizer.py:1214 +#: pretix/control/forms/organizer.py:1224 #, fuzzy #| msgid "All invoices" msgctxt "sso_oidc" msgid "Email field" msgstr "Totes les factures" -#: pretix/control/forms/organizer.py:1215 +#: pretix/control/forms/organizer.py:1225 msgctxt "sso_oidc" msgid "" "We will assume that all email addresses received from the SSO provider are " @@ -17550,19 +17741,19 @@ msgid "" "security issues might arise." msgstr "" -#: pretix/control/forms/organizer.py:1222 +#: pretix/control/forms/organizer.py:1232 #, fuzzy #| msgid "Phone number" msgctxt "sso_oidc" msgid "Phone field" msgstr "Número de telèfon" -#: pretix/control/forms/organizer.py:1226 +#: pretix/control/forms/organizer.py:1236 msgctxt "sso_oidc" msgid "Query parameters" msgstr "" -#: pretix/control/forms/organizer.py:1227 +#: pretix/control/forms/organizer.py:1237 #, python-brace-format msgctxt "sso_oidc" msgid "" @@ -17570,23 +17761,23 @@ msgid "" "endpoint. Enter as: {example}" msgstr "" -#: pretix/control/forms/organizer.py:1288 +#: pretix/control/forms/organizer.py:1298 msgid "Invalidate old client secret and generate a new one" msgstr "" -#: pretix/control/forms/organizer.py:1321 +#: pretix/control/forms/organizer.py:1331 #, fuzzy #| msgid "Organizer name" msgid "Organizer short name" msgstr "Nom de l'organitzador" -#: pretix/control/forms/organizer.py:1325 +#: pretix/control/forms/organizer.py:1335 #, fuzzy #| msgid "Reactivate order" msgid "Allow access to reusable media" msgstr "Reactivar la comanda" -#: pretix/control/forms/organizer.py:1326 +#: pretix/control/forms/organizer.py:1336 msgid "" "This is required if you want the other organizer to participate in a shared " "system with e.g. NFC payment chips. You should only use this option for " @@ -17595,25 +17786,25 @@ msgid "" "to interact with the media type." msgstr "" -#: pretix/control/forms/organizer.py:1342 +#: pretix/control/forms/organizer.py:1352 #, fuzzy #| msgid "The selected item does not belong to this event." msgid "The selected organizer does not exist or cannot be invited." msgstr "L'element seleccionat no pertany a aquest esdeveniment." -#: pretix/control/forms/organizer.py:1344 +#: pretix/control/forms/organizer.py:1354 #, fuzzy #| msgid "The presale period for this event has ended." msgid "The selected organizer has already been invited." msgstr "Ha finalitzat el període de prevenda d'aquest esdeveniment." -#: pretix/control/forms/organizer.py:1379 +#: pretix/control/forms/organizer.py:1389 #, fuzzy #| msgid "A voucher with this code already exists." msgid "A sales channel with the same identifier already exists." msgstr "Ja existeix un val amb aquest codi." -#: pretix/control/forms/organizer.py:1391 +#: pretix/control/forms/organizer.py:1401 msgid "Events with active plugin" msgstr "" @@ -18137,7 +18328,7 @@ msgid "The check-in of position #{posid} on list \"{list}\" has been reverted." msgstr "" #: pretix/control/logdisplay.py:359 pretix/control/logdisplay.py:361 -#: pretix/control/logdisplay.py:995 pretix/control/logdisplay.py:997 +#: pretix/control/logdisplay.py:998 pretix/control/logdisplay.py:1000 msgid "(unknown)" msgstr "" @@ -18188,7 +18379,7 @@ msgstr "" msgid "The order has been canceled (comment: \"{comment}\")." msgstr "Ja s'ha enviat un val a aquesta persona." -#: pretix/control/logdisplay.py:422 pretix/control/views/orders.py:1559 +#: pretix/control/logdisplay.py:422 pretix/control/views/orders.py:1573 #: pretix/presale/views/order.py:1138 msgid "The order has been canceled." msgstr "" @@ -18227,11 +18418,11 @@ msgstr "" msgid "Internal error while transferring data to {provider_display_name}." msgstr "" -#: pretix/control/logdisplay.py:489 pretix/control/logdisplay.py:842 +#: pretix/control/logdisplay.py:489 pretix/control/logdisplay.py:845 msgid "The settings of a payment provider have been changed." msgstr "" -#: pretix/control/logdisplay.py:492 pretix/control/logdisplay.py:841 +#: pretix/control/logdisplay.py:492 pretix/control/logdisplay.py:844 msgid "The settings of a ticket output provider have been changed." msgstr "" @@ -18278,11 +18469,11 @@ msgstr "La comanda ha estat marcada com a pagada." msgid "The order has been set to require payment before use." msgstr "Ja s'ha enviat un val a aquesta persona." -#: pretix/control/logdisplay.py:511 pretix/control/views/orders.py:1564 +#: pretix/control/logdisplay.py:511 pretix/control/views/orders.py:1578 msgid "The order has been marked as expired." msgstr "" -#: pretix/control/logdisplay.py:512 pretix/control/views/orders.py:1466 +#: pretix/control/logdisplay.py:512 pretix/control/views/orders.py:1480 msgid "The order has been marked as paid." msgstr "La comanda ha estat marcada com a pagada." @@ -18296,7 +18487,7 @@ msgstr "Aquesta posició de la comanda s'ha cancel·lat." msgid "The order has been refunded." msgstr "" -#: pretix/control/logdisplay.py:515 pretix/control/views/orders.py:1904 +#: pretix/control/logdisplay.py:515 pretix/control/views/orders.py:1918 #, fuzzy #| msgid "The task has been completed." msgid "The order has been reactivated." @@ -18310,7 +18501,7 @@ msgstr "" msgid "The order requires approval before it can continue to be processed." msgstr "" -#: pretix/control/logdisplay.py:519 pretix/control/views/orders.py:786 +#: pretix/control/logdisplay.py:519 pretix/control/views/orders.py:800 msgid "The order has been approved." msgstr "" @@ -18354,7 +18545,7 @@ msgstr "S'ha completat la tasca." msgid "The order locale has been changed." msgstr "" -#: pretix/control/logdisplay.py:531 pretix/control/views/orders.py:1603 +#: pretix/control/logdisplay.py:531 pretix/control/views/orders.py:1617 #: pretix/presale/views/order.py:797 pretix/presale/views/order.py:877 msgid "The invoice has been generated." msgstr "" @@ -18365,11 +18556,11 @@ msgstr "" msgid "The invoice could not be generated." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:533 pretix/control/views/orders.py:1684 +#: pretix/control/logdisplay.py:533 pretix/control/views/orders.py:1698 msgid "The invoice has been regenerated." msgstr "" -#: pretix/control/logdisplay.py:534 pretix/control/views/orders.py:1741 +#: pretix/control/logdisplay.py:534 pretix/control/views/orders.py:1755 #: pretix/presale/views/order.py:897 msgid "The invoice has been reissued." msgstr "" @@ -18432,7 +18623,7 @@ msgid "An unidentified type email has been sent." msgstr "" #: pretix/control/logdisplay.py:549 pretix/control/logdisplay.py:742 -#: pretix/control/logdisplay.py:748 pretix/control/logdisplay.py:776 +#: pretix/control/logdisplay.py:751 pretix/control/logdisplay.py:779 msgid "Sending of an email has failed." msgstr "" @@ -18634,7 +18825,7 @@ msgstr "" msgid "Your account has been disabled." msgstr "" -#: pretix/control/logdisplay.py:680 pretix/presale/views/customer.py:642 +#: pretix/control/logdisplay.py:680 pretix/presale/views/customer.py:644 #, fuzzy, python-brace-format #| msgid "Your cart has been updated." msgid "Your email address has been changed from {old_email} to {email}." @@ -18674,37 +18865,37 @@ msgstr "S'ha completat la tasca." msgid "The organizer settings have been changed." msgstr "Ha finalitzat el període de prevenda d'aquest esdeveniment." -#: pretix/control/logdisplay.py:704 pretix/control/logdisplay.py:849 +#: pretix/control/logdisplay.py:704 pretix/control/logdisplay.py:852 #, fuzzy #| msgid "The presale period for this event has ended." msgid "The footer links have been changed." msgstr "Ha finalitzat el període de prevenda d'aquest esdeveniment." -#: pretix/control/logdisplay.py:705 pretix/control/logdisplay.py:754 +#: pretix/control/logdisplay.py:705 pretix/control/logdisplay.py:757 #, fuzzy #| msgid "A new order has been placed: {order.code}" msgid "A scheduled export has been added." msgstr "S'ha realitzat una nova comanda: {order.code}" -#: pretix/control/logdisplay.py:706 pretix/control/logdisplay.py:755 +#: pretix/control/logdisplay.py:706 pretix/control/logdisplay.py:758 #, fuzzy #| msgid "The task has been completed." msgid "A scheduled export has been changed." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:707 pretix/control/logdisplay.py:756 +#: pretix/control/logdisplay.py:707 pretix/control/logdisplay.py:759 #, fuzzy #| msgid "The selected product has been deleted." msgid "A scheduled export has been deleted." msgstr "El producte seleccionat ha estat esborrat." -#: pretix/control/logdisplay.py:708 pretix/control/logdisplay.py:757 +#: pretix/control/logdisplay.py:708 pretix/control/logdisplay.py:760 #, fuzzy #| msgid "The selected product has been deleted." msgid "A scheduled export has been executed." msgstr "El producte seleccionat ha estat esborrat." -#: pretix/control/logdisplay.py:709 pretix/control/logdisplay.py:758 +#: pretix/control/logdisplay.py:709 pretix/control/logdisplay.py:761 #, python-brace-format msgid "A scheduled export has failed: {reason}." msgstr "" @@ -18829,7 +19020,7 @@ msgstr "S'ha completat la tasca." msgid "The membership type has been deleted." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:731 pretix/control/views/organizer.py:3556 +#: pretix/control/logdisplay.py:731 pretix/control/views/organizer.py:3591 #, fuzzy #| msgid "The task has been completed." msgid "The sales channel has been created." @@ -18915,610 +19106,629 @@ msgstr "S'ha completat la tasca." #: pretix/control/logdisplay.py:746 #, fuzzy +#| msgid "This voucher is not valid for this product." +msgid "A new ticket has been added to the medium." +msgstr "Aquest val no és vàlid per a aquest producte." + +#: pretix/control/logdisplay.py:747 +#, fuzzy +#| msgid "This voucher is not valid for this product." +msgid "A ticket has been removed from the medium." +msgstr "Aquest val no és vàlid per a aquest producte." + +#: pretix/control/logdisplay.py:748 +#, fuzzy #| msgid "The task has been completed." msgid "The medium has been connected to a new ticket." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:747 +#: pretix/control/logdisplay.py:749 +#, python-brace-format +msgid "" +"The ticket #{positionid} was exchanged for reusable medium " +"{medium_identifier}." +msgstr "" + +#: pretix/control/logdisplay.py:750 #, fuzzy #| msgid "The task has been completed." msgid "The medium has been connected to a new gift card." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:749 +#: pretix/control/logdisplay.py:752 msgid "The event's internal comment has been updated." msgstr "" -#: pretix/control/logdisplay.py:750 +#: pretix/control/logdisplay.py:753 #, fuzzy #| msgid "This order position has been canceled." msgid "The event has been canceled." msgstr "Aquesta posició de la comanda s'ha cancel·lat." -#: pretix/control/logdisplay.py:751 +#: pretix/control/logdisplay.py:754 #, fuzzy #| msgid "This order position has been canceled." msgid "An event has been deleted." msgstr "Aquesta posició de la comanda s'ha cancel·lat." -#: pretix/control/logdisplay.py:752 +#: pretix/control/logdisplay.py:755 msgid "A removal process for personal data has been started." msgstr "" -#: pretix/control/logdisplay.py:753 +#: pretix/control/logdisplay.py:756 msgid "A removal process for personal data has been completed." msgstr "" -#: pretix/control/logdisplay.py:759 +#: pretix/control/logdisplay.py:762 msgid "The user has been created." msgstr "" -#: pretix/control/logdisplay.py:760 +#: pretix/control/logdisplay.py:763 #, python-brace-format msgid "" "A first login using {agent_type} on {os_type} from {country} has been " "detected." msgstr "" -#: pretix/control/logdisplay.py:762 pretix/control/views/user.py:474 +#: pretix/control/logdisplay.py:765 pretix/control/views/user.py:474 #: pretix/control/views/user.py:534 pretix/control/views/user.py:593 msgid "Two-factor authentication has been enabled." msgstr "" -#: pretix/control/logdisplay.py:763 pretix/control/views/user.py:377 +#: pretix/control/logdisplay.py:766 pretix/control/views/user.py:377 #: pretix/control/views/user.py:609 msgid "Two-factor authentication has been disabled." msgstr "" -#: pretix/control/logdisplay.py:764 pretix/control/views/user.py:626 +#: pretix/control/logdisplay.py:767 pretix/control/views/user.py:626 msgid "Your two-factor emergency codes have been regenerated." msgstr "" -#: pretix/control/logdisplay.py:765 +#: pretix/control/logdisplay.py:768 #, fuzzy #| msgid "The task has been completed." msgid "A two-factor emergency code has been generated." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:766 +#: pretix/control/logdisplay.py:769 #, python-brace-format msgid "" "A new two-factor authentication device \"{name}\" has been added to your " "account." msgstr "" -#: pretix/control/logdisplay.py:768 +#: pretix/control/logdisplay.py:771 #, python-brace-format msgid "" "The two-factor authentication device \"{name}\" has been removed from your " "account." msgstr "" -#: pretix/control/logdisplay.py:770 +#: pretix/control/logdisplay.py:773 msgid "Notifications have been enabled." msgstr "" -#: pretix/control/logdisplay.py:771 +#: pretix/control/logdisplay.py:774 msgid "Notifications have been disabled." msgstr "" -#: pretix/control/logdisplay.py:772 +#: pretix/control/logdisplay.py:775 msgid "Your notification settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:773 +#: pretix/control/logdisplay.py:776 msgid "This user has been anonymized." msgstr "" -#: pretix/control/logdisplay.py:777 +#: pretix/control/logdisplay.py:780 msgid "Password reset mail sent." msgstr "" -#: pretix/control/logdisplay.py:778 +#: pretix/control/logdisplay.py:781 msgid "The password has been reset." msgstr "" -#: pretix/control/logdisplay.py:779 +#: pretix/control/logdisplay.py:782 msgid "" "A repeated password reset has been denied, as the last request was less than " "24 hours ago." msgstr "" -#: pretix/control/logdisplay.py:781 +#: pretix/control/logdisplay.py:784 #, python-brace-format msgid "The organizer \"{name}\" has been deleted." msgstr "" -#: pretix/control/logdisplay.py:782 pretix/control/logdisplay.py:1013 +#: pretix/control/logdisplay.py:785 pretix/control/logdisplay.py:1016 msgid "A voucher has been sent to a person on the waiting list." msgstr "" -#: pretix/control/logdisplay.py:783 +#: pretix/control/logdisplay.py:786 #, fuzzy #| msgid "Add me to the waiting list" msgid "An entry has been transferred to another waiting list." msgstr "Afegiu-me a la llista d'espera" -#: pretix/control/logdisplay.py:784 +#: pretix/control/logdisplay.py:787 msgid "The team has been created." msgstr "" -#: pretix/control/logdisplay.py:785 +#: pretix/control/logdisplay.py:788 msgid "The team settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:786 +#: pretix/control/logdisplay.py:789 msgid "The team has been deleted." msgstr "" -#: pretix/control/logdisplay.py:787 pretix/control/views/organizer.py:2381 +#: pretix/control/logdisplay.py:790 pretix/control/views/organizer.py:2381 #, fuzzy #| msgid "The task has been completed." msgid "The gate has been created." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:788 +#: pretix/control/logdisplay.py:791 #, fuzzy #| msgid "The task has been completed." msgid "The gate has been changed." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:789 +#: pretix/control/logdisplay.py:792 #, fuzzy #| msgid "The task has been completed." msgid "The gate has been deleted." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:790 +#: pretix/control/logdisplay.py:793 msgctxt "subevent" msgid "The event date has been deleted." msgstr "" -#: pretix/control/logdisplay.py:791 +#: pretix/control/logdisplay.py:794 #, fuzzy #| msgid "The presale period for this event has ended." msgctxt "subevent" msgid "The event date has been canceled." msgstr "Ha finalitzat el període de prevenda d'aquest esdeveniment." -#: pretix/control/logdisplay.py:792 +#: pretix/control/logdisplay.py:795 msgctxt "subevent" msgid "The event date has been changed." msgstr "" -#: pretix/control/logdisplay.py:793 +#: pretix/control/logdisplay.py:796 msgctxt "subevent" msgid "The event date has been created." msgstr "" -#: pretix/control/logdisplay.py:794 +#: pretix/control/logdisplay.py:797 msgctxt "subevent" msgid "A quota has been added to the event date." msgstr "" -#: pretix/control/logdisplay.py:795 +#: pretix/control/logdisplay.py:798 msgctxt "subevent" msgid "A quota has been changed on the event date." msgstr "" -#: pretix/control/logdisplay.py:796 +#: pretix/control/logdisplay.py:799 msgctxt "subevent" msgid "A quota has been removed from the event date." msgstr "" -#: pretix/control/logdisplay.py:797 +#: pretix/control/logdisplay.py:800 msgid "The device has been created." msgstr "" -#: pretix/control/logdisplay.py:798 +#: pretix/control/logdisplay.py:801 msgid "The device has been changed." msgstr "" -#: pretix/control/logdisplay.py:799 +#: pretix/control/logdisplay.py:802 msgid "Access of the device has been revoked." msgstr "" -#: pretix/control/logdisplay.py:800 +#: pretix/control/logdisplay.py:803 msgid "The device has been initialized." msgstr "" -#: pretix/control/logdisplay.py:801 +#: pretix/control/logdisplay.py:804 msgid "The access token of the device has been regenerated." msgstr "" -#: pretix/control/logdisplay.py:802 +#: pretix/control/logdisplay.py:805 msgid "The device has notified the server of an hardware or software update." msgstr "" -#: pretix/control/logdisplay.py:803 +#: pretix/control/logdisplay.py:806 #, fuzzy #| msgid "The task has been completed." msgid "The gift card has been created." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:804 pretix/control/views/organizer.py:1943 +#: pretix/control/logdisplay.py:807 pretix/control/views/organizer.py:1943 #, fuzzy #| msgid "The task has been completed." msgid "The gift card has been changed." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:805 +#: pretix/control/logdisplay.py:808 #, fuzzy #| msgid "The task has been completed." msgid "A manual transaction has been performed." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:806 +#: pretix/control/logdisplay.py:809 #, fuzzy #| msgid "The task has been completed." msgid "A payment has been performed." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:807 +#: pretix/control/logdisplay.py:810 #, fuzzy #| msgid "The task has been completed." msgid "A refund has been performed. " msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:808 +#: pretix/control/logdisplay.py:811 #, python-brace-format msgid "The token \"{name}\" has been created." msgstr "" -#: pretix/control/logdisplay.py:809 +#: pretix/control/logdisplay.py:812 #, python-brace-format msgid "The token \"{name}\" has been revoked." msgstr "" -#: pretix/control/logdisplay.py:810 +#: pretix/control/logdisplay.py:813 #, fuzzy #| msgid "The task has been completed." msgid "The check-in and print log state has been reset." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:817 pretix/control/logdisplay.py:876 +#: pretix/control/logdisplay.py:820 pretix/control/logdisplay.py:879 #, fuzzy #| msgid "The task has been completed." msgid "The plugin has been enabled." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:818 pretix/control/logdisplay.py:877 -#: pretix/control/views/event.py:497 pretix/control/views/organizer.py:757 +#: pretix/control/logdisplay.py:821 pretix/control/logdisplay.py:880 +#: pretix/control/views/event.py:498 pretix/control/views/organizer.py:757 #, fuzzy #| msgid "The task has been completed." msgid "The plugin has been disabled." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:821 pretix/control/logdisplay.py:880 +#: pretix/control/logdisplay.py:824 pretix/control/logdisplay.py:883 #, fuzzy, python-brace-format #| msgid "Question {val}" msgid "Plugin {val}" msgstr "Pregunta {val}" -#: pretix/control/logdisplay.py:836 +#: pretix/control/logdisplay.py:839 #, fuzzy #| msgid "This voucher is not valid for this product." msgid "A meta property has been added to this event." msgstr "Aquest val no és vàlid per a aquest producte." -#: pretix/control/logdisplay.py:837 +#: pretix/control/logdisplay.py:840 #, fuzzy #| msgid "This voucher is not valid for this product." msgid "A meta property has been removed from this event." msgstr "Aquest val no és vàlid per a aquest producte." -#: pretix/control/logdisplay.py:838 +#: pretix/control/logdisplay.py:841 #, fuzzy #| msgid "The bundled item must not have bundles on its own." msgid "A meta property has been changed on this event." msgstr "L'element empaquetat no pot tenir paquets ell mateix." -#: pretix/control/logdisplay.py:839 +#: pretix/control/logdisplay.py:842 msgid "The event settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:840 +#: pretix/control/logdisplay.py:843 msgid "The ticket download settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:843 +#: pretix/control/logdisplay.py:846 msgid "The shop has been taken live." msgstr "" -#: pretix/control/logdisplay.py:844 +#: pretix/control/logdisplay.py:847 msgid "The shop has been taken offline." msgstr "" -#: pretix/control/logdisplay.py:845 +#: pretix/control/logdisplay.py:848 msgid "The shop has been taken into test mode." msgstr "" -#: pretix/control/logdisplay.py:846 +#: pretix/control/logdisplay.py:849 msgid "The test mode has been disabled." msgstr "" -#: pretix/control/logdisplay.py:847 +#: pretix/control/logdisplay.py:850 msgid "The event has been created." msgstr "" -#: pretix/control/logdisplay.py:848 +#: pretix/control/logdisplay.py:851 #, fuzzy #| msgid "The presale period for this event has ended." msgid "The event details have been changed." msgstr "Ha finalitzat el període de prevenda d'aquest esdeveniment." -#: pretix/control/logdisplay.py:850 +#: pretix/control/logdisplay.py:853 msgid "An answer option has been added to the question." msgstr "" -#: pretix/control/logdisplay.py:851 +#: pretix/control/logdisplay.py:854 msgid "An answer option has been removed from the question." msgstr "" -#: pretix/control/logdisplay.py:852 +#: pretix/control/logdisplay.py:855 msgid "An answer option has been changed." msgstr "" -#: pretix/control/logdisplay.py:853 +#: pretix/control/logdisplay.py:856 msgid "A user has been added to the event team." msgstr "" -#: pretix/control/logdisplay.py:854 +#: pretix/control/logdisplay.py:857 msgid "A user has been invited to the event team." msgstr "" -#: pretix/control/logdisplay.py:855 +#: pretix/control/logdisplay.py:858 msgid "A user's permissions have been changed." msgstr "" -#: pretix/control/logdisplay.py:856 +#: pretix/control/logdisplay.py:859 msgid "A user has been removed from the event team." msgstr "" -#: pretix/control/logdisplay.py:863 +#: pretix/control/logdisplay.py:866 msgid "The check-in list has been added." msgstr "" -#: pretix/control/logdisplay.py:864 pretix/control/logdisplay.py:865 +#: pretix/control/logdisplay.py:867 pretix/control/logdisplay.py:868 msgid "The check-in list has been deleted." msgstr "" -#: pretix/control/logdisplay.py:866 +#: pretix/control/logdisplay.py:869 msgid "The check-in list has been changed." msgstr "" -#: pretix/control/logdisplay.py:869 +#: pretix/control/logdisplay.py:872 #, fuzzy, python-brace-format #| msgid "Can change orders" msgid "Check-in list {val}" msgstr "Pot canviar les comandes" -#: pretix/control/logdisplay.py:896 +#: pretix/control/logdisplay.py:899 msgid "The product has been created." msgstr "" -#: pretix/control/logdisplay.py:897 +#: pretix/control/logdisplay.py:900 msgid "The product has been changed." msgstr "" -#: pretix/control/logdisplay.py:898 +#: pretix/control/logdisplay.py:901 #, fuzzy #| msgid "The task has been completed." msgid "The product has been reordered." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:899 +#: pretix/control/logdisplay.py:902 msgid "The product has been deleted." msgstr "" -#: pretix/control/logdisplay.py:900 +#: pretix/control/logdisplay.py:903 msgid "An add-on has been added to this product." msgstr "" -#: pretix/control/logdisplay.py:901 +#: pretix/control/logdisplay.py:904 msgid "An add-on has been removed from this product." msgstr "" -#: pretix/control/logdisplay.py:902 +#: pretix/control/logdisplay.py:905 msgid "An add-on has been changed on this product." msgstr "" -#: pretix/control/logdisplay.py:903 +#: pretix/control/logdisplay.py:906 #, fuzzy #| msgid "This voucher is not valid for this product." msgid "A bundled item has been added to this product." msgstr "Aquest val no és vàlid per a aquest producte." -#: pretix/control/logdisplay.py:904 +#: pretix/control/logdisplay.py:907 #, fuzzy #| msgid "This voucher is not valid for this product." msgid "A bundled item has been removed from this product." msgstr "Aquest val no és vàlid per a aquest producte." -#: pretix/control/logdisplay.py:905 +#: pretix/control/logdisplay.py:908 #, fuzzy #| msgid "The bundled item must not have bundles on its own." msgid "A bundled item has been changed on this product." msgstr "L'element empaquetat no pot tenir paquets ell mateix." -#: pretix/control/logdisplay.py:906 +#: pretix/control/logdisplay.py:909 #, fuzzy #| msgid "This voucher is not valid for this product." msgid "A program time has been added to this product." msgstr "Aquest val no és vàlid per a aquest producte." -#: pretix/control/logdisplay.py:907 +#: pretix/control/logdisplay.py:910 #, fuzzy #| msgid "The bundled item must not have bundles on its own." msgid "A program time has been changed on this product." msgstr "L'element empaquetat no pot tenir paquets ell mateix." -#: pretix/control/logdisplay.py:908 +#: pretix/control/logdisplay.py:911 #, fuzzy #| msgid "This voucher is not valid for this product." msgid "A program time has been removed from this product." msgstr "Aquest val no és vàlid per a aquest producte." -#: pretix/control/logdisplay.py:915 +#: pretix/control/logdisplay.py:918 #, python-brace-format msgid "The variation \"{value}\" has been created." msgstr "" -#: pretix/control/logdisplay.py:916 +#: pretix/control/logdisplay.py:919 #, python-brace-format msgid "The variation \"{value}\" has been deleted." msgstr "" -#: pretix/control/logdisplay.py:917 +#: pretix/control/logdisplay.py:920 #, python-brace-format msgid "The variation \"{value}\" has been changed." msgstr "" -#: pretix/control/logdisplay.py:934 +#: pretix/control/logdisplay.py:937 #, python-brace-format msgid "Payment {local_id} has been confirmed." msgstr "El pagament {local_id} ha estat confirmat." -#: pretix/control/logdisplay.py:935 +#: pretix/control/logdisplay.py:938 #, python-brace-format msgid "Payment {local_id} has been canceled." msgstr "" -#: pretix/control/logdisplay.py:936 +#: pretix/control/logdisplay.py:939 #, python-brace-format msgid "Canceling payment {local_id} has failed." msgstr "" -#: pretix/control/logdisplay.py:937 +#: pretix/control/logdisplay.py:940 #, python-brace-format msgid "Payment {local_id} has been started." msgstr "" -#: pretix/control/logdisplay.py:938 +#: pretix/control/logdisplay.py:941 #, python-brace-format msgid "Payment {local_id} has failed." msgstr "" -#: pretix/control/logdisplay.py:939 +#: pretix/control/logdisplay.py:942 #, python-brace-format msgid "The order could not be marked as paid: {message}" msgstr "" -#: pretix/control/logdisplay.py:940 -msgid "The order has been overpaid." -msgstr "" - -#: pretix/control/logdisplay.py:941 -#, python-brace-format -msgid "Refund {local_id} has been created." -msgstr "" - -#: pretix/control/logdisplay.py:942 -#, python-brace-format -msgid "Refund {local_id} has been created by an external entity." -msgstr "" - #: pretix/control/logdisplay.py:943 -msgid "The customer requested you to issue a refund." +msgid "The order has been overpaid." msgstr "" #: pretix/control/logdisplay.py:944 #, python-brace-format -msgid "Refund {local_id} has been completed." +msgid "Refund {local_id} has been created." msgstr "" #: pretix/control/logdisplay.py:945 #, python-brace-format -msgid "Refund {local_id} has been canceled." +msgid "Refund {local_id} has been created by an external entity." msgstr "" #: pretix/control/logdisplay.py:946 +msgid "The customer requested you to issue a refund." +msgstr "" + +#: pretix/control/logdisplay.py:947 +#, python-brace-format +msgid "Refund {local_id} has been completed." +msgstr "" + +#: pretix/control/logdisplay.py:948 +#, python-brace-format +msgid "Refund {local_id} has been canceled." +msgstr "" + +#: pretix/control/logdisplay.py:949 #, python-brace-format msgid "Refund {local_id} has failed." msgstr "" -#: pretix/control/logdisplay.py:953 +#: pretix/control/logdisplay.py:956 msgid "The quota has been added." msgstr "" -#: pretix/control/logdisplay.py:954 +#: pretix/control/logdisplay.py:957 msgid "The quota has been deleted." msgstr "" -#: pretix/control/logdisplay.py:955 +#: pretix/control/logdisplay.py:958 msgid "The quota has been changed." msgstr "" -#: pretix/control/logdisplay.py:956 +#: pretix/control/logdisplay.py:959 #, fuzzy #| msgid "The task has been completed." msgid "The quota has closed." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:957 pretix/control/views/item.py:1236 +#: pretix/control/logdisplay.py:960 pretix/control/views/item.py:1236 #, fuzzy #| msgid "The task has been completed." msgid "The quota has been re-opened." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:964 +#: pretix/control/logdisplay.py:967 msgid "The question has been added." msgstr "" -#: pretix/control/logdisplay.py:965 +#: pretix/control/logdisplay.py:968 msgid "The question has been deleted." msgstr "" -#: pretix/control/logdisplay.py:966 +#: pretix/control/logdisplay.py:969 msgid "The question has been changed." msgstr "" -#: pretix/control/logdisplay.py:967 +#: pretix/control/logdisplay.py:970 #, fuzzy #| msgid "The task has been completed." msgid "The question has been reordered." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:974 +#: pretix/control/logdisplay.py:977 #, fuzzy #| msgid "The task has been completed." msgid "The discount has been added." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:975 +#: pretix/control/logdisplay.py:978 #, fuzzy #| msgid "The task has been completed." msgid "The discount has been deleted." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:976 +#: pretix/control/logdisplay.py:979 #, fuzzy #| msgid "The task has been completed." msgid "The discount has been changed." msgstr "S'ha completat la tasca." -#: pretix/control/logdisplay.py:1000 +#: pretix/control/logdisplay.py:1003 #, python-brace-format msgid "" "Position #{posid} has been checked in manually at {datetime} on list \"{list}" "\"." msgstr "" -#: pretix/control/logdisplay.py:1005 +#: pretix/control/logdisplay.py:1008 #, python-brace-format msgid "" "Position #{posid} has been checked in again at {datetime} on list \"{list}\"." msgstr "" -#: pretix/control/logdisplay.py:1014 +#: pretix/control/logdisplay.py:1017 msgid "An entry has been removed from the waiting list." msgstr "" -#: pretix/control/logdisplay.py:1015 +#: pretix/control/logdisplay.py:1018 msgid "An entry has been changed on the waiting list." msgstr "" -#: pretix/control/logdisplay.py:1016 +#: pretix/control/logdisplay.py:1019 msgid "An entry has been added to the waiting list." msgstr "" @@ -19568,9 +19778,9 @@ msgstr "" msgid "Payment" msgstr "Pagament" -#: pretix/control/navigation.py:78 pretix/control/views/event.py:1653 -#: pretix/control/views/event.py:1655 pretix/control/views/event.py:1687 -#: pretix/control/views/event.py:1692 pretix/control/views/subevents.py:310 +#: pretix/control/navigation.py:78 pretix/control/views/event.py:1657 +#: pretix/control/views/event.py:1659 pretix/control/views/event.py:1691 +#: pretix/control/views/event.py:1696 pretix/control/views/subevents.py:316 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:60 #: pretix/plugins/ticketoutputpdf/apps.py:55 #: pretix/plugins/ticketoutputpdf/exporters.py:68 @@ -19768,13 +19978,13 @@ msgid "You do not have permission to view this content." msgstr "" #: pretix/control/templates/pretixcontrol/auth/base.html:42 -#: pretix/control/templates/pretixcontrol/base.html:362 +#: pretix/control/templates/pretixcontrol/base.html:363 #, python-format msgid "You are currently working on behalf of %(user)s." msgstr "" #: pretix/control/templates/pretixcontrol/auth/base.html:47 -#: pretix/control/templates/pretixcontrol/base.html:367 +#: pretix/control/templates/pretixcontrol/base.html:368 msgid "Stop impersonating" msgstr "" @@ -19962,7 +20172,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:25 #: pretix/control/templates/pretixcontrol/organizers/device_bulk_edit.html:42 #: pretix/control/templates/pretixcontrol/organizers/device_edit.html:30 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:384 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:385 #: pretix/control/templates/pretixcontrol/organizers/export_form.html:50 #: pretix/control/templates/pretixcontrol/organizers/gate_edit.html:15 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_invite.html:15 @@ -19975,12 +20185,12 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/reusable_medium_edit.html:28 #: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html:15 #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html:28 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:47 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:71 #: pretix/control/templates/pretixcontrol/organizers/webhook_edit.html:21 -#: pretix/control/templates/pretixcontrol/pdf/index.html:46 +#: pretix/control/templates/pretixcontrol/pdf/index.html:44 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:634 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:368 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:289 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:292 #: pretix/control/templates/pretixcontrol/user/notifications.html:85 #: pretix/control/templates/pretixcontrol/user/settings.html:109 #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:13 @@ -20006,76 +20216,76 @@ msgstr "Desar" msgid "Create a new account" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:103 +#: pretix/control/templates/pretixcontrol/base.html:104 msgid "Toggle navigation" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:118 -#: pretix/control/templates/pretixcontrol/base.html:143 -#: pretix/control/templates/pretixcontrol/base.html:147 +#: pretix/control/templates/pretixcontrol/base.html:119 +#: pretix/control/templates/pretixcontrol/base.html:144 #: pretix/control/templates/pretixcontrol/base.html:148 +#: pretix/control/templates/pretixcontrol/base.html:149 msgid "Go to shop" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:124 -#: pretix/control/templates/pretixcontrol/base.html:154 +#: pretix/control/templates/pretixcontrol/base.html:125 #: pretix/control/templates/pretixcontrol/base.html:155 +#: pretix/control/templates/pretixcontrol/base.html:156 msgid "Public profile" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:206 +#: pretix/control/templates/pretixcontrol/base.html:207 msgid "End admin session" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:218 +#: pretix/control/templates/pretixcontrol/base.html:219 msgid "Account Settings" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:223 -#: pretix/control/templates/pretixcontrol/base.html:225 +#: pretix/control/templates/pretixcontrol/base.html:224 +#: pretix/control/templates/pretixcontrol/base.html:226 #: pretix/presale/templates/pretixpresale/fragment_login_status.html:14 msgid "Log out" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:251 +#: pretix/control/templates/pretixcontrol/base.html:252 msgid "Organizer account" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:274 +#: pretix/control/templates/pretixcontrol/base.html:275 msgid "Search for events" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:331 +#: pretix/control/templates/pretixcontrol/base.html:332 #: pretix/presale/templates/pretixpresale/base.html:51 msgid "" "We've detected that you are using Microsoft Internet Explorer." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:334 +#: pretix/control/templates/pretixcontrol/base.html:335 #: pretix/presale/templates/pretixpresale/base.html:54 msgid "" "Internet Explorer is an old browser that does not support lots of recent web-" "based technologies and is no longer supported by this website." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:338 +#: pretix/control/templates/pretixcontrol/base.html:339 #: pretix/presale/templates/pretixpresale/base.html:58 msgid "" "We kindly ask you to move to one of our supported browsers, such as " "Microsoft Edge, Mozilla Firefox, Google Chrome, or Safari." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:347 +#: pretix/control/templates/pretixcontrol/base.html:348 msgid "" "Please leave a short comment on what you did in the following admin sessions:" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:378 +#: pretix/control/templates/pretixcontrol/base.html:379 msgid "Read more" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:395 +#: pretix/control/templates/pretixcontrol/base.html:396 msgid "" "Your event contains test mode orders even though " "test mode has been disabled. You should delete those orders " @@ -20083,11 +20293,11 @@ msgid "" "people from actually buying tickets." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:402 +#: pretix/control/templates/pretixcontrol/base.html:403 msgid "Show all test mode orders" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:410 +#: pretix/control/templates/pretixcontrol/base.html:411 msgid "" "Starting with version 1.2.0, pretix automatically checks for updates in the " "background. During this check, anonymous data is transmitted to servers " @@ -20096,41 +20306,41 @@ msgid "" "if a new update arrives. This message will disappear once you clicked it." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:423 +#: pretix/control/templates/pretixcontrol/base.html:424 msgid "" "Click here to do a license compliance check to make sure your usage of " "pretix is in line with pretix' license." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:432 +#: pretix/control/templates/pretixcontrol/base.html:433 msgid "" "The cronjob component of pretix was not executed in the last hours. Please " "check that you have completed all installation steps and your cronjob is " "executed correctly." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:441 +#: pretix/control/templates/pretixcontrol/base.html:442 msgid "" "pretix is running in debug mode. For security reasons, please never run " "debug mode on a production instance." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:447 +#: pretix/control/templates/pretixcontrol/base.html:448 msgid "" "For security reasons, please change your password before you continue. " "Afterwards you will be redirected to your original destination." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:459 +#: pretix/control/templates/pretixcontrol/base.html:460 #, python-format msgid "Times displayed in %(tz)s" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:465 +#: pretix/control/templates/pretixcontrol/base.html:466 msgid "running in development mode" msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:474 +#: pretix/control/templates/pretixcontrol/base.html:475 #: pretix/presale/templates/pretixpresale/fragment_modals.html:38 #: pretix/presale/templates/pretixpresale/postmessage.html:27 #: pretix/presale/templates/pretixpresale/waiting.html:42 @@ -20147,6 +20357,7 @@ msgid "Receipt ID" msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:11 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:29 msgid "ID" msgstr "" @@ -20370,10 +20581,11 @@ msgstr[1] "Segur que voleu esborrar el val %(voucher)s ?" #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html:16 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:10 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:21 -#: pretix/control/templates/pretixcontrol/pdf/index.html:153 +#: pretix/control/templates/pretixcontrol/pdf/index.html:151 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:378 #: pretix/control/templates/pretixcontrol/subevents/delete.html:12 #: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:41 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:289 #: pretix/control/templates/pretixcontrol/user/2fa_delete.html:18 #: pretix/control/templates/pretixcontrol/user/2fa_disable.html:17 #: pretix/control/templates/pretixcontrol/user/2fa_enable.html:18 @@ -20430,7 +20642,7 @@ msgstr "Cancel·lar" #: pretix/control/templates/pretixcontrol/organizers/ssoclient_delete.html:20 #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html:20 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:24 -#: pretix/control/templates/pretixcontrol/pdf/index.html:111 +#: pretix/control/templates/pretixcontrol/pdf/index.html:109 #: pretix/control/templates/pretixcontrol/subevents/delete.html:15 #: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:44 #: pretix/control/templates/pretixcontrol/user/2fa_delete.html:21 @@ -20439,7 +20651,7 @@ msgstr "Cancel·lar" #: pretix/control/templates/pretixcontrol/vouchers/delete_carts.html:16 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:15 #: pretix/control/templates/pretixcontrol/waitinglist/delete_bulk.html:36 -#: pretix/control/views/orders.py:390 +#: pretix/control/views/orders.py:391 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/delete.html:15 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:16 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_delete.html:15 @@ -20577,6 +20789,7 @@ msgstr "La comanda s'ha denegat" #: pretix/control/templates/pretixcontrol/event/index.html:24 #: pretix/control/templates/pretixcontrol/organizers/device_connect.html:27 #: pretix/control/templates/pretixcontrol/organizers/device_connect.html:33 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:33 msgid "Copy to clipboard" msgstr "" @@ -20795,6 +21008,7 @@ msgstr "Filtra per estat" #: pretix/control/templates/pretixcontrol/items/discounts.html:158 #: pretix/control/templates/pretixcontrol/items/index.html:176 #: pretix/control/templates/pretixcontrol/items/quotas.html:162 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:185 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:89 #: pretix/plugins/badges/templates/pretixplugins/badges/index.html:72 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:69 @@ -20856,24 +21070,37 @@ msgstr "" msgid "Simulate" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:67 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:69 #, fuzzy #| msgid "Filter by status" msgid "Valid check-in" msgstr "Filtra per estat" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:69 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:71 #, fuzzy #| msgid "Meta information" msgid "Additional information required" msgstr "Informació meta" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:71 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:73 msgid "" "The following questions must be answered before check-in can be completed:" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:93 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:85 +#, fuzzy +#| msgid "Requires special attention" +msgid "Media exchange required" +msgstr "Requereix atenció especial" + +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:87 +#, python-format +msgid "" +"This ticket needs to be exchanged into a %(media_type)s " +"reusable medium. %(media_policy)s." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:103 #, fuzzy #| msgid "Requires special attention" msgid "Special attention required" @@ -21406,20 +21633,20 @@ msgid "Cancel or delete event" msgstr "Poden crear esdeveniments" #: pretix/control/templates/pretixcontrol/event/dangerzone.html:9 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:25 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:27 #: pretix/control/templates/pretixcontrol/event/delete.html:60 #: pretix/control/templates/pretixcontrol/event/live.html:31 msgid "Go offline" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:13 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:14 msgid "" "You can take your event offline. Nobody except your team will be able to see " "or access it any more." msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:34 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:48 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:35 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:51 #: pretix/control/templates/pretixcontrol/orders/cancel.html:5 #: pretix/control/templates/pretixcontrol/orders/cancel.html:7 #: pretix/control/templates/pretixcontrol/orders/cancel_confirm.html:6 @@ -21429,39 +21656,39 @@ msgstr "" msgid "Cancel event" msgstr "Poden crear esdeveniments" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:38 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:40 msgid "" "If you need to call off your event you want to cancel and refund all " "tickets, you can do so through this option." msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:51 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:53 #, fuzzy #| msgid "Permissions" msgid "No permission" msgstr "Permisos" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:59 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:72 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:62 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:76 #: pretix/control/templates/pretixcontrol/event/delete.html:56 #: pretix/control/templates/pretixcontrol/event/delete.html:70 msgid "Delete personal data" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:63 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:67 msgid "" "You can remove personal data such as names and email addresses from your " "event and only retain the financial information such as the number and type " "of tickets sold." msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:80 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:93 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:84 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:99 #: pretix/control/templates/pretixcontrol/event/delete.html:5 msgid "Delete event" msgstr "" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:84 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:89 msgid "" "You can delete your event completely only as long as it does not contain any " "undeletable data, such as orders not performed in test mode." @@ -21583,6 +21810,7 @@ msgid "Shop URL:" msgstr "URL de sistema:" #: pretix/control/templates/pretixcontrol/event/index.html:27 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:38 #: pretix/control/templates/pretixcontrol/vouchers/detail.html:57 #, fuzzy #| msgid "Order code" @@ -21933,9 +22161,10 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:16 #: pretix/control/templates/pretixcontrol/organizers/mail.html:34 #: pretix/control/templates/pretixcontrol/organizers/mail.html:48 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:83 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:95 #: pretix/control/templates/pretixcontrol/organizers/team_members.html:10 #: pretix/control/templates/pretixcontrol/organizers/webhooks.html:72 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:18 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:94 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:117 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:85 @@ -21955,7 +22184,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/event/mail.html:79 #: pretix/control/templates/pretixcontrol/event/mail_settings_fragment.html:29 #: pretix/control/templates/pretixcontrol/event/tickets.html:35 -#: pretix/control/templates/pretixcontrol/pdf/index.html:41 +#: pretix/control/templates/pretixcontrol/pdf/index.html:39 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:97 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:120 msgid "Preview" @@ -22024,6 +22253,7 @@ msgid "Enabled" msgstr "" #: pretix/control/templates/pretixcontrol/event/payment.html:28 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:34 #: pretix/control/templates/pretixcontrol/subevents/index.html:170 #: pretix/control/templates/pretixcontrol/user/settings.html:81 msgid "Disabled" @@ -22092,11 +22322,11 @@ msgstr "" #: pretix/control/templates/pretixcontrol/event/plugins.html:15 #: pretix/control/templates/pretixcontrol/organizers/plugins.html:15 -#: pretix/control/views/checkin.py:425 pretix/control/views/discounts.py:113 -#: pretix/control/views/event.py:254 pretix/control/views/event.py:583 -#: pretix/control/views/event.py:622 pretix/control/views/event.py:819 -#: pretix/control/views/event.py:1060 pretix/control/views/event.py:1423 -#: pretix/control/views/event.py:1463 +#: pretix/control/views/checkin.py:426 pretix/control/views/discounts.py:113 +#: pretix/control/views/event.py:255 pretix/control/views/event.py:584 +#: pretix/control/views/event.py:623 pretix/control/views/event.py:820 +#: pretix/control/views/event.py:1061 pretix/control/views/event.py:1427 +#: pretix/control/views/event.py:1467 #: pretix/control/views/global_settings.py:65 #: pretix/control/views/global_settings.py:88 pretix/control/views/item.py:271 #: pretix/control/views/item.py:784 pretix/control/views/item.py:1035 @@ -22112,22 +22342,22 @@ msgstr "" #: pretix/control/views/organizer.py:2421 #: pretix/control/views/organizer.py:2558 #: pretix/control/views/organizer.py:2755 -#: pretix/control/views/organizer.py:2871 -#: pretix/control/views/organizer.py:3000 -#: pretix/control/views/organizer.py:3197 -#: pretix/control/views/organizer.py:3226 -#: pretix/control/views/organizer.py:3266 -#: pretix/control/views/organizer.py:3343 -#: pretix/control/views/organizer.py:3440 -#: pretix/control/views/organizer.py:3469 -#: pretix/control/views/organizer.py:3607 pretix/control/views/subevents.py:543 -#: pretix/control/views/subevents.py:1666 pretix/control/views/user.py:241 +#: pretix/control/views/organizer.py:2873 +#: pretix/control/views/organizer.py:3002 +#: pretix/control/views/organizer.py:3199 +#: pretix/control/views/organizer.py:3228 +#: pretix/control/views/organizer.py:3268 +#: pretix/control/views/organizer.py:3345 +#: pretix/control/views/organizer.py:3448 +#: pretix/control/views/organizer.py:3504 +#: pretix/control/views/organizer.py:3642 pretix/control/views/subevents.py:608 +#: pretix/control/views/subevents.py:1739 pretix/control/views/user.py:241 #: pretix/control/views/user.py:857 pretix/control/views/users.py:113 #: pretix/control/views/vouchers.py:306 pretix/plugins/autocheckin/views.py:164 #: pretix/plugins/badges/views.py:158 pretix/plugins/sendmail/views.py:645 #: pretix/plugins/stripe/views.py:699 #: pretix/plugins/ticketoutputpdf/views.py:172 -#: pretix/presale/views/customer.py:544 pretix/presale/views/customer.py:597 +#: pretix/presale/views/customer.py:546 pretix/presale/views/customer.py:599 msgid "Your changes have been saved." msgstr "" @@ -22318,7 +22548,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/item/index.html:127 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:394 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:77 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:35 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:35 msgid "Meta data" msgstr "" @@ -22424,7 +22654,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/events/create_basics.html:59 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:413 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:96 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:54 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:54 msgid "Timeline" msgstr "" @@ -22700,7 +22930,7 @@ msgid "Add a new rule" msgstr "" #: pretix/control/templates/pretixcontrol/event/tax_edit.html:153 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:392 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:393 #, fuzzy #| msgid "Can change orders" msgid "Change history" @@ -22818,10 +23048,11 @@ msgstr "" #: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:22 #: pretix/control/templates/pretixcontrol/items/quota_edit.html:21 #: pretix/control/templates/pretixcontrol/organizers/create.html:11 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:20 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:21 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:386 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:31 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:23 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:25 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:23 msgid "General information" msgstr "Informació general" @@ -23571,7 +23802,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/item/index.html:254 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:621 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:262 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:262 msgid "Additional settings" msgstr "" @@ -23809,7 +24040,7 @@ msgstr "Completament reservat" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:108 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:36 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:72 -#: pretix/presale/views/widget.py:490 +#: pretix/presale/views/widget.py:493 msgid "Sold out" msgstr "Esgotat" @@ -24180,6 +24411,7 @@ msgid "You haven't created any quotas yet." msgstr "Encara no heu creat cap quota." #: pretix/control/templates/pretixcontrol/items/quotas.html:108 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:84 msgid "Capacity left" msgstr "Capacitat restant" @@ -24302,16 +24534,16 @@ msgstr "Permisos" msgid "No applications have access to your pretix account." msgstr "No hi ha cap aplicació amb accés al vostre compte de pretix." -#: pretix/control/templates/pretixcontrol/order/approve.html:4 -#: pretix/control/templates/pretixcontrol/order/approve.html:8 +#: pretix/control/templates/pretixcontrol/order/approve.html:5 +#: pretix/control/templates/pretixcontrol/order/approve.html:9 msgid "Approve order" msgstr "Aprovar la comanda" -#: pretix/control/templates/pretixcontrol/order/approve.html:10 +#: pretix/control/templates/pretixcontrol/order/approve.html:14 msgid "Do you really want to approve this order?" msgstr "Voleu realment aprovar aquesta comanda ?" -#: pretix/control/templates/pretixcontrol/order/approve.html:20 +#: pretix/control/templates/pretixcontrol/order/approve.html:24 #: pretix/control/templates/pretixcontrol/order/cancel.html:46 #: pretix/control/templates/pretixcontrol/order/cancellation_request_delete.html:21 #: pretix/control/templates/pretixcontrol/order/delete.html:20 @@ -24322,7 +24554,7 @@ msgstr "Voleu realment aprovar aquesta comanda ?" msgid "No, take me back" msgstr "No, tornar enrera" -#: pretix/control/templates/pretixcontrol/order/approve.html:25 +#: pretix/control/templates/pretixcontrol/order/approve.html:29 msgid "Yes, approve order" msgstr "Sí, aprovar la comanda" @@ -24641,13 +24873,13 @@ msgstr "Detalls de la comanda: %(code)s" #: pretix/control/templates/pretixcontrol/order/index.html:46 #: pretix/control/templates/pretixcontrol/orders/index.html:297 -#: pretix/control/views/orders.py:314 +#: pretix/control/views/orders.py:315 msgid "Approve" msgstr "Aprovar" #: pretix/control/templates/pretixcontrol/order/index.html:51 #: pretix/control/templates/pretixcontrol/orders/index.html:304 -#: pretix/control/views/orders.py:328 +#: pretix/control/views/orders.py:329 msgid "Deny" msgstr "Denegar" @@ -24688,7 +24920,7 @@ msgid "" msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:116 -#: pretix/control/views/orders.py:376 +#: pretix/control/views/orders.py:377 #, fuzzy #| msgid "Refund order" msgid "Refund for overpayment" @@ -25915,6 +26147,8 @@ msgstr "Total de comandes" #: pretix/control/templates/pretixcontrol/orders/index.html:194 #: pretix/control/templates/pretixcontrol/search/orders.html:80 #: pretix/control/templates/pretixcontrol/search/orders.html:82 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:265 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:269 #, fuzzy, python-format #| msgid "Expired" msgctxt "followup" @@ -25984,14 +26218,14 @@ msgid "Select action" msgstr "No ha començat la prevenda" #: pretix/control/templates/pretixcontrol/orders/index.html:311 -#: pretix/control/views/orders.py:360 +#: pretix/control/views/orders.py:361 #, fuzzy #| msgid "Refund full paid amount" msgid "Refund overpaid amount" msgstr "Reemborsar tot l'import pagat" #: pretix/control/templates/pretixcontrol/orders/index.html:319 -#: pretix/control/views/orders.py:345 +#: pretix/control/views/orders.py:346 msgid "Mark as expired if overdue" msgstr "" @@ -26490,11 +26724,11 @@ msgid "" "pretix. This will be ignored if a URL is configured." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:229 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:230 msgid "Barcode media" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:233 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:234 msgid "" "A \"barcode medium\" can be any printed or digital representation of a " "barcode. The medium will initially be created through the sale of a product " @@ -26503,57 +26737,57 @@ msgid "" "same barcode may be re-used during the sale of a different product." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:240 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:241 msgid "Barcode media can currently only be connected to tickets." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:243 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:244 msgid "" "This subsequent reuse of the barcode is currently only supported during POS " "sales." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:260 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:261 msgid "" "This medium type can work with almost any type of NFC chip. With this " "option, only the UID of the NFC chip is used for identification." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:264 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:296 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:265 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:297 msgid "NFC media can currently only be connected to gift cards." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:270 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:271 msgid "" "This method does not provide a high level of protection against abuse since " "it is possible for malicious users to clone someone's chip with the same UID." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:291 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:292 msgid "" "This medium type works only with NFC chips of the type Mifare Ultralight AES " "made by NXP. This provides a higher level of security than other approaches, " "but requires all chips to be encoded prior to use." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:318 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:319 #, fuzzy #| msgid "Known domains" msgid "Domains" msgstr "Dominis coneguts" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:320 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:321 msgid "This dialog is intended for advanced users." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:321 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:322 msgid "" "The domain needs to be configured on your webserver before it can be used " "here." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:377 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:378 #, fuzzy #| msgid "Address line" msgid "Add domain" @@ -27089,7 +27323,7 @@ msgid "Media type" msgstr "Tipus de tarifa" #: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:63 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:40 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:52 #, fuzzy #| msgid "Connect" msgctxt "reusable_media" @@ -27106,7 +27340,7 @@ msgctxt "reusable_media" msgid "Medium %(id)s" msgstr "Adreça de correu electrònic" -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:94 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:106 #, fuzzy #| msgid "Product history" msgctxt "reusable_media" @@ -27211,20 +27445,41 @@ msgstr "" msgid "Are you sure you want to delete the team?" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:7 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:8 #: pretix/control/templates/pretixcontrol/organizers/team_members.html:6 msgid "Team:" msgstr "Equip:" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:9 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:10 #: pretix/control/templates/pretixcontrol/organizers/teams.html:30 msgid "Create a new team" msgstr "Crear un nou equip" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:11 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:12 msgid "You will be able to add team members in the next step." msgstr "" +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:31 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:55 +msgid "" +"Even if a team has no access to a certain category of data, they might still " +"be able to see parts of this data when it is linked to data they can see." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:35 +msgid "" +"For example, someone with access to customer accounts will be able to see " +"some information about gift cards linked to a customer account, even if they " +"generally can't see gift cards directly." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:59 +msgid "" +"For example, someone with access to orders will be able to see some " +"information about vouchers used to create an order, even if they generally " +"can't see vouchers directly." +msgstr "" + #: pretix/control/templates/pretixcontrol/organizers/team_members.html:21 msgid "Member" msgstr "Membre" @@ -27400,95 +27655,95 @@ msgstr "" msgid "PDF Editor" msgstr "Editor PDF" -#: pretix/control/templates/pretixcontrol/pdf/index.html:36 +#: pretix/control/templates/pretixcontrol/pdf/index.html:34 #: pretix/plugins/banktransfer/refund_export.py:47 msgid "Code" msgstr "Codi" -#: pretix/control/templates/pretixcontrol/pdf/index.html:52 +#: pretix/control/templates/pretixcontrol/pdf/index.html:50 #, fuzzy #| msgid "Text" msgid "Text box" msgstr "Text" -#: pretix/control/templates/pretixcontrol/pdf/index.html:59 +#: pretix/control/templates/pretixcontrol/pdf/index.html:57 #, fuzzy #| msgid "Code" msgid "QR Code" msgstr "Codi" -#: pretix/control/templates/pretixcontrol/pdf/index.html:64 +#: pretix/control/templates/pretixcontrol/pdf/index.html:62 msgid "QR code for Check-In" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:71 +#: pretix/control/templates/pretixcontrol/pdf/index.html:69 msgid "QR code for Lead Scanning" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:78 +#: pretix/control/templates/pretixcontrol/pdf/index.html:76 #, fuzzy #| msgid "Order code" msgid "Other QR code" msgstr "Codi de comanda" -#: pretix/control/templates/pretixcontrol/pdf/index.html:87 +#: pretix/control/templates/pretixcontrol/pdf/index.html:85 msgid "Image" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:92 +#: pretix/control/templates/pretixcontrol/pdf/index.html:90 msgid "" "You can use this to add user-uploaded pictures from questions or pictures " "generated by plugins. If you want to embed a logo or other images, use a " "custom background instead." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:93 +#: pretix/control/templates/pretixcontrol/pdf/index.html:91 msgid "Dynamic image" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:100 +#: pretix/control/templates/pretixcontrol/pdf/index.html:98 msgid "pretix Logo" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:107 +#: pretix/control/templates/pretixcontrol/pdf/index.html:105 msgid "Duplicate" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:117 +#: pretix/control/templates/pretixcontrol/pdf/index.html:115 msgid "Undo" msgstr "Desfer" -#: pretix/control/templates/pretixcontrol/pdf/index.html:121 +#: pretix/control/templates/pretixcontrol/pdf/index.html:119 msgid "Redo" msgstr "Refer" -#: pretix/control/templates/pretixcontrol/pdf/index.html:142 +#: pretix/control/templates/pretixcontrol/pdf/index.html:140 msgid "" "This feature is only intended for advanced users. We recommend to only use " "it to copy and share ticket designs, not to modify the design source code." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:156 +#: pretix/control/templates/pretixcontrol/pdf/index.html:154 #: pretix/presale/templates/pretixpresale/giftcard/checkout.html:26 msgid "Apply" msgstr "Aplicar" -#: pretix/control/templates/pretixcontrol/pdf/index.html:164 +#: pretix/control/templates/pretixcontrol/pdf/index.html:162 msgid "Uploading new PDF background…" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:172 +#: pretix/control/templates/pretixcontrol/pdf/index.html:170 msgid "Welcome to the PDF ticket editor!" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:174 +#: pretix/control/templates/pretixcontrol/pdf/index.html:172 msgid "" "This editor allows you to create a design for the PDF tickets of your event. " "You can upload a background PDF and then use this tool to place texts and a " "QR code on the ticket." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:185 +#: pretix/control/templates/pretixcontrol/pdf/index.html:183 msgid "" "Please note that the editor can only provide a rough preview. Some details, " "for example in text rendering, might look slightly different in the final " @@ -27496,7 +27751,7 @@ msgid "" "preview." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:199 +#: pretix/control/templates/pretixcontrol/pdf/index.html:197 msgid "" "The editor is tested with recent versions of Google Chrome, Mozilla Firefox " "and Opera. Other browsers, especially Internet Explorer or Microsoft Edge, " @@ -27504,97 +27759,97 @@ msgid "" "fonts." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:207 +#: pretix/control/templates/pretixcontrol/pdf/index.html:205 msgid "" "The editor requires JavaScript to work. Please enable JavaScript in your " "browser to continue." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:217 -#: pretix/control/templates/pretixcontrol/pdf/index.html:233 +#: pretix/control/templates/pretixcontrol/pdf/index.html:215 +#: pretix/control/templates/pretixcontrol/pdf/index.html:231 msgid "Loading…" msgstr "Carregant…" -#: pretix/control/templates/pretixcontrol/pdf/index.html:220 +#: pretix/control/templates/pretixcontrol/pdf/index.html:218 msgid "Start editing" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:240 +#: pretix/control/templates/pretixcontrol/pdf/index.html:238 #, fuzzy #| msgid "Seat name" msgid "Layout name" msgstr "Nom de seient" -#: pretix/control/templates/pretixcontrol/pdf/index.html:247 +#: pretix/control/templates/pretixcontrol/pdf/index.html:245 #, fuzzy #| msgid "Use languages" msgid "Preferred language" msgstr "Usa idiomes" -#: pretix/control/templates/pretixcontrol/pdf/index.html:260 -#: pretix/control/templates/pretixcontrol/pdf/index.html:270 +#: pretix/control/templates/pretixcontrol/pdf/index.html:258 +#: pretix/control/templates/pretixcontrol/pdf/index.html:268 msgid "Upload PDF as background" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:262 +#: pretix/control/templates/pretixcontrol/pdf/index.html:260 msgid "" "You can upload a PDF to use as a custom background. The paper size will " "match the PDF." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:274 +#: pretix/control/templates/pretixcontrol/pdf/index.html:272 #, python-format msgid "max. %(size)s, smaller is better" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:282 +#: pretix/control/templates/pretixcontrol/pdf/index.html:280 msgid "Download current background" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:289 +#: pretix/control/templates/pretixcontrol/pdf/index.html:287 #, fuzzy #| msgid "Any customer" msgid "Or choose custom paper size" msgstr "Qualsevol client" -#: pretix/control/templates/pretixcontrol/pdf/index.html:291 +#: pretix/control/templates/pretixcontrol/pdf/index.html:289 msgid "" "To manually change the paper size, you need to create a new, empty " "background." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:299 -#: pretix/control/templates/pretixcontrol/pdf/index.html:386 -#: pretix/control/templates/pretixcontrol/pdf/index.html:428 +#: pretix/control/templates/pretixcontrol/pdf/index.html:297 +#: pretix/control/templates/pretixcontrol/pdf/index.html:384 +#: pretix/control/templates/pretixcontrol/pdf/index.html:426 msgid "Width (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:303 -#: pretix/control/templates/pretixcontrol/pdf/index.html:391 +#: pretix/control/templates/pretixcontrol/pdf/index.html:301 +#: pretix/control/templates/pretixcontrol/pdf/index.html:389 msgid "Height (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:312 +#: pretix/control/templates/pretixcontrol/pdf/index.html:310 msgid "Create empty background" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:319 +#: pretix/control/templates/pretixcontrol/pdf/index.html:317 msgid "Style" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:321 +#: pretix/control/templates/pretixcontrol/pdf/index.html:319 msgid "Dark" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:322 +#: pretix/control/templates/pretixcontrol/pdf/index.html:320 msgid "Light" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:328 +#: pretix/control/templates/pretixcontrol/pdf/index.html:326 msgid "Image content" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:339 +#: pretix/control/templates/pretixcontrol/pdf/index.html:337 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_create.html:20 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_update.html:34 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:29 @@ -27603,87 +27858,87 @@ msgstr "" msgid "Content" msgstr "Adreça de contacte" -#: pretix/control/templates/pretixcontrol/pdf/index.html:348 +#: pretix/control/templates/pretixcontrol/pdf/index.html:346 #: pretix/control/templates/pretixcontrol/pdf/placeholders.html:50 msgid "Event attribute:" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:353 +#: pretix/control/templates/pretixcontrol/pdf/index.html:351 #: pretix/control/templates/pretixcontrol/pdf/placeholders.html:59 msgid "Item attribute:" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:356 +#: pretix/control/templates/pretixcontrol/pdf/index.html:354 msgid "Other… (multilingual)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:357 +#: pretix/control/templates/pretixcontrol/pdf/index.html:355 msgid "Other…" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:367 +#: pretix/control/templates/pretixcontrol/pdf/index.html:365 #, fuzzy #| msgid "Available placeholders: {event}, {url}" msgid "Show available placeholders" msgstr "Camps disponibles: {event}, {url}" -#: pretix/control/templates/pretixcontrol/pdf/index.html:374 +#: pretix/control/templates/pretixcontrol/pdf/index.html:372 msgid "x (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:379 +#: pretix/control/templates/pretixcontrol/pdf/index.html:377 msgid "y (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:398 +#: pretix/control/templates/pretixcontrol/pdf/index.html:396 msgid "Size (mm)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:405 +#: pretix/control/templates/pretixcontrol/pdf/index.html:403 msgid "QR color" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:420 +#: pretix/control/templates/pretixcontrol/pdf/index.html:418 msgid "Render without whitespace" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:422 +#: pretix/control/templates/pretixcontrol/pdf/index.html:420 msgid "" "Required for consistent size across platforms. Supported on Android starting " "with pretixPRINT 2.3.3 and on Desktop with pretixSCAN 1.9.3." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:433 +#: pretix/control/templates/pretixcontrol/pdf/index.html:431 msgid "Rotation (°)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:452 +#: pretix/control/templates/pretixcontrol/pdf/index.html:450 msgid "Font size (pt)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:457 +#: pretix/control/templates/pretixcontrol/pdf/index.html:455 msgid "Line height" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:464 +#: pretix/control/templates/pretixcontrol/pdf/index.html:462 msgid "Text color" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:487 +#: pretix/control/templates/pretixcontrol/pdf/index.html:485 msgid "Flow multiple lines downward from specified position" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:541 +#: pretix/control/templates/pretixcontrol/pdf/index.html:539 #, fuzzy #| msgid "Automatically expire unpaid orders" msgid "Automatically reduce font size to fit content" msgstr "Expira automàticament comandes no pagades" -#: pretix/control/templates/pretixcontrol/pdf/index.html:547 +#: pretix/control/templates/pretixcontrol/pdf/index.html:545 msgid "Allow long words to be split (preview is not accurate)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:558 +#: pretix/control/templates/pretixcontrol/pdf/index.html:556 #, python-format msgid "" "This layout uses new features. If you print from your device, make sure you " @@ -27912,26 +28167,26 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:483 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:266 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:124 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:124 msgid "Add a new quota" msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:487 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:128 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:128 #, fuzzy #| msgid "Account settings" msgid "Product settings" msgstr "Configuració del compte" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:489 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:130 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:130 msgid "" "These settings are optional, if you leave them empty, the default values " "from the product settings will be used." msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:525 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:166 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:166 msgid "" "You can choose to either add one or more check-in lists for every date in " "your series individually, or use just one check-in list for all your dates " @@ -27945,7 +28200,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:604 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:359 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:245 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:245 msgid "Add a new check-in list" msgstr "" @@ -28027,16 +28282,43 @@ msgid "" "be disabled instead." msgstr "" -#: pretix/control/templates/pretixcontrol/subevents/detail.html:10 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:9 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:13 +#, fuzzy, python-format +#| msgid "Quota: %(name)s" msgctxt "subevent" -msgid "Create date" -msgstr "" +msgid "Date: %(name)s" +msgstr "Quota: %(name)s" -#: pretix/control/templates/pretixcontrol/subevents/detail.html:279 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:234 +#, fuzzy +#| msgid "Mark as paid" +msgid "partially canceled" +msgstr "Marcar com a pagat" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:282 +#, fuzzy +#| msgid "Show all" +msgid "View all" +msgstr "Mostrar-ho tot" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:289 +#, fuzzy +#| msgid "No valid orders have been found." +msgid "No orders found." +msgstr "No s'han trobat comandes vàlides." + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:302 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:279 msgctxt "subevent" msgid "Date history" msgstr "" +#: pretix/control/templates/pretixcontrol/subevents/edit.html:10 +msgctxt "subevent" +msgid "Create date" +msgstr "" + #: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:3 #: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:5 #, fuzzy @@ -29130,21 +29412,21 @@ msgstr "" msgid "The new check-in list has been created." msgstr "" -#: pretix/control/views/checkin.py:382 pretix/control/views/checkin.py:442 +#: pretix/control/views/checkin.py:382 pretix/control/views/checkin.py:443 #: pretix/control/views/discounts.py:134 pretix/control/views/discounts.py:182 -#: pretix/control/views/event.py:283 pretix/control/views/event.py:586 -#: pretix/control/views/event.py:625 pretix/control/views/event.py:822 -#: pretix/control/views/event.py:1026 pretix/control/views/event.py:1376 -#: pretix/control/views/event.py:1442 pretix/control/views/event.py:1594 +#: pretix/control/views/event.py:284 pretix/control/views/event.py:587 +#: pretix/control/views/event.py:626 pretix/control/views/event.py:823 +#: pretix/control/views/event.py:1027 pretix/control/views/event.py:1380 +#: pretix/control/views/event.py:1446 pretix/control/views/event.py:1598 #: pretix/control/views/item.py:287 pretix/control/views/item.py:334 #: pretix/control/views/item.py:794 pretix/control/views/item.py:820 #: pretix/control/views/item.py:1054 pretix/control/views/item.py:1106 #: pretix/control/views/item.py:1310 pretix/control/views/item.py:1476 #: pretix/control/views/item.py:1668 pretix/control/views/organizer.py:281 #: pretix/control/views/organizer.py:309 pretix/control/views/organizer.py:1450 -#: pretix/control/views/subevents.py:521 pretix/control/views/subevents.py:667 -#: pretix/control/views/subevents.py:1112 -#: pretix/control/views/subevents.py:1574 pretix/control/views/user.py:342 +#: pretix/control/views/subevents.py:586 pretix/control/views/subevents.py:740 +#: pretix/control/views/subevents.py:1185 +#: pretix/control/views/subevents.py:1647 pretix/control/views/user.py:342 #: pretix/control/views/user.py:861 pretix/control/views/user.py:901 #: pretix/control/views/vouchers.py:278 pretix/control/views/vouchers.py:352 #: pretix/control/views/vouchers.py:535 pretix/control/views/waitinglist.py:427 @@ -29156,11 +29438,11 @@ msgstr "" msgid "We could not save your changes. See below for details." msgstr "" -#: pretix/control/views/checkin.py:421 pretix/control/views/checkin.py:458 +#: pretix/control/views/checkin.py:422 pretix/control/views/checkin.py:459 msgid "The requested list does not exist." msgstr "" -#: pretix/control/views/checkin.py:467 +#: pretix/control/views/checkin.py:468 msgid "The selected list has been deleted." msgstr "" @@ -29246,7 +29528,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:117 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:48 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:80 -#: pretix/presale/views/widget.py:504 +#: pretix/presale/views/widget.py:507 msgid "Sale over" msgstr "" @@ -29254,7 +29536,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_calendar.html:119 #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:125 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:88 -#: pretix/presale/views/widget.py:515 +#: pretix/presale/views/widget.py:518 msgid "Soon" msgstr "" @@ -29336,7 +29618,7 @@ msgstr "S'ha actualitzat la cistella." #: pretix/control/views/discounts.py:260 pretix/control/views/item.py:197 #: pretix/control/views/item.py:409 pretix/control/views/item.py:543 #: pretix/control/views/organizer.py:2641 -#: pretix/control/views/organizer.py:3702 +#: pretix/control/views/organizer.py:3737 msgid "Some of the provided object ids are invalid." msgstr "" @@ -29346,7 +29628,7 @@ msgstr "" msgid "Not all discounts have been selected." msgstr "Aquesta posició de la comanda s'ha cancel·lat." -#: pretix/control/views/event.py:463 +#: pretix/control/views/event.py:464 #, fuzzy #| msgid "You do not have permission to clone this event." msgid "" @@ -29354,129 +29636,129 @@ msgid "" "enabled for the entire organizer account." msgstr "No teniu permís per clonar aquest event." -#: pretix/control/views/event.py:480 pretix/control/views/organizer.py:717 +#: pretix/control/views/event.py:481 pretix/control/views/organizer.py:717 #, python-brace-format msgid "The plugin {} is now active, you can configure it here:" msgstr "" -#: pretix/control/views/event.py:489 pretix/control/views/organizer.py:726 +#: pretix/control/views/event.py:490 pretix/control/views/organizer.py:726 #, fuzzy, python-brace-format #| msgid "This product is currently not available." msgid "The plugin {} is now active." msgstr "Aquest producte no es troba actualment disponible." -#: pretix/control/views/event.py:554 +#: pretix/control/views/event.py:555 msgid "" "This payment provider does not exist or the respective plugin is disabled." msgstr "" -#: pretix/control/views/event.py:861 pretix/control/views/organizer.py:362 +#: pretix/control/views/event.py:862 pretix/control/views/organizer.py:362 #: pretix/control/views/vouchers.py:562 msgid "invalid item" msgstr "" -#: pretix/control/views/event.py:948 +#: pretix/control/views/event.py:949 #, fuzzy, python-format #| msgid "Your order: {code}" msgid "Your order: %(code)s" msgstr "La vostra comanda: {code}" -#: pretix/control/views/event.py:957 +#: pretix/control/views/event.py:958 msgid "Unknown email renderer." msgstr "" -#: pretix/control/views/event.py:973 pretix/control/views/orders.py:687 +#: pretix/control/views/event.py:974 pretix/control/views/orders.py:701 #: pretix/presale/views/order.py:1177 pretix/presale/views/order.py:1184 msgid "You requested an invalid ticket output type." msgstr "" -#: pretix/control/views/event.py:1121 +#: pretix/control/views/event.py:1122 msgid "Your shop is live now!" msgstr "" -#: pretix/control/views/event.py:1129 +#: pretix/control/views/event.py:1130 msgid "We've taken your shop down. You can re-enable it whenever you want!" msgstr "" -#: pretix/control/views/event.py:1137 +#: pretix/control/views/event.py:1138 msgid "Your shop is now in test mode!" msgstr "" -#: pretix/control/views/event.py:1154 +#: pretix/control/views/event.py:1158 msgid "" "An order could not be deleted as some constraints (e.g. data created by plug-" "ins) do not allow it." msgstr "" -#: pretix/control/views/event.py:1160 +#: pretix/control/views/event.py:1164 msgid "We've disabled test mode for you. Let's sell some real tickets!" msgstr "" -#: pretix/control/views/event.py:1182 +#: pretix/control/views/event.py:1186 msgid "This event can not be deleted." msgstr "" -#: pretix/control/views/event.py:1205 +#: pretix/control/views/event.py:1209 msgid "The event has been deleted." msgstr "" -#: pretix/control/views/event.py:1208 +#: pretix/control/views/event.py:1212 msgid "" "The event could not be deleted as some constraints (e.g. data created by " "plug-ins) do not allow it." msgstr "" -#: pretix/control/views/event.py:1224 +#: pretix/control/views/event.py:1228 #, python-brace-format msgid "" "Specifically, the following plugins still contain data depends on this " "event: {plugin_names}" msgstr "" -#: pretix/control/views/event.py:1304 pretix/control/views/orders.py:767 +#: pretix/control/views/event.py:1308 pretix/control/views/orders.py:781 msgid "The comment has been updated." msgstr "" -#: pretix/control/views/event.py:1306 pretix/control/views/orders.py:769 +#: pretix/control/views/event.py:1310 pretix/control/views/orders.py:783 msgid "Could not update the comment." msgstr "" -#: pretix/control/views/event.py:1334 pretix/control/views/main.py:362 +#: pretix/control/views/event.py:1338 pretix/control/views/main.py:362 msgid "VAT" msgstr "IVA" -#: pretix/control/views/event.py:1370 +#: pretix/control/views/event.py:1374 msgid "The new tax rule has been created." msgstr "" -#: pretix/control/views/event.py:1393 pretix/control/views/event.py:1456 -#: pretix/control/views/event.py:1502 +#: pretix/control/views/event.py:1397 pretix/control/views/event.py:1460 +#: pretix/control/views/event.py:1506 msgid "The requested tax rule does not exist." msgstr "" -#: pretix/control/views/event.py:1511 +#: pretix/control/views/event.py:1515 msgid "The selected tax rule has been deleted." msgstr "" -#: pretix/control/views/event.py:1513 +#: pretix/control/views/event.py:1517 msgid "The selected tax rule can not be deleted." msgstr "" -#: pretix/control/views/event.py:1564 +#: pretix/control/views/event.py:1568 msgid "Your event is not empty, you need to set it up manually." msgstr "" -#: pretix/control/views/event.py:1699 +#: pretix/control/views/event.py:1703 msgid "" "Your changes have been saved. You can now go on with looking at the details " "or take your event live to start selling!" msgstr "" -#: pretix/control/views/event.py:1720 +#: pretix/control/views/event.py:1724 msgid "Regular ticket" msgstr "" -#: pretix/control/views/event.py:1725 +#: pretix/control/views/event.py:1729 msgid "Reduced ticket" msgstr "" @@ -29583,7 +29865,7 @@ msgstr "" #: pretix/control/views/item.py:412 pretix/control/views/item.py:546 #: pretix/control/views/organizer.py:2644 -#: pretix/control/views/organizer.py:3705 +#: pretix/control/views/organizer.py:3740 #, fuzzy #| msgid "This order position has been canceled." msgid "Not all objects have been selected." @@ -29806,87 +30088,87 @@ msgstr "" msgid "Access for the selected application has been revoked." msgstr "S'ha revocat l'accés a l'aplicació seleccionada." -#: pretix/control/views/orders.py:196 +#: pretix/control/views/orders.py:197 #, fuzzy #| msgid "We successfully received your payment. See below for details." msgid "We could not process your input. See below for details." msgstr "Hem rebut el vostre pagament. Veieu-ne els detalls a continuació." -#: pretix/control/views/orders.py:269 +#: pretix/control/views/orders.py:270 #, python-brace-format msgid "" "Successfully executed the action \"{label}\" on {success} of {total} orders." msgstr "" -#: pretix/control/views/orders.py:689 pretix/presale/views/order.py:114 +#: pretix/control/views/orders.py:703 pretix/presale/views/order.py:114 #: pretix/presale/views/order.py:382 pretix/presale/views/order.py:1006 #: pretix/presale/views/order.py:1186 pretix/presale/views/order.py:1794 msgid "Unknown order code or not authorized to access this order." msgstr "" -#: pretix/control/views/orders.py:691 pretix/presale/views/order.py:1191 +#: pretix/control/views/orders.py:705 pretix/presale/views/order.py:1191 msgid "Ticket download is not enabled for this product." msgstr "" -#: pretix/control/views/orders.py:803 +#: pretix/control/views/orders.py:817 msgid "The order has been deleted." msgstr "" -#: pretix/control/views/orders.py:810 +#: pretix/control/views/orders.py:824 msgid "" "The order could not be deleted as some constraints (e.g. data created by " "plug-ins) do not allow it." msgstr "" -#: pretix/control/views/orders.py:818 +#: pretix/control/views/orders.py:832 msgid "Only orders created in test mode can be deleted." msgstr "" -#: pretix/control/views/orders.py:839 +#: pretix/control/views/orders.py:853 msgid "The order has been denied and is therefore now canceled." msgstr "" -#: pretix/control/views/orders.py:879 +#: pretix/control/views/orders.py:893 msgid "This payment has been canceled." msgstr "" -#: pretix/control/views/orders.py:881 +#: pretix/control/views/orders.py:895 msgid "This payment can not be canceled at the moment." msgstr "" -#: pretix/control/views/orders.py:907 +#: pretix/control/views/orders.py:921 msgid "The refund has been canceled." msgstr "" -#: pretix/control/views/orders.py:909 +#: pretix/control/views/orders.py:923 msgid "This refund can not be canceled at the moment." msgstr "" -#: pretix/control/views/orders.py:943 +#: pretix/control/views/orders.py:957 msgid "The refund has been processed." msgstr "" -#: pretix/control/views/orders.py:945 pretix/control/views/orders.py:971 +#: pretix/control/views/orders.py:959 pretix/control/views/orders.py:985 msgid "This refund can not be processed at the moment." msgstr "" -#: pretix/control/views/orders.py:969 +#: pretix/control/views/orders.py:983 msgid "The refund has been marked as done." msgstr "" -#: pretix/control/views/orders.py:995 +#: pretix/control/views/orders.py:1009 #, fuzzy #| msgid "This entry is anonymized and can no longer be used." msgid "The request has been removed. If you want, you can now inform the user." msgstr "Aquesta entrada està anonimitzada i ja no es pot utilitzar." -#: pretix/control/views/orders.py:1002 +#: pretix/control/views/orders.py:1016 #, fuzzy #| msgid "Cancellation fee" msgid "Your cancellation request" msgstr "Tarifa de cancel·lació" -#: pretix/control/views/orders.py:1003 +#: pretix/control/views/orders.py:1017 #, python-brace-format msgid "" "Hello,\n" @@ -29904,72 +30186,72 @@ msgstr "" "Atentament, \n" "el vostre equip de l'esdeveniment {event}" -#: pretix/control/views/orders.py:1058 +#: pretix/control/views/orders.py:1072 msgid "The payment has been marked as complete." msgstr "" -#: pretix/control/views/orders.py:1060 +#: pretix/control/views/orders.py:1074 msgid "This payment can not be confirmed at the moment." msgstr "" -#: pretix/control/views/orders.py:1151 +#: pretix/control/views/orders.py:1165 msgid "" "The refund was prevented due to a refund already being processed at the same " "time. Please have a look at the order details and check if your refund is " "still necessary." msgstr "" -#: pretix/control/views/orders.py:1256 +#: pretix/control/views/orders.py:1270 #, fuzzy #| msgid "You entered an order that could not be found." msgid "You entered an order in an event with a different currency." msgstr "Heu introduït una comanda que no es pot trobar." -#: pretix/control/views/orders.py:1307 +#: pretix/control/views/orders.py:1321 msgid "" "You can not refund more than the amount of a payment that is not yet " "refunded." msgstr "" -#: pretix/control/views/orders.py:1312 +#: pretix/control/views/orders.py:1326 msgid "" "You selected a partial refund for a payment method that only supports full " "refunds." msgstr "" -#: pretix/control/views/orders.py:1342 +#: pretix/control/views/orders.py:1356 #, python-brace-format msgid "" "One of the refunds failed to be processed. You should retry to refund in a " "different way. The error message was: {}" msgstr "" -#: pretix/control/views/orders.py:1348 +#: pretix/control/views/orders.py:1362 #, python-brace-format msgid "A refund of {} has been processed." msgstr "" -#: pretix/control/views/orders.py:1352 +#: pretix/control/views/orders.py:1366 #, python-brace-format msgid "" "A refund of {} has been saved, but not yet fully executed. You can mark it " "as complete below." msgstr "" -#: pretix/control/views/orders.py:1381 +#: pretix/control/views/orders.py:1395 #, fuzzy #| msgid "This entry is anonymized and can no longer be used." msgid "" "A new gift card was created. You can now send the user their gift card code." msgstr "Aquesta entrada està anonimitzada i ja no es pot utilitzar." -#: pretix/control/views/orders.py:1389 +#: pretix/control/views/orders.py:1403 #, fuzzy #| msgid "Gift card" msgid "Your gift card code" msgstr "Targeta regal" -#: pretix/control/views/orders.py:1391 +#: pretix/control/views/orders.py:1405 #, python-brace-format msgid "" "Hello,\n" @@ -29990,29 +30272,29 @@ msgstr "" "\n" "l'equip de l'acte {event}" -#: pretix/control/views/orders.py:1402 +#: pretix/control/views/orders.py:1416 msgid "The refunds you selected do not match the selected total refund amount." msgstr "" -#: pretix/control/views/orders.py:1532 +#: pretix/control/views/orders.py:1546 msgid "The payment has been created successfully." msgstr "" -#: pretix/control/views/orders.py:1546 +#: pretix/control/views/orders.py:1560 msgid "" "The order has been canceled. You can now select how you want to transfer the " "money back to the user." msgstr "" -#: pretix/control/views/orders.py:1617 pretix/control/views/orders.py:1621 +#: pretix/control/views/orders.py:1631 pretix/control/views/orders.py:1635 msgid "No VAT ID specified." msgstr "No s'ha especificat cap identificador d'IVA." -#: pretix/control/views/orders.py:1625 +#: pretix/control/views/orders.py:1639 msgid "No country specified." msgstr "" -#: pretix/control/views/orders.py:1629 +#: pretix/control/views/orders.py:1643 #, fuzzy #| msgid "" #| "VAT ID could not be checked since a non-EU country has been specified." @@ -30021,7 +30303,7 @@ msgstr "" "L'identificador d'IVA no s'ha pogut comprovar ja que s'ha especificat un " "país no europeu." -#: pretix/control/views/orders.py:1648 +#: pretix/control/views/orders.py:1662 msgid "" "The VAT ID could not be checked, as the VAT checking service of the country " "is currently not available." @@ -30029,154 +30311,154 @@ msgstr "" "No s'ha pogut comprovar l'identificador d'IVA, ja que el servei de " "comprovació d'IVA del vostre país no es troba disponible." -#: pretix/control/views/orders.py:1651 +#: pretix/control/views/orders.py:1665 msgid "This VAT ID is valid." msgstr "Aquest identificador d'IVA és vàlid." -#: pretix/control/views/orders.py:1665 pretix/control/views/orders.py:1699 -#: pretix/control/views/orders.py:1731 +#: pretix/control/views/orders.py:1679 pretix/control/views/orders.py:1713 +#: pretix/control/views/orders.py:1745 msgid "Unknown invoice." msgstr "" -#: pretix/control/views/orders.py:1668 +#: pretix/control/views/orders.py:1682 msgid "Invoices may not be changed after they are created." msgstr "" -#: pretix/control/views/orders.py:1670 +#: pretix/control/views/orders.py:1684 msgid "Invoices may not be changed after they are transmitted." msgstr "" -#: pretix/control/views/orders.py:1672 pretix/control/views/orders.py:1734 +#: pretix/control/views/orders.py:1686 pretix/control/views/orders.py:1748 msgid "The invoice has already been canceled." msgstr "" -#: pretix/control/views/orders.py:1674 +#: pretix/control/views/orders.py:1688 #, fuzzy #| msgid "The order has already been canceled." msgid "The invoice file has already been exported." msgstr "La comanda ja ha estat cancel·lada." -#: pretix/control/views/orders.py:1676 +#: pretix/control/views/orders.py:1690 #, fuzzy #| msgid "The task has been completed." msgid "The invoice file is too old to be regenerated." msgstr "S'ha completat la tasca." -#: pretix/control/views/orders.py:1678 pretix/control/views/orders.py:1736 +#: pretix/control/views/orders.py:1692 pretix/control/views/orders.py:1750 msgid "The invoice has been cleaned of personal data." msgstr "" -#: pretix/control/views/orders.py:1703 +#: pretix/control/views/orders.py:1717 msgid "" "The invoice is currently being transmitted. You can start a new attempt " "after the current one has been completed." msgstr "" -#: pretix/control/views/orders.py:1710 +#: pretix/control/views/orders.py:1724 #, fuzzy #| msgid "A voucher has already been sent to this person." msgid "The invoice has been scheduled for retransmission." msgstr "Ja s'ha enviat un val a aquesta persona." -#: pretix/control/views/orders.py:1744 +#: pretix/control/views/orders.py:1758 #, fuzzy #| msgid "This order position has been canceled." msgid "The invoice has been canceled." msgstr "Aquesta posició de la comanda s'ha cancel·lat." -#: pretix/control/views/orders.py:1783 +#: pretix/control/views/orders.py:1797 msgid "The email has been queued to be sent." msgstr "" -#: pretix/control/views/orders.py:1807 pretix/presale/views/order.py:1365 +#: pretix/control/views/orders.py:1821 pretix/presale/views/order.py:1365 msgid "This invoice has not been found" msgstr "" -#: pretix/control/views/orders.py:1814 pretix/presale/views/order.py:1372 +#: pretix/control/views/orders.py:1828 pretix/presale/views/order.py:1372 msgid "The invoice file is no longer stored on the server." msgstr "" -#: pretix/control/views/orders.py:1819 pretix/presale/views/order.py:1377 +#: pretix/control/views/orders.py:1833 pretix/presale/views/order.py:1377 msgid "" "The invoice file has not yet been generated, we will generate it for you " "now. Please try again in a few seconds." msgstr "" -#: pretix/control/views/orders.py:1847 +#: pretix/control/views/orders.py:1861 msgid "The payment term has been changed." msgstr "" -#: pretix/control/views/orders.py:1852 pretix/control/views/orders.py:1909 +#: pretix/control/views/orders.py:1866 pretix/control/views/orders.py:1923 msgid "" "We were not able to process the request completely as the server was too " "busy." msgstr "" -#: pretix/control/views/orders.py:1860 +#: pretix/control/views/orders.py:1874 msgid "This action is only allowed for pending orders." msgstr "" -#: pretix/control/views/orders.py:1915 +#: pretix/control/views/orders.py:1929 msgid "This action is only allowed for canceled orders." msgstr "" -#: pretix/control/views/orders.py:2174 pretix/presale/views/order.py:1661 +#: pretix/control/views/orders.py:2188 pretix/presale/views/order.py:1661 msgid "An error occurred. Please see the details below." msgstr "" -#: pretix/control/views/orders.py:2182 +#: pretix/control/views/orders.py:2196 msgid "The order has been changed and the user has been notified." msgstr "" -#: pretix/control/views/orders.py:2184 pretix/control/views/orders.py:2320 -#: pretix/control/views/orders.py:2357 pretix/presale/views/order.py:1697 +#: pretix/control/views/orders.py:2198 pretix/control/views/orders.py:2334 +#: pretix/control/views/orders.py:2371 pretix/presale/views/order.py:1697 msgid "The order has been changed." msgstr "" -#: pretix/control/views/orders.py:2211 pretix/presale/checkoutflow.py:963 +#: pretix/control/views/orders.py:2225 pretix/presale/checkoutflow.py:964 #: pretix/presale/views/order.py:845 pretix/presale/views/order.py:981 msgid "" "We had difficulties processing your input. Please review the errors below." msgstr "" -#: pretix/control/views/orders.py:2322 +#: pretix/control/views/orders.py:2336 msgid "Nothing about the order had to be changed." msgstr "" -#: pretix/control/views/orders.py:2403 pretix/plugins/sendmail/views.py:176 +#: pretix/control/views/orders.py:2417 pretix/plugins/sendmail/views.py:176 msgid "We could not send the email. See below for details." msgstr "" -#: pretix/control/views/orders.py:2419 pretix/control/views/orders.py:2483 +#: pretix/control/views/orders.py:2433 pretix/control/views/orders.py:2497 #: pretix/plugins/sendmail/views.py:204 pretix/plugins/sendmail/views.py:671 #, python-brace-format msgid "Subject: {subject}" msgstr "" -#: pretix/control/views/orders.py:2437 pretix/control/views/orders.py:2502 +#: pretix/control/views/orders.py:2451 pretix/control/views/orders.py:2516 #, python-brace-format msgid "Your message has been queued and will be sent to {}." msgstr "" -#: pretix/control/views/orders.py:2555 pretix/presale/views/order.py:1151 +#: pretix/control/views/orders.py:2569 pretix/presale/views/order.py:1151 msgid "" "This link is no longer valid. Please go back, refresh the page, and try " "again." msgstr "" -#: pretix/control/views/orders.py:2636 +#: pretix/control/views/orders.py:2650 msgid "There is no order with the given order code." msgstr "" -#: pretix/control/views/orders.py:2745 pretix/control/views/organizer.py:2084 +#: pretix/control/views/orders.py:2759 pretix/control/views/organizer.py:2084 msgid "The selected exporter was not found." msgstr "" -#: pretix/control/views/orders.py:2755 pretix/control/views/organizer.py:2094 +#: pretix/control/views/orders.py:2769 pretix/control/views/organizer.py:2094 msgid "There was a problem processing your input. See below for error details." msgstr "" -#: pretix/control/views/orders.py:2792 pretix/control/views/organizer.py:2130 +#: pretix/control/views/orders.py:2806 pretix/control/views/organizer.py:2130 #, fuzzy #| msgid "You do not have permission to clone this event." msgid "" @@ -30184,7 +30466,7 @@ msgid "" "therefore you cannot change it." msgstr "No teniu permís per clonar aquest event." -#: pretix/control/views/orders.py:2801 pretix/control/views/organizer.py:2139 +#: pretix/control/views/orders.py:2815 pretix/control/views/organizer.py:2139 #, fuzzy #| msgid "You do not have permission to clone this event." msgid "" @@ -30192,24 +30474,24 @@ msgid "" "therefore you cannot schedule it." msgstr "No teniu permís per clonar aquest event." -#: pretix/control/views/orders.py:2817 pretix/control/views/organizer.py:2155 +#: pretix/control/views/orders.py:2831 pretix/control/views/organizer.py:2155 #, python-brace-format msgid "" "Your export schedule has been saved. The next export will start around " "{datetime}." msgstr "" -#: pretix/control/views/orders.py:2822 pretix/control/views/organizer.py:2160 +#: pretix/control/views/orders.py:2836 pretix/control/views/organizer.py:2160 msgid "Your export schedule has been saved, but no next export is planned." msgstr "" -#: pretix/control/views/orders.py:2867 pretix/control/views/organizer.py:2206 +#: pretix/control/views/orders.py:2881 pretix/control/views/organizer.py:2206 #, fuzzy, python-brace-format #| msgid "Export date" msgid "Export: {title}" msgstr "Data d'exportació" -#: pretix/control/views/orders.py:2868 pretix/control/views/organizer.py:2208 +#: pretix/control/views/orders.py:2882 pretix/control/views/organizer.py:2208 #, python-brace-format msgid "" "Hello,\n" @@ -30217,27 +30499,27 @@ msgid "" "attached to this email, you can find a new scheduled report for {name}." msgstr "" -#: pretix/control/views/orders.py:2974 pretix/control/views/organizer.py:2342 +#: pretix/control/views/orders.py:2988 pretix/control/views/organizer.py:2342 msgid "" "Your export is queued to start soon. The results will be send via email. " "Depending on system load and type and size of export, this may take a few " "minutes." msgstr "" -#: pretix/control/views/orders.py:3061 pretix/control/views/orders.py:3142 +#: pretix/control/views/orders.py:3075 pretix/control/views/orders.py:3156 #, fuzzy #| msgid "This order position has been canceled." msgid "All orders have been canceled." msgstr "Aquesta posició de la comanda s'ha cancel·lat." -#: pretix/control/views/orders.py:3063 pretix/control/views/orders.py:3144 +#: pretix/control/views/orders.py:3077 pretix/control/views/orders.py:3158 #, python-brace-format msgid "" "The orders have been canceled. An error occurred with {count} orders, please " "check all uncanceled orders." msgstr "" -#: pretix/control/views/orders.py:3091 pretix/control/views/orders.py:3165 +#: pretix/control/views/orders.py:3105 pretix/control/views/orders.py:3179 #, fuzzy #| msgid "An internal error occurred, please try again." msgid "Your input was not valid." @@ -30317,11 +30599,11 @@ msgstr "" #: pretix/control/views/organizer.py:2724 #: pretix/control/views/organizer.py:2759 #: pretix/control/views/organizer.py:2833 -#: pretix/control/views/organizer.py:2875 -#: pretix/control/views/organizer.py:2955 -#: pretix/control/views/organizer.py:3005 -#: pretix/control/views/organizer.py:3567 -#: pretix/control/views/organizer.py:3611 +#: pretix/control/views/organizer.py:2877 +#: pretix/control/views/organizer.py:2957 +#: pretix/control/views/organizer.py:3007 +#: pretix/control/views/organizer.py:3602 +#: pretix/control/views/organizer.py:3646 msgid "Your changes could not be saved." msgstr "" @@ -30509,9 +30791,9 @@ msgid "The order of properties has been updated." msgstr "S'ha actualitzat la cistella." #: pretix/control/views/organizer.py:2789 -#: pretix/control/views/organizer.py:2905 -#: pretix/control/views/organizer.py:3035 -#: pretix/control/views/organizer.py:3304 +#: pretix/control/views/organizer.py:2907 +#: pretix/control/views/organizer.py:3037 +#: pretix/control/views/organizer.py:3306 #, fuzzy #| msgid "The selected product has been deleted." msgid "The selected object has been deleted." @@ -30523,51 +30805,51 @@ msgstr "El producte seleccionat ha estat esborrat." msgid "The provider has been created." msgstr "S'ha completat la tasca." -#: pretix/control/views/organizer.py:2944 +#: pretix/control/views/organizer.py:2946 #, python-brace-format msgid "" "The SSO client has been created. Please note down the following client " "secret, it will never be shown again: {secret}" msgstr "" -#: pretix/control/views/organizer.py:2994 +#: pretix/control/views/organizer.py:2996 #, python-brace-format msgid "" "Your changes have been saved. Please note down the following client secret, " "it will never be shown again: {secret}" msgstr "" -#: pretix/control/views/organizer.py:3104 +#: pretix/control/views/organizer.py:3106 msgid "" "We've sent the customer an email with further instructions on resetting your " "password." msgstr "" -#: pretix/control/views/organizer.py:3369 +#: pretix/control/views/organizer.py:3371 #, fuzzy #| msgid "The task has been completed." msgid "The customer account has been anonymized." msgstr "S'ha completat la tasca." -#: pretix/control/views/organizer.py:3639 +#: pretix/control/views/organizer.py:3674 #, fuzzy #| msgid "The task has been completed." msgid "This channel can not be deleted." msgstr "S'ha completat la tasca." -#: pretix/control/views/organizer.py:3644 +#: pretix/control/views/organizer.py:3679 #, fuzzy #| msgid "The presale period for this event has ended." msgid "The selected sales channel has been deleted." msgstr "Ha finalitzat el període de prevenda d'aquest esdeveniment." -#: pretix/control/views/organizer.py:3646 +#: pretix/control/views/organizer.py:3681 msgid "" "The channel could not be deleted as some constraints (e.g. data created by " "plug-ins) did not allow it." msgstr "" -#: pretix/control/views/organizer.py:3671 +#: pretix/control/views/organizer.py:3706 #, fuzzy #| msgid "Your cart has been updated." msgid "The order of sales channels has been updated." @@ -30594,59 +30876,60 @@ msgstr "" msgid "The selected data was deleted successfully." msgstr "" -#: pretix/control/views/subevents.py:168 pretix/control/views/subevents.py:530 +#: pretix/control/views/subevents.py:174 pretix/control/views/subevents.py:526 +#: pretix/control/views/subevents.py:595 msgctxt "subevent" msgid "The requested date does not exist." msgstr "" -#: pretix/control/views/subevents.py:172 pretix/control/views/subevents.py:184 +#: pretix/control/views/subevents.py:178 pretix/control/views/subevents.py:190 msgctxt "subevent" msgid "A date can not be deleted if orders already have been placed." msgstr "" -#: pretix/control/views/subevents.py:203 +#: pretix/control/views/subevents.py:209 msgctxt "subevent" msgid "" "The date could not be deleted as some constraints (e.g. data created by plug-" "ins) did not allow it. The date was disabled instead." msgstr "" -#: pretix/control/views/subevents.py:207 +#: pretix/control/views/subevents.py:213 msgctxt "subevent" msgid "The selected date has been deleted." msgstr "" -#: pretix/control/views/subevents.py:631 +#: pretix/control/views/subevents.py:704 msgctxt "subevent" msgid "The new date has been created." msgstr "" -#: pretix/control/views/subevents.py:708 +#: pretix/control/views/subevents.py:781 msgctxt "subevent" msgid "The selected dates have been disabled." msgstr "" -#: pretix/control/views/subevents.py:721 +#: pretix/control/views/subevents.py:794 #, fuzzy #| msgid "The presale period for this event has ended." msgctxt "subevent" msgid "The selected dates have been enabled." msgstr "Ha finalitzat el període de prevenda d'aquest esdeveniment." -#: pretix/control/views/subevents.py:750 +#: pretix/control/views/subevents.py:823 msgctxt "subevent" msgid "The selected dates have been deleted or disabled." msgstr "" -#: pretix/control/views/subevents.py:938 +#: pretix/control/views/subevents.py:1011 msgid "Please do not create more than 100.000 dates at once." msgstr "" -#: pretix/control/views/subevents.py:967 +#: pretix/control/views/subevents.py:1040 msgid "All dates would be skipped because they conflict with existing dates." msgstr "" -#: pretix/control/views/subevents.py:1103 +#: pretix/control/views/subevents.py:1176 #, python-brace-format msgctxt "subevent" msgid "{} new dates have been created." @@ -30668,6 +30951,12 @@ msgstr "Comanda {val}" msgid "Voucher {}" msgstr "Val" +#: pretix/control/views/typeahead.py:179 pretix/control/views/typeahead.py:180 +#, fuzzy +#| msgid "No effect" +msgid "No event" +msgstr "Sense efecte" + #: pretix/control/views/user.py:169 msgid "The password you entered was invalid, please try again." msgstr "" @@ -34983,19 +35272,19 @@ msgstr "" msgid "Web Check-in" msgstr "Tiquets i check-in" -#: pretix/presale/checkoutflow.py:119 +#: pretix/presale/checkoutflow.py:120 msgctxt "checkoutflow" msgid "Step" msgstr "Pas" -#: pretix/presale/checkoutflow.py:251 +#: pretix/presale/checkoutflow.py:252 #, fuzzy #| msgid "Stripe account" msgctxt "checkoutflow" msgid "Customer account" msgstr "Compte de Stripe" -#: pretix/presale/checkoutflow.py:338 +#: pretix/presale/checkoutflow.py:339 #, fuzzy #| msgid "" #| "We were not able to process your request completely as the server was too " @@ -35005,73 +35294,73 @@ msgstr "" "No hem pogut processar la vostra petició completament degut a que el " "servidor té massa càrrega. Si us plau, intenteu-ho de nou." -#: pretix/presale/checkoutflow.py:401 +#: pretix/presale/checkoutflow.py:402 #, fuzzy #| msgid "Members" msgctxt "checkoutflow" msgid "Membership" msgstr "Membres" -#: pretix/presale/checkoutflow.py:449 pretix/presale/checkoutflow.py:470 +#: pretix/presale/checkoutflow.py:450 pretix/presale/checkoutflow.py:471 msgid "" "Your cart includes a product that requires an active membership to be " "selected." msgstr "" -#: pretix/presale/checkoutflow.py:489 +#: pretix/presale/checkoutflow.py:490 msgctxt "checkoutflow" msgid "Add-on products" msgstr "Productes complementaris" -#: pretix/presale/checkoutflow.py:696 pretix/presale/checkoutflow.py:704 +#: pretix/presale/checkoutflow.py:697 pretix/presale/checkoutflow.py:705 #: pretix/presale/views/cart.py:195 pretix/presale/views/cart.py:200 #: pretix/presale/views/cart.py:218 pretix/presale/views/cart.py:231 #: pretix/presale/views/order.py:1582 pretix/presale/views/order.py:1590 msgid "Please enter numbers only." msgstr "Si us plau, introduïu només nombres." -#: pretix/presale/checkoutflow.py:778 +#: pretix/presale/checkoutflow.py:779 msgctxt "checkoutflow" msgid "Your information" msgstr "Les vostres dades" -#: pretix/presale/checkoutflow.py:1012 +#: pretix/presale/checkoutflow.py:1013 msgid "" "Unfortunately, based on the invoice address you entered, we're not able to " "sell you the selected products for tax-related legal reasons." msgstr "" -#: pretix/presale/checkoutflow.py:1018 +#: pretix/presale/checkoutflow.py:1019 msgid "" "Due to the invoice address you entered, we need to apply a different tax " "rate to your purchase and the price of the products in your cart has changed " "accordingly." msgstr "" -#: pretix/presale/checkoutflow.py:1042 pretix/presale/checkoutflow.py:1048 +#: pretix/presale/checkoutflow.py:1043 pretix/presale/checkoutflow.py:1049 msgid "Please enter a valid email address." msgstr "Si us plau, introduïu una adreça de correu electrònic vàlida." -#: pretix/presale/checkoutflow.py:1055 +#: pretix/presale/checkoutflow.py:1056 msgid "Please enter your invoicing address." msgstr "Si us plau, introduïu la vostra adreça de facturació." -#: pretix/presale/checkoutflow.py:1059 +#: pretix/presale/checkoutflow.py:1060 msgid "Please enter your name." msgstr "Si us plau introduïu el vostre nom." -#: pretix/presale/checkoutflow.py:1094 pretix/presale/checkoutflow.py:1099 -#: pretix/presale/checkoutflow.py:1104 pretix/presale/checkoutflow.py:1109 -#: pretix/presale/checkoutflow.py:1114 +#: pretix/presale/checkoutflow.py:1095 pretix/presale/checkoutflow.py:1100 +#: pretix/presale/checkoutflow.py:1105 pretix/presale/checkoutflow.py:1110 +#: pretix/presale/checkoutflow.py:1115 msgid "Please fill in answers to all required questions." msgstr "Si us plau responeu a totes les preguntes." -#: pretix/presale/checkoutflow.py:1277 +#: pretix/presale/checkoutflow.py:1278 msgctxt "checkoutflow" msgid "Payment" msgstr "Pagament" -#: pretix/presale/checkoutflow.py:1388 +#: pretix/presale/checkoutflow.py:1389 #, fuzzy, python-brace-format #| msgid "" #| "Your gift card has been applied, but {} still need to be paid. Please " @@ -35083,28 +35372,28 @@ msgstr "" "S'ha bescanviat la targeta regal però encara falten {} per pagar. Si us " "plau, selecciona una forma de pagament." -#: pretix/presale/checkoutflow.py:1413 pretix/presale/views/order.py:733 +#: pretix/presale/checkoutflow.py:1414 pretix/presale/views/order.py:733 msgid "Please select a payment method." msgstr "Si us plau trieu un mètode de pagament." -#: pretix/presale/checkoutflow.py:1445 pretix/presale/checkoutflow.py:1465 -#: pretix/presale/checkoutflow.py:1476 +#: pretix/presale/checkoutflow.py:1446 pretix/presale/checkoutflow.py:1466 +#: pretix/presale/checkoutflow.py:1477 #, fuzzy #| msgid "Please select a payment method." msgid "Please select a payment method to proceed." msgstr "Si us plau trieu un mètode de pagament." -#: pretix/presale/checkoutflow.py:1481 pretix/presale/views/order.py:489 +#: pretix/presale/checkoutflow.py:1482 pretix/presale/views/order.py:489 #: pretix/presale/views/order.py:559 msgid "The payment information you entered was incomplete." msgstr "Les dades de pagament que heu introduït són incompletes." -#: pretix/presale/checkoutflow.py:1526 +#: pretix/presale/checkoutflow.py:1527 msgctxt "checkoutflow" msgid "Review order" msgstr "Revisió de la comanda" -#: pretix/presale/checkoutflow.py:1624 +#: pretix/presale/checkoutflow.py:1625 msgid "You need to check all checkboxes on the bottom of the page." msgstr "Heu de marcar totes les caselles del final de la pàgina." @@ -36068,7 +36357,7 @@ msgstr "COMPLET" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:105 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:31 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:69 -#: pretix/presale/views/widget.py:485 +#: pretix/presale/views/widget.py:488 msgid "Reserved" msgstr "Reservat" @@ -36706,7 +36995,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:34 #: pretix/presale/templates/pretixpresale/organizers/index.html:93 -#: pretix/presale/views/widget.py:496 +#: pretix/presale/views/widget.py:499 msgid "More info" msgstr "Més informació" @@ -36739,14 +37028,14 @@ msgid "Choose date to book a ticket" msgstr "Trieu una data per reservar una entrada" #: pretix/presale/templates/pretixpresale/event/index.html:155 -#: pretix/presale/views/waiting.py:146 pretix/presale/views/widget.py:836 +#: pretix/presale/views/waiting.py:146 pretix/presale/views/widget.py:839 #, fuzzy #| msgid "The presale period for this event has ended." msgid "The booking period for this event is over." msgstr "Ha finalitzat el període de prevenda d'aquest esdeveniment." #: pretix/presale/templates/pretixpresale/event/index.html:163 -#: pretix/presale/views/widget.py:838 +#: pretix/presale/views/widget.py:841 #, fuzzy, python-format #| msgid "The presale period for this event has not yet started." msgid "The booking period for this event will start on %(date)s at %(time)s." @@ -36890,7 +37179,7 @@ msgstr "" "l'adreça que ens heu proporcionat." #: pretix/presale/templates/pretixpresale/event/order.html:75 -#: pretix/presale/templates/pretixpresale/event/position.html:18 +#: pretix/presale/templates/pretixpresale/event/position.html:19 msgid "View in backend" msgstr "Veure al backend" @@ -36951,7 +37240,7 @@ msgid "" msgstr "" #: pretix/presale/templates/pretixpresale/event/order.html:199 -#: pretix/presale/templates/pretixpresale/event/position.html:33 +#: pretix/presale/templates/pretixpresale/event/position.html:34 #, fuzzy #| msgid "Change order" msgid "Change ordered items" @@ -36959,7 +37248,7 @@ msgstr "Canviar comanda" #: pretix/presale/templates/pretixpresale/event/order.html:200 #: pretix/presale/templates/pretixpresale/event/order.html:291 -#: pretix/presale/templates/pretixpresale/event/position.html:34 +#: pretix/presale/templates/pretixpresale/event/position.html:35 msgid "Change details" msgstr "Canviar detalls" @@ -37255,49 +37544,49 @@ msgstr "" msgid "Scan the QR code with your banking app" msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:7 +#: pretix/presale/templates/pretixpresale/event/position.html:8 #, fuzzy #| msgid "Reservation period" msgid "Registration details" msgstr "Període de reserva" -#: pretix/presale/templates/pretixpresale/event/position.html:10 +#: pretix/presale/templates/pretixpresale/event/position.html:11 msgid "Your registration" msgstr "El vostre registre" -#: pretix/presale/templates/pretixpresale/event/position.html:31 +#: pretix/presale/templates/pretixpresale/event/position.html:32 #, fuzzy #| msgid "Event end" msgid "Your items" msgstr "Finalització de l'esdeveniment" -#: pretix/presale/templates/pretixpresale/event/position.html:46 +#: pretix/presale/templates/pretixpresale/event/position.html:47 #, fuzzy #| msgid "Meta information" msgid "Additional information" msgstr "Informació meta" -#: pretix/presale/templates/pretixpresale/event/position.html:51 +#: pretix/presale/templates/pretixpresale/event/position.html:52 #, python-format msgid "" "This order is managed for you by %(email)s. Please contact them for any " "questions regarding payment, cancellation or changes to this order." msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:63 +#: pretix/presale/templates/pretixpresale/event/position.html:64 #, fuzzy #| msgid "Change order information" msgctxt "action" msgid "Change your ticket" msgstr "Canviar la informació de la comanda" -#: pretix/presale/templates/pretixpresale/event/position.html:68 +#: pretix/presale/templates/pretixpresale/event/position.html:69 msgid "" "If you want to make changes to the components of your ticket, you can click " "on the following button." msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:73 +#: pretix/presale/templates/pretixpresale/event/position.html:74 #, python-format msgid "" "You can only make some changes to this ticket yourself. For additional " @@ -37305,7 +37594,7 @@ msgid "" "(%(email)s)." msgstr "" -#: pretix/presale/templates/pretixpresale/event/position.html:82 +#: pretix/presale/templates/pretixpresale/event/position.html:83 #: pretix/presale/templates/pretixpresale/event/position_change.html:5 #: pretix/presale/templates/pretixpresale/event/position_change.html:10 #: pretix/presale/templates/pretixpresale/event/position_change_confirm.html:6 @@ -37500,7 +37789,7 @@ msgstr "Continuar" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:94 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:14 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:58 -#: pretix/presale/views/widget.py:470 +#: pretix/presale/views/widget.py:473 #, fuzzy #| msgid "Show number of tickets left" msgid "Few tickets left" @@ -37510,7 +37799,7 @@ msgstr "Mostra el número restant de tiquets" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:97 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:19 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:61 -#: pretix/presale/views/widget.py:475 +#: pretix/presale/views/widget.py:478 #, fuzzy #| msgid "Pay now" msgctxt "available_event_in_list" @@ -37525,7 +37814,7 @@ msgstr "Pagar ara" #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:44 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:63 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:78 -#: pretix/presale/views/widget.py:477 pretix/presale/views/widget.py:500 +#: pretix/presale/views/widget.py:480 pretix/presale/views/widget.py:503 msgid "Book now" msgstr "Reservar" @@ -37533,7 +37822,7 @@ msgstr "Reservar" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:111 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:38 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:74 -#: pretix/presale/views/widget.py:492 +#: pretix/presale/views/widget.py:495 msgid "Fully booked" msgstr "" @@ -37794,7 +38083,7 @@ msgstr "Segur que voleu esborrar els vals següents ?" #: pretix/presale/templates/pretixpresale/organizers/customer_addresses.html:5 #: pretix/presale/templates/pretixpresale/organizers/customer_addresses.html:11 -#: pretix/presale/views/customer.py:380 +#: pretix/presale/views/customer.py:382 #, fuzzy #| msgid "Address" msgid "Addresses" @@ -37967,7 +38256,7 @@ msgstr "Segur que voleu esborrar els vals següents ?" #: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:5 #: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:11 -#: pretix/presale/views/customer.py:386 +#: pretix/presale/views/customer.py:388 #, fuzzy #| msgid "Attendee address" msgid "Attendee profiles" @@ -38104,7 +38393,7 @@ msgid "The products have been successfully added to your cart." msgstr "Els productes s'han afegit a la vostra cistella." #: pretix/presale/views/cart.py:626 pretix/presale/views/event.py:543 -#: pretix/presale/views/widget.py:428 +#: pretix/presale/views/widget.py:431 msgid "Tickets for this event cannot be purchased on this sales channel." msgstr "" @@ -38138,7 +38427,7 @@ msgid "" msgstr "" #: pretix/presale/views/customer.py:268 pretix/presale/views/customer.py:271 -#: pretix/presale/views/customer.py:625 pretix/presale/views/customer.py:631 +#: pretix/presale/views/customer.py:627 pretix/presale/views/customer.py:633 #, fuzzy #| msgid "You entered an invalid number." msgid "You clicked an invalid link." @@ -38148,31 +38437,31 @@ msgstr "Heu introduït un número invàlid." msgid "Your new password has been set! You can now use it to log in." msgstr "" -#: pretix/presale/views/customer.py:333 +#: pretix/presale/views/customer.py:335 msgid "" "We've sent you an email with further instructions on resetting your password." msgstr "" -#: pretix/presale/views/customer.py:593 +#: pretix/presale/views/customer.py:595 msgid "" "Your changes have been saved. We've sent you an email with a link to update " "your email address. The email address of your account will be changed as " "soon as you click that link." msgstr "" -#: pretix/presale/views/customer.py:646 +#: pretix/presale/views/customer.py:648 msgid "" "Your email address has not been updated since the address is already in use " "for another customer account." msgstr "" -#: pretix/presale/views/customer.py:649 +#: pretix/presale/views/customer.py:651 #, fuzzy #| msgid "Your cart has been updated." msgid "Your email address has been updated." msgstr "S'ha actualitzat la cistella." -#: pretix/presale/views/customer.py:866 pretix/presale/views/customer.py:877 +#: pretix/presale/views/customer.py:868 pretix/presale/views/customer.py:879 #, python-brace-format msgid "" "We were unable to use your login since the email address {email} is already " @@ -38395,42 +38684,42 @@ msgid "" "else." msgstr "" -#: pretix/presale/views/widget.py:423 +#: pretix/presale/views/widget.py:426 msgid "This ticket shop is currently disabled." msgstr "Aquesta botiga ara mateix està desactivada." -#: pretix/presale/views/widget.py:437 +#: pretix/presale/views/widget.py:440 msgid "The selected date does not exist in this event series." msgstr "" -#: pretix/presale/views/widget.py:444 +#: pretix/presale/views/widget.py:447 #, fuzzy #| msgid "The selected seat \"{seat}\" is not available." msgid "The selected date is not available." msgstr "El seient \"{seat}\" no està disponible." -#: pretix/presale/views/widget.py:452 +#: pretix/presale/views/widget.py:455 msgid "This is not an event series." msgstr "Això no és una sèrie d'events." -#: pretix/presale/views/widget.py:508 +#: pretix/presale/views/widget.py:511 #, python-format msgid "from %(start_date)s" msgstr "des de %(start_date)s" -#: pretix/settings.py:862 +#: pretix/settings.py:863 msgid "User profile only" msgstr "" -#: pretix/settings.py:863 +#: pretix/settings.py:864 msgid "Read access" msgstr "Accés de lectura" -#: pretix/settings.py:864 +#: pretix/settings.py:865 msgid "Write access" msgstr "Accés d'escriptura" -#: pretix/settings.py:875 +#: pretix/settings.py:876 msgid "Kosovo" msgstr "Kosovo" diff --git a/src/pretix/locale/ca/LC_MESSAGES/djangojs.po b/src/pretix/locale/ca/LC_MESSAGES/djangojs.po index 2fbbc5f51..3fd9c66fd 100644 --- a/src/pretix/locale/ca/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/ca/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-27 14:47+0000\n" +"POT-Creation-Date: 2026-06-28 14:44+0000\n" "PO-Revision-Date: 2025-10-31 17:00+0000\n" "Last-Translator: Núria Masclans \n" "Language-Team: Catalan \n" "Language-Team: Czech check this option if you want to use this " @@ -5710,7 +5784,7 @@ msgstr "" "tento produkt použit jako doplňkový produkt, ale pouze pro pevné balíčky " "produktů!" -#: pretix/base/models/items.py:637 +#: pretix/base/models/items.py:642 msgid "" "If this is checked, the usual cancellation and order change settings of this " "event apply. If this is unchecked, orders containing this product can not be " @@ -5720,7 +5794,7 @@ msgstr "" "rezervace akce. Pokud je tato možnost vypnuta, zákazníci nemohou objednávky " "s tímto produktem nikdy zrušit sami, bez ohledu na nastavení pro celou akci." -#: pretix/base/models/items.py:644 +#: pretix/base/models/items.py:649 msgid "" "This product can only be bought if it is added to the cart at least this " "many times. If you keep the field empty or set it to 0, there is no special " @@ -5730,7 +5804,7 @@ msgstr "" "tolikrát, kolikrát je zde uvedeno. Pokud je pole prázdné nebo nastavené na " "hodnotu 0, neexistuje žádný limit." -#: pretix/base/models/items.py:651 +#: pretix/base/models/items.py:656 msgid "" "This product can only be bought at most this many times within one order. If " "you keep the field empty or set it to 0, there is no special limit for this " @@ -5742,7 +5816,7 @@ msgstr "" "žádný zvláštní limit. Limit pro maximální počet položek v celé objednávce " "platí bez ohledu na to." -#: pretix/base/models/items.py:658 pretix/base/models/items.py:1244 +#: pretix/base/models/items.py:663 pretix/base/models/items.py:1254 msgid "" "If you set this, the check-in app will show a visible warning that this " "ticket requires special attention. You can use this for example for student " @@ -5753,13 +5827,13 @@ msgstr "" "tiket vyžaduje speciální zacházení. To je užitečné například pro studenty, " "jejichž studentský průkaz je třeba ještě zkontrolovat." -#: pretix/base/models/items.py:665 pretix/base/models/items.py:1251 +#: pretix/base/models/items.py:670 pretix/base/models/items.py:1261 msgid "" "This text will be shown by the check-in app if a ticket of this type is " "scanned." msgstr "" -#: pretix/base/models/items.py:671 pretix/base/models/items.py:1172 +#: pretix/base/models/items.py:676 pretix/base/models/items.py:1182 msgid "" "If set, this will be displayed next to the current price to show that the " "current price is a discounted one. This is just a cosmetic setting and will " @@ -5769,13 +5843,13 @@ msgstr "" "aktuální cena je zlevněná. Jedná se pouze o kosmetické nastavení, které ve " "skutečnosti neovlivní cenu." -#: pretix/base/models/items.py:681 +#: pretix/base/models/items.py:686 #, fuzzy msgid "Only sell tickets for this product on the selected sales channels." msgstr "" "Vstupenky na tuto akci prodávejte pouze na následujících prodejních kanálech." -#: pretix/base/models/items.py:686 +#: pretix/base/models/items.py:691 msgid "" "When a customer buys this product, they will get a gift card with a value " "corresponding to the product price." @@ -5783,11 +5857,11 @@ msgstr "" "Když si zákazník tento produkt koupí, dostane dárkovou kartu v hodnotě " "odpovídající ceně produktu." -#: pretix/base/models/items.py:696 +#: pretix/base/models/items.py:701 msgid "Allowed membership types" msgstr "Povolené typy členství" -#: pretix/base/models/items.py:701 pretix/base/models/items.py:1200 +#: pretix/base/models/items.py:706 pretix/base/models/items.py:1210 msgid "" "Do not show this unless the customer is logged in and has a valid " "membership. Be aware that this means it will never be visible in the widget." @@ -5795,29 +5869,29 @@ msgstr "" "Pokud zákazník není přihlášen a má platné členství, nezobrazuje se. Pozor, " "to například znamená, že tento produkt nelze nikdy zobrazit ve widgetu." -#: pretix/base/models/items.py:710 +#: pretix/base/models/items.py:715 msgid "This product creates a membership of type" msgstr "Tento produkt vytváří členství typu" -#: pretix/base/models/items.py:713 +#: pretix/base/models/items.py:718 msgid "" "The duration of the membership is the same as the duration of the event or " "event series date" msgstr "Doba členství je stejná jako doba akce nebo série akcí" -#: pretix/base/models/items.py:717 +#: pretix/base/models/items.py:722 msgid "Membership duration in days" msgstr "Délka členství ve dnech" -#: pretix/base/models/items.py:721 +#: pretix/base/models/items.py:726 msgid "Membership duration in months" msgstr "Délka členství ve měsících" -#: pretix/base/models/items.py:728 +#: pretix/base/models/items.py:733 msgid "Validity" msgstr "Platnost" -#: pretix/base/models/items.py:730 +#: pretix/base/models/items.py:735 #, fuzzy msgid "" "When setting up a regular event, or an event series with time slots, you " @@ -5838,53 +5912,53 @@ msgstr "" "změníte, stávající vstupenky nebudou změnou ovlivněny, ale zachovají si svou " "aktuální platnost." -#: pretix/base/models/items.py:738 pretix/control/forms/item.py:794 +#: pretix/base/models/items.py:743 pretix/control/forms/item.py:794 msgid "Start of validity" msgstr "Začátek platnosti" -#: pretix/base/models/items.py:739 +#: pretix/base/models/items.py:744 msgid "End of validity" msgstr "Konec platnosti" -#: pretix/base/models/items.py:742 +#: pretix/base/models/items.py:747 msgid "Minutes" msgstr "Minuty" -#: pretix/base/models/items.py:746 +#: pretix/base/models/items.py:751 msgid "Hours" msgstr "Hodiny" -#: pretix/base/models/items.py:750 +#: pretix/base/models/items.py:755 msgid "Days" msgstr "Dny" -#: pretix/base/models/items.py:754 +#: pretix/base/models/items.py:759 msgid "Months" msgstr "Měsíce" -#: pretix/base/models/items.py:757 +#: pretix/base/models/items.py:762 msgid "Customers can select the validity start date" msgstr "Zákazníci si mohou vybrat datum začátku platnosti" -#: pretix/base/models/items.py:758 +#: pretix/base/models/items.py:763 msgid "If not selected, the validity always starts at the time of purchase." msgstr "Pokud tuto možnost nezvolíte, začíná platnost vždy v okamžiku nákupu." -#: pretix/base/models/items.py:763 +#: pretix/base/models/items.py:768 msgid "Maximum future start" msgstr "Maximální budoucí začátek" -#: pretix/base/models/items.py:764 +#: pretix/base/models/items.py:769 msgid "The selected start date may only be this many days in the future." msgstr "Zvolené datum zahájení může být až za tolik dní." -#: pretix/base/models/items.py:770 +#: pretix/base/models/items.py:775 msgid "Reusable media policy" msgstr "Zásady pro opakovaně použitelná média" -#: pretix/base/models/items.py:772 +#: pretix/base/models/items.py:777 msgid "" -"If this product should be stored on a re-usable physical medium, you can " +"If this product should be stored on a reusable physical medium, you can " "attach a physical media policy. This is not required for regular tickets, " "which just use a one-time barcode, but only for products like renewable " "season tickets or re-chargeable gift card wristbands. This is an advanced " @@ -5892,45 +5966,52 @@ msgid "" "settings." msgstr "" -#: pretix/base/models/items.py:782 +#: pretix/base/models/items.py:787 msgid "Reusable media type" msgstr "Typ opakovaně použitelného média" -#: pretix/base/models/items.py:784 +#: pretix/base/models/items.py:789 msgid "" "Select the type of physical medium that should be used for this product. " "Note that not all media types support all types of products, and not all " "media types are supported across all sales channels or check-in processes." msgstr "" -#: pretix/base/models/items.py:989 +#: pretix/base/models/items.py:994 msgid "" "If you select a reusable media policy, you also need to select a reusable " "media type." msgstr "" -#: pretix/base/models/items.py:993 +#: pretix/base/models/items.py:998 msgid "The selected media type is not enabled in your organizer settings." msgstr "Vybraný typ média není v nastavení organizéru povolen." -#: pretix/base/models/items.py:995 +#: pretix/base/models/items.py:1000 msgid "The selected media type does not support usage for tickets currently." msgstr "Vybraný typ média v současné době nepodporuje použití pro vstupenky." -#: pretix/base/models/items.py:997 +#: pretix/base/models/items.py:1002 msgid "" "The selected media type does not support usage for gift cards currently." msgstr "" "Vybraný typ média v současné době nepodporuje použití pro dárkové karty." -#: pretix/base/models/items.py:999 +#: pretix/base/models/items.py:1005 +msgid "" +"The selected media type requires all media to be registered in the system " +"prior to their usage. Therefore, the selected media policy does not make " +"sense for this media type." +msgstr "" + +#: pretix/base/models/items.py:1009 msgid "" "You currently cannot create gift cards with a reusable media policy. " "Instead, gift cards for some reusable media types can be created or re-" "charged directly at the POS." msgstr "" -#: pretix/base/models/items.py:1007 +#: pretix/base/models/items.py:1017 msgid "" "The maximum number per order can not be lower than the minimum number per " "order." @@ -5938,27 +6019,27 @@ msgstr "" "Minimální počet na objednávku musí být menší než maximální počet na " "objednávku." -#: pretix/base/models/items.py:1013 +#: pretix/base/models/items.py:1023 msgid "The item's category must belong to the same event as the item." msgstr "Kategorie produktu musí patřit ke stejné akci jako produkt." -#: pretix/base/models/items.py:1018 +#: pretix/base/models/items.py:1028 msgid "The item's tax rule must belong to the same event as the item." msgstr "Daňová sazba produktu musí patřit ke stejné akci jako produkt." -#: pretix/base/models/items.py:1024 +#: pretix/base/models/items.py:1034 msgid "The item's availability cannot end before it starts." msgstr "Konec dostupnosti musí být po začátku dostupnosti." -#: pretix/base/models/items.py:1156 +#: pretix/base/models/items.py:1166 msgid "This is shown below the variation name in lists." msgstr "Tento údaj se zobrazuje v seznamech produktů pod názvem varianty." -#: pretix/base/models/items.py:1183 +#: pretix/base/models/items.py:1193 msgid "Require approval" msgstr "Vyžadují potvrzení" -#: pretix/base/models/items.py:1185 +#: pretix/base/models/items.py:1195 msgid "" "If this variation is part of an order, the order will be put into an " "\"approval\" state and will need to be confirmed by you before it can be " @@ -5970,25 +6051,25 @@ msgstr "" "To můžete použít například pro vstupenky, které jsou dostupné pouze pro " "určité členy." -#: pretix/base/models/items.py:1195 pretix/control/navigation.py:618 +#: pretix/base/models/items.py:1205 pretix/control/navigation.py:618 #: pretix/control/templates/pretixcontrol/organizers/membershiptypes.html:4 #: pretix/control/templates/pretixcontrol/organizers/membershiptypes.html:6 msgid "Membership types" msgstr "Typy členství" -#: pretix/base/models/items.py:1207 +#: pretix/base/models/items.py:1217 msgid "This variation will not be sold before the given date." msgstr "Tato varianta se nebude prodávat před tímto datem." -#: pretix/base/models/items.py:1217 +#: pretix/base/models/items.py:1227 msgid "This variation will not be sold after the given date." msgstr "Tato varianta se po tomto datu již nebude prodávat." -#: pretix/base/models/items.py:1225 +#: pretix/base/models/items.py:1235 msgid "Sell on all sales channels the product is sold on" msgstr "" -#: pretix/base/models/items.py:1231 +#: pretix/base/models/items.py:1241 msgid "" "The sales channel selection for the product as a whole takes precedence, so " "if a sales channel is selected here but not on product level, the variation " @@ -5998,11 +6079,11 @@ msgstr "" "zde vybrán prodejní kanál, ale ne na úrovni produktu, varianta nebude k " "dispozici." -#: pretix/base/models/items.py:1236 +#: pretix/base/models/items.py:1246 msgid "Show only if a matching voucher is redeemed." msgstr "Zobrazí se pouze po uplatnění odpovídajícího poukazu." -#: pretix/base/models/items.py:1238 +#: pretix/base/models/items.py:1248 msgid "" "This variation will be hidden from the event page until the user enters a " "voucher that unlocks this variation." @@ -6010,24 +6091,24 @@ msgstr "" "Tato varianta bude na stránce události skrytá, dokud uživatel nezadá poukaz, " "který tuto variantu odemkne." -#: pretix/base/models/items.py:1258 +#: pretix/base/models/items.py:1268 #: pretix/control/templates/pretixcontrol/item/create.html:111 msgid "Product variations" msgstr "Varianty" -#: pretix/base/models/items.py:1463 +#: pretix/base/models/items.py:1473 msgid "Minimum number" msgstr "Minimální počet" -#: pretix/base/models/items.py:1467 +#: pretix/base/models/items.py:1477 msgid "Maximum number" msgstr "Maximální počet" -#: pretix/base/models/items.py:1471 +#: pretix/base/models/items.py:1481 msgid "Add-Ons are included in the price" msgstr "Další produkty jsou zahrnuty v ceně" -#: pretix/base/models/items.py:1472 +#: pretix/base/models/items.py:1482 msgid "" "If selected, adding add-ons to this ticket is free, even if the add-ons " "would normally cost money individually." @@ -6035,43 +6116,43 @@ msgstr "" "Pokud je tato možnost aktivována, lze další produkty přidat bez příplatku, i " "když by ve skutečnosti stály peníze." -#: pretix/base/models/items.py:1477 +#: pretix/base/models/items.py:1487 msgid "Allow the same product to be selected multiple times" msgstr "Povolit vícenásobný výběr stejného produktu" -#: pretix/base/models/items.py:1496 +#: pretix/base/models/items.py:1506 msgid "The add-on's category must belong to the same event as the item." msgstr "Kategorie pro další produkty musí patřit ke stejné akci jako produkt." -#: pretix/base/models/items.py:1501 +#: pretix/base/models/items.py:1511 msgid "The item already has an add-on of this category." msgstr "Tento produkt již má další produkty s touto kategorií." -#: pretix/base/models/items.py:1506 +#: pretix/base/models/items.py:1516 msgid "The minimum count needs to be equal to or greater than zero." msgstr "Minimální počet musí být alespoň nula." -#: pretix/base/models/items.py:1511 +#: pretix/base/models/items.py:1521 msgid "The maximum count needs to be equal to or greater than zero." msgstr "Maximální počet musí být alespoň nula." -#: pretix/base/models/items.py:1516 +#: pretix/base/models/items.py:1526 msgid "The maximum count needs to be greater than the minimum count." msgstr "Minimální počet musí být menší než maximální počet." -#: pretix/base/models/items.py:1543 +#: pretix/base/models/items.py:1553 msgid "Bundled item" msgstr "Součást produktu" -#: pretix/base/models/items.py:1549 +#: pretix/base/models/items.py:1559 msgid "Bundled variation" msgstr "Zahrnutá varianta" -#: pretix/base/models/items.py:1560 +#: pretix/base/models/items.py:1570 msgid "Designated price part" msgstr "Uvedený podíl na ceně" -#: pretix/base/models/items.py:1561 +#: pretix/base/models/items.py:1571 msgid "" "If set, it will be shown that this bundled item is responsible for the given " "value of the total gross price. This might be important in cases of mixed " @@ -6083,60 +6164,60 @@ msgstr "" "v případech smíšeného zdanění, jinak můžete toto pole ponechat prázdné. Tato " "cena se nepřipočítává k základní ceně." -#: pretix/base/models/items.py:1584 +#: pretix/base/models/items.py:1594 msgid "The bundled item must belong to the same event as the item." msgstr "Zahrnuté produkty musí patřit ke stejné akci." -#: pretix/base/models/items.py:1586 +#: pretix/base/models/items.py:1596 msgid "A variation needs to be set for this item." msgstr "Pro tento produkt musí být vybrána varianta." -#: pretix/base/models/items.py:1588 +#: pretix/base/models/items.py:1598 msgid "The chosen variation does not belong to this item." msgstr "Tato varianta nepatří k tomuto produktu." -#: pretix/base/models/items.py:1593 +#: pretix/base/models/items.py:1603 msgid "The count needs to be equal to or greater than zero." msgstr "Počet musí být alespoň nula." -#: pretix/base/models/items.py:1648 +#: pretix/base/models/items.py:1658 msgid "Number" msgstr "Číslo" -#: pretix/base/models/items.py:1649 +#: pretix/base/models/items.py:1659 msgid "Text (one line)" msgstr "Text (jednořádkový)" -#: pretix/base/models/items.py:1650 +#: pretix/base/models/items.py:1660 msgid "Multiline text" msgstr "Text (víceřádkový)" -#: pretix/base/models/items.py:1651 +#: pretix/base/models/items.py:1661 msgid "Yes/No" msgstr "Ano/Ne" -#: pretix/base/models/items.py:1652 +#: pretix/base/models/items.py:1662 msgid "Choose one from a list" msgstr "Výběr ze seznamu" -#: pretix/base/models/items.py:1653 +#: pretix/base/models/items.py:1663 msgid "Choose multiple from a list" msgstr "Vícenásobný výběr ze seznamu" -#: pretix/base/models/items.py:1654 +#: pretix/base/models/items.py:1664 msgid "File upload" msgstr "Upload souborů" -#: pretix/base/models/items.py:1657 +#: pretix/base/models/items.py:1667 #: pretix/control/templates/pretixcontrol/event/settings.html:240 msgid "Date and time" msgstr "Datum a čas" -#: pretix/base/models/items.py:1658 +#: pretix/base/models/items.py:1668 msgid "Country code (ISO 3166-1 alpha-2)" msgstr "Země (ISO3166-1-alpha-2-kód zemí)" -#: pretix/base/models/items.py:1681 pretix/base/models/items.py:1957 +#: pretix/base/models/items.py:1691 pretix/base/models/items.py:1967 #: pretix/base/models/organizer.py:654 msgid "" "The identifier may only contain letters, numbers, dots, dashes, and " @@ -6144,78 +6225,78 @@ msgid "" msgstr "" "Toto pole může obsahovat pouze písmena, číslice, tečky, pomlčky a podtržítka." -#: pretix/base/models/items.py:1686 +#: pretix/base/models/items.py:1696 msgid "Help text" msgstr "Nápověda" -#: pretix/base/models/items.py:1687 +#: pretix/base/models/items.py:1697 msgid "If the question needs to be explained or clarified, do it here!" msgstr "Pokud je třeba otázku vysvětlit nebo objasnit, udělejte to zde!" -#: pretix/base/models/items.py:1693 +#: pretix/base/models/items.py:1703 msgid "Question type" msgstr "Typ odpovědi" -#: pretix/base/models/items.py:1697 +#: pretix/base/models/items.py:1707 #: pretix/control/templates/pretixcontrol/items/questions.html:59 msgid "Required question" msgstr "Odpověď je nutná" -#: pretix/base/models/items.py:1704 +#: pretix/base/models/items.py:1714 msgid "This question will be asked to buyers of the selected products" msgstr "Tato otázka je položena všem kupujícím vybraných produktů" -#: pretix/base/models/items.py:1711 +#: pretix/base/models/items.py:1721 msgid "Ask during check-in instead of in the ticket buying process" msgstr "Otázka při registraci místo v procesu prodeje" -#: pretix/base/models/items.py:1712 pretix/base/models/items.py:1717 +#: pretix/base/models/items.py:1722 pretix/base/models/items.py:1727 msgid "Not supported by all check-in apps for all question types." msgstr "Všechny naše aplikace pro odbavení nepodporují všechny typy otázek." -#: pretix/base/models/items.py:1716 +#: pretix/base/models/items.py:1726 msgid "Show answer during check-in" msgstr "" -#: pretix/base/models/items.py:1721 +#: pretix/base/models/items.py:1731 #: pretix/control/templates/pretixcontrol/items/questions.html:70 msgid "Hidden question" msgstr "Skrytá otázka" -#: pretix/base/models/items.py:1722 +#: pretix/base/models/items.py:1732 msgid "This question will only show up in the backend." msgstr "Tato otázka se zobrazí pouze v zadní části." -#: pretix/base/models/items.py:1726 +#: pretix/base/models/items.py:1736 msgid "Print answer on invoices" msgstr "Tisk odpovědi na faktury" -#: pretix/base/models/items.py:1734 pretix/base/models/items.py:1740 -#: pretix/base/models/items.py:1746 +#: pretix/base/models/items.py:1744 pretix/base/models/items.py:1750 +#: pretix/base/models/items.py:1756 msgid "Minimum value" msgstr "Minimální hodnota" -#: pretix/base/models/items.py:1735 pretix/base/models/items.py:1738 -#: pretix/base/models/items.py:1741 pretix/base/models/items.py:1744 -#: pretix/base/models/items.py:1747 pretix/base/models/items.py:1750 -#: pretix/base/models/items.py:1754 +#: pretix/base/models/items.py:1745 pretix/base/models/items.py:1748 +#: pretix/base/models/items.py:1751 pretix/base/models/items.py:1754 +#: pretix/base/models/items.py:1757 pretix/base/models/items.py:1760 +#: pretix/base/models/items.py:1764 msgid "Currently not supported in our apps and during check-in" msgstr "V současné době není podporováno našimi aplikacemi a během odbavení" -#: pretix/base/models/items.py:1737 pretix/base/models/items.py:1743 -#: pretix/base/models/items.py:1749 +#: pretix/base/models/items.py:1747 pretix/base/models/items.py:1753 +#: pretix/base/models/items.py:1759 msgid "Maximum value" msgstr "Maximální hodnota" -#: pretix/base/models/items.py:1752 +#: pretix/base/models/items.py:1762 msgid "Maximum length" msgstr "Maximální délka" -#: pretix/base/models/items.py:1758 +#: pretix/base/models/items.py:1768 msgid "Validate file to be a portrait" msgstr "Zkontrolujte, zda je fotografie na výšku" -#: pretix/base/models/items.py:1759 +#: pretix/base/models/items.py:1769 msgid "" "If checked, files must be images with an aspect ratio of 3:4. This is " "commonly used for photos printed on badges." @@ -6223,57 +6304,57 @@ msgstr "" "Pokud je tato možnost aktivní, jsou přijímány pouze snímky ve formátu 3:4. " "Obvykle se používá pro účastnické průkazy." -#: pretix/base/models/items.py:1814 +#: pretix/base/models/items.py:1824 msgid "An answer to this question is required to proceed." msgstr "Tuto otázku je nutné zodpovědět." -#: pretix/base/models/items.py:1824 +#: pretix/base/models/items.py:1834 msgid "Invalid input type." msgstr "Neplatný typ vstupu." -#: pretix/base/models/items.py:1858 +#: pretix/base/models/items.py:1868 msgid "The number is to low." msgstr "Počet je příliš nízký." -#: pretix/base/models/items.py:1860 +#: pretix/base/models/items.py:1870 msgid "The number is to high." msgstr "Počet je příliš vysoký." -#: pretix/base/models/items.py:1863 +#: pretix/base/models/items.py:1873 msgid "Invalid number input." msgstr "Neplatný číselný údaj." -#: pretix/base/models/items.py:1870 pretix/base/models/items.py:1894 +#: pretix/base/models/items.py:1880 pretix/base/models/items.py:1904 msgid "Please choose a later date." msgstr "Zvolte prosím pozdější datum." -#: pretix/base/models/items.py:1872 pretix/base/models/items.py:1896 +#: pretix/base/models/items.py:1882 pretix/base/models/items.py:1906 msgid "Please choose an earlier date." msgstr "Zvolte prosím dřívější datum." -#: pretix/base/models/items.py:1875 +#: pretix/base/models/items.py:1885 msgid "Invalid date input." msgstr "Neplatné zadání data." -#: pretix/base/models/items.py:1882 +#: pretix/base/models/items.py:1892 msgid "Invalid time input." msgstr "Neplatný časový údaj." -#: pretix/base/models/items.py:1891 +#: pretix/base/models/items.py:1901 msgid "Invalid datetime input." msgstr "Neplatné zadání časového razítka." -#: pretix/base/models/items.py:1903 +#: pretix/base/models/items.py:1913 msgid "Unknown country code." msgstr "Neznámý kód země." -#: pretix/base/models/items.py:1921 pretix/base/models/items.py:1923 +#: pretix/base/models/items.py:1931 pretix/base/models/items.py:1933 #, fuzzy #| msgid "The maximum count needs to be greater than the minimum count." msgid "The maximum date must not be before the minimum value." msgstr "Minimální počet musí být menší než maximální počet." -#: pretix/base/models/items.py:1925 +#: pretix/base/models/items.py:1935 #, fuzzy #| msgid "" #| "The maximum number of usages may not be lower than the minimum number of " @@ -6281,57 +6362,59 @@ msgstr "Minimální počet musí být menší než maximální počet." msgid "The maximum value must not be lower than the minimum value." msgstr "Maximální počet použití nesmí být nižší než minimální počet použití." -#: pretix/base/models/items.py:1943 +#: pretix/base/models/items.py:1953 msgid "" "The system already contains answers to this question that are not compatible " "with changing the type of question without data loss. Consider hiding this " "question and creating a new one instead." msgstr "" -#: pretix/base/models/items.py:1961 +#: pretix/base/models/items.py:1971 #: pretix/control/templates/pretixcontrol/items/question.html:87 msgid "Answer" msgstr "" -#: pretix/base/models/items.py:1985 +#: pretix/base/models/items.py:1995 #, python-brace-format msgid "The identifier \"{}\" is already used for a different option." msgstr "Odkaz {} je již použit pro jinou možnost, vyberte prosím jinou." -#: pretix/base/models/items.py:1988 +#: pretix/base/models/items.py:1998 msgid "Question option" msgstr "Možnost odpovědi" -#: pretix/base/models/items.py:1989 +#: pretix/base/models/items.py:1999 msgid "Question options" msgstr "Možnosti odpovědí" -#: pretix/base/models/items.py:2074 pretix/control/forms/event.py:1903 +#: pretix/base/models/items.py:2084 pretix/control/forms/event.py:1903 #: pretix/control/templates/pretixcontrol/items/quotas.html:104 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:83 msgid "Total capacity" msgstr "Celkový počet" -#: pretix/base/models/items.py:2076 pretix/control/forms/item.py:512 +#: pretix/base/models/items.py:2086 pretix/control/forms/item.py:512 msgid "Leave empty for an unlimited number of tickets." msgstr "Pro neomezený počet vstupenek nechte prázdné." -#: pretix/base/models/items.py:2080 pretix/base/models/orders.py:1494 -#: pretix/base/models/orders.py:3033 +#: pretix/base/models/items.py:2090 pretix/base/models/orders.py:1516 +#: pretix/base/models/orders.py:3055 #: pretix/control/templates/pretixcontrol/checkin/index.html:97 msgid "Item" msgstr "Produkt" -#: pretix/base/models/items.py:2088 pretix/control/forms/item.py:973 +#: pretix/base/models/items.py:2098 pretix/control/forms/item.py:973 #: pretix/plugins/autocheckin/models.py:74 msgid "Variations" msgstr "Varianty" -#: pretix/base/models/items.py:2092 +#: pretix/base/models/items.py:2102 #: pretix/control/templates/pretixcontrol/items/quotas.html:135 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:96 msgid "Ignore this quota when determining event availability" msgstr "Ignorujte tento kontingent pro celkovou obsazenost akce" -#: pretix/base/models/items.py:2093 +#: pretix/base/models/items.py:2103 msgid "" "If you enable this, this quota will be ignored when determining event " "availability in your event calendar. This is useful e.g. for merchandise " @@ -6343,11 +6426,11 @@ msgstr "" "další položky, které se prodávají v rámci každé akce, ale neměly by mít vliv " "na zobrazení v kalendáři." -#: pretix/base/models/items.py:2100 +#: pretix/base/models/items.py:2110 msgid "Close this quota permanently once it is sold out" msgstr "Uzavřít tuto kvótu po vyprodání" -#: pretix/base/models/items.py:2101 +#: pretix/base/models/items.py:2111 msgid "" "If you enable this, when the quota is sold out once, no more tickets will be " "sold, even if tickets become available again through cancellations or " @@ -6358,11 +6441,11 @@ msgstr "" "zrušení nebo vypršení platnosti objednávek. Kvótu můžete samozřejmě kdykoli " "znovu otevřít." -#: pretix/base/models/items.py:2109 +#: pretix/base/models/items.py:2119 msgid "Allow to sell more tickets once people have checked out" msgstr "Prodej dalších vstupenek po odchodu zákazníků z akce" -#: pretix/base/models/items.py:2110 +#: pretix/base/models/items.py:2120 msgid "" "With this option, quota will be released as soon as people are scanned at an " "exit of your event. This will only happen if they have been scanned both at " @@ -6378,42 +6461,43 @@ msgstr "" "přeplnění, seznamy odbavení s nastavenou možností \"Povolit opakovaný vstup " "při naskenovaném výstupu\" budou ignorovány." -#: pretix/base/models/items.py:2122 pretix/control/navigation.py:169 +#: pretix/base/models/items.py:2132 pretix/control/navigation.py:169 #: pretix/control/templates/pretixcontrol/items/quotas.html:5 #: pretix/control/templates/pretixcontrol/items/quotas.html:7 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:418 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:185 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:59 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:76 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:59 msgid "Quotas" msgstr "Kontingenty" -#: pretix/base/models/items.py:2195 +#: pretix/base/models/items.py:2205 msgid "All variations must belong to an item contained in the items list." msgstr "" "Všechny varianty musí patřit k produktu, který je také uveden v seznamu " "produktů." -#: pretix/base/models/items.py:2206 +#: pretix/base/models/items.py:2216 msgid "" "One or more items has variations but none of these are in the variations " "list." msgstr "Jeden nebo více produktů má varianty, ale žádný z nich není vybrán." -#: pretix/base/models/items.py:2212 pretix/base/models/waitinglist.py:304 +#: pretix/base/models/items.py:2222 pretix/base/models/waitinglist.py:304 msgid "Subevent cannot be null for event series." msgstr "Datum nemůže být prázdné, protože se jedná o sérii akcí." -#: pretix/base/models/items.py:2248 +#: pretix/base/models/items.py:2258 msgid "Required for products" msgstr "Povinné pro produkty" -#: pretix/base/models/items.py:2249 +#: pretix/base/models/items.py:2259 msgid "" "If checked, this property must be set in each product. Does not apply if a " "default value is set." msgstr "" -#: pretix/base/models/items.py:2254 +#: pretix/base/models/items.py:2264 msgid "" "If you keep this empty, any value is allowed. Otherwise, enter one possible " "value per line." @@ -6421,14 +6505,14 @@ msgstr "" "Pokud necháte tuto hodnotu prázdnou, je povolena jakákoli hodnota. V opačném " "případě zadejte jednu možnou hodnotu na řádek." -#: pretix/base/models/items.py:2313 +#: pretix/base/models/items.py:2323 #, fuzzy #| msgctxt "timeframe" #| msgid "Start" msgid "Start" msgstr "Začátek" -#: pretix/base/models/items.py:2314 +#: pretix/base/models/items.py:2324 #: pretix/plugins/reports/accountingreport.py:129 msgid "End" msgstr "Konec" @@ -6478,6 +6562,29 @@ msgstr "Přítomný" msgid "bounced" msgstr "" +#: pretix/base/models/media.py:77 +msgctxt "reusable_medium" +msgid "Claim token" +msgstr "" + +#: pretix/base/models/media.py:82 +msgctxt "reusable_medium" +msgid "Label" +msgstr "" + +#: pretix/base/models/media.py:105 +#, fuzzy +#| msgid "Linked ticket" +msgid "Linked tickets" +msgstr "Spojená vstupenka" + +#: pretix/base/models/media.py:107 +msgid "" +"If you link to more than one ticket, make sure there is no overlap in " +"validity. If multiple tickets are valid at once, this will lead to failed " +"check-ins." +msgstr "" + #: pretix/base/models/memberships.py:44 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:28 msgid "Membership is transferable" @@ -6538,8 +6645,8 @@ msgstr "chybějící" msgid "paid" msgstr "zaplaceno" -#: pretix/base/models/orders.py:203 pretix/control/forms/filter.py:1857 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:35 +#: pretix/base/models/orders.py:203 pretix/control/forms/filter.py:1863 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:47 msgid "expired" msgstr "vypršelá platnost" @@ -6584,7 +6691,7 @@ msgid "" msgstr "" "Tento text se zobrazí nad formulářem pro fakturační adresu během objednávky." -#: pretix/base/models/orders.py:300 pretix/base/models/orders.py:1534 +#: pretix/base/models/orders.py:300 pretix/base/models/orders.py:1556 msgid "Meta information" msgstr "Metainformace" @@ -6593,23 +6700,23 @@ msgstr "Metainformace" msgid "API meta information" msgstr "Metainformace" -#: pretix/base/models/orders.py:418 pretix/plugins/sendmail/forms.py:236 +#: pretix/base/models/orders.py:440 pretix/plugins/sendmail/forms.py:236 #: pretix/plugins/sendmail/forms.py:389 pretix/plugins/sendmail/views.py:269 msgid "approval pending" msgstr "" -#: pretix/base/models/orders.py:420 +#: pretix/base/models/orders.py:442 #, fuzzy msgctxt "order state" msgid "pending (confirmed)" msgstr "Čeká se (potvrzeno)" -#: pretix/base/models/orders.py:422 +#: pretix/base/models/orders.py:444 #, fuzzy msgid "canceled (paid fee)" msgstr "Zrušeno (zaplacený poplatek)" -#: pretix/base/models/orders.py:1035 +#: pretix/base/models/orders.py:1057 msgid "" "The payment can not be accepted as the last date of payments configured in " "the payment settings is over." @@ -6617,7 +6724,7 @@ msgstr "" "Tuto platbu nelze přijmout, protože bylo překročeno datum poslední platby " "nakonfigurované v nastavení platby." -#: pretix/base/models/orders.py:1037 +#: pretix/base/models/orders.py:1059 msgid "" "The payment can not be accepted as the order is expired and you configured " "that no late payments should be accepted in the payment settings." @@ -6625,124 +6732,124 @@ msgstr "" "Tuto platbu nelze přijmout, protože platnost příkazu vypršela a v nastavení " "plateb je nakonfigurováno, že pozdní platby nemají být přijímány." -#: pretix/base/models/orders.py:1039 +#: pretix/base/models/orders.py:1061 msgid "This order is not yet approved by the event organizer." msgstr "Tato objednávka ještě není schválena organizátorem akce." -#: pretix/base/models/orders.py:1064 +#: pretix/base/models/orders.py:1086 #, python-brace-format msgid "The ordered product \"{item}\" is no longer available." msgstr "Objednaný produkt \"{item}\" již není k dispozici." -#: pretix/base/models/orders.py:1065 +#: pretix/base/models/orders.py:1087 #, python-brace-format msgid "The seat \"{seat}\" is no longer available." msgstr "Místo \"{seat}\" již není k dispozici." -#: pretix/base/models/orders.py:1066 +#: pretix/base/models/orders.py:1088 #, python-brace-format msgid "The voucher \"{voucher}\" no longer has sufficient budget." msgstr "Poukaz \"{voucher}\" již nemá dostatečný rozpočet." -#: pretix/base/models/orders.py:1067 +#: pretix/base/models/orders.py:1089 #, python-brace-format msgid "The voucher \"{voucher}\" has been used in the meantime." msgstr "Poukaz \"{voucher}\" byl mezitím použit." -#: pretix/base/models/orders.py:1395 +#: pretix/base/models/orders.py:1417 msgid "" msgstr "" -#: pretix/base/models/orders.py:1514 pretix/base/models/orders.py:1522 +#: pretix/base/models/orders.py:1536 pretix/base/models/orders.py:1544 msgid "Empty, if this product is not an admission ticket" msgstr "Prázdné, pokud tento produkt není vstupenkou" -#: pretix/base/models/orders.py:1731 +#: pretix/base/models/orders.py:1753 msgctxt "payment_state" msgid "created" msgstr "vytvořeno" -#: pretix/base/models/orders.py:1732 +#: pretix/base/models/orders.py:1754 msgctxt "payment_state" msgid "pending" msgstr "čeká na" -#: pretix/base/models/orders.py:1733 +#: pretix/base/models/orders.py:1755 msgctxt "payment_state" msgid "confirmed" msgstr "potvrzeno" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1756 msgctxt "payment_state" msgid "canceled" msgstr "přerušeno" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1757 msgctxt "payment_state" msgid "failed" msgstr "neúspěšné" -#: pretix/base/models/orders.py:1736 +#: pretix/base/models/orders.py:1758 msgctxt "payment_state" msgid "refunded" msgstr "vráceno" -#: pretix/base/models/orders.py:1764 pretix/base/models/orders.py:2193 +#: pretix/base/models/orders.py:1786 pretix/base/models/orders.py:2215 #: pretix/base/shredder.py:637 msgid "Payment information" msgstr "Informace o platbě" -#: pretix/base/models/orders.py:2134 +#: pretix/base/models/orders.py:2156 msgctxt "refund_state" msgid "started externally" msgstr "zahájeno externě" -#: pretix/base/models/orders.py:2135 +#: pretix/base/models/orders.py:2157 msgctxt "refund_state" msgid "created" msgstr "vytvořeno" -#: pretix/base/models/orders.py:2136 +#: pretix/base/models/orders.py:2158 msgctxt "refund_state" msgid "in transit" msgstr "na cestě" -#: pretix/base/models/orders.py:2137 +#: pretix/base/models/orders.py:2159 msgctxt "refund_state" msgid "done" msgstr "vyřízeno" -#: pretix/base/models/orders.py:2138 +#: pretix/base/models/orders.py:2160 msgctxt "refund_state" msgid "failed" msgstr "neúspěšné" -#: pretix/base/models/orders.py:2140 +#: pretix/base/models/orders.py:2162 msgctxt "refund_state" msgid "canceled" msgstr "přerušeno" -#: pretix/base/models/orders.py:2148 +#: pretix/base/models/orders.py:2170 msgctxt "refund_source" msgid "Organizer" msgstr "Organizátor" -#: pretix/base/models/orders.py:2149 +#: pretix/base/models/orders.py:2171 msgctxt "refund_source" msgid "Customer" msgstr "Zákazník" -#: pretix/base/models/orders.py:2150 +#: pretix/base/models/orders.py:2172 msgctxt "refund_source" msgid "External" msgstr "Externí" -#: pretix/base/models/orders.py:2188 +#: pretix/base/models/orders.py:2210 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:198 msgid "Refund reason" msgstr "Důvod vrácení peněz" -#: pretix/base/models/orders.py:2189 +#: pretix/base/models/orders.py:2211 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:199 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:201 msgid "" @@ -6751,37 +6858,37 @@ msgstr "" "Může být zobrazen koncovému uživateli nebo použit např. jako součást " "platebního odkazu." -#: pretix/base/models/orders.py:2309 +#: pretix/base/models/orders.py:2331 msgid "Service fee" msgstr "Poplatek za služby" -#: pretix/base/models/orders.py:2310 +#: pretix/base/models/orders.py:2332 msgid "Payment fee" msgstr "Poplatek za platbu" -#: pretix/base/models/orders.py:2311 +#: pretix/base/models/orders.py:2333 msgid "Shipping fee" msgstr "Poštovné" -#: pretix/base/models/orders.py:2312 +#: pretix/base/models/orders.py:2334 #: pretix/control/templates/pretixcontrol/order/index.html:190 msgid "Cancellation fee" msgstr "Storno poplatek" -#: pretix/base/models/orders.py:2313 +#: pretix/base/models/orders.py:2335 msgid "Insurance fee" msgstr "Pojistné" -#: pretix/base/models/orders.py:2314 +#: pretix/base/models/orders.py:2336 msgid "Late fee" msgstr "Poplatky při zpoždění" -#: pretix/base/models/orders.py:2315 +#: pretix/base/models/orders.py:2337 msgid "Other fees" msgstr "Další poplatky" -#: pretix/base/models/orders.py:2316 pretix/base/payment.py:1379 -#: pretix/base/payment.py:1455 pretix/base/settings.py:1101 +#: pretix/base/models/orders.py:2338 pretix/base/payment.py:1379 +#: pretix/base/payment.py:1455 pretix/base/settings.py:1114 #: pretix/control/templates/pretixcontrol/items/index.html:117 #: pretix/control/templates/pretixcontrol/order/index.html:185 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:383 @@ -6790,7 +6897,7 @@ msgstr "Další poplatky" msgid "Gift card" msgstr "Dárkový poukaz" -#: pretix/base/models/orders.py:2321 +#: pretix/base/models/orders.py:2343 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:84 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:126 #: pretix/control/views/vouchers.py:121 @@ -6798,58 +6905,58 @@ msgstr "Dárkový poukaz" msgid "Value" msgstr "Hodnota" -#: pretix/base/models/orders.py:2602 +#: pretix/base/models/orders.py:2624 msgid "Order position" msgstr "Objednaný produkt" -#: pretix/base/models/orders.py:3157 +#: pretix/base/models/orders.py:3179 msgid "Cart ID (e.g. session key)" msgstr "ID košíku (např. klíč relace)" -#: pretix/base/models/orders.py:3168 +#: pretix/base/models/orders.py:3190 #, fuzzy #| msgid "Gift card: Expiration date" msgid "Limit for extending expiration date" msgstr "Poukaz: Datum platnosti" -#: pretix/base/models/orders.py:3204 +#: pretix/base/models/orders.py:3226 msgid "Cart position" msgstr "Produkt v nákupním košíku" -#: pretix/base/models/orders.py:3205 +#: pretix/base/models/orders.py:3227 msgid "Cart positions" msgstr "Produkty v nákupním košíku" -#: pretix/base/models/orders.py:3347 +#: pretix/base/models/orders.py:3369 msgid "Business customer" msgstr "Obchodní zákazník" -#: pretix/base/models/orders.py:3363 +#: pretix/base/models/orders.py:3385 msgid "This reference will be printed on your invoice for your convenience." msgstr "Tato informace bude uvedena na faktuře pro vaše potřeby." -#: pretix/base/models/orders.py:3489 +#: pretix/base/models/orders.py:3511 msgid "Transmission type" msgstr "Způsob doručení faktury" -#: pretix/base/models/orders.py:3580 +#: pretix/base/models/orders.py:3602 #: pretix/plugins/badges/templates/pretixplugins/badges/control_order_position_buttons.html:9 msgid "Badge" msgstr "Badge" -#: pretix/base/models/orders.py:3581 pretix/base/pdf.py:1157 +#: pretix/base/models/orders.py:3603 pretix/base/pdf.py:1162 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:66 #: pretix/plugins/ticketoutputpdf/ticketoutput.py:114 msgid "Ticket" msgstr "Lístek" -#: pretix/base/models/orders.py:3582 +#: pretix/base/models/orders.py:3604 #, fuzzy msgid "Certificate" msgstr "Ověřování" -#: pretix/base/models/orders.py:3583 pretix/control/views/event.py:401 -#: pretix/control/views/event.py:406 pretix/control/views/organizer.py:653 +#: pretix/base/models/orders.py:3605 pretix/control/views/event.py:402 +#: pretix/control/views/event.py:407 pretix/control/views/organizer.py:653 #: pretix/control/views/organizer.py:658 msgid "Other" msgstr "Další" @@ -6899,7 +7006,7 @@ msgid "All event permissions" msgstr "Oprávnění akce" #: pretix/base/models/organizer.py:385 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:34 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:47 msgid "Event permissions" msgstr "Oprávnění akce" @@ -6910,7 +7017,7 @@ msgid "All organizer permissions" msgstr "Oprávnění organizátora" #: pretix/base/models/organizer.py:387 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:25 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:26 msgid "Organizer permissions" msgstr "Oprávnění organizátora" @@ -6947,7 +7054,7 @@ msgid "Type" msgstr "Typ" #: pretix/base/models/seating.py:46 pretix/base/models/tax.py:306 -#: pretix/base/pdf.py:1336 +#: pretix/base/pdf.py:1341 msgid "Your layout file is not a valid JSON file." msgstr "Plán rozesazení není platný soubor JSON." @@ -6966,12 +7073,12 @@ msgstr "" msgid "Multiple seats have the same ID: {id}" msgstr "" -#: pretix/base/models/seating.py:200 +#: pretix/base/models/seating.py:203 #, python-brace-format msgid "Row {number}" msgstr "Řada {number}" -#: pretix/base/models/seating.py:205 +#: pretix/base/models/seating.py:208 #, python-brace-format msgid "Seat {number}" msgstr "Místo {number}" @@ -7901,7 +8008,7 @@ msgstr "" msgid "Offsetting" msgstr "Zúčtování" -#: pretix/base/payment.py:1339 pretix/control/views/orders.py:1252 +#: pretix/base/payment.py:1339 pretix/control/views/orders.py:1266 msgid "You entered an order that could not be found." msgstr "Zadali jste objednávku, kterou se nepodařilo najít." @@ -7940,7 +8047,7 @@ msgid "Product name" msgstr "Název produktu" #: pretix/base/pdf.py:124 pretix/base/services/tickets.py:98 -#: pretix/control/views/event.py:941 pretix/control/views/pdf.py:96 +#: pretix/control/views/event.py:942 pretix/control/views/pdf.py:96 msgid "Sample product" msgstr "Ukázkový produkt" @@ -7957,7 +8064,7 @@ msgid "Product description" msgstr "Varianta příkladu" #: pretix/base/pdf.py:134 pretix/base/services/tickets.py:99 -#: pretix/control/views/event.py:942 pretix/control/views/pdf.py:97 +#: pretix/control/views/event.py:943 pretix/control/views/pdf.py:97 msgid "Sample product description" msgstr "Příklad popisu produktu" @@ -8002,7 +8109,7 @@ msgstr "Cena včetně dodatků" #: pretix/base/services/placeholders.py:604 #: pretix/base/services/placeholders.py:689 #: pretix/base/services/placeholders.py:705 -#: pretix/base/services/placeholders.py:714 pretix/control/views/event.py:943 +#: pretix/base/services/placeholders.py:714 pretix/control/views/event.py:944 msgid "John Doe" msgstr "Jan Novák" @@ -8083,9 +8190,9 @@ msgstr "31.5.2016 20:00" msgid "Event begin date" msgstr "Datum začátku akce" -#: pretix/base/pdf.py:264 pretix/base/pdf.py:290 pretix/base/pdf.py:406 -#: pretix/base/pdf.py:430 pretix/base/pdf.py:454 pretix/base/pdf.py:478 -#: pretix/base/pdf.py:541 pretix/base/pdf.py:546 +#: pretix/base/pdf.py:264 pretix/base/pdf.py:290 pretix/base/pdf.py:411 +#: pretix/base/pdf.py:435 pretix/base/pdf.py:459 pretix/base/pdf.py:483 +#: pretix/base/pdf.py:546 pretix/base/pdf.py:551 msgid "2017-05-31" msgstr "31.5.2016" @@ -8102,8 +8209,8 @@ msgid "Event begin weekday" msgstr "Začátek události ve všední den" #: pretix/base/pdf.py:277 pretix/base/pdf.py:306 -#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1399 -#: pretix/control/forms/filter.py:1577 +#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1405 +#: pretix/control/forms/filter.py:1583 msgid "Friday" msgstr "Pátek" @@ -8127,8 +8234,8 @@ msgstr "Konec akce v pracovní den" msgid "Event admission date and time" msgstr "Datum a čas vstupu" -#: pretix/base/pdf.py:311 pretix/base/pdf.py:414 pretix/base/pdf.py:438 -#: pretix/base/pdf.py:462 pretix/base/pdf.py:486 pretix/base/pdf.py:535 +#: pretix/base/pdf.py:311 pretix/base/pdf.py:419 pretix/base/pdf.py:443 +#: pretix/base/pdf.py:467 pretix/base/pdf.py:491 pretix/base/pdf.py:540 msgid "2017-05-31 19:00" msgstr "31.5.2016 19:00" @@ -8136,8 +8243,8 @@ msgstr "31.5.2016 19:00" msgid "Event admission time" msgstr "Čas vstupu do akce" -#: pretix/base/pdf.py:319 pretix/base/pdf.py:422 pretix/base/pdf.py:446 -#: pretix/base/pdf.py:470 pretix/base/pdf.py:494 +#: pretix/base/pdf.py:319 pretix/base/pdf.py:427 pretix/base/pdf.py:451 +#: pretix/base/pdf.py:475 pretix/base/pdf.py:499 msgid "19:00" msgstr "19:00" @@ -8145,7 +8252,7 @@ msgstr "19:00" msgid "Event location" msgstr "Místo konání akce" -#: pretix/base/pdf.py:327 pretix/base/settings.py:1335 +#: pretix/base/pdf.py:327 pretix/base/settings.py:1348 msgid "Random City" msgstr "Vzorové město" @@ -8174,10 +8281,21 @@ msgid "Atlantis" msgstr "Atlantida" #: pretix/base/pdf.py:376 +#, fuzzy +#| msgid "Invoice recipient e-mail" +msgid "Invoice custom recipient field" +msgstr "E-mail příjemce faktury" + +#: pretix/base/pdf.py:377 +#, fuzzy +msgid "Custom recipient field" +msgstr "Dodatečné pole přijímače" + +#: pretix/base/pdf.py:381 msgid "List of Add-Ons" msgstr "Seznam doplňků" -#: pretix/base/pdf.py:377 pretix/base/pdf.py:384 +#: pretix/base/pdf.py:382 pretix/base/pdf.py:389 #, fuzzy msgid "" "Add-on 1\n" @@ -8186,164 +8304,164 @@ msgstr "" "Workshop 1\n" "Workshop 2" -#: pretix/base/pdf.py:383 +#: pretix/base/pdf.py:388 #, fuzzy #| msgid "List of Add-Ons" msgid "List of Checked-In Add-Ons" msgstr "Seznam doplňků" -#: pretix/base/pdf.py:390 pretix/control/forms/filter.py:1664 -#: pretix/control/forms/filter.py:1666 +#: pretix/base/pdf.py:395 pretix/control/forms/filter.py:1670 +#: pretix/control/forms/filter.py:1672 #: pretix/control/templates/pretixcontrol/organizers/index.html:42 msgid "Organizer name" msgstr "Jméno organizátora" -#: pretix/base/pdf.py:391 +#: pretix/base/pdf.py:396 msgid "Event organizer company" msgstr "Jméno pořadatele" -#: pretix/base/pdf.py:395 +#: pretix/base/pdf.py:400 msgid "Organizer info text" msgstr "informační text pořadatele" -#: pretix/base/pdf.py:396 +#: pretix/base/pdf.py:401 msgid "Event organizer info text" msgstr "Informace o pořadateli" -#: pretix/base/pdf.py:400 pretix/base/pdf.py:401 +#: pretix/base/pdf.py:405 pretix/base/pdf.py:406 msgid "Event info text" msgstr "Informace o akci" -#: pretix/base/pdf.py:405 +#: pretix/base/pdf.py:410 msgid "Printing date" msgstr "Datum tisku" -#: pretix/base/pdf.py:413 +#: pretix/base/pdf.py:418 msgid "Printing date and time" msgstr "Datum a čas tisku" -#: pretix/base/pdf.py:421 +#: pretix/base/pdf.py:426 msgid "Printing time" msgstr "Datum tisku" -#: pretix/base/pdf.py:429 pretix/control/forms/item.py:796 +#: pretix/base/pdf.py:434 pretix/control/forms/item.py:796 msgid "Purchase date" msgstr "Zakoupeno dne" -#: pretix/base/pdf.py:437 +#: pretix/base/pdf.py:442 msgid "Purchase date and time" msgstr "Zakoupeno dne a v čase" -#: pretix/base/pdf.py:445 +#: pretix/base/pdf.py:450 #, fuzzy msgid "Purchase time" msgstr "Zakoupeno" -#: pretix/base/pdf.py:453 +#: pretix/base/pdf.py:458 msgid "Validity start date" msgstr "Datum začátku platnosti" -#: pretix/base/pdf.py:461 +#: pretix/base/pdf.py:466 msgid "Validity start date and time" msgstr "Datum a čas začátku platnosti" -#: pretix/base/pdf.py:469 +#: pretix/base/pdf.py:474 msgid "Validity start time" msgstr "Čas začátku platnosti" -#: pretix/base/pdf.py:477 +#: pretix/base/pdf.py:482 msgid "Validity end date" msgstr "Datum konce platnosti" -#: pretix/base/pdf.py:485 +#: pretix/base/pdf.py:490 msgid "Validity end date and time" msgstr "Datum a čas konce platnosti" -#: pretix/base/pdf.py:493 +#: pretix/base/pdf.py:498 msgid "Validity end time" msgstr "Čas konce platnosti" -#: pretix/base/pdf.py:501 pretix/control/forms/item.py:1386 +#: pretix/base/pdf.py:506 pretix/control/forms/item.py:1386 #, fuzzy #| msgid "Printing time" msgid "Program times" msgstr "Datum tisku" -#: pretix/base/pdf.py:503 +#: pretix/base/pdf.py:508 msgid "" "2017-05-31 10:00 – 12:00, Room 1\n" "2017-05-31 14:00 – 16:00, Room 2\n" "2017-05-31 14:00 – 2017-06-01 14:00, Building A" msgstr "" -#: pretix/base/pdf.py:507 +#: pretix/base/pdf.py:512 msgid "Reusable Medium ID" msgstr "" -#: pretix/base/pdf.py:512 +#: pretix/base/pdf.py:517 msgid "Seat: Full name" msgstr "Místo: Celé jméno" -#: pretix/base/pdf.py:513 +#: pretix/base/pdf.py:518 msgid "Ground floor, Row 3, Seat 4" msgstr "Přízemí, řada 3, místo 4" -#: pretix/base/pdf.py:515 pretix/base/pdf.py:521 +#: pretix/base/pdf.py:520 pretix/base/pdf.py:526 #: pretix/control/forms/orders.py:348 msgid "General admission" msgstr "Základní vstupné" -#: pretix/base/pdf.py:518 +#: pretix/base/pdf.py:523 msgid "Seat: zone" msgstr "Místo: zóna" -#: pretix/base/pdf.py:519 +#: pretix/base/pdf.py:524 msgid "Ground floor" msgstr "parket" -#: pretix/base/pdf.py:524 +#: pretix/base/pdf.py:529 msgid "Seat: row" msgstr "Místo: řada" -#: pretix/base/pdf.py:529 +#: pretix/base/pdf.py:534 msgid "Seat: seat number" msgstr "Místo: číslo" -#: pretix/base/pdf.py:534 +#: pretix/base/pdf.py:539 msgid "Date and time of first scan" msgstr "datum a čas prvního skenování" -#: pretix/base/pdf.py:540 +#: pretix/base/pdf.py:545 msgid "Gift card: Issuance date" msgstr "Poukaz: Datum vystavení" -#: pretix/base/pdf.py:545 +#: pretix/base/pdf.py:550 msgid "Gift card: Expiration date" msgstr "Poukaz: Datum platnosti" -#: pretix/base/pdf.py:586 pretix/base/pdf.py:624 pretix/base/pdf.py:630 +#: pretix/base/pdf.py:591 pretix/base/pdf.py:629 pretix/base/pdf.py:635 #: pretix/plugins/badges/exporters.py:512 #: pretix/plugins/ticketoutputpdf/exporters.py:102 #, python-brace-format msgid "Question: {question}" msgstr "Otázka: {question}" -#: pretix/base/pdf.py:625 pretix/base/pdf.py:631 +#: pretix/base/pdf.py:630 pretix/base/pdf.py:636 #, python-brace-format msgid "" msgstr "" -#: pretix/base/pdf.py:672 +#: pretix/base/pdf.py:677 msgid "Attendee name for salutation" msgstr "Jméno účastníka pro pozdrav" -#: pretix/base/pdf.py:673 pretix/base/pdf.py:696 +#: pretix/base/pdf.py:678 pretix/base/pdf.py:701 #: pretix/base/services/placeholders.py:732 -#: pretix/control/forms/organizer.py:799 +#: pretix/control/forms/organizer.py:809 msgid "Mr Doe" msgstr "Pan Novák" -#: pretix/base/pdf.py:679 pretix/base/pdf.py:686 +#: pretix/base/pdf.py:684 pretix/base/pdf.py:691 #: pretix/plugins/badges/exporters.py:509 #: pretix/plugins/checkinlists/exporters.py:126 #: pretix/plugins/checkinlists/exporters.py:498 @@ -8352,16 +8470,16 @@ msgstr "Pan Novák" msgid "Attendee name: {part}" msgstr "Jméno účastníka: {part}" -#: pretix/base/pdf.py:695 +#: pretix/base/pdf.py:700 msgid "Invoice address name for salutation" msgstr "Jméno fakturační adresy pro pozdrav" -#: pretix/base/pdf.py:702 +#: pretix/base/pdf.py:707 #, python-brace-format msgid "Invoice address name: {part}" msgstr "Fakturační adresa: Název: {part}" -#: pretix/base/pdf.py:1345 +#: pretix/base/pdf.py:1350 #, python-brace-format msgid "Your layout file is not a valid layout. Error message: {}" msgstr "Soubor rozvržení neobsahuje platné rozvržení. Chyba: {}" @@ -8776,7 +8894,7 @@ msgstr[2] "" #: pretix/base/services/cart.py:152 pretix/base/services/orders.py:164 #: pretix/presale/templates/pretixpresale/event/index.html:170 -#: pretix/presale/views/waiting.py:150 pretix/presale/views/widget.py:843 +#: pretix/presale/views/waiting.py:150 pretix/presale/views/widget.py:846 msgid "The booking period for this event has not yet started." msgstr "Rezervační období pro tuto akci ještě nezačalo." @@ -9123,33 +9241,33 @@ msgstr "počet dnů se vstupem před {datetime}" msgid "week day" msgstr "Den" -#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1395 -#: pretix/control/forms/filter.py:1573 +#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1401 +#: pretix/control/forms/filter.py:1579 msgid "Monday" msgstr "Pondělí" -#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1396 -#: pretix/control/forms/filter.py:1574 +#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1402 +#: pretix/control/forms/filter.py:1580 msgid "Tuesday" msgstr "Úterý" -#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1397 -#: pretix/control/forms/filter.py:1575 +#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1403 +#: pretix/control/forms/filter.py:1581 msgid "Wednesday" msgstr "Středa" -#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1398 -#: pretix/control/forms/filter.py:1576 +#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1404 +#: pretix/control/forms/filter.py:1582 msgid "Thursday" msgstr "Čtvrtek" -#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1400 -#: pretix/control/forms/filter.py:1578 +#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1406 +#: pretix/control/forms/filter.py:1584 msgid "Saturday" msgstr "Sobota" -#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1401 -#: pretix/control/forms/filter.py:1579 +#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1407 +#: pretix/control/forms/filter.py:1585 msgid "Sunday" msgstr "Neděle" @@ -9173,54 +9291,64 @@ msgstr "Minimální hodnota {variable} nedosažena" msgid "{variable} is {value}" msgstr "{variable} je {value}" -#: pretix/base/services/checkin.py:972 +#: pretix/base/services/checkin.py:982 msgid "This order position has been canceled." msgstr "Položka objednávky byla stornována." -#: pretix/base/services/checkin.py:981 +#: pretix/base/services/checkin.py:991 msgid "This ticket has been blocked." msgstr "Tento tiket byl zablokován." -#: pretix/base/services/checkin.py:990 +#: pretix/base/services/checkin.py:1000 msgid "This order is not yet approved." msgstr "Tato objednávka dosud nebyla schválena." -#: pretix/base/services/checkin.py:999 pretix/base/services/checkin.py:1003 +#: pretix/base/services/checkin.py:1009 pretix/base/services/checkin.py:1013 #, python-brace-format msgid "This ticket is only valid after {datetime}." msgstr "Tato vstupenka je platná pouze po {datetime}." -#: pretix/base/services/checkin.py:1013 pretix/base/services/checkin.py:1017 +#: pretix/base/services/checkin.py:1023 pretix/base/services/checkin.py:1027 #, python-brace-format msgid "This ticket was only valid before {datetime}." msgstr "Tento tiket byl platný pouze před datem {datetime}." -#: pretix/base/services/checkin.py:1048 +#: pretix/base/services/checkin.py:1058 msgid "This order position has an invalid product for this check-in list." msgstr "Tato položka objednávky obsahuje pro tento seznam neplatný produkt." -#: pretix/base/services/checkin.py:1057 +#: pretix/base/services/checkin.py:1067 msgid "This order position has an invalid date for this check-in list." msgstr "Tato položka objednávky má pro tento seznam neplatné datum." -#: pretix/base/services/checkin.py:1068 +#: pretix/base/services/checkin.py:1078 msgid "This order is not marked as paid." msgstr "Objednávka není označena jako zaplacená." -#: pretix/base/services/checkin.py:1080 +#: pretix/base/services/checkin.py:1090 msgid "Evaluation of custom rules has failed." msgstr "" -#: pretix/base/services/checkin.py:1090 +#: pretix/base/services/checkin.py:1100 #, python-brace-format msgid "Entry not permitted: {explanation}." msgstr "Vstup není povolen: {explanation}." -#: pretix/base/services/checkin.py:1099 +#: pretix/base/services/checkin.py:1109 msgid "You need to answer questions to complete this check-in." msgstr "Pro dokončení odbavení musíte odpovědět na otázky." -#: pretix/base/services/checkin.py:1152 +#: pretix/base/services/checkin.py:1121 +msgid "Ticket needs to be exchanged to a suitable medium." +msgstr "" + +#: pretix/base/services/checkin.py:1128 +msgid "" +"This ticket has already been exchanged for a reusable medium that now needs " +"to be used instead." +msgstr "" + +#: pretix/base/services/checkin.py:1180 msgid "This ticket has already been redeemed." msgstr "Tato vstupenka již byla uplatněna." @@ -9380,6 +9508,64 @@ msgstr "" msgid "You are receiving this email because you placed an order for {event}." msgstr "Tento e-mail jste obdrželi, protože jste zadali objednávku na {event}." +#: pretix/base/services/media.py:93 pretix/base/services/media.py:95 +#, fuzzy +#| msgid "Invalid input type." +msgid "Invalid medium type." +msgstr "Neplatný typ vstupu." + +#: pretix/base/services/media.py:100 pretix/base/services/media.py:102 +#, fuzzy +#| msgid "The selected media type is not enabled in your organizer settings." +msgid "Medium type is not enabled for organizer." +msgstr "Vybraný typ média není v nastavení organizéru povolen." + +#: pretix/base/services/media.py:107 pretix/base/services/media.py:109 +msgid "Incorrect medium type for product." +msgstr "" + +#: pretix/base/services/media.py:114 pretix/base/services/media.py:116 +#, fuzzy +#| msgid "This ticket has already been redeemed." +msgid "Ticket is already exchanged for reusable medium." +msgstr "Tato vstupenka již byla uplatněna." + +#: pretix/base/services/media.py:133 pretix/base/services/media.py:135 +#, fuzzy +#| msgid "Reusable media type" +msgid "Reusable medium not found." +msgstr "Typ opakovaně použitelného média" + +#: pretix/base/services/media.py:140 pretix/base/services/media.py:142 +#: pretix/base/services/media.py:168 pretix/base/services/media.py:170 +#, fuzzy +#| msgid "The reusable medium has been created." +msgid "Reusable medium is inactive or expired." +msgstr "Bylo vytvořeno opakovaně použitelné médium." + +#: pretix/base/services/media.py:155 pretix/base/services/media.py:162 +#: pretix/base/services/media.py:176 +#, fuzzy +#| msgid "The reusable medium has been created." +msgid "Reusable medium not found and could not be created." +msgstr "Bylo vytvořeno opakovaně použitelné médium." + +#: pretix/base/services/media.py:183 +#, fuzzy +#| msgid "Reusable media type" +msgid "Reusable medium already exists." +msgstr "Typ opakovaně použitelného média" + +#: pretix/base/services/media.py:189 +#, fuzzy +#| msgid "The reusable medium has been created." +msgid "Reusable medium could not be created." +msgstr "Bylo vytvořeno opakovaně použitelné médium." + +#: pretix/base/services/media.py:195 pretix/base/services/media.py:197 +msgid "Product does not support medium exchange." +msgstr "" + #: pretix/base/services/memberships.py:108 #, python-brace-format msgid "" @@ -10066,46 +10252,59 @@ msgstr "" "stejnou e-mailovou adresou, i když zákazník nebyl během nákupu přihlášen." #: pretix/base/settings.py:214 -msgid "Activate re-usable media" -msgstr "" +#, fuzzy +#| msgid "Can manage reusable media" +msgid "Activate reusable media" +msgstr "Umí zacházet s opakovaně použitelnými médii" #: pretix/base/settings.py:215 msgid "" -"The re-usable media feature allows you to connect tickets and gift cards " -"with physical media such as wristbands or chip cards that may be re-used for " +"The reusable media feature allows you to connect tickets and gift cards with " +"physical media such as wristbands or chip cards that may be reused for " "different tickets or gift cards later." msgstr "" -#: pretix/base/settings.py:241 +#: pretix/base/settings.py:226 +msgid "Enforce the usage of issued reusable media for check-in" +msgstr "" + +#: pretix/base/settings.py:227 +msgid "" +"If enabled, a ticket barcode will not be accepted anymore, if a reusable " +"medium has been created and linked to a ticket. Keeping this option turned " +"off will treat the reusable medium and ticket as equals." +msgstr "" + +#: pretix/base/settings.py:254 msgid "Length of barcodes" msgstr "Délka čárových kódů" -#: pretix/base/settings.py:270 +#: pretix/base/settings.py:283 msgid "" "Automatically create a new gift card if a previously unknown chip is seen" msgstr "" -#: pretix/base/settings.py:283 pretix/base/settings.py:314 +#: pretix/base/settings.py:296 pretix/base/settings.py:327 msgid "Gift card currency" msgstr "Měna dárkové karty" -#: pretix/base/settings.py:301 +#: pretix/base/settings.py:314 msgid "Automatically create a new gift card if a new chip is encoded" msgstr "" -#: pretix/base/settings.py:323 +#: pretix/base/settings.py:336 msgid "Use UID protection feature of NFC chip" msgstr "" -#: pretix/base/settings.py:339 +#: pretix/base/settings.py:352 msgid "Maximum number of items per order" msgstr "Maximální počet položek na jednu objednávku" -#: pretix/base/settings.py:340 +#: pretix/base/settings.py:353 msgid "Add-on products will not be counted." msgstr "Doplňkové produkty se nezapočítávají." -#: pretix/base/settings.py:350 +#: pretix/base/settings.py:363 #, fuzzy #| msgid "" #| "Show net prices instead of gross prices in the product list (not " @@ -10114,7 +10313,7 @@ msgid "Show net prices instead of gross prices in the product list" msgstr "" "Zobrazení čistých cen místo hrubých cen v seznamu produktů (nedoporučuje se!)" -#: pretix/base/settings.py:351 +#: pretix/base/settings.py:364 msgid "" "Independent of your choice, the cart will show gross prices as this is the " "price that needs to be paid." @@ -10122,11 +10321,11 @@ msgstr "" "Nezávisle na vaší volbě se v košíku zobrazí hrubé ceny, protože to je cena, " "kterou je třeba zaplatit." -#: pretix/base/settings.py:362 +#: pretix/base/settings.py:375 msgid "Hide prices on attendee ticket page" msgstr "Skrýt ceny na stránce vstupenek pro účastníky" -#: pretix/base/settings.py:363 +#: pretix/base/settings.py:376 msgid "" "If a person buys multiple tickets and you send emails to all of the " "attendees, with this option the ticket price will not be shown on the ticket " @@ -10137,27 +10336,27 @@ msgstr "" "nebude se při této možnosti cena vstupenky zobrazovat na stránce vstupenek " "jednotlivých účastníků. Kupující vstupenky cenu samozřejmě uvidí." -#: pretix/base/settings.py:381 +#: pretix/base/settings.py:394 msgid "Ask for attendee names" msgstr "Zeptejte se na jména účastníků" -#: pretix/base/settings.py:382 +#: pretix/base/settings.py:395 msgid "Ask for a name for all personalized tickets." msgstr "U všech personalizovaných vstupenek si vyžádejte jméno." -#: pretix/base/settings.py:391 +#: pretix/base/settings.py:404 msgid "Require attendee names" msgstr "Požadovat jména účastníků" -#: pretix/base/settings.py:392 +#: pretix/base/settings.py:405 msgid "Require customers to fill in the names of all attendees." msgstr "Požadujte, aby zákazníci vyplnili jména všech účastníků." -#: pretix/base/settings.py:402 +#: pretix/base/settings.py:415 msgid "Ask for email addresses per ticket" msgstr "Požádejte o e-mailové adresy na lístek" -#: pretix/base/settings.py:403 +#: pretix/base/settings.py:416 msgid "" "Normally, pretix asks for one email address per order and the order " "confirmation will be sent only to that email address. If you enable this " @@ -10177,11 +10376,11 @@ msgstr "" "pouze na jednu primární e-mailovou adresu, nikoli na adresy jednotlivých " "účastníků. Tuto možnost však můžete povolit v nastavení e-mailu." -#: pretix/base/settings.py:417 +#: pretix/base/settings.py:430 msgid "Require email addresses per ticket" msgstr "Vyžadovat e-mailové adresy na lístek" -#: pretix/base/settings.py:418 +#: pretix/base/settings.py:431 msgid "" "Require customers to fill in individual email addresses for all personalized " "tickets. See the above option for more details. One email address for the " @@ -10192,73 +10391,73 @@ msgstr "" "uvedené možnosti. Bez ohledu na toto nastavení bude vždy vyžadována jedna e-" "mailová adresa pro potvrzení objednávky." -#: pretix/base/settings.py:430 +#: pretix/base/settings.py:443 msgid "Ask for company per ticket" msgstr "Zadejte název společnosti na lístek" -#: pretix/base/settings.py:439 +#: pretix/base/settings.py:452 msgid "Require company per ticket" msgstr "Požadavek na název firmy na lístku" -#: pretix/base/settings.py:449 +#: pretix/base/settings.py:462 msgid "Ask for postal addresses per ticket" msgstr "Zaznamenejte poštovní adresu na lístek" -#: pretix/base/settings.py:458 +#: pretix/base/settings.py:471 msgid "Require postal addresses per ticket" msgstr "Vyžadujte poštovní adresu na lístek" -#: pretix/base/settings.py:468 +#: pretix/base/settings.py:481 msgid "Ask for the order email address twice" msgstr "Dvakrát se dotázat na e-mailové adresy" -#: pretix/base/settings.py:469 +#: pretix/base/settings.py:482 msgid "" "Require customers to fill in the primary email address twice to avoid errors." msgstr "" "Požadujte, aby zákazníci vyplnili primární e-mailovou adresu dvakrát, abyste " "předešli chybám." -#: pretix/base/settings.py:478 +#: pretix/base/settings.py:491 msgid "Ask for a phone number per order" msgstr "Dotaz na telefonní číslo na objednávku" -#: pretix/base/settings.py:487 +#: pretix/base/settings.py:500 msgid "Require a phone number per order" msgstr "Vyžadovat telefonní číslo na objednávku" -#: pretix/base/settings.py:498 +#: pretix/base/settings.py:511 msgid "Rounding of taxes" msgstr "" -#: pretix/base/settings.py:502 +#: pretix/base/settings.py:515 msgid "" "Note that if you transfer your sales data from pretix to an external system " "for tax reporting, you need to make sure to account for possible rounding " "differences if your external system rounds differently than pretix." msgstr "" -#: pretix/base/settings.py:518 +#: pretix/base/settings.py:531 msgid "Ask for invoice address" msgstr "Dotaz na fakturační adresu" -#: pretix/base/settings.py:528 +#: pretix/base/settings.py:541 msgid "Do not ask for invoice address if an order is free" msgstr "U bezplatných objednávek nepožadujte fakturační adresu" -#: pretix/base/settings.py:538 +#: pretix/base/settings.py:551 msgid "Require customer name" msgstr "Vyžadujte jméno zadavatele" -#: pretix/base/settings.py:548 +#: pretix/base/settings.py:561 msgid "Show attendee names on invoices" msgstr "Zobrazení jména účastníka na fakturách" -#: pretix/base/settings.py:558 +#: pretix/base/settings.py:571 msgid "Show event location on invoices" msgstr "Zobrazení místa konání na fakturách" -#: pretix/base/settings.py:559 +#: pretix/base/settings.py:572 msgid "" "The event location will be shown below the list of products if it is the " "same for all lines. It will be shown on every line if there are different " @@ -10267,16 +10466,16 @@ msgstr "" "Místo konání akce se zobrazí pod seznamem produktů, pokud je pro všechny " "řádky stejné. Pokud se místa konání liší, zobrazí se na každém řádku." -#: pretix/base/settings.py:570 +#: pretix/base/settings.py:583 msgid "Show exchange rates" msgstr "Zobrazit směnné kurzy" -#: pretix/base/settings.py:573 pretix/base/settings.py:582 +#: pretix/base/settings.py:586 pretix/base/settings.py:595 #: pretix/control/forms/item.py:684 msgid "Never" msgstr "Nikdy" -#: pretix/base/settings.py:574 pretix/base/settings.py:583 +#: pretix/base/settings.py:587 pretix/base/settings.py:596 msgid "" "Based on European Central Bank daily rates, whenever the invoice recipient " "is in an EU country that uses a different currency." @@ -10284,7 +10483,7 @@ msgstr "" "Na základě denních kurzů Evropské centrální banky, kdykoli se příjemce " "faktury nachází v zemi EU, která používá jinou měnu." -#: pretix/base/settings.py:576 pretix/base/settings.py:585 +#: pretix/base/settings.py:589 pretix/base/settings.py:598 msgid "" "Based on Czech National Bank daily rates, whenever the invoice amount is not " "in CZK." @@ -10292,7 +10491,7 @@ msgstr "" "Na základě denního kurzu České národní banky, kdykoli není fakturovaná " "částka v Kč." -#: pretix/base/settings.py:577 pretix/base/settings.py:586 +#: pretix/base/settings.py:590 pretix/base/settings.py:599 #, fuzzy #| msgid "" #| "Based on Czech National Bank daily rates, whenever the invoice amount is " @@ -10304,29 +10503,29 @@ msgstr "" "Na základě denního kurzu České národní banky, kdykoli není fakturovaná " "částka v Kč." -#: pretix/base/settings.py:597 +#: pretix/base/settings.py:610 msgid "Require invoice address" msgstr "Vyžaduje se fakturační adresa" -#: pretix/base/settings.py:608 +#: pretix/base/settings.py:621 #, fuzzy msgid "Require a business address" msgstr "Požadavek na obchodní adresy" -#: pretix/base/settings.py:609 +#: pretix/base/settings.py:622 msgid "This will require users to enter a company name." msgstr "Uživatelé budou muset zadat název firmy." -#: pretix/base/settings.py:620 +#: pretix/base/settings.py:633 msgid "Ask for beneficiary" msgstr "Požádejte o příjemce" -#: pretix/base/settings.py:631 +#: pretix/base/settings.py:644 #, fuzzy msgid "Custom recipient field label" msgstr "Dodatečné pole přijímače" -#: pretix/base/settings.py:633 +#: pretix/base/settings.py:646 msgid "" "If you want to add a custom text field, e.g. for a country-specific " "registration number, to your invoice address form, please fill in the label " @@ -10340,23 +10539,23 @@ msgstr "" "hodnoty na faktuře. Bude zobrazen na faktuře pod nadpisem. Pole nebude " "povinné." -#: pretix/base/settings.py:647 +#: pretix/base/settings.py:660 #, fuzzy msgid "Custom recipient field help text" msgstr "Dodatečné pole přijímače" -#: pretix/base/settings.py:649 +#: pretix/base/settings.py:662 msgid "" "If you use the custom recipient field, you can specify a help text which " "will be displayed underneath the field. It will not be displayed on the " "invoice." msgstr "" -#: pretix/base/settings.py:660 +#: pretix/base/settings.py:673 msgid "Ask for VAT ID" msgstr "Požádejte o DIČ" -#: pretix/base/settings.py:662 +#: pretix/base/settings.py:675 #, fuzzy, python-brace-format #| msgid "" #| "Only works if an invoice address is asked for. VAT ID is never required " @@ -10370,33 +10569,33 @@ msgstr "" "vyžadováno a je vyžadováno pouze od firemních zákazníků v následujících " "zemích: {countries}" -#: pretix/base/settings.py:682 +#: pretix/base/settings.py:695 #, fuzzy #| msgid "Require name" msgid "Require VAT ID in" msgstr "Vyžadovat jméno" -#: pretix/base/settings.py:688 +#: pretix/base/settings.py:701 msgid "" "VAT ID is optional by default, because not all businesses are assigned a VAT " "ID in all countries. VAT ID will be required for all business addresses in " "the selected countries." msgstr "" -#: pretix/base/settings.py:704 +#: pretix/base/settings.py:717 msgid "Invoice address explanation" msgstr "Vysvětlivky k fakturační adrese" -#: pretix/base/settings.py:707 +#: pretix/base/settings.py:720 msgid "This text will be shown above the invoice address form during checkout." msgstr "" "Tento text se zobrazí nad formulářem pro fakturační adresu během objednávky." -#: pretix/base/settings.py:717 +#: pretix/base/settings.py:730 msgid "Show paid amount on partially paid invoices" msgstr "Zobrazení uhrazené částky na částečně uhrazených fakturách" -#: pretix/base/settings.py:718 +#: pretix/base/settings.py:731 msgid "" "If an invoice has already been paid partially, this option will add the paid " "and pending amount to the invoice." @@ -10404,11 +10603,11 @@ msgstr "" "Pokud již byla faktura částečně uhrazena, přidá tato možnost k faktuře " "uhrazenou a čekající částku." -#: pretix/base/settings.py:729 +#: pretix/base/settings.py:742 msgid "Show free products on invoices" msgstr "Zobrazení bezplatných produktů na fakturách" -#: pretix/base/settings.py:730 +#: pretix/base/settings.py:743 msgid "" "Note that invoices will never be generated for orders that contain only free " "products." @@ -10416,11 +10615,11 @@ msgstr "" "Pamatujte, že faktury nebudou generovány pro objednávky, které obsahují " "pouze bezplatné produkty." -#: pretix/base/settings.py:741 +#: pretix/base/settings.py:754 msgid "Show expiration date of order" msgstr "Zobrazit datum vypršení platnosti objednávky" -#: pretix/base/settings.py:742 +#: pretix/base/settings.py:755 msgid "" "The expiration date will not be shown if the invoice is generated after the " "order is paid." @@ -10428,11 +10627,11 @@ msgstr "" "Datum vypršení platnosti se nezobrazí, pokud je faktura vygenerována až po " "zaplacení objednávky." -#: pretix/base/settings.py:753 +#: pretix/base/settings.py:766 msgid "Minimum length of invoice number after prefix" msgstr "Minimální délka čísla faktury po předčíslí" -#: pretix/base/settings.py:754 +#: pretix/base/settings.py:767 msgid "" "The part of your invoice number after your prefix will be filled up with " "leading zeros up to this length, e.g. INV-001 or INV-00001." @@ -10440,19 +10639,19 @@ msgstr "" "Část čísla faktury za předčíslím bude doplněna počátečními nulami až do této " "délky, např. INV-001 nebo INV-00001." -#: pretix/base/settings.py:767 +#: pretix/base/settings.py:780 msgid "Generate invoices with consecutive numbers" msgstr "Generování faktur s pořadovými čísly" -#: pretix/base/settings.py:768 +#: pretix/base/settings.py:781 msgid "If deactivated, the order code will be used in the invoice number." msgstr "V případě deaktivace se v čísle faktury použije kód objednávky." -#: pretix/base/settings.py:778 +#: pretix/base/settings.py:791 msgid "Invoice number prefix" msgstr "Předčíslí faktury" -#: pretix/base/settings.py:779 +#: pretix/base/settings.py:792 msgid "" "This will be prepended to invoice numbers. If you leave this field empty, " "your event slug will be used followed by a dash. Attention: If multiple " @@ -10470,16 +10669,16 @@ msgstr "" "budoucí faktury. Pro vložení roku vystavení faktury můžete použít %Y (se " "stoletími) %y (bez století) nebo %m a %d pro den v měsíci." -#: pretix/base/settings.py:791 pretix/base/settings.py:815 +#: pretix/base/settings.py:804 pretix/base/settings.py:828 #, python-brace-format msgid "Please only use the characters {allowed} in this field." msgstr "V tomto poli používejte pouze znaky {allowed}." -#: pretix/base/settings.py:806 +#: pretix/base/settings.py:819 msgid "Invoice number prefix for cancellations" msgstr "Předčíslí faktury pro storno" -#: pretix/base/settings.py:807 +#: pretix/base/settings.py:820 msgid "" "This will be prepended to invoice numbers of cancellations. If you leave " "this field empty, the same numbering scheme will be used that you configured " @@ -10489,44 +10688,44 @@ msgstr "" "pole necháte prázdné, bude použito stejné schéma číslování, jaké jste " "nastavili pro běžné faktury." -#: pretix/base/settings.py:830 +#: pretix/base/settings.py:843 msgid "Highlight order code to make it stand out visibly" msgstr "" -#: pretix/base/settings.py:831 pretix/base/settings.py:843 +#: pretix/base/settings.py:844 pretix/base/settings.py:856 msgid "Only respected by some invoice renderers." msgstr "Respektují je pouze některé vykreslovače faktur." -#: pretix/base/settings.py:842 pretix/base/settings.py:3176 -#: pretix/control/templates/pretixcontrol/pdf/index.html:441 +#: pretix/base/settings.py:855 pretix/base/settings.py:3189 +#: pretix/control/templates/pretixcontrol/pdf/index.html:439 msgid "Font" msgstr "Písmo" -#: pretix/base/settings.py:869 +#: pretix/base/settings.py:882 msgid "Length of ticket codes" msgstr "Délka kódů vstupenek" -#: pretix/base/settings.py:896 +#: pretix/base/settings.py:909 msgid "Reservation period" msgstr "Doba rezervace" -#: pretix/base/settings.py:898 +#: pretix/base/settings.py:911 msgid "" "The number of minutes the items in a user's cart are reserved for this user." msgstr "" "Počet minut, po které jsou položky v košíku uživatele rezervovány pro tohoto " "uživatele." -#: pretix/base/settings.py:907 +#: pretix/base/settings.py:920 msgid "" "Directly redirect to check-out after a product has been added to the cart." msgstr "Přímé přesměrování na check-out po přidání produktu do košíku." -#: pretix/base/settings.py:916 +#: pretix/base/settings.py:929 msgid "End of presale text" msgstr "Text pro ukončení předprodeje" -#: pretix/base/settings.py:919 +#: pretix/base/settings.py:932 msgid "" "This text will be shown above the ticket shop once the designated sales " "timeframe for this event is over. You can use it to describe other options " @@ -10536,11 +10735,11 @@ msgstr "" "prodeje pro tuto akci. Můžete jej použít k popisu dalších možností, jak " "získat vstupenku, například na pokladně." -#: pretix/base/settings.py:934 +#: pretix/base/settings.py:947 msgid "Guidance text" msgstr "Nápověda" -#: pretix/base/settings.py:935 +#: pretix/base/settings.py:948 msgid "" "This text will be shown above the payment options. You can explain the " "choices to the user here, if you want." @@ -10548,19 +10747,19 @@ msgstr "" "Tento text se zobrazí nad možnostmi platby. Pokud chcete, můžete zde " "uživateli vysvětlit možnosti volby." -#: pretix/base/settings.py:946 pretix/base/settings.py:956 +#: pretix/base/settings.py:959 pretix/base/settings.py:969 msgid "in days" msgstr "ve dnech" -#: pretix/base/settings.py:947 pretix/base/settings.py:957 +#: pretix/base/settings.py:960 pretix/base/settings.py:970 msgid "in minutes" msgstr "v minutách" -#: pretix/base/settings.py:952 +#: pretix/base/settings.py:965 msgid "Set payment term" msgstr "Nastavení termínu splatnosti" -#: pretix/base/settings.py:959 +#: pretix/base/settings.py:972 msgid "" "If using days, the order will expire at the end of the last day. Using " "minutes is more exact, but should only be used for real-time payment methods." @@ -10569,11 +10768,11 @@ msgstr "" "Použití minut je přesnější, ale mělo by být použito pouze pro způsoby platby " "v reálném čase." -#: pretix/base/settings.py:970 +#: pretix/base/settings.py:983 msgid "Payment term in days" msgstr "Doba splatnosti ve dnech" -#: pretix/base/settings.py:977 +#: pretix/base/settings.py:990 msgid "" "The number of days after placing an order the user has to pay to preserve " "their reservation. If you use slow payment methods like bank transfer, we " @@ -10586,11 +10785,11 @@ msgstr "" "reálném čase, doporučujeme ještě nastavit dva nebo tři dny, aby mohli lidé " "neúspěšné platby zopakovat." -#: pretix/base/settings.py:996 +#: pretix/base/settings.py:1009 msgid "Only end payment terms on weekdays" msgstr "Platební termín pouze v pracovní dny" -#: pretix/base/settings.py:997 +#: pretix/base/settings.py:1010 msgid "" "If this is activated and the payment term of any order ends on a Saturday or " "Sunday, it will be moved to the next Monday instead. This is required in " @@ -10602,11 +10801,11 @@ msgstr "" "zemích je to vyžadováno občanským právem. Na níže nakonfigurované poslední " "datum plateb to nebude mít vliv." -#: pretix/base/settings.py:1014 +#: pretix/base/settings.py:1027 msgid "Payment term in minutes" msgstr "Platební lhůta v minutách" -#: pretix/base/settings.py:1015 +#: pretix/base/settings.py:1028 msgid "" "The number of minutes after placing an order the user has to pay to preserve " "their reservation. Only use this if you exclusively offer real-time payment " @@ -10619,11 +10818,11 @@ msgstr "" "důvodů může být skutečný časový rámec o několik minut delší, než bude " "objednávka označena jako prošlá." -#: pretix/base/settings.py:1039 +#: pretix/base/settings.py:1052 msgid "Last date of payments" msgstr "Poslední datum platby" -#: pretix/base/settings.py:1040 +#: pretix/base/settings.py:1053 msgid "" "The last date any payments are accepted. This has precedence over the terms " "configured above. If you use the event series feature and an order contains " @@ -10633,11 +10832,11 @@ msgstr "" "výše uvedenými podmínkami. Pokud používáte funkci série akcí a objednávka " "obsahuje vstupenky na více termínů, použije se nejstarší datum." -#: pretix/base/settings.py:1052 +#: pretix/base/settings.py:1065 msgid "Automatically expire unpaid orders" msgstr "Automatické vypršení platnosti nezaplacených objednávek" -#: pretix/base/settings.py:1053 +#: pretix/base/settings.py:1066 msgid "" "If checked, all unpaid orders will automatically go from 'pending' to " "'expired' after the end of their payment deadline. This means that those " @@ -10647,11 +10846,11 @@ msgstr "" "zaplacení automaticky změní z \"čekající\" na \"prošlé\". To znamená, že se " "tyto vstupenky vrátí do fondu a mohou si je objednat další zájemci." -#: pretix/base/settings.py:1065 +#: pretix/base/settings.py:1078 msgid "Expiration delay" msgstr "Zpoždění vypršení platnosti" -#: pretix/base/settings.py:1066 +#: pretix/base/settings.py:1079 msgid "" "The order will only actually expire this many days after the expiration date " "communicated to the customer. If you select \"Only end payment terms on " @@ -10660,11 +10859,11 @@ msgid "" "enforced." msgstr "" -#: pretix/base/settings.py:1088 +#: pretix/base/settings.py:1101 msgid "Hide \"payment pending\" state on customer-facing pages" msgstr "Skrytí stavu \"čeká na platbu\" na stránkách pro zákazníky" -#: pretix/base/settings.py:1089 +#: pretix/base/settings.py:1102 msgid "" "The payment instructions panel will still be shown to the primary customer, " "but no indication of missing payment will be visible on the ticket pages of " @@ -10674,7 +10873,7 @@ msgstr "" "stránkách vstupenek účastníků, kteří si vstupenku sami nezakoupili, se " "nezobrazí žádný údaj o chybějící platbě." -#: pretix/base/settings.py:1107 +#: pretix/base/settings.py:1120 msgid "" "If you have a gift card, please enter the gift card code here. If the gift " "card does not have enough credit to pay for the full order, you will be " @@ -10686,11 +10885,11 @@ msgstr "" "znovu a vy můžete buď uplatnit jinou dárkovou kartu, nebo zvolit jiný způsob " "platby rozdílu." -#: pretix/base/settings.py:1126 +#: pretix/base/settings.py:1139 msgid "Accept late payments" msgstr "Přijímat opožděné platby" -#: pretix/base/settings.py:1127 +#: pretix/base/settings.py:1140 msgid "" "Accept payments for orders even when they are in 'expired' state as long as " "enough capacity is available. No payments will ever be accepted after the " @@ -10700,116 +10899,116 @@ msgstr "" "dispozici dostatečná kapacita. Žádné platby nebudou nikdy přijímány po výše " "nastaveném \"Posledním datu plateb\"." -#: pretix/base/settings.py:1138 +#: pretix/base/settings.py:1151 msgid "Show start date" msgstr "Zobrazit začátek předprodejního období" -#: pretix/base/settings.py:1139 +#: pretix/base/settings.py:1152 msgid "Show the presale start date before presale has started." msgstr "Zobrazení data zahájení předprodeje před zahájením předprodeje." -#: pretix/base/settings.py:1150 pretix/base/settings.py:1159 -#: pretix/base/settings.py:1173 pretix/base/settings.py:1182 +#: pretix/base/settings.py:1163 pretix/base/settings.py:1172 +#: pretix/base/settings.py:1186 pretix/base/settings.py:1195 #, fuzzy #| msgid "Default price" msgid "Use default tax rate" msgstr "Výchozí cena" -#: pretix/base/settings.py:1151 pretix/base/settings.py:1160 -#: pretix/base/settings.py:1171 pretix/base/settings.py:1180 +#: pretix/base/settings.py:1164 pretix/base/settings.py:1173 +#: pretix/base/settings.py:1184 pretix/base/settings.py:1193 msgid "Charge no taxes" msgstr "" -#: pretix/base/settings.py:1156 +#: pretix/base/settings.py:1169 #, fuzzy #| msgid "Tax rule for payment fees" msgid "Tax handling on payment fees" msgstr "Daňové pravidlo pro poplatky za platby" -#: pretix/base/settings.py:1172 pretix/base/settings.py:1181 +#: pretix/base/settings.py:1185 pretix/base/settings.py:1194 msgid "Use same taxes as order positions (split according to net prices)" msgstr "" -#: pretix/base/settings.py:1177 +#: pretix/base/settings.py:1190 #, fuzzy #| msgid "Charge a fixed cancellation fee" msgid "Tax handling on cancellation fees" msgstr "Účtovat pevný storno poplatek" -#: pretix/base/settings.py:1193 pretix/base/settings.py:1206 +#: pretix/base/settings.py:1206 pretix/base/settings.py:1219 msgid "Do not generate invoices" msgstr "Nevytvářet faktury" -#: pretix/base/settings.py:1194 pretix/base/settings.py:1211 +#: pretix/base/settings.py:1207 pretix/base/settings.py:1224 msgid "Only manually in admin panel" msgstr "Pouze ručně v panelu administrátora" -#: pretix/base/settings.py:1195 pretix/base/settings.py:1209 +#: pretix/base/settings.py:1208 pretix/base/settings.py:1222 msgid "Automatically on user request" msgstr "Automaticky na základě požadavku uživatele" -#: pretix/base/settings.py:1196 pretix/base/settings.py:1210 +#: pretix/base/settings.py:1209 pretix/base/settings.py:1223 #, fuzzy #| msgid "Automatically on user request" msgid "Automatically on user request for paid orders" msgstr "Automaticky na základě požadavku uživatele" -#: pretix/base/settings.py:1197 +#: pretix/base/settings.py:1210 msgid "Automatically for all created orders" msgstr "Automaticky pro všechny nové objednávky" -#: pretix/base/settings.py:1198 +#: pretix/base/settings.py:1211 msgid "Automatically on payment or when required by payment method" msgstr "Automaticky při platbě nebo když to vyžaduje způsob platby" -#: pretix/base/settings.py:1203 +#: pretix/base/settings.py:1216 msgid "Generate invoices" msgstr "Vystavit faktury" -#: pretix/base/settings.py:1207 +#: pretix/base/settings.py:1220 msgid "Automatically after payment or when required by payment method" msgstr "Automaticky po platbě nebo když to vyžaduje způsob platby" -#: pretix/base/settings.py:1208 +#: pretix/base/settings.py:1221 msgid "Automatically before payment for all created orders" msgstr "Automaticky před zaplacením všech vytvořených objednávek" -#: pretix/base/settings.py:1213 +#: pretix/base/settings.py:1226 msgid "Invoices will never be automatically generated for free orders." msgstr "U bezplatných objednávek se nikdy automaticky negenerují faktury." -#: pretix/base/settings.py:1223 pretix/base/settings.py:1235 +#: pretix/base/settings.py:1236 pretix/base/settings.py:1248 msgid "" "Automatic based on ticket-specific validity, membership validity, event " "series date, or event date" msgstr "" -#: pretix/base/settings.py:1224 pretix/base/settings.py:1236 +#: pretix/base/settings.py:1237 pretix/base/settings.py:1249 msgid "Automatic, but prefer invoice date over event date" msgstr "" -#: pretix/base/settings.py:1227 pretix/base/settings.py:1239 +#: pretix/base/settings.py:1240 pretix/base/settings.py:1252 msgid "Invoice date" msgstr "Datum vystavení" -#: pretix/base/settings.py:1232 +#: pretix/base/settings.py:1245 #, fuzzy #| msgctxt "subevent" #| msgid "Date ordering" msgid "Date of service" msgstr "Řazení termínů" -#: pretix/base/settings.py:1241 +#: pretix/base/settings.py:1254 msgid "" "This controls what dates are shown on the invoice, but is especially " "important for electronic invoicing." msgstr "" -#: pretix/base/settings.py:1253 +#: pretix/base/settings.py:1266 msgid "Automatically cancel and reissue invoice on address changes" msgstr "Automatické zrušení a nové vystavení faktury při změně adresy" -#: pretix/base/settings.py:1254 +#: pretix/base/settings.py:1267 msgid "" "If customers change their invoice address on an existing order, the invoice " "will automatically be canceled and a new invoice will be issued. This " @@ -10819,11 +11018,11 @@ msgstr "" "se automaticky zruší a vystaví se nová. Toto nastavení nemá vliv na změny " "provedené prostřednictvím backendu." -#: pretix/base/settings.py:1266 +#: pretix/base/settings.py:1279 msgid "Allow to update existing invoices" msgstr "Umožnit aktualizaci stávajících faktur" -#: pretix/base/settings.py:1267 +#: pretix/base/settings.py:1280 msgid "" "By default, invoices can never again be changed once they are issued. In " "most countries, we recommend to leave this option turned off and always " @@ -10833,45 +11032,45 @@ msgstr "" "většině zemí doporučujeme nechat tuto možnost vypnutou a v případě potřeby " "změny vždy vystavit novou fakturu." -#: pretix/base/settings.py:1283 +#: pretix/base/settings.py:1296 #, fuzzy #| msgid "Restrict to business customers" msgid "Only issue invoices to business customers" msgstr "Omezit na obchodní zákazníky" -#: pretix/base/settings.py:1293 +#: pretix/base/settings.py:1306 msgid "Address line" msgstr "Řádek adresy" -#: pretix/base/settings.py:1297 +#: pretix/base/settings.py:1310 msgid "Albert Einstein Road 52" msgstr "ulice Alberta-Einstein 52" -#: pretix/base/settings.py:1377 +#: pretix/base/settings.py:1390 msgid "Domestic tax ID" msgstr "Lokální identifikační číslo" -#: pretix/base/settings.py:1378 +#: pretix/base/settings.py:1391 msgid "e.g. tax number in Germany, ABN in Australia, …" msgstr "např. IČO v Česku, daňové číslo v Německu, číslo ABN v Austrálii, …" -#: pretix/base/settings.py:1389 +#: pretix/base/settings.py:1402 msgid "EU VAT ID" msgstr "DIČ EU pro DPH" -#: pretix/base/settings.py:1404 +#: pretix/base/settings.py:1417 msgid "e.g. With this document, we sent you the invoice for your ticket order." msgstr "Např. s tímto dokladem obdržíte fakturu za objednávku lístku." -#: pretix/base/settings.py:1407 +#: pretix/base/settings.py:1420 msgid "Introductory text" msgstr "Úvodní text" -#: pretix/base/settings.py:1408 +#: pretix/base/settings.py:1421 msgid "Will be printed on every invoice above the invoice rows." msgstr "Tiskne se nad položkami faktury na každé faktuře." -#: pretix/base/settings.py:1422 +#: pretix/base/settings.py:1435 msgid "" "e.g. Thank you for your purchase! You can find more information on the event " "at ..." @@ -10879,36 +11078,36 @@ msgstr "" "Např. Děkujeme vám za zakoupení vstupenky! Další informace o akci najdete " "na ..." -#: pretix/base/settings.py:1425 +#: pretix/base/settings.py:1438 msgid "Additional text" msgstr "Doplňkový text" -#: pretix/base/settings.py:1426 +#: pretix/base/settings.py:1439 msgid "Will be printed on every invoice below the invoice total." msgstr "Bude vytištěno na každé faktuře pod celkovou částkou faktury." -#: pretix/base/settings.py:1440 +#: pretix/base/settings.py:1453 msgid "" "e.g. your bank details, legal details like your VAT ID, registration " "numbers, etc." msgstr "" "např. Vaše bankovní spojení a právní údaje, jako DIČ, registrační čísla apod." -#: pretix/base/settings.py:1443 +#: pretix/base/settings.py:1456 msgid "Footer" msgstr "Zápatí" -#: pretix/base/settings.py:1444 +#: pretix/base/settings.py:1457 msgid "" "Will be printed centered and in a smaller font at the end of every invoice " "page." msgstr "Tištěno menším písmem vycentrovaně na spodní části každé stránky." -#: pretix/base/settings.py:1459 +#: pretix/base/settings.py:1472 msgid "Attach invoices to emails" msgstr "Faktury připojit k mailu" -#: pretix/base/settings.py:1460 +#: pretix/base/settings.py:1473 msgid "" "If invoices are automatically generated for all orders, they will be " "attached to the order confirmation mail. If they are automatically generated " @@ -10920,11 +11119,11 @@ msgstr "" "platbě, budou přiloženy k e-mailu s potvrzením platby. Pokud nejsou " "generovány automaticky, nebudou k e-mailům přiloženy." -#: pretix/base/settings.py:1473 +#: pretix/base/settings.py:1486 msgid "Email address to receive a copy of each invoice" msgstr "E-mailová adresa pro zasílání kopie každé faktury" -#: pretix/base/settings.py:1474 +#: pretix/base/settings.py:1487 msgid "" "Each newly created invoice will be sent to this email address shortly after " "creation. You can use this for an automated import of invoices to your " @@ -10934,29 +11133,29 @@ msgstr "" "mailovou adresu. Tuto adresu můžete použít pro automatický import faktur do " "účetního systému. Faktura bude jedinou přílohou e-mailu." -#: pretix/base/settings.py:1489 +#: pretix/base/settings.py:1502 msgid "Show items outside presale period" msgstr "Zobrazit produkty mimo předprodejní období" -#: pretix/base/settings.py:1490 +#: pretix/base/settings.py:1503 msgid "" "Show item details before presale has started and after presale has ended" msgstr "" "Zobrazit detaily o produktu před začátkem předprodeje a po jeho skončení" -#: pretix/base/settings.py:1510 +#: pretix/base/settings.py:1523 msgid "Available languages" msgstr "Jazyky, které jsou k dispozici" -#: pretix/base/settings.py:1526 pretix/control/forms/event.py:151 +#: pretix/base/settings.py:1539 pretix/control/forms/event.py:151 msgid "Default language" msgstr "Standardní jazyk" -#: pretix/base/settings.py:1536 +#: pretix/base/settings.py:1549 msgid "Region" msgstr "Region" -#: pretix/base/settings.py:1537 +#: pretix/base/settings.py:1550 msgid "" "Will be used to determine date and time formatting as well as default " "country for customer addresses and phone numbers. For formatting, this takes " @@ -10968,11 +11167,11 @@ msgstr "" "proto je relevantní hlavně pro jazyky používané v různých regionech po celém " "světě (například angličtina)." -#: pretix/base/settings.py:1549 +#: pretix/base/settings.py:1562 msgid "This shop represents an event" msgstr "" -#: pretix/base/settings.py:1551 +#: pretix/base/settings.py:1564 msgid "" "Uncheck this box if you are only selling something that has no specific " "date, such as gift cards or a ticket that can be used any time. The system " @@ -10981,46 +11180,46 @@ msgid "" "may still show up in other places." msgstr "" -#: pretix/base/settings.py:1564 +#: pretix/base/settings.py:1577 msgid "Show event end date" msgstr "Zobrazit konec akce" -#: pretix/base/settings.py:1565 +#: pretix/base/settings.py:1578 msgid "If disabled, only event's start date will be displayed to the public." msgstr "Pokud je vypnuto, zobrazí se veřejnosti pouze datum začátku akce." -#: pretix/base/settings.py:1574 +#: pretix/base/settings.py:1587 msgid "Show dates with time" msgstr "Zobrazit datumy s časem" -#: pretix/base/settings.py:1575 +#: pretix/base/settings.py:1588 msgid "" "If disabled, the event's start and end date will be displayed without the " "time of day." msgstr "" "Pokud je vypnuto, zobrazí se datum začátku a konce akce bez denního času." -#: pretix/base/settings.py:1584 +#: pretix/base/settings.py:1597 msgid "Hide all products that are sold out" msgstr "Skrýt všechny vyprodané produkty" -#: pretix/base/settings.py:1594 pretix/control/forms/event.py:1870 +#: pretix/base/settings.py:1607 pretix/control/forms/event.py:1870 msgid "Publicly show how many tickets of a certain type are still available." msgstr "Veřejně zobrazit, kolik vstupenek určitého typu je ještě k dispozici." -#: pretix/base/settings.py:1603 +#: pretix/base/settings.py:1616 msgid "Ask search engines not to index the ticket shop" msgstr "Prodejna vstupenek nemá být indexována vyhledávači" -#: pretix/base/settings.py:1612 +#: pretix/base/settings.py:1625 msgid "Show variations of a product expanded by default" msgstr "Zobrazení rozložených variant produktu ve výchozím nastavení" -#: pretix/base/settings.py:1621 +#: pretix/base/settings.py:1634 msgid "Enable waiting list" msgstr "Aktivovat čekací listinu" -#: pretix/base/settings.py:1622 pretix/control/forms/event.py:1875 +#: pretix/base/settings.py:1635 pretix/control/forms/event.py:1875 msgid "" "Once a ticket is sold out, people can add themselves to a waiting list. As " "soon as a ticket becomes available again, it will be reserved for the first " @@ -11032,11 +11231,11 @@ msgstr "" "listině a tato osoba obdrží e-mailové oznámení s poukazem, který lze použít " "k zakoupení vstupenky." -#: pretix/base/settings.py:1633 +#: pretix/base/settings.py:1646 msgid "Automatic waiting list assignments" msgstr "Automatické přiřazení na čekací listinu" -#: pretix/base/settings.py:1634 +#: pretix/base/settings.py:1647 msgid "" "If ticket capacity becomes free, automatically create a voucher and send it " "to the first person on the waiting list for that product. If this is not " @@ -11050,11 +11249,11 @@ msgstr "" "prostřednictvím ovládacího panelu. Pokud vypnete čekací listinu, ale " "ponecháte tuto možnost aktivní, budou se vstupenky odesílat i nadále." -#: pretix/base/settings.py:1650 +#: pretix/base/settings.py:1663 msgid "Waiting list response time" msgstr "Doba reakce čekací listiny" -#: pretix/base/settings.py:1653 +#: pretix/base/settings.py:1666 msgid "" "If a ticket voucher is sent to a person on the waiting list, it has to be " "redeemed within this number of hours until it expires and can be re-assigned " @@ -11064,12 +11263,12 @@ msgstr "" "uplatněna během tohoto počtu hodin, dokud nevyprší její platnost a může být " "znovu přidělena další osobě na listině." -#: pretix/base/settings.py:1664 +#: pretix/base/settings.py:1677 #, fuzzy msgid "Disable waiting list" msgstr "Aktivovat čekací listinu" -#: pretix/base/settings.py:1665 +#: pretix/base/settings.py:1678 msgid "" "The waiting list will be fully disabled after this date. This means that " "nobody can add themselves to the waiting list any more, but also that " @@ -11078,43 +11277,43 @@ msgid "" "remain active." msgstr "" -#: pretix/base/settings.py:1677 +#: pretix/base/settings.py:1690 msgid "Ask for a name" msgstr "Ptát se na jméno" -#: pretix/base/settings.py:1678 +#: pretix/base/settings.py:1691 msgid "Ask for a name when signing up to the waiting list." msgstr "Při zápisu na čekací listinu si vyžádejte jméno." -#: pretix/base/settings.py:1687 +#: pretix/base/settings.py:1700 msgid "Require name" msgstr "Vyžadovat jméno" -#: pretix/base/settings.py:1688 +#: pretix/base/settings.py:1701 msgid "Require a name when signing up to the waiting list.." msgstr "Pro zařazení do čekací listiny je nutné zadat jméno." -#: pretix/base/settings.py:1698 +#: pretix/base/settings.py:1711 msgid "Ask for a phone number" msgstr "Požádat o telefonní číslo" -#: pretix/base/settings.py:1699 +#: pretix/base/settings.py:1712 msgid "Ask for a phone number when signing up to the waiting list." msgstr "Při zápisu do čekací listiny si vyžádejte telefonní číslo." -#: pretix/base/settings.py:1708 +#: pretix/base/settings.py:1721 msgid "Require phone number" msgstr "Požadavek na telefonní číslo" -#: pretix/base/settings.py:1709 +#: pretix/base/settings.py:1722 msgid "Require a phone number when signing up to the waiting list.." msgstr "Pro zařazení do pořadníku je nutné zadat telefonní číslo." -#: pretix/base/settings.py:1719 +#: pretix/base/settings.py:1732 msgid "Phone number explanation" msgstr "Vysvětlivky k telefonnímu číslu" -#: pretix/base/settings.py:1722 +#: pretix/base/settings.py:1735 msgid "" "If you ask for a phone number, explain why you do so and what you will use " "the phone number for." @@ -11122,11 +11321,11 @@ msgstr "" "Pokud žádáte o telefonní číslo, vysvětlete, proč tak činíte a k čemu budete " "telefonní číslo používat." -#: pretix/base/settings.py:1734 +#: pretix/base/settings.py:1747 msgid "Maximum number of entries per email address for the same product" msgstr "Maximální počet záznamů na jednu e-mailovou adresu pro stejný produkt" -#: pretix/base/settings.py:1738 +#: pretix/base/settings.py:1751 msgid "" "With an increased limit, a customer may request more than one ticket for a " "specific product using the same, unique email address. However, regardless " @@ -11135,11 +11334,11 @@ msgid "" "ticket at a time." msgstr "" -#: pretix/base/settings.py:1750 +#: pretix/base/settings.py:1763 msgid "Show number of check-ins to customer" msgstr "Zobrazit počet check-inů pro zákazníka" -#: pretix/base/settings.py:1751 +#: pretix/base/settings.py:1764 msgid "" "With this option enabled, your customers will be able to see how many times " "they entered the event. This is usually not necessary, but might be useful " @@ -11154,19 +11353,19 @@ msgstr "" "viděli, kolikrát již byly použity. Odchody nebo neúspěšná skenování se " "nezapočítávají a uživatelé nevidí různé seznamy odbavení." -#: pretix/base/settings.py:1764 +#: pretix/base/settings.py:1777 msgid "Allow users to download tickets" msgstr "Umožnit uživatelům stahovat vstupenky" -#: pretix/base/settings.py:1765 +#: pretix/base/settings.py:1778 msgid "If this is off, nobody can download a ticket." msgstr "Pokud je tato funkce vypnutá, nikdo si vstupenku nemůže stáhnout." -#: pretix/base/settings.py:1774 +#: pretix/base/settings.py:1787 msgid "Download date" msgstr "Datum stažení" -#: pretix/base/settings.py:1775 +#: pretix/base/settings.py:1788 msgid "" "Ticket download will be offered after this date. If you use the event series " "feature and an order contains tickets for multiple event dates, download of " @@ -11176,11 +11375,11 @@ msgstr "" "a objednávka obsahuje vstupenky na více termínů akcí, bude stažení všech " "vstupenek k dispozici, pokud to alespoň jeden z termínů akcí umožňuje." -#: pretix/base/settings.py:1786 +#: pretix/base/settings.py:1799 msgid "Generate tickets for add-on products and bundled products" msgstr "Generování vstupenek pro doplňkové produkty a spojené produkty" -#: pretix/base/settings.py:1787 +#: pretix/base/settings.py:1800 msgid "" "By default, tickets are only issued for products selected individually, not " "for add-on products or bundled products. With this option, a separate ticket " @@ -11191,11 +11390,11 @@ msgstr "" "této možnosti se pro každý doplňkový produkt nebo spojený produkt vystaví " "také samostatná vstupenka." -#: pretix/base/settings.py:1800 +#: pretix/base/settings.py:1813 msgid "Generate tickets for all products" msgstr "Generování vstupenek pro všechny produkty" -#: pretix/base/settings.py:1801 +#: pretix/base/settings.py:1814 msgid "" "If turned off, tickets are only issued for products that are marked as an " "\"admission ticket\"in the product settings. You can also turn off ticket " @@ -11205,11 +11404,11 @@ msgstr "" "nastavení produktu označeny jako \"vstupenka\". Vydávání vstupenek můžete " "vypnout také u každého produktu zvlášť." -#: pretix/base/settings.py:1813 +#: pretix/base/settings.py:1826 msgid "Generate tickets for pending orders" msgstr "Generování vstupenek pro nevyřízené objednávky" -#: pretix/base/settings.py:1814 +#: pretix/base/settings.py:1827 msgid "" "If turned off, ticket downloads are only possible after an order has been " "marked as paid." @@ -11217,11 +11416,11 @@ msgstr "" "Pokud je vypnuto, je stažení vstupenek možné až po označení objednávky jako " "zaplacené." -#: pretix/base/settings.py:1825 +#: pretix/base/settings.py:1838 msgid "Do not issue ticket before email address is validated" msgstr "Nevydávat vstupenku před ověřením e-mailové adresy" -#: pretix/base/settings.py:1826 +#: pretix/base/settings.py:1839 msgid "" "If turned on, tickets will not be offered for download directly after " "purchase. They will be attached to the payment confirmation email (if the " @@ -11235,11 +11434,11 @@ msgstr "" "jakmile klikne na odkaz v e-mailu. Nemá vliv na objednávky provedené " "prostřednictvím jiných prodejních kanálů." -#: pretix/base/settings.py:1842 +#: pretix/base/settings.py:1855 msgid "Low availability threshold" msgstr "Nízký limit dostupnosti" -#: pretix/base/settings.py:1843 +#: pretix/base/settings.py:1856 msgid "" "If the availability of tickets falls below this percentage, the event (or a " "date, if it is an event series) will be highlighted to have low availability " @@ -11251,11 +11450,11 @@ msgstr "" "označena jako málo dostupná. Pokud tuto možnost ponecháte prázdnou, nízká " "dostupnost se veřejně nezobrazí." -#: pretix/base/settings.py:1857 +#: pretix/base/settings.py:1870 msgid "Show availability in event overviews" msgstr "Zobrazení dostupnosti v přehledu akcí" -#: pretix/base/settings.py:1858 +#: pretix/base/settings.py:1871 msgid "" "If checked, the list of events will show if events are sold out. This might " "make for longer page loading times if you have lots of events and the shown " @@ -11265,24 +11464,24 @@ msgstr "" "vyprodány. To může prodloužit dobu načítání stránky, pokud máte hodně akcí a " "zobrazený stav může být až dvě minuty neaktuální." -#: pretix/base/settings.py:1871 pretix/base/settings.py:1879 +#: pretix/base/settings.py:1884 pretix/base/settings.py:1892 #: pretix/presale/templates/pretixpresale/fragment_calendar_nav.html:8 msgid "List" msgstr "Seznam" -#: pretix/base/settings.py:1872 pretix/base/settings.py:1880 +#: pretix/base/settings.py:1885 pretix/base/settings.py:1893 msgid "Week calendar" msgstr "Týdenní kalendář" -#: pretix/base/settings.py:1873 pretix/base/settings.py:1881 +#: pretix/base/settings.py:1886 pretix/base/settings.py:1894 msgid "Month calendar" msgstr "Měsíční kalendář" -#: pretix/base/settings.py:1877 +#: pretix/base/settings.py:1890 msgid "Default overview style" msgstr "Standardní styl přehledu" -#: pretix/base/settings.py:1883 +#: pretix/base/settings.py:1896 msgid "" "If your event series has more than 50 dates in the future, only the month or " "week calendar can be used." @@ -11290,23 +11489,23 @@ msgstr "" "Pokud má vaše série akcí více než 50 termínů v budoucnosti, lze použít pouze " "měsíční nebo týdenní kalendář." -#: pretix/base/settings.py:1892 +#: pretix/base/settings.py:1905 #, fuzzy msgid "Show filter options for calendar or list view" msgstr "Skrytí všech nedostupných dat ze zobrazení kalendáře nebo seznamu" -#: pretix/base/settings.py:1893 +#: pretix/base/settings.py:1906 #, fuzzy msgid "" "You can set up possible filters as meta properties in your organizer " "settings." msgstr "Vybraný typ média není v nastavení organizéru povolen." -#: pretix/base/settings.py:1902 +#: pretix/base/settings.py:1915 msgid "Hide all unavailable dates from calendar or list views" msgstr "Skrytí všech nedostupných dat ze zobrazení kalendáře nebo seznamu" -#: pretix/base/settings.py:1903 pretix/base/settings.py:1914 +#: pretix/base/settings.py:1916 pretix/base/settings.py:1927 msgid "" "This option currently only affects the calendar of this event series, not " "the organizer-wide calendar." @@ -11314,41 +11513,41 @@ msgstr "" "Tato možnost v současné době ovlivňuje pouze kalendář této série akcí, " "nikoli celý kalendář organizátora." -#: pretix/base/settings.py:1913 +#: pretix/base/settings.py:1926 msgid "Hide all past dates from calendar" msgstr "Skrýt všechny minulé termíny z kalendáře" -#: pretix/base/settings.py:1925 pretix/base/settings.py:1934 +#: pretix/base/settings.py:1938 pretix/base/settings.py:1947 msgid "No modifications after order was submitted" msgstr "" -#: pretix/base/settings.py:1926 pretix/base/settings.py:1935 +#: pretix/base/settings.py:1939 pretix/base/settings.py:1948 msgid "Only the person who ordered can make changes" msgstr "" -#: pretix/base/settings.py:1927 pretix/base/settings.py:1936 +#: pretix/base/settings.py:1940 pretix/base/settings.py:1949 msgid "Both the attendee and the person who ordered can make changes" msgstr "" -#: pretix/base/settings.py:1931 +#: pretix/base/settings.py:1944 msgid "Allow customers to modify their information" msgstr "Umožněte zákazníkům upravit své údaje po přihlášení" -#: pretix/base/settings.py:1946 +#: pretix/base/settings.py:1959 msgid "Allow customers to modify their information after they checked in." msgstr "Umožněte zákazníkům upravit své údaje po přihlášení." -#: pretix/base/settings.py:1947 +#: pretix/base/settings.py:1960 msgid "" "By default, no more modifications are possible for an order as soon as one " "of the tickets in the order has been checked in." msgstr "" -#: pretix/base/settings.py:1957 +#: pretix/base/settings.py:1970 msgid "Last date of modifications" msgstr "Datum poslední změny" -#: pretix/base/settings.py:1958 +#: pretix/base/settings.py:1971 msgid "" "The last date users can modify details of their orders, such as attendee " "names or answers to questions. If you use the event series feature and an " @@ -11360,15 +11559,15 @@ msgstr "" "série akcí a objednávka obsahuje vstupenky na více termínů akcí, použije se " "nejstarší datum." -#: pretix/base/settings.py:1969 +#: pretix/base/settings.py:1982 msgid "Customers can change the variation of the products they purchased" msgstr "Zákazníci mohou měnit varianty zakoupených produktů" -#: pretix/base/settings.py:1978 +#: pretix/base/settings.py:1991 msgid "Customers can change their selected add-on products" msgstr "Zákazníci mohou měnit vybrané doplňkové produkty" -#: pretix/base/settings.py:1988 pretix/base/settings.py:1999 +#: pretix/base/settings.py:2001 pretix/base/settings.py:2012 msgid "" "Only allow changes if the resulting price is higher or equal than the " "previous price." @@ -11376,41 +11575,41 @@ msgstr "" "Změny povolit pouze v případě, že výsledná cena je vyšší nebo stejná jako " "předchozí cena." -#: pretix/base/settings.py:1989 pretix/base/settings.py:2000 +#: pretix/base/settings.py:2002 pretix/base/settings.py:2013 msgid "" "Only allow changes if the resulting price is higher than the previous price." msgstr "" "Změny povolit pouze v případě, že výsledná cena je vyšší než předchozí cena." -#: pretix/base/settings.py:1990 pretix/base/settings.py:2001 +#: pretix/base/settings.py:2003 pretix/base/settings.py:2014 msgid "" "Only allow changes if the resulting price is equal to the previous price." msgstr "" "Změny povolit pouze tehdy, pokud se výsledná cena rovná předchozí ceně." -#: pretix/base/settings.py:1991 pretix/base/settings.py:2002 +#: pretix/base/settings.py:2004 pretix/base/settings.py:2015 msgid "" "Allow changes regardless of price, as long as no refund is required (i.e. " "the resulting price is not lower than what has already been paid)." msgstr "" -#: pretix/base/settings.py:1993 pretix/base/settings.py:2004 +#: pretix/base/settings.py:2006 pretix/base/settings.py:2017 msgid "Allow changes regardless of price, even if this results in a refund." msgstr "Povolit změny bez ohledu na cenu, i když bude nutné vrácení peněz." -#: pretix/base/settings.py:1997 +#: pretix/base/settings.py:2010 msgid "Requirement for changed prices" msgstr "Požadavky na změnu cen" -#: pretix/base/settings.py:2015 +#: pretix/base/settings.py:2028 msgid "Do not allow changes after" msgstr "Povolit změny do" -#: pretix/base/settings.py:2024 +#: pretix/base/settings.py:2037 msgid "Allow change even though the ticket has already been checked in" msgstr "Platbu za tuto fakturu jsme již obdrželi" -#: pretix/base/settings.py:2025 +#: pretix/base/settings.py:2038 msgid "" "By default, order changes are disabled after any ticket in the order has " "been checked in. If you check this box, this requirement is lifted. It is " @@ -11424,11 +11623,11 @@ msgstr "" "již byl jednotlivě odbaven. Používejte opatrně a nejlépe pouze v kombinaci s " "výše uvedeným omezením změn ceny." -#: pretix/base/settings.py:2037 +#: pretix/base/settings.py:2050 msgid "Allow individual attendees to change their ticket" msgstr "Umožnit jednotlivým účastníkům měnit lístek" -#: pretix/base/settings.py:2038 +#: pretix/base/settings.py:2051 msgid "" "By default, only the person who ordered the tickets can make any changes. If " "you check this box, individual attendees can also make changes. However, " @@ -11442,16 +11641,16 @@ msgstr "" "nemění celkovou cenu objednávky. Takové změny může vždy provádět pouze " "hlavní zákazník." -#: pretix/base/settings.py:2050 +#: pretix/base/settings.py:2063 msgid "Customers can cancel their unpaid orders" msgstr "Zákazníci mohou zrušit nezaplacené objednávky" -#: pretix/base/settings.py:2062 +#: pretix/base/settings.py:2075 msgid "Charge a fixed cancellation fee" msgstr "Účtovat pevný storno poplatek" -#: pretix/base/settings.py:2063 pretix/base/settings.py:2074 -#: pretix/base/settings.py:2088 +#: pretix/base/settings.py:2076 pretix/base/settings.py:2087 +#: pretix/base/settings.py:2101 msgid "" "Only affects orders pending payments, a cancellation fee for free orders is " "never charged. Note that it will be your responsibility to claim the " @@ -11461,23 +11660,23 @@ msgstr "" "objednávky není nikdy účtován. Upozorňujeme, že je vaše odpovědnost " "požadovat storno poplatek od uživatele." -#: pretix/base/settings.py:2073 +#: pretix/base/settings.py:2086 msgid "Charge payment, shipping and service fees" msgstr "Účtování poplatků za platby, dopravu a služby" -#: pretix/base/settings.py:2087 +#: pretix/base/settings.py:2100 msgid "Charge a percentual cancellation fee" msgstr "Účtovat pevný storno poplatek" -#: pretix/base/settings.py:2098 pretix/base/settings.py:2237 +#: pretix/base/settings.py:2111 pretix/base/settings.py:2250 msgid "Do not allow cancellations after" msgstr "Storna jsou povolena pouze do" -#: pretix/base/settings.py:2107 +#: pretix/base/settings.py:2120 msgid "Customers can cancel their paid orders" msgstr "Zákazníci mohou zrušit zaplacené objednávky" -#: pretix/base/settings.py:2108 +#: pretix/base/settings.py:2121 msgid "" "Paid money will be automatically paid back if the payment method allows it. " "Otherwise, a manual refund will be created for you to process manually." @@ -11486,23 +11685,23 @@ msgstr "" "V opačném případě bude vytvořena manuální náhrada, kterou budete muset " "zpracovat ručně." -#: pretix/base/settings.py:2121 pretix/control/forms/orders.py:917 +#: pretix/base/settings.py:2134 pretix/control/forms/orders.py:917 msgid "Keep a fixed cancellation fee" msgstr "Zachování fixního storno poplatku" -#: pretix/base/settings.py:2130 +#: pretix/base/settings.py:2143 msgid "Keep payment, shipping and service fees" msgstr "Udržujte poplatky za platby, dopravu a služby" -#: pretix/base/settings.py:2142 pretix/control/forms/orders.py:928 +#: pretix/base/settings.py:2155 pretix/control/forms/orders.py:928 msgid "Keep a percentual cancellation fee" msgstr "Zachovat procentuální storno poplatek" -#: pretix/base/settings.py:2151 +#: pretix/base/settings.py:2164 msgid "Allow customers to voluntarily choose a lower refund" msgstr "Umožnit zákazníkům, aby si dobrovolně zvolili nižší náhradu" -#: pretix/base/settings.py:2152 +#: pretix/base/settings.py:2165 msgid "" "With this option enabled, your customers can choose to get a smaller refund " "to support you." @@ -11510,7 +11709,7 @@ msgstr "" "Pokud tuto možnost povolíte, mohou se vaši zákazníci rozhodnout pro vrácení " "menší částky, aby vás podpořili." -#: pretix/base/settings.py:2157 +#: pretix/base/settings.py:2170 msgid "" "However, if you want us to help keep the lights on here, please consider " "using the slider below to request a smaller refund. Thank you!" @@ -11519,11 +11718,11 @@ msgstr "" "zvažte prosím, jestli chcete pomocí posuvníku zvolit nižší částku náhrady, " "abychom si mohli ponechat vyšší částku. Moc vám děkujeme!" -#: pretix/base/settings.py:2164 +#: pretix/base/settings.py:2177 msgid "Voluntary lower refund explanation" msgstr "Vysvětlení dobrovolné nižší náhrady" -#: pretix/base/settings.py:2167 +#: pretix/base/settings.py:2180 msgid "" "This text will be shown in between the explanation of how the refunds work " "and the slider which your customers can use to choose the amount they would " @@ -11535,11 +11734,11 @@ msgstr "" "Můžete jej použít např. k vysvětlení, že volba nižší náhrady pomůže vaší " "organizaci." -#: pretix/base/settings.py:2182 +#: pretix/base/settings.py:2195 msgid "Step size for reduction amount" msgstr "Krok pro snížení částky" -#: pretix/base/settings.py:2183 +#: pretix/base/settings.py:2196 msgid "" "By default, customers can choose an arbitrary amount for you to keep. If you " "set this to e.g. 10, they will only be able to choose values in increments " @@ -11549,7 +11748,7 @@ msgstr "" "můžete ponechat. Pokud tuto hodnotu nastavíte např. na 10, budou si moci " "vybrat pouze hodnoty v krocích po 10." -#: pretix/base/settings.py:2193 +#: pretix/base/settings.py:2206 msgid "" "Customers can only request a cancellation that needs to be approved by the " "event organizer before the order is canceled and a refund is issued." @@ -11557,67 +11756,67 @@ msgstr "" "Zákazníci mohou požádat pouze o zrušení, které musí schválit organizátor " "akce před zrušením objednávky a vrácením peněz." -#: pretix/base/settings.py:2203 +#: pretix/base/settings.py:2216 msgid "" "Do not show the cancellation fee to users when they request cancellation." msgstr "Nezobrazujte uživatelům při žádosti o zrušení poplatek za zrušení." -#: pretix/base/settings.py:2212 pretix/base/settings.py:2222 +#: pretix/base/settings.py:2225 pretix/base/settings.py:2235 msgid "All refunds are issued to the original payment method" msgstr "Všechny náhrady jsou vydávány na původní způsob platby" -#: pretix/base/settings.py:2213 pretix/base/settings.py:2223 +#: pretix/base/settings.py:2226 pretix/base/settings.py:2236 msgid "" "Customers can choose between a gift card and a refund to their payment method" msgstr "" "Zákazníci si mohou vybrat mezi dárkovou kartou a vrácením peněz na svůj " "způsob platby" -#: pretix/base/settings.py:2214 pretix/base/settings.py:2224 +#: pretix/base/settings.py:2227 pretix/base/settings.py:2237 msgid "All refunds are issued as gift cards" msgstr "Všechny náhrady jsou vydávány jako dárkové karty" -#: pretix/base/settings.py:2215 pretix/base/settings.py:2225 +#: pretix/base/settings.py:2228 pretix/base/settings.py:2238 msgid "Do not handle refunds automatically at all" msgstr "Vůbec nezpracovávat náhrady automaticky" -#: pretix/base/settings.py:2220 +#: pretix/base/settings.py:2233 #: pretix/control/templates/pretixcontrol/order/index.html:182 msgid "Refund method" msgstr "Způsob vracení peněz" -#: pretix/base/settings.py:2246 pretix/base/settings.py:2259 +#: pretix/base/settings.py:2259 pretix/base/settings.py:2272 #, fuzzy msgid "Terms of cancellation" msgstr "Generovat zrušení" -#: pretix/base/settings.py:2249 +#: pretix/base/settings.py:2262 msgid "" "This text will be shown when cancellation is allowed for a paid order. Leave " "empty if you want pretix to automatically generate the terms of cancellation " "based on your settings." msgstr "" -#: pretix/base/settings.py:2262 +#: pretix/base/settings.py:2275 msgid "" "This text will be shown when cancellation is allowed for an unpaid or free " "order. Leave empty if you want pretix to automatically generate the terms of " "cancellation based on your settings." msgstr "" -#: pretix/base/settings.py:2272 pretix/control/forms/event.py:1898 +#: pretix/base/settings.py:2285 pretix/control/forms/event.py:1898 msgid "Contact address" msgstr "Kontaktní e-mail" -#: pretix/base/settings.py:2273 pretix/control/forms/event.py:1900 +#: pretix/base/settings.py:2286 pretix/control/forms/event.py:1900 msgid "We'll show this publicly to allow attendees to contact you." msgstr "Tento údaj zobrazíme veřejně, aby vás účastníci mohli kontaktovat." -#: pretix/base/settings.py:2281 pretix/control/forms/event.py:1892 +#: pretix/base/settings.py:2294 pretix/control/forms/event.py:1892 msgid "Imprint URL" msgstr "Impressum (adresa URL)" -#: pretix/base/settings.py:2282 pretix/control/forms/event.py:1893 +#: pretix/base/settings.py:2295 pretix/control/forms/event.py:1893 msgid "" "This should point e.g. to a part of your website that has your contact " "details and legal information." @@ -11625,11 +11824,11 @@ msgstr "" "Mělo by jít například o odkaz na část vašich webových stránek, kde lze " "nalézt kontaktní údaje a právní informace." -#: pretix/base/settings.py:2292 +#: pretix/base/settings.py:2305 msgid "Privacy Policy URL" msgstr "URL adresa zásad ochrany osobních údajů" -#: pretix/base/settings.py:2293 +#: pretix/base/settings.py:2306 msgid "" "This should point e.g. to a part of your website that explains how you use " "data gathered in your ticket shop." @@ -11637,13 +11836,13 @@ msgstr "" "Mělo by odkazovat např. na část vašich webových stránek, kde je vysvětleno, " "jak používáte údaje získané v e-shopu." -#: pretix/base/settings.py:2304 +#: pretix/base/settings.py:2317 #, fuzzy #| msgid "Account information" msgid "Accessibility information URL" msgstr "Informace o účtu" -#: pretix/base/settings.py:2305 +#: pretix/base/settings.py:2318 #, fuzzy #| msgid "" #| "This should point e.g. to a part of your website that explains how you " @@ -11655,7 +11854,7 @@ msgstr "" "Mělo by odkazovat např. na část vašich webových stránek, kde je vysvětleno, " "jak používáte údaje získané v e-shopu." -#: pretix/base/settings.py:2312 +#: pretix/base/settings.py:2325 #: pretix/presale/templates/pretixpresale/event/base.html:229 #: pretix/presale/templates/pretixpresale/event/base.html:234 #: pretix/presale/templates/pretixpresale/organizers/accessibility.html:6 @@ -11666,23 +11865,23 @@ msgstr "" msgid "Accessibility information" msgstr "Informace o účtu" -#: pretix/base/settings.py:2316 +#: pretix/base/settings.py:2329 #, fuzzy #| msgid "Account information" msgid "Accessibility information title" msgstr "Informace o účtu" -#: pretix/base/settings.py:2326 +#: pretix/base/settings.py:2339 #, fuzzy #| msgid "Account information" msgid "Accessibility information text" msgstr "Informace o účtu" -#: pretix/base/settings.py:2347 +#: pretix/base/settings.py:2360 msgid "Attach ticket files" msgstr "Přiložení souborů lístků" -#: pretix/base/settings.py:2349 +#: pretix/base/settings.py:2362 #, python-brace-format msgid "" "Tickets will never be attached if they're larger than {size} to avoid email " @@ -11691,13 +11890,13 @@ msgstr "" "Vstupenky se nikdy nepřiloží, pokud jsou větší než {size}, aby nedošlo k " "problémům s doručováním e-mailů." -#: pretix/base/settings.py:2360 pretix/plugins/sendmail/forms.py:201 +#: pretix/base/settings.py:2373 pretix/plugins/sendmail/forms.py:201 #: pretix/plugins/sendmail/models.py:263 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:66 msgid "Attach calendar files" msgstr "Přiložit soubory kalendáře" -#: pretix/base/settings.py:2361 +#: pretix/base/settings.py:2374 msgid "" "If enabled, we will attach an .ics calendar file to order confirmation " "emails." @@ -11705,11 +11904,11 @@ msgstr "" "Pokud je tato možnost povolena, přiložíme k e-mailům s potvrzením objednávky " "soubor kalendáře .ics." -#: pretix/base/settings.py:2370 +#: pretix/base/settings.py:2383 msgid "Attach calendar files only after order has been paid" msgstr "Přiložit soubory kalendáře až po zaplacení objednávky" -#: pretix/base/settings.py:2371 +#: pretix/base/settings.py:2384 msgid "" "Use this if you e.g. put a private access link into the calendar file to " "make sure people only receive it after their payment was confirmed." @@ -11718,11 +11917,11 @@ msgstr "" "soukromý přístup, abyste zajistili, že jej lidé obdrží až po potvrzení " "platby." -#: pretix/base/settings.py:2380 +#: pretix/base/settings.py:2393 msgid "Event description" msgstr "Popis akce" -#: pretix/base/settings.py:2383 +#: pretix/base/settings.py:2396 msgid "" "You can use this to share information with your attendees, such as travel " "information or the link to a digital event. If you keep it empty, we will " @@ -11738,11 +11937,11 @@ msgstr "" "osobách, protože záznamy v kalendáři jsou často sdíleny s neurčitým počtem " "osob." -#: pretix/base/settings.py:2396 +#: pretix/base/settings.py:2409 msgid "Subject prefix" msgstr "Předpona předmětu" -#: pretix/base/settings.py:2397 +#: pretix/base/settings.py:2410 msgid "" "This will be prepended to the subject of all outgoing emails, formatted as " "[prefix]. Choose, for example, a short form of your event name." @@ -11750,23 +11949,23 @@ msgstr "" "Tento údaj bude připojen k předmětu všech odchozích e-mailů ve formátu " "[prefix]. Zvolte například zkratku názvu akce." -#: pretix/base/settings.py:2411 pretix/control/forms/mailsetup.py:37 +#: pretix/base/settings.py:2424 pretix/control/forms/mailsetup.py:37 #: pretix/control/forms/mailsetup.py:119 #: pretix/control/templates/pretixcontrol/event/mail.html:39 #: pretix/control/templates/pretixcontrol/organizers/mail.html:40 msgid "Sender address" msgstr "Adresa odesílatele" -#: pretix/base/settings.py:2412 pretix/control/forms/mailsetup.py:38 +#: pretix/base/settings.py:2425 pretix/control/forms/mailsetup.py:38 #: pretix/control/forms/mailsetup.py:120 msgid "Sender address for outgoing emails" msgstr "Adresa odesílatele odchozích e-mailů" -#: pretix/base/settings.py:2421 +#: pretix/base/settings.py:2434 msgid "Sender name" msgstr "jméno odesílatele" -#: pretix/base/settings.py:2422 +#: pretix/base/settings.py:2435 msgid "" "Sender name used in conjunction with the sender address for outgoing emails. " "Defaults to your event name." @@ -11774,20 +11973,20 @@ msgstr "" "Jméno odesílatele používané ve spojení s adresou odesílatele pro odchozí e-" "maily. Výchozí hodnota je název akce." -#: pretix/base/settings.py:2440 pretix/base/settings.py:2497 -#: pretix/base/settings.py:2514 pretix/base/settings.py:2532 +#: pretix/base/settings.py:2453 pretix/base/settings.py:2510 +#: pretix/base/settings.py:2527 pretix/base/settings.py:2545 #, python-brace-format msgid "Your order: {code}" msgstr "Vaše objednávka: {code}" -#: pretix/base/settings.py:2444 pretix/base/settings.py:2477 -#: pretix/base/settings.py:2582 pretix/base/settings.py:2815 -#: pretix/base/settings.py:2852 +#: pretix/base/settings.py:2457 pretix/base/settings.py:2490 +#: pretix/base/settings.py:2595 pretix/base/settings.py:2828 +#: pretix/base/settings.py:2865 #, python-brace-format msgid "Your event registration: {code}" msgstr "Vaše registrace: {code}" -#: pretix/base/settings.py:2448 +#: pretix/base/settings.py:2461 #, python-brace-format msgid "" "Hello,\n" @@ -11811,12 +12010,12 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2461 +#: pretix/base/settings.py:2474 #, python-brace-format msgid "Your orders for {event}" msgstr "Vaše objednávky pro {event}" -#: pretix/base/settings.py:2465 +#: pretix/base/settings.py:2478 #, python-brace-format msgid "" "Hello,\n" @@ -11838,7 +12037,7 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2481 +#: pretix/base/settings.py:2494 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -11862,7 +12061,7 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2501 +#: pretix/base/settings.py:2514 #, python-brace-format msgid "" "Hello,\n" @@ -11888,7 +12087,7 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2518 +#: pretix/base/settings.py:2531 #, python-brace-format msgid "" "Hello,\n" @@ -11917,7 +12116,7 @@ msgstr "" "S pozdravem, \n" "Váš tým {event}" -#: pretix/base/settings.py:2536 +#: pretix/base/settings.py:2549 #, python-brace-format msgid "" "Hello,\n" @@ -11947,11 +12146,11 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2554 +#: pretix/base/settings.py:2567 msgid "Attachment for new orders" msgstr "Příloha pro nové objednávky" -#: pretix/base/settings.py:2559 +#: pretix/base/settings.py:2572 #, python-brace-format msgid "" "This file will be attached to the first email that we send for every new " @@ -11971,7 +12170,7 @@ msgstr "" "schválením objednávky. Aby tento důležitý e-mail nešel do spamu, můžete " "odesílat pouze soubory PDF o velikosti do {size} MB." -#: pretix/base/settings.py:2586 +#: pretix/base/settings.py:2599 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -11994,12 +12193,12 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2598 +#: pretix/base/settings.py:2611 #, python-brace-format msgid "Your order has been changed: {code}" msgstr "Vaše objednávka byla změněna: {code}" -#: pretix/base/settings.py:2602 +#: pretix/base/settings.py:2615 #, python-brace-format msgid "" "Hello,\n" @@ -12022,12 +12221,12 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2614 +#: pretix/base/settings.py:2627 #, python-brace-format msgid "Payment received for your order: {code}" msgstr "Platba za objednávku přijata: {code}" -#: pretix/base/settings.py:2618 +#: pretix/base/settings.py:2631 #, python-brace-format msgid "" "Hello,\n" @@ -12054,12 +12253,12 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2636 +#: pretix/base/settings.py:2649 #, python-brace-format msgid "Event registration confirmed: {code}" msgstr "Registrace události potvrzena: {code}" -#: pretix/base/settings.py:2640 +#: pretix/base/settings.py:2653 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -12082,12 +12281,12 @@ msgstr "" "S pozdravem,\n" "Váš tým {event}" -#: pretix/base/settings.py:2657 pretix/control/forms/event.py:1294 +#: pretix/base/settings.py:2670 pretix/control/forms/event.py:1294 #: pretix/control/forms/event.py:1416 pretix/plugins/sendmail/models.py:268 msgid "Number of days" msgstr "Počet dnů" -#: pretix/base/settings.py:2659 pretix/control/forms/event.py:1297 +#: pretix/base/settings.py:2672 pretix/control/forms/event.py:1297 msgid "" "This email will be sent out this many days before the order expires. If the " "value is 0, the mail will never be sent." @@ -12095,12 +12294,12 @@ msgstr "" "Tento e-mail bude odeslán tolik dní před vypršením platnosti objednávky. " "Pokud je hodnota 0, e-mail nebude nikdy odeslán." -#: pretix/base/settings.py:2667 +#: pretix/base/settings.py:2680 #, python-brace-format msgid "Your order is about to expire: {code}" msgstr "Platnost vaší objednávky brzy vyprší: {code}" -#: pretix/base/settings.py:2671 +#: pretix/base/settings.py:2684 #, python-brace-format msgid "" "Hello,\n" @@ -12127,12 +12326,12 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2685 +#: pretix/base/settings.py:2698 #, python-brace-format msgid "Your order is pending payment: {code}" msgstr "Vaše objednávka čeká na platbu: {code}" -#: pretix/base/settings.py:2689 +#: pretix/base/settings.py:2702 #, python-brace-format msgid "" "Hello,\n" @@ -12157,12 +12356,12 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2702 +#: pretix/base/settings.py:2715 #, python-brace-format msgid "Incomplete payment received: {code}" msgstr "Přijetí částečné platby: {code}" -#: pretix/base/settings.py:2706 +#: pretix/base/settings.py:2719 #, python-brace-format msgid "" "Hello,\n" @@ -12193,12 +12392,12 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2722 +#: pretix/base/settings.py:2735 #, python-brace-format msgid "Payment failed for your order: {code}" msgstr "Platba objednávky se nezdařila: {code}" -#: pretix/base/settings.py:2726 +#: pretix/base/settings.py:2739 #, python-brace-format msgid "" "Hello,\n" @@ -12228,12 +12427,12 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2740 +#: pretix/base/settings.py:2753 #, python-brace-format msgid "You have been selected from the waitinglist for {event}" msgstr "Byli jste vybráni z pořadníku na {event}" -#: pretix/base/settings.py:2744 +#: pretix/base/settings.py:2757 #, python-brace-format msgid "" "Hello,\n" @@ -12292,12 +12491,12 @@ msgstr "" "S pozdravem, \n" "Váš tým {event}" -#: pretix/base/settings.py:2773 +#: pretix/base/settings.py:2786 #, python-brace-format msgid "Order canceled: {code}" msgstr "Objednávka zrušena: {code}" -#: pretix/base/settings.py:2777 +#: pretix/base/settings.py:2790 #, python-brace-format msgid "" "Hello,\n" @@ -12324,12 +12523,12 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2791 +#: pretix/base/settings.py:2804 #, python-brace-format msgid "Order approved and awaiting payment: {code}" msgstr "Objednávka je schválena a čeká na platbu: {code}" -#: pretix/base/settings.py:2795 +#: pretix/base/settings.py:2808 #, python-brace-format msgid "" "Hello,\n" @@ -12360,7 +12559,7 @@ msgstr "" "S pozdravem, \n" "Váš tým {event}" -#: pretix/base/settings.py:2819 pretix/base/settings.py:2856 +#: pretix/base/settings.py:2832 pretix/base/settings.py:2869 #, python-brace-format msgid "" "Hello,\n" @@ -12383,12 +12582,12 @@ msgstr "" "S pozdravem, \n" "Váš tým {event}" -#: pretix/base/settings.py:2831 +#: pretix/base/settings.py:2844 #, python-brace-format msgid "Order approved and confirmed: {code}" msgstr "Schválená a potvrzená objednávka: {code}" -#: pretix/base/settings.py:2835 +#: pretix/base/settings.py:2848 #, python-brace-format msgid "" "Hello,\n" @@ -12414,12 +12613,12 @@ msgstr "" "S pozdravem, \n" "Váš tým {event}" -#: pretix/base/settings.py:2868 +#: pretix/base/settings.py:2881 #, python-brace-format msgid "Order denied: {code}" msgstr "Odmítnutí objednávky: {code}" -#: pretix/base/settings.py:2872 +#: pretix/base/settings.py:2885 #, python-brace-format msgid "" "Hello,\n" @@ -12448,7 +12647,7 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2887 +#: pretix/base/settings.py:2900 #, python-brace-format msgid "" "Hello,\n" @@ -12467,12 +12666,12 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2897 +#: pretix/base/settings.py:2910 #, python-brace-format msgid "Invoice {invoice_number}" msgstr "Faktura {invoice_number}" -#: pretix/base/settings.py:2901 +#: pretix/base/settings.py:2914 #, python-brace-format msgid "" "Hello,\n" @@ -12492,12 +12691,12 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2919 pretix/base/settings.py:2935 +#: pretix/base/settings.py:2932 pretix/base/settings.py:2948 #, python-brace-format msgid "Your ticket is ready for download: {code}" msgstr "Vaše vstupenka je připravena ke stažení: {code}" -#: pretix/base/settings.py:2923 +#: pretix/base/settings.py:2936 #, python-brace-format msgid "" "Hello {attendee_name},\n" @@ -12520,7 +12719,7 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2939 +#: pretix/base/settings.py:2952 #, python-brace-format msgid "" "Hello,\n" @@ -12543,12 +12742,12 @@ msgstr "" "S pozdravem, \n" "Tým {event}" -#: pretix/base/settings.py:2951 +#: pretix/base/settings.py:2964 #, python-brace-format msgid "Activate your account at {organizer}" msgstr "Aktivujte si účet na adrese {organizer}" -#: pretix/base/settings.py:2955 +#: pretix/base/settings.py:2968 #, python-brace-format msgid "" "Hello {name},\n" @@ -12583,13 +12782,13 @@ msgstr "" "\n" "Tým {organizer}" -#: pretix/base/settings.py:2973 +#: pretix/base/settings.py:2986 #, python-brace-format msgid "Confirm email address for your account at {organizer}" msgstr "" "Potvrzení e-mailové adresy pro váš zákaznický účet na adrese {organizer}" -#: pretix/base/settings.py:2977 +#: pretix/base/settings.py:2990 #, python-brace-format msgid "" "Hello {name},\n" @@ -12624,12 +12823,12 @@ msgstr "" "\n" "Tým {organizer}" -#: pretix/base/settings.py:2995 +#: pretix/base/settings.py:3008 #, python-brace-format msgid "Set a new password for your account at {organizer}" msgstr "Nastavení nového hesla pro váš zákaznický účet na adrese {organizer}" -#: pretix/base/settings.py:2999 +#: pretix/base/settings.py:3012 #, python-brace-format msgid "" "Hello {name},\n" @@ -12664,13 +12863,13 @@ msgstr "" "\n" "Tým {organizer}" -#: pretix/base/settings.py:3017 +#: pretix/base/settings.py:3030 #, fuzzy, python-brace-format #| msgid "Activate your account at {organizer}" msgid "Changes to your account at {organizer}" msgstr "Aktivujte si účet na adrese {organizer}" -#: pretix/base/settings.py:3021 +#: pretix/base/settings.py:3034 #, fuzzy, python-brace-format #| msgid "" #| "Hello {name},\n" @@ -12722,57 +12921,57 @@ msgstr "" "\n" "Tým {organizer}" -#: pretix/base/settings.py:3073 pretix/base/settings.py:3080 -#: pretix/base/settings.py:3094 pretix/base/settings.py:3102 -#: pretix/base/settings.py:3116 pretix/base/settings.py:3124 -#: pretix/base/settings.py:3138 pretix/base/settings.py:3145 +#: pretix/base/settings.py:3086 pretix/base/settings.py:3093 +#: pretix/base/settings.py:3107 pretix/base/settings.py:3115 +#: pretix/base/settings.py:3129 pretix/base/settings.py:3137 +#: pretix/base/settings.py:3151 pretix/base/settings.py:3158 msgid "Please enter the hexadecimal code of a color, e.g. #990000." msgstr "Zadejte hexadecimální kód barvy, např. #990000." -#: pretix/base/settings.py:3077 +#: pretix/base/settings.py:3090 msgid "Primary color" msgstr "Hlavní barva" -#: pretix/base/settings.py:3098 +#: pretix/base/settings.py:3111 msgid "Accent color for success" msgstr "Barva akcentu pro úspěch" -#: pretix/base/settings.py:3099 +#: pretix/base/settings.py:3112 msgid "We strongly suggest to use a shade of green." msgstr "Doporučujeme použít zelený odstín." -#: pretix/base/settings.py:3120 +#: pretix/base/settings.py:3133 msgid "Accent color for errors" msgstr "Barva akcentu pro chyby" -#: pretix/base/settings.py:3121 +#: pretix/base/settings.py:3134 msgid "We strongly suggest to use a shade of red." msgstr "Důrazně doporučujeme použít červený odstín." -#: pretix/base/settings.py:3142 +#: pretix/base/settings.py:3155 msgid "Page background color" msgstr "Barva pozadí stránky" -#: pretix/base/settings.py:3157 +#: pretix/base/settings.py:3170 msgid "Use round edges" msgstr "Použijte oblé hrany" -#: pretix/base/settings.py:3166 +#: pretix/base/settings.py:3179 msgid "" "Use native spinners in the widget instead of custom ones for numeric inputs " "such as quantity." msgstr "" -#: pretix/base/settings.py:3177 +#: pretix/base/settings.py:3190 msgid "Only respected by modern browsers." msgstr "Respektují je pouze moderní prohlížeče." -#: pretix/base/settings.py:3188 pretix/base/settings.py:3232 -#: pretix/control/forms/organizer.py:642 +#: pretix/base/settings.py:3201 pretix/base/settings.py:3245 +#: pretix/control/forms/organizer.py:652 msgid "Header image" msgstr "Obrázek v záhlaví" -#: pretix/base/settings.py:3191 +#: pretix/base/settings.py:3204 #, fuzzy #| msgid "" #| "If you provide a logo image, we will by default not show your event name " @@ -12793,19 +12992,19 @@ msgstr "" "nastavení. Doporučujeme nepoužívat na obrázku malé detaily, protože na " "menších obrazovkách se velikost změní." -#: pretix/base/settings.py:3212 pretix/base/settings.py:3255 +#: pretix/base/settings.py:3225 pretix/base/settings.py:3268 msgid "Use header image in its full size" msgstr "Použití obrázku v záhlaví v plné velikosti" -#: pretix/base/settings.py:3213 pretix/base/settings.py:3256 +#: pretix/base/settings.py:3226 pretix/base/settings.py:3269 msgid "We recommend to upload a picture at least 1170 pixels wide." msgstr "Obrázek v záhlaví by měl mít šířku alespoň 1170 pixelů." -#: pretix/base/settings.py:3222 +#: pretix/base/settings.py:3235 msgid "Show event title even if a header image is present" msgstr "Zobrazení názvu akce, i když je přítomen obrázek záhlaví" -#: pretix/base/settings.py:3223 +#: pretix/base/settings.py:3236 msgid "" "The title will only be shown on the event front page. If no header image is " "uploaded for the event, but the header image from the organizer profile is " @@ -12815,7 +13014,7 @@ msgstr "" "žádný obrázek záhlaví, ale je použit obrázek záhlaví z profilu organizátora, " "bude tato možnost ignorována a vždy se zobrazí název akce." -#: pretix/base/settings.py:3235 pretix/control/forms/organizer.py:646 +#: pretix/base/settings.py:3248 pretix/control/forms/organizer.py:656 #, fuzzy #| msgid "" #| "If you provide a logo image, we will by default not show your " @@ -12836,15 +13035,15 @@ msgstr "" "nastavení. Doporučujeme nepoužívat na obrázku malé detaily, protože na " "menších obrazovkách se jeho velikost změní." -#: pretix/base/settings.py:3265 +#: pretix/base/settings.py:3278 msgid "Use header image also for events without an individually uploaded logo" msgstr "Použít obrázek v záhlaví i pro akce bez individuálně nahraného loga" -#: pretix/base/settings.py:3273 +#: pretix/base/settings.py:3286 msgid "Favicon" msgstr "Favicon" -#: pretix/base/settings.py:3276 +#: pretix/base/settings.py:3289 msgid "" "If you provide a favicon, we will show it instead of the default pretix " "icon. We recommend a size of at least 200x200px to accommodate most devices." @@ -12852,11 +13051,11 @@ msgstr "" "Pokud zadáte favicon, zobrazíme ji místo výchozí ikony pretixu. Doporučujeme " "velikost alespoň 200x200px, aby se přizpůsobila většině zařízení." -#: pretix/base/settings.py:3292 +#: pretix/base/settings.py:3305 msgid "Social media image" msgstr "Obrázek pro sociální média" -#: pretix/base/settings.py:3295 +#: pretix/base/settings.py:3308 msgid "" "This picture will be used as a preview if you post links to your ticket shop " "on social media. Facebook advises to use a picture size of 1200 x 630 " @@ -12871,19 +13070,19 @@ msgstr "" "ujistili, že stále vypadá dobře, zobrazí se pouze středový čtverec. Pokud " "jej nevyplníte, použijeme logo uvedené výše." -#: pretix/base/settings.py:3313 +#: pretix/base/settings.py:3326 msgid "Logo image" msgstr "Logo" -#: pretix/base/settings.py:3317 +#: pretix/base/settings.py:3330 msgid "We will show your logo with a maximal height and width of 2.5 cm." msgstr "Vaše logo zobrazíme s maximální výškou a šířkou 2,5 cm." -#: pretix/base/settings.py:3344 pretix/base/settings.py:3450 +#: pretix/base/settings.py:3357 pretix/base/settings.py:3463 msgid "Info text" msgstr "Informační text" -#: pretix/base/settings.py:3347 pretix/base/settings.py:3452 +#: pretix/base/settings.py:3360 pretix/base/settings.py:3465 msgid "" "Not displayed anywhere by default, but if you want to, you can use this e.g. " "in ticket templates." @@ -12891,11 +13090,11 @@ msgstr "" "Ve standardním nastavení se nikde nezobrazuje, ale pokud chcete, můžete to " "použít např. v šablonách vstupenek." -#: pretix/base/settings.py:3356 +#: pretix/base/settings.py:3369 msgid "Banner text (top)" msgstr "Text banneru (nahoře)" -#: pretix/base/settings.py:3359 +#: pretix/base/settings.py:3372 msgid "" "This text will be shown above every page of your shop. Please only use this " "for very important messages." @@ -12903,11 +13102,11 @@ msgstr "" "Tento text se zobrazuje nad každou stránkou obchodu. Používejte jej prosím " "pouze pro velmi důležité zprávy." -#: pretix/base/settings.py:3369 +#: pretix/base/settings.py:3382 msgid "Banner text (bottom)" msgstr "Text banneru (dole)" -#: pretix/base/settings.py:3372 +#: pretix/base/settings.py:3385 msgid "" "This text will be shown below every page of your shop. Please only use this " "for very important messages." @@ -12915,11 +13114,11 @@ msgstr "" "Tento text se zobrazuje pod každou stránkou obchodu. Používejte jej prosím " "pouze pro velmi důležité zprávy." -#: pretix/base/settings.py:3382 +#: pretix/base/settings.py:3395 msgid "Voucher explanation" msgstr "Vysvětlení k poukazu" -#: pretix/base/settings.py:3385 +#: pretix/base/settings.py:3398 msgid "" "This text will be shown next to the input for a voucher code. You can use it " "e.g. to explain how to obtain a voucher code." @@ -12927,11 +13126,11 @@ msgstr "" "Tento text se zobrazí vedle pole pro zadání kódu poukázky. Můžete jej použít " "např. k vysvětlení, jak získat kód poukázky." -#: pretix/base/settings.py:3395 +#: pretix/base/settings.py:3408 msgid "Attendee data explanation" msgstr "Vysvětlení sběru dat účastníků" -#: pretix/base/settings.py:3398 +#: pretix/base/settings.py:3411 msgid "" "This text will be shown above the questions asked for every personalized " "product. You can use it e.g. to explain why you need information from them." @@ -12940,11 +13139,11 @@ msgstr "" "Můžete jej použít např. k vysvětlení, proč potřebujete informace od " "zákazníků." -#: pretix/base/settings.py:3408 +#: pretix/base/settings.py:3421 msgid "Additional success message" msgstr "Doplňková zpráva po dokončení objednávky" -#: pretix/base/settings.py:3409 +#: pretix/base/settings.py:3422 msgid "" "This message will be shown after an order has been created successfully. It " "will be shown in additional to the default text." @@ -12952,11 +13151,11 @@ msgstr "" "Tato zpráva se zobrazí po úspěšném provedení objednávky. Zobrazí se jako " "doplněk k výchozímu textu." -#: pretix/base/settings.py:3421 +#: pretix/base/settings.py:3434 msgid "Help text of the phone number field" msgstr "Nápověda pro pole telefonního čísla" -#: pretix/base/settings.py:3428 +#: pretix/base/settings.py:3441 msgid "" "Make sure to enter a valid email address. We will send you an order " "confirmation including a link that you need to access your order later." @@ -12964,15 +13163,15 @@ msgstr "" "Zadejte platnou e-mailovou adresu. Zašleme vám potvrzení objednávky včetně " "odkazu, který potřebujete k pozdějšímu přístupu k objednávce." -#: pretix/base/settings.py:3435 +#: pretix/base/settings.py:3448 msgid "Help text of the email field" msgstr "Nápověda k textu pole e-mailu" -#: pretix/base/settings.py:3461 +#: pretix/base/settings.py:3474 msgid "Allow creating a new team during event creation" msgstr "Umožnit vytvoření nového týmu během vytváření akce" -#: pretix/base/settings.py:3462 +#: pretix/base/settings.py:3475 msgid "" "Users that do not have access to all events under this organizer, must " "select one of their teams to have access to the created event. This setting " @@ -12984,36 +13183,36 @@ msgstr "" "nastavení umožňuje uživatelům vytvořit tým určený pro akci za běhu, i když " "nemají oprávnění \"Může měnit týmy a oprávnění\"." -#: pretix/base/settings.py:3534 pretix/base/settings.py:3544 +#: pretix/base/settings.py:3547 pretix/base/settings.py:3557 msgid "Event start time (descending)" msgstr "Začátek akce (sestupně)" -#: pretix/base/settings.py:3536 pretix/base/settings.py:3546 +#: pretix/base/settings.py:3549 pretix/base/settings.py:3559 msgid "Name (descending)" msgstr "Jméno (sestupně)" -#: pretix/base/settings.py:3541 +#: pretix/base/settings.py:3554 msgctxt "subevent" msgid "Date ordering" msgstr "Řazení termínů" -#: pretix/base/settings.py:3557 +#: pretix/base/settings.py:3570 msgid "Link back to organizer overview on all event pages" msgstr "Odkaz zpět na přehled organizátorů na všech stránkách akce" -#: pretix/base/settings.py:3566 +#: pretix/base/settings.py:3579 msgid "Homepage text" msgstr "Text na úvodní stránce" -#: pretix/base/settings.py:3568 +#: pretix/base/settings.py:3581 msgid "This will be displayed on the organizer homepage." msgstr "Tento text se zobrazí na stránce organizátora." -#: pretix/base/settings.py:3583 +#: pretix/base/settings.py:3596 msgid "Length of gift card codes" msgstr "Délka kódů dárkových karet" -#: pretix/base/settings.py:3584 +#: pretix/base/settings.py:3597 #, python-brace-format msgid "" "The system generates by default {}-character long gift card codes. However, " @@ -13022,11 +13221,11 @@ msgstr "" "Systém ve výchozím nastavení generuje {}znakové kódy dárkových karet. Pokud " "je však požadována jiná délka, lze ji nastavit zde." -#: pretix/base/settings.py:3600 +#: pretix/base/settings.py:3613 msgid "Validity of gift card codes in years" msgstr "Platnost kódů dárkových karet v letech" -#: pretix/base/settings.py:3601 +#: pretix/base/settings.py:3614 msgid "" "If you set a number here, gift cards will by default expire at the end of " "the year after this many years. If you keep it empty, gift cards do not have " @@ -13036,11 +13235,11 @@ msgstr "" "standardně vyprší na konci roku. Pokud necháte tuto pole prázdné, dárkové " "karty nebudou mít explicitně stanovené datum vypršení platnosti." -#: pretix/base/settings.py:3612 +#: pretix/base/settings.py:3625 msgid "Enable cookie consent management features" msgstr "Povolení funkcí souhlasu se soubory cookie" -#: pretix/base/settings.py:3618 +#: pretix/base/settings.py:3631 msgid "" "By clicking \"Accept all cookies\", you agree to the storing of cookies and " "use of similar technologies on your device." @@ -13048,11 +13247,11 @@ msgstr "" "Kliknutím na tlačítko \"Přijmout vše\" souhlasíte s ukládáním souborů cookie " "a používáním podobných technologií." -#: pretix/base/settings.py:3625 +#: pretix/base/settings.py:3638 msgid "Dialog text" msgstr "Text dialogu" -#: pretix/base/settings.py:3632 +#: pretix/base/settings.py:3645 msgid "" "We use cookies and similar technologies to gather data that allows us to " "improve this website and our offerings. If you do not agree, we will only " @@ -13064,39 +13263,39 @@ msgstr "" "nesouhlasíte, budeme soubory cookie používat pouze v případě, že jsou " "nezbytné pro poskytování služeb, které tyto webové stránky nabízejí." -#: pretix/base/settings.py:3640 +#: pretix/base/settings.py:3653 msgid "Secondary dialog text" msgstr "Sekundární text dialogu" -#: pretix/base/settings.py:3646 +#: pretix/base/settings.py:3659 msgid "Privacy settings" msgstr "Nastavení ochrany osobních údajů" -#: pretix/base/settings.py:3651 +#: pretix/base/settings.py:3664 msgid "Dialog title" msgstr "Titul dialogu" -#: pretix/base/settings.py:3657 +#: pretix/base/settings.py:3670 msgid "Accept all cookies" msgstr "Přijmout všechny" -#: pretix/base/settings.py:3662 +#: pretix/base/settings.py:3675 msgid "\"Accept\" button description" msgstr "Popis tlačítka \"Akceptovat\"" -#: pretix/base/settings.py:3668 +#: pretix/base/settings.py:3681 msgid "Required cookies only" msgstr "Pouze povinné soubory cookie" -#: pretix/base/settings.py:3673 +#: pretix/base/settings.py:3686 msgid "\"Reject\" button description" msgstr "Popis tlačítka \"Odmítnout\"" -#: pretix/base/settings.py:3683 +#: pretix/base/settings.py:3696 msgid "Customers can choose their own seats" msgstr "Zákazníci si mohou vybrat místa sami" -#: pretix/base/settings.py:3684 +#: pretix/base/settings.py:3697 msgid "" "If disabled, you will need to manually assign seats in the backend. Note " "that this can mean people will not know their seat after their purchase and " @@ -13106,164 +13305,164 @@ msgstr "" "Upozorňujeme, že to může znamenat, že lidé po zakoupení nebudou znát své " "místo a možná nebude zapsáno na vstupence." -#: pretix/base/settings.py:3710 +#: pretix/base/settings.py:3723 msgid "Show button to copy user input from other products" msgstr "Zobrazit tlačítko pro kopírování uživatelských údajů z jiných produktů" -#: pretix/base/settings.py:3724 +#: pretix/base/settings.py:3737 msgid "Most common English titles" msgstr "Nejčastější anglické titulky" -#: pretix/base/settings.py:3734 +#: pretix/base/settings.py:3747 msgid "Most common German titles" msgstr "Nejčastější německé titulky" -#: pretix/base/settings.py:3747 +#: pretix/base/settings.py:3760 msgctxt "person_name_salutation" msgid "Ms" msgstr "Paní" -#: pretix/base/settings.py:3748 +#: pretix/base/settings.py:3761 msgctxt "person_name_salutation" msgid "Mr" msgstr "Pán" -#: pretix/base/settings.py:3749 +#: pretix/base/settings.py:3762 msgctxt "person_name_salutation" msgid "Mx" msgstr "neurčeno" -#: pretix/base/settings.py:3786 pretix/base/settings.py:3802 -#: pretix/base/settings.py:3818 pretix/base/settings.py:3833 -#: pretix/base/settings.py:3851 pretix/base/settings.py:3866 -#: pretix/base/settings.py:3896 pretix/base/settings.py:3920 -#: pretix/base/settings.py:3952 pretix/base/settings.py:3974 -#: pretix/base/settings.py:4005 +#: pretix/base/settings.py:3799 pretix/base/settings.py:3815 +#: pretix/base/settings.py:3831 pretix/base/settings.py:3846 +#: pretix/base/settings.py:3864 pretix/base/settings.py:3879 +#: pretix/base/settings.py:3909 pretix/base/settings.py:3933 +#: pretix/base/settings.py:3965 pretix/base/settings.py:3987 +#: pretix/base/settings.py:4018 msgctxt "person_name_sample" msgid "John" msgstr "Jan" -#: pretix/base/settings.py:3787 pretix/base/settings.py:3803 -#: pretix/base/settings.py:3819 pretix/base/settings.py:3835 -#: pretix/base/settings.py:3853 pretix/base/settings.py:3867 -#: pretix/base/settings.py:3897 pretix/base/settings.py:3953 -#: pretix/base/settings.py:3975 pretix/base/settings.py:4006 +#: pretix/base/settings.py:3800 pretix/base/settings.py:3816 +#: pretix/base/settings.py:3832 pretix/base/settings.py:3848 +#: pretix/base/settings.py:3866 pretix/base/settings.py:3880 +#: pretix/base/settings.py:3910 pretix/base/settings.py:3966 +#: pretix/base/settings.py:3988 pretix/base/settings.py:4019 msgctxt "person_name_sample" msgid "Doe" msgstr "Novák" -#: pretix/base/settings.py:3793 pretix/base/settings.py:3809 -#: pretix/base/settings.py:3841 pretix/base/settings.py:3960 -#: pretix/base/settings.py:3982 +#: pretix/base/settings.py:3806 pretix/base/settings.py:3822 +#: pretix/base/settings.py:3854 pretix/base/settings.py:3973 +#: pretix/base/settings.py:3995 msgctxt "person_name" msgid "Title" msgstr "Titul" -#: pretix/base/settings.py:3801 pretix/base/settings.py:3817 -#: pretix/base/settings.py:3850 pretix/base/settings.py:3973 -#: pretix/base/settings.py:4004 +#: pretix/base/settings.py:3814 pretix/base/settings.py:3830 +#: pretix/base/settings.py:3863 pretix/base/settings.py:3986 +#: pretix/base/settings.py:4017 msgctxt "person_name_sample" msgid "Dr" msgstr "Dr." -#: pretix/base/settings.py:3825 pretix/base/settings.py:3842 +#: pretix/base/settings.py:3838 pretix/base/settings.py:3855 msgid "First name" msgstr "Jméno" -#: pretix/base/settings.py:3826 pretix/base/settings.py:3843 +#: pretix/base/settings.py:3839 pretix/base/settings.py:3856 msgid "Middle name" msgstr "Prostřední jméno" -#: pretix/base/settings.py:3907 pretix/base/settings.py:3919 -#: pretix/control/forms/organizer.py:793 +#: pretix/base/settings.py:3920 pretix/base/settings.py:3932 +#: pretix/control/forms/organizer.py:803 msgctxt "person_name_sample" msgid "John Doe" msgstr "Jan Novák" -#: pretix/base/settings.py:3913 +#: pretix/base/settings.py:3926 msgid "Calling name" msgstr "Volací jméno" -#: pretix/base/settings.py:3927 +#: pretix/base/settings.py:3940 msgid "Latin transcription" msgstr "Transkripce" -#: pretix/base/settings.py:3939 pretix/base/settings.py:3959 -#: pretix/base/settings.py:3981 +#: pretix/base/settings.py:3952 pretix/base/settings.py:3972 +#: pretix/base/settings.py:3994 msgctxt "person_name" msgid "Salutation" msgstr "Oslovení" -#: pretix/base/settings.py:3951 pretix/base/settings.py:3972 -#: pretix/base/settings.py:4003 +#: pretix/base/settings.py:3964 pretix/base/settings.py:3985 +#: pretix/base/settings.py:4016 msgctxt "person_name_sample" msgid "Mr" msgstr "Pan" -#: pretix/base/settings.py:3985 +#: pretix/base/settings.py:3998 msgctxt "person_name" msgid "Degree (after name)" msgstr "Titul (za jménem)" -#: pretix/base/settings.py:4007 +#: pretix/base/settings.py:4020 msgctxt "person_name_sample" msgid "MA" msgstr "MA" -#: pretix/base/settings.py:4033 pretix/base/settings.py:4035 +#: pretix/base/settings.py:4046 pretix/base/settings.py:4048 #, fuzzy #| msgid "Provider name" msgctxt "address" msgid "Province" msgstr "Název poskytovatele" -#: pretix/base/settings.py:4034 +#: pretix/base/settings.py:4047 #, fuzzy #| msgid "Price effect" msgctxt "address" msgid "Prefecture" msgstr "Vliv ceny" -#: pretix/base/settings.py:4125 pretix/control/forms/event.py:242 +#: pretix/base/settings.py:4138 pretix/control/forms/event.py:242 msgid "" "Your default locale must also be enabled for your event (see box above)." msgstr "" "Pro vaši akci musí být také povoleno výchozí nastavení (viz rámeček výše)." -#: pretix/base/settings.py:4129 +#: pretix/base/settings.py:4142 msgid "" "You cannot require specifying attendee names if you do not ask for them." msgstr "Nelze vyžadovat uvedení jmen účastníků, pokud o ně nepožádáte." -#: pretix/base/settings.py:4133 +#: pretix/base/settings.py:4146 msgid "You have to ask for attendee emails if you want to make them required." msgstr "Pokud chcete, aby byly e-maily účastníků povinné, musíte o ně požádat." -#: pretix/base/settings.py:4137 +#: pretix/base/settings.py:4150 msgid "" "You have to ask for invoice addresses if you want to make them required." msgstr "Pokud chcete, aby byly adresy faktur povinné, musíte o ně požádat." -#: pretix/base/settings.py:4141 +#: pretix/base/settings.py:4154 msgid "You have to require invoice addresses to require for company names." msgstr "" "Musíte vyžadovat adresy faktur, abyste mohli vyžadovat názvy společností." -#: pretix/base/settings.py:4163 +#: pretix/base/settings.py:4176 #, python-brace-format msgid "VAT-ID is not supported for \"{}\"." msgstr "" -#: pretix/base/settings.py:4170 +#: pretix/base/settings.py:4183 msgid "The last payment date cannot be before the end of presale." msgstr "Datum poslední platby nesmí být před koncem předprodeje." -#: pretix/base/settings.py:4178 +#: pretix/base/settings.py:4191 #, python-brace-format msgid "The value \"{identifier}\" is not a valid sales channel." msgstr "Hodnota \"{identifier}\" není platný prodejní kanál." -#: pretix/base/settings.py:4193 +#: pretix/base/settings.py:4206 msgid "This needs to be disabled if other NFC-based types are active." msgstr "" @@ -13451,7 +13650,7 @@ msgid "You do not have access to this page." msgstr "Na tuto stránku nemáte přístup." #: pretix/base/templates/403.html:20 pretix/base/templates/404.html:16 -#: pretix/control/templates/pretixcontrol/base.html:199 +#: pretix/control/templates/pretixcontrol/base.html:200 #: pretix/control/templates/pretixcontrol/user/staff_session_start.html:4 #: pretix/control/templates/pretixcontrol/user/staff_session_start.html:6 #: pretix/presale/templates/pretixpresale/event/offline.html:21 @@ -13614,6 +13813,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcards.html:98 #: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:114 #: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:21 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:214 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:390 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:114 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:95 @@ -13673,12 +13873,12 @@ msgstr "" msgid "%(number)s days %(relation)s %(relation_to)s at %(time_of_day)s" msgstr "" -#: pretix/base/templates/pretixbase/redirect.html:5 -#: pretix/base/templates/pretixbase/redirect.html:9 +#: pretix/base/templates/pretixbase/redirect.html:6 +#: pretix/base/templates/pretixbase/redirect.html:10 msgid "Redirect" msgstr "Přesměrování" -#: pretix/base/templates/pretixbase/redirect.html:11 +#: pretix/base/templates/pretixbase/redirect.html:12 #, python-format msgid "" "The link you clicked on wants to redirect you to a destination on the " @@ -13687,13 +13887,13 @@ msgstr "" "Odkaz, na který jste klikli, vás chce přesměrovat na cíl na webové stránce " "%(host)s." -#: pretix/base/templates/pretixbase/redirect.html:14 +#: pretix/base/templates/pretixbase/redirect.html:15 msgid "Please only proceed if you trust this website to be safe." msgstr "" "Pokračujte, prosím, pouze v případě, že považujete tyto webové stránky za " "důvěryhodné." -#: pretix/base/templates/pretixbase/redirect.html:20 +#: pretix/base/templates/pretixbase/redirect.html:21 #, python-format msgid "Proceed to %(host)s" msgstr "Pokračovat na %(host)s" @@ -14204,8 +14404,8 @@ msgid "Support for check-in questions" msgstr "Podpora pro otázky týkající se check-in" #: pretix/control/forms/checkin.py:197 pretix/control/forms/checkin.py:213 -#: pretix/control/forms/filter.py:2677 pretix/control/forms/filter.py:2719 -#: pretix/control/forms/filter.py:2884 +#: pretix/control/forms/filter.py:2683 pretix/control/forms/filter.py:2725 +#: pretix/control/forms/filter.py:2890 msgid "All gates" msgstr "Všechny brány" @@ -14358,11 +14558,11 @@ msgid "" "{error}" msgstr "" -#: pretix/control/forms/event.py:587 pretix/control/forms/organizer.py:579 +#: pretix/control/forms/event.py:587 pretix/control/forms/organizer.py:588 msgid "Name format" msgstr "Formát jména" -#: pretix/control/forms/event.py:588 pretix/control/forms/organizer.py:580 +#: pretix/control/forms/event.py:588 pretix/control/forms/organizer.py:589 msgid "" "This defines how pretix will ask for human names. Changing this after you " "already received orders might lead to unexpected behavior when sorting or " @@ -14372,11 +14572,11 @@ msgstr "" "parametru poté, co jste již obdrželi objednávky, může vést k neočekávanému " "chování při řazení nebo změně jmen." -#: pretix/control/forms/event.py:593 pretix/control/forms/organizer.py:585 +#: pretix/control/forms/event.py:593 pretix/control/forms/organizer.py:594 msgid "Allowed titles" msgstr "Tituly, které lze vybrat" -#: pretix/control/forms/event.py:594 pretix/control/forms/organizer.py:586 +#: pretix/control/forms/event.py:594 pretix/control/forms/organizer.py:595 msgid "" "If the naming scheme you defined above allows users to input a title, you " "can use this to restrict the set of selectable titles." @@ -14384,12 +14584,12 @@ msgstr "" "Pokud výše definované schéma názvů umožňuje uživatelům zadat titul, můžete " "jej použít k omezení množiny volitelných titulů." -#: pretix/control/forms/event.py:712 pretix/control/forms/organizer.py:661 +#: pretix/control/forms/event.py:712 pretix/control/forms/organizer.py:671 #, python-brace-format msgid "Ask for {fields}, display like {example}" msgstr "Zeptat se na {fields}, zobrazit jako {example}" -#: pretix/control/forms/event.py:718 pretix/control/forms/organizer.py:667 +#: pretix/control/forms/event.py:718 pretix/control/forms/organizer.py:677 msgid "Free text input" msgstr "Zadávání volného textu" @@ -14539,17 +14739,17 @@ msgstr "" "Tento e-mail bude zaslán pouze na objednávky z těchto prodejních kanálů. " "Internetový obchod musí být aktivován." -#: pretix/control/forms/event.py:1150 pretix/control/forms/organizer.py:702 +#: pretix/control/forms/event.py:1150 pretix/control/forms/organizer.py:712 msgid "Bcc address" msgstr "Adresa BCC" -#: pretix/control/forms/event.py:1152 pretix/control/forms/organizer.py:704 +#: pretix/control/forms/event.py:1152 pretix/control/forms/organizer.py:714 #, fuzzy #| msgid "All emails will be sent to this address as a Bcc copy" msgid "All emails will be sent to this address as a Bcc copy." msgstr "Všechny e-maily budou zasílány na tuto adresu jako kopie Bcc" -#: pretix/control/forms/event.py:1160 pretix/control/forms/organizer.py:713 +#: pretix/control/forms/event.py:1160 pretix/control/forms/organizer.py:723 msgid "Signature" msgstr "Podpis" @@ -14558,7 +14758,7 @@ msgstr "Podpis" msgid "This will be attached to every email. Available placeholders: {event}" msgstr "Tu přikládáme ke každému e-mailu. Dostupné zástupné znaky: {event}" -#: pretix/control/forms/event.py:1168 pretix/control/forms/organizer.py:721 +#: pretix/control/forms/event.py:1168 pretix/control/forms/organizer.py:731 msgid "e.g. your contact details" msgstr "např. vaše kontaktní údaje" @@ -14608,8 +14808,8 @@ msgstr "Text zaslaný účastníkům" #: pretix/control/forms/event.py:1264 pretix/control/forms/event.py:1338 #: pretix/control/forms/event.py:1348 pretix/control/forms/event.py:1358 #: pretix/control/forms/event.py:1363 pretix/control/forms/event.py:1375 -#: pretix/control/forms/organizer.py:732 pretix/control/forms/organizer.py:742 -#: pretix/control/forms/organizer.py:752 pretix/control/forms/organizer.py:762 +#: pretix/control/forms/organizer.py:742 pretix/control/forms/organizer.py:752 +#: pretix/control/forms/organizer.py:762 pretix/control/forms/organizer.py:772 #: pretix/control/templates/pretixcontrol/event/mail.html:88 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:122 msgid "Text" @@ -15037,8 +15237,8 @@ msgid "Follow-up due" msgstr "Termín opětovného předložení" #: pretix/control/forms/filter.py:483 pretix/control/forms/filter.py:1267 -#: pretix/control/forms/filter.py:2180 pretix/control/forms/filter.py:2435 -#: pretix/control/forms/filter.py:2739 pretix/control/forms/filter.py:2758 +#: pretix/control/forms/filter.py:2186 pretix/control/forms/filter.py:2441 +#: pretix/control/forms/filter.py:2745 pretix/control/forms/filter.py:2764 #: pretix/control/forms/vouchers.py:151 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:121 #: pretix/plugins/sendmail/models.py:244 @@ -15046,9 +15246,9 @@ msgid "All products" msgstr "Všechny produkty" #: pretix/control/forms/filter.py:487 pretix/control/forms/filter.py:1271 -#: pretix/control/forms/filter.py:2439 pretix/control/forms/filter.py:2743 -#: pretix/control/forms/vouchers.py:139 pretix/control/views/typeahead.py:663 -#: pretix/control/views/typeahead.py:780 +#: pretix/control/forms/filter.py:2445 pretix/control/forms/filter.py:2749 +#: pretix/control/forms/vouchers.py:139 pretix/control/views/typeahead.py:682 +#: pretix/control/views/typeahead.py:799 #, python-brace-format msgid "{product} – Any variation" msgstr "{product} – Jakákoli varianta" @@ -15098,12 +15298,12 @@ msgstr "Pouze přesné shody" #: pretix/control/forms/filter.py:927 pretix/control/forms/filter.py:932 #: pretix/control/forms/filter.py:1045 pretix/control/forms/filter.py:1050 -#: pretix/control/forms/filter.py:1969 pretix/control/forms/filter.py:1974 +#: pretix/control/forms/filter.py:1975 pretix/control/forms/filter.py:1980 msgid "All organizers" msgstr "Všechny organizátory" -#: pretix/control/forms/filter.py:1037 pretix/control/forms/filter.py:1953 -#: pretix/control/forms/filter.py:2963 +#: pretix/control/forms/filter.py:1037 pretix/control/forms/filter.py:1959 +#: pretix/control/forms/filter.py:2969 msgid "All events" msgstr "Všechny akce" @@ -15142,278 +15342,279 @@ msgctxt "subevent" msgid "Date doesn't start in selected date range." msgstr "" -#: pretix/control/forms/filter.py:1361 pretix/control/forms/filter.py:1955 +#: pretix/control/forms/filter.py:1367 pretix/control/forms/filter.py:1961 msgid "Shop live and presale running" msgstr "Obchod naživo a předprodej běží" -#: pretix/control/forms/filter.py:1362 pretix/control/forms/filter.py:2293 +#: pretix/control/forms/filter.py:1368 pretix/control/forms/filter.py:2299 msgid "Inactive" msgstr "Neaktivní" -#: pretix/control/forms/filter.py:1369 pretix/control/forms/filter.py:1372 -#: pretix/control/forms/filter.py:1547 pretix/control/forms/filter.py:1550 -#: pretix/control/forms/filter.py:1984 pretix/control/forms/filter.py:1987 -#: pretix/control/forms/filter.py:2617 +#: pretix/control/forms/filter.py:1375 pretix/control/forms/filter.py:1378 +#: pretix/control/forms/filter.py:1553 pretix/control/forms/filter.py:1556 +#: pretix/control/forms/filter.py:1990 pretix/control/forms/filter.py:1993 +#: pretix/control/forms/filter.py:2623 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:84 msgid "Date from" msgstr "Datum od" -#: pretix/control/forms/filter.py:1376 pretix/control/forms/filter.py:1379 -#: pretix/control/forms/filter.py:1554 pretix/control/forms/filter.py:1557 -#: pretix/control/forms/filter.py:1991 pretix/control/forms/filter.py:1994 -#: pretix/control/forms/filter.py:2622 +#: pretix/control/forms/filter.py:1382 pretix/control/forms/filter.py:1385 +#: pretix/control/forms/filter.py:1560 pretix/control/forms/filter.py:1563 +#: pretix/control/forms/filter.py:1997 pretix/control/forms/filter.py:2000 +#: pretix/control/forms/filter.py:2628 msgid "Date until" msgstr "Datum do" -#: pretix/control/forms/filter.py:1383 pretix/control/forms/filter.py:1561 +#: pretix/control/forms/filter.py:1389 pretix/control/forms/filter.py:1567 msgid "Start time from" msgstr "Čas začátku od" -#: pretix/control/forms/filter.py:1388 pretix/control/forms/filter.py:1566 +#: pretix/control/forms/filter.py:1394 pretix/control/forms/filter.py:1572 msgid "Start time until" msgstr "Čas začátku do" -#: pretix/control/forms/filter.py:1393 pretix/control/forms/filter.py:1571 +#: pretix/control/forms/filter.py:1399 pretix/control/forms/filter.py:1577 #: pretix/control/forms/rrule.py:112 pretix/control/forms/rrule.py:151 msgid "Weekday" msgstr "Všední den" -#: pretix/control/forms/filter.py:1721 pretix/control/forms/filter.py:1723 -#: pretix/control/forms/filter.py:1772 pretix/control/forms/filter.py:1774 -#: pretix/control/forms/filter.py:1844 pretix/control/forms/filter.py:1846 -#: pretix/control/forms/filter.py:1898 pretix/control/forms/filter.py:1900 -#: pretix/control/forms/filter.py:2307 pretix/control/forms/filter.py:2309 -#: pretix/control/forms/filter.py:2875 pretix/control/forms/filter.py:2877 +#: pretix/control/forms/filter.py:1727 pretix/control/forms/filter.py:1729 +#: pretix/control/forms/filter.py:1778 pretix/control/forms/filter.py:1780 +#: pretix/control/forms/filter.py:1850 pretix/control/forms/filter.py:1852 +#: pretix/control/forms/filter.py:1904 pretix/control/forms/filter.py:1906 +#: pretix/control/forms/filter.py:2313 pretix/control/forms/filter.py:2315 +#: pretix/control/forms/filter.py:2881 pretix/control/forms/filter.py:2883 msgid "Search query" msgstr "Hledaný výraz" -#: pretix/control/forms/filter.py:1783 pretix/control/forms/filter.py:1855 +#: pretix/control/forms/filter.py:1789 pretix/control/forms/filter.py:1861 #: pretix/control/templates/pretixcontrol/organizers/customer.html:47 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:47 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:54 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:126 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:133 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:37 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:49 msgid "active" msgstr "aktivní" -#: pretix/control/forms/filter.py:1785 +#: pretix/control/forms/filter.py:1791 #: pretix/control/templates/pretixcontrol/organizers/customer.html:45 msgid "not yet activated" msgstr "zatím neaktivováno" -#: pretix/control/forms/filter.py:1789 +#: pretix/control/forms/filter.py:1795 #: pretix/control/templates/pretixcontrol/organizers/customer.html:113 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:6 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:12 -#: pretix/presale/views/customer.py:368 +#: pretix/presale/views/customer.py:370 msgid "Memberships" msgstr "Členství" -#: pretix/control/forms/filter.py:1793 +#: pretix/control/forms/filter.py:1799 msgid "Has no memberships" msgstr "Nemá žádné členství" -#: pretix/control/forms/filter.py:1794 +#: pretix/control/forms/filter.py:1800 msgid "Has any membership" msgstr "Má nějaká členství" -#: pretix/control/forms/filter.py:1795 +#: pretix/control/forms/filter.py:1801 msgid "Has valid membership" msgstr "Má aktivní členství" -#: pretix/control/forms/filter.py:1954 +#: pretix/control/forms/filter.py:1960 msgid "Shop live" msgstr "Obchod živě" -#: pretix/control/forms/filter.py:1956 +#: pretix/control/forms/filter.py:1962 msgid "Shop not live" msgstr "Obchod není živě" -#: pretix/control/forms/filter.py:1959 +#: pretix/control/forms/filter.py:1965 msgid "Single event running or in the future" msgstr "Jedna probíhající nebo budoucí akce" -#: pretix/control/forms/filter.py:1960 +#: pretix/control/forms/filter.py:1966 msgid "Single event in the past" msgstr "Jednotlivá událost v minulosti" -#: pretix/control/forms/filter.py:2159 pretix/control/forms/filter.py:2161 +#: pretix/control/forms/filter.py:2165 pretix/control/forms/filter.py:2167 msgid "Search attendee…" msgstr "Vyhledat účastníky …" -#: pretix/control/forms/filter.py:2166 +#: pretix/control/forms/filter.py:2172 #: pretix/plugins/checkinlists/exporters.py:107 msgid "Check-in status" msgstr "Stav check-inu" -#: pretix/control/forms/filter.py:2168 +#: pretix/control/forms/filter.py:2174 #: pretix/plugins/checkinlists/exporters.py:109 msgid "All attendees" msgstr "Všechny účastníky" -#: pretix/control/forms/filter.py:2169 +#: pretix/control/forms/filter.py:2175 #: pretix/control/templates/pretixcontrol/checkin/index.html:183 #: pretix/control/templates/pretixcontrol/checkin/lists.html:104 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:138 #: pretix/plugins/checkinlists/exporters.py:110 #: pretix/plugins/checkinlists/exporters.py:500 msgid "Checked in" msgstr "Odbaveno" -#: pretix/control/forms/filter.py:2170 +#: pretix/control/forms/filter.py:2176 #: pretix/plugins/checkinlists/exporters.py:111 msgctxt "checkin state" msgid "Present" msgstr "Přítomný" -#: pretix/control/forms/filter.py:2171 +#: pretix/control/forms/filter.py:2177 #: pretix/plugins/checkinlists/exporters.py:112 msgctxt "checkin state" msgid "Checked in but left" msgstr "Přihlášen, ale odešel" -#: pretix/control/forms/filter.py:2172 +#: pretix/control/forms/filter.py:2178 #: pretix/control/templates/pretixcontrol/checkin/index.html:178 #: pretix/plugins/checkinlists/exporters.py:113 msgid "Not checked in" msgstr "Nepřihlášen" -#: pretix/control/forms/filter.py:2191 +#: pretix/control/forms/filter.py:2197 msgctxt "subevent" msgid "Date start from" msgstr "Datum začátku od" -#: pretix/control/forms/filter.py:2197 +#: pretix/control/forms/filter.py:2203 msgctxt "subevent" msgid "Date start until" msgstr "Datum začátku do" -#: pretix/control/forms/filter.py:2298 pretix/control/forms/filter.py:2301 +#: pretix/control/forms/filter.py:2304 pretix/control/forms/filter.py:2307 #: pretix/control/templates/pretixcontrol/users/index.html:52 msgid "Administrator" msgstr "Správce" -#: pretix/control/forms/filter.py:2302 +#: pretix/control/forms/filter.py:2308 msgid "No administrator" msgstr "Žádný administrátor" -#: pretix/control/forms/filter.py:2372 +#: pretix/control/forms/filter.py:2378 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:51 msgid "Valid" msgstr "Potrvzeno" -#: pretix/control/forms/filter.py:2373 +#: pretix/control/forms/filter.py:2379 msgid "Unredeemed" msgstr "Nevyužité" -#: pretix/control/forms/filter.py:2374 +#: pretix/control/forms/filter.py:2380 msgid "Redeemed at least once" msgstr "Uplatněno alespoň jednou" -#: pretix/control/forms/filter.py:2375 +#: pretix/control/forms/filter.py:2381 msgid "Fully redeemed" msgstr "Plně vykoupeno" -#: pretix/control/forms/filter.py:2377 +#: pretix/control/forms/filter.py:2383 msgid "Redeemed and checked in with ticket" msgstr "Uplatněno a odbaveno s vstupenkou" -#: pretix/control/forms/filter.py:2382 +#: pretix/control/forms/filter.py:2388 msgid "Quota handling" msgstr "Nastavení kvót" -#: pretix/control/forms/filter.py:2386 +#: pretix/control/forms/filter.py:2392 msgid "Allow to ignore quota" msgstr "Povolit ignorování kvóty" -#: pretix/control/forms/filter.py:2391 pretix/control/forms/filter.py:2393 +#: pretix/control/forms/filter.py:2397 pretix/control/forms/filter.py:2399 msgid "Filter by tag" msgstr "Filtrovat podle tagů" -#: pretix/control/forms/filter.py:2398 pretix/control/forms/filter.py:2400 +#: pretix/control/forms/filter.py:2404 pretix/control/forms/filter.py:2406 msgid "Search voucher" msgstr "Hledat poukázku" -#: pretix/control/forms/filter.py:2445 pretix/control/forms/vouchers.py:130 -#: pretix/control/views/typeahead.py:788 pretix/control/views/typeahead.py:792 +#: pretix/control/forms/filter.py:2451 pretix/control/forms/vouchers.py:130 +#: pretix/control/views/typeahead.py:807 pretix/control/views/typeahead.py:811 #: pretix/control/views/vouchers.py:133 #, python-brace-format msgid "Any product in quota \"{quota}\"" msgstr "Jakýkoli produkt v kvótě \"{quota}\"" -#: pretix/control/forms/filter.py:2567 +#: pretix/control/forms/filter.py:2573 msgid "Refund status" msgstr "Stav vrácení peněz" -#: pretix/control/forms/filter.py:2569 +#: pretix/control/forms/filter.py:2575 msgid "All open refunds" msgstr "Všechny otevřené náhrady" -#: pretix/control/forms/filter.py:2570 +#: pretix/control/forms/filter.py:2576 msgid "All refunds" msgstr "Všechny náhrady" -#: pretix/control/forms/filter.py:2608 pretix/plugins/reports/exporters.py:704 +#: pretix/control/forms/filter.py:2614 pretix/plugins/reports/exporters.py:704 msgid "Date filter" msgstr "Datumový filtr" -#: pretix/control/forms/filter.py:2610 pretix/plugins/reports/exporters.py:706 +#: pretix/control/forms/filter.py:2616 pretix/plugins/reports/exporters.py:706 msgid "Filter by…" msgstr "Filtrovat podle…" -#: pretix/control/forms/filter.py:2612 pretix/plugins/reports/exporters.py:708 +#: pretix/control/forms/filter.py:2618 pretix/plugins/reports/exporters.py:708 msgid "Date of last successful payment" msgstr "Datum poslední platby" -#: pretix/control/forms/filter.py:2652 +#: pretix/control/forms/filter.py:2658 msgid "All check-ins" msgstr "Všechny check-iny" -#: pretix/control/forms/filter.py:2653 +#: pretix/control/forms/filter.py:2659 msgid "Successful check-ins" msgstr "Úspěšné check-iny" -#: pretix/control/forms/filter.py:2654 +#: pretix/control/forms/filter.py:2660 msgid "Unsuccessful check-ins" msgstr "Neúspěšné check-iny" -#: pretix/control/forms/filter.py:2659 +#: pretix/control/forms/filter.py:2665 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:64 #: pretix/plugins/checkinlists/exporters.py:758 msgid "Scan type" msgstr "Typ skenování" -#: pretix/control/forms/filter.py:2661 +#: pretix/control/forms/filter.py:2667 msgid "All directions" msgstr "Všechny směry" -#: pretix/control/forms/filter.py:2670 pretix/control/forms/filter.py:2710 +#: pretix/control/forms/filter.py:2676 pretix/control/forms/filter.py:2716 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:67 #: pretix/plugins/checkinlists/exporters.py:764 msgid "Device" msgstr "Zařízení" -#: pretix/control/forms/filter.py:2671 pretix/control/forms/filter.py:2706 -#: pretix/control/forms/filter.py:2897 +#: pretix/control/forms/filter.py:2677 pretix/control/forms/filter.py:2712 +#: pretix/control/forms/filter.py:2903 msgid "All devices" msgstr "Všechny přístroje" -#: pretix/control/forms/filter.py:2685 +#: pretix/control/forms/filter.py:2691 msgctxt "filter" msgid "Start date" msgstr "Datum začátku" -#: pretix/control/forms/filter.py:2691 +#: pretix/control/forms/filter.py:2697 msgctxt "filter" msgid "End date" msgstr "Datum konce" -#: pretix/control/forms/filter.py:2733 +#: pretix/control/forms/filter.py:2739 #: pretix/plugins/checkinlists/exporters.py:882 msgid "All check-in lists" msgstr "" -#: pretix/control/forms/filter.py:2737 +#: pretix/control/forms/filter.py:2743 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:64 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:11 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:26 @@ -15428,24 +15629,24 @@ msgstr "" msgid "Check-in list" msgstr "Check-in seznam" -#: pretix/control/forms/filter.py:2888 +#: pretix/control/forms/filter.py:2894 #: pretix/control/templates/pretixcontrol/organizers/devices.html:86 msgid "Software" msgstr "Software" -#: pretix/control/forms/filter.py:2895 +#: pretix/control/forms/filter.py:2901 msgid "Device status" msgstr "Stav zařízení" -#: pretix/control/forms/filter.py:2898 +#: pretix/control/forms/filter.py:2904 msgid "Active devices" msgstr "Aktivní zařízení" -#: pretix/control/forms/filter.py:2899 +#: pretix/control/forms/filter.py:2905 msgid "Revoked devices" msgstr "Odvolaná zařízení" -#: pretix/control/forms/filter.py:2954 pretix/control/forms/filter.py:2956 +#: pretix/control/forms/filter.py:2960 pretix/control/forms/filter.py:2962 #, fuzzy #| msgid "Require email addresses per ticket" msgid "Search email address or subject" @@ -16650,11 +16851,11 @@ msgstr "Je třeba zvolit datum." msgid "You may set only one organizer domain." msgstr "" -#: pretix/control/forms/organizer.py:322 +#: pretix/control/forms/organizer.py:331 msgid "Provided by a plugin" msgstr "" -#: pretix/control/forms/organizer.py:438 +#: pretix/control/forms/organizer.py:447 msgid "" "The changes could not be saved because there would be no remaining team with " "the permission to change teams and permissions." @@ -16662,89 +16863,89 @@ msgstr "" "Změny nebylo možné uložit, protože by nezůstal žádný tým s oprávněním měnit " "týmy a oprávnění." -#: pretix/control/forms/organizer.py:487 pretix/control/forms/organizer.py:525 +#: pretix/control/forms/organizer.py:496 pretix/control/forms/organizer.py:534 msgid "" "Your device will not have access to anything, please select some events." msgstr "Vaše zařízení nebude mít k ničemu přístup, vyberte nějaké akce." -#: pretix/control/forms/organizer.py:677 pretix/plugins/stripe/payment.py:330 +#: pretix/control/forms/organizer.py:687 pretix/plugins/stripe/payment.py:330 msgid "experimental" msgstr "Experimentální" -#: pretix/control/forms/organizer.py:683 +#: pretix/control/forms/organizer.py:693 msgid "" "This feature is currently in an experimental stage. It only supports very " "limited use cases and might change at any point." msgstr "" -#: pretix/control/forms/organizer.py:706 +#: pretix/control/forms/organizer.py:716 msgid "Sensitive emails like password resets will not be sent in Bcc." msgstr "" -#: pretix/control/forms/organizer.py:716 +#: pretix/control/forms/organizer.py:726 msgid "This will be attached to every email." msgstr "Bude přiložen ke každému e-mailu." -#: pretix/control/forms/organizer.py:790 pretix/control/logdisplay.py:671 +#: pretix/control/forms/organizer.py:800 pretix/control/logdisplay.py:671 #: pretix/control/views/user.py:850 pretix/presale/views/customer.py:289 -#: pretix/presale/views/customer.py:545 +#: pretix/presale/views/customer.py:547 msgid "Your password has been changed." msgstr "Vaše heslo bylo změněno." -#: pretix/control/forms/organizer.py:823 +#: pretix/control/forms/organizer.py:833 msgctxt "webhooks" msgid "Event types" msgstr "Typy oznámení" -#: pretix/control/forms/organizer.py:857 +#: pretix/control/forms/organizer.py:867 msgid "Gift card value" msgstr "Hodnota dárkové karty" -#: pretix/control/forms/organizer.py:961 +#: pretix/control/forms/organizer.py:971 msgid "An medium with this type and identifier is already registered." msgstr "Médium s tímto typem a identifikátorem je již zaregistrováno." -#: pretix/control/forms/organizer.py:1059 +#: pretix/control/forms/organizer.py:1069 msgid "An account with this customer ID is already registered." msgstr "Účet s tímto ID zákazníka je již zaregistrován." -#: pretix/control/forms/organizer.py:1076 +#: pretix/control/forms/organizer.py:1086 #: pretix/control/templates/pretixcontrol/organizers/customer.html:62 #: pretix/presale/forms/customer.py:169 pretix/presale/forms/customer.py:507 msgid "Phone" msgstr "Telefon" -#: pretix/control/forms/organizer.py:1190 +#: pretix/control/forms/organizer.py:1200 msgctxt "sso_oidc" msgid "Base URL" msgstr "Základní adresa URL" -#: pretix/control/forms/organizer.py:1194 +#: pretix/control/forms/organizer.py:1204 msgctxt "sso_oidc" msgid "Client ID" msgstr "Klientské ID" -#: pretix/control/forms/organizer.py:1198 +#: pretix/control/forms/organizer.py:1208 msgctxt "sso_oidc" msgid "Client secret" msgstr "Klientské heslo" -#: pretix/control/forms/organizer.py:1202 +#: pretix/control/forms/organizer.py:1212 msgctxt "sso_oidc" msgid "Scope" msgstr "Rozsah" -#: pretix/control/forms/organizer.py:1203 +#: pretix/control/forms/organizer.py:1213 msgctxt "sso_oidc" msgid "Multiple scopes separated with spaces." msgstr "Více rozsahů oddělených mezerami." -#: pretix/control/forms/organizer.py:1207 +#: pretix/control/forms/organizer.py:1217 msgctxt "sso_oidc" msgid "User ID field" msgstr "Pole ID uživatele" -#: pretix/control/forms/organizer.py:1208 +#: pretix/control/forms/organizer.py:1218 msgctxt "sso_oidc" msgid "" "We will assume that the contents of the user ID fields are unique and can " @@ -16753,12 +16954,12 @@ msgstr "" "Budeme předpokládat, že obsah polí ID uživatele je jedinečný a nemůže se pro " "uživatele nikdy změnit." -#: pretix/control/forms/organizer.py:1214 +#: pretix/control/forms/organizer.py:1224 msgctxt "sso_oidc" msgid "Email field" msgstr "Pole E-mail" -#: pretix/control/forms/organizer.py:1215 +#: pretix/control/forms/organizer.py:1225 msgctxt "sso_oidc" msgid "" "We will assume that all email addresses received from the SSO provider are " @@ -16769,17 +16970,17 @@ msgstr "" "SSO jsou ověřeny, že skutečně patří uživateli. Pokud to nelze zajistit, " "mohou vzniknout problémy se zabezpečením." -#: pretix/control/forms/organizer.py:1222 +#: pretix/control/forms/organizer.py:1232 msgctxt "sso_oidc" msgid "Phone field" msgstr "Pole telefonu" -#: pretix/control/forms/organizer.py:1226 +#: pretix/control/forms/organizer.py:1236 msgctxt "sso_oidc" msgid "Query parameters" msgstr "" -#: pretix/control/forms/organizer.py:1227 +#: pretix/control/forms/organizer.py:1237 #, python-brace-format msgctxt "sso_oidc" msgid "" @@ -16787,19 +16988,19 @@ msgid "" "endpoint. Enter as: {example}" msgstr "" -#: pretix/control/forms/organizer.py:1288 +#: pretix/control/forms/organizer.py:1298 msgid "Invalidate old client secret and generate a new one" msgstr "Zneplatnit staré klientské tajemství a vygenerovat nové" -#: pretix/control/forms/organizer.py:1321 +#: pretix/control/forms/organizer.py:1331 msgid "Organizer short name" msgstr "Krátký název organizátora" -#: pretix/control/forms/organizer.py:1325 +#: pretix/control/forms/organizer.py:1335 msgid "Allow access to reusable media" msgstr "Umožnit přístup k opakovaně použitelným médiím" -#: pretix/control/forms/organizer.py:1326 +#: pretix/control/forms/organizer.py:1336 msgid "" "This is required if you want the other organizer to participate in a shared " "system with e.g. NFC payment chips. You should only use this option for " @@ -16808,20 +17009,20 @@ msgid "" "to interact with the media type." msgstr "" -#: pretix/control/forms/organizer.py:1342 +#: pretix/control/forms/organizer.py:1352 msgid "The selected organizer does not exist or cannot be invited." msgstr "Vybraný organizátor neexistuje nebo jej nelze pozvat." -#: pretix/control/forms/organizer.py:1344 +#: pretix/control/forms/organizer.py:1354 msgid "The selected organizer has already been invited." msgstr "Vybraný organizátor byl již pozván." -#: pretix/control/forms/organizer.py:1379 +#: pretix/control/forms/organizer.py:1389 #, fuzzy msgid "A sales channel with the same identifier already exists." msgstr "Poukaz s tímto kódem již existuje." -#: pretix/control/forms/organizer.py:1391 +#: pretix/control/forms/organizer.py:1401 msgid "Events with active plugin" msgstr "" @@ -17366,7 +17567,7 @@ msgid "The check-in of position #{posid} on list \"{list}\" has been reverted." msgstr "Check-in pozice #{posid} na seznamu \"{list}\" byl navrácen." #: pretix/control/logdisplay.py:359 pretix/control/logdisplay.py:361 -#: pretix/control/logdisplay.py:995 pretix/control/logdisplay.py:997 +#: pretix/control/logdisplay.py:998 pretix/control/logdisplay.py:1000 msgid "(unknown)" msgstr "(neznámý)" @@ -17420,7 +17621,7 @@ msgstr "Uživatel potvrdil následující zprávu: \"{}\"" msgid "The order has been canceled (comment: \"{comment}\")." msgstr "Objednávka byla zrušena (komentář: \"{comment}\")." -#: pretix/control/logdisplay.py:422 pretix/control/views/orders.py:1559 +#: pretix/control/logdisplay.py:422 pretix/control/views/orders.py:1573 #: pretix/presale/views/order.py:1138 msgid "The order has been canceled." msgstr "Objednávka byla zrušena." @@ -17459,11 +17660,11 @@ msgstr "" msgid "Internal error while transferring data to {provider_display_name}." msgstr "" -#: pretix/control/logdisplay.py:489 pretix/control/logdisplay.py:842 +#: pretix/control/logdisplay.py:489 pretix/control/logdisplay.py:845 msgid "The settings of a payment provider have been changed." msgstr "Nastavení jedné z platebních metod bylo změněno." -#: pretix/control/logdisplay.py:492 pretix/control/logdisplay.py:841 +#: pretix/control/logdisplay.py:492 pretix/control/logdisplay.py:844 msgid "The settings of a ticket output provider have been changed." msgstr "Bylo změněno nastavení metody stahování lístků." @@ -17506,11 +17707,11 @@ msgstr "" msgid "The order has been set to require payment before use." msgstr "Objednávka byla nastavena tak, aby před použitím vyžadovala platbu." -#: pretix/control/logdisplay.py:511 pretix/control/views/orders.py:1564 +#: pretix/control/logdisplay.py:511 pretix/control/views/orders.py:1578 msgid "The order has been marked as expired." msgstr "Objednávka byla označena jako prošlá." -#: pretix/control/logdisplay.py:512 pretix/control/views/orders.py:1466 +#: pretix/control/logdisplay.py:512 pretix/control/views/orders.py:1480 msgid "The order has been marked as paid." msgstr "Objednávka byla označena jako zaplacená." @@ -17522,7 +17723,7 @@ msgstr "Žádost o zrušení byla smazána." msgid "The order has been refunded." msgstr "Objednávka byla vrácena." -#: pretix/control/logdisplay.py:515 pretix/control/views/orders.py:1904 +#: pretix/control/logdisplay.py:515 pretix/control/views/orders.py:1918 msgid "The order has been reactivated." msgstr "Objednávka byla reaktivována." @@ -17534,7 +17735,7 @@ msgstr "Objednávka byla vytvořena." msgid "The order requires approval before it can continue to be processed." msgstr "Před dalším zpracováním objednávky je třeba ji schválit." -#: pretix/control/logdisplay.py:519 pretix/control/views/orders.py:786 +#: pretix/control/logdisplay.py:519 pretix/control/views/orders.py:800 msgid "The order has been approved." msgstr "Objednávka byla schválena." @@ -17577,7 +17778,7 @@ msgstr "Účet zákazníka byl změněn." msgid "The order locale has been changed." msgstr "Jazyk objednávky byl změněn." -#: pretix/control/logdisplay.py:531 pretix/control/views/orders.py:1603 +#: pretix/control/logdisplay.py:531 pretix/control/views/orders.py:1617 #: pretix/presale/views/order.py:797 pretix/presale/views/order.py:877 msgid "The invoice has been generated." msgstr "Faktura byla vytvořena." @@ -17588,11 +17789,11 @@ msgstr "Faktura byla vytvořena." msgid "The invoice could not be generated." msgstr "Faktura byla vytvořena." -#: pretix/control/logdisplay.py:533 pretix/control/views/orders.py:1684 +#: pretix/control/logdisplay.py:533 pretix/control/views/orders.py:1698 msgid "The invoice has been regenerated." msgstr "Faktura byla přegenerována." -#: pretix/control/logdisplay.py:534 pretix/control/views/orders.py:1741 +#: pretix/control/logdisplay.py:534 pretix/control/views/orders.py:1755 #: pretix/presale/views/order.py:897 msgid "The invoice has been reissued." msgstr "Faktura byla vystavena znovu." @@ -17656,7 +17857,7 @@ msgid "An unidentified type email has been sent." msgstr "Byl odeslán e-mail neidentifikovaného typu." #: pretix/control/logdisplay.py:549 pretix/control/logdisplay.py:742 -#: pretix/control/logdisplay.py:748 pretix/control/logdisplay.py:776 +#: pretix/control/logdisplay.py:751 pretix/control/logdisplay.py:779 msgid "Sending of an email has failed." msgstr "Odeslání e-mailu se nezdařilo." @@ -17871,7 +18072,7 @@ msgstr "Váš účet byl aktivován." msgid "Your account has been disabled." msgstr "Váš účet byl deaktivován." -#: pretix/control/logdisplay.py:680 pretix/presale/views/customer.py:642 +#: pretix/control/logdisplay.py:680 pretix/presale/views/customer.py:644 #, fuzzy, python-brace-format #| msgid "" #| "The email address has been changed from \"{old_email}\" to \"{new_email}" @@ -17907,27 +18108,27 @@ msgstr "Pořadatel byl změněn." msgid "The organizer settings have been changed." msgstr "Nastavení organizátoru byla změněna." -#: pretix/control/logdisplay.py:704 pretix/control/logdisplay.py:849 +#: pretix/control/logdisplay.py:704 pretix/control/logdisplay.py:852 msgid "The footer links have been changed." msgstr "Byly změněny odkazy v zápatí." -#: pretix/control/logdisplay.py:705 pretix/control/logdisplay.py:754 +#: pretix/control/logdisplay.py:705 pretix/control/logdisplay.py:757 msgid "A scheduled export has been added." msgstr "Byl přidán plánovaný export." -#: pretix/control/logdisplay.py:706 pretix/control/logdisplay.py:755 +#: pretix/control/logdisplay.py:706 pretix/control/logdisplay.py:758 msgid "A scheduled export has been changed." msgstr "Plánovaný export byl změněn." -#: pretix/control/logdisplay.py:707 pretix/control/logdisplay.py:756 +#: pretix/control/logdisplay.py:707 pretix/control/logdisplay.py:759 msgid "A scheduled export has been deleted." msgstr "Plánovaný export byl odstraněn." -#: pretix/control/logdisplay.py:708 pretix/control/logdisplay.py:757 +#: pretix/control/logdisplay.py:708 pretix/control/logdisplay.py:760 msgid "A scheduled export has been executed." msgstr "Plánovaný export byl proveden." -#: pretix/control/logdisplay.py:709 pretix/control/logdisplay.py:758 +#: pretix/control/logdisplay.py:709 pretix/control/logdisplay.py:761 #, python-brace-format msgid "A scheduled export has failed: {reason}." msgstr "Naplánovaný export se nepodařil: {reason}." @@ -18021,7 +18222,7 @@ msgstr "Typ členství byl změněn." msgid "The membership type has been deleted." msgstr "Typ členství byl odstraněn." -#: pretix/control/logdisplay.py:731 pretix/control/views/organizer.py:3556 +#: pretix/control/logdisplay.py:731 pretix/control/views/organizer.py:3591 #, fuzzy msgid "The sales channel has been created." msgstr "Zařízení bylo vytvořeno." @@ -18081,64 +18282,83 @@ msgid "The reusable medium has been changed." msgstr "Opakovaně použitelné médium bylo změněno." #: pretix/control/logdisplay.py:746 +#, fuzzy +#| msgid "An answer option has been added to the question." +msgid "A new ticket has been added to the medium." +msgstr "K otázce byla přidána možnost odpovědi." + +#: pretix/control/logdisplay.py:747 +#, fuzzy +#| msgid "{user} has been removed from the team." +msgid "A ticket has been removed from the medium." +msgstr "{user} byl odstraněn z týmu." + +#: pretix/control/logdisplay.py:748 msgid "The medium has been connected to a new ticket." msgstr "Médium bylo připojeno k nové vstupence." -#: pretix/control/logdisplay.py:747 +#: pretix/control/logdisplay.py:749 +#, python-brace-format +msgid "" +"The ticket #{positionid} was exchanged for reusable medium " +"{medium_identifier}." +msgstr "" + +#: pretix/control/logdisplay.py:750 msgid "The medium has been connected to a new gift card." msgstr "Médium bylo spojeno s novou dárkovou kartou." -#: pretix/control/logdisplay.py:749 +#: pretix/control/logdisplay.py:752 msgid "The event's internal comment has been updated." msgstr "Interní komentář k akci byl aktualizován." -#: pretix/control/logdisplay.py:750 +#: pretix/control/logdisplay.py:753 msgid "The event has been canceled." msgstr "Akce byla zrušena." -#: pretix/control/logdisplay.py:751 +#: pretix/control/logdisplay.py:754 msgid "An event has been deleted." msgstr "Akce byla odstraněna." -#: pretix/control/logdisplay.py:752 +#: pretix/control/logdisplay.py:755 msgid "A removal process for personal data has been started." msgstr "" -#: pretix/control/logdisplay.py:753 +#: pretix/control/logdisplay.py:756 msgid "A removal process for personal data has been completed." msgstr "" -#: pretix/control/logdisplay.py:759 +#: pretix/control/logdisplay.py:762 msgid "The user has been created." msgstr "Uživatel byl vytvořen." -#: pretix/control/logdisplay.py:760 +#: pretix/control/logdisplay.py:763 #, python-brace-format msgid "" "A first login using {agent_type} on {os_type} from {country} has been " "detected." msgstr "" -#: pretix/control/logdisplay.py:762 pretix/control/views/user.py:474 +#: pretix/control/logdisplay.py:765 pretix/control/views/user.py:474 #: pretix/control/views/user.py:534 pretix/control/views/user.py:593 msgid "Two-factor authentication has been enabled." msgstr "Bylo povoleno dvoufaktorové ověřování." -#: pretix/control/logdisplay.py:763 pretix/control/views/user.py:377 +#: pretix/control/logdisplay.py:766 pretix/control/views/user.py:377 #: pretix/control/views/user.py:609 msgid "Two-factor authentication has been disabled." msgstr "Dvoufaktorové ověřování bylo vypnuto." -#: pretix/control/logdisplay.py:764 pretix/control/views/user.py:626 +#: pretix/control/logdisplay.py:767 pretix/control/views/user.py:626 msgid "Your two-factor emergency codes have been regenerated." msgstr "Vaše dvoufaktorové nouzové kódy byly obnoveny." -#: pretix/control/logdisplay.py:765 +#: pretix/control/logdisplay.py:768 #, fuzzy msgid "A two-factor emergency code has been generated." msgstr "Vaše dvoufaktorové nouzové kódy byly obnoveny." -#: pretix/control/logdisplay.py:766 +#: pretix/control/logdisplay.py:769 #, python-brace-format msgid "" "A new two-factor authentication device \"{name}\" has been added to your " @@ -18146,7 +18366,7 @@ msgid "" msgstr "" "K vašemu účtu bylo přidáno nové dvoufaktorové ověřovací zařízení \"{name}\"." -#: pretix/control/logdisplay.py:768 +#: pretix/control/logdisplay.py:771 #, python-brace-format msgid "" "The two-factor authentication device \"{name}\" has been removed from your " @@ -18154,31 +18374,31 @@ msgid "" msgstr "" "Dvoufaktorové ověřovací zařízení \"{name}\" bylo z vašeho účtu odstraněno." -#: pretix/control/logdisplay.py:770 +#: pretix/control/logdisplay.py:773 msgid "Notifications have been enabled." msgstr "Oznámení byla povolena." -#: pretix/control/logdisplay.py:771 +#: pretix/control/logdisplay.py:774 msgid "Notifications have been disabled." msgstr "Oznámení byla vypnuta." -#: pretix/control/logdisplay.py:772 +#: pretix/control/logdisplay.py:775 msgid "Your notification settings have been changed." msgstr "Nastavení oznámení bylo změněno." -#: pretix/control/logdisplay.py:773 +#: pretix/control/logdisplay.py:776 msgid "This user has been anonymized." msgstr "Tento uživatel byl anonymizován." -#: pretix/control/logdisplay.py:777 +#: pretix/control/logdisplay.py:780 msgid "Password reset mail sent." msgstr "E-mail s žádostí o obnovení hesla byl odeslán." -#: pretix/control/logdisplay.py:778 +#: pretix/control/logdisplay.py:781 msgid "The password has been reset." msgstr "Heslo bylo obnoveno." -#: pretix/control/logdisplay.py:779 +#: pretix/control/logdisplay.py:782 msgid "" "A repeated password reset has been denied, as the last request was less than " "24 hours ago." @@ -18186,435 +18406,435 @@ msgstr "" "Opakované obnovení hesla bylo zamítnuto, protože poslední žádost byla podána " "před méně než 24 hodin." -#: pretix/control/logdisplay.py:781 +#: pretix/control/logdisplay.py:784 #, python-brace-format msgid "The organizer \"{name}\" has been deleted." msgstr "Organizátor \"{name}\" byl smazán." -#: pretix/control/logdisplay.py:782 pretix/control/logdisplay.py:1013 +#: pretix/control/logdisplay.py:785 pretix/control/logdisplay.py:1016 msgid "A voucher has been sent to a person on the waiting list." msgstr "Osobě na čekací listině byla zaslána poukázka." -#: pretix/control/logdisplay.py:783 +#: pretix/control/logdisplay.py:786 msgid "An entry has been transferred to another waiting list." msgstr "Záznam byl přesunut na jiný čekací seznam." -#: pretix/control/logdisplay.py:784 +#: pretix/control/logdisplay.py:787 msgid "The team has been created." msgstr "Tým byl vytvořen." -#: pretix/control/logdisplay.py:785 +#: pretix/control/logdisplay.py:788 msgid "The team settings have been changed." msgstr "Nastavení týmu byla změněna." -#: pretix/control/logdisplay.py:786 +#: pretix/control/logdisplay.py:789 msgid "The team has been deleted." msgstr "Tým byl smazán." -#: pretix/control/logdisplay.py:787 pretix/control/views/organizer.py:2381 +#: pretix/control/logdisplay.py:790 pretix/control/views/organizer.py:2381 msgid "The gate has been created." msgstr "Stanice byla vytvořena." -#: pretix/control/logdisplay.py:788 +#: pretix/control/logdisplay.py:791 msgid "The gate has been changed." msgstr "Stanice byla změněna." -#: pretix/control/logdisplay.py:789 +#: pretix/control/logdisplay.py:792 msgid "The gate has been deleted." msgstr "Stanice byla zrušena." -#: pretix/control/logdisplay.py:790 +#: pretix/control/logdisplay.py:793 msgctxt "subevent" msgid "The event date has been deleted." msgstr "Termín akce byl odstraněn." -#: pretix/control/logdisplay.py:791 +#: pretix/control/logdisplay.py:794 msgctxt "subevent" msgid "The event date has been canceled." msgstr "Termín akce byl zrušen." -#: pretix/control/logdisplay.py:792 +#: pretix/control/logdisplay.py:795 msgctxt "subevent" msgid "The event date has been changed." msgstr "Termín akce byl změněn." -#: pretix/control/logdisplay.py:793 +#: pretix/control/logdisplay.py:796 msgctxt "subevent" msgid "The event date has been created." msgstr "Termín akce byl vytvořen." -#: pretix/control/logdisplay.py:794 +#: pretix/control/logdisplay.py:797 msgctxt "subevent" msgid "A quota has been added to the event date." msgstr "K termínu akce byla přidána kvóta." -#: pretix/control/logdisplay.py:795 +#: pretix/control/logdisplay.py:798 msgctxt "subevent" msgid "A quota has been changed on the event date." msgstr "Pro datum akce byla změněna kvóta." -#: pretix/control/logdisplay.py:796 +#: pretix/control/logdisplay.py:799 msgctxt "subevent" msgid "A quota has been removed from the event date." msgstr "Z termínu akce byla odstraněna kvóta." -#: pretix/control/logdisplay.py:797 +#: pretix/control/logdisplay.py:800 msgid "The device has been created." msgstr "Zařízení bylo vytvořeno." -#: pretix/control/logdisplay.py:798 +#: pretix/control/logdisplay.py:801 msgid "The device has been changed." msgstr "Zařízení bylo změněno." -#: pretix/control/logdisplay.py:799 +#: pretix/control/logdisplay.py:802 msgid "Access of the device has been revoked." msgstr "Přístup zařízení byl zrušen." -#: pretix/control/logdisplay.py:800 +#: pretix/control/logdisplay.py:803 msgid "The device has been initialized." msgstr "Zařízení bylo inicializováno." -#: pretix/control/logdisplay.py:801 +#: pretix/control/logdisplay.py:804 msgid "The access token of the device has been regenerated." msgstr "Přístupový token zařízení byl obnoven." -#: pretix/control/logdisplay.py:802 +#: pretix/control/logdisplay.py:805 msgid "The device has notified the server of an hardware or software update." msgstr "Zařízení oznámilo serveru aktualizaci hardwaru nebo softwaru." -#: pretix/control/logdisplay.py:803 +#: pretix/control/logdisplay.py:806 msgid "The gift card has been created." msgstr "Dárková karta byla vytvořena." -#: pretix/control/logdisplay.py:804 pretix/control/views/organizer.py:1943 +#: pretix/control/logdisplay.py:807 pretix/control/views/organizer.py:1943 msgid "The gift card has been changed." msgstr "Dárková karta byla změněna." -#: pretix/control/logdisplay.py:805 +#: pretix/control/logdisplay.py:808 msgid "A manual transaction has been performed." msgstr "Byla provedena manuální transakce." -#: pretix/control/logdisplay.py:806 +#: pretix/control/logdisplay.py:809 #, fuzzy #| msgid "This payment has been canceled." msgid "A payment has been performed." msgstr "Tato platba byla zrušena." -#: pretix/control/logdisplay.py:807 +#: pretix/control/logdisplay.py:810 #, fuzzy #| msgid "A manual transaction has been performed." msgid "A refund has been performed. " msgstr "Byla provedena manuální transakce." -#: pretix/control/logdisplay.py:808 +#: pretix/control/logdisplay.py:811 #, python-brace-format msgid "The token \"{name}\" has been created." msgstr "Byl vytvořen token \"{name}\"." -#: pretix/control/logdisplay.py:809 +#: pretix/control/logdisplay.py:812 #, python-brace-format msgid "The token \"{name}\" has been revoked." msgstr "Token \"{name}\" byl odvolán." -#: pretix/control/logdisplay.py:810 +#: pretix/control/logdisplay.py:813 #, fuzzy #| msgid "The check-in list has been deleted." msgid "The check-in and print log state has been reset." msgstr "Seznam pro check-in byl smazán." -#: pretix/control/logdisplay.py:817 pretix/control/logdisplay.py:876 +#: pretix/control/logdisplay.py:820 pretix/control/logdisplay.py:879 #, fuzzy #| msgid "A plugin has been enabled." msgid "The plugin has been enabled." msgstr "Plugin byl povolen." -#: pretix/control/logdisplay.py:818 pretix/control/logdisplay.py:877 -#: pretix/control/views/event.py:497 pretix/control/views/organizer.py:757 +#: pretix/control/logdisplay.py:821 pretix/control/logdisplay.py:880 +#: pretix/control/views/event.py:498 pretix/control/views/organizer.py:757 #, fuzzy #| msgid "A plugin has been disabled." msgid "The plugin has been disabled." msgstr "Plugin byl deaktivován." -#: pretix/control/logdisplay.py:821 pretix/control/logdisplay.py:880 +#: pretix/control/logdisplay.py:824 pretix/control/logdisplay.py:883 #, fuzzy, python-brace-format #| msgid "Question {val}" msgid "Plugin {val}" msgstr "Otázka {val}" -#: pretix/control/logdisplay.py:836 +#: pretix/control/logdisplay.py:839 msgid "A meta property has been added to this event." msgstr "K této akci byla přidána meta-vlastnost." -#: pretix/control/logdisplay.py:837 +#: pretix/control/logdisplay.py:840 msgid "A meta property has been removed from this event." msgstr "Z této akce byla odstraněna meta-vlastnost." -#: pretix/control/logdisplay.py:838 +#: pretix/control/logdisplay.py:841 msgid "A meta property has been changed on this event." msgstr "U této akce byla změněna meta-vlastnost." -#: pretix/control/logdisplay.py:839 +#: pretix/control/logdisplay.py:842 msgid "The event settings have been changed." msgstr "Nastavení akce byla změněna." -#: pretix/control/logdisplay.py:840 +#: pretix/control/logdisplay.py:843 msgid "The ticket download settings have been changed." msgstr "Nastavení stahování vstupenek byla změněna." -#: pretix/control/logdisplay.py:843 +#: pretix/control/logdisplay.py:846 msgid "The shop has been taken live." msgstr "Prodejna vstupenek byla spuštěna." -#: pretix/control/logdisplay.py:844 +#: pretix/control/logdisplay.py:847 msgid "The shop has been taken offline." msgstr "Prodejna vstupenek byla vypnuta." -#: pretix/control/logdisplay.py:845 +#: pretix/control/logdisplay.py:848 msgid "The shop has been taken into test mode." msgstr "Prodejna vstupenek byla převedena do testovacího režimu." -#: pretix/control/logdisplay.py:846 +#: pretix/control/logdisplay.py:849 msgid "The test mode has been disabled." msgstr "Testovací režim byl vypnutý." -#: pretix/control/logdisplay.py:847 +#: pretix/control/logdisplay.py:850 msgid "The event has been created." msgstr "Akce byla vytvořena." -#: pretix/control/logdisplay.py:848 +#: pretix/control/logdisplay.py:851 msgid "The event details have been changed." msgstr "Podrobnosti o akci byly změněny." -#: pretix/control/logdisplay.py:850 +#: pretix/control/logdisplay.py:853 msgid "An answer option has been added to the question." msgstr "K otázce byla přidána možnost odpovědi." -#: pretix/control/logdisplay.py:851 +#: pretix/control/logdisplay.py:854 msgid "An answer option has been removed from the question." msgstr "Z otázky byla odstraněna možnost odpovědi." -#: pretix/control/logdisplay.py:852 +#: pretix/control/logdisplay.py:855 msgid "An answer option has been changed." msgstr "Možnost odpovědi byla změněna." -#: pretix/control/logdisplay.py:853 +#: pretix/control/logdisplay.py:856 msgid "A user has been added to the event team." msgstr "Uživatel byl přidán do týmu akce." -#: pretix/control/logdisplay.py:854 +#: pretix/control/logdisplay.py:857 msgid "A user has been invited to the event team." msgstr "Uživatel byl pozván do týmu akce." -#: pretix/control/logdisplay.py:855 +#: pretix/control/logdisplay.py:858 msgid "A user's permissions have been changed." msgstr "Oprávnění uživatele byla změněna." -#: pretix/control/logdisplay.py:856 +#: pretix/control/logdisplay.py:859 msgid "A user has been removed from the event team." msgstr "Uživatel byl odstraněn z týmu akce." -#: pretix/control/logdisplay.py:863 +#: pretix/control/logdisplay.py:866 msgid "The check-in list has been added." msgstr "Byl přidán seznam pro check-in." -#: pretix/control/logdisplay.py:864 pretix/control/logdisplay.py:865 +#: pretix/control/logdisplay.py:867 pretix/control/logdisplay.py:868 msgid "The check-in list has been deleted." msgstr "Seznam pro check-in byl smazán." -#: pretix/control/logdisplay.py:866 +#: pretix/control/logdisplay.py:869 msgid "The check-in list has been changed." msgstr "Seznam pro check-in byl změněn." -#: pretix/control/logdisplay.py:869 +#: pretix/control/logdisplay.py:872 #, python-brace-format msgid "Check-in list {val}" msgstr "Seznam odbavení {val}" -#: pretix/control/logdisplay.py:896 +#: pretix/control/logdisplay.py:899 msgid "The product has been created." msgstr "Produkt byl vytvořen." -#: pretix/control/logdisplay.py:897 +#: pretix/control/logdisplay.py:900 msgid "The product has been changed." msgstr "Produkt byl změněn." -#: pretix/control/logdisplay.py:898 +#: pretix/control/logdisplay.py:901 msgid "The product has been reordered." msgstr "Produkt byl přeřazen." -#: pretix/control/logdisplay.py:899 +#: pretix/control/logdisplay.py:902 msgid "The product has been deleted." msgstr "Produkt byl odstraněn." -#: pretix/control/logdisplay.py:900 +#: pretix/control/logdisplay.py:903 msgid "An add-on has been added to this product." msgstr "K tomuto produktu byl přidán doplněk." -#: pretix/control/logdisplay.py:901 +#: pretix/control/logdisplay.py:904 msgid "An add-on has been removed from this product." msgstr "Doplněk byl z tohoto produktu odstraněn." -#: pretix/control/logdisplay.py:902 +#: pretix/control/logdisplay.py:905 msgid "An add-on has been changed on this product." msgstr "U tohoto produktu byl změněn doplněk." -#: pretix/control/logdisplay.py:903 +#: pretix/control/logdisplay.py:906 msgid "A bundled item has been added to this product." msgstr "K tomuto produktu byla přidána balíčková položka." -#: pretix/control/logdisplay.py:904 +#: pretix/control/logdisplay.py:907 msgid "A bundled item has been removed from this product." msgstr "Balíčková položka byla z tohoto produktu odstraněna." -#: pretix/control/logdisplay.py:905 +#: pretix/control/logdisplay.py:908 msgid "A bundled item has been changed on this product." msgstr "U tohoto produktu byla změněna balíčková položka." -#: pretix/control/logdisplay.py:906 +#: pretix/control/logdisplay.py:909 #, fuzzy #| msgid "An add-on has been added to this product." msgid "A program time has been added to this product." msgstr "K tomuto produktu byl přidán doplněk." -#: pretix/control/logdisplay.py:907 +#: pretix/control/logdisplay.py:910 #, fuzzy #| msgid "An add-on has been changed on this product." msgid "A program time has been changed on this product." msgstr "U tohoto produktu byl změněn doplněk." -#: pretix/control/logdisplay.py:908 +#: pretix/control/logdisplay.py:911 #, fuzzy #| msgid "An add-on has been removed from this product." msgid "A program time has been removed from this product." msgstr "Doplněk byl z tohoto produktu odstraněn." -#: pretix/control/logdisplay.py:915 +#: pretix/control/logdisplay.py:918 #, python-brace-format msgid "The variation \"{value}\" has been created." msgstr "Byla vytvořena varianta \"{value}\"." -#: pretix/control/logdisplay.py:916 +#: pretix/control/logdisplay.py:919 #, python-brace-format msgid "The variation \"{value}\" has been deleted." msgstr "Varianta \"{value}\" byla odstraněna." -#: pretix/control/logdisplay.py:917 +#: pretix/control/logdisplay.py:920 #, python-brace-format msgid "The variation \"{value}\" has been changed." msgstr "Varianta \"{value}\" byla změněna." -#: pretix/control/logdisplay.py:934 +#: pretix/control/logdisplay.py:937 #, python-brace-format msgid "Payment {local_id} has been confirmed." msgstr "Platba {local_id} byla potvrzena." -#: pretix/control/logdisplay.py:935 +#: pretix/control/logdisplay.py:938 #, python-brace-format msgid "Payment {local_id} has been canceled." msgstr "Platba {local_id} byla zrušena." -#: pretix/control/logdisplay.py:936 +#: pretix/control/logdisplay.py:939 #, python-brace-format msgid "Canceling payment {local_id} has failed." msgstr "Zrušení platby {local_id} se nepodařilo." -#: pretix/control/logdisplay.py:937 +#: pretix/control/logdisplay.py:940 #, python-brace-format msgid "Payment {local_id} has been started." msgstr "Platba {local_id} byla spuštěna." -#: pretix/control/logdisplay.py:938 +#: pretix/control/logdisplay.py:941 #, python-brace-format msgid "Payment {local_id} has failed." msgstr "Platba {local_id} se nezdařila." -#: pretix/control/logdisplay.py:939 +#: pretix/control/logdisplay.py:942 #, python-brace-format msgid "The order could not be marked as paid: {message}" msgstr "Objednávku nebylo možné označit jako zaplacenou: {message}" -#: pretix/control/logdisplay.py:940 +#: pretix/control/logdisplay.py:943 msgid "The order has been overpaid." msgstr "Objednávka byla přeplacena." -#: pretix/control/logdisplay.py:941 +#: pretix/control/logdisplay.py:944 #, python-brace-format msgid "Refund {local_id} has been created." msgstr "Byla vytvořena náhrada {local_id}." -#: pretix/control/logdisplay.py:942 +#: pretix/control/logdisplay.py:945 #, python-brace-format msgid "Refund {local_id} has been created by an external entity." msgstr "Náhrada {local_id} byla vytvořena externí jednotkou." -#: pretix/control/logdisplay.py:943 +#: pretix/control/logdisplay.py:946 msgid "The customer requested you to issue a refund." msgstr "Zákazník vás požádal o vrácení peněz." -#: pretix/control/logdisplay.py:944 +#: pretix/control/logdisplay.py:947 #, python-brace-format msgid "Refund {local_id} has been completed." msgstr "Vrácení peněz {local_id} bylo dokončeno." -#: pretix/control/logdisplay.py:945 +#: pretix/control/logdisplay.py:948 #, python-brace-format msgid "Refund {local_id} has been canceled." msgstr "Náhrada {local_id} byla zrušena." -#: pretix/control/logdisplay.py:946 +#: pretix/control/logdisplay.py:949 #, python-brace-format msgid "Refund {local_id} has failed." msgstr "Náhrada {local_id} se nezdařila." -#: pretix/control/logdisplay.py:953 +#: pretix/control/logdisplay.py:956 msgid "The quota has been added." msgstr "Kvóta byla přidána." -#: pretix/control/logdisplay.py:954 +#: pretix/control/logdisplay.py:957 msgid "The quota has been deleted." msgstr "Kvóta byla odstraněna." -#: pretix/control/logdisplay.py:955 +#: pretix/control/logdisplay.py:958 msgid "The quota has been changed." msgstr "Kvóta byla změněna." -#: pretix/control/logdisplay.py:956 +#: pretix/control/logdisplay.py:959 msgid "The quota has closed." msgstr "Kvóta je uzavřena." -#: pretix/control/logdisplay.py:957 pretix/control/views/item.py:1236 +#: pretix/control/logdisplay.py:960 pretix/control/views/item.py:1236 msgid "The quota has been re-opened." msgstr "Kvóta byla znovu otevřena." -#: pretix/control/logdisplay.py:964 +#: pretix/control/logdisplay.py:967 msgid "The question has been added." msgstr "Otázka byla přidána." -#: pretix/control/logdisplay.py:965 +#: pretix/control/logdisplay.py:968 msgid "The question has been deleted." msgstr "Otázka byla smazána." -#: pretix/control/logdisplay.py:966 +#: pretix/control/logdisplay.py:969 msgid "The question has been changed." msgstr "Otázka byla změněna." -#: pretix/control/logdisplay.py:967 +#: pretix/control/logdisplay.py:970 msgid "The question has been reordered." msgstr "Otázka byla přeřazena." -#: pretix/control/logdisplay.py:974 +#: pretix/control/logdisplay.py:977 msgid "The discount has been added." msgstr "Sleva byla přidána." -#: pretix/control/logdisplay.py:975 +#: pretix/control/logdisplay.py:978 msgid "The discount has been deleted." msgstr "Sleva byla odstraněna." -#: pretix/control/logdisplay.py:976 +#: pretix/control/logdisplay.py:979 msgid "The discount has been changed." msgstr "Sleva byla změněna." -#: pretix/control/logdisplay.py:1000 +#: pretix/control/logdisplay.py:1003 #, python-brace-format msgid "" "Position #{posid} has been checked in manually at {datetime} on list \"{list}" @@ -18622,22 +18842,22 @@ msgid "" msgstr "" "Pozice #{posid} byla ručně zkontrolována v {datetime} na seznamu \"{list}\"." -#: pretix/control/logdisplay.py:1005 +#: pretix/control/logdisplay.py:1008 #, python-brace-format msgid "" "Position #{posid} has been checked in again at {datetime} on list \"{list}\"." msgstr "" "Pozice #{posid} byla znovu odbavena v {datetime} na seznamu \"{list}\"." -#: pretix/control/logdisplay.py:1014 +#: pretix/control/logdisplay.py:1017 msgid "An entry has been removed from the waiting list." msgstr "Záznam byl odstraněn z čekacího seznamu." -#: pretix/control/logdisplay.py:1015 +#: pretix/control/logdisplay.py:1018 msgid "An entry has been changed on the waiting list." msgstr "Záznam na čekací listině byl změněn." -#: pretix/control/logdisplay.py:1016 +#: pretix/control/logdisplay.py:1019 msgid "An entry has been added to the waiting list." msgstr "Na čekací listinu byl přidán záznam." @@ -18687,9 +18907,9 @@ msgstr "Obecné" msgid "Payment" msgstr "Platba" -#: pretix/control/navigation.py:78 pretix/control/views/event.py:1653 -#: pretix/control/views/event.py:1655 pretix/control/views/event.py:1687 -#: pretix/control/views/event.py:1692 pretix/control/views/subevents.py:310 +#: pretix/control/navigation.py:78 pretix/control/views/event.py:1657 +#: pretix/control/views/event.py:1659 pretix/control/views/event.py:1691 +#: pretix/control/views/event.py:1696 pretix/control/views/subevents.py:316 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:60 #: pretix/plugins/ticketoutputpdf/apps.py:55 #: pretix/plugins/ticketoutputpdf/exporters.py:68 @@ -18872,13 +19092,13 @@ msgid "You do not have permission to view this content." msgstr "K zobrazení tohoto obsahu nemáte oprávnění." #: pretix/control/templates/pretixcontrol/auth/base.html:42 -#: pretix/control/templates/pretixcontrol/base.html:362 +#: pretix/control/templates/pretixcontrol/base.html:363 #, python-format msgid "You are currently working on behalf of %(user)s." msgstr "V současné době pracujete ve jménu %(user)s." #: pretix/control/templates/pretixcontrol/auth/base.html:47 -#: pretix/control/templates/pretixcontrol/base.html:367 +#: pretix/control/templates/pretixcontrol/base.html:368 msgid "Stop impersonating" msgstr "Zpět k vlastnímu uživateli" @@ -19068,7 +19288,7 @@ msgstr "Nastavit nové heslo" #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:25 #: pretix/control/templates/pretixcontrol/organizers/device_bulk_edit.html:42 #: pretix/control/templates/pretixcontrol/organizers/device_edit.html:30 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:384 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:385 #: pretix/control/templates/pretixcontrol/organizers/export_form.html:50 #: pretix/control/templates/pretixcontrol/organizers/gate_edit.html:15 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_invite.html:15 @@ -19081,12 +19301,12 @@ msgstr "Nastavit nové heslo" #: pretix/control/templates/pretixcontrol/organizers/reusable_medium_edit.html:28 #: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html:15 #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html:28 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:47 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:71 #: pretix/control/templates/pretixcontrol/organizers/webhook_edit.html:21 -#: pretix/control/templates/pretixcontrol/pdf/index.html:46 +#: pretix/control/templates/pretixcontrol/pdf/index.html:44 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:634 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:368 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:289 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:292 #: pretix/control/templates/pretixcontrol/user/notifications.html:85 #: pretix/control/templates/pretixcontrol/user/settings.html:109 #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:13 @@ -19112,46 +19332,46 @@ msgstr "Uložit" msgid "Create a new account" msgstr "Vytvořit nový účet uživatele" -#: pretix/control/templates/pretixcontrol/base.html:103 +#: pretix/control/templates/pretixcontrol/base.html:104 msgid "Toggle navigation" msgstr "Přepnout navigaci" -#: pretix/control/templates/pretixcontrol/base.html:118 -#: pretix/control/templates/pretixcontrol/base.html:143 -#: pretix/control/templates/pretixcontrol/base.html:147 +#: pretix/control/templates/pretixcontrol/base.html:119 +#: pretix/control/templates/pretixcontrol/base.html:144 #: pretix/control/templates/pretixcontrol/base.html:148 +#: pretix/control/templates/pretixcontrol/base.html:149 msgid "Go to shop" msgstr "Přejít do obchodu" -#: pretix/control/templates/pretixcontrol/base.html:124 -#: pretix/control/templates/pretixcontrol/base.html:154 +#: pretix/control/templates/pretixcontrol/base.html:125 #: pretix/control/templates/pretixcontrol/base.html:155 +#: pretix/control/templates/pretixcontrol/base.html:156 msgid "Public profile" msgstr "Veřejný profil" -#: pretix/control/templates/pretixcontrol/base.html:206 +#: pretix/control/templates/pretixcontrol/base.html:207 msgid "End admin session" msgstr "Ukončení režimu administrátora" -#: pretix/control/templates/pretixcontrol/base.html:218 +#: pretix/control/templates/pretixcontrol/base.html:219 msgid "Account Settings" msgstr "Nastavení účtu" -#: pretix/control/templates/pretixcontrol/base.html:223 -#: pretix/control/templates/pretixcontrol/base.html:225 +#: pretix/control/templates/pretixcontrol/base.html:224 +#: pretix/control/templates/pretixcontrol/base.html:226 #: pretix/presale/templates/pretixpresale/fragment_login_status.html:14 msgid "Log out" msgstr "Odhlásit" -#: pretix/control/templates/pretixcontrol/base.html:251 +#: pretix/control/templates/pretixcontrol/base.html:252 msgid "Organizer account" msgstr "Účet organizátora" -#: pretix/control/templates/pretixcontrol/base.html:274 +#: pretix/control/templates/pretixcontrol/base.html:275 msgid "Search for events" msgstr "Vyhledávání akcí" -#: pretix/control/templates/pretixcontrol/base.html:331 +#: pretix/control/templates/pretixcontrol/base.html:332 #: pretix/presale/templates/pretixpresale/base.html:51 msgid "" "We've detected that you are using Microsoft Internet ExplorerMicrosoft Internet Explorer." -#: pretix/control/templates/pretixcontrol/base.html:334 +#: pretix/control/templates/pretixcontrol/base.html:335 #: pretix/presale/templates/pretixpresale/base.html:54 #, fuzzy msgid "" @@ -19171,7 +19391,7 @@ msgstr "" "plánujeme, že v příštích měsících přestaneme prohlížeč Internet Explorer v " "našem administrativním zázemí podporovat." -#: pretix/control/templates/pretixcontrol/base.html:338 +#: pretix/control/templates/pretixcontrol/base.html:339 #: pretix/presale/templates/pretixpresale/base.html:58 msgid "" "We kindly ask you to move to one of our supported browsers, such as " @@ -19180,18 +19400,18 @@ msgstr "" "Žádáme vás, abyste přešli na některý z podporovaných prohlížečů, například " "Microsoft Edge, Mozilla Firefox, Google Chrome nebo Safari." -#: pretix/control/templates/pretixcontrol/base.html:347 +#: pretix/control/templates/pretixcontrol/base.html:348 msgid "" "Please leave a short comment on what you did in the following admin sessions:" msgstr "" "Zanechte prosím krátký komentář k tomu, co jste dělali v následujících " "relacích administrace:" -#: pretix/control/templates/pretixcontrol/base.html:378 +#: pretix/control/templates/pretixcontrol/base.html:379 msgid "Read more" msgstr "Zjistit více" -#: pretix/control/templates/pretixcontrol/base.html:395 +#: pretix/control/templates/pretixcontrol/base.html:396 msgid "" "Your event contains test mode orders even though " "test mode has been disabled. You should delete those orders " @@ -19203,11 +19423,11 @@ msgstr "" "odstranit, aby se nezobrazovaly v přehledech a statistikách a neblokovaly " "lidem skutečný nákup vstupenek." -#: pretix/control/templates/pretixcontrol/base.html:402 +#: pretix/control/templates/pretixcontrol/base.html:403 msgid "Show all test mode orders" msgstr "Zobrazit všechny objednávky v testovacím režimu" -#: pretix/control/templates/pretixcontrol/base.html:410 +#: pretix/control/templates/pretixcontrol/base.html:411 msgid "" "Starting with version 1.2.0, pretix automatically checks for updates in the " "background. During this check, anonymous data is transmitted to servers " @@ -19221,20 +19441,20 @@ msgstr "" "tuto funkci vypnout nebo zadat svou e-mailovou adresu, abyste byli v případě " "nové verze upozorněni e-mailem. Tato zpráva zmizí, jakmile na ni kliknete." -#: pretix/control/templates/pretixcontrol/base.html:423 +#: pretix/control/templates/pretixcontrol/base.html:424 msgid "" "Click here to do a license compliance check to make sure your usage of " "pretix is in line with pretix' license." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:432 +#: pretix/control/templates/pretixcontrol/base.html:433 msgid "" "The cronjob component of pretix was not executed in the last hours. Please " "check that you have completed all installation steps and your cronjob is " "executed correctly." msgstr "" -#: pretix/control/templates/pretixcontrol/base.html:441 +#: pretix/control/templates/pretixcontrol/base.html:442 msgid "" "pretix is running in debug mode. For security reasons, please never run " "debug mode on a production instance." @@ -19242,7 +19462,7 @@ msgstr "" "pretix je spuštěn v režimu pro debugování. Z bezpečnostních důvodů nikdy " "nespouštějte debug režim na provozní instanci." -#: pretix/control/templates/pretixcontrol/base.html:447 +#: pretix/control/templates/pretixcontrol/base.html:448 msgid "" "For security reasons, please change your password before you continue. " "Afterwards you will be redirected to your original destination." @@ -19250,16 +19470,16 @@ msgstr "" "Z bezpečnostních důvodů si před pokračováním změňte heslo. Poté budete " "přesměrováni na původní místo určení." -#: pretix/control/templates/pretixcontrol/base.html:459 +#: pretix/control/templates/pretixcontrol/base.html:460 #, python-format msgid "Times displayed in %(tz)s" msgstr "Časy zobrazené v %(tz)s" -#: pretix/control/templates/pretixcontrol/base.html:465 +#: pretix/control/templates/pretixcontrol/base.html:466 msgid "running in development mode" msgstr "běží v režimu vývoje" -#: pretix/control/templates/pretixcontrol/base.html:474 +#: pretix/control/templates/pretixcontrol/base.html:475 #: pretix/presale/templates/pretixpresale/fragment_modals.html:38 #: pretix/presale/templates/pretixpresale/postmessage.html:27 #: pretix/presale/templates/pretixpresale/waiting.html:42 @@ -19276,6 +19496,7 @@ msgid "Receipt ID" msgstr "Číslo transakce" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:11 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:29 msgid "ID" msgstr "ID" @@ -19478,10 +19699,11 @@ msgstr[2] "" #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html:16 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:10 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:21 -#: pretix/control/templates/pretixcontrol/pdf/index.html:153 +#: pretix/control/templates/pretixcontrol/pdf/index.html:151 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:378 #: pretix/control/templates/pretixcontrol/subevents/delete.html:12 #: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:41 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:289 #: pretix/control/templates/pretixcontrol/user/2fa_delete.html:18 #: pretix/control/templates/pretixcontrol/user/2fa_disable.html:17 #: pretix/control/templates/pretixcontrol/user/2fa_enable.html:18 @@ -19538,7 +19760,7 @@ msgstr "Zrušit" #: pretix/control/templates/pretixcontrol/organizers/ssoclient_delete.html:20 #: pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html:20 #: pretix/control/templates/pretixcontrol/organizers/team_delete.html:24 -#: pretix/control/templates/pretixcontrol/pdf/index.html:111 +#: pretix/control/templates/pretixcontrol/pdf/index.html:109 #: pretix/control/templates/pretixcontrol/subevents/delete.html:15 #: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:44 #: pretix/control/templates/pretixcontrol/user/2fa_delete.html:21 @@ -19547,7 +19769,7 @@ msgstr "Zrušit" #: pretix/control/templates/pretixcontrol/vouchers/delete_carts.html:16 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:15 #: pretix/control/templates/pretixcontrol/waitinglist/delete_bulk.html:36 -#: pretix/control/views/orders.py:390 +#: pretix/control/views/orders.py:391 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/delete.html:15 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:16 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_delete.html:15 @@ -19672,6 +19894,7 @@ msgstr "Odmítnuto" #: pretix/control/templates/pretixcontrol/event/index.html:24 #: pretix/control/templates/pretixcontrol/organizers/device_connect.html:27 #: pretix/control/templates/pretixcontrol/organizers/device_connect.html:33 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:33 msgid "Copy to clipboard" msgstr "Kopírování do schránky" @@ -19901,6 +20124,7 @@ msgstr "Odstranit seznam odbavení" #: pretix/control/templates/pretixcontrol/items/discounts.html:158 #: pretix/control/templates/pretixcontrol/items/index.html:176 #: pretix/control/templates/pretixcontrol/items/quotas.html:162 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:185 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:89 #: pretix/plugins/badges/templates/pretixplugins/badges/index.html:72 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:69 @@ -19964,20 +20188,33 @@ msgstr "" msgid "Simulate" msgstr "Simulovat" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:67 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:69 msgid "Valid check-in" msgstr "Platný check-in" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:69 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:71 msgid "Additional information required" msgstr "Potřebné další informace" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:71 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:73 msgid "" "The following questions must be answered before check-in can be completed:" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/simulator.html:93 +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:85 +#, fuzzy +#| msgid "Special attention required" +msgid "Media exchange required" +msgstr "Nutná zvláštní pozornost" + +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:87 +#, python-format +msgid "" +"This ticket needs to be exchanged into a %(media_type)s " +"reusable medium. %(media_policy)s." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/simulator.html:103 msgid "Special attention required" msgstr "Nutná zvláštní pozornost" @@ -20570,13 +20807,13 @@ msgid "Cancel or delete event" msgstr "Zrušit nebo smazat akci" #: pretix/control/templates/pretixcontrol/event/dangerzone.html:9 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:25 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:27 #: pretix/control/templates/pretixcontrol/event/delete.html:60 #: pretix/control/templates/pretixcontrol/event/live.html:31 msgid "Go offline" msgstr "Vypnout obchod" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:13 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:14 msgid "" "You can take your event offline. Nobody except your team will be able to see " "or access it any more." @@ -20584,8 +20821,8 @@ msgstr "" "Můžete svou akci přenést do režimu offline. Nikdo kromě vašeho týmu ji již " "nebude moci vidět ani k ní mít přístup." -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:34 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:48 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:35 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:51 #: pretix/control/templates/pretixcontrol/orders/cancel.html:5 #: pretix/control/templates/pretixcontrol/orders/cancel.html:7 #: pretix/control/templates/pretixcontrol/orders/cancel_confirm.html:6 @@ -20593,7 +20830,7 @@ msgstr "" msgid "Cancel event" msgstr "Zrušit akci" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:38 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:40 msgid "" "If you need to call off your event you want to cancel and refund all " "tickets, you can do so through this option." @@ -20601,20 +20838,20 @@ msgstr "" "Pokud potřebujete svou akci zrušit a vrátit peníze za všechny vstupenky, je " "možné to provést prostřednictvím této možnosti." -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:51 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:53 #, fuzzy #| msgid "Permissions" msgid "No permission" msgstr "Oprávnění" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:59 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:72 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:62 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:76 #: pretix/control/templates/pretixcontrol/event/delete.html:56 #: pretix/control/templates/pretixcontrol/event/delete.html:70 msgid "Delete personal data" msgstr "Smazat osobní údaje" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:63 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:67 msgid "" "You can remove personal data such as names and email addresses from your " "event and only retain the financial information such as the number and type " @@ -20624,13 +20861,13 @@ msgstr "" "ponechat si pouze finanční informace, například počet a typ prodaných " "vstupenek." -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:80 -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:93 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:84 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:99 #: pretix/control/templates/pretixcontrol/event/delete.html:5 msgid "Delete event" msgstr "Smazat akci" -#: pretix/control/templates/pretixcontrol/event/dangerzone.html:84 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:89 msgid "" "You can delete your event completely only as long as it does not contain any " "undeletable data, such as orders not performed in test mode." @@ -20763,6 +21000,7 @@ msgid "Shop URL:" msgstr "Adresa obchodu:" #: pretix/control/templates/pretixcontrol/event/index.html:27 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:38 #: pretix/control/templates/pretixcontrol/vouchers/detail.html:57 msgid "Create QR code" msgstr "Vytvořit kód QR" @@ -21106,9 +21344,10 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:16 #: pretix/control/templates/pretixcontrol/organizers/mail.html:34 #: pretix/control/templates/pretixcontrol/organizers/mail.html:48 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:83 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:95 #: pretix/control/templates/pretixcontrol/organizers/team_members.html:10 #: pretix/control/templates/pretixcontrol/organizers/webhooks.html:72 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:18 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:94 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:117 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:85 @@ -21126,7 +21365,7 @@ msgstr "Design e-mailu" #: pretix/control/templates/pretixcontrol/event/mail.html:79 #: pretix/control/templates/pretixcontrol/event/mail_settings_fragment.html:29 #: pretix/control/templates/pretixcontrol/event/tickets.html:35 -#: pretix/control/templates/pretixcontrol/pdf/index.html:41 +#: pretix/control/templates/pretixcontrol/pdf/index.html:39 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:97 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:120 msgid "Preview" @@ -21191,6 +21430,7 @@ msgid "Enabled" msgstr "Povoleno" #: pretix/control/templates/pretixcontrol/event/payment.html:28 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:34 #: pretix/control/templates/pretixcontrol/subevents/index.html:170 #: pretix/control/templates/pretixcontrol/user/settings.html:81 msgid "Disabled" @@ -21263,11 +21503,11 @@ msgstr "" #: pretix/control/templates/pretixcontrol/event/plugins.html:15 #: pretix/control/templates/pretixcontrol/organizers/plugins.html:15 -#: pretix/control/views/checkin.py:425 pretix/control/views/discounts.py:113 -#: pretix/control/views/event.py:254 pretix/control/views/event.py:583 -#: pretix/control/views/event.py:622 pretix/control/views/event.py:819 -#: pretix/control/views/event.py:1060 pretix/control/views/event.py:1423 -#: pretix/control/views/event.py:1463 +#: pretix/control/views/checkin.py:426 pretix/control/views/discounts.py:113 +#: pretix/control/views/event.py:255 pretix/control/views/event.py:584 +#: pretix/control/views/event.py:623 pretix/control/views/event.py:820 +#: pretix/control/views/event.py:1061 pretix/control/views/event.py:1427 +#: pretix/control/views/event.py:1467 #: pretix/control/views/global_settings.py:65 #: pretix/control/views/global_settings.py:88 pretix/control/views/item.py:271 #: pretix/control/views/item.py:784 pretix/control/views/item.py:1035 @@ -21283,22 +21523,22 @@ msgstr "" #: pretix/control/views/organizer.py:2421 #: pretix/control/views/organizer.py:2558 #: pretix/control/views/organizer.py:2755 -#: pretix/control/views/organizer.py:2871 -#: pretix/control/views/organizer.py:3000 -#: pretix/control/views/organizer.py:3197 -#: pretix/control/views/organizer.py:3226 -#: pretix/control/views/organizer.py:3266 -#: pretix/control/views/organizer.py:3343 -#: pretix/control/views/organizer.py:3440 -#: pretix/control/views/organizer.py:3469 -#: pretix/control/views/organizer.py:3607 pretix/control/views/subevents.py:543 -#: pretix/control/views/subevents.py:1666 pretix/control/views/user.py:241 +#: pretix/control/views/organizer.py:2873 +#: pretix/control/views/organizer.py:3002 +#: pretix/control/views/organizer.py:3199 +#: pretix/control/views/organizer.py:3228 +#: pretix/control/views/organizer.py:3268 +#: pretix/control/views/organizer.py:3345 +#: pretix/control/views/organizer.py:3448 +#: pretix/control/views/organizer.py:3504 +#: pretix/control/views/organizer.py:3642 pretix/control/views/subevents.py:608 +#: pretix/control/views/subevents.py:1739 pretix/control/views/user.py:241 #: pretix/control/views/user.py:857 pretix/control/views/users.py:113 #: pretix/control/views/vouchers.py:306 pretix/plugins/autocheckin/views.py:164 #: pretix/plugins/badges/views.py:158 pretix/plugins/sendmail/views.py:645 #: pretix/plugins/stripe/views.py:699 #: pretix/plugins/ticketoutputpdf/views.py:172 -#: pretix/presale/views/customer.py:544 pretix/presale/views/customer.py:597 +#: pretix/presale/views/customer.py:546 pretix/presale/views/customer.py:599 msgid "Your changes have been saved." msgstr "Vaše změny byly uloženy." @@ -21497,7 +21737,7 @@ msgstr "Hlavní údaje" #: pretix/control/templates/pretixcontrol/item/index.html:127 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:394 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:77 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:35 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:35 msgid "Meta data" msgstr "Metadata" @@ -21573,7 +21813,7 @@ msgstr "Návrh obchodu" #: pretix/control/templates/pretixcontrol/events/create_basics.html:59 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:413 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:96 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:54 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:54 msgid "Timeline" msgstr "Časování" @@ -21842,7 +22082,7 @@ msgid "Add a new rule" msgstr "" #: pretix/control/templates/pretixcontrol/event/tax_edit.html:153 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:392 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:393 msgid "Change history" msgstr "" @@ -21950,10 +22190,11 @@ msgstr "" #: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:22 #: pretix/control/templates/pretixcontrol/items/quota_edit.html:21 #: pretix/control/templates/pretixcontrol/organizers/create.html:11 -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:20 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:21 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:386 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:31 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:23 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:25 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:23 msgid "General information" msgstr "Základní informace" @@ -22662,7 +22903,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/item/index.html:254 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:621 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:262 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:262 msgid "Additional settings" msgstr "Další nastavení" @@ -22878,7 +23119,7 @@ msgstr "Plně rezervováno" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:108 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:36 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:72 -#: pretix/presale/views/widget.py:490 +#: pretix/presale/views/widget.py:493 msgid "Sold out" msgstr "Vyprodáno" @@ -23250,6 +23491,7 @@ msgid "You haven't created any quotas yet." msgstr "" #: pretix/control/templates/pretixcontrol/items/quotas.html:108 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:84 msgid "Capacity left" msgstr "Zbývající kapacita" @@ -23372,16 +23614,16 @@ msgstr "Oprávnění" msgid "No applications have access to your pretix account." msgstr "" -#: pretix/control/templates/pretixcontrol/order/approve.html:4 -#: pretix/control/templates/pretixcontrol/order/approve.html:8 +#: pretix/control/templates/pretixcontrol/order/approve.html:5 +#: pretix/control/templates/pretixcontrol/order/approve.html:9 msgid "Approve order" msgstr "" -#: pretix/control/templates/pretixcontrol/order/approve.html:10 +#: pretix/control/templates/pretixcontrol/order/approve.html:14 msgid "Do you really want to approve this order?" msgstr "" -#: pretix/control/templates/pretixcontrol/order/approve.html:20 +#: pretix/control/templates/pretixcontrol/order/approve.html:24 #: pretix/control/templates/pretixcontrol/order/cancel.html:46 #: pretix/control/templates/pretixcontrol/order/cancellation_request_delete.html:21 #: pretix/control/templates/pretixcontrol/order/delete.html:20 @@ -23392,7 +23634,7 @@ msgstr "" msgid "No, take me back" msgstr "" -#: pretix/control/templates/pretixcontrol/order/approve.html:25 +#: pretix/control/templates/pretixcontrol/order/approve.html:29 msgid "Yes, approve order" msgstr "" @@ -23699,13 +23941,13 @@ msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:46 #: pretix/control/templates/pretixcontrol/orders/index.html:297 -#: pretix/control/views/orders.py:314 +#: pretix/control/views/orders.py:315 msgid "Approve" msgstr "Schválit" #: pretix/control/templates/pretixcontrol/order/index.html:51 #: pretix/control/templates/pretixcontrol/orders/index.html:304 -#: pretix/control/views/orders.py:328 +#: pretix/control/views/orders.py:329 msgid "Deny" msgstr "Odmítnout" @@ -23744,7 +23986,7 @@ msgid "" msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:116 -#: pretix/control/views/orders.py:376 +#: pretix/control/views/orders.py:377 msgid "Refund for overpayment" msgstr "Vrácení přeplatku" @@ -24904,6 +25146,8 @@ msgstr "Zaplacená částka / celkem" #: pretix/control/templates/pretixcontrol/orders/index.html:194 #: pretix/control/templates/pretixcontrol/search/orders.html:80 #: pretix/control/templates/pretixcontrol/search/orders.html:82 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:265 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:269 #, python-format msgctxt "followup" msgid "TODO %(date)s" @@ -24971,13 +25215,13 @@ msgid "Select action" msgstr "Zvolte akci" #: pretix/control/templates/pretixcontrol/orders/index.html:311 -#: pretix/control/views/orders.py:360 +#: pretix/control/views/orders.py:361 #, fuzzy msgid "Refund overpaid amount" msgstr "Částka náhrady" #: pretix/control/templates/pretixcontrol/orders/index.html:319 -#: pretix/control/views/orders.py:345 +#: pretix/control/views/orders.py:346 msgid "Mark as expired if overdue" msgstr "" @@ -25491,11 +25735,11 @@ msgid "" "pretix. This will be ignored if a URL is configured." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:229 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:230 msgid "Barcode media" msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:233 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:234 msgid "" "A \"barcode medium\" can be any printed or digital representation of a " "barcode. The medium will initially be created through the sale of a product " @@ -25504,57 +25748,57 @@ msgid "" "same barcode may be re-used during the sale of a different product." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:240 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:241 msgid "Barcode media can currently only be connected to tickets." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:243 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:244 msgid "" "This subsequent reuse of the barcode is currently only supported during POS " "sales." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:260 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:261 msgid "" "This medium type can work with almost any type of NFC chip. With this " "option, only the UID of the NFC chip is used for identification." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:264 -#: pretix/control/templates/pretixcontrol/organizers/edit.html:296 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:265 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:297 msgid "NFC media can currently only be connected to gift cards." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:270 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:271 msgid "" "This method does not provide a high level of protection against abuse since " "it is possible for malicious users to clone someone's chip with the same UID." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:291 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:292 msgid "" "This medium type works only with NFC chips of the type Mifare Ultralight AES " "made by NXP. This provides a higher level of security than other approaches, " "but requires all chips to be encoded prior to use." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:318 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:319 #, fuzzy #| msgid "Known domains" msgid "Domains" msgstr "Známé domény" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:320 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:321 msgid "This dialog is intended for advanced users." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:321 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:322 msgid "" "The domain needs to be configured on your webserver before it can be used " "here." msgstr "" -#: pretix/control/templates/pretixcontrol/organizers/edit.html:377 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:378 msgid "Add domain" msgstr "Přidat doménu" @@ -26063,7 +26307,7 @@ msgid "Media type" msgstr "Typ média" #: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:63 -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:40 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:52 msgctxt "reusable_media" msgid "Connections" msgstr "Připojení" @@ -26077,7 +26321,7 @@ msgctxt "reusable_media" msgid "Medium %(id)s" msgstr "Medium #%(id)s" -#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:94 +#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:106 msgctxt "reusable_media" msgid "Medium history" msgstr "Historie média" @@ -26170,20 +26414,41 @@ msgstr "" msgid "Are you sure you want to delete the team?" msgstr "Jste si jisti, že chcete tým odstranit?" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:7 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:8 #: pretix/control/templates/pretixcontrol/organizers/team_members.html:6 msgid "Team:" msgstr "Tým:" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:9 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:10 #: pretix/control/templates/pretixcontrol/organizers/teams.html:30 msgid "Create a new team" msgstr "Vytvořit nový tým" -#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:11 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:12 msgid "You will be able to add team members in the next step." msgstr "V dalším kroku budete moci přidávat členy do týmu." +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:31 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:55 +msgid "" +"Even if a team has no access to a certain category of data, they might still " +"be able to see parts of this data when it is linked to data they can see." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:35 +msgid "" +"For example, someone with access to customer accounts will be able to see " +"some information about gift cards linked to a customer account, even if they " +"generally can't see gift cards directly." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:59 +msgid "" +"For example, someone with access to orders will be able to see some " +"information about vouchers used to create an order, even if they generally " +"can't see vouchers directly." +msgstr "" + #: pretix/control/templates/pretixcontrol/organizers/team_members.html:21 msgid "Member" msgstr "Členové" @@ -26366,92 +26631,92 @@ msgstr "Stránka %(page)s" msgid "PDF Editor" msgstr "Editor PDF" -#: pretix/control/templates/pretixcontrol/pdf/index.html:36 +#: pretix/control/templates/pretixcontrol/pdf/index.html:34 #: pretix/plugins/banktransfer/refund_export.py:47 msgid "Code" msgstr "Kód" -#: pretix/control/templates/pretixcontrol/pdf/index.html:52 +#: pretix/control/templates/pretixcontrol/pdf/index.html:50 #, fuzzy msgid "Text box" msgstr "Barva textu" -#: pretix/control/templates/pretixcontrol/pdf/index.html:59 +#: pretix/control/templates/pretixcontrol/pdf/index.html:57 #, fuzzy #| msgid "Code" msgid "QR Code" msgstr "Kód" -#: pretix/control/templates/pretixcontrol/pdf/index.html:64 +#: pretix/control/templates/pretixcontrol/pdf/index.html:62 msgid "QR code for Check-In" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:71 +#: pretix/control/templates/pretixcontrol/pdf/index.html:69 msgid "QR code for Lead Scanning" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:78 +#: pretix/control/templates/pretixcontrol/pdf/index.html:76 msgid "Other QR code" msgstr "Další QR kód" -#: pretix/control/templates/pretixcontrol/pdf/index.html:87 +#: pretix/control/templates/pretixcontrol/pdf/index.html:85 msgid "Image" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:92 +#: pretix/control/templates/pretixcontrol/pdf/index.html:90 msgid "" "You can use this to add user-uploaded pictures from questions or pictures " "generated by plugins. If you want to embed a logo or other images, use a " "custom background instead." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:93 +#: pretix/control/templates/pretixcontrol/pdf/index.html:91 msgid "Dynamic image" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:100 +#: pretix/control/templates/pretixcontrol/pdf/index.html:98 msgid "pretix Logo" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:107 +#: pretix/control/templates/pretixcontrol/pdf/index.html:105 msgid "Duplicate" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:117 +#: pretix/control/templates/pretixcontrol/pdf/index.html:115 msgid "Undo" msgstr "Zpět" -#: pretix/control/templates/pretixcontrol/pdf/index.html:121 +#: pretix/control/templates/pretixcontrol/pdf/index.html:119 msgid "Redo" msgstr "Znovu" -#: pretix/control/templates/pretixcontrol/pdf/index.html:142 +#: pretix/control/templates/pretixcontrol/pdf/index.html:140 msgid "" "This feature is only intended for advanced users. We recommend to only use " "it to copy and share ticket designs, not to modify the design source code." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:156 +#: pretix/control/templates/pretixcontrol/pdf/index.html:154 #: pretix/presale/templates/pretixpresale/giftcard/checkout.html:26 msgid "Apply" msgstr "Aplikovat" -#: pretix/control/templates/pretixcontrol/pdf/index.html:164 +#: pretix/control/templates/pretixcontrol/pdf/index.html:162 msgid "Uploading new PDF background…" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:172 +#: pretix/control/templates/pretixcontrol/pdf/index.html:170 msgid "Welcome to the PDF ticket editor!" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:174 +#: pretix/control/templates/pretixcontrol/pdf/index.html:172 msgid "" "This editor allows you to create a design for the PDF tickets of your event. " "You can upload a background PDF and then use this tool to place texts and a " "QR code on the ticket." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:185 +#: pretix/control/templates/pretixcontrol/pdf/index.html:183 msgid "" "Please note that the editor can only provide a rough preview. Some details, " "for example in text rendering, might look slightly different in the final " @@ -26459,7 +26724,7 @@ msgid "" "preview." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:199 +#: pretix/control/templates/pretixcontrol/pdf/index.html:197 msgid "" "The editor is tested with recent versions of Google Chrome, Mozilla Firefox " "and Opera. Other browsers, especially Internet Explorer or Microsoft Edge, " @@ -26467,178 +26732,178 @@ msgid "" "fonts." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:207 +#: pretix/control/templates/pretixcontrol/pdf/index.html:205 msgid "" "The editor requires JavaScript to work. Please enable JavaScript in your " "browser to continue." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:217 -#: pretix/control/templates/pretixcontrol/pdf/index.html:233 +#: pretix/control/templates/pretixcontrol/pdf/index.html:215 +#: pretix/control/templates/pretixcontrol/pdf/index.html:231 msgid "Loading…" msgstr "Načítám…" -#: pretix/control/templates/pretixcontrol/pdf/index.html:220 +#: pretix/control/templates/pretixcontrol/pdf/index.html:218 msgid "Start editing" msgstr "Spustit editování" -#: pretix/control/templates/pretixcontrol/pdf/index.html:240 +#: pretix/control/templates/pretixcontrol/pdf/index.html:238 msgid "Layout name" msgstr "Název rozložení" -#: pretix/control/templates/pretixcontrol/pdf/index.html:247 +#: pretix/control/templates/pretixcontrol/pdf/index.html:245 msgid "Preferred language" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:260 -#: pretix/control/templates/pretixcontrol/pdf/index.html:270 +#: pretix/control/templates/pretixcontrol/pdf/index.html:258 +#: pretix/control/templates/pretixcontrol/pdf/index.html:268 msgid "Upload PDF as background" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:262 +#: pretix/control/templates/pretixcontrol/pdf/index.html:260 msgid "" "You can upload a PDF to use as a custom background. The paper size will " "match the PDF." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:274 +#: pretix/control/templates/pretixcontrol/pdf/index.html:272 #, python-format msgid "max. %(size)s, smaller is better" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:282 +#: pretix/control/templates/pretixcontrol/pdf/index.html:280 msgid "Download current background" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:289 +#: pretix/control/templates/pretixcontrol/pdf/index.html:287 #, fuzzy msgid "Or choose custom paper size" msgstr "Zrušeno zákazníkem" -#: pretix/control/templates/pretixcontrol/pdf/index.html:291 +#: pretix/control/templates/pretixcontrol/pdf/index.html:289 msgid "" "To manually change the paper size, you need to create a new, empty " "background." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:299 -#: pretix/control/templates/pretixcontrol/pdf/index.html:386 -#: pretix/control/templates/pretixcontrol/pdf/index.html:428 +#: pretix/control/templates/pretixcontrol/pdf/index.html:297 +#: pretix/control/templates/pretixcontrol/pdf/index.html:384 +#: pretix/control/templates/pretixcontrol/pdf/index.html:426 msgid "Width (mm)" msgstr "Šířka (mm)" -#: pretix/control/templates/pretixcontrol/pdf/index.html:303 -#: pretix/control/templates/pretixcontrol/pdf/index.html:391 +#: pretix/control/templates/pretixcontrol/pdf/index.html:301 +#: pretix/control/templates/pretixcontrol/pdf/index.html:389 msgid "Height (mm)" msgstr "Výška (mm)" -#: pretix/control/templates/pretixcontrol/pdf/index.html:312 +#: pretix/control/templates/pretixcontrol/pdf/index.html:310 msgid "Create empty background" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:319 +#: pretix/control/templates/pretixcontrol/pdf/index.html:317 msgid "Style" msgstr "Styl" -#: pretix/control/templates/pretixcontrol/pdf/index.html:321 +#: pretix/control/templates/pretixcontrol/pdf/index.html:319 msgid "Dark" msgstr "Tmavý" -#: pretix/control/templates/pretixcontrol/pdf/index.html:322 +#: pretix/control/templates/pretixcontrol/pdf/index.html:320 msgid "Light" msgstr "Světlý" -#: pretix/control/templates/pretixcontrol/pdf/index.html:328 +#: pretix/control/templates/pretixcontrol/pdf/index.html:326 msgid "Image content" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:339 +#: pretix/control/templates/pretixcontrol/pdf/index.html:337 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_create.html:20 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_update.html:34 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:29 msgid "Content" msgstr "Obsah" -#: pretix/control/templates/pretixcontrol/pdf/index.html:348 +#: pretix/control/templates/pretixcontrol/pdf/index.html:346 #: pretix/control/templates/pretixcontrol/pdf/placeholders.html:50 msgid "Event attribute:" msgstr "Atribut akce:" -#: pretix/control/templates/pretixcontrol/pdf/index.html:353 +#: pretix/control/templates/pretixcontrol/pdf/index.html:351 #: pretix/control/templates/pretixcontrol/pdf/placeholders.html:59 msgid "Item attribute:" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:356 +#: pretix/control/templates/pretixcontrol/pdf/index.html:354 msgid "Other… (multilingual)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:357 +#: pretix/control/templates/pretixcontrol/pdf/index.html:355 msgid "Other…" msgstr "Ostatní…" -#: pretix/control/templates/pretixcontrol/pdf/index.html:367 +#: pretix/control/templates/pretixcontrol/pdf/index.html:365 msgid "Show available placeholders" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:374 +#: pretix/control/templates/pretixcontrol/pdf/index.html:372 msgid "x (mm)" msgstr "x (mm)" -#: pretix/control/templates/pretixcontrol/pdf/index.html:379 +#: pretix/control/templates/pretixcontrol/pdf/index.html:377 msgid "y (mm)" msgstr "y (mm)" -#: pretix/control/templates/pretixcontrol/pdf/index.html:398 +#: pretix/control/templates/pretixcontrol/pdf/index.html:396 msgid "Size (mm)" msgstr "Velikost (mm)" -#: pretix/control/templates/pretixcontrol/pdf/index.html:405 +#: pretix/control/templates/pretixcontrol/pdf/index.html:403 #, fuzzy #| msgid "Text color" msgid "QR color" msgstr "Barva textu" -#: pretix/control/templates/pretixcontrol/pdf/index.html:420 +#: pretix/control/templates/pretixcontrol/pdf/index.html:418 msgid "Render without whitespace" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:422 +#: pretix/control/templates/pretixcontrol/pdf/index.html:420 msgid "" "Required for consistent size across platforms. Supported on Android starting " "with pretixPRINT 2.3.3 and on Desktop with pretixSCAN 1.9.3." msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:433 +#: pretix/control/templates/pretixcontrol/pdf/index.html:431 msgid "Rotation (°)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:452 +#: pretix/control/templates/pretixcontrol/pdf/index.html:450 msgid "Font size (pt)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:457 +#: pretix/control/templates/pretixcontrol/pdf/index.html:455 msgid "Line height" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:464 +#: pretix/control/templates/pretixcontrol/pdf/index.html:462 msgid "Text color" msgstr "Barva textu" -#: pretix/control/templates/pretixcontrol/pdf/index.html:487 +#: pretix/control/templates/pretixcontrol/pdf/index.html:485 msgid "Flow multiple lines downward from specified position" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:541 +#: pretix/control/templates/pretixcontrol/pdf/index.html:539 #, fuzzy msgid "Automatically reduce font size to fit content" msgstr "Automaticky vracet peníze, pokud je to možné" -#: pretix/control/templates/pretixcontrol/pdf/index.html:547 +#: pretix/control/templates/pretixcontrol/pdf/index.html:545 msgid "Allow long words to be split (preview is not accurate)" msgstr "" -#: pretix/control/templates/pretixcontrol/pdf/index.html:558 +#: pretix/control/templates/pretixcontrol/pdf/index.html:556 #, python-format msgid "" "This layout uses new features. If you print from your device, make sure you " @@ -26855,24 +27120,24 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:483 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:266 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:124 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:124 msgid "Add a new quota" msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:487 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:128 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:128 msgid "Product settings" msgstr "Nastavení produktu" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:489 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:130 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:130 msgid "" "These settings are optional, if you leave them empty, the default values " "from the product settings will be used." msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:525 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:166 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:166 msgid "" "You can choose to either add one or more check-in lists for every date in " "your series individually, or use just one check-in list for all your dates " @@ -26886,7 +27151,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:604 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:359 -#: pretix/control/templates/pretixcontrol/subevents/detail.html:245 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:245 msgid "Add a new check-in list" msgstr "" @@ -26966,16 +27231,41 @@ msgid "" "be disabled instead." msgstr "" -#: pretix/control/templates/pretixcontrol/subevents/detail.html:10 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:9 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:13 +#, fuzzy, python-format +#| msgid "Quota: %(name)s" msgctxt "subevent" -msgid "Create date" -msgstr "Vytvořit datum" +msgid "Date: %(name)s" +msgstr "Kvóty: %(name)s" -#: pretix/control/templates/pretixcontrol/subevents/detail.html:279 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:234 +#, fuzzy +#| msgid "Partially paid" +msgid "partially canceled" +msgstr "Částečně uhrazené" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:282 +msgid "View all" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:289 +#, fuzzy +#| msgid "No archived events found." +msgid "No orders found." +msgstr "Nebyly nalezeny žádné archivované akce." + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:302 +#: pretix/control/templates/pretixcontrol/subevents/edit.html:279 msgctxt "subevent" msgid "Date history" msgstr "Historie termínů" +#: pretix/control/templates/pretixcontrol/subevents/edit.html:10 +msgctxt "subevent" +msgid "Create date" +msgstr "Vytvořit datum" + #: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:3 #: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:5 #, fuzzy @@ -28049,21 +28339,21 @@ msgstr "" msgid "The new check-in list has been created." msgstr "" -#: pretix/control/views/checkin.py:382 pretix/control/views/checkin.py:442 +#: pretix/control/views/checkin.py:382 pretix/control/views/checkin.py:443 #: pretix/control/views/discounts.py:134 pretix/control/views/discounts.py:182 -#: pretix/control/views/event.py:283 pretix/control/views/event.py:586 -#: pretix/control/views/event.py:625 pretix/control/views/event.py:822 -#: pretix/control/views/event.py:1026 pretix/control/views/event.py:1376 -#: pretix/control/views/event.py:1442 pretix/control/views/event.py:1594 +#: pretix/control/views/event.py:284 pretix/control/views/event.py:587 +#: pretix/control/views/event.py:626 pretix/control/views/event.py:823 +#: pretix/control/views/event.py:1027 pretix/control/views/event.py:1380 +#: pretix/control/views/event.py:1446 pretix/control/views/event.py:1598 #: pretix/control/views/item.py:287 pretix/control/views/item.py:334 #: pretix/control/views/item.py:794 pretix/control/views/item.py:820 #: pretix/control/views/item.py:1054 pretix/control/views/item.py:1106 #: pretix/control/views/item.py:1310 pretix/control/views/item.py:1476 #: pretix/control/views/item.py:1668 pretix/control/views/organizer.py:281 #: pretix/control/views/organizer.py:309 pretix/control/views/organizer.py:1450 -#: pretix/control/views/subevents.py:521 pretix/control/views/subevents.py:667 -#: pretix/control/views/subevents.py:1112 -#: pretix/control/views/subevents.py:1574 pretix/control/views/user.py:342 +#: pretix/control/views/subevents.py:586 pretix/control/views/subevents.py:740 +#: pretix/control/views/subevents.py:1185 +#: pretix/control/views/subevents.py:1647 pretix/control/views/user.py:342 #: pretix/control/views/user.py:861 pretix/control/views/user.py:901 #: pretix/control/views/vouchers.py:278 pretix/control/views/vouchers.py:352 #: pretix/control/views/vouchers.py:535 pretix/control/views/waitinglist.py:427 @@ -28075,11 +28365,11 @@ msgstr "" msgid "We could not save your changes. See below for details." msgstr "Vaše změny se nepodařilo uložit. Podrobnosti najdete níže." -#: pretix/control/views/checkin.py:421 pretix/control/views/checkin.py:458 +#: pretix/control/views/checkin.py:422 pretix/control/views/checkin.py:459 msgid "The requested list does not exist." msgstr "" -#: pretix/control/views/checkin.py:467 +#: pretix/control/views/checkin.py:468 msgid "The selected list has been deleted." msgstr "" @@ -28165,7 +28455,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:117 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:48 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:80 -#: pretix/presale/views/widget.py:504 +#: pretix/presale/views/widget.py:507 msgid "Sale over" msgstr "Prodej skončil" @@ -28173,7 +28463,7 @@ msgstr "Prodej skončil" #: pretix/presale/templates/pretixpresale/fragment_calendar.html:119 #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:125 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:88 -#: pretix/presale/views/widget.py:515 +#: pretix/presale/views/widget.py:518 msgid "Soon" msgstr "Brzy" @@ -28244,7 +28534,7 @@ msgstr "" #: pretix/control/views/discounts.py:260 pretix/control/views/item.py:197 #: pretix/control/views/item.py:409 pretix/control/views/item.py:543 #: pretix/control/views/organizer.py:2641 -#: pretix/control/views/organizer.py:3702 +#: pretix/control/views/organizer.py:3737 msgid "Some of the provided object ids are invalid." msgstr "" @@ -28252,7 +28542,7 @@ msgstr "" msgid "Not all discounts have been selected." msgstr "" -#: pretix/control/views/event.py:463 +#: pretix/control/views/event.py:464 #, fuzzy #| msgid "You do not have sufficient permission to perform this export." msgid "" @@ -28260,128 +28550,128 @@ msgid "" "enabled for the entire organizer account." msgstr "K provedení tohoto exportu nemáte dostatečné oprávnění." -#: pretix/control/views/event.py:480 pretix/control/views/organizer.py:717 +#: pretix/control/views/event.py:481 pretix/control/views/organizer.py:717 #, python-brace-format msgid "The plugin {} is now active, you can configure it here:" msgstr "" -#: pretix/control/views/event.py:489 pretix/control/views/organizer.py:726 +#: pretix/control/views/event.py:490 pretix/control/views/organizer.py:726 #, fuzzy, python-brace-format #| msgid "The relevant plugin is currently not active." msgid "The plugin {} is now active." msgstr "Zvolený doplněk není v současné době k aktivní." -#: pretix/control/views/event.py:554 +#: pretix/control/views/event.py:555 msgid "" "This payment provider does not exist or the respective plugin is disabled." msgstr "Tento poskytovatel plateb neexistuje nebo příslušný plugin je vypnutý." -#: pretix/control/views/event.py:861 pretix/control/views/organizer.py:362 +#: pretix/control/views/event.py:862 pretix/control/views/organizer.py:362 #: pretix/control/views/vouchers.py:562 msgid "invalid item" msgstr "neplatná položka" -#: pretix/control/views/event.py:948 +#: pretix/control/views/event.py:949 #, python-format msgid "Your order: %(code)s" msgstr "Vaše objednávka: %(code)s" -#: pretix/control/views/event.py:957 +#: pretix/control/views/event.py:958 msgid "Unknown email renderer." msgstr "" -#: pretix/control/views/event.py:973 pretix/control/views/orders.py:687 +#: pretix/control/views/event.py:974 pretix/control/views/orders.py:701 #: pretix/presale/views/order.py:1177 pretix/presale/views/order.py:1184 msgid "You requested an invalid ticket output type." msgstr "" -#: pretix/control/views/event.py:1121 +#: pretix/control/views/event.py:1122 msgid "Your shop is live now!" msgstr "" -#: pretix/control/views/event.py:1129 +#: pretix/control/views/event.py:1130 msgid "We've taken your shop down. You can re-enable it whenever you want!" msgstr "" -#: pretix/control/views/event.py:1137 +#: pretix/control/views/event.py:1138 msgid "Your shop is now in test mode!" msgstr "" -#: pretix/control/views/event.py:1154 +#: pretix/control/views/event.py:1158 msgid "" "An order could not be deleted as some constraints (e.g. data created by plug-" "ins) do not allow it." msgstr "" -#: pretix/control/views/event.py:1160 +#: pretix/control/views/event.py:1164 msgid "We've disabled test mode for you. Let's sell some real tickets!" msgstr "" -#: pretix/control/views/event.py:1182 +#: pretix/control/views/event.py:1186 msgid "This event can not be deleted." msgstr "" -#: pretix/control/views/event.py:1205 +#: pretix/control/views/event.py:1209 msgid "The event has been deleted." msgstr "" -#: pretix/control/views/event.py:1208 +#: pretix/control/views/event.py:1212 msgid "" "The event could not be deleted as some constraints (e.g. data created by " "plug-ins) do not allow it." msgstr "" -#: pretix/control/views/event.py:1224 +#: pretix/control/views/event.py:1228 #, python-brace-format msgid "" "Specifically, the following plugins still contain data depends on this " "event: {plugin_names}" msgstr "" -#: pretix/control/views/event.py:1304 pretix/control/views/orders.py:767 +#: pretix/control/views/event.py:1308 pretix/control/views/orders.py:781 msgid "The comment has been updated." msgstr "" -#: pretix/control/views/event.py:1306 pretix/control/views/orders.py:769 +#: pretix/control/views/event.py:1310 pretix/control/views/orders.py:783 msgid "Could not update the comment." msgstr "" -#: pretix/control/views/event.py:1334 pretix/control/views/main.py:362 +#: pretix/control/views/event.py:1338 pretix/control/views/main.py:362 msgid "VAT" msgstr "DPH." -#: pretix/control/views/event.py:1370 +#: pretix/control/views/event.py:1374 msgid "The new tax rule has been created." msgstr "" -#: pretix/control/views/event.py:1393 pretix/control/views/event.py:1456 -#: pretix/control/views/event.py:1502 +#: pretix/control/views/event.py:1397 pretix/control/views/event.py:1460 +#: pretix/control/views/event.py:1506 msgid "The requested tax rule does not exist." msgstr "" -#: pretix/control/views/event.py:1511 +#: pretix/control/views/event.py:1515 msgid "The selected tax rule has been deleted." msgstr "" -#: pretix/control/views/event.py:1513 +#: pretix/control/views/event.py:1517 msgid "The selected tax rule can not be deleted." msgstr "" -#: pretix/control/views/event.py:1564 +#: pretix/control/views/event.py:1568 msgid "Your event is not empty, you need to set it up manually." msgstr "" -#: pretix/control/views/event.py:1699 +#: pretix/control/views/event.py:1703 msgid "" "Your changes have been saved. You can now go on with looking at the details " "or take your event live to start selling!" msgstr "" -#: pretix/control/views/event.py:1720 +#: pretix/control/views/event.py:1724 msgid "Regular ticket" msgstr "Pravidelná vstupenka" -#: pretix/control/views/event.py:1725 +#: pretix/control/views/event.py:1729 msgid "Reduced ticket" msgstr "Zlevněná vstupenka" @@ -28488,7 +28778,7 @@ msgstr "" #: pretix/control/views/item.py:412 pretix/control/views/item.py:546 #: pretix/control/views/organizer.py:2644 -#: pretix/control/views/organizer.py:3705 +#: pretix/control/views/organizer.py:3740 msgid "Not all objects have been selected." msgstr "" @@ -28722,83 +29012,83 @@ msgstr "" msgid "Access for the selected application has been revoked." msgstr "" -#: pretix/control/views/orders.py:196 +#: pretix/control/views/orders.py:197 #, fuzzy #| msgid "We successfully received your payment. See below for details." msgid "We could not process your input. See below for details." msgstr "Úspěšně jsme obdrželi vaši platbu. Podrobnosti naleznete níže." -#: pretix/control/views/orders.py:269 +#: pretix/control/views/orders.py:270 #, python-brace-format msgid "" "Successfully executed the action \"{label}\" on {success} of {total} orders." msgstr "" -#: pretix/control/views/orders.py:689 pretix/presale/views/order.py:114 +#: pretix/control/views/orders.py:703 pretix/presale/views/order.py:114 #: pretix/presale/views/order.py:382 pretix/presale/views/order.py:1006 #: pretix/presale/views/order.py:1186 pretix/presale/views/order.py:1794 msgid "Unknown order code or not authorized to access this order." msgstr "" -#: pretix/control/views/orders.py:691 pretix/presale/views/order.py:1191 +#: pretix/control/views/orders.py:705 pretix/presale/views/order.py:1191 msgid "Ticket download is not enabled for this product." msgstr "" -#: pretix/control/views/orders.py:803 +#: pretix/control/views/orders.py:817 msgid "The order has been deleted." msgstr "" -#: pretix/control/views/orders.py:810 +#: pretix/control/views/orders.py:824 msgid "" "The order could not be deleted as some constraints (e.g. data created by " "plug-ins) do not allow it." msgstr "" -#: pretix/control/views/orders.py:818 +#: pretix/control/views/orders.py:832 msgid "Only orders created in test mode can be deleted." msgstr "" -#: pretix/control/views/orders.py:839 +#: pretix/control/views/orders.py:853 msgid "The order has been denied and is therefore now canceled." msgstr "" -#: pretix/control/views/orders.py:879 +#: pretix/control/views/orders.py:893 msgid "This payment has been canceled." msgstr "Tato platba byla zrušena." -#: pretix/control/views/orders.py:881 +#: pretix/control/views/orders.py:895 msgid "This payment can not be canceled at the moment." msgstr "Tuto platbu nelze dočasně zrušit." -#: pretix/control/views/orders.py:907 +#: pretix/control/views/orders.py:921 msgid "The refund has been canceled." msgstr "" -#: pretix/control/views/orders.py:909 +#: pretix/control/views/orders.py:923 msgid "This refund can not be canceled at the moment." msgstr "" -#: pretix/control/views/orders.py:943 +#: pretix/control/views/orders.py:957 msgid "The refund has been processed." msgstr "" -#: pretix/control/views/orders.py:945 pretix/control/views/orders.py:971 +#: pretix/control/views/orders.py:959 pretix/control/views/orders.py:985 msgid "This refund can not be processed at the moment." msgstr "" -#: pretix/control/views/orders.py:969 +#: pretix/control/views/orders.py:983 msgid "The refund has been marked as done." msgstr "" -#: pretix/control/views/orders.py:995 +#: pretix/control/views/orders.py:1009 msgid "The request has been removed. If you want, you can now inform the user." msgstr "" -#: pretix/control/views/orders.py:1002 +#: pretix/control/views/orders.py:1016 msgid "Your cancellation request" msgstr "" -#: pretix/control/views/orders.py:1003 +#: pretix/control/views/orders.py:1017 #, python-brace-format msgid "" "Hello,\n" @@ -28809,67 +29099,67 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/control/views/orders.py:1058 +#: pretix/control/views/orders.py:1072 msgid "The payment has been marked as complete." msgstr "Platba byla označena jako dokončená." -#: pretix/control/views/orders.py:1060 +#: pretix/control/views/orders.py:1074 msgid "This payment can not be confirmed at the moment." msgstr "Tuto platbu nelze v současné době potvrdit." -#: pretix/control/views/orders.py:1151 +#: pretix/control/views/orders.py:1165 msgid "" "The refund was prevented due to a refund already being processed at the same " "time. Please have a look at the order details and check if your refund is " "still necessary." msgstr "" -#: pretix/control/views/orders.py:1256 +#: pretix/control/views/orders.py:1270 #, fuzzy msgid "You entered an order in an event with a different currency." msgstr "Zadali jste objednávku, kterou se nepodařilo najít." -#: pretix/control/views/orders.py:1307 +#: pretix/control/views/orders.py:1321 msgid "" "You can not refund more than the amount of a payment that is not yet " "refunded." msgstr "" -#: pretix/control/views/orders.py:1312 +#: pretix/control/views/orders.py:1326 msgid "" "You selected a partial refund for a payment method that only supports full " "refunds." msgstr "" -#: pretix/control/views/orders.py:1342 +#: pretix/control/views/orders.py:1356 #, python-brace-format msgid "" "One of the refunds failed to be processed. You should retry to refund in a " "different way. The error message was: {}" msgstr "" -#: pretix/control/views/orders.py:1348 +#: pretix/control/views/orders.py:1362 #, python-brace-format msgid "A refund of {} has been processed." msgstr "" -#: pretix/control/views/orders.py:1352 +#: pretix/control/views/orders.py:1366 #, python-brace-format msgid "" "A refund of {} has been saved, but not yet fully executed. You can mark it " "as complete below." msgstr "" -#: pretix/control/views/orders.py:1381 +#: pretix/control/views/orders.py:1395 msgid "" "A new gift card was created. You can now send the user their gift card code." msgstr "" -#: pretix/control/views/orders.py:1389 +#: pretix/control/views/orders.py:1403 msgid "Your gift card code" msgstr "" -#: pretix/control/views/orders.py:1391 +#: pretix/control/views/orders.py:1405 #, python-brace-format msgid "" "Hello,\n" @@ -28882,164 +29172,164 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/control/views/orders.py:1402 +#: pretix/control/views/orders.py:1416 msgid "The refunds you selected do not match the selected total refund amount." msgstr "" -#: pretix/control/views/orders.py:1532 +#: pretix/control/views/orders.py:1546 msgid "The payment has been created successfully." msgstr "Platba byla úspěšně vytvořena." -#: pretix/control/views/orders.py:1546 +#: pretix/control/views/orders.py:1560 msgid "" "The order has been canceled. You can now select how you want to transfer the " "money back to the user." msgstr "" -#: pretix/control/views/orders.py:1617 pretix/control/views/orders.py:1621 +#: pretix/control/views/orders.py:1631 pretix/control/views/orders.py:1635 msgid "No VAT ID specified." msgstr "" -#: pretix/control/views/orders.py:1625 +#: pretix/control/views/orders.py:1639 msgid "No country specified." msgstr "" -#: pretix/control/views/orders.py:1629 +#: pretix/control/views/orders.py:1643 msgid "VAT ID could not be checked since this country is not supported." msgstr "" -#: pretix/control/views/orders.py:1648 +#: pretix/control/views/orders.py:1662 msgid "" "The VAT ID could not be checked, as the VAT checking service of the country " "is currently not available." msgstr "" -#: pretix/control/views/orders.py:1651 +#: pretix/control/views/orders.py:1665 msgid "This VAT ID is valid." msgstr "" -#: pretix/control/views/orders.py:1665 pretix/control/views/orders.py:1699 -#: pretix/control/views/orders.py:1731 +#: pretix/control/views/orders.py:1679 pretix/control/views/orders.py:1713 +#: pretix/control/views/orders.py:1745 msgid "Unknown invoice." msgstr "Neznámá faktura." -#: pretix/control/views/orders.py:1668 +#: pretix/control/views/orders.py:1682 msgid "Invoices may not be changed after they are created." msgstr "" -#: pretix/control/views/orders.py:1670 +#: pretix/control/views/orders.py:1684 msgid "Invoices may not be changed after they are transmitted." msgstr "" -#: pretix/control/views/orders.py:1672 pretix/control/views/orders.py:1734 +#: pretix/control/views/orders.py:1686 pretix/control/views/orders.py:1748 msgid "The invoice has already been canceled." msgstr "" -#: pretix/control/views/orders.py:1674 +#: pretix/control/views/orders.py:1688 msgid "The invoice file has already been exported." msgstr "Soubor faktury již byl exportován." -#: pretix/control/views/orders.py:1676 +#: pretix/control/views/orders.py:1690 msgid "The invoice file is too old to be regenerated." msgstr "" -#: pretix/control/views/orders.py:1678 pretix/control/views/orders.py:1736 +#: pretix/control/views/orders.py:1692 pretix/control/views/orders.py:1750 msgid "The invoice has been cleaned of personal data." msgstr "" -#: pretix/control/views/orders.py:1703 +#: pretix/control/views/orders.py:1717 msgid "" "The invoice is currently being transmitted. You can start a new attempt " "after the current one has been completed." msgstr "" -#: pretix/control/views/orders.py:1710 +#: pretix/control/views/orders.py:1724 #, fuzzy #| msgid "The invoice has been reissued." msgid "The invoice has been scheduled for retransmission." msgstr "Faktura byla vystavena znovu." -#: pretix/control/views/orders.py:1744 +#: pretix/control/views/orders.py:1758 #, fuzzy #| msgid "The order has been canceled." msgid "The invoice has been canceled." msgstr "Objednávka byla zrušena." -#: pretix/control/views/orders.py:1783 +#: pretix/control/views/orders.py:1797 msgid "The email has been queued to be sent." msgstr "" -#: pretix/control/views/orders.py:1807 pretix/presale/views/order.py:1365 +#: pretix/control/views/orders.py:1821 pretix/presale/views/order.py:1365 msgid "This invoice has not been found" msgstr "" -#: pretix/control/views/orders.py:1814 pretix/presale/views/order.py:1372 +#: pretix/control/views/orders.py:1828 pretix/presale/views/order.py:1372 msgid "The invoice file is no longer stored on the server." msgstr "" -#: pretix/control/views/orders.py:1819 pretix/presale/views/order.py:1377 +#: pretix/control/views/orders.py:1833 pretix/presale/views/order.py:1377 msgid "" "The invoice file has not yet been generated, we will generate it for you " "now. Please try again in a few seconds." msgstr "" -#: pretix/control/views/orders.py:1847 +#: pretix/control/views/orders.py:1861 msgid "The payment term has been changed." msgstr "Termín platby byl změněn." -#: pretix/control/views/orders.py:1852 pretix/control/views/orders.py:1909 +#: pretix/control/views/orders.py:1866 pretix/control/views/orders.py:1923 msgid "" "We were not able to process the request completely as the server was too " "busy." msgstr "" -#: pretix/control/views/orders.py:1860 +#: pretix/control/views/orders.py:1874 msgid "This action is only allowed for pending orders." msgstr "" -#: pretix/control/views/orders.py:1915 +#: pretix/control/views/orders.py:1929 msgid "This action is only allowed for canceled orders." msgstr "" -#: pretix/control/views/orders.py:2174 pretix/presale/views/order.py:1661 +#: pretix/control/views/orders.py:2188 pretix/presale/views/order.py:1661 msgid "An error occurred. Please see the details below." msgstr "" -#: pretix/control/views/orders.py:2182 +#: pretix/control/views/orders.py:2196 msgid "The order has been changed and the user has been notified." msgstr "" -#: pretix/control/views/orders.py:2184 pretix/control/views/orders.py:2320 -#: pretix/control/views/orders.py:2357 pretix/presale/views/order.py:1697 +#: pretix/control/views/orders.py:2198 pretix/control/views/orders.py:2334 +#: pretix/control/views/orders.py:2371 pretix/presale/views/order.py:1697 msgid "The order has been changed." msgstr "" -#: pretix/control/views/orders.py:2211 pretix/presale/checkoutflow.py:963 +#: pretix/control/views/orders.py:2225 pretix/presale/checkoutflow.py:964 #: pretix/presale/views/order.py:845 pretix/presale/views/order.py:981 msgid "" "We had difficulties processing your input. Please review the errors below." msgstr "" -#: pretix/control/views/orders.py:2322 +#: pretix/control/views/orders.py:2336 msgid "Nothing about the order had to be changed." msgstr "" -#: pretix/control/views/orders.py:2403 pretix/plugins/sendmail/views.py:176 +#: pretix/control/views/orders.py:2417 pretix/plugins/sendmail/views.py:176 msgid "We could not send the email. See below for details." msgstr "" -#: pretix/control/views/orders.py:2419 pretix/control/views/orders.py:2483 +#: pretix/control/views/orders.py:2433 pretix/control/views/orders.py:2497 #: pretix/plugins/sendmail/views.py:204 pretix/plugins/sendmail/views.py:671 #, python-brace-format msgid "Subject: {subject}" msgstr "Předmět: {subject}" -#: pretix/control/views/orders.py:2437 pretix/control/views/orders.py:2502 +#: pretix/control/views/orders.py:2451 pretix/control/views/orders.py:2516 #, python-brace-format msgid "Your message has been queued and will be sent to {}." msgstr "" -#: pretix/control/views/orders.py:2555 pretix/presale/views/order.py:1151 +#: pretix/control/views/orders.py:2569 pretix/presale/views/order.py:1151 msgid "" "This link is no longer valid. Please go back, refresh the page, and try " "again." @@ -29047,19 +29337,19 @@ msgstr "" "Tento odkaz již není platný. Vraťte se prosím o krok zpět, znovu načtěte " "stránku a zkuste to znovu." -#: pretix/control/views/orders.py:2636 +#: pretix/control/views/orders.py:2650 msgid "There is no order with the given order code." msgstr "" -#: pretix/control/views/orders.py:2745 pretix/control/views/organizer.py:2084 +#: pretix/control/views/orders.py:2759 pretix/control/views/organizer.py:2084 msgid "The selected exporter was not found." msgstr "" -#: pretix/control/views/orders.py:2755 pretix/control/views/organizer.py:2094 +#: pretix/control/views/orders.py:2769 pretix/control/views/organizer.py:2094 msgid "There was a problem processing your input. See below for error details." msgstr "" -#: pretix/control/views/orders.py:2792 pretix/control/views/organizer.py:2130 +#: pretix/control/views/orders.py:2806 pretix/control/views/organizer.py:2130 #, fuzzy #| msgid "You do not have sufficient permission to perform this export." msgid "" @@ -29067,7 +29357,7 @@ msgid "" "therefore you cannot change it." msgstr "K provedení tohoto exportu nemáte dostatečné oprávnění." -#: pretix/control/views/orders.py:2801 pretix/control/views/organizer.py:2139 +#: pretix/control/views/orders.py:2815 pretix/control/views/organizer.py:2139 #, fuzzy #| msgid "You do not have sufficient permission to perform this export." msgid "" @@ -29075,23 +29365,23 @@ msgid "" "therefore you cannot schedule it." msgstr "K provedení tohoto exportu nemáte dostatečné oprávnění." -#: pretix/control/views/orders.py:2817 pretix/control/views/organizer.py:2155 +#: pretix/control/views/orders.py:2831 pretix/control/views/organizer.py:2155 #, python-brace-format msgid "" "Your export schedule has been saved. The next export will start around " "{datetime}." msgstr "" -#: pretix/control/views/orders.py:2822 pretix/control/views/organizer.py:2160 +#: pretix/control/views/orders.py:2836 pretix/control/views/organizer.py:2160 msgid "Your export schedule has been saved, but no next export is planned." msgstr "" -#: pretix/control/views/orders.py:2867 pretix/control/views/organizer.py:2206 +#: pretix/control/views/orders.py:2881 pretix/control/views/organizer.py:2206 #, python-brace-format msgid "Export: {title}" msgstr "" -#: pretix/control/views/orders.py:2868 pretix/control/views/organizer.py:2208 +#: pretix/control/views/orders.py:2882 pretix/control/views/organizer.py:2208 #, python-brace-format msgid "" "Hello,\n" @@ -29099,25 +29389,25 @@ msgid "" "attached to this email, you can find a new scheduled report for {name}." msgstr "" -#: pretix/control/views/orders.py:2974 pretix/control/views/organizer.py:2342 +#: pretix/control/views/orders.py:2988 pretix/control/views/organizer.py:2342 msgid "" "Your export is queued to start soon. The results will be send via email. " "Depending on system load and type and size of export, this may take a few " "minutes." msgstr "" -#: pretix/control/views/orders.py:3061 pretix/control/views/orders.py:3142 +#: pretix/control/views/orders.py:3075 pretix/control/views/orders.py:3156 msgid "All orders have been canceled." msgstr "" -#: pretix/control/views/orders.py:3063 pretix/control/views/orders.py:3144 +#: pretix/control/views/orders.py:3077 pretix/control/views/orders.py:3158 #, python-brace-format msgid "" "The orders have been canceled. An error occurred with {count} orders, please " "check all uncanceled orders." msgstr "" -#: pretix/control/views/orders.py:3091 pretix/control/views/orders.py:3165 +#: pretix/control/views/orders.py:3105 pretix/control/views/orders.py:3179 msgid "Your input was not valid." msgstr "" @@ -29195,11 +29485,11 @@ msgstr "" #: pretix/control/views/organizer.py:2724 #: pretix/control/views/organizer.py:2759 #: pretix/control/views/organizer.py:2833 -#: pretix/control/views/organizer.py:2875 -#: pretix/control/views/organizer.py:2955 -#: pretix/control/views/organizer.py:3005 -#: pretix/control/views/organizer.py:3567 -#: pretix/control/views/organizer.py:3611 +#: pretix/control/views/organizer.py:2877 +#: pretix/control/views/organizer.py:2957 +#: pretix/control/views/organizer.py:3007 +#: pretix/control/views/organizer.py:3602 +#: pretix/control/views/organizer.py:3646 msgid "Your changes could not be saved." msgstr "Vaše změny nebyly uloženy." @@ -29360,9 +29650,9 @@ msgid "The order of properties has been updated." msgstr "Datum následné kontroly objednávky bylo aktualizováno." #: pretix/control/views/organizer.py:2789 -#: pretix/control/views/organizer.py:2905 -#: pretix/control/views/organizer.py:3035 -#: pretix/control/views/organizer.py:3304 +#: pretix/control/views/organizer.py:2907 +#: pretix/control/views/organizer.py:3037 +#: pretix/control/views/organizer.py:3306 msgid "The selected object has been deleted." msgstr "" @@ -29370,47 +29660,47 @@ msgstr "" msgid "The provider has been created." msgstr "Poskytovatel byl vytvořen." -#: pretix/control/views/organizer.py:2944 +#: pretix/control/views/organizer.py:2946 #, python-brace-format msgid "" "The SSO client has been created. Please note down the following client " "secret, it will never be shown again: {secret}" msgstr "" -#: pretix/control/views/organizer.py:2994 +#: pretix/control/views/organizer.py:2996 #, python-brace-format msgid "" "Your changes have been saved. Please note down the following client secret, " "it will never be shown again: {secret}" msgstr "" -#: pretix/control/views/organizer.py:3104 +#: pretix/control/views/organizer.py:3106 msgid "" "We've sent the customer an email with further instructions on resetting your " "password." msgstr "" -#: pretix/control/views/organizer.py:3369 +#: pretix/control/views/organizer.py:3371 msgid "The customer account has been anonymized." msgstr "" -#: pretix/control/views/organizer.py:3639 +#: pretix/control/views/organizer.py:3674 #, fuzzy msgid "This channel can not be deleted." msgstr "Tuto operaci nelze vrátit zpět." -#: pretix/control/views/organizer.py:3644 +#: pretix/control/views/organizer.py:3679 #, fuzzy msgid "The selected sales channel has been deleted." msgstr "Vybraná sleva byla smazána." -#: pretix/control/views/organizer.py:3646 +#: pretix/control/views/organizer.py:3681 msgid "" "The channel could not be deleted as some constraints (e.g. data created by " "plug-ins) did not allow it." msgstr "" -#: pretix/control/views/organizer.py:3671 +#: pretix/control/views/organizer.py:3706 #, fuzzy msgid "The order of sales channels has been updated." msgstr "Datum následné kontroly objednávky bylo aktualizováno." @@ -29436,57 +29726,58 @@ msgstr "" msgid "The selected data was deleted successfully." msgstr "" -#: pretix/control/views/subevents.py:168 pretix/control/views/subevents.py:530 +#: pretix/control/views/subevents.py:174 pretix/control/views/subevents.py:526 +#: pretix/control/views/subevents.py:595 msgctxt "subevent" msgid "The requested date does not exist." msgstr "" -#: pretix/control/views/subevents.py:172 pretix/control/views/subevents.py:184 +#: pretix/control/views/subevents.py:178 pretix/control/views/subevents.py:190 msgctxt "subevent" msgid "A date can not be deleted if orders already have been placed." msgstr "" -#: pretix/control/views/subevents.py:203 +#: pretix/control/views/subevents.py:209 msgctxt "subevent" msgid "" "The date could not be deleted as some constraints (e.g. data created by plug-" "ins) did not allow it. The date was disabled instead." msgstr "" -#: pretix/control/views/subevents.py:207 +#: pretix/control/views/subevents.py:213 msgctxt "subevent" msgid "The selected date has been deleted." msgstr "" -#: pretix/control/views/subevents.py:631 +#: pretix/control/views/subevents.py:704 msgctxt "subevent" msgid "The new date has been created." msgstr "" -#: pretix/control/views/subevents.py:708 +#: pretix/control/views/subevents.py:781 msgctxt "subevent" msgid "The selected dates have been disabled." msgstr "" -#: pretix/control/views/subevents.py:721 +#: pretix/control/views/subevents.py:794 msgctxt "subevent" msgid "The selected dates have been enabled." msgstr "" -#: pretix/control/views/subevents.py:750 +#: pretix/control/views/subevents.py:823 msgctxt "subevent" msgid "The selected dates have been deleted or disabled." msgstr "" -#: pretix/control/views/subevents.py:938 +#: pretix/control/views/subevents.py:1011 msgid "Please do not create more than 100.000 dates at once." msgstr "" -#: pretix/control/views/subevents.py:967 +#: pretix/control/views/subevents.py:1040 msgid "All dates would be skipped because they conflict with existing dates." msgstr "" -#: pretix/control/views/subevents.py:1103 +#: pretix/control/views/subevents.py:1176 #, python-brace-format msgctxt "subevent" msgid "{} new dates have been created." @@ -29506,6 +29797,12 @@ msgstr "" msgid "Voucher {}" msgstr "" +#: pretix/control/views/typeahead.py:179 pretix/control/views/typeahead.py:180 +#, fuzzy +#| msgid "Go to event" +msgid "No event" +msgstr "Jít na událost" + #: pretix/control/views/user.py:169 msgid "The password you entered was invalid, please try again." msgstr "" @@ -33584,50 +33881,50 @@ msgstr "Jako vstupní kontrolní zařízení použijte prohlížeč." msgid "Web Check-in" msgstr "Check-in přes web" -#: pretix/presale/checkoutflow.py:119 +#: pretix/presale/checkoutflow.py:120 msgctxt "checkoutflow" msgid "Step" msgstr "Krok" -#: pretix/presale/checkoutflow.py:251 +#: pretix/presale/checkoutflow.py:252 msgctxt "checkoutflow" msgid "Customer account" msgstr "Účet zákazníka" -#: pretix/presale/checkoutflow.py:338 +#: pretix/presale/checkoutflow.py:339 msgid "We failed to process your authentication request, please try again." msgstr "" "Váš požadavek na ověření se nám nepodařilo zpracovat, zkuste to prosím znovu." -#: pretix/presale/checkoutflow.py:401 +#: pretix/presale/checkoutflow.py:402 msgctxt "checkoutflow" msgid "Membership" msgstr "Členství" -#: pretix/presale/checkoutflow.py:449 pretix/presale/checkoutflow.py:470 +#: pretix/presale/checkoutflow.py:450 pretix/presale/checkoutflow.py:471 msgid "" "Your cart includes a product that requires an active membership to be " "selected." msgstr "Váš košík obsahuje produkt, který vyžaduje aktivní členství." -#: pretix/presale/checkoutflow.py:489 +#: pretix/presale/checkoutflow.py:490 msgctxt "checkoutflow" msgid "Add-on products" msgstr "Doplňkové produkty" -#: pretix/presale/checkoutflow.py:696 pretix/presale/checkoutflow.py:704 +#: pretix/presale/checkoutflow.py:697 pretix/presale/checkoutflow.py:705 #: pretix/presale/views/cart.py:195 pretix/presale/views/cart.py:200 #: pretix/presale/views/cart.py:218 pretix/presale/views/cart.py:231 #: pretix/presale/views/order.py:1582 pretix/presale/views/order.py:1590 msgid "Please enter numbers only." msgstr "Zadávejte prosím pouze čísla." -#: pretix/presale/checkoutflow.py:778 +#: pretix/presale/checkoutflow.py:779 msgctxt "checkoutflow" msgid "Your information" msgstr "Osobní údaje" -#: pretix/presale/checkoutflow.py:1012 +#: pretix/presale/checkoutflow.py:1013 msgid "" "Unfortunately, based on the invoice address you entered, we're not able to " "sell you the selected products for tax-related legal reasons." @@ -33635,7 +33932,7 @@ msgstr "" "Na základě zadané fakturní adresy vám bohužel nemůžeme vybrané produkty " "prodat z daňově právních důvodů." -#: pretix/presale/checkoutflow.py:1018 +#: pretix/presale/checkoutflow.py:1019 msgid "" "Due to the invoice address you entered, we need to apply a different tax " "rate to your purchase and the price of the products in your cart has changed " @@ -33644,30 +33941,30 @@ msgstr "" "Vzhledem k vámi zadané fakturační adrese musíme na váš nákup uplatnit jinou " "sazbu daně a ceny produktů ve vašem košíku se odpovídajícím způsobem změnily." -#: pretix/presale/checkoutflow.py:1042 pretix/presale/checkoutflow.py:1048 +#: pretix/presale/checkoutflow.py:1043 pretix/presale/checkoutflow.py:1049 msgid "Please enter a valid email address." msgstr "Zadejte prosím platnou e-mailovou adresu." -#: pretix/presale/checkoutflow.py:1055 +#: pretix/presale/checkoutflow.py:1056 msgid "Please enter your invoicing address." msgstr "Zadejte prosím svou adresu pro vystavení faktury." -#: pretix/presale/checkoutflow.py:1059 +#: pretix/presale/checkoutflow.py:1060 msgid "Please enter your name." msgstr "Zadejte prosím své jméno." -#: pretix/presale/checkoutflow.py:1094 pretix/presale/checkoutflow.py:1099 -#: pretix/presale/checkoutflow.py:1104 pretix/presale/checkoutflow.py:1109 -#: pretix/presale/checkoutflow.py:1114 +#: pretix/presale/checkoutflow.py:1095 pretix/presale/checkoutflow.py:1100 +#: pretix/presale/checkoutflow.py:1105 pretix/presale/checkoutflow.py:1110 +#: pretix/presale/checkoutflow.py:1115 msgid "Please fill in answers to all required questions." msgstr "Vyplňte odpovědi na všechny povinné otázky." -#: pretix/presale/checkoutflow.py:1277 +#: pretix/presale/checkoutflow.py:1278 msgctxt "checkoutflow" msgid "Payment" msgstr "Platba" -#: pretix/presale/checkoutflow.py:1388 +#: pretix/presale/checkoutflow.py:1389 #, python-brace-format msgid "" "Your payment method has been applied, but {} still need to be paid. Please " @@ -33676,26 +33973,26 @@ msgstr "" "Váš způsob platby byl použitý, ale ještě je třeba zaplatit {}. Zvolte prosím " "způsob platby pro zbývající část." -#: pretix/presale/checkoutflow.py:1413 pretix/presale/views/order.py:733 +#: pretix/presale/checkoutflow.py:1414 pretix/presale/views/order.py:733 msgid "Please select a payment method." msgstr "Zvolte prosím způsob platby." -#: pretix/presale/checkoutflow.py:1445 pretix/presale/checkoutflow.py:1465 -#: pretix/presale/checkoutflow.py:1476 +#: pretix/presale/checkoutflow.py:1446 pretix/presale/checkoutflow.py:1466 +#: pretix/presale/checkoutflow.py:1477 msgid "Please select a payment method to proceed." msgstr "K pokračování vyberte způsob platby." -#: pretix/presale/checkoutflow.py:1481 pretix/presale/views/order.py:489 +#: pretix/presale/checkoutflow.py:1482 pretix/presale/views/order.py:489 #: pretix/presale/views/order.py:559 msgid "The payment information you entered was incomplete." msgstr "Zadané platební údaje jsou neúplné." -#: pretix/presale/checkoutflow.py:1526 +#: pretix/presale/checkoutflow.py:1527 msgctxt "checkoutflow" msgid "Review order" msgstr "Kontrola objednávky" -#: pretix/presale/checkoutflow.py:1624 +#: pretix/presale/checkoutflow.py:1625 msgid "You need to check all checkboxes on the bottom of the page." msgstr "Je třeba označit všechna políčka v dolní části stránky." @@ -34616,7 +34913,7 @@ msgstr "PLNĚ OBSAZENO" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:105 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:31 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:69 -#: pretix/presale/views/widget.py:485 +#: pretix/presale/views/widget.py:488 msgid "Reserved" msgstr "Rezervováno" @@ -35209,7 +35506,7 @@ msgstr "Zobrazit následující týden, %(week)s" #: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:34 #: pretix/presale/templates/pretixpresale/organizers/index.html:93 -#: pretix/presale/views/widget.py:496 +#: pretix/presale/views/widget.py:499 msgid "More info" msgstr "Další informace" @@ -35243,12 +35540,12 @@ msgid "Choose date to book a ticket" msgstr "Zvolte datum pro rezervaci vstupenky" #: pretix/presale/templates/pretixpresale/event/index.html:155 -#: pretix/presale/views/waiting.py:146 pretix/presale/views/widget.py:836 +#: pretix/presale/views/waiting.py:146 pretix/presale/views/widget.py:839 msgid "The booking period for this event is over." msgstr "Rezervační období pro tuto akci skončilo." #: pretix/presale/templates/pretixpresale/event/index.html:163 -#: pretix/presale/views/widget.py:838 +#: pretix/presale/views/widget.py:841 #, python-format msgid "The booking period for this event will start on %(date)s at %(time)s." msgstr "Rezervační období pro tuto akci začíná v %(date)s) v %(time)s." @@ -35385,7 +35682,7 @@ msgstr "" "odkaz. E-mail s odkazem jsme vám zaslali také na uvedenou e-mailovou adresu." #: pretix/presale/templates/pretixpresale/event/order.html:75 -#: pretix/presale/templates/pretixpresale/event/position.html:18 +#: pretix/presale/templates/pretixpresale/event/position.html:19 msgid "View in backend" msgstr "Zobrazit v backendu" @@ -35450,13 +35747,13 @@ msgstr "" "až 14 dní, než se objeví na vašem výpisu." #: pretix/presale/templates/pretixpresale/event/order.html:199 -#: pretix/presale/templates/pretixpresale/event/position.html:33 +#: pretix/presale/templates/pretixpresale/event/position.html:34 msgid "Change ordered items" msgstr "Změnit objednané položky" #: pretix/presale/templates/pretixpresale/event/order.html:200 #: pretix/presale/templates/pretixpresale/event/order.html:291 -#: pretix/presale/templates/pretixpresale/event/position.html:34 +#: pretix/presale/templates/pretixpresale/event/position.html:35 msgid "Change details" msgstr "Změnit detaily" @@ -35756,23 +36053,23 @@ msgstr "" msgid "Scan the QR code with your banking app" msgstr "Naskenujte QR kód svou bankovní aplikací" -#: pretix/presale/templates/pretixpresale/event/position.html:7 +#: pretix/presale/templates/pretixpresale/event/position.html:8 msgid "Registration details" msgstr "Přihlašovací údaje" -#: pretix/presale/templates/pretixpresale/event/position.html:10 +#: pretix/presale/templates/pretixpresale/event/position.html:11 msgid "Your registration" msgstr "Vaše registrace" -#: pretix/presale/templates/pretixpresale/event/position.html:31 +#: pretix/presale/templates/pretixpresale/event/position.html:32 msgid "Your items" msgstr "Vaše produkty" -#: pretix/presale/templates/pretixpresale/event/position.html:46 +#: pretix/presale/templates/pretixpresale/event/position.html:47 msgid "Additional information" msgstr "Další informace" -#: pretix/presale/templates/pretixpresale/event/position.html:51 +#: pretix/presale/templates/pretixpresale/event/position.html:52 #, python-format msgid "" "This order is managed for you by %(email)s. Please contact them for any " @@ -35782,12 +36079,12 @@ msgstr "" "týkajících se platby, zrušení nebo změn této objednávky je prosím " "kontaktujte." -#: pretix/presale/templates/pretixpresale/event/position.html:63 +#: pretix/presale/templates/pretixpresale/event/position.html:64 msgctxt "action" msgid "Change your ticket" msgstr "Změna vstupenky" -#: pretix/presale/templates/pretixpresale/event/position.html:68 +#: pretix/presale/templates/pretixpresale/event/position.html:69 msgid "" "If you want to make changes to the components of your ticket, you can click " "on the following button." @@ -35795,7 +36092,7 @@ msgstr "" "Pokud chcete provést změny v součástech vstupenky, můžete kliknout na " "následující tlačítko." -#: pretix/presale/templates/pretixpresale/event/position.html:73 +#: pretix/presale/templates/pretixpresale/event/position.html:74 #, python-format msgid "" "You can only make some changes to this ticket yourself. For additional " @@ -35805,7 +36102,7 @@ msgstr "" "Některé změny v této vstupence můžete provést sami. Pro další změny se " "prosím obraťte na osobu, která vstupenku zakoupila (%(email)s)." -#: pretix/presale/templates/pretixpresale/event/position.html:82 +#: pretix/presale/templates/pretixpresale/event/position.html:83 #: pretix/presale/templates/pretixpresale/event/position_change.html:5 #: pretix/presale/templates/pretixpresale/event/position_change.html:10 #: pretix/presale/templates/pretixpresale/event/position_change_confirm.html:6 @@ -36004,7 +36301,7 @@ msgstr "(pokračuje)" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:94 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:14 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:58 -#: pretix/presale/views/widget.py:470 +#: pretix/presale/views/widget.py:473 msgid "Few tickets left" msgstr "Zbývá posledních pár vstupenek" @@ -36012,7 +36309,7 @@ msgstr "Zbývá posledních pár vstupenek" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:97 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:19 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:61 -#: pretix/presale/views/widget.py:475 +#: pretix/presale/views/widget.py:478 msgctxt "available_event_in_list" msgid "Buy now" msgstr "Koupit nyní" @@ -36025,7 +36322,7 @@ msgstr "Koupit nyní" #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:44 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:63 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:78 -#: pretix/presale/views/widget.py:477 pretix/presale/views/widget.py:500 +#: pretix/presale/views/widget.py:480 pretix/presale/views/widget.py:503 msgid "Book now" msgstr "Rezervovat nyní" @@ -36033,7 +36330,7 @@ msgstr "Rezervovat nyní" #: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:111 #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:38 #: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:74 -#: pretix/presale/views/widget.py:492 +#: pretix/presale/views/widget.py:495 msgid "Fully booked" msgstr "vyprodáno" @@ -36278,7 +36575,7 @@ msgstr "Opravdu chcete ze svého účtu odstranit následující adresu?" #: pretix/presale/templates/pretixpresale/organizers/customer_addresses.html:5 #: pretix/presale/templates/pretixpresale/organizers/customer_addresses.html:11 -#: pretix/presale/views/customer.py:380 +#: pretix/presale/views/customer.py:382 msgid "Addresses" msgstr "Adresy" @@ -36426,7 +36723,7 @@ msgstr "Opravdu chcete ze svého účtu smazat následující profil?" #: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:5 #: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:11 -#: pretix/presale/views/customer.py:386 +#: pretix/presale/views/customer.py:388 msgid "Attendee profiles" msgstr "Profily účastníků" @@ -36558,7 +36855,7 @@ msgid "The products have been successfully added to your cart." msgstr "Produkty byly úspěšně přidány do košíku." #: pretix/presale/views/cart.py:626 pretix/presale/views/event.py:543 -#: pretix/presale/views/widget.py:428 +#: pretix/presale/views/widget.py:431 msgid "Tickets for this event cannot be purchased on this sales channel." msgstr "Vstupenky na tuto akci nelze zakoupit v tomto prodejním kanálu." @@ -36590,7 +36887,7 @@ msgstr "" "odkazu v e-mailu, který jsme vám poslali." #: pretix/presale/views/customer.py:268 pretix/presale/views/customer.py:271 -#: pretix/presale/views/customer.py:625 pretix/presale/views/customer.py:631 +#: pretix/presale/views/customer.py:627 pretix/presale/views/customer.py:633 msgid "You clicked an invalid link." msgstr "Klikli jste na chybný odkaz." @@ -36598,12 +36895,12 @@ msgstr "Klikli jste na chybný odkaz." msgid "Your new password has been set! You can now use it to log in." msgstr "Vaše nové heslo bylo uloženo! Nyní se jím můžete přihlásit." -#: pretix/presale/views/customer.py:333 +#: pretix/presale/views/customer.py:335 msgid "" "We've sent you an email with further instructions on resetting your password." msgstr "Poslali jsme vám e-mail s dalšími instrukcemi k obnovení hesla." -#: pretix/presale/views/customer.py:593 +#: pretix/presale/views/customer.py:595 msgid "" "Your changes have been saved. We've sent you an email with a link to update " "your email address. The email address of your account will be changed as " @@ -36613,17 +36910,17 @@ msgstr "" "vaší e-mailové adresy. E-mailová adresa vašeho účtu bude změněna, jakmile na " "tento odkaz kliknete." -#: pretix/presale/views/customer.py:646 +#: pretix/presale/views/customer.py:648 msgid "" "Your email address has not been updated since the address is already in use " "for another customer account." msgstr "" -#: pretix/presale/views/customer.py:649 +#: pretix/presale/views/customer.py:651 msgid "Your email address has been updated." msgstr "Vaše e-mailová adresa byla aktualizována." -#: pretix/presale/views/customer.py:866 pretix/presale/views/customer.py:877 +#: pretix/presale/views/customer.py:868 pretix/presale/views/customer.py:879 #, python-brace-format msgid "" "We were unable to use your login since the email address {email} is already " @@ -36845,42 +37142,42 @@ msgid "" msgstr "" "Děkujeme mnohokrát! Vaše místo na čekací listině přidělíme někomu jinému." -#: pretix/presale/views/widget.py:423 +#: pretix/presale/views/widget.py:426 msgid "This ticket shop is currently disabled." msgstr "Tento prodej vstupenek je v současné době vypnutý." -#: pretix/presale/views/widget.py:437 +#: pretix/presale/views/widget.py:440 msgid "The selected date does not exist in this event series." msgstr "Vybrané datum v této řadě akcí neexistuje." -#: pretix/presale/views/widget.py:444 +#: pretix/presale/views/widget.py:447 #, fuzzy #| msgid "The selected seat \"{seat}\" is not available." msgid "The selected date is not available." msgstr "Vybrané místo „{seat}“ není k dispozici." -#: pretix/presale/views/widget.py:452 +#: pretix/presale/views/widget.py:455 msgid "This is not an event series." msgstr "" -#: pretix/presale/views/widget.py:508 +#: pretix/presale/views/widget.py:511 #, python-format msgid "from %(start_date)s" msgstr "od %(start_date)s" -#: pretix/settings.py:862 +#: pretix/settings.py:863 msgid "User profile only" msgstr "Pouze profil uživatele" -#: pretix/settings.py:863 +#: pretix/settings.py:864 msgid "Read access" msgstr "Přístup ke čtení" -#: pretix/settings.py:864 +#: pretix/settings.py:865 msgid "Write access" msgstr "Přístup k zápisu" -#: pretix/settings.py:875 +#: pretix/settings.py:876 msgid "Kosovo" msgstr "Kosovo" @@ -36933,9 +37230,6 @@ msgstr "Kosovo" #~ msgid "Can manage customer accounts" #~ msgstr "Umí spravovat účty zákazníků" -#~ msgid "Can manage reusable media" -#~ msgstr "Umí zacházet s opakovaně použitelnými médii" - #~ msgid "Can manage gift cards" #~ msgstr "Umí spravovat dárkové karty" @@ -37360,9 +37654,6 @@ msgstr "Kosovo" #~ msgid "E-Mail notification" #~ msgstr "Oznámení e-mailem" -#~ msgid "Invoice recipient e-mail" -#~ msgstr "E-mail příjemce faktury" - #~ msgid "E-mail address (repeated)" #~ msgstr "Opakujte e-mailovou adresu" diff --git a/src/pretix/locale/cs/LC_MESSAGES/djangojs.po b/src/pretix/locale/cs/LC_MESSAGES/djangojs.po index b072e7af1..74bca0e64 100644 --- a/src/pretix/locale/cs/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/cs/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-27 14:47+0000\n" +"POT-Creation-Date: 2026-06-28 14:44+0000\n" "PO-Revision-Date: 2026-01-08 04:00+0000\n" "Last-Translator: Jiří Pastrňák \n" "Language-Team: Czech \n" "Language-Team: Welsh

{% else %}

{% trans "Cookies not supported" %}

diff --git a/src/pretix/presale/views/event.py b/src/pretix/presale/views/event.py index d235e88af..355beed2f 100644 --- a/src/pretix/presale/views/event.py +++ b/src/pretix/presale/views/event.py @@ -536,7 +536,6 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView): **pass_through_url_params, }) }) - r._csp_ignore = True return r if not request.event.all_sales_channels and request.sales_channel.identifier not in (s.identifier for s in request.event.limit_sales_channels.all()): diff --git a/src/pretix/presale/views/waiting.py b/src/pretix/presale/views/waiting.py index b2b101979..e135e3f33 100644 --- a/src/pretix/presale/views/waiting.py +++ b/src/pretix/presale/views/waiting.py @@ -125,7 +125,6 @@ class WaitingView(EventViewMixin, FormView): request.event, "presale:event.waitinglist", kwargs={'cart_namespace': kwargs.get('cart_namespace')} ) + '?' + url_replace(request, 'require_cookie', '', 'iframe', '', 'locale', request.GET.get('locale', get_language_without_region())) }) - r._csp_ignore = True return r if not self.itemvars: diff --git a/src/pretix/static/pretixbase/js/framebreak.js b/src/pretix/static/pretixbase/js/framebreak.js new file mode 100644 index 000000000..1beab5d7a --- /dev/null +++ b/src/pretix/static/pretixbase/js/framebreak.js @@ -0,0 +1,3 @@ +// Attempt to auto-open page in new tab. Will be ignored by most browser's popup blockers anyways, though. +var url = JSON.parse(document.getElementById('framebreak-url').innerText) +window.open(url) -- 2.52.0 From 6eebaaa56355d5e7afcd58dd2024096fa3d1f0f8 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 29 Jun 2026 09:47:35 +0200 Subject: [PATCH 88/96] [SECURITY] Hardening for user impersonation feature (CVE-2026-13602) --------- Co-authored-by: Mira Weller --- src/pretix/control/middleware.py | 2 +- src/pretix/control/views/users.py | 34 ++++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/pretix/control/middleware.py b/src/pretix/control/middleware.py index 4c77671ab..8b130edd2 100644 --- a/src/pretix/control/middleware.py +++ b/src/pretix/control/middleware.py @@ -212,7 +212,7 @@ class AuditLogMiddleware: if request.path.startswith(get_script_prefix() + 'control') and request.user.is_authenticated: if getattr(request.user, "is_hijacked", False): hijack_history = request.session.get('hijack_history', False) - hijacker = get_object_or_404(User, pk=hijack_history[0]) + hijacker = get_object_or_404(User, pk=hijack_history[0]["user"]) ss = hijacker.get_active_staff_session(request.session.get('hijacker_session')) if ss: ss.logs.create( diff --git a/src/pretix/control/views/users.py b/src/pretix/control/views/users.py index 207d852e2..cc3f598da 100644 --- a/src/pretix/control/views/users.py +++ b/src/pretix/control/views/users.py @@ -19,19 +19,22 @@ # You should have received a copy of the GNU Affero General Public License along with this program. If not, see # . # +import hmac import json from contextlib import contextmanager from django.conf import settings from django.contrib import messages from django.contrib.auth import ( - BACKEND_SESSION_KEY, get_user_model, load_backend, login, + BACKEND_SESSION_KEY, HASH_SESSION_KEY, get_user_model, load_backend, login, + logout, ) from django.contrib.auth.mixins import LoginRequiredMixin +from django.contrib.auth.views import redirect_to_login from django.db import transaction from django.shortcuts import get_object_or_404, redirect from django.urls import reverse -from django.utils.crypto import get_random_string +from django.utils.crypto import get_random_string, salted_hmac from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ from django.views import View @@ -230,7 +233,15 @@ class UserImpersonateView(AdministratorPermissionRequiredMixin, RecentAuthentica hijacked = self.object hijack_history = request.session.get("hijack_history", []) - hijack_history.append(request.user._meta.pk.value_to_string(hijacker)) + hijack_history.append({ + "user": request.user.pk, + # We include the auth_hash, because it is unguessable. So should an attacker gain an attack vector to + # modify hijack_history, they can't just insert or change a user that shouldn't be there. We HMAC it + # again, though, since we also do not want the auth_hash of the admin user to be in the session of an + # unprivileged user to contain the risk if there is some leak of session data. + "auth_hash": salted_hmac(key_salt=b"hijack-history-hash", value=request.session[HASH_SESSION_KEY], + algorithm="sha256", secret=settings.SECRET_KEY).hexdigest(), + }) backend = get_used_backend(request) backend = f"{backend.__module__}.{backend.__class__.__name__}" @@ -259,8 +270,21 @@ class UserImpersonateStopView(LoginRequiredMixin, View): hijs = request.session['hijacker_session'] hijack_history = request.session.get("hijack_history", []) hijacked = request.user - user_pk = hijack_history.pop() - hijacker = get_object_or_404(get_user_model(), pk=user_pk) + prev_session = hijack_history.pop() + hijacker = get_object_or_404(get_user_model(), pk=prev_session["user"]) + + expected_hash = salted_hmac( + key_salt=b"hijack-history-hash", + value=hijacker.get_session_auth_hash(), + algorithm="sha256", + secret=settings.SECRET_KEY + ).hexdigest() + if not hmac.compare_digest(expected_hash, prev_session["auth_hash"]): + # Could be an attacker-controlled hijack history, but could also be e.g. a password change of the admin user + # that happened during the hijack session + logout(request) + return redirect_to_login(request.get_full_path()) + backend = get_used_backend(request) backend = f"{backend.__module__}.{backend.__class__.__name__}" with signals.no_update_last_login(), keep_session_age(request.session): -- 2.52.0 From d3ca2ac1e5729b24b263de52a241df630982ba8b Mon Sep 17 00:00:00 2001 From: CVZ-es Date: Mon, 29 Jun 2026 11:13:31 +0200 Subject: [PATCH 89/96] Translations: Update German Currently translated at 100.0% (6343 of 6343 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/ powered by weblate --- src/pretix/locale/de/LC_MESSAGES/django.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pretix/locale/de/LC_MESSAGES/django.po b/src/pretix/locale/de/LC_MESSAGES/django.po index 65978e49c..2ec0b5c7f 100644 --- a/src/pretix/locale/de/LC_MESSAGES/django.po +++ b/src/pretix/locale/de/LC_MESSAGES/django.po @@ -5,8 +5,8 @@ msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-28 14:42+0000\n" -"PO-Revision-Date: 2026-06-28 15:19+0000\n" -"Last-Translator: Raphael Michel \n" +"PO-Revision-Date: 2026-06-29 17:00+0000\n" +"Last-Translator: CVZ-es \n" "Language-Team: German \n" "Language: de\n" -- 2.52.0 From 97ff252c09e27b13eb118f4d273dffce400435f8 Mon Sep 17 00:00:00 2001 From: CVZ-es Date: Mon, 29 Jun 2026 11:38:16 +0200 Subject: [PATCH 90/96] Translations: Update French Currently translated at 100.0% (6343 of 6343 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/fr/ powered by weblate --- src/pretix/locale/fr/LC_MESSAGES/django.po | 182 ++++++++------------- 1 file changed, 71 insertions(+), 111 deletions(-) diff --git a/src/pretix/locale/fr/LC_MESSAGES/django.po b/src/pretix/locale/fr/LC_MESSAGES/django.po index 9fd9566e8..ef24bda4f 100644 --- a/src/pretix/locale/fr/LC_MESSAGES/django.po +++ b/src/pretix/locale/fr/LC_MESSAGES/django.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-28 14:42+0000\n" -"PO-Revision-Date: 2026-06-08 17:00+0000\n" -"Last-Translator: Sébastien BRUNEAU \n" -"Language-Team: French \n" +"PO-Revision-Date: 2026-06-29 17:00+0000\n" +"Last-Translator: CVZ-es \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -466,10 +466,8 @@ msgid "Medium connected to other event" msgstr "Média connecté à un autre événement" #: pretix/api/views/checkin.py:814 -#, fuzzy -#| msgid "You cannot change this order." msgid "You cannot exchange a medium for a medium." -msgstr "Vous ne pouvez pas modifier cette commande." +msgstr "Il n'est pas possible d'échanger un support contre un autre support." #: pretix/api/views/oauth.py:107 pretix/control/logdisplay.py:777 #, python-brace-format @@ -4736,22 +4734,16 @@ msgid "Check-in annulled" msgstr "Enregistrement annulé" #: pretix/base/models/checkin.py:372 -#, fuzzy -#| msgid "Ticket already used" msgid "Ticket already exchanged" -msgstr "Billet déjà utilisé" +msgstr "Billet déjà échangé" #: pretix/base/models/checkin.py:373 -#, fuzzy -#| msgid "Reusable media" msgid "Reusable medium invalid" -msgstr "Support réutilisable" +msgstr "Support réutilisable non valide" #: pretix/base/models/checkin.py:374 -#, fuzzy -#| msgid "Reusable media type" msgid "Reusable medium already exists" -msgstr "Type de support réutilisable" +msgstr "Il existe déjà un support réutilisable" #: pretix/base/models/customers.py:63 msgid "Provider name" @@ -5343,10 +5335,8 @@ msgstr "" "deux." #: pretix/base/models/event.py:1884 -#, fuzzy -#| msgid "The bundled item must belong to the same event as the item." msgid "Property and event must belong to the same organizer." -msgstr "L’élément groupé doit appartenir au même événement que l’élément." +msgstr "La propriété et l'événement doivent appartenir au même organisateur." #: pretix/base/models/event.py:1928 pretix/base/models/organizer.py:627 msgid "Link text" @@ -5601,8 +5591,6 @@ msgstr "" "indisponibilité" #: pretix/base/models/items.py:458 pretix/base/models/items.py:786 -#, fuzzy -#| msgid "Don't use re-usable media, use regular one-off tickets" msgid "Don't use reusable media, use regular one-off tickets" msgstr "" "N'utilisez pas de supports réutilisables, mais plutôt des tickets uniques " @@ -5613,32 +5601,30 @@ msgid "Require a previously unknown medium to be newly added" msgstr "Exiger l'ajout d'un support inconnu jusqu'alors" #: pretix/base/models/items.py:460 -#, fuzzy -#| msgid "Require an existing medium to be re-used" msgid "Require an existing medium to be reused, replacing any previous tickets" msgstr "Exiger la réutilisation d'un support existant" #: pretix/base/models/items.py:461 -#, fuzzy -#| msgid "Require either an existing or a new medium to be used" msgid "" "Require either an existing or a new medium to be used, replacing any " "previous tickets" -msgstr "Nécessiter l'utilisation d'un support existant ou d'un nouveau support" +msgstr "" +"Exiger l'utilisation d'un support existant ou d'un nouveau support, en " +"remplacement de tout billet antérieur" #: pretix/base/models/items.py:462 -#, fuzzy -#| msgid "Require an existing medium to be re-used" msgid "Require an existing medium to be reused, adding to any previous tickets" -msgstr "Exiger la réutilisation d'un support existant" +msgstr "" +"Exiger la réutilisation d'un support existant, en ajoutant cette demande à " +"tout ticket précédent" #: pretix/base/models/items.py:464 -#, fuzzy -#| msgid "Require either an existing or a new medium to be used" msgid "" "Require either an existing or a new medium to be used, adding to any " "previous tickets" -msgstr "Nécessiter l'utilisation d'un support existant ou d'un nouveau support" +msgstr "" +"Exiger l'utilisation d'un support existant ou d'un nouveau support, en " +"complément des tickets précédents" #: pretix/base/models/items.py:480 pretix/base/models/items.py:1468 msgid "Category" @@ -6001,14 +5987,6 @@ msgid "Reusable media policy" msgstr "Politique relative aux médias réutilisables" #: pretix/base/models/items.py:777 -#, fuzzy -#| msgid "" -#| "If this product should be stored on a re-usable physical medium, you can " -#| "attach a physical media policy. This is not required for regular tickets, " -#| "which just use a one-time barcode, but only for products like renewable " -#| "season tickets or re-chargeable gift card wristbands. This is an advanced " -#| "feature that also requires specific configuration of ticketing and " -#| "printing settings." msgid "" "If this product should be stored on a reusable physical medium, you can " "attach a physical media policy. This is not required for regular tickets, " @@ -6073,6 +6051,10 @@ msgid "" "prior to their usage. Therefore, the selected media policy does not make " "sense for this media type." msgstr "" +"Le type de support sélectionné exige que tous les supports soient " +"enregistrés dans le système avant leur utilisation. Par conséquent, la " +"politique relative aux supports sélectionnée n'est pas applicable à ce type " +"de support." #: pretix/base/models/items.py:1009 msgid "" @@ -6649,18 +6631,16 @@ msgstr "Non distribué" #: pretix/base/models/media.py:77 msgctxt "reusable_medium" msgid "Claim token" -msgstr "" +msgstr "Réclamer un jeton" #: pretix/base/models/media.py:82 msgctxt "reusable_medium" msgid "Label" -msgstr "" +msgstr "Descriptif" #: pretix/base/models/media.py:105 -#, fuzzy -#| msgid "Linked ticket" msgid "Linked tickets" -msgstr "Billet lié" +msgstr "Billets liés" #: pretix/base/models/media.py:107 msgid "" @@ -6668,6 +6648,9 @@ msgid "" "validity. If multiple tickets are valid at once, this will lead to failed " "check-ins." msgstr "" +"Si vous associez plusieurs billets, assurez-vous qu'il n'y ait pas de " +"chevauchement entre leurs périodes de validité. Si plusieurs billets sont " +"valables en même temps, cela entraînera l'échec de l'enregistrement." #: pretix/base/models/memberships.py:44 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:28 @@ -8437,16 +8420,12 @@ msgid "Atlantis" msgstr "Atlantide" #: pretix/base/pdf.py:376 -#, fuzzy -#| msgid "Invoice recipient email" msgid "Invoice custom recipient field" -msgstr "E-mail du destinataire de la facture" +msgstr "Champ personnalisé destinataire de la facture" #: pretix/base/pdf.py:377 -#, fuzzy -#| msgid "Custom recipient field label" msgid "Custom recipient field" -msgstr "Libellé personnalisé du champ destinataire" +msgstr "Champ de destinataire personnalisé" #: pretix/base/pdf.py:381 msgid "List of Add-Ons" @@ -9471,13 +9450,15 @@ msgstr "" #: pretix/base/services/checkin.py:1121 msgid "Ticket needs to be exchanged to a suitable medium." -msgstr "" +msgstr "Le billet doit être échangé contre un support adapté." #: pretix/base/services/checkin.py:1128 msgid "" "This ticket has already been exchanged for a reusable medium that now needs " "to be used instead." msgstr "" +"Ce billet a déjà été échangé contre un support réutilisable qui doit " +"désormais être utilisé à sa place." #: pretix/base/services/checkin.py:1180 msgid "This ticket has already been redeemed." @@ -9643,64 +9624,46 @@ msgstr "" "Vous recevez cet e-mail parce que vous avez passé une commande pour {event}." #: pretix/base/services/media.py:93 pretix/base/services/media.py:95 -#, fuzzy -#| msgid "Invalid input type." msgid "Invalid medium type." -msgstr "Type d’entrée non valide." +msgstr "Type de support non valide." #: pretix/base/services/media.py:100 pretix/base/services/media.py:102 -#, fuzzy -#| msgid "The selected media type is not enabled in your organizer settings." msgid "Medium type is not enabled for organizer." -msgstr "" -"Le type de média sélectionné n’est pas activé dans les paramètres de votre " -"organisateur." +msgstr "Ce type de média n’est pas activé par l'organisateur." #: pretix/base/services/media.py:107 pretix/base/services/media.py:109 msgid "Incorrect medium type for product." -msgstr "" +msgstr "Type de support incorrect pour ce produit." #: pretix/base/services/media.py:114 pretix/base/services/media.py:116 -#, fuzzy -#| msgid "This ticket has already been redeemed." msgid "Ticket is already exchanged for reusable medium." -msgstr "Ce billet a déjà été échangé." +msgstr "Le billet a déjà été échangé contre un support réutilisable." #: pretix/base/services/media.py:133 pretix/base/services/media.py:135 -#, fuzzy -#| msgid "Reusable Medium ID" msgid "Reusable medium not found." -msgstr "Identification de support réutilisable" +msgstr "Support réutilisable introuvable." #: pretix/base/services/media.py:140 pretix/base/services/media.py:142 #: pretix/base/services/media.py:168 pretix/base/services/media.py:170 -#, fuzzy -#| msgid "The reusable medium has been created." msgid "Reusable medium is inactive or expired." -msgstr "Le support réutilisable a été créé." +msgstr "Le support réutilisable est inactif ou a expiré." #: pretix/base/services/media.py:155 pretix/base/services/media.py:162 #: pretix/base/services/media.py:176 -#, fuzzy -#| msgid "The reusable medium has been created." msgid "Reusable medium not found and could not be created." -msgstr "Le support réutilisable a été créé." +msgstr "Support réutilisable introuvable et impossible à créer." #: pretix/base/services/media.py:183 -#, fuzzy -#| msgid "Reusable media type" msgid "Reusable medium already exists." -msgstr "Type de support réutilisable" +msgstr "Le type de support réutilisable existe déjà." #: pretix/base/services/media.py:189 -#, fuzzy -#| msgid "The reusable medium has been created." msgid "Reusable medium could not be created." -msgstr "Le support réutilisable a été créé." +msgstr "Impossible de créer le support réutilisable." #: pretix/base/services/media.py:195 pretix/base/services/media.py:197 msgid "Product does not support medium exchange." -msgstr "" +msgstr "Ce produit ne permet pas de changer de support." #: pretix/base/services/memberships.py:108 #, python-brace-format @@ -10426,17 +10389,10 @@ msgstr "" "l’achat." #: pretix/base/settings.py:214 -#, fuzzy -#| msgid "Activate re-usable media" msgid "Activate reusable media" msgstr "Activer les supports réutilisables" #: pretix/base/settings.py:215 -#, fuzzy -#| msgid "" -#| "The re-usable media feature allows you to connect tickets and gift cards " -#| "with physical media such as wristbands or chip cards that may be re-used " -#| "for different tickets or gift cards later." msgid "" "The reusable media feature allows you to connect tickets and gift cards with " "physical media such as wristbands or chip cards that may be reused for " @@ -10450,6 +10406,8 @@ msgstr "" #: pretix/base/settings.py:226 msgid "Enforce the usage of issued reusable media for check-in" msgstr "" +"Imposer l'utilisation de supports réutilisables fournis lors de " +"l'enregistrement" #: pretix/base/settings.py:227 msgid "" @@ -10457,6 +10415,10 @@ msgid "" "medium has been created and linked to a ticket. Keeping this option turned " "off will treat the reusable medium and ticket as equals." msgstr "" +"Si cette option est activée, le code-barres d'un billet ne sera plus accepté " +"dès lors qu'un support réutilisable a été créé et associé à ce billet. Si " +"cette option reste désactivée, le support réutilisable et le billet seront " +"considérés comme équivalents." #: pretix/base/settings.py:254 msgid "Length of barcodes" @@ -18691,16 +18653,12 @@ msgid "The reusable medium has been changed." msgstr "Le support réutilisable a été changé." #: pretix/control/logdisplay.py:746 -#, fuzzy -#| msgid "The new member has been added to the team." msgid "A new ticket has been added to the medium." -msgstr "Le nouveau membre a été ajouté à l'équipe." +msgstr "Un nouveau billet a été ajouté sur le support." #: pretix/control/logdisplay.py:747 -#, fuzzy -#| msgid "{user} has been removed from the team." msgid "A ticket has been removed from the medium." -msgstr "{user} a été retiré de l'équipe." +msgstr "Un billet a été retiré du support." #: pretix/control/logdisplay.py:748 msgid "The medium has been connected to a new ticket." @@ -18712,6 +18670,8 @@ msgid "" "The ticket #{positionid} was exchanged for reusable medium " "{medium_identifier}." msgstr "" +"Le ticket n° {positionid} a été échangé contre un support réutilisable " +"{medium_identifier}." #: pretix/control/logdisplay.py:750 msgid "The medium has been connected to a new gift card." @@ -20627,10 +20587,8 @@ msgstr "" "l’enregistrement :" #: pretix/control/templates/pretixcontrol/checkin/simulator.html:85 -#, fuzzy -#| msgid "Special attention required" msgid "Media exchange required" -msgstr "Une attention particulière est requise" +msgstr "Échange de supports requis" #: pretix/control/templates/pretixcontrol/checkin/simulator.html:87 #, python-format @@ -20638,6 +20596,8 @@ msgid "" "This ticket needs to be exchanged into a %(media_type)s " "reusable medium. %(media_policy)s." msgstr "" +"Ce billet doit être échangé contre un support réutilisable %" +"(media_type)s. %(media_policy)s." #: pretix/control/templates/pretixcontrol/checkin/simulator.html:103 msgid "Special attention required" @@ -27232,6 +27192,9 @@ msgid "" "Even if a team has no access to a certain category of data, they might still " "be able to see parts of this data when it is linked to data they can see." msgstr "" +"Même si une équipe n'a pas accès à une certaine catégorie de données, elle " +"peut néanmoins être en mesure de consulter certaines parties de ces données " +"lorsque celles-ci sont liées à des données auxquelles elle a accès." #: pretix/control/templates/pretixcontrol/organizers/team_edit.html:35 msgid "" @@ -27239,6 +27202,10 @@ msgid "" "some information about gift cards linked to a customer account, even if they " "generally can't see gift cards directly." msgstr "" +"Par exemple, une personne ayant accès aux comptes clients pourra consulter " +"certaines informations concernant les cartes cadeaux associées à un compte " +"client, même si, en règle générale, elle ne peut pas voir directement ces " +"cartes cadeaux." #: pretix/control/templates/pretixcontrol/organizers/team_edit.html:59 msgid "" @@ -27246,6 +27213,9 @@ msgid "" "information about vouchers used to create an order, even if they generally " "can't see vouchers directly." msgstr "" +"Par exemple, une personne ayant accès aux commandes pourra consulter " +"certaines informations concernant les bons utilisés pour créer une commande, " +"même si, en règle générale, elle ne peut pas consulter directement ces bons." #: pretix/control/templates/pretixcontrol/organizers/team_members.html:21 msgid "Member" @@ -28117,30 +28087,22 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/detail.html:9 #: pretix/control/templates/pretixcontrol/subevents/detail.html:13 -#, fuzzy, python-format -#| msgid "Quota: %(name)s" +#, python-format msgctxt "subevent" msgid "Date: %(name)s" -msgstr "Quota : %(name)s" +msgstr "Date : %(name)s" #: pretix/control/templates/pretixcontrol/subevents/detail.html:234 -#, fuzzy -#| msgid "Partially paid" msgid "partially canceled" -msgstr "Partiellement payé" +msgstr "partiellement annulé" #: pretix/control/templates/pretixcontrol/subevents/detail.html:282 -#, fuzzy -#| msgctxt "permission_level" -#| msgid "View all" msgid "View all" msgstr "Tout afficher" #: pretix/control/templates/pretixcontrol/subevents/detail.html:289 -#, fuzzy -#| msgid "No archived events found." msgid "No orders found." -msgstr "Aucun événement archivé trouvé." +msgstr "Aucune commande trouvée." #: pretix/control/templates/pretixcontrol/subevents/detail.html:302 #: pretix/control/templates/pretixcontrol/subevents/edit.html:279 @@ -30938,10 +30900,8 @@ msgid "Voucher {}" msgstr "Bon {}" #: pretix/control/views/typeahead.py:179 pretix/control/views/typeahead.py:180 -#, fuzzy -#| msgid "Go to event" msgid "No event" -msgstr "Aller à l'événement" +msgstr "Aucun événement" #: pretix/control/views/user.py:169 msgid "The password you entered was invalid, please try again." -- 2.52.0 From 8441c4bc7aab30d1f176bcd6f2cfd16a527da47b Mon Sep 17 00:00:00 2001 From: CVZ-es Date: Mon, 29 Jun 2026 11:40:04 +0200 Subject: [PATCH 91/96] Translations: Update French Currently translated at 100.0% (260 of 260 strings) Translation: pretix/pretix (JavaScript parts) Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/fr/ powered by weblate --- src/pretix/locale/fr/LC_MESSAGES/djangojs.po | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/pretix/locale/fr/LC_MESSAGES/djangojs.po b/src/pretix/locale/fr/LC_MESSAGES/djangojs.po index b7626f567..7403e1770 100644 --- a/src/pretix/locale/fr/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/fr/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: French\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-28 15:49+0000\n" -"PO-Revision-Date: 2026-03-18 12:23+0000\n" +"PO-Revision-Date: 2026-06-29 17:00+0000\n" "Last-Translator: CVZ-es \n" "Language-Team: French \n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.16.2\n" +"X-Generator: Weblate 2026.6.1\n" #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 @@ -443,11 +443,11 @@ msgstr "Appuyez sur Ctrl-C pour copier !" #: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue:80 msgid "Edit" -msgstr "" +msgstr "Éditer" #: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue:86 msgid "Visualize" -msgstr "" +msgstr "Visualiser" #: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue:96 msgid "" @@ -455,10 +455,14 @@ msgid "" "or variations are not contained in any of your rule parts so people with " "these tickets will not get in:" msgstr "" +"Votre règle effectue toujours un filtrage par produit ou variante, mais les " +"produits ou variantes suivants ne figurent dans aucune des parties de votre " +"règle ; par conséquent, les personnes détenant ces billets ne seront pas " +"admises :" #: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue:99 msgid "Please double-check if this was intentional." -msgstr "" +msgstr "Veuillez vérifier si cela était intentionnel." #: pretix/static/pretixcontrol/js/ui/checkinrules/constants.ts:4 msgid "All of the conditions below (AND)" -- 2.52.0 From adc9c9d51474437601d7c381504717ab63d9eea7 Mon Sep 17 00:00:00 2001 From: CVZ-es Date: Mon, 29 Jun 2026 11:24:32 +0200 Subject: [PATCH 92/96] Translations: Update Spanish Currently translated at 100.0% (6343 of 6343 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/ powered by weblate --- src/pretix/locale/es/LC_MESSAGES/django.po | 183 ++++++++------------- 1 file changed, 71 insertions(+), 112 deletions(-) diff --git a/src/pretix/locale/es/LC_MESSAGES/django.po b/src/pretix/locale/es/LC_MESSAGES/django.po index 1ffa55194..00674d3a9 100644 --- a/src/pretix/locale/es/LC_MESSAGES/django.po +++ b/src/pretix/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-28 14:42+0000\n" -"PO-Revision-Date: 2026-05-29 17:00+0000\n" +"PO-Revision-Date: 2026-06-29 17:00+0000\n" "Last-Translator: CVZ-es \n" "Language-Team: Spanish \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2026.5\n" +"X-Generator: Weblate 2026.6.1\n" #: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670 #: pretix/control/templates/pretixcontrol/events/index.html:166 @@ -467,10 +467,8 @@ msgid "Medium connected to other event" msgstr "Medio conectado a otro evento" #: pretix/api/views/checkin.py:814 -#, fuzzy -#| msgid "You cannot change this order." msgid "You cannot exchange a medium for a medium." -msgstr "No puedes cambiar este pedido." +msgstr "No se puede cambiar un medio por otro." #: pretix/api/views/oauth.py:107 pretix/control/logdisplay.py:777 #, python-brace-format @@ -4730,22 +4728,16 @@ msgid "Check-in annulled" msgstr "Check-in anulado" #: pretix/base/models/checkin.py:372 -#, fuzzy -#| msgid "Ticket already used" msgid "Ticket already exchanged" -msgstr "Esta entrada ya fue utilizada" +msgstr "Entrada ya canjeada" #: pretix/base/models/checkin.py:373 -#, fuzzy -#| msgid "Reusable media" msgid "Reusable medium invalid" -msgstr "Medios reutilizables" +msgstr "Soporte reutilizable no válido" #: pretix/base/models/checkin.py:374 -#, fuzzy -#| msgid "Reusable media type" msgid "Reusable medium already exists" -msgstr "Tipo de medio reusable" +msgstr "El soporte reutilizable ya existe" #: pretix/base/models/customers.py:63 msgid "Provider name" @@ -5330,11 +5322,8 @@ msgstr "" "ambas cosas." #: pretix/base/models/event.py:1884 -#, fuzzy -#| msgid "The bundled item must belong to the same event as the item." msgid "Property and event must belong to the same organizer." -msgstr "" -"La agrupación de artículos debe pertenecer al mismo evento que el artículo." +msgstr "La propiedad y el evento deben pertenecer al mismo organizador." #: pretix/base/models/event.py:1928 pretix/base/models/organizer.py:627 msgid "Link text" @@ -5586,42 +5575,41 @@ msgid "Show product with info on why it’s unavailable" msgstr "Mostrar el producto con la razón que no está disponible" #: pretix/base/models/items.py:458 pretix/base/models/items.py:786 -#, fuzzy -#| msgid "Don't use re-usable media, use regular one-off tickets" msgid "Don't use reusable media, use regular one-off tickets" -msgstr "No usar medios reutilizables, usar entradas de un solo uso" +msgstr "" +"No utilizar soportes reutilizables, sino billetes normales de un solo uso" #: pretix/base/models/items.py:459 msgid "Require a previously unknown medium to be newly added" msgstr "Exigir que un medio desconocido anteriormente se adicione de nuevo" #: pretix/base/models/items.py:460 -#, fuzzy -#| msgid "Require an existing medium to be re-used" msgid "Require an existing medium to be reused, replacing any previous tickets" -msgstr "Exigir que se reuse un medio ya existente" +msgstr "" +"Necesita que se reutilice un soporte ya existente, sustituyendo cualquier " +"billete anterior" #: pretix/base/models/items.py:461 -#, fuzzy -#| msgid "Require either an existing or a new medium to be used" msgid "" "Require either an existing or a new medium to be used, replacing any " "previous tickets" -msgstr "Exigir que se use un medio existente o uno nuevo" +msgstr "" +"Se debe utilizar un soporte ya existente o uno nuevo, sustituyendo cualquier " +"billete anterior" #: pretix/base/models/items.py:462 -#, fuzzy -#| msgid "Require an existing medium to be re-used" msgid "Require an existing medium to be reused, adding to any previous tickets" -msgstr "Exigir que se reuse un medio ya existente" +msgstr "" +"Exigir que se reutilice un soporte ya existente, añadiendo esta información " +"a cualquier entrada anterior" #: pretix/base/models/items.py:464 -#, fuzzy -#| msgid "Require either an existing or a new medium to be used" msgid "" "Require either an existing or a new medium to be used, adding to any " "previous tickets" -msgstr "Exigir que se use un medio existente o uno nuevo" +msgstr "" +"Es necesario utilizar un medio ya existente o uno nuevo, que se sumará a los " +"billetes anteriores" #: pretix/base/models/items.py:480 pretix/base/models/items.py:1468 msgid "Category" @@ -5981,14 +5969,6 @@ msgid "Reusable media policy" msgstr "Condiciones de utilización de medios" #: pretix/base/models/items.py:777 -#, fuzzy -#| msgid "" -#| "If this product should be stored on a re-usable physical medium, you can " -#| "attach a physical media policy. This is not required for regular tickets, " -#| "which just use a one-time barcode, but only for products like renewable " -#| "season tickets or re-chargeable gift card wristbands. This is an advanced " -#| "feature that also requires specific configuration of ticketing and " -#| "printing settings." msgid "" "If this product should be stored on a reusable physical medium, you can " "attach a physical media policy. This is not required for regular tickets, " @@ -6052,6 +6032,9 @@ msgid "" "prior to their usage. Therefore, the selected media policy does not make " "sense for this media type." msgstr "" +"El tipo de soporte seleccionado requiere que todos los soportes se registren " +"en el sistema antes de su uso. Por lo tanto, la política de soportes " +"seleccionada no es aplicable a este tipo de soporte." #: pretix/base/models/items.py:1009 msgid "" @@ -6626,18 +6609,16 @@ msgstr "rebotado" #: pretix/base/models/media.py:77 msgctxt "reusable_medium" msgid "Claim token" -msgstr "" +msgstr "Canjear el token" #: pretix/base/models/media.py:82 msgctxt "reusable_medium" msgid "Label" -msgstr "" +msgstr "Designación" #: pretix/base/models/media.py:105 -#, fuzzy -#| msgid "Linked ticket" msgid "Linked tickets" -msgstr "Entrada vinculada" +msgstr "Entradas vinculadas" #: pretix/base/models/media.py:107 msgid "" @@ -6645,6 +6626,9 @@ msgid "" "validity. If multiple tickets are valid at once, this will lead to failed " "check-ins." msgstr "" +"Si enlaza más de un billete, asegúrese de que no haya solapamiento en la " +"validez. Si varios billetes son válidos al mismo tiempo, esto provocará que " +"no se puedan realizar el check-in." #: pretix/base/models/memberships.py:44 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:28 @@ -8390,14 +8374,10 @@ msgid "Atlantis" msgstr "Atlántida" #: pretix/base/pdf.py:376 -#, fuzzy -#| msgid "Invoice recipient email" msgid "Invoice custom recipient field" -msgstr "Correo electrónico del destinatario de la factura" +msgstr "Campo personalizado de destinatario en la factura" #: pretix/base/pdf.py:377 -#, fuzzy -#| msgid "Custom recipient field label" msgid "Custom recipient field" msgstr "Campo de destinatario personalizado" @@ -9415,13 +9395,15 @@ msgstr "Necesitas responder preguntas para terminar el check-in." #: pretix/base/services/checkin.py:1121 msgid "Ticket needs to be exchanged to a suitable medium." -msgstr "" +msgstr "El billete debe canjearse por un soporte adecuado." #: pretix/base/services/checkin.py:1128 msgid "" "This ticket has already been exchanged for a reusable medium that now needs " "to be used instead." msgstr "" +"Esta entrada ya se ha canjeado por un soporte reutilizable que ahora hay que " +"utilizar en su lugar." #: pretix/base/services/checkin.py:1180 msgid "This ticket has already been redeemed." @@ -9587,64 +9569,46 @@ msgstr "" "{event}." #: pretix/base/services/media.py:93 pretix/base/services/media.py:95 -#, fuzzy -#| msgid "Invalid input type." msgid "Invalid medium type." -msgstr "Tipo de entrada no válido." +msgstr "Tipo de soporte no válido." #: pretix/base/services/media.py:100 pretix/base/services/media.py:102 -#, fuzzy -#| msgid "The selected media type is not enabled in your organizer settings." msgid "Medium type is not enabled for organizer." -msgstr "" -"El tipo de medio seleccionado no está activo en tus ajustes de organizador/a/" -"e." +msgstr "Este tipo de medio no está habilitado para el organizador." #: pretix/base/services/media.py:107 pretix/base/services/media.py:109 msgid "Incorrect medium type for product." -msgstr "" +msgstr "El tipo de soporte no es el adecuado para este producto." #: pretix/base/services/media.py:114 pretix/base/services/media.py:116 -#, fuzzy -#| msgid "This ticket has already been redeemed." msgid "Ticket is already exchanged for reusable medium." -msgstr "Esta entrada ya ha sido canjeada." +msgstr "La entrada ya se ha canjeado por un soporte reutilizable." #: pretix/base/services/media.py:133 pretix/base/services/media.py:135 -#, fuzzy -#| msgid "Reusable Medium ID" msgid "Reusable medium not found." -msgstr "ID mediana reutilizable" +msgstr "No se ha encontrado el soporte reutilizable." #: pretix/base/services/media.py:140 pretix/base/services/media.py:142 #: pretix/base/services/media.py:168 pretix/base/services/media.py:170 -#, fuzzy -#| msgid "The reusable medium has been created." msgid "Reusable medium is inactive or expired." -msgstr "Se ha creado el medio reutilizable." +msgstr "El medio reutilizable está inactivo o caducado." #: pretix/base/services/media.py:155 pretix/base/services/media.py:162 #: pretix/base/services/media.py:176 -#, fuzzy -#| msgid "The reusable medium has been created." msgid "Reusable medium not found and could not be created." -msgstr "Se ha creado el medio reutilizable." +msgstr "No se ha encontrado el soporte reutilizable y no se ha podido crear." #: pretix/base/services/media.py:183 -#, fuzzy -#| msgid "Reusable media type" msgid "Reusable medium already exists." -msgstr "Tipo de medio reusable" +msgstr "Ya existe un soporte reutilizable." #: pretix/base/services/media.py:189 -#, fuzzy -#| msgid "The reusable medium has been created." msgid "Reusable medium could not be created." -msgstr "Se ha creado el medio reutilizable." +msgstr "No se ha podido crear el soporte reutilizable." #: pretix/base/services/media.py:195 pretix/base/services/media.py:197 msgid "Product does not support medium exchange." -msgstr "" +msgstr "Este producto no admite el cambio de medio." #: pretix/base/services/memberships.py:108 #, python-brace-format @@ -10368,17 +10332,10 @@ msgstr "" "inició sesión durante la compra." #: pretix/base/settings.py:214 -#, fuzzy -#| msgid "Activate re-usable media" msgid "Activate reusable media" msgstr "Activar medios reutilizables" #: pretix/base/settings.py:215 -#, fuzzy -#| msgid "" -#| "The re-usable media feature allows you to connect tickets and gift cards " -#| "with physical media such as wristbands or chip cards that may be re-used " -#| "for different tickets or gift cards later." msgid "" "The reusable media feature allows you to connect tickets and gift cards with " "physical media such as wristbands or chip cards that may be reused for " @@ -10390,7 +10347,7 @@ msgstr "" #: pretix/base/settings.py:226 msgid "Enforce the usage of issued reusable media for check-in" -msgstr "" +msgstr "Exigir el uso de los soportes reutilizables para el check-in" #: pretix/base/settings.py:227 msgid "" @@ -10398,6 +10355,10 @@ msgid "" "medium has been created and linked to a ticket. Keeping this option turned " "off will treat the reusable medium and ticket as equals." msgstr "" +"Si se activa esta opción, ya no se aceptarán los códigos de barras de los " +"billetes cuando se haya creado un soporte reutilizable y se haya vinculado a " +"un billete. Si se mantiene desactivada esta opción, el soporte reutilizable " +"y el billete se tratarán como iguales." #: pretix/base/settings.py:254 msgid "Length of barcodes" @@ -18548,16 +18509,12 @@ msgid "The reusable medium has been changed." msgstr "El medio reutilizable ha sido modificado." #: pretix/control/logdisplay.py:746 -#, fuzzy -#| msgid "The new member has been added to the team." msgid "A new ticket has been added to the medium." -msgstr "El nuevo miembro ha sido añadido al equipo." +msgstr "Se ha añadido un nuevo billete al medio." #: pretix/control/logdisplay.py:747 -#, fuzzy -#| msgid "{user} has been removed from the team." msgid "A ticket has been removed from the medium." -msgstr "{user} ha sido removido del equipo." +msgstr "Se ha eliminado un billete del medio." #: pretix/control/logdisplay.py:748 msgid "The medium has been connected to a new ticket." @@ -18569,6 +18526,8 @@ msgid "" "The ticket #{positionid} was exchanged for reusable medium " "{medium_identifier}." msgstr "" +"El billete n.º {positionid} se ha canjeado por un medio reutilizable " +"{medium_identifier}." #: pretix/control/logdisplay.py:750 msgid "The medium has been connected to a new gift card." @@ -20483,10 +20442,8 @@ msgstr "" "check-in:" #: pretix/control/templates/pretixcontrol/checkin/simulator.html:85 -#, fuzzy -#| msgid "Special attention required" msgid "Media exchange required" -msgstr "Atención especial requerida" +msgstr "Es necesario intercambiar medios" #: pretix/control/templates/pretixcontrol/checkin/simulator.html:87 #, python-format @@ -20494,6 +20451,8 @@ msgid "" "This ticket needs to be exchanged into a %(media_type)s " "reusable medium. %(media_policy)s." msgstr "" +"Esta entrada debe canjearse por un soporte reutilizable %(media_type)" +"s. %(media_policy)s." #: pretix/control/templates/pretixcontrol/checkin/simulator.html:103 msgid "Special attention required" @@ -27038,6 +26997,9 @@ msgid "" "Even if a team has no access to a certain category of data, they might still " "be able to see parts of this data when it is linked to data they can see." msgstr "" +"Aunque un equipo no tenga acceso a una determinada categoría de datos, es " +"posible que pueda ver parte de esos datos cuando estén vinculados a datos a " +"los que sí tiene acceso." #: pretix/control/templates/pretixcontrol/organizers/team_edit.html:35 msgid "" @@ -27045,6 +27007,10 @@ msgid "" "some information about gift cards linked to a customer account, even if they " "generally can't see gift cards directly." msgstr "" +"Por ejemplo, una persona con acceso a las cuentas de los clientes podrá ver " +"cierta información sobre las tarjetas regalo vinculadas a una cuenta de " +"cliente, aunque, por lo general, no pueda ver las tarjetas regalo " +"directamente." #: pretix/control/templates/pretixcontrol/organizers/team_edit.html:59 msgid "" @@ -27052,6 +27018,9 @@ msgid "" "information about vouchers used to create an order, even if they generally " "can't see vouchers directly." msgstr "" +"Por ejemplo, una persona con acceso a los pedidos podrá ver cierta " +"información sobre los vales utilizados para crear un pedido, aunque " +"normalmente no pueda ver los vales directamente." #: pretix/control/templates/pretixcontrol/organizers/team_members.html:21 msgid "Member" @@ -27912,30 +27881,22 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/detail.html:9 #: pretix/control/templates/pretixcontrol/subevents/detail.html:13 -#, fuzzy, python-format -#| msgid "Quota: %(name)s" +#, python-format msgctxt "subevent" msgid "Date: %(name)s" -msgstr "Cuota: %(name)s" +msgstr "Fecha: %(name)s" #: pretix/control/templates/pretixcontrol/subevents/detail.html:234 -#, fuzzy -#| msgid "Partially paid" msgid "partially canceled" -msgstr "Pagado parcialmente" +msgstr "cancelado parcialmente" #: pretix/control/templates/pretixcontrol/subevents/detail.html:282 -#, fuzzy -#| msgctxt "permission_level" -#| msgid "View all" msgid "View all" msgstr "Ver todo" #: pretix/control/templates/pretixcontrol/subevents/detail.html:289 -#, fuzzy -#| msgid "No archived events found." msgid "No orders found." -msgstr "No se han encontrado eventos archivados." +msgstr "No se han encontrado pedidos." #: pretix/control/templates/pretixcontrol/subevents/detail.html:302 #: pretix/control/templates/pretixcontrol/subevents/edit.html:279 @@ -30708,10 +30669,8 @@ msgid "Voucher {}" msgstr "Vale de compra {}" #: pretix/control/views/typeahead.py:179 pretix/control/views/typeahead.py:180 -#, fuzzy -#| msgid "Go to event" msgid "No event" -msgstr "Ir al evento" +msgstr "No hay eventos" #: pretix/control/views/user.py:169 msgid "The password you entered was invalid, please try again." -- 2.52.0 From 550bb675f54b24bdd1ee68a45e894dfe5e0a9ce1 Mon Sep 17 00:00:00 2001 From: CVZ-es Date: Mon, 29 Jun 2026 11:25:21 +0200 Subject: [PATCH 93/96] Translations: Update Spanish Currently translated at 100.0% (260 of 260 strings) Translation: pretix/pretix (JavaScript parts) Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/es/ powered by weblate --- src/pretix/locale/es/LC_MESSAGES/djangojs.po | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/pretix/locale/es/LC_MESSAGES/djangojs.po b/src/pretix/locale/es/LC_MESSAGES/djangojs.po index 34ac6b679..dadbe6520 100644 --- a/src/pretix/locale/es/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/es/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-28 15:49+0000\n" -"PO-Revision-Date: 2026-03-30 03:00+0000\n" +"PO-Revision-Date: 2026-06-29 17:00+0000\n" "Last-Translator: CVZ-es \n" "Language-Team: Spanish \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.16.2\n" +"X-Generator: Weblate 2026.6.1\n" #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 @@ -442,11 +442,11 @@ msgstr "¡Presione Control+C para copiar!" #: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue:80 msgid "Edit" -msgstr "" +msgstr "Editar" #: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue:86 msgid "Visualize" -msgstr "" +msgstr "Visualizar" #: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue:96 msgid "" @@ -454,10 +454,13 @@ msgid "" "or variations are not contained in any of your rule parts so people with " "these tickets will not get in:" msgstr "" +"Su regla siempre filtra por producto o variante, pero los siguientes " +"productos o variantes no figuran en ninguna de las partes de su regla, por " +"lo que las personas con estos tickets no podrán acceder:" #: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue:99 msgid "Please double-check if this was intentional." -msgstr "" +msgstr "Por favor, comprueba bien si esto ha sido a propósito." #: pretix/static/pretixcontrol/js/ui/checkinrules/constants.ts:4 msgid "All of the conditions below (AND)" -- 2.52.0 From f35b13b6861305ab1ca973ed65d59ba5745cc77c Mon Sep 17 00:00:00 2001 From: Nikita Mitasov Date: Tue, 30 Jun 2026 15:41:48 +0200 Subject: [PATCH 94/96] Translations: Update Russian Currently translated at 18.9% (1200 of 6343 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ru/ powered by weblate --- src/pretix/locale/ru/LC_MESSAGES/django.po | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/pretix/locale/ru/LC_MESSAGES/django.po b/src/pretix/locale/ru/LC_MESSAGES/django.po index 6a85bec1a..702151bc4 100644 --- a/src/pretix/locale/ru/LC_MESSAGES/django.po +++ b/src/pretix/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-28 14:42+0000\n" -"PO-Revision-Date: 2026-06-20 17:00+0000\n" +"PO-Revision-Date: 2026-06-30 16:52+0000\n" "Last-Translator: Nikita Mitasov \n" "Language-Team: Russian \n" @@ -35488,10 +35488,8 @@ msgstr "Введите промокод ниже, чтобы купить эт #: pretix/presale/templates/pretixpresale/event/fragment_availability.html:10 #: pretix/presale/templates/pretixpresale/event/fragment_availability.html:14 -#, fuzzy -#| msgid "Quota availabilities" msgid "Not available yet." -msgstr "Наличие квот" +msgstr "Еще недоступно." #: pretix/presale/templates/pretixpresale/event/fragment_availability.html:18 msgid "Not available any more." -- 2.52.0 From fd565ecdb29c55a3e82dc15d94a848d193664caa Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 1 Jul 2026 16:33:07 +0200 Subject: [PATCH 95/96] Bump version to 2026.6.0 --- src/pretix/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pretix/__init__.py b/src/pretix/__init__.py index 77eeac95a..b0af3c661 100644 --- a/src/pretix/__init__.py +++ b/src/pretix/__init__.py @@ -19,4 +19,4 @@ # You should have received a copy of the GNU Affero General Public License along with this program. If not, see # . # -__version__ = "2026.6.0.dev0" +__version__ = "2026.6.0" -- 2.52.0 From 91bc46c3db9d6791dcbc5b666a8426a98ce62207 Mon Sep 17 00:00:00 2001 From: monsi Date: Thu, 2 Jul 2026 20:37:43 +0200 Subject: [PATCH 96/96] Remove gendered language from de/de_Informal translations --- src/pretix/locale/de/LC_MESSAGES/django.po | 8 ++++---- src/pretix/locale/de_Informal/LC_MESSAGES/django.po | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/pretix/locale/de/LC_MESSAGES/django.po b/src/pretix/locale/de/LC_MESSAGES/django.po index c62303378..c07c30dbc 100644 --- a/src/pretix/locale/de/LC_MESSAGES/django.po +++ b/src/pretix/locale/de/LC_MESSAGES/django.po @@ -5830,8 +5830,8 @@ msgid "" "needs to be checked." msgstr "" "Wenn diese Option gesetzt ist, wird die Check-in-Anwendung melden, dass " -"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studierende " -"nützlich, deren Studierendenausweis noch geprüft werden soll." +"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studenten " +"nützlich, deren Studentenausweis noch geprüft werden soll." #: pretix/base/models/items.py:670 pretix/base/models/items.py:1261 msgid "" @@ -6734,8 +6734,8 @@ msgid "" "cases." msgstr "" "Wenn diese Option gesetzt ist, wird die Check-in-Anwendung melden, dass " -"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studierende " -"nützlich, deren Studierendenausweis noch geprüft werden soll." +"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studenten " +"nützlich, deren Studentenausweis noch geprüft werden soll." #: pretix/base/models/orders.py:290 msgid "" diff --git a/src/pretix/locale/de_Informal/LC_MESSAGES/django.po b/src/pretix/locale/de_Informal/LC_MESSAGES/django.po index 9db0defb2..f879816ff 100644 --- a/src/pretix/locale/de_Informal/LC_MESSAGES/django.po +++ b/src/pretix/locale/de_Informal/LC_MESSAGES/django.po @@ -5811,8 +5811,8 @@ msgid "" "needs to be checked." msgstr "" "Wenn diese Option gesetzt ist, wird die Check-in-Anwendung melden, dass " -"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studierende " -"nützlich, deren Studierendenausweis noch geprüft werden soll." +"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studenten " +"nützlich, deren Studentenausweis noch geprüft werden soll." #: pretix/base/models/items.py:670 pretix/base/models/items.py:1261 msgid "" @@ -6715,8 +6715,8 @@ msgid "" "cases." msgstr "" "Wenn diese Option gesetzt ist, wird die Check-in-Anwendung melden, dass " -"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studierende " -"nützlich, deren Studierendenausweis noch geprüft werden soll." +"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studenten " +"nützlich, deren Studentenausweis noch geprüft werden soll." #: pretix/base/models/orders.py:290 msgid "" -- 2.52.0