Alert for sessions in Submitted state when schedule is public
authorMagnus Hagander <magnus@hagander.net>
Mon, 26 Feb 2018 13:34:29 +0000 (14:34 +0100)
committerMagnus Hagander <magnus@hagander.net>
Mon, 26 Feb 2018 13:34:29 +0000 (14:34 +0100)
We can't start alerting for sessions in submitted state all the time,
but once the schedule is public there should be no sessions in this
state (they should either be rejcted or pending), so highlight the
button at this time to make it clear.

postgresqleu/confreg/views.py
postgresqleu/util/db.py
template/confreg/admin_dashboard_single.html

index 74304a5abc1b8ed4028badad995b9c90138a782a..7a82df65b627dd6e3c1168a5b50505c988d6b90f 100644 (file)
@@ -51,7 +51,7 @@ from postgresqleu.invoices.models import InvoiceProcessor, InvoiceHistory
 from postgresqleu.mailqueue.util import send_mail, send_simple_mail, send_template_mail, template_to_string
 from postgresqleu.util.jsonutil import JsonSerializer
 from postgresqleu.util.db import exec_to_dict, exec_to_grouped_dict, exec_to_keyed_dict
-from postgresqleu.util.db import exec_no_result, exec_to_list, exec_to_scalar
+from postgresqleu.util.db import exec_no_result, exec_to_list, exec_to_scalar, conditional_exec_to_scalar
 
 from decimal import Decimal
 from operator import itemgetter
@@ -2372,6 +2372,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)", {'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}),
+               '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}),
        }, RequestContext(request))
 
 @login_required
index 05d30b7d1cf2af8c8e5ee3f9fe00fc8871de806c..93093938c510685f41d644c25d50ced014bde59a 100644 (file)
@@ -25,6 +25,12 @@ def exec_to_scalar(query, params=None):
        # If the query returns no rows at all, then just return None
        return None
 
+def conditional_exec_to_scalar(condition, query, params=None):
+       if condition:
+               return exec_to_scalar(query, params)
+       else:
+               return False
+
 def exec_to_keyed_dict(query, params=None):
        curs = connection.cursor()
        curs.execute(query, params)
index 7eae7b5f674b2b9bcf68796ae72701f2f8db54b2..c1967cab2fb6fc179fa9404cdd7f2446cb7a8af3 100644 (file)
@@ -44,7 +44,7 @@
   <div class="col-md-3 col-sm-6 col-xs-12 buttonrow"><a class="btn {%if unregistered_speakers%}btn-warning{%else%}btn-default{%endif%} btn-block" href="/events/{{c.urlname}}/reports/simple/?report=unregspeaker">Unregistered speakers</a></div>
   <div class="col-md-3 col-sm-6 col-xs-12 buttonrow"><a class="btn {%if unregistered_staff%}btn-warning{%else%}btn-default{%endif%} btn-block" href="/events/{{c.urlname}}/reports/simple/?report=unregstaff">Unregistered staff</a></div>
   <div class="col-md-3 col-sm-6 col-xs-12 buttonrow"><a class="btn {%if unconfirmed_speakers%}btn-warning{%else%}btn-default{%endif%} btn-block" href="/events/{{c.urlname}}/reports/simple/?report=unconfirmspeaker">Unconfirmed speakers</a></div>
-  <div class="col-md-3 col-sm-6 col-xs-12 buttonrow"><a class="btn btn-default btn-block" href="/events/{{c.urlname}}/reports/simple/?report=sessionstatus">Session status statistics</a></div>
+  <div class="col-md-3 col-sm-6 col-xs-12 buttonrow"><a class="btn {%if pending_sessions%}btn-warning{%else%}btn-default{%endif%} btn-block" href="/events/{{c.urlname}}/reports/simple/?report=sessionstatus">Session status statistics</a></div>
   {%if c.asktshirt%}
   <div class="col-md-3 col-sm-6 col-xs-12 buttonrow"><a class="btn btn-default btn-block" href="/events/{{c.urlname}}/reports/simple/?report=tshirtsizes">T-Shirt size distribution</a></div>
   {%endif%}