Compare commits

..

1 Commits

Author SHA1 Message Date
Emmanuel Cazenave 9f3aad7488 backoffice: display drafts stats (#72542)
gitea/wcs/pipeline/head This commit looks good Details
2024-03-14 11:55:16 +01:00
1 changed files with 18 additions and 20 deletions

View File

@ -1785,46 +1785,44 @@ class FormDefPage(Directory, TempfileDirectoryMixin):
)
context['deprecation_titles'] = deprecations.titles
temp_drafts = {}
temp_drafts = defaultdict(int)
for formdata in self.formdef.data_class().select_iterator(
clause=[Equal('status', 'draft')], itersize=200
):
page_id = formdata.page_id if formdata.page_id is not None else '_unknown'
if page_id not in temp_drafts:
temp_drafts[page_id] = {'total': 0, 'page_no': int(formdata.page_no)}
temp_drafts[page_id]['total'] += 1
temp_drafts[page_id] += 1
total_drafts = sum(draft_info['total'] for draft_info in temp_drafts.values()) if temp_drafts else 0
total_drafts = sum(temp_drafts.values()) if temp_drafts else 0
drafts = {}
special_page_index_mapping = {
'_first_page': -1000, # first
'_unknown': 1000, # last
'_confirmation_page': 999, # second to last
}
if total_drafts:
special_page_page_no_mapping = {
'_first_page': -1000, # first
'_unknown': 1000, # last
'_confirmation_page': 999, # second to last
}
for page_id, page_no in special_page_page_no_mapping.items():
for page_id, page_index in special_page_index_mapping.items():
try:
draft_info = temp_drafts.pop(page_id)
page_total = temp_drafts.pop(page_id)
except KeyError:
draft_info = {'total': 0}
drafts[page_id] = {'total': draft_info['total'], 'field': None, 'page_no': page_no}
for page_id, draft_info in temp_drafts.items():
for field in self.formdef.iter_fields(with_backoffice_fields=False):
page_total = 0
drafts[page_id] = {'total': page_total, 'field': None, 'page_index': page_index}
for page_id, page_total in temp_drafts.items():
for index, field in enumerate(self.formdef.iter_fields(with_backoffice_fields=False)):
if page_id == field.id and isinstance(field, PageField):
drafts[page_id] = {
'total': draft_info['total'],
'total': page_total,
'field': field,
'page_no': draft_info['page_no'],
'page_index': index,
}
break
else:
drafts['_unknown']['total'] += draft_info['total']
drafts['_unknown']['total'] += page_total
for draft_data in drafts.values():
draft_percent = 100 * draft_data['total'] / total_drafts
draft_data['percent'] = draft_percent
draft_data['percent_str'] = '%.1f' % draft_percent
context['drafts'] = sorted(drafts.items(), key=lambda x: x[1]['page_no'])
context['drafts'] = sorted(drafts.items(), key=lambda x: x[1]['page_index'])
context['drafts_total'] = total_drafts
context['is_carddef'] = isinstance(self.formdef, CardDef)