Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
185 commits
Select commit Hold shift + click to select a range
a2a1c49
Translated using Weblate (Chinese (Traditional Han script))
Sep 14, 2025
6b51662
Translated using Weblate (Chinese (Traditional Han script))
Supaplextw Sep 15, 2025
131c921
Translated using Weblate (Polish (pl_INFORMAL))
PINGWINIxPLa Sep 30, 2025
3a297a4
Added translation using Weblate (Persian)
abbasdp Oct 4, 2025
fef8ae3
Added translation using Weblate (Indonesian)
mariobehling Oct 8, 2025
74c3335
Added translation using Weblate (Japanese)
mariobehling Oct 8, 2025
5071335
Added translation using Weblate (Korean)
mariobehling Oct 8, 2025
1351deb
Added translation using Weblate (Malay)
mariobehling Oct 8, 2025
69f73ce
Added translation using Weblate (Thai)
mariobehling Oct 8, 2025
3531e00
Added translation using Weblate (Vietnamese)
mariobehling Oct 8, 2025
c380b53
i18n(translations): update localized strings from Weblate
Oct 9, 2025
b5baaf1
i18n(translations): update localized strings from Weblate
Supaplextw Oct 9, 2025
5c78417
HTTP 500 error when accessing Orders Export page
ArnavBallinCode Nov 13, 2025
f89f964
Fix similar export bug in organizer.py
ArnavBallinCode Nov 13, 2025
009f9e1
refactor: sourcery suggested so
ArnavBallinCode Nov 13, 2025
417c745
fix: add JSON_FIELD_AVAILABLE setting and fix Event.items reference
ArnavBallinCode Nov 14, 2025
b261f08
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 14, 2025
f10bdec
fix: Immediately trigger waiting list notifications
ArnavBallinCode Nov 14, 2025
fe447da
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 14, 2025
ed68070
Merge branch 'enext' into fix/waiting-list-notifications-clean
mariobehling Nov 14, 2025
3da5c3d
Merge branch 'enext' into fix/order-export-500-clean
mariobehling Nov 14, 2025
882e917
fix: preserve partial form data and rename items to products
ArnavBallinCode Nov 14, 2025
e7d3afa
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 14, 2025
40e414e
Merge branch 'enext' into fix/waiting-list-notifications-clean
ArnavBallinCode Nov 14, 2025
75255dc
Speaker acceptance email confirmation link returning 500 error
ArnavBallinCode Nov 15, 2025
53443bd
refactoring as said by copilot to use cleaner dispatch pattern for p…
ArnavBallinCode Nov 15, 2025
7b10f28
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 15, 2025
bf481dc
Revert to manual initialization - correct fix
ArnavBallinCode Nov 15, 2025
6fd06dd
..
ArnavBallinCode Nov 15, 2025
e38a7f6
Merge branch 'enext' into fix/order-export-500-clean
mariobehling Nov 15, 2025
f932d03
Merge branch 'enext' into fix/issue-1276-speaker-acceptance-link-oof
ArnavBallinCode Nov 15, 2025
12840b4
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 16, 2025
f416461
fix(ui) unify navigation button styling across Tickets and Talk views…
ArnavBallinCode Nov 16, 2025
38f84d7
fix(ui): prevent sidebar auto-collapse on navigation (#1306)
ArnavBallinCode Nov 16, 2025
a6636c2
Chore: remove ticket/video URL fields (#1309)
Saksham-Sirohi Nov 16, 2025
30c28a8
remove logout button on video component (#1313)
Saksham-Sirohi Nov 16, 2025
b7856b5
PostgreSQL syntax error in Room permission query (#1314)
suhailnadaf509 Nov 16, 2025
27d425e
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 17, 2025
7ca8ef7
fix unable to save config (#1295)
Saksham-Sirohi Nov 17, 2025
6266c3f
Refactored the entire system to replace all legacy 'pretix/pretalx' r…
ArnavBallinCode Nov 17, 2025
d6f5a67
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 17, 2025
f1ba6a7
bug: enable browser timezone for orders and mails optimizing filters …
Saksham-Sirohi Nov 18, 2025
021c73b
chore(deps): update reportlab requirement from ==4.2.* to ==4.4.* (#1…
dependabot[bot] Nov 18, 2025
7e65d34
chore: remove duplicate orga settings (#1320)
Saksham-Sirohi Nov 18, 2025
06b4377
Merge branch 'enext' into fix/issue-1276-speaker-acceptance-link-oof
ArnavBallinCode Nov 18, 2025
a81a1e0
chore(deps): update stripe requirement from ==13.2.* to ==14.0.* (#1327)
dependabot[bot] Nov 19, 2025
018f1ac
chore(deps): update sentry-sdk requirement from ==2.44.* to ==2.45.* …
dependabot[bot] Nov 19, 2025
3963cc7
Resolve Sidebar Icon Layout Shift (#1319)
ArnavBallinCode Nov 20, 2025
4c92d7e
Fix: socialauth URLs were not resolved (#1324)
hongquan Nov 20, 2025
6e4afb5
Merge branch 'enext' into fix/waiting-list-notifications-clean
mariobehling Nov 20, 2025
a18c3f0
Merge branch 'enext' into fix/order-export-500-clean
mariobehling Nov 20, 2025
cdaeb4b
removed copilot sugguestions
ArnavBallinCode Nov 20, 2025
63a7fde
refactor: Extract common logic from signal receivers into helper func…
ArnavBallinCode Nov 20, 2025
7ba42a4
refactor: Extract duplicate quota waiting list trigger logic into hel…
ArnavBallinCode Nov 20, 2025
3f8d7da
Update app/eventyay/base/services/waitinglist.py
ArnavBallinCode Nov 20, 2025
0195612
Update app/eventyay/control/views/product.py
ArnavBallinCode Nov 20, 2025
b8caf3c
Update app/eventyay/control/views/product.py
ArnavBallinCode Nov 20, 2025
2efbc5e
Update app/eventyay/control/views/product.py
ArnavBallinCode Nov 20, 2025
d7c3648
Update app/eventyay/control/views/product.py
ArnavBallinCode Nov 20, 2025
1e2e6cd
Update app/eventyay/control/views/product.py
ArnavBallinCode Nov 20, 2025
0516c8b
fix: Use all_positions to include canceled positions for waiting list
ArnavBallinCode Nov 20, 2025
61043b4
Update app/eventyay/control/views/product.py
ArnavBallinCode Nov 20, 2025
8cda595
chore: add translations korean and indonesian (#1330)
Saksham-Sirohi Nov 20, 2025
16d750b
Merge branch 'enext' into fix/issue-1276-speaker-acceptance-link-oof
ArnavBallinCode Nov 21, 2025
87e560f
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 21, 2025
e9ac7f7
Merge branch 'enext' into fix/waiting-list-notifications-clean
ArnavBallinCode Nov 21, 2025
84dbee0
feature: added hidden rooms and ensure sync (#1184)
Saksham-Sirohi Nov 21, 2025
978e73a
chore(deps): update geoip2 requirement from ==4.* to ==5.* (#1333)
dependabot[bot] Nov 22, 2025
8d4d440
chore(deps): update redis requirement from ==7.0.* to ==7.1.* (#1329)
dependabot[bot] Nov 22, 2025
3efab3b
Fix: HTTP 500 error handling during room deletion (#1280)
ArnavBallinCode Nov 22, 2025
54f1945
Fix: gift card 500 error (#1260)
ArnavBallinCode Nov 22, 2025
ab3731d
Fix CSV Export Returns 500 Error (#1267)
prayag78 Nov 22, 2025
67d2ac5
Export orders with Wikimedia username (#1332)
hongquan Nov 22, 2025
0011de0
bug: image rescaling fix (#1292)
Saksham-Sirohi Nov 23, 2025
c32bcf6
Merge branch 'enext' into fix/order-export-500-clean
mariobehling Nov 23, 2025
70a8496
fix(ui): match top menu bar between eventyay talk and eventyay ticket…
prayag78 Nov 23, 2025
165591d
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 23, 2025
0d47b00
add polls to default_feature_flags (#1337)
suhailnadaf509 Nov 23, 2025
424b300
Merge branch 'enext' into fix/waiting-list-notifications-clean
ArnavBallinCode Nov 23, 2025
b59ae4c
chore(deps): update sentry-sdk requirement from ==2.45.* to ==2.46.* …
dependabot[bot] Nov 24, 2025
de46975
Delete URL redirection for legacy eventyay-xx websites (#1338)
hongquan Nov 24, 2025
c2a07de
fix: resolve PDF download issues (#1256)
ArnavBallinCode Nov 24, 2025
f1029e2
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 24, 2025
206a10d
Merge branch 'enext' into fix/waiting-list-notifications-clean
ArnavBallinCode Nov 24, 2025
858357a
Merge branch 'enext' into fix/issue-1276-speaker-acceptance-link-oof
ArnavBallinCode Nov 24, 2025
4a8e658
chore(deps): update django-phonenumber-field requirement (#1347)
dependabot[bot] Nov 25, 2025
2a386ae
chore(deps): update django-countries requirement from ==8.1.* to ==8.…
dependabot[bot] Nov 25, 2025
11ce87b
Merge branch 'enext' into fix/issue-1276-speaker-acceptance-link-oof
Sak1012 Nov 25, 2025
31b3b13
Merge branch 'enext' into fix/order-export-500-clean
Sak1012 Nov 25, 2025
563ce6b
fix(badge): add missing item to product rename in badge view (#1349)
Sak1012 Nov 25, 2025
b0d2953
fix rooms not working on video (#1339)
Saksham-Sirohi Nov 25, 2025
ed8b429
fix(500): item to product renames (#1350)
Sak1012 Nov 25, 2025
7e66527
Show Wikimedia username in ticket checkout page (#1351)
hongquan Nov 27, 2025
7962edb
Fix translation weblate integration (#1353)
Sak1012 Nov 27, 2025
246cb3f
chore(deps): bump pydantic from 2.12.4 to 2.12.5 (#1354)
dependabot[bot] Nov 27, 2025
6730f31
refactor: remove JSON_FIELD_AVAILABLE checks from exporters
ArnavBallinCode Nov 27, 2025
19a0cbe
Fix issue #1276: Remove indentation from URLs in email templates
ArnavBallinCode Nov 27, 2025
1492848
Merge branch 'enext' into fix/order-export-500-clean
mariobehling Nov 28, 2025
c1fecb6
Merge remote-tracking branch 'main/enext' into translated
Sak1012 Nov 28, 2025
94791cc
Merge pull request #1258 from ArnavBallinCode/fix/order-export-500-clean
hpdang Nov 28, 2025
d087154
Merge branch 'enext' into fix/waiting-list-notifications-clean
ArnavBallinCode Nov 28, 2025
385875a
Merge branch 'enext' into fix/issue-1276-speaker-acceptance-link-oof
ArnavBallinCode Nov 28, 2025
57385bd
fix: Update Bank Transfer text and fix broken payment docs link (Fixe…
MohammedAnasNathani Nov 28, 2025
2c3b4be
Merge branch 'enext' into translated
Sak1012 Nov 28, 2025
2bc0cfb
Merge pull request #1355 from fossasia/translated
mariobehling Nov 28, 2025
11ab1d9
fix: Resolve multiple exporter failures after database migration (#1321)
ArnavBallinCode Nov 28, 2025
a435789
Merge branch 'enext' into fix/issue-1276-speaker-acceptance-link-oof
ArnavBallinCode Nov 28, 2025
1b95c01
chore: fixed featured sessions and 500 errors on sessions and reviews…
Saksham-Sirohi Nov 28, 2025
b6deb48
Fix: Replace 'CfP' with 'Call for Papers' to fix translations #997 (#…
krishmishra846-alt Nov 28, 2025
0e787fe
move api app (#1335)
Gagan-Ram Nov 28, 2025
c47d6cf
Merge branch 'enext' into fix/issue-1276-speaker-acceptance-link-oof
mariobehling Nov 28, 2025
3ba8c33
Fixes 404 and url rename (#1235)
Saksham-Sirohi Nov 28, 2025
d5cf4da
i18n(translations): update localized strings from Weblate
SantosSi Nov 27, 2025
4d3509a
added talk endpoint (#1362)
Saksham-Sirohi Nov 28, 2025
9741041
Fix CSS not updating after color settings change (#1360)
prayag78 Nov 28, 2025
5619f8b
Merge branch 'enext' into translated
Sak1012 Nov 29, 2025
61b053f
fix(translations): remove old translation files and merge redundant f…
Sak1012 Nov 29, 2025
bbd03e0
Merge pull request #1361 from fossasia/translated
mariobehling Nov 29, 2025
1087bc4
Merge branch 'enext' into fix/issue-1276-speaker-acceptance-link-oof
ArnavBallinCode Nov 29, 2025
8d3ed18
fix(locale): Update gettext location comments in the locale file (#1372)
Sak1012 Nov 30, 2025
aff478a
i18n(translations): update localized strings from Weblate
weblate Nov 29, 2025
547a058
i18n(translations): update localized strings from Weblate
weblate Nov 29, 2025
070d9cf
i18n(translations): update localized strings from Weblate
weblate Nov 29, 2025
f65a67a
i18n(translations): update localized strings from Weblate
weblate Nov 29, 2025
36ef340
i18n(translations): update localized strings from Weblate
weblate Nov 29, 2025
5a745e1
i18n(translations): update localized strings from Weblate
weblate Nov 29, 2025
ac2e695
i18n(translations): update localized strings from Weblate
weblate Nov 29, 2025
61cba87
i18n(translations): update localized strings from Weblate
weblate Nov 29, 2025
d342560
i18n(translations): update localized strings from Weblate
Nov 29, 2025
372214e
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
30fccdf
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
013226c
i18n(translations): update localized strings from Weblate
Nov 30, 2025
c63b658
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
8f641e4
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
8b0bbf5
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
cb2d07b
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
e9d81e2
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
7c5ae9b
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
38da9fd
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
7ae98c3
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
d7233c1
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
432efd2
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
de782bf
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
6201f0c
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
c9110ee
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
82b9894
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
57b9768
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
a4486bc
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
17cdd2a
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
b645a97
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
faaf649
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
dd4cead
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
d2b12a5
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
9ba012c
Fix: Hide unpublished sessions from talk component menu (#1318)
ArnavBallinCode Nov 30, 2025
515ae57
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
c41fe17
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
cc02379
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
a3e0da4
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
e2cb4da
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
f2adfc5
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
c342a4b
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
8a405ac
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
8784ccf
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
6892b32
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
b0a0793
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
2d80f39
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
3580b64
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
418ebea
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
5f72264
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
0645732
Update README with new repository links
mariobehling Nov 30, 2025
5919fd6
i18n(translations): update localized strings from Weblate
weblate Nov 30, 2025
c51830a
Merge remote-tracking branch 'origin/enext' into enext
weblate Nov 30, 2025
32a6c01
Merge pull request #1387 from fossasia/translated
mariobehling Nov 30, 2025
25dbc11
Merge branch 'enext' into fix/issue-1276-speaker-acceptance-link-oof
Sak1012 Dec 1, 2025
a5c02f3
Merge branch 'enext' into fix/waiting-list-notifications-clean
ArnavBallinCode Dec 1, 2025
073f140
Remove redundant self.request/args/kwargs assignment in SubmissionCon…
ArnavBallinCode Dec 1, 2025
b00f5a5
Merge pull request #1300 from ArnavBallinCode/fix/issue-1276-speaker-…
hpdang Dec 1, 2025
408180c
fix(translations): Add missing languages (#1396)
Sak1012 Dec 1, 2025
7cd80c2
fix(translation): Move inline js to static file (#1397)
Sak1012 Dec 1, 2025
cb63c6e
chore(deps): update beautifulsoup4 requirement from ==4.12.* to ==4.1…
dependabot[bot] Dec 1, 2025
a37680c
chore(deps): update celery requirement from ==5.4.* to ==5.6.* (#1400)
dependabot[bot] Dec 1, 2025
0d41a22
fix navigation hover shifting by adding default transparent bottom bo…
aliciacilmora Dec 1, 2025
727bead
fix(voucher): Fix typo to return `True`
Sak1012 Dec 1, 2025
9a0cbb4
fix(product): item to product rename in CartPosition
Sak1012 Dec 1, 2025
72a3aee
Merge branch 'enext' into fix/waiting-list-notifications-clean
mariobehling Dec 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 77 additions & 9 deletions app/eventyay/base/services/waitinglist.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from eventyay.base.models import Event, User, WaitingListEntry
from eventyay.base.models.waitinglist import WaitingListException
from eventyay.base.services.tasks import EventTask
from eventyay.base.signals import periodic_task
from eventyay.base.signals import order_canceled, order_changed, periodic_task
from eventyay.celery_app import app


Expand All @@ -25,8 +25,8 @@ def assign_automatically(event: Event, user_id: int = None, subevent_id: int = N

qs = (
WaitingListEntry.objects.filter(event=event, voucher__isnull=True)
.select_related('item', 'variation', 'subevent')
.prefetch_related('item__quotas', 'variation__quotas')
.select_related('product', 'variation', 'subevent')
.prefetch_related('product__quotas', 'variation__quotas')
.order_by('-priority', 'created')
)

Expand All @@ -38,27 +38,27 @@ def assign_automatically(event: Event, user_id: int = None, subevent_id: int = N

with event.lock():
for wle in qs:
if (wle.item, wle.variation, wle.subevent) in gone:
if (wle.product, wle.variation, wle.subevent) in gone:
continue

ev = wle.subevent or event
if not ev.presale_is_running or (wle.subevent and not wle.subevent.active):
continue
if wle.subevent and not wle.subevent.presale_is_running:
continue
if not wle.item.is_available():
gone.add((wle.item, wle.variation, wle.subevent))
if not wle.product.is_available():
gone.add((wle.product, wle.variation, wle.subevent))
continue

quotas = (
wle.variation.quotas.filter(subevent=wle.subevent)
if wle.variation
else wle.item.quotas.filter(subevent=wle.subevent)
else wle.product.quotas.filter(subevent=wle.subevent)
)
availability = (
wle.variation.check_quotas(count_waitinglist=False, _cache=quota_cache, subevent=wle.subevent)
if wle.variation
else wle.item.check_quotas(count_waitinglist=False, _cache=quota_cache, subevent=wle.subevent)
else wle.product.check_quotas(count_waitinglist=False, _cache=quota_cache, subevent=wle.subevent)
)
if availability[1] is None or availability[1] > 0:
try:
Expand All @@ -74,7 +74,7 @@ def assign_automatically(event: Event, user_id: int = None, subevent_id: int = N
quota_cache[q.pk][1] - 1 if quota_cache[q.pk][1] is not None else sys.maxsize,
)
else:
gone.add((wle.item, wle.variation, wle.subevent))
gone.add((wle.product, wle.variation, wle.subevent))

return sent

Expand All @@ -96,3 +96,71 @@ def process_waitinglist(sender, **kwargs):
for e in qs:
if e.settings.waiting_list_auto and (e.presale_is_running or e.has_subevents):
assign_automatically.apply_async(args=(e.pk,))


@receiver(signal=order_canceled, dispatch_uid='waitinglist_order_canceled')
def on_order_canceled(sender, order, **kwargs):
"""
When an order is canceled, immediately trigger waiting list assignment
if automatic assignment is enabled for the event.
"""
event = sender

# Check if waiting list auto-assignment is enabled
if not event.settings.get('waiting_list_enabled', as_type=bool):
return

if not event.settings.get('waiting_list_auto', as_type=bool):
return

# Check if event is still selling tickets
if not (event.presale_is_running or event.has_subevents):
return

# Get unique subevents from canceled order positions
subevents = set()
for position in order.positions.all():
if position.subevent:
subevents.add(position.subevent.pk)

# Trigger assignment for the main event
if not subevents or not event.has_subevents:
assign_automatically.apply_async(args=(event.pk,))
else:
# Trigger assignment for each affected subevent
for subevent_id in subevents:
assign_automatically.apply_async(args=(event.pk, None, subevent_id))


@receiver(signal=order_changed, dispatch_uid='waitinglist_order_changed')
def on_order_changed(sender, order, **kwargs):
"""
When an order is modified (e.g., positions canceled), immediately trigger
waiting list assignment if automatic assignment is enabled for the event.
"""
event = sender

# Check if waiting list auto-assignment is enabled
if not event.settings.get('waiting_list_enabled', as_type=bool):
return

if not event.settings.get('waiting_list_auto', as_type=bool):
return

# Check if event is still selling tickets
if not (event.presale_is_running or event.has_subevents):
return

# Get unique subevents from order positions
subevents = set()
for position in order.positions.all():
if position.subevent:
subevents.add(position.subevent.pk)

# Trigger assignment for the main event
if not subevents or not event.has_subevents:
assign_automatically.apply_async(args=(event.pk,))
else:
# Trigger assignment for each affected subevent
for subevent_id in subevents:
assign_automatically.apply_async(args=(event.pk, None, subevent_id))
44 changes: 44 additions & 0 deletions app/eventyay/control/views/product.py
Original file line number Diff line number Diff line change
Expand Up @@ -1045,6 +1045,18 @@ def post(self, request, *args, **kwargs):
quota.save(update_fields=['closed'])
quota.log_action('pretix.event.quota.opened', user=request.user)
messages.success(request, _('The quota has been re-opened.'))

# Trigger waiting list assignment when quota is reopened
event = request.event
if event.settings.get('waiting_list_enabled', as_type=bool) and \
event.settings.get('waiting_list_auto', as_type=bool) and \
(event.presale_is_running or event.has_subevents):
from eventyay.base.services.waitinglist import assign_automatically
if quota.subevent:
assign_automatically.apply_async(args=(event.pk, request.user.pk, quota.subevent.pk))
else:
assign_automatically.apply_async(args=(event.pk, request.user.pk))

if 'disable' in request.POST:
quota.closed = False
quota.close_when_sold_out = False
Expand All @@ -1056,6 +1068,18 @@ def post(self, request, *args, **kwargs):
data={'close_when_sold_out': False},
)
messages.success(request, _('The quota has been re-opened and will not close again.'))

# Trigger waiting list assignment when quota is reopened
event = request.event
if event.settings.get('waiting_list_enabled', as_type=bool) and \
event.settings.get('waiting_list_auto', as_type=bool) and \
(event.presale_is_running or event.has_subevents):
from eventyay.base.services.waitinglist import assign_automatically
if quota.subevent:
assign_automatically.apply_async(args=(event.pk, request.user.pk, quota.subevent.pk))
else:
assign_automatically.apply_async(args=(event.pk, request.user.pk))

return redirect(
reverse(
'control:event.products.quotas.show',
Expand Down Expand Up @@ -1111,6 +1135,26 @@ def form_valid(self, form):
data={'id': form.instance.pk},
)
form.instance.rebuild_cache()

# Trigger waiting list assignment if quota size increased
if 'size' in form.changed_data:
old_size = form.initial.get('size')
new_size = form.cleaned_data.get('size')
# Check if size actually increased (handle None as unlimited)
if (old_size is not None and new_size is not None and new_size > old_size) or \
(old_size is not None and new_size is None):
# Quota increased, trigger waiting list assignment if enabled
event = self.request.event
if event.settings.get('waiting_list_enabled', as_type=bool) and \
event.settings.get('waiting_list_auto', as_type=bool) and \
(event.presale_is_running or event.has_subevents):
from eventyay.base.services.waitinglist import assign_automatically
if form.instance.subevent:
assign_automatically.apply_async(
args=(event.pk, self.request.user.pk, form.instance.subevent.pk)
)
else:
assign_automatically.apply_async(args=(event.pk, self.request.user.pk))
return super().form_valid(form)

def get_success_url(self) -> str:
Expand Down