backoffice: use a single request to get formdef counts on stats page (#54237)
This commit is contained in:
parent
0a237eaafa
commit
ceb49bd925
|
@ -756,9 +756,18 @@ class ManagementDirectory(Directory):
|
|||
counts = {}
|
||||
parsed_values = {}
|
||||
criterias = get_global_criteria(get_request(), parsed_values)
|
||||
for formdef in formdefs:
|
||||
values = formdef.data_class().select(criterias)
|
||||
counts[formdef.id] = len(values)
|
||||
period_start = parsed_values.get('period_start')
|
||||
period_end = parsed_values.get('period_end')
|
||||
|
||||
if get_publisher().is_using_postgresql():
|
||||
from wcs import sql
|
||||
|
||||
formdef_totals = sql.get_formdef_totals(period_start, period_end, criterias)
|
||||
counts = {str(x): y for x, y in formdef_totals}
|
||||
else:
|
||||
for formdef in formdefs:
|
||||
values = formdef.data_class().select(criterias)
|
||||
counts[formdef.id] = len(values)
|
||||
|
||||
do_graphs = False
|
||||
if (
|
||||
|
@ -782,8 +791,6 @@ class ManagementDirectory(Directory):
|
|||
if do_graphs:
|
||||
r += htmltext('</div>')
|
||||
r += htmltext('<div class="splitcontent-right">')
|
||||
period_start = parsed_values.get('period_start')
|
||||
period_end = parsed_values.get('period_end')
|
||||
r += do_graphs_section(period_start, period_end, criterias=[NotEqual('status', 'draft')])
|
||||
r += htmltext('</div>')
|
||||
|
||||
|
|
20
wcs/sql.py
20
wcs/sql.py
|
@ -3243,6 +3243,26 @@ def get_weekday_totals(period_start=None, period_end=None, criterias=None):
|
|||
return result
|
||||
|
||||
|
||||
@guard_postgres
|
||||
def get_formdef_totals(period_start=None, period_end=None, criterias=None):
|
||||
conn, cur = get_connection_and_cursor()
|
||||
statement = '''SELECT formdef_id, COUNT(*)'''
|
||||
parameters = {}
|
||||
statement += get_period_query(
|
||||
period_start=period_start, period_end=period_end, criterias=criterias, parameters=parameters
|
||||
)
|
||||
statement += ' GROUP BY formdef_id'
|
||||
cur.execute(statement, parameters)
|
||||
|
||||
result = cur.fetchall()
|
||||
result = [(int(x), y) for x, y in result]
|
||||
|
||||
conn.commit()
|
||||
cur.close()
|
||||
|
||||
return result
|
||||
|
||||
|
||||
@guard_postgres
|
||||
def get_hour_totals(period_start=None, period_end=None, criterias=None):
|
||||
conn, cur = get_connection_and_cursor()
|
||||
|
|
Loading…
Reference in New Issue