Include cross schedule sessions in overlapping rooms query
authorMagnus Hagander <magnus@hagander.net>
Fri, 3 May 2024 09:25:00 +0000 (11:25 +0200)
committerMagnus Hagander <magnus@hagander.net>
Fri, 3 May 2024 09:43:08 +0000 (11:43 +0200)
postgresqleu/confreg/reports.py
postgresqleu/confreg/views.py

index 53a97da9fcf117a70a208fd15ac35ab601bd048f..ee3946535424999f7d6d3429da8c0a4a38884d23 100644 (file)
@@ -796,7 +796,7 @@ WHERE s.conference_id=%(confid)s AND
       EXISTS (SELECT 1 FROM confreg_conferencesession s2
               WHERE s2.conference_id=%(confid)s AND
                     s2.status=1 AND
-                    s2.room_id=s.room_id AND
+                    (s2.room_id=s.room_id OR s2.cross_schedule) AND
                     s.id != s2.id AND
                     tstzrange(s.starttime, s.endtime) && tstzrange(s2.starttime, s2.endtime)
       )
index 27095ebf1594a21ee30f860cc07c1b1688f32a3c..b57d06352db2c32389eacdc7d9c1b3b457e74adf 100644 (file)
@@ -3420,7 +3420,7 @@ def admin_dashboard_single(request, urlname):
             'unconfirmed_speakers': exec_to_scalar("SELECT EXISTS (SELECT 1 FROM confreg_conferencesession_speaker css INNER JOIN confreg_conferencesession s ON css.conferencesession_id=s.id WHERE s.conference_id=%(confid)s AND s.status=3)", {'confid': conference.id}),
             'sessions_noroom': exec_to_scalar("SELECT EXISTS (SELECT 1 FROM confreg_conferencesession s WHERE s.conference_id=%(confid)s AND s.status=1 AND s.room_id IS NULL AND NOT cross_schedule)", {'confid': conference.id}),
             'sessions_notrack': exec_to_scalar("SELECT EXISTS (SELECT 1 FROM confreg_conferencesession s WHERE s.conference_id=%(confid)s AND s.status=1 AND s.track_id IS NULL)", {'confid': conference.id}),
-            'sessions_roomoverlap': exec_to_scalar("SELECT EXISTS (SELECT 1 FROM confreg_conferencesession s INNER JOIN confreg_room r ON r.id=s.room_id WHERE s.conference_id=%(confid)s AND r.conference_id=%(confid)s AND status=1 AND EXISTS (SELECT 1 FROM confreg_conferencesession s2 WHERE s2.conference_id=%(confid)s AND s2.status=1 AND s2.room_id=s.room_id AND s.id != s2.id AND tstzrange(s.starttime, s.endtime) && tstzrange(s2.starttime, s2.endtime)))", {'confid': conference.id}),
+            'sessions_roomoverlap': exec_to_scalar("SELECT EXISTS (SELECT 1 FROM confreg_conferencesession s INNER JOIN confreg_room r ON r.id=s.room_id WHERE s.conference_id=%(confid)s AND r.conference_id=%(confid)s AND status=1 AND EXISTS (SELECT 1 FROM confreg_conferencesession s2 WHERE s2.conference_id=%(confid)s AND s2.status=1 AND (s2.room_id=s.room_id OR s2.cross_schedule) AND s.id != s2.id AND tstzrange(s.starttime, s.endtime) && tstzrange(s2.starttime, s2.endtime)))", {'confid': conference.id}),
             'pending_sessions': conditional_exec_to_scalar(conference.scheduleactive, "SELECT EXISTS (SELECT 1 FROM confreg_conferencesession s WHERE s.conference_id=%(confid)s AND s.status=0)", {'confid': conference.id}),
             'pendingpolicy_attendees': conditional_exec_to_scalar(conference.confirmpolicy, "SELECT EXISTS (SELECT 1 FROM confreg_conferenceregistration r WHERE r.conference_id=%(confid)s AND payconfirmedat IS NOT NULL AND canceledat IS NULL AND policyconfirmedat IS NULL)", {'confid': conference.id}),
             'uncheckedin_attendees': conditional_exec_to_scalar(conference.checkinactive, "SELECT EXISTS (SELECT 1 FROM confreg_conferenceregistration r WHERE r.conference_id=%(confid)s AND payconfirmedat IS NOT NULL AND canceledat IS NULL AND checkedinat IS NULL)", {'confid': conference.id}),