misc: revamp draft stats, replace second part with completion rate (#89282)
gitea/wcs/pipeline/head This commit looks good
Details
gitea/wcs/pipeline/head This commit looks good
Details
This commit is contained in:
parent
c8e926afb2
commit
881a0424ce
|
@ -4870,31 +4870,12 @@ def test_admin_form_inspect_drafts(pub):
|
|||
assert resp.pyquery('#inspect-drafts p').text() == 'There are currently no drafts for this form.'
|
||||
|
||||
data_class = formdef.data_class()
|
||||
formdata = data_class()
|
||||
formdata.status = 'draft'
|
||||
formdata.page_id = '0'
|
||||
formdata.receipt_time = localtime()
|
||||
formdata.store()
|
||||
formdata = data_class()
|
||||
formdata.status = 'draft'
|
||||
formdata.page_id = '2'
|
||||
formdata.receipt_time = localtime()
|
||||
formdata.store()
|
||||
formdata = data_class()
|
||||
formdata.status = 'draft'
|
||||
formdata.page_id = '4'
|
||||
formdata.receipt_time = localtime()
|
||||
formdata.store()
|
||||
formdata = data_class()
|
||||
formdata.status = 'draft'
|
||||
formdata.page_id = '_confirmation_page'
|
||||
formdata.receipt_time = localtime()
|
||||
formdata.store()
|
||||
formdata = data_class()
|
||||
formdata.status = 'draft'
|
||||
formdata.page_id = 'xxxx' # unkown page id
|
||||
formdata.receipt_time = localtime()
|
||||
formdata.store()
|
||||
for page_id in ('0', '2', '4', '_confirmation_page', 'xxxx'):
|
||||
formdata = data_class()
|
||||
formdata.status = 'draft'
|
||||
formdata.page_id = page_id
|
||||
formdata.receipt_time = localtime()
|
||||
formdata.store()
|
||||
|
||||
# create a non-draft
|
||||
formdata = formdef.data_class()()
|
||||
|
@ -4908,11 +4889,8 @@ def test_admin_form_inspect_drafts(pub):
|
|||
formdata.store()
|
||||
|
||||
resp = app.get('/backoffice/forms/%s/inspect' % formdef.id)
|
||||
assert resp.pyquery('#inspect-drafts p')[0].text == 'Statistics on drafts by page.'
|
||||
assert (
|
||||
resp.pyquery('#inspect-drafts p')[1].text
|
||||
== 'Lifespan of drafts (in days): %s.' % formdef.get_drafts_lifespan()
|
||||
)
|
||||
assert resp.pyquery('#inspect-drafts h2').text() == 'Key indicators on existing drafts'
|
||||
assert resp.pyquery('#inspect-drafts .infonotice').text() == 'Covered period: last 100 days.'
|
||||
|
||||
assert resp.pyquery('table[data-table-id="rate-among-drafts"] tr[data-page-id="0"]').length == 1
|
||||
assert (
|
||||
|
@ -4993,20 +4971,10 @@ def test_admin_form_inspect_drafts(pub):
|
|||
== '(1/5)'
|
||||
)
|
||||
|
||||
# check a global value
|
||||
assert resp.pyquery('table[data-table-id="rate-among-total-forms"] tr[data-page-id="0"]').length == 1
|
||||
assert (
|
||||
resp.pyquery('table[data-table-id="rate-among-total-forms"] tr[data-page-id="0"] td.label').text()
|
||||
== '1st page'
|
||||
)
|
||||
assert (
|
||||
resp.pyquery('table[data-table-id="rate-among-total-forms"] tr[data-page-id="0"] td.percent').text()
|
||||
== '16.7%'
|
||||
)
|
||||
assert (
|
||||
resp.pyquery('table[data-table-id="rate-among-total-forms"] tr[data-page-id="0"] td.total').text()
|
||||
== '(1/6)'
|
||||
)
|
||||
# check completion rate
|
||||
assert resp.pyquery('.completion-rate .percent').text() == '16.7%'
|
||||
assert resp.pyquery('.completion-rate .total').text() == '(1/6)'
|
||||
assert 'width: 16.6' in resp.pyquery('.completion-rate .bar span').attr.style
|
||||
|
||||
|
||||
def test_form_import_fields(pub):
|
||||
|
|
|
@ -1771,7 +1771,6 @@ class FormDefPage(Directory, TempfileDirectoryMixin):
|
|||
temp_drafts[page_id] += 1
|
||||
|
||||
total_drafts = sum(temp_drafts.values()) if temp_drafts else 0
|
||||
total_formdata = 0
|
||||
drafts = {}
|
||||
special_page_index_mapping = {
|
||||
'_first_page': -1000, # first
|
||||
|
@ -1797,13 +1796,14 @@ class FormDefPage(Directory, TempfileDirectoryMixin):
|
|||
else:
|
||||
drafts['_unknown']['total'] += page_total
|
||||
|
||||
total_formdata = self.formdef.data_class().count([receipt_time_criteria])
|
||||
for draft_data in drafts.values():
|
||||
draft_data['percent'] = 100 * draft_data['total'] / total_drafts
|
||||
draft_data['to_formdata_percent'] = 100 * draft_data['total'] / total_formdata
|
||||
|
||||
context['drafts'] = sorted(drafts.items(), key=lambda x: x[1]['page_index'])
|
||||
context['total_formdata'] = total_formdata
|
||||
total_formdata = self.formdef.data_class().count([receipt_time_criteria])
|
||||
context['drafts'] = sorted(drafts.items(), key=lambda x: x[1]['page_index'])
|
||||
context['percent_submitted_formdata'] = 100 * (total_formdata - total_drafts) / total_formdata
|
||||
context['total_formdata'] = total_formdata
|
||||
|
||||
context['total_drafts'] = total_drafts
|
||||
context['is_carddef'] = isinstance(self.formdef, CardDef)
|
||||
|
||||
|
|
|
@ -290,9 +290,23 @@ span.error-message {
|
|||
font-weight: bold;
|
||||
}
|
||||
|
||||
#inspect-drafts {
|
||||
h2 {
|
||||
margin-top: 0;
|
||||
}
|
||||
h3 {
|
||||
margin-top: 2em;
|
||||
margin-bottom: 0;
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
|
||||
table.stats {
|
||||
margin: 1ex 0;
|
||||
width: 100%;
|
||||
&.completion-rate {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
table.stats thead th {
|
||||
|
|
|
@ -98,12 +98,16 @@
|
|||
|
||||
{% if not snapshots_diff and not is_carddef %}
|
||||
<div id="inspect-drafts" role="tabpanel" tabindex="0" aria-labelledby="tab-drafts" hidden>
|
||||
{% if drafts %}
|
||||
{% if total_drafts %}
|
||||
<h2>{% trans "Key indicators on existing drafts" %}</h2>
|
||||
<div class="infonotice">
|
||||
<p>{% trans "Statistics on drafts by page." %}</p>
|
||||
<p>{% trans "Lifespan of drafts (in days)" %}{% trans ":" %} {{ formdef.get_drafts_lifespan }}.</p>
|
||||
<p>
|
||||
{% blocktrans trimmed with count=formdef.get_drafts_lifespan %}
|
||||
Covered period: last {{ count }} days.
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
</div>
|
||||
<h3>{% trans "Rate among drafts" %}</h2>
|
||||
<h3>{% trans "Rate for in-progress forms, by page" %}</h3>
|
||||
<table class="stats" data-table-id="rate-among-drafts">
|
||||
<tbody>
|
||||
{% for page_drafts in drafts %}
|
||||
|
@ -111,12 +115,19 @@
|
|||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>{% trans "Rate among total forms" %}</h2>
|
||||
<table class="stats" data-table-id="rate-among-total-forms">
|
||||
<h3>{% trans "Completion rate: count of submitted forms, against count of drafts" %}</h2>
|
||||
<table class="stats completion-rate">
|
||||
<tbody>
|
||||
{% for page_drafts in drafts %}
|
||||
{% include "wcs/backoffice/includes/inspect-draft-by-page.html" with page_id=page_drafts.0 field=page_drafts.1.field percent=page_drafts.1.to_formdata_percent num=page_drafts.1.total den=total_formdata %}
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td class="label"></td>
|
||||
<td class="percent">{{ percent_submitted_formdata|floatformat }}{% trans "%" %}</td>
|
||||
<td class="total">({{ total_formdata|subtract:total_drafts }}/{{ total_formdata }})</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="bar" colspan="3">
|
||||
<span style="width: {{ percent_submitted_formdata|floatformat:"3u" }}%"></span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% else %}
|
||||
|
|
Loading…
Reference in New Issue