backoffice: always display backoffice fields marked as required (#11441)

This commit is contained in:
Frédéric Péters 2016-06-20 20:05:25 +02:00
parent c1a46ac67d
commit 7f4492df49
3 changed files with 46 additions and 22 deletions

View File

@ -1676,6 +1676,7 @@ def test_workflows_backoffice_fields(pub):
resp = resp.forms[0].submit()
assert resp.location == 'http://example.net/backoffice/workflows/1/backoffice-fields/fields/'
resp = resp.follow()
assert Workflow.get(workflow.id).get_backoffice_fields()[0].required is True
# check it's been saved correctly
assert 'foobar' in resp.body

View File

@ -2447,7 +2447,7 @@ def test_backoffice_fields(pub):
wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(wf)
wf.backoffice_fields_formdef.fields = [
fields.StringField(id='bo1', label='1st backoffice field',
type='string', varname='backoffice_blah'),
type='string', varname='backoffice_blah', required=False),
]
st1 = wf.add_status('Status1')
wf.store()
@ -2472,3 +2472,19 @@ def test_backoffice_fields(pub):
assert 'Backoffice Data' in resp.body
assert '1st backoffice field' in resp.body
assert 'HELLO WORLD' in resp.body
wf.backoffice_fields_formdef.fields = [
fields.StringField(id='bo1', label='1st backoffice field',
type='string', varname='backoffice_blah', required=True),
]
wf.store()
formdata = formdef.data_class()()
formdata.data = {}
formdata.just_created()
formdata.store()
app = login(get_app(pub))
resp = app.get(formdata.get_url(backoffice=True))
assert 'Backoffice Data' in resp.body
assert 'Not set' in resp.body

View File

@ -434,7 +434,7 @@ class FormStatusPage(Directory):
return r.getvalue()
def display_fields(self, fields, form_url=''):
def display_fields(self, fields, form_url='', include_unset_required_fields=False):
r = TemplateIO(html=True)
on_page = False
on_disabled_page = False
@ -468,33 +468,39 @@ class FormStatusPage(Directory):
on_page = True
continue
if not self.filled.data.has_key(f.id):
continue
if f.store_display_value and ('%s_display' % f.id) in self.filled.data:
value = self.filled.data['%s_display' % f.id]
else:
value = self.filled.data[f.id]
if value is None or value == '':
continue
if not hasattr(f, str('get_view_value')):
continue
if not self.filled.data.has_key(f.id):
value = None
else:
if f.store_display_value and ('%s_display' % f.id) in self.filled.data:
value = self.filled.data['%s_display' % f.id]
else:
value = self.filled.data[f.id]
if value is None or value == '':
value = None
if value is None and not (f.required and include_unset_required_fields):
continue
css_classes = ['field']
if f.extra_css_class:
css_classes.append(f.extra_css_class)
r += htmltext('<div class="%s">' % ' '.join(css_classes))
r += htmltext('<span class="label">%s</span> ') % f.label
if isinstance(f, FileField):
r += htmltext(self.display_file_field(form_url, f, value))
else: # normal display
r += htmltext('<div class="value">')
s = f.get_view_value(value)
s = s.replace(str('[download]'), str('%sdownload' % form_url))
r += s
r += htmltext('</div>')
if value is None:
r += htmltext('<div class="value"><i>%s</i></div>') % _('Not set')
else:
if isinstance(f, FileField):
r += htmltext(self.display_file_field(form_url, f, value))
else: # normal display
r += htmltext('<div class="value">')
s = f.get_view_value(value)
s = s.replace(str('[download]'), str('%sdownload' % form_url))
r += s
r += htmltext('</div>')
r += htmltext('</div>')
if on_page:
@ -506,7 +512,8 @@ class FormStatusPage(Directory):
backoffice_fields = self.formdef.workflow.get_backoffice_fields()
if not backoffice_fields:
return
content = self.display_fields(backoffice_fields)
content = self.display_fields(backoffice_fields,
include_unset_required_fields=True)
if not len(content):
return
r = TemplateIO(html=True)