Actually allow incomplete registrations to b added to addopts master github/master
authorMagnus Hagander <magnus@hagander.net>
Sat, 27 Sep 2025 08:41:18 +0000 (10:41 +0200)
committerMagnus Hagander <magnus@hagander.net>
Sat, 27 Sep 2025 08:41:18 +0000 (10:41 +0200)
The fields allowed incomplete registrations to be added to the list of
users for an additional options, but the lookups that generated the
autocomplete lists did not include them, so in the end it couldn't
actually be used. To fix it we have to create a new lookup that includes
this set of users.

Spotted by Andreas Scherbaum

postgresqleu/confreg/backendforms.py
postgresqleu/confreg/backendlookups.py
postgresqleu/urls.py

index 2751f74da60110968f2e93b2a81fa20f13212fa2..28dd70b1f386b1382bfd72bdae8e513506d416e9 100644 (file)
@@ -56,7 +56,8 @@ from postgresqleu.confreg.models import valid_status_transitions, get_status_str
 from postgresqleu.confreg.models import STATUS_CHOICES, STATUS_CHOICES_LONG
 
 from postgresqleu.util.backendlookups import GeneralAccountLookup, CountryLookup
-from postgresqleu.confreg.backendlookups import RegisteredUsersLookup, SpeakerLookup, SessionTagLookup
+from postgresqleu.confreg.backendlookups import RegisteredUsersLookup, RegisteredOrPendingUsersLookup
+from postgresqleu.confreg.backendlookups import SpeakerLookup, SessionTagLookup
 
 from postgresqleu.confreg.campaigns import allcampaigns
 from postgresqleu.confreg.regtypes import validate_special_reg_type_setup
@@ -600,7 +601,7 @@ class BackendAdditionalOptionForm(BackendForm):
                               'conferenceadditionaloption_requires_attendee',
                               'conferenceadditionaloption_mutually_exclusive', ]
     selectize_multiple_fields = {
-        'requires_attendee': RegisteredUsersLookup(None),
+        'requires_attendee': RegisteredOrPendingUsersLookup(None),
     }
     coltypes = {
         'Maxcount': ['nosearch', ],
@@ -614,7 +615,7 @@ class BackendAdditionalOptionForm(BackendForm):
     def fix_fields(self):
         self.fields['requires_regtype'].queryset = RegistrationType.objects.filter(conference=self.conference)
         self.fields['requires_attendee'].queryset = ConferenceRegistration.objects.filter(conference=self.conference)
-        self.selectize_multiple_fields['requires_attendee'] = RegisteredUsersLookup(self.conference)
+        self.selectize_multiple_fields['requires_attendee'] = RegisteredOrPendingUsersLookup(self.conference)
         self.fields['mutually_exclusive'].queryset = ConferenceAdditionalOption.objects.filter(conference=self.conference).exclude(pk=self.instance.pk)
         self.fields['additionaldays'].queryset = RegistrationDay.objects.filter(conference=self.conference)
 
index 6191d289e2d78f7a6bf544d2f0ca1a639b5b4b85..847a5fe7d469bc5c19b16bbb9686264ecd79f28f 100644 (file)
@@ -21,16 +21,29 @@ class RegisteredUsersLookup(LookupBase):
             x.email,
         )
 
+    @classmethod
+    def get_filter(self):
+        return Q(payconfirmedat__isnull=False, canceledat__isnull=True)
+
     @classmethod
     def get_values(self, query, conference):
         return [{'id': r.id, 'value': RegisteredUsersLookup._label_from_instance(self)(r)}
                 for r in ConferenceRegistration.objects.filter(
-                    conference=conference,
-                    payconfirmedat__isnull=False, canceledat__isnull=True).filter(
+                    conference=conference).filter(self.get_filter()).filter(
                         Q(attendee__username=query) | Q(firstname__icontains=query) | Q(lastname__icontains=query) | Q(email__icontains=query)
                     )[:30]]
 
 
+class RegisteredOrPendingUsersLookup(RegisteredUsersLookup):
+    @property
+    def url(self):
+        return '/events/admin/{0}/lookups/regsinc/'.format(self.conference.urlname)
+
+    @classmethod
+    def get_filter(self):
+        return Q(canceledat__isnull=True)
+
+
 class SessionTagLookup(LookupBase):
     @property
     def url(self):
index 2663a08f30c5a7f70da36cc538d1fd4317bb3053..951a7976dcc5fc530bd40e3e4a26797cf3baf457 100644 (file)
@@ -194,6 +194,7 @@ urlpatterns.extend([
     re_path(r'^events/admin/(\w+)/edit/$', postgresqleu.confreg.backendviews.edit_conference),
     re_path(r'^events/admin/(\w+)/superedit/$', postgresqleu.confreg.backendviews.superedit_conference),
     re_path(r'^events/admin/(\w+)/lookups/regs/$', postgresqleu.confreg.backendlookups.RegisteredUsersLookup.lookup),
+    re_path(r'^events/admin/(\w+)/lookups/regsinc/$', postgresqleu.confreg.backendlookups.RegisteredOrPendingUsersLookup.lookup),
     re_path(r'^events/admin/(\w+)/lookups/tags/$', postgresqleu.confreg.backendlookups.SessionTagLookup.lookup),
     re_path(r'^events/admin/(\w+)/mail/$', postgresqleu.confreg.views.admin_attendeemail),
     re_path(r'^events/admin/(\w+)/mail/(\d+)/$', postgresqleu.confreg.views.admin_attendeemail_view),