From 5cbadcd126c897176285152537da7809c6f7c99c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 26 Aug 2015 20:28:07 +0200 Subject: [PATCH] workflows: add possibility of a backoffice description for status (#7738) --- wcs/admin/workflows.py | 28 ++++++++++++++++++++++++++-- wcs/forms/common.py | 5 +++++ wcs/qommon/static/css/dc2/admin.css | 13 +++++++++++++ wcs/workflows.py | 7 +++++++ 4 files changed, 51 insertions(+), 2 deletions(-) diff --git a/wcs/admin/workflows.py b/wcs/admin/workflows.py index 214b184..17854fa 100644 --- a/wcs/admin/workflows.py +++ b/wcs/admin/workflows.py @@ -316,7 +316,8 @@ class WorkflowItemsDir(Directory): class WorkflowStatusPage(Directory): _q_exports = ['', 'delete', 'newitem', ('items', 'items_dir'), 'update_order', 'edit', 'reassign', 'visibility', - 'endpoint', 'colour'] + 'endpoint', 'colour', + ('backoffice-description', 'backoffice_description'),] def __init__(self, workflow, status_id, html_top): self.html_top = html_top @@ -332,7 +333,8 @@ class WorkflowStatusPage(Directory): def _q_index(self): self.html_top('%s - %s' % (_('Workflow'), self.workflow.name)) r = TemplateIO(html=True) - get_response().add_javascript(['jquery.js', 'jquery-ui.js', 'biglist.js', 'svg-pan-zoom.js']) + get_response().add_javascript(['jquery.js', 'jquery-ui.js', 'biglist.js', 'svg-pan-zoom.js', + 'ckeditor/ckeditor.js', 'qommon.wysiwyg.js', 'ckeditor/adapters/jquery.js']) get_response().add_javascript_code('$(function () { svgPanZoom("svg", {controlIconsEnabled: true}); });'); r += htmltext('

%s - ') % _('Workflow') @@ -425,6 +427,8 @@ class WorkflowStatusPage(Directory): r += htmltext('
  • %s
  • ') % _('Change Status Visibility') r += htmltext('
  • %s
  • ') % _('Change Terminal Status') r += htmltext('
  • %s
  • ') % _('Change Status Colour') + r += htmltext('
  • %s
  • ' + ) % _('Change Backoffice Description') r += htmltext('
  • %s
  • ') % _('Delete') r += htmltext('') r += htmltext('
    ') @@ -677,6 +681,26 @@ class WorkflowStatusPage(Directory): get_response().breadcrumb.append( ('colour', _('Status Colour')) ) return form.render() + def backoffice_description(self): + form = Form(enctype = 'multipart/form-data') + form.add(WysiwygTextWidget, 'backoffice_description', + title=_('Description for backoffice'), + value=self.status.backoffice_description) + form.add_submit('submit', _('Submit')) + form.add_submit('cancel', _('Cancel')) + if form.get_widget('cancel').parse(): + return redirect('..') + + if form.is_submitted() and not form.has_errors(): + self.status.backoffice_description = form.get_widget('backoffice_description').parse() + self.workflow.store() + return redirect('.') + + self.html_top(title = _('Edit Backoffice Description')) + get_response().breadcrumb.append( ('backoffice_description', + _('Description for backoffice')) ) + return form.render() + class WorkflowStatusDirectory(Directory): _q_exports = [''] diff --git a/wcs/forms/common.py b/wcs/forms/common.py index a77d5f8..d3ca1be 100644 --- a/wcs/forms/common.py +++ b/wcs/forms/common.py @@ -464,6 +464,11 @@ class FormStatusPage(Directory): if form: r += form.render() + if self.filled.get_status().backoffice_description: + r += htmltext('
    ') + r += htmltext(self.filled.get_status().backoffice_description) + r += htmltext('
    ') + r += htmltext('%s') % _('Back to Listing') return r.getvalue() diff --git a/wcs/qommon/static/css/dc2/admin.css b/wcs/qommon/static/css/dc2/admin.css index 5e597e1..3ae2552 100644 --- a/wcs/qommon/static/css/dc2/admin.css +++ b/wcs/qommon/static/css/dc2/admin.css @@ -1002,6 +1002,19 @@ a#filter-settings { cursor: pointer; } +.bo-block.backoffice-description:before { + font-family: FontAwesome; + content: "\f05a"; /* info-circle */ + position: absolute; + left: 10px; + font-size: 2em; +} + +.bo-block.backoffice-description { + position: relative; + padding-left: 40px; +} + @media print { div#sidebar { display: none; diff --git a/wcs/workflows.py b/wcs/workflows.py index a1ca87a..c270795 100644 --- a/wcs/workflows.py +++ b/wcs/workflows.py @@ -549,6 +549,7 @@ class WorkflowStatus(object): visibility = None forced_endpoint = False colour = 'FFFFFF' + backoffice_description = None def __init__(self, name = None): self.name = name @@ -722,6 +723,10 @@ class WorkflowStatus(object): if self.forced_endpoint: ET.SubElement(status, 'forced_endpoint').text = 'true' + if self.backoffice_description: + ET.SubElement(status, 'backoffice_description').text = unicode( + self.backoffice_description, charset) + visibility_node = ET.SubElement(status, 'visibility') for role in self.visibility or []: ET.SubElement(visibility_node, 'role').text = str(role) @@ -739,6 +744,8 @@ class WorkflowStatus(object): self.colour = elem.find('colour').text.encode(charset) if elem.find('forced_endpoint') is not None: self.forced_endpoint = (elem.find('forced_endpoint').text == 'true') + if elem.find('backoffice_description') is not None: + self.backoffice_description = elem.find('backoffice_description').text.encode(charset) self.visibility = [] for visibility_role in elem.findall('visibility/role'): -- 2.5.0