Raphael Michel
4f449ce6b4
Mail: Handle all rendering in mail.py, return values for log ( #5895 )
...
* Mail: Handle all rendering in mail.py, return values for log
* Apply suggestions from code review
2026-03-10 09:53:09 +01:00
Raphael Michel
3d68bbb619
Order change manager: Recalculate tax of zero-valued positions (Z#23223874) ( #5938 )
2026-03-09 18:13:14 +01:00
Raphael Michel
3ce6dbf798
Mail: Remove redundant SQL queries ( #5896 )
...
On my local test event, this saved 75 queries on sending an email due to
an N+1 query problem in the metadata querying.
2026-03-09 13:53:20 +01:00
Raphael Michel
347337e76f
Invoice generation: Add way for renderers to signal they are not ready ( #5905 )
2026-03-09 13:52:11 +01:00
Richard Schreiber
a25bca7471
Fix static instance name in emails (Z#23224360) ( #5914 )
2026-02-25 13:19:53 +01:00
Raphael Michel
802c03f8f3
Mail: Fix stuck state when tickets are not available (Z#23225229) ( #5917 )
2026-02-22 16:58:41 +01:00
Lukas Bockstaller
fd9ed15065
include acceptor slug in log/webhook event ( #5906 )
2026-02-19 10:00:11 +01:00
Raphael Michel
ad752dc617
Fix placeholder injection with django templates
2026-02-13 13:36:12 +01:00
Raphael Michel
88c9f8c047
Remove duplicate rendering of plain content without variables
2026-02-13 12:30:01 +01:00
Raphael Michel
2d2663f15f
Mark strings as formatted to prevent double-formatting
2026-02-13 12:28:32 +01:00
Kara Engelhardt
ae6014708b
SECURITY: Prevent placeholder injcetion in plaintext emails
2026-02-13 12:28:32 +01:00
Lukas Bockstaller
99c257d392
adds webhooks for giftcards (Z#23205473) ( #5834 )
...
* adds giftcard webhook events
* maps issuer_id of giftcard to organizer_id for logging
* adds new giftcard logtypes for transactions that aren't manual
* log_action calls cleanup
* drop acceptance webhook
* add acceptor_id to the giftcard transaction webhook event
* add missing log_action statements
* add new webhooks to docs
* fix tests
* fix linting
2026-02-11 12:51:09 +01:00
Richard Schreiber
e2cb83ce28
Fix marking invoices transmitted for emails with uppercase letters ( #5885 )
2026-02-11 12:00:54 +01:00
Richard Schreiber
d4460045b4
Fix mail headers being None ( #5873 )
...
* Fix mail headers being None
* update tests
2026-02-03 11:26:26 +01:00
Raphael Michel
48aecb80f6
Mail compat layer: Disable scopes
2026-01-30 12:38:51 +01:00
Raphael Michel
d58a6e2503
Tax rounding: Allow to apply only for B2B (Z#23220106) ( #5810 )
...
* Tax rounding: Allow to apply only for B2B (Z#23220106)
Most effective in combination with #5807
* Update src/pretix/base/settings.py
Co-authored-by: Richard Schreiber <schreiber@pretix.eu >
---------
Co-authored-by: Richard Schreiber <schreiber@pretix.eu >
2026-01-30 11:53:38 +01:00
Raphael Michel
c40e34af57
Model-based mail queuing
2026-01-30 10:43:02 +01:00
Raphael Michel
26fdcc2872
Order changes: Do not allow to double-book add-ons (Z#23220592) ( #5851 )
...
* Order changes: Do not allow to double-book add-ons
* tests
* Update src/pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html
Co-authored-by: Richard Schreiber <schreiber@pretix.eu >
---------
Co-authored-by: Richard Schreiber <schreiber@pretix.eu >
2026-01-29 20:42:43 +01:00
Raphael Michel
8058461f10
Invoices: Allow issuing invoices only to businesses (Z#23220397) ( #5807 )
...
* Invoices: Allow issuing invoices only to businesses
In situations where every invoice has a significant accounting cost and
consumers usually do not need invoices, this can save a lot of money or
effort.
* Improve backend UI if not qualified for invoice
2026-01-26 09:52:19 +01:00
Raphael Michel
fd72e18a7f
Overview export: Allow to skip empty lines (Z#23219200) ( #5825 )
2026-01-23 11:18:07 +01:00
Raphael Michel
0259899e00
Discount: Respect addon grouping in line selection (Z#23220058) ( #5782 )
...
* Discount: Respect addon grouping in line selection (Z#23220058)
* Update src/pretix/base/models/discount.py
Co-authored-by: Richard Schreiber <schreiber@pretix.eu >
---------
Co-authored-by: Richard Schreiber <schreiber@pretix.eu >
2026-01-16 15:23:59 +01:00
Luca Sorace "Stranck
8cc12fa1c7
OrderChangeManager: add_position() returns a handle to the newly created position ( #5557 )
...
* OrderChangeManager: Add support for custom operations
* OrderChangeManager: Add callback to AddPosition operation
This is also meant as a way to fix #5548
* Refs #5557 : Checkstyle fix
* Refs #5557 : Added tests
* Refs #5557 : Changes requested in the PR review
* Refs #5557 : Fix error in previous merge conflict
* Refs #5557 : PR review
2026-01-05 17:34:53 +01:00
Raphael Michel
308e14bab3
Mail settings: Correctly declare plaintext email (Z#23218835) ( #5738 )
...
* Mail settings: Correctly declare plaintext email (Z#23218835)
* Apply suggestions from code review
Co-authored-by: luelista <weller@rami.io >
* Update escaping
* Escaping update
---------
Co-authored-by: luelista <weller@rami.io >
2026-01-05 12:33:43 +01:00
Raphael Michel
409e64d5f2
Fix off-by-one error in voucher validation during cart extension ( #5716 )
...
* Fix typo in calculation
* Do not double-call extend_expired_positions in tests, make it private
2025-12-18 14:47:56 +01:00
Raphael Michel
e466c4fb72
Refactor validation of cart contents, fix purchase of inactive subevent (Z#23217806) ( #5715 )
...
* Refactor validation of cart contents, fix purchase of inactive subevent (Z#23217806)
* Apply suggestions from code review
Co-authored-by: Richard Schreiber <schreiber@pretix.eu >
* Review notes
---------
Co-authored-by: Richard Schreiber <schreiber@pretix.eu >
2025-12-17 16:59:26 +01:00
Raphael Michel
b895d9bbca
Import large package lazily to speed up startup ( #5636 )
...
* Import large package lazily to speed up startup
* Make all jsonschema imports lazy
2025-12-09 09:52:53 +01:00
Raphael Michel
8d66e1e732
Cart extension: Fix bundled product being removed from cart when sold out ( #5690 )
...
Instead, the entire bundle must be removed as it may not be sold
individually.
2025-12-04 11:48:40 +01:00
Richard Schreiber
c925f094f2
Reduce item event queries in waitinglist assign
2025-12-04 11:01:30 +01:00
Raphael Michel
5a1bcae085
Invoice address: Improve VAT ID input ( #5647 )
...
* Remove unmaintained depdendency vat_moss
* VAT ID normalization: Auto-add country codes
* VAT ID: County-specific labels
* Invoice address: Allow to set VAT ID as required per country
* Fix failing tests
* Update src/pretix/base/settings.py
Co-authored-by: luelista <weller@rami.io >
* Review fixes
---------
Co-authored-by: luelista <weller@rami.io >
2025-12-03 16:48:19 +01:00
Raphael Michel
bdd94b1f8a
Add prioritization to webhook/notifications queue ( #5513 )
...
* Add prioritization to webhook/notifications queue
* Add missing code
* Missing license header
* Fix argument
* Use redis pipeline
* Update license header
2025-12-02 09:13:01 +01:00
Raphael Michel
fdd34f387a
[SECURITY] Prevent HTML injection through placeholders in emails
...
Co-authored-by: luelista <weller@pretix.eu >
2025-11-27 11:41:27 +01:00
Raphael Michel
4dc5bbae06
Invoices: Increase retry interval ( #5640 )
...
e.g. Invopop states that receipt confirmation in italy can take 24h
2025-11-19 12:30:37 +01:00
Richard Schreiber
5e828ab8af
Fix tax-code keying function for tax-recalc ( #5637 )
2025-11-18 15:03:33 +01:00
luelista
a814d31c9b
Re-check maximum order size during _perform_order (Z#23213046) ( #5586 )
...
* Re-check maximum order size during _perform_order (Z#23213046)
* Add test case
2025-11-14 10:01:51 +01:00
Raphael Michel
eb740204d4
Invoice issuer address: Add state field ( #5603 )
...
* Invoice issuer address: Add state field
* Update src/pretix/base/settings.py
Co-authored-by: Richard Schreiber <schreiber@rami.io >
* Update src/pretix/base/models/invoices.py
Co-authored-by: Richard Schreiber <schreiber@rami.io >
---------
Co-authored-by: Richard Schreiber <schreiber@rami.io >
2025-11-14 09:56:46 +01:00
Richard Schreiber
0b46982e6d
Allow blocked seats to be booked in backend ( #5585 )
2025-11-06 08:02:42 +01:00
Richard Schreiber
ee4e7f618f
Sort answers according to questions order
...
* Sort answers according to questions (Z#23212280)
* Undo ordering in Meta-class
* filter and order answers only on invoice
2025-11-04 11:33:16 +01:00
Raphael Michel
3e972eddbf
Allow to round taxes on order-level ( #5019 )
...
* Allow to round taxes on order-level
* Rename get_cart_total
* Persist rounding mode with order
* Add general docs
* Order creation API
* Update fee algorithm
* Rounding on payment method change
* Round when splitting order
* Fix failing tests
* Add settings page
* Add tests
* Replace algorithm
* Add test case for currency rounding
* Improve order change
* Update flowchart
* Update discount logic (more hypothetical, we don't store rounding on cart positions atm)
* Rename internal method
* Fix typo
* Update help text
* Apply suggestions from code review
Co-authored-by: luelista <weller@rami.io >
* Order rounding refactor (#5571 )
* Add RoundingCorrectionMixin providing before-rounding-values as properties
* Use gross_price_before_rounding in more places
* Update doc/development/algorithms/pricing.rst
Co-authored-by: Martin Gross <gross@rami.io >
* Allow to override on perform_order
* Rebase migration
* Fix event cancellation
---------
Co-authored-by: luelista <weller@rami.io >
Co-authored-by: Martin Gross <gross@rami.io >
2025-10-30 11:49:31 +01:00
Raphael Michel
1e0ede529c
Event cancellation: Add safety and security checks ( #5565 )
...
* Event cancellation: Add safety and security checks
When cancelling an event, a large sum of money might be refunded
instantly. This PR adds safety features around this by
- doing a dry-run first that shows a preview of the expected refund sum
- sending a confirmation mode via email for any automatic refunds of more than 100 currency units
- keeping a more detailed log of the settings this was executed with
* Update src/pretix/control/views/orders.py
Co-authored-by: luelista <weller@rami.io >
---------
Co-authored-by: luelista <weller@rami.io >
2025-10-29 08:53:48 +01:00
Phin Wolkwitz
8a3da37b45
Connect giftcards with customer accounts ( #5126 )
...
Connect giftcards with customer accounts, show giftcards during checkout and in account , show giftcard list in backend customer view
2025-10-16 13:20:00 +02:00
Raphael Michel
71f2c8093f
Further tune attachment size computation (Z#23210802) ( #5550 )
...
Attaching a 1 MB file makes the email ~1.4 MB larger, because all
attachments in emails are base64 encoded which takes more space.
2025-10-16 11:07:20 +02:00
Raphael Michel
2e674916c2
Fix email attachment limit to actually be 4MB as documented, not 5 MB (Z#23210802) ( #5546 )
2025-10-15 13:33:48 +02:00
Raphael Michel
40357681df
Invoice plugins: Call build_invoice_data for cancellations ( #5523 )
2025-10-15 09:06:46 +02:00
luelista
a811a31dcc
Make sync_single task transaction-aware ( #5541 )
2025-10-10 15:49:22 +02:00
Raphael Michel
177a7d07fc
Update license header ( #5540 )
2025-10-10 15:32:46 +02:00
Raphael Michel
15cbb3a416
Do not crash if generate_invoice fails ( #5483 )
...
* Do not crash if generate_invoice fails
* Add logging
* Add cancellation to try block
* One last thing…
2025-10-07 11:20:31 +02:00
Raphael Michel
dcf473c543
Send invoice to organizer in plain text (Z#23210026) ( #5518 )
2025-10-07 10:40:15 +02:00
Raphael Michel
85a9a3caa6
Run exporters in repeatable read by default (Z#23173095) ( #5500 )
...
* Run exporters in repeatable read by default (Z#23173095)
* Update src/pretix/helpers/database.py
Co-authored-by: Richard Schreiber <schreiber@rami.io >
* Rename parameter, add test
* Do not run during tests
---------
Co-authored-by: Richard Schreiber <schreiber@rami.io >
2025-10-06 10:38:19 +02:00
Raphael Michel
301191e4bd
Notification queues: Optimize order for less queries ( #5512 )
...
* Notification queues: Optimize order for less queries
* Update src/pretix/api/webhooks.py
Co-authored-by: luelista <weller@rami.io >
---------
Co-authored-by: luelista <weller@rami.io >
2025-10-06 09:24:51 +02:00
Raphael Michel
867cd8c59e
Model import: Create logentries in bulk ( #5511 )
...
* Model import: Create logentries in bulk
* Update src/pretix/base/services/modelimport.py
Co-authored-by: luelista <weller@rami.io >
---------
Co-authored-by: luelista <weller@rami.io >
2025-10-06 09:24:39 +02:00