From 031d42f8356727bbead8b8c2dd869cae829a824c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sun, 8 Nov 2015 12:00:01 +0100 Subject: [PATCH 2/3] backoffice: divide submission screen in three sections (#8913) - create: to create new formdata - existing: to get back to existing drafts - empty: to get back empty drafts (typically, mails) --- tests/test_backoffice_pages.py | 37 ++++++++++++++++++++ wcs/backoffice/submission.py | 67 ++++++++++++++++++++++++++++--------- wcs/formdata.py | 6 ++++ wcs/qommon/static/css/dc2/admin.css | 5 +++ 4 files changed, 99 insertions(+), 16 deletions(-) diff --git a/tests/test_backoffice_pages.py b/tests/test_backoffice_pages.py index b16f39a..61e8a6b 100644 --- a/tests/test_backoffice_pages.py +++ b/tests/test_backoffice_pages.py @@ -740,6 +740,43 @@ def test_backoffice_submission_drafts(pub): # check it kept the same id assert resp.location == 'http://example.net/backoffice/management/form-title/%s/' % formdata_no +def test_backoffice_submission_sections(pub): + user = create_user(pub) + create_environment(pub) + + app = login(get_app(pub)) + + formdef = FormDef.get_by_urlname('form-title') + formdef.enable_tracking_codes = True + formdef.backoffice_submission_roles = user.roles[:] + formdef.store() + data_class = formdef.data_class() + data_class.wipe() + + resp = app.get('/backoffice/submission/') + assert not 'Submission to complete' in resp.body + assert not 'Running submission' in resp.body + + formdata = data_class() + formdata.data = {} + formdata.status = 'draft' + formdata.backoffice_submission = True + formdata.receipt_time = datetime.datetime(2015, 1, 1).timetuple() + formdata.store() + + resp = app.get('/backoffice/submission/') + assert 'Submission to complete' in resp.body + assert not 'Running submission' in resp.body + assert '>#%s' % formdata.id in resp.body + + formdata.data = {'1': 'xxx'} + formdata.store() + resp = app.get('/backoffice/submission/') + assert not 'Submission to complete' in resp.body + assert 'Running submission' in resp.body + assert '>#%s' % formdata.id in resp.body + + def test_backoffice_submission_prefill_user_via_formula(pub): user = create_user(pub) create_environment(pub) diff --git a/wcs/backoffice/submission.py b/wcs/backoffice/submission.py index 3da4390..77e5ea4 100644 --- a/wcs/backoffice/submission.py +++ b/wcs/backoffice/submission.py @@ -139,29 +139,66 @@ class SubmissionDirectory(Directory): misc_cat.formdefs = [x for x in list_forms if not x.category] cats.append(misc_cat) - for cat in cats: - if not cat.formdefs: + for mode in ['create', 'existing', 'empty']: + list_content = TemplateIO() + for cat in cats: + if not cat.formdefs: + continue + list_content += self.form_list(cat.formdefs, title=cat.name, mode=mode) + if not list_content.getvalue().strip(): continue - r += self.form_list(cat.formdefs, title=cat.name) + r += htmltext('
') + r += htmltext('

%s

') % { + 'create': _('Submission'), + 'existing': _('Running submission'), + 'empty': _('Submission to complete'), + }.get(mode) + r += htmltext('') + r += htmltext('
') return r.getvalue() - def form_list(self, formdefs, title=None): + def form_list(self, formdefs, title=None, mode='create'): r = TemplateIO(html=True) - r += htmltext('
') - if title: - r += htmltext('

%s

') % title + if mode != 'create': + skip = True + for formdef in formdefs: + if not hasattr(formdef, '_formdatas'): + data_class = formdef.data_class() + formdata_ids = data_class.get_ids_with_indexed_value('status', 'draft') + formdef._formdatas = [x for x in data_class.get_ids(formdata_ids) + if x.backoffice_submission is True] + skip &= not(bool(formdef._formdatas)) + if skip: + return + + first = True - r += htmltext('') - r += htmltext('
') return r.getvalue() def _q_lookup(self, component): diff --git a/wcs/formdata.py b/wcs/formdata.py index 9478ecb..1c7ab23 100644 --- a/wcs/formdata.py +++ b/wcs/formdata.py @@ -222,6 +222,12 @@ class FormData(StorableObject): self.user_id = None user = property(get_user, set_user) + def has_empty_data(self): + empty = True + for key in self.data or {}: + empty &= (self.data.get(key) is None) + return empty + def just_created(self): self.receipt_time = time.localtime() self.status = 'wf-%s' % self.formdef.workflow.possible_status[0].id diff --git a/wcs/qommon/static/css/dc2/admin.css b/wcs/qommon/static/css/dc2/admin.css index 5132251..c2712e8 100644 --- a/wcs/qommon/static/css/dc2/admin.css +++ b/wcs/qommon/static/css/dc2/admin.css @@ -550,6 +550,7 @@ div.bo-block ul.biglist h3 { padding: 1ex; font-weight: normal; margin: 0; + font-size: 130%; } div.bo-block > h3 { @@ -576,6 +577,10 @@ div.bo-block ul.biglist strong a { transition: all 0.25s ease 0s; } +div.bo-block ul.biglist strong a.fake { + color: #505050; +} + div.bo-block ul.biglist li.smallitem > a { padding: 0.2ex 1ex 0.2ex 4ex; } -- 2.6.2