Compare commits

..

1 Commits

Author SHA1 Message Date
Emmanuel Cazenave 0343106640 backoffice: display drafts stats (#72542)
gitea/wcs/pipeline/head There was a failure building this commit Details
2024-02-08 18:21:41 +01:00
3 changed files with 50 additions and 31 deletions

View File

@ -1763,24 +1763,32 @@ class FormDefPage(Directory, TempfileDirectoryMixin):
context['deprecation_titles'] = deprecations.titles
temp_drafts = defaultdict(int)
total_drafts = 0
for formdata in self.formdef.data_class().select(clause=[Equal('status', 'draft')]):
page_id = formdata.page_id if formdata.page_id is not None else '_unkown'
temp_drafts[page_id] += 1
temp_drafts['total'] += 1
context['drafts_total'] = temp_drafts.pop('total')
total_drafts += 1
drafts = {}
for page_id in temp_drafts.keys():
if page_id in ('_unkown', '_confirmation_page', '_first_page'):
drafts[page_id] = (None, temp_drafts[page_id])
continue
for key in ('_unkown', '_confirmation_page', '_first_page'):
try:
num_drafts = temp_drafts.pop(key)
except KeyError:
num_drafts = 0
drafts[key] = {'total': num_drafts, 'field': None}
for page_id, num_drafts in temp_drafts.items():
for field in self.formdef.iter_fields(with_backoffice_fields=False):
if page_id == field.id and isinstance(field, PageField):
drafts[page_id] = (field, temp_drafts[page_id])
drafts[page_id] = {'total': num_drafts, 'field': field}
break
else:
drafts['_unkown'] += (None, drafts['_unkown'][1] + temp_drafts[page_id])
context['drafts'] = sorted(drafts.items(), reverse=True, key=lambda x: x[1][1])
drafts['_unkown']['total'] += num_drafts
for draft_data in drafts.values():
draft_percent = 100 * draft_data['total'] / total_drafts
draft_data['percent'] = draft_percent
draft_data['percent_rounded'] = '%d' % draft_percent
context['drafts'] = sorted(drafts.items(), reverse=True, key=lambda x: x[1]['total'])
context['drafts_total'] = total_drafts
return template.QommonTemplateResponse(
templates=[self.inspect_template_name],
context=context,

View File

@ -92,12 +92,38 @@
</div>
<div id="inspect-drafts" role="tabpanel" tabindex="0" aria-labelledby="tab-drafts" hidden>
<div class="pk-information page-field-counters"><p>
{% blocktranslate count draft_count=drafts_total %}{{ draft_count }} draft{% plural %}{{ draft_count }} drafts{% endblocktranslate %}.
</p></div>
{% for page_drafts in drafts %}
{% include "wcs/backoffice/includes/inspect-draft-by-page.html" with path=formdef.get_admin_url|add:"fields/" page_id=page_drafts.0 field=page_drafts.1.0 draft_count=page_drafts.1.1 %}
{% endfor %}
<h3>{% trans "Drafts" %}</h3>
<table class="stats">
<thead><tr><th colspan="4">{% trans "Page" %}</th></tr></thead>
<tbody>
{% for page_drafts in drafts %}
{% with page_id=page_drafts.0 draft_data=page_drafts.1 %}
{% if draft_data.total %}
<tr>
<td class="label">
{% if page_id == "_unkown" %}
{% trans "Unkown" %}
{% elif page_id == "_first_page" %}
{% trans "Only page" %}
{% elif page_id == "_confirmation_page" %}
{% trans "Confirmation page" %}
{% else %}
{{ draft_data.field.ellipsized_label }}
{% endif %}
</td>
<td class="percent"> {{draft_data.percent}}&nbsp;%</td>
<td class="total">({{draft_data.total}}/{{drafts_total}})</td>
</tr>
<tr>
<td class="bar" colspan="3">
<span style="width: {{draft_data.percent_rounded}}%"></span>
</td>
</tr>
{% endif %}
{% endwith %}
{% endfor %}
</tbody>
</table>
</div>
<div id="inspect-customviews" role="tabpanel" tabindex="0" aria-labelledby="tab-customviews" hidden>

View File

@ -1,15 +0,0 @@
{% load i18n %}
<div class="inspect-field inspect-field--{{ page_id }} {% if forloop.first %}inspect-field--first{% endif %}"
data-field-id="{{ page_id }}">
<h4>
{% if page_id == "_unkown" %}
<p>{% trans "Unkown" %}{% trans ":" %}{{ draft_count }}</p>
{% elif page_id == "_first_page" %}
<p>{% trans "Only page" %}{% trans ":" %}{{ draft_count }}</p>
{% elif page_id == "_confirmation_page" %}
<p>{% trans "Cofirmation page" %}{% trans ":" %}{{ draft_count }}</p>
{% else %}
<a href="{{ path|default:"fields/" }}{{ field.id }}/">{{ field.ellipsized_label }}{% trans ":" %}{{ draft_count }}</a>
{% endif %}
</h4>
</div>