Break out signup querying to it's own function
authorMagnus Hagander <magnus@hagander.net>
Mon, 26 Feb 2018 15:57:18 +0000 (16:57 +0100)
committerMagnus Hagander <magnus@hagander.net>
Mon, 26 Feb 2018 15:57:34 +0000 (16:57 +0100)
postgresqleu/confreg/views.py

index 0cb828a42f04fe4b01c968033adc6119d634ae63..421498f1084a166c4f953de31fe25d970016e8b8 100644 (file)
@@ -94,13 +94,7 @@ def render_conference_response(request, conference, pagemagic, templatename, dic
        # Either no override configured, or override not found
        return render_to_response(templatename, dictionary, context_instance=context)
 
-# Not a view in itself, only called from other views
-def _registration_dashboard(request, conference, reg, has_other_multiregs, redir_root):
-       mails = AttendeeMail.objects.filter(conference=conference, regclasses=reg.regtype.regclass)
-
-       wikipagesQ = Q(publicview=True) | Q(viewer_attendee__attendee=request.user) | Q(viewer_regtype__conferenceregistration__attendee=request.user)
-       wikipages = Wikipage.objects.filter(Q(conference=conference) & wikipagesQ).distinct()
-
+def _get_registration_signups(conference, reg):
        # Left join is hard to do efficiently with the django ORM, so let's do a query instead
        cursor = connection.cursor()
        cursor.execute("SELECT s.id, s.title, s.deadline, s.deadline < CURRENT_TIMESTAMP, ats.saved FROM confwiki_signup s LEFT JOIN confwiki_attendeesignup ats ON (s.id=ats.signup_id AND ats.attendee_id=%(regid)s) WHERE s.conference_id=%(confid)s AND (s.deadline IS NULL OR s.deadline > CURRENT_TIMESTAMP OR ats.saved IS NOT NULL) AND (s.public OR EXISTS (SELECT 1 FROM confwiki_signup_attendees sa WHERE sa.signup_id=s.id AND sa.conferenceregistration_id=%(regid)s) OR EXISTS (SELECT 1 FROM confwiki_signup_regtypes sr WHERE sr.signup_id=s.id AND sr.registrationtype_id=%(regtypeid)s)) ORDER  BY 4 DESC, 3, 2", {
@@ -108,7 +102,16 @@ def _registration_dashboard(request, conference, reg, has_other_multiregs, redir
                'regid': reg.id,
                'regtypeid': reg.regtype_id,
                })
-       signups = [dict(zip(['id', 'title', 'deadline', 'closed', 'savedat'], r)) for r in cursor.fetchall()]
+       return [dict(zip(['id', 'title', 'deadline', 'closed', 'savedat'], r)) for r in cursor.fetchall()]
+
+# Not a view in itself, only called from other views
+def _registration_dashboard(request, conference, reg, has_other_multiregs, redir_root):
+       mails = AttendeeMail.objects.filter(conference=conference, regclasses=reg.regtype.regclass)
+
+       wikipagesQ = Q(publicview=True) | Q(viewer_attendee__attendee=request.user) | Q(viewer_regtype__conferenceregistration__attendee=request.user)
+       wikipages = Wikipage.objects.filter(Q(conference=conference) & wikipagesQ).distinct()
+
+       signups = _get_registration_signups(conference, reg)
 
        is_speaker = ConferenceSession.objects.filter(conference=conference, status=1, speaker__user=request.user).exists()