Compare commits

..
Author SHA1 Message Date
Lukas Bockstaller 48356ea19e code style 2026-08-25 11:09:26 +02:00
Lukas Bockstaller 6fa91b37ab validate that the sale has any captures before marking paid 2026-08-25 11:07:15 +02:00
9 changed files with 435 additions and 251 deletions
-43
View File
@@ -1,43 +0,0 @@
name: SBOM
on:
push:
branches: [ master, sbom ]
tags: [ 'v.*' ]
permissions:
contents: read # to fetch code (actions/checkout)
env:
FORCE_COLOR: 1
jobs:
test:
runs-on: ubuntu-22.04
name: Submission
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Use Node.js
uses: actions/setup-node@v7
with:
node-version: '24.x'
- uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install system dependencies
run: sudo apt update && sudo apt install -y gettext unzip
- name: Install Python dependencies
run: pip3 install -U "prisma-sbom-submit[python]"
- name: Create SBOM
run: NPM=$(which npm) prisma-sbom-submit collect . sbom.json
- name: Submit SBOM
run: prisma-sbom-submit upload --server https://prisma.pretix.com sbom.json
env:
PRISMA_UPLOAD_TOKEN: ${{ secrets.PRISMA_UPLOAD_TOKEN }}
+1 -1
View File
@@ -79,7 +79,7 @@ dependencies = [
"phonenumberslite==9.0.*",
"Pillow==12.3.*",
"pretix-plugin-build",
"protobuf==7.36.*",
"protobuf==7.35.*",
"psycopg2-binary",
"pycountry",
"pycparser==3.0",
+10 -3
View File
@@ -5,10 +5,10 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-24 15:35+0000\n"
"PO-Revision-Date: 2026-08-25 00:00+0000\n"
"PO-Revision-Date: 2026-08-24 15:31+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix/"
"de/>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix/de/"
">\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -31805,6 +31805,13 @@ msgid "Allow further payments during compliance hold"
msgstr "Erlaube weitere Zahlungsversuche während PayPal eine Zahlung überprüft"
#: pretix/plugins/paypal2/payment.py
#, fuzzy
#| msgid ""
#| "PayPals fraud prevention might block processing of individual payments "
#| "for a considerable amount of time. The payment is marked as \"pending\" "
#| "during this time window. You can allow your customers to start another "
#| "payment attempts during that window. This might result in them being "
#| "charged twice if theoriginal payment is approved."
msgid ""
"PayPals fraud prevention might block processing of individual payments for a "
"considerable amount of time. The payment is marked as \"pending\" during "
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-24 15:35+0000\n"
"PO-Revision-Date: 2026-08-25 00:00+0000\n"
"PO-Revision-Date: 2026-08-24 15:31+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
"pretix/pretix/de_Informal/>\n"
@@ -31761,6 +31761,13 @@ msgid "Allow further payments during compliance hold"
msgstr "Erlaube weitere Zahlungsversuche während PayPal eine Zahlung überprüft"
#: pretix/plugins/paypal2/payment.py
#, fuzzy
#| msgid ""
#| "PayPals fraud prevention might block processing of individual payments "
#| "for a considerable amount of time. The payment is marked as \"pending\" "
#| "during this time window. You can allow your customers to start another "
#| "payment attempts during that window. This might result in them being "
#| "charged twice if theoriginal payment is approved."
msgid ""
"PayPals fraud prevention might block processing of individual payments for a "
"considerable amount of time. The payment is marked as \"pending\" during "
+176 -111
View File
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-24 15:35+0000\n"
"PO-Revision-Date: 2026-08-25 00:00+0000\n"
"PO-Revision-Date: 2026-07-08 16:00+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix/"
"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 2026.8.1\n"
"X-Generator: Weblate 2026.6.1\n"
#: pretix/_base_settings.py
msgid "English"
@@ -93,7 +93,7 @@ msgstr "Hebreo"
#: pretix/_base_settings.py
msgid "Hungarian"
msgstr "Húngaro"
msgstr ""
#: pretix/_base_settings.py
msgid "Indonesian"
@@ -439,8 +439,10 @@ msgid "You cannot exchange a medium for a medium."
msgstr "No se puede cambiar un medio por otro."
#: pretix/api/views/checkin.py
#, fuzzy
#| msgid "Product does not support medium exchange."
msgid "You cannot simulate a medium exchange."
msgstr "No se puede simular un intercambio de medio."
msgstr "Este producto no admite el cambio de medio."
#: pretix/api/views/oauth.py pretix/control/logdisplay.py
#, python-brace-format
@@ -1399,8 +1401,10 @@ msgid "Membership type"
msgstr "Tipo de suscripción"
#: pretix/base/exporters/customers.py
#, fuzzy
#| msgid "Purchase time"
msgid "Purchase ticket"
msgstr "Comprar entrada"
msgstr "Hora de compra"
#: pretix/base/exporters/customers.py pretix/base/exporters/orderlist.py
#: pretix/base/exporters/waitinglist.py pretix/base/forms/questions.py
@@ -1417,6 +1421,8 @@ msgid "Start date"
msgstr "Fecha de inicio"
#: pretix/base/exporters/customers.py
#, fuzzy
#| msgid "Start time from"
msgid "Start time"
msgstr "Hora de inicio"
@@ -1431,8 +1437,10 @@ msgid "End date"
msgstr "Fecha final"
#: pretix/base/exporters/customers.py
#, fuzzy
#| msgid "End: %(time)s"
msgid "End time"
msgstr "Hora de finalización"
msgstr "Fin: %(time)s"
#: pretix/base/exporters/dekodi.py pretix/base/exporters/invoices.py
msgctxt "export_category"
@@ -4679,13 +4687,16 @@ msgid "This event is remote or partially remote."
msgstr "Este evento es remoto o parcialmente remoto."
#: pretix/base/models/event.py
#, fuzzy
#| msgid ""
#| "This will be used to let users know if the event is in a different "
#| "timezone and let’s us calculate users’ local times."
msgid ""
"This will be used to let users know if the event is in a different timezone, "
"and to let us calculate the local time of a user."
msgstr ""
"Esto servirá para informar a los usuarios de si el evento se celebra en una "
"zona horaria diferente y para que podamos calcular la hora local de cada "
"usuario."
"Esto se utilizará para que los usuarios sepan si el evento se celebra en una "
"zona horaria diferente y nos permite calcular la hora local de los usuarios."
#: pretix/base/models/event.py pretix/base/models/organizer.py
#: pretix/control/navigation.py
@@ -5812,7 +5823,7 @@ msgstr "Código de país (ISO 3166-1 alfa-2)"
#: pretix/base/models/items.py
msgid "Asked on"
msgstr "Preguntado el"
msgstr ""
#: pretix/base/models/items.py pretix/base/models/organizer.py
msgid ""
@@ -7512,6 +7523,9 @@ msgid "The payment for this invoice has already been received."
msgstr "El pago de esta factura ya se ha recibido."
#: pretix/base/payment.py
#, fuzzy
#| msgid ""
#| "This payment is already being processed and can not be canceled any more."
msgid ""
"This payment is already being processed and cannot be canceled any more."
msgstr "Este pago ya se está procesando y ya no se puede cancelar."
@@ -7638,12 +7652,15 @@ msgid "This gift card was used in the meantime. Please try again."
msgstr "Mientras tanto, esta tarjeta de regalo se utilizó. Inténtalo de nuevo."
#: pretix/base/payment.py
#, fuzzy
#| msgid ""
#| "This payment provider does not exist or the respective plugin is disabled."
msgid ""
"This payment provider exists for historical purposes only and is no longer "
"usable."
msgstr ""
"Este proveedor de pagos se mantiene únicamente con fines históricos y ya no "
"se puede utilizar."
"Este proveedor de pago no existe o el plugin correspondiente está "
"desactivado."
#: pretix/base/pdf.py
msgid "Ticket code (barcode content)"
@@ -8285,12 +8302,16 @@ msgid "Presale end"
msgstr "Fin de la preventa"
#: pretix/base/reldate.py
#, fuzzy
#| msgid "Order email"
msgid "Order creation"
msgstr "Creación de pedidos"
msgstr "Correo electrónico del pedido"
#: pretix/base/reldate.py
#, fuzzy
#| msgid "Order expired"
msgid "Order expiry"
msgstr "Caducidad del pedido"
msgstr "Pedido caducado"
#: pretix/base/reldate.py
msgid "before"
@@ -8319,22 +8340,22 @@ msgstr "No fijado"
#: pretix/base/reldate.py
#, python-brace-format
msgid "A relative date cannot be expressed as \"before\" for \"{}\""
msgstr "Una fecha relativa no puede expresarse como «antes de» para «{}»"
msgstr ""
#: pretix/base/reldate.py
#, python-brace-format
msgid "A relative date cannot be expressed as \"after\" for \"{}\""
msgstr "Una fecha relativa no puede expresarse como «después de» para «{}»"
msgstr ""
#: pretix/base/reldate.py
#, python-brace-format
msgid "A relative time cannot be expressed as \"before\" for \"{}\""
msgstr "Un tiempo relativo no puede expresarse como «antes de» para «{}»"
msgstr ""
#: pretix/base/reldate.py
#, python-brace-format
msgid "A relative time cannot be expressed as \"after\" for \"{}\""
msgstr "Un tiempo relativo no puede expresarse como «después de» para «{}»"
msgstr ""
#: pretix/base/secrets.py
msgid "Random (default, works with all pretix apps)"
@@ -9576,12 +9597,16 @@ msgstr ""
"una tarjeta regalo."
#: pretix/base/services/orders.py
#, fuzzy
#| msgid ""
#| "You cannot change the price of a position that has been used to issue a "
#| "gift card."
msgid ""
"You cannot change the ticket secret of a position that has been used to "
"issue a gift card."
msgstr ""
"No se puede modificar el código secreto de un ticket correspondiente a una "
"posición que se haya utilizado para emitir una tarjeta regalo."
"No se puede cambiar el precio de una posición que se ha usado para entregar "
"una tarjeta regalo."
#: pretix/base/services/orders.py
#, python-brace-format
@@ -10360,12 +10385,12 @@ msgstr ""
#: pretix/base/settings.py
msgid "No dates match your criteria."
msgstr "No hay fechas que se ajusten a tus criterios."
msgstr ""
#: pretix/base/settings.py
msgctxt "subevents"
msgid "Text for empty date results"
msgstr "Texto para los resultados con fechas vacías"
msgstr ""
#: pretix/base/settings.py
msgctxt "subevents"
@@ -10376,11 +10401,6 @@ msgid ""
"touch with you to arrange further dates. We do not recommend more than one "
"or two sentences."
msgstr ""
"Este texto aparecerá si el calendario o la lista de fechas están vacíos, por "
"ejemplo, porque un mes no contiene ninguna fecha o porque el filtro "
"seleccionado por el usuario no arroja ningún resultado. Puedes aprovecharlo "
"para indicar cómo ponerse en contacto contigo para concertar otras citas. No "
"recomendamos que superen una o dos frases."
#: pretix/base/settings.py
msgid "Guidance text"
@@ -14340,20 +14360,28 @@ msgstr ""
"año en el que se emite la tarjeta de regalo."
#: pretix/control/forms/event.py
#, fuzzy
#| msgid "Payment date"
msgid "Payment term"
msgstr "Condiciones de pago"
msgstr "Fecha de pago"
#: pretix/control/forms/event.py
#, fuzzy
#| msgid "(Same as above)"
msgid "same as above"
msgstr "igual que arriba"
msgstr "(Lo mismo que arriba)"
#: pretix/control/forms/event.py
#, fuzzy
#| msgid "Payment term in days"
msgid "different payment term in days"
msgstr "plazo de pago diferente en días"
msgstr "Plazo de pago en días"
#: pretix/control/forms/event.py
#, fuzzy
#| msgid "Payment term in minutes"
msgid "different payment term in minutes"
msgstr "plazo de pago diferente en minutos"
msgstr "Plazo de pago en minutos"
#: pretix/control/forms/event.py
msgid "Prices including tax"
@@ -15108,7 +15136,7 @@ msgstr "Fecha final"
#: pretix/control/forms/filter.py
msgid "Start time from"
msgstr "Hora de inicio a partir de"
msgstr "Hora de inicio"
#: pretix/control/forms/filter.py
msgid "Start time until"
@@ -15368,8 +15396,10 @@ msgid "Source"
msgstr "Fuente"
#: pretix/control/forms/filter.py
#, fuzzy
#| msgid "All vouchers"
msgid "All sources"
msgstr "Todas las fuentes"
msgstr "Todos los vales de compra"
#: pretix/control/forms/filter.py
msgid "Team actions"
@@ -15380,12 +15410,16 @@ msgid "Customer actions"
msgstr "Acciones de los clientes"
#: pretix/control/forms/filter.py
#, fuzzy
#| msgid "Device status"
msgid "Device actions"
msgstr "Acciones del dispositivo"
msgstr "Estado de los dispositivos"
#: pretix/control/forms/filter.py
#, fuzzy
#| msgid "Order email"
msgid "User email"
msgstr "Correo electrónico del usuario"
msgstr "Correo electrónico del pedido"
#: pretix/control/forms/filter.py pretix/control/navigation.py
msgid "All users"
@@ -16907,33 +16941,40 @@ msgid ""
"because at least one of the selected vouchers has already been redeemed "
"%(max_redeemed)s times."
msgstr ""
"No puedes reducir el número máximo de canjes a %(max_usages)s, ya que al "
"menos uno de los vales seleccionados ya se ha canjeado %(max_redeemed)s "
"veces."
#: pretix/control/forms/vouchers.py
#, fuzzy
#| msgid ""
#| "You cannot create a voucher that blocks quota as the selected product or "
#| "quota is currently sold out or completely reserved."
msgid ""
"You cannot create a voucher that allows selection of a quota but has no date "
"selected."
msgstr ""
"No se puede crear un comprobante que permita seleccionar una cuota pero en "
"el que no se haya seleccionado ninguna fecha."
"No se puede crear un vale de compra que bloquee la cuota ya que el producto "
"seleccionado o la cuota está agotada o completamente reservada."
#: pretix/control/forms/vouchers.py
#, fuzzy
#| msgid "The selected product does not allow to select a seat."
msgid "The selected quota does not match the selected subevent."
msgstr "La cuota seleccionada no coincide con el subevento seleccionado."
msgstr "El producto seleccionado no permite seleccionar una butaca."
#: pretix/control/forms/vouchers.py
#, fuzzy
#| msgid ""
#| "There is not enough quota available on quota \"{}\" to perform the "
#| "operation."
msgid "There is no sufficient quota available to perform this change."
msgstr "No hay cuota suficiente disponible para realizar este cambio."
msgstr ""
"No hay suficiente cuota disponible en la cuota \"{}\" para realizar esta "
"operación."
#: pretix/control/forms/vouchers.py
msgid ""
"Changing the maximum number of usages in bulk is not supported if any of the "
"selected vouchers is assigned a seat."
msgstr ""
"No es posible modificar de forma masiva el número máximo de usos si a alguno "
"de los vales seleccionados se le ha asignado una plaza."
#: pretix/control/forms/vouchers.py
msgctxt "subevent"
@@ -16941,24 +16982,18 @@ msgid ""
"Changing the date in bulk is not supported if any of the selected vouchers "
"is assigned a seat."
msgstr ""
"No es posible modificar la fecha de forma masiva si a alguno de los "
"comprobantes seleccionados se le ha asignado una plaza."
#: pretix/control/forms/vouchers.py
msgid ""
"Changing the product to a quota is not supported if any of the selected "
"vouchers is assigned a seat."
msgstr ""
"No es posible cambiar el producto a una cuota si a alguno de los vales "
"seleccionados se le ha asignado una plaza."
#: pretix/control/forms/vouchers.py
msgid ""
"This change cannot be completed because not all assigned seats of the "
"vouchers are still available"
msgstr ""
"No es posible completar este cambio porque no todos los asientos asignados "
"de los vales siguen estando disponibles"
#: pretix/control/forms/vouchers.py
msgid "Codes"
@@ -20413,24 +20448,34 @@ msgstr ""
"¡Genial!"
#: pretix/control/templates/pretixcontrol/email_setup_simple.html
#, fuzzy
#| msgid "Your new SPF record could look like this:"
msgid "Your new DKIM record should be set up as a CNAME record like this:"
msgstr ""
"El nuevo registro DKIM debe configurarse como un registro CNAME de la "
"siguiente manera:"
msgstr "El nuevo registro SPF podría tener el siguiente aspecto:"
#: pretix/control/templates/pretixcontrol/email_setup_simple.html
#, fuzzy
#| msgid ""
#| "We found an SPF record on your domain that includes this system. Great!"
msgid "We found a DKIM record on your domain for this system. Great!"
msgstr ""
"Hemos encontrado un registro DKIM en tu dominio para este sistema. ¡Genial!"
"Hemos encontrado un registro SPF en su dominio que incluye este sistema. "
"¡Genial!"
#: pretix/control/templates/pretixcontrol/email_setup_simple.html
#, fuzzy
#| msgid "Your new SPF record could look like this:"
msgid "Your new DMARC record could look like this:"
msgstr "El nuevo registro DMARC podría tener este aspecto:"
msgstr "El nuevo registro SPF podría tener el siguiente aspecto:"
#: pretix/control/templates/pretixcontrol/email_setup_simple.html
#, fuzzy
#| msgid ""
#| "We found an SPF record on your domain that includes this system. Great!"
msgid "We found a DMARC record on your domain for this system. Great!"
msgstr ""
"Hemos encontrado un registro DMARC en tu dominio para este sistema. ¡Genial!"
"Hemos encontrado un registro SPF en su dominio que incluye este sistema. "
"¡Genial!"
#: pretix/control/templates/pretixcontrol/email_setup_simple.html
msgid "Verification"
@@ -22141,8 +22186,10 @@ msgid "The quick brown fox jumps over the lazy dog."
msgstr "El veloz zorro marrón salta sobre el perro perezoso."
#: pretix/control/templates/pretixcontrol/fragment_log_filter_form.html
#, fuzzy
#| msgid "Specific seat"
msgid "Specific object selected"
msgstr "Se ha seleccionado un objeto concreto"
msgstr "Butaca especifica"
#: pretix/control/templates/pretixcontrol/fragment_quota_box.html
#: pretix/control/templates/pretixcontrol/fragment_quota_box_paid.html
@@ -23215,24 +23262,28 @@ msgstr ""
"sus usuarios acerca de las necesidades dietéticas."
#: pretix/control/templates/pretixcontrol/items/questions.html
#, fuzzy
#| msgid "Create a new question"
msgid "Create a new per-ticket question"
msgstr "Crear una nueva pregunta por ticket"
msgstr "Crear una nueva pregunta"
#: pretix/control/templates/pretixcontrol/items/questions.html
#, fuzzy
#| msgid "Create a new question"
msgid "Create a new order-level question"
msgstr "Crear una nueva pregunta a nivel de pedido"
msgstr "Crear una nueva pregunta"
#: pretix/control/templates/pretixcontrol/items/questions.html
#, fuzzy
#| msgid "Delete question"
msgid "Per-ticket questions"
msgstr "Preguntas por entrada"
msgstr "Borrar pregunta"
#: pretix/control/templates/pretixcontrol/items/questions.html
msgid ""
"These questions are asked for every ticket, so possibly multiple times in "
"the same order."
msgstr ""
"Estas preguntas se formulan para cada entrada, por lo que es posible que se "
"repitan varias veces en el mismo pedido."
#: pretix/control/templates/pretixcontrol/items/questions.html
msgid "Create a new question"
@@ -23251,28 +23302,28 @@ msgid "All personalized products"
msgstr "Todos los productos personalizados"
#: pretix/control/templates/pretixcontrol/items/questions.html
#, fuzzy
#| msgid "Include questions"
msgid "Per-order questions"
msgstr "Preguntas por pedido"
msgstr "Incluir preguntas"
#: pretix/control/templates/pretixcontrol/items/questions.html
msgid ""
"This functionality is in active development and expected to change "
"significantly over the coming months."
msgstr ""
"Esta funcionalidad se encuentra en fase de desarrollo activo y se prevé que "
"sufra cambios significativos en los próximos meses."
#: pretix/control/templates/pretixcontrol/items/questions.html
msgid ""
"Per-order questions are currently not supported and will not be displayed in "
"pretixPOS."
msgstr ""
"Actualmente no se admiten las preguntas por pedido y no se mostrarán en "
"pretixPOS."
#: pretix/control/templates/pretixcontrol/items/questions.html
#, fuzzy
#| msgid "The question has been reordered."
msgid "These questions are asked once per order."
msgstr "Estas preguntas se formulan una vez por pedido."
msgstr "La pregunta ha sido reordenada."
#: pretix/control/templates/pretixcontrol/items/quota.html
#: pretix/control/templates/pretixcontrol/items/quota_edit.html
@@ -23804,8 +23855,6 @@ msgid ""
"Ticket secrets of order positions that have been used to issue a gift card "
"can not be changed. Only the link will be changed in this case."
msgstr ""
"Los datos de los pedidos que se han utilizado para emitir una tarjeta regalo "
"no se pueden modificar. En este caso, solo se modificará el enlace."
#: pretix/control/templates/pretixcontrol/order/change.html
msgid ""
@@ -23881,8 +23930,10 @@ msgstr "(opcional)"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html
#: pretix/presale/templates/pretixpresale/event/order_modify.html
#, fuzzy
#| msgid "Additional information"
msgid "Additional order information"
msgstr "Información adicional sobre el pedido"
msgstr "Información adicional"
#: pretix/control/templates/pretixcontrol/order/delete.html
msgid "Delete order"
@@ -25584,13 +25635,14 @@ msgid "Hardware model"
msgstr "Modelo del Hardware"
#: pretix/control/templates/pretixcontrol/organizers/devices.html
#, python-format
#, fuzzy, python-format
#| msgid "Begin: %(time)s"
msgid "Last seen: %(time)s"
msgstr "Última conexión: %(time)s"
msgstr "Inicio: %(time)s"
#: pretix/control/templates/pretixcontrol/organizers/devices.html
msgid "No recent contact"
msgstr "No ha habido contacto reciente"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/devices.html
msgid "Not yet initialized"
@@ -27939,8 +27991,10 @@ msgstr ""
"producto!"
#: pretix/control/templates/pretixcontrol/vouchers/bulk_edit.html
#, fuzzy
#| msgid "Create multiple vouchers"
msgid "Change multiple vouchers"
msgstr "Modificar varios vales"
msgstr "Crear múltiples vales de compra"
#: pretix/control/templates/pretixcontrol/vouchers/delete.html
#: pretix/control/templates/pretixcontrol/vouchers/detail.html
@@ -28351,9 +28405,6 @@ msgid ""
"team. If you want to add a different user or create a new account, log out "
"and click the invitation link again."
msgstr ""
"No puedes aceptar la invitación para «{}», ya que ya formas parte de este "
"equipo. Si quieres añadir a otro usuario o crear una nueva cuenta, cierra la "
"sesión y vuelve a hacer clic en el enlace de invitación."
#: pretix/control/views/auth.py
#, python-brace-format
@@ -29037,6 +29088,13 @@ msgstr ""
"SPF."
#: pretix/control/views/mailsetup.py
#, fuzzy
#| msgid ""
#| "We could not find an SPF record set for the domain you are trying to use. "
#| "This means that there is a very high change most of the emails will be "
#| "rejected or marked as spam. We strongly recommend setting an SPF record "
#| "on the domain. You can do so through the DNS settings at the provider you "
#| "registered your domain with."
msgid ""
"We could not find a CNAME record pointing to our DKIM key for domain you are "
"trying to use. This means that there is a very high change most of the "
@@ -29044,35 +29102,53 @@ msgid ""
"DKIM through a CNAME record. You can do so through the DNS settings at the "
"provider you registered your domain with."
msgstr ""
"No hemos podido encontrar un registro CNAME que apunte a nuestra clave DKIM "
"para el dominio que estás intentando utilizar. Esto significa que hay una "
"probabilidad muy alta de que la mayoría de los correos electrónicos sean "
"rechazados o marcados como spam. Te recomendamos encarecidamente que "
"configures DKIM mediante un registro CNAME. Puedes hacerlo a través de la "
"configuración de DNS del proveedor con el que registraste tu dominio."
"No se pudo encontrar un registro SPF configurado para el dominio que está "
"intentando usar. Esto significa que existe una alta probabilidad de que la "
"mayoría de los correos electrónicos sean rechazados o marcados como spam. "
"Recomendamos encarecidamente configurar un registro SPF en el dominio. Puede "
"hacerlo a través de la configuración de DNS en el proveedor con el que "
"registró su dominio."
#: pretix/control/views/mailsetup.py
#, fuzzy
#| msgid ""
#| "We found an SPF record set for the domain you are trying to use, but it "
#| "does not include this system's email server. This means that there is a "
#| "very high chance most of the emails will be rejected or marked as spam. "
#| "You should update the DNS settings of your domain to include this system "
#| "in the SPF record."
msgid ""
"We found a CNAME record for a DKIM key, but it is not pointing to the right "
"location. This means that there is a very high chance most of the emails "
"will be rejected or marked as spam. You should update the DNS settings of "
"your domain."
msgstr ""
"Hemos encontrado un registro CNAME para una clave DKIM, pero no apunta a la "
"ubicación correcta. Esto significa que hay muchas posibilidades de que la "
"mayoría de los correos electrónicos sean rechazados o marcados como spam. "
"Deberías actualizar la configuración DNS de tu dominio."
"Hemos encontrado un registro SPF configurado para el dominio que está "
"intentando utilizar, pero no incluye el servidor de correo electrónico del "
"mismo sistema. Esto significa que es muy probable que la mayoría de los "
"correos electrónicos sean rechazados o marcados como spam. Debe actualizar "
"la configuración DNS de su dominio para incluir este sistema en el registro "
"SPF."
#: pretix/control/views/mailsetup.py
#, fuzzy
#| msgid ""
#| "We found an SPF record set for the domain you are trying to use, but it "
#| "does not include this system's email server. This means that there is a "
#| "very high chance most of the emails will be rejected or marked as spam. "
#| "You should update the DNS settings of your domain to include this system "
#| "in the SPF record."
msgid ""
"We did not find a DMARC record for your domain. This means that there is a "
"very high chance most of the emails will be rejected or marked as spam. You "
"should update the DNS settings of your domain."
msgstr ""
"No hemos encontrado ningún registro DMARC para tu dominio. Esto significa "
"que hay muchas posibilidades de que la mayoría de los correos electrónicos "
"sean rechazados o marcados como spam. Deberías actualizar la configuración "
"DNS de tu dominio."
"Hemos encontrado un registro SPF configurado para el dominio que está "
"intentando utilizar, pero no incluye el servidor de correo electrónico del "
"mismo sistema. Esto significa que es muy probable que la mayoría de los "
"correos electrónicos sean rechazados o marcados como spam. Debe actualizar "
"la configuración DNS de su dominio para incluir este sistema en el registro "
"SPF."
#: pretix/control/views/mailsetup.py
msgid "The verification code was incorrect, please try again."
@@ -31825,7 +31901,6 @@ msgstr ""
#: pretix/plugins/paypal2/payment.py
msgid "Allow further payments during compliance hold"
msgstr ""
"Permitir que se realicen más pagos durante la suspensión por incumplimiento"
#: pretix/plugins/paypal2/payment.py
msgid ""
@@ -31835,24 +31910,16 @@ msgid ""
"attempts during that window. This might result in them being charged twice "
"if the original payment is approved."
msgstr ""
"El sistema de prevención de fraudes de PayPal podría bloquear la tramitación "
"de pagos individuales durante un periodo de tiempo considerable. Durante ese "
"intervalo, el pago aparece como «pendiente». Puedes permitir que tus "
"clientes realicen nuevos intentos de pago durante ese intervalo. Esto podría "
"dar lugar a que se les cobre dos veces si se aprueba el pago original."
#: pretix/plugins/paypal2/payment.py
msgid "Timeout further payment attempts"
msgstr "Tiempo de espera para nuevos intentos de pago"
msgstr ""
#: pretix/plugins/paypal2/payment.py
msgid ""
"Time duration in minutes after which another payment attempt is possible, "
"while the last payment is still under investigation."
msgstr ""
"Tiempo, expresado en minutos, transcurrido tras el cual es posible realizar "
"otro intento de pago, mientras el último pago sigue siendo objeto de "
"investigación."
#: pretix/plugins/paypal2/payment.py
msgid "-- Automatic --"
@@ -32121,11 +32188,6 @@ msgid ""
"twice in case PayPal allows your initial payment attempt. Please contact us "
"to resolve this case."
msgstr ""
"PayPal está procesando tu pago. Este proceso está tardando más de lo "
"habitual. Puedes esperar a que PayPal confirme el pago o intentar volver a "
"pagar con este u otro método de pago. Esto podría dar lugar a que se te "
"cobre dos veces en caso de que PayPal acepte tu primer intento de pago. "
"Ponte en contacto con nosotros para resolver este asunto."
#: pretix/plugins/paypal2/views.py
msgid ""
@@ -32377,21 +32439,24 @@ msgid "Base redirection URLs"
msgstr "URL de redirección de base"
#: pretix/plugins/returnurl/views.py
#, fuzzy
#| msgid ""
#| "Redirection will only be allowed to URLs that start with one of these "
#| "prefixes. Enter one or more allowed URL prefix per line. URL prefixes "
#| "must include a slash after the hostname."
msgid ""
"Redirection will only be allowed to URLs that start with one of these "
"prefixes. Enter one allowed URL prefix per line. URL prefixes must include a "
"slash after the hostname."
msgstr ""
"Solo se permitirá la redirección a direcciones URL que empiecen por uno de "
"estos prefijos. Introduce un prefijo de URL permitido por línea. Los "
"La redirección sólo se permitirá a las URL que empiecen por uno de estos "
"prefijos. Introduzca uno o más prefijos de URL permitidos por línea. Los "
"prefijos de URL deben incluir una barra después del nombre de host."
#: pretix/plugins/returnurl/views.py
msgid ""
"All values must be URLs that include at last one slash after the hostname."
msgstr ""
"Todos los valores deben ser direcciones URL que incluyan al menos una barra "
"después del nombre de host."
#: pretix/plugins/sendmail/apps.py
msgid "Send out emails to all your customers or specific groups of customers."
+110 -77
View File
@@ -4,10 +4,10 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-24 15:35+0000\n"
"PO-Revision-Date: 2026-08-25 00:00+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/"
"fr/>\n"
"PO-Revision-Date: 2026-08-11 17:00+0000\n"
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/fr/"
">\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -89,7 +89,7 @@ msgstr "Hébreu"
#: pretix/_base_settings.py
msgid "Hungarian"
msgstr "Hongrois"
msgstr ""
#: pretix/_base_settings.py
msgid "Indonesian"
@@ -438,8 +438,10 @@ msgid "You cannot exchange a medium for a medium."
msgstr "Il n'est pas possible d'échanger un support contre un autre support."
#: pretix/api/views/checkin.py
#, fuzzy
#| msgid "Product does not support medium exchange."
msgid "You cannot simulate a medium exchange."
msgstr "l n'est pas possible de simuler un échange de support."
msgstr "Ce produit ne permet pas de changer de support."
#: pretix/api/views/oauth.py pretix/control/logdisplay.py
#, python-brace-format
@@ -5831,7 +5833,7 @@ msgstr "Code pays (ISO 3166-1 alpha-2)"
#: pretix/base/models/items.py
msgid "Asked on"
msgstr "Question posée le"
msgstr ""
#: pretix/base/models/items.py pretix/base/models/organizer.py
msgid ""
@@ -7553,6 +7555,9 @@ msgid "The payment for this invoice has already been received."
msgstr "Le paiement de cette facture a déjà été reçu."
#: pretix/base/payment.py
#, fuzzy
#| msgid ""
#| "This payment is already being processed and can not be canceled any more."
msgid ""
"This payment is already being processed and cannot be canceled any more."
msgstr ""
@@ -8335,12 +8340,16 @@ msgid "Presale end"
msgstr "Fin de la prévente"
#: pretix/base/reldate.py
#, fuzzy
#| msgid "Order email"
msgid "Order creation"
msgstr "Création d'une commande"
msgstr "E-mail de la commande"
#: pretix/base/reldate.py
#, fuzzy
#| msgid "Order expired"
msgid "Order expiry"
msgstr "Expiration de la commande"
msgstr "Commande expirée"
#: pretix/base/reldate.py
msgid "before"
@@ -8369,22 +8378,22 @@ msgstr "Non réglé"
#: pretix/base/reldate.py
#, python-brace-format
msgid "A relative date cannot be expressed as \"before\" for \"{}\""
msgstr "Une date relative ne peut pas être exprimée par « avant » pour « {} »"
msgstr ""
#: pretix/base/reldate.py
#, python-brace-format
msgid "A relative date cannot be expressed as \"after\" for \"{}\""
msgstr "Une date relative ne peut pas être exprimée par « après » pour « {} »"
msgstr ""
#: pretix/base/reldate.py
#, python-brace-format
msgid "A relative time cannot be expressed as \"before\" for \"{}\""
msgstr "Une durée relative ne peut pas être exprimée par « avant » pour « {} »"
msgstr ""
#: pretix/base/reldate.py
#, python-brace-format
msgid "A relative time cannot be expressed as \"after\" for \"{}\""
msgstr "Un temps relatif ne peut pas être exprimé par « après » pour « {} »"
msgstr ""
#: pretix/base/secrets.py
msgid "Random (default, works with all pretix apps)"
@@ -10421,12 +10430,12 @@ msgstr ""
#: pretix/base/settings.py
msgid "No dates match your criteria."
msgstr "Aucune date ne correspond à vos critères."
msgstr ""
#: pretix/base/settings.py
msgctxt "subevents"
msgid "Text for empty date results"
msgstr "Texte à afficher lorsque les résultats ne contiennent aucune date"
msgstr ""
#: pretix/base/settings.py
msgctxt "subevents"
@@ -10437,11 +10446,6 @@ msgid ""
"touch with you to arrange further dates. We do not recommend more than one "
"or two sentences."
msgstr ""
"Ce texte s'affichera si le calendrier ou la liste des dates est vide, par "
"exemple parce qu'un mois ne comporte aucune date ou qu'un filtre sélectionné "
"par l'utilisateur ne donne aucun résultat. Vous pouvez en profiter pour "
"indiquer comment vous contacter afin de convenir d'autres dates. Nous vous "
"recommandons de ne pas dépasser une ou deux phrases."
#: pretix/base/settings.py
msgid "Guidance text"
@@ -14475,20 +14479,28 @@ msgstr ""
"plus l’année d’émission de la carte-cadeau."
#: pretix/control/forms/event.py
#, fuzzy
#| msgid "Payment date"
msgid "Payment term"
msgstr "Conditions de paiement"
msgstr "Date de paiement"
#: pretix/control/forms/event.py
#, fuzzy
#| msgid "(Same as above)"
msgid "same as above"
msgstr "idem que ci-dessus"
msgstr "(identique à ce qui précède)"
#: pretix/control/forms/event.py
#, fuzzy
#| msgid "Payment term in days"
msgid "different payment term in days"
msgstr "délai de paiement différent en jours"
msgstr "Délai de paiement en jours"
#: pretix/control/forms/event.py
#, fuzzy
#| msgid "Payment term in minutes"
msgid "different payment term in minutes"
msgstr "durée de paiement différente en minutes"
msgstr "Délai de paiement en minutes"
#: pretix/control/forms/event.py
msgid "Prices including tax"
@@ -20565,20 +20577,26 @@ msgstr ""
"CNAME comme ceci :"
#: pretix/control/templates/pretixcontrol/email_setup_simple.html
#, fuzzy
#| msgid ""
#| "We found an SPF record on your domain that includes this system. Great!"
msgid "We found a DKIM record on your domain for this system. Great!"
msgstr ""
"Nous avons trouvé un enregistrement DKIM sur votre domaine pour ce système. "
"Parfait !"
"Nous avons trouvé un enregistrement SPF sur votre domaine qui inclut ce "
"système. Super !"
#: pretix/control/templates/pretixcontrol/email_setup_simple.html
msgid "Your new DMARC record could look like this:"
msgstr "Votre nouvel enregistrement DMARC pourrait ressembler à ceci :"
#: pretix/control/templates/pretixcontrol/email_setup_simple.html
#, fuzzy
#| msgid ""
#| "We found an SPF record on your domain that includes this system. Great!"
msgid "We found a DMARC record on your domain for this system. Great!"
msgstr ""
"Nous avons trouvé un enregistrement DMARC sur votre domaine pour ce système. "
"Parfait !"
"Nous avons trouvé un enregistrement SPF sur votre domaine qui inclut ce "
"système. Super !"
#: pretix/control/templates/pretixcontrol/email_setup_simple.html
msgid "Verification"
@@ -23389,24 +23407,28 @@ msgstr ""
"besoins alimentaires."
#: pretix/control/templates/pretixcontrol/items/questions.html
#, fuzzy
#| msgid "Create a new question"
msgid "Create a new per-ticket question"
msgstr "Créer une nouvelle question spécifique à chaque ticket"
msgstr "Créer une nouvelle question"
#: pretix/control/templates/pretixcontrol/items/questions.html
#, fuzzy
#| msgid "Create a new question"
msgid "Create a new order-level question"
msgstr "Créer une nouvelle question au niveau de la commande"
msgstr "Créer une nouvelle question"
#: pretix/control/templates/pretixcontrol/items/questions.html
#, fuzzy
#| msgid "Delete question"
msgid "Per-ticket questions"
msgstr "Questions relatives à chaque billet"
msgstr "Supprimer la question"
#: pretix/control/templates/pretixcontrol/items/questions.html
msgid ""
"These questions are asked for every ticket, so possibly multiple times in "
"the same order."
msgstr ""
"Ces questions sont posées pour chaque billet, et peuvent donc être posées "
"plusieurs fois au cours d'une même commande."
#: pretix/control/templates/pretixcontrol/items/questions.html
msgid "Create a new question"
@@ -23425,28 +23447,28 @@ msgid "All personalized products"
msgstr "Tous les produits personnalisés"
#: pretix/control/templates/pretixcontrol/items/questions.html
#, fuzzy
#| msgid "Include questions"
msgid "Per-order questions"
msgstr "Questions relatives à chaque commande"
msgstr "Inclure des questions"
#: pretix/control/templates/pretixcontrol/items/questions.html
msgid ""
"This functionality is in active development and expected to change "
"significantly over the coming months."
msgstr ""
"Cette fonctionnalité est en cours de développement et devrait évoluer "
"considérablement au cours des prochains mois."
#: pretix/control/templates/pretixcontrol/items/questions.html
msgid ""
"Per-order questions are currently not supported and will not be displayed in "
"pretixPOS."
msgstr ""
"Les questions spécifiques à chaque commande ne sont actuellement pas prises "
"en charge et n'apparaîtront pas dans pretixPOS."
#: pretix/control/templates/pretixcontrol/items/questions.html
#, fuzzy
#| msgid "The question has been reordered."
msgid "These questions are asked once per order."
msgstr "Ces questions sont posées une fois par commande."
msgstr "La question a été réordonnée."
#: pretix/control/templates/pretixcontrol/items/quota.html
#: pretix/control/templates/pretixcontrol/items/quota_edit.html
@@ -24058,8 +24080,10 @@ msgstr "(optionnel)"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html
#: pretix/presale/templates/pretixpresale/event/order_modify.html
#, fuzzy
#| msgid "Additional information"
msgid "Additional order information"
msgstr "Informations complémentaires sur la commande"
msgstr "Informations complémentaires"
#: pretix/control/templates/pretixcontrol/order/delete.html
msgid "Delete order"
@@ -25775,13 +25799,14 @@ msgid "Hardware model"
msgstr "Modèle de matériel"
#: pretix/control/templates/pretixcontrol/organizers/devices.html
#, python-format
#, fuzzy, python-format
#| msgid "Begin: %(time)s"
msgid "Last seen: %(time)s"
msgstr "Dernière connexion : %(time)s"
msgstr "Début : %(time)s"
#: pretix/control/templates/pretixcontrol/organizers/devices.html
msgid "No recent contact"
msgstr "Aucun contact récent"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/devices.html
msgid "Not yet initialized"
@@ -29261,6 +29286,13 @@ msgstr ""
"l'enregistrement SPF."
#: pretix/control/views/mailsetup.py
#, fuzzy
#| msgid ""
#| "We could not find an SPF record set for the domain you are trying to use. "
#| "This means that there is a very high change most of the emails will be "
#| "rejected or marked as spam. We strongly recommend setting an SPF record "
#| "on the domain. You can do so through the DNS settings at the provider you "
#| "registered your domain with."
msgid ""
"We could not find a CNAME record pointing to our DKIM key for domain you are "
"trying to use. This means that there is a very high change most of the "
@@ -29268,35 +29300,53 @@ msgid ""
"DKIM through a CNAME record. You can do so through the DNS settings at the "
"provider you registered your domain with."
msgstr ""
"Nous n'avons pas trouvé d'enregistrement CNAME pointant vers notre clé DKIM "
"pour le domaine que vous essayez d'utiliser. Cela signifie qu'il y a de très "
"fortes chances que la plupart des e-mails soient rejetés ou marqués comme "
"spam. Nous vous recommandons vivement de configurer DKIM à l'aide d'un "
"enregistrement CNAME. Vous pouvez le faire via les paramètres DNS chez le "
"fournisseur auprès duquel vous avez enregistré votre domaine."
"Nous n'avons pas trouvé d'enregistrement SPF pour le domaine que vous "
"essayez d'utiliser. Cela signifie qu'il y a de fortes chances que la plupart "
"des e-mails soient rejetés ou marqués comme spam. Nous vous recommandons "
"vivement de configurer un enregistrement SPF sur le domaine. Vous pouvez le "
"faire via les paramètres DNS chez le fournisseur auprès duquel vous avez "
"enregistré votre domaine."
#: pretix/control/views/mailsetup.py
#, fuzzy
#| msgid ""
#| "We found an SPF record set for the domain you are trying to use, but it "
#| "does not include this system's email server. This means that there is a "
#| "very high chance most of the emails will be rejected or marked as spam. "
#| "You should update the DNS settings of your domain to include this system "
#| "in the SPF record."
msgid ""
"We found a CNAME record for a DKIM key, but it is not pointing to the right "
"location. This means that there is a very high chance most of the emails "
"will be rejected or marked as spam. You should update the DNS settings of "
"your domain."
msgstr ""
"Nous avons détecté un enregistrement CNAME associé à une clé DKIM, mais "
"celui-ci ne pointe pas vers la bonne adresse. Cela signifie qu'il y a de "
"très fortes chances que la plupart de vos e-mails soient rejetés ou classés "
"comme spam. Vous devez mettre à jour les paramètres DNS de votre domaine."
"Nous avons trouvé un enregistrement SPF défini pour le domaine que vous "
"essayez d'utiliser, mais il n'inclut pas le serveur de messagerie de ce "
"système. Cela signifie qu'il y a de fortes chances que la plupart des e-"
"mails soient rejetés ou marqués comme spam. Vous devez mettre à jour les "
"paramètres DNS de votre domaine afin d'inclure ce système dans "
"l'enregistrement SPF."
#: pretix/control/views/mailsetup.py
#, fuzzy
#| msgid ""
#| "We found an SPF record set for the domain you are trying to use, but it "
#| "does not include this system's email server. This means that there is a "
#| "very high chance most of the emails will be rejected or marked as spam. "
#| "You should update the DNS settings of your domain to include this system "
#| "in the SPF record."
msgid ""
"We did not find a DMARC record for your domain. This means that there is a "
"very high chance most of the emails will be rejected or marked as spam. You "
"should update the DNS settings of your domain."
msgstr ""
"Nous n'avons pas trouvé d'enregistrement DMARC pour votre domaine. Cela "
"signifie qu'il y a de très fortes chances que la plupart de vos e-mails "
"soient rejetés ou marqués comme spam. Vous devriez mettre à jour les "
"paramètres DNS de votre domaine."
"Nous avons trouvé un enregistrement SPF défini pour le domaine que vous "
"essayez d'utiliser, mais il n'inclut pas le serveur de messagerie de ce "
"système. Cela signifie qu'il y a de fortes chances que la plupart des e-"
"mails soient rejetés ou marqués comme spam. Vous devez mettre à jour les "
"paramètres DNS de votre domaine afin d'inclure ce système dans "
"l'enregistrement SPF."
#: pretix/control/views/mailsetup.py
msgid "The verification code was incorrect, please try again."
@@ -31982,8 +32032,8 @@ msgid ""
"We're waiting for an answer from PayPal regarding your payment. Please "
"contact us, if this takes more than a few hours."
msgstr ""
"Nous attendons une réponse de PayPal concernant votre paiement. N'hésitez "
"pas à nous contacter si cela prend plus de quelques heures."
"Nous attendons une réponse de PayPal concernant votre paiement. Veuillez "
"nous contacter, si cela prend plus de quelques heures."
#: pretix/plugins/paypal/views.py pretix/plugins/paypal2/views.py
msgid "Invalid response from PayPal received."
@@ -32081,8 +32131,6 @@ msgstr ""
#: pretix/plugins/paypal2/payment.py
msgid "Allow further payments during compliance hold"
msgstr ""
"Autoriser la poursuite des paiements pendant la période de suspension pour "
"non-conformité"
#: pretix/plugins/paypal2/payment.py
msgid ""
@@ -32092,25 +32140,16 @@ msgid ""
"attempts during that window. This might result in them being charged twice "
"if the original payment is approved."
msgstr ""
"Le système de prévention des fraudes de PayPal peut bloquer le traitement de "
"certains paiements pendant une durée considérable. Pendant cette période, le "
"paiement est marqué comme « en attente ». Vous pouvez autoriser vos clients "
"à effectuer de nouvelles tentatives de paiement pendant cette période. Cela "
"peut entraîner un double prélèvement si le paiement initial est finalement "
"approuvé."
#: pretix/plugins/paypal2/payment.py
msgid "Timeout further payment attempts"
msgstr "Délai d'expiration des tentatives de paiement supplémentaires"
msgstr ""
#: pretix/plugins/paypal2/payment.py
msgid ""
"Time duration in minutes after which another payment attempt is possible, "
"while the last payment is still under investigation."
msgstr ""
"Durée en minutes à l'issue de laquelle une nouvelle tentative de paiement "
"est possible, alors que le dernier paiement fait toujours l'objet d'une "
"enquête."
#: pretix/plugins/paypal2/payment.py
msgid "-- Automatic --"
@@ -32388,12 +32427,6 @@ msgid ""
"twice in case PayPal allows your initial payment attempt. Please contact us "
"to resolve this case."
msgstr ""
"Votre paiement est en cours de traitement par PayPal. Cette opération prend "
"plus de temps que d'habitude. Vous pouvez attendre que PayPal valide le "
"paiement ou essayer de payer à nouveau en utilisant ce moyen de paiement ou "
"un autre. Cela pourrait entraîner un double prélèvement si PayPal autorise "
"votre première tentative de paiement. Veuillez nous contacter pour résoudre "
"ce problème."
#: pretix/plugins/paypal2/views.py
msgid ""
+3 -1
View File
@@ -494,6 +494,7 @@ def webhook(request, *args, **kwargs):
elif payment.state in (OrderPayment.PAYMENT_STATE_PENDING, OrderPayment.PAYMENT_STATE_CREATED,
OrderPayment.PAYMENT_STATE_CANCELED, OrderPayment.PAYMENT_STATE_FAILED):
if sale['status'] == 'COMPLETED':
any_captures = False
all_captures_completed = True
any_pending_review = False
any_failed = None
@@ -505,6 +506,7 @@ def webhook(request, *args, **kwargs):
except ReferencedPayPalObject.MultipleObjectsReturned:
pass
any_captures = True
if capture['status'] in ('COMPLETED', 'REFUNDED', 'PARTIALLY_REFUNDED'):
pass
elif capture['status'] in ("DECLINED", "FAILED"):
@@ -516,7 +518,7 @@ def webhook(request, *args, **kwargs):
any_pending_review = True
else:
raise ValueError("Unknown paypal capture state: {}".format(capture['status']))
if all_captures_completed:
if any_captures and all_captures_completed:
try:
payment.confirm()
prov.log_payment_duration(payment)
+9 -14
View File
@@ -46,7 +46,7 @@ import isoweek
from django.conf import settings
from django.core.cache import caches
from django.db.models import (
Case, Exists, F, Max, Min, OuterRef, Prefetch, Q, Subquery, Value, When,
Case, Exists, F, Max, Min, OuterRef, Prefetch, Q, Value, When,
)
from django.db.models.functions import Coalesce, Greatest
from django.dispatch.dispatcher import NO_RECEIVERS
@@ -189,27 +189,22 @@ class EventListMixin:
def _get_event_list_queryset(self):
query = Q(is_public=True) & Q(live=True)
qs = self.request.organizer.events.using(settings.DATABASE_REPLICA).filter(query)
qs = qs.filter(Q(all_sales_channels=True) | Q(id__in=self.request.sales_channel.event_set.values_list("pk")))
qs = qs.filter(Q(all_sales_channels=True) | Q(limit_sales_channels=self.request.sales_channel))
show_old = "old" in self.request.GET
subevent_filter = Q(active=True, is_public=True)
subevent_filter = Q(subevents__active=True, subevents__is_public=True)
if not show_old:
subevent_filter &= Q(
Q(date_to__gte=now()) | Q(date_from__gte=now())
Q(subevents__date_to__gte=now()) | Q(subevents__date_from__gte=now())
)
subevent_subquery_qs = SubEvent.objects.with_scopes_disabled().filter(
subevent_filter,
event_id=OuterRef('pk')
).values('event').order_by()
qs = qs.annotate(
min_from=Subquery(subevent_subquery_qs.annotate(m=Min('date_from')).values('m')),
min_to=Subquery(subevent_subquery_qs.annotate(m=Min('date_to')).values('m')),
max_from=Subquery(subevent_subquery_qs.annotate(m=Max('date_from')).values('m')),
max_to=Subquery(subevent_subquery_qs.annotate(m=Max('date_to')).values('m')),
).annotate(
max_fromto=Greatest(F("max_to"), F("max_from")),
min_from=Min('subevents__date_from', filter=subevent_filter),
min_to=Min('subevents__date_to', filter=subevent_filter),
max_from=Max('subevents__date_from', filter=subevent_filter),
max_to=Max('subevents__date_to', filter=subevent_filter),
max_fromto=Greatest(Max('subevents__date_to', filter=subevent_filter), Max('subevents__date_from', filter=subevent_filter)),
)
if show_old:
date_q = Q(date_to__lt=now()) | (Q(date_to__isnull=True) & Q(date_from__lt=now()))
+118
View File
@@ -299,6 +299,30 @@ def get_test_order_review_pending():
'method': 'GET'}]}
def get_test_empty_captures():
return {'id': '806440346Y391300T',
'intent': 'CAPTURE',
'status': 'COMPLETED',
'purchase_units': [{'reference_id': 'default',
'amount': {'currency_code': 'EUR', 'value': '43.59'},
'payee': {'email_address': 'dummy-facilitator@dummy.dummy',
'merchant_id': 'G6R2B9YXADKWW'},
'description': 'Order JWJGC for PayPal v2',
'custom_id': 'Order PAYPALV2-JWJGC',
'soft_descriptor': 'MARTINFACIL',
'payments': {'captures': []}
}],
'payer': {'name': {'given_name': 'test', 'surname': 'buyer'},
'email_address': 'dummy@dummy.dummy',
'payer_id': 'Q739JNKWH67HE',
'address': {'country_code': 'DE'}},
'create_time': '2022-04-28T11:59:59Z',
'update_time': '2022-04-28T12:00:22Z',
'links': [{'href': 'https://api.sandbox.paypal.com/v2/checkout/orders/806440346Y391300T',
'rel': 'self',
'method': 'GET'}]}
class Object():
pass
@@ -456,6 +480,100 @@ def test_webhook_all_good(env, client, monkeypatch):
assert order.status == Order.STATUS_PAID
@pytest.mark.django_db
def test_webhook_empty_captures(env, client, monkeypatch):
order = env[1]
with scopes_disabled():
p = order.payments.first()
p.state = OrderPayment.PAYMENT_STATE_PENDING
p.save()
order.status = Order.STATUS_PENDING
order.save()
pp_order = Result(get_test_empty_captures())
monkeypatch.setattr("paypalcheckoutsdk.orders.OrdersGetRequest", lambda *args: pp_order)
monkeypatch.setattr("pretix.plugins.paypal2.payment.PaypalMethod.init_api", init_api)
with scopes_disabled():
ReferencedPayPalObject.objects.create(order=order, payment=order.payments.first(),
reference="806440346Y391300T")
client.post('/_paypal/webhook/', json.dumps(
{
"id": "WH-4T867178D0574904F-7TT11736YU643990P",
"create_time": "2022-04-28T12:00:37.077Z",
"resource_type": "checkout-order",
"event_type": "CHECKOUT.ORDER.COMPLETED",
"summary": "Checkout Order Completed",
"resource": {
"update_time": "2022-04-28T12:00:22Z",
"create_time": "2022-04-28T11:59:59Z",
"purchase_units": [
{
"reference_id": "default",
"amount": {
"currency_code": "EUR",
"value": "43.59"
},
"payee": {
"email_address": "dummy-facilitator@dummy.dummy",
"merchant_id": "G6R2B9YXADKWW"
},
"description": "Order JWJGC for PayPal v2",
"custom_id": "Order PAYPALV2-JWJGC",
"soft_descriptor": "MARTINFACIL",
"payments": {
"captures": []
}
}
],
"links": [
{
"href": "https://api.sandbox.paypal.com/v2/checkout/orders/806440346Y391300T",
"rel": "self",
"method": "GET"
}
],
"id": "806440346Y391300T",
"intent": "CAPTURE",
"payer": {
"name": {
"given_name": "test",
"surname": "buyer"
},
"email_address": "dummy@dummy.dummy",
"payer_id": "Q739JNKWH67HE",
"address": {
"country_code": "DE"
}
},
"status": "COMPLETED"
},
"status": "SUCCESS",
"links": [
{
"href": "https://api.sandbox.paypal.com/v1/notifications/webhooks-events/WH-4T867178D0574904F-7TT11736YU643990P",
"rel": "self",
"method": "GET",
"encType": "application/json"
},
{
"href": "https://api.sandbox.paypal.com/v1/notifications/webhooks-events/WH-4T867178D0574904F-7TT11736YU643990P/resend",
"rel": "resend",
"method": "POST",
"encType": "application/json"
}
],
"event_version": "1.0",
"resource_version": "2.0"
}
), content_type='application_json')
order = env[1]
order.refresh_from_db()
assert order.status == Order.STATUS_PENDING
@pytest.mark.django_db
def test_webhook_mark_paid(env, client, monkeypatch):
order = env[1]