Projet

Général

Profil

0001-backoffice-display-mail-templates-usage-on-workflow-.patch

Nicolas Roche, 27 avril 2021 17:46

Télécharger (6,34 ko)

Voir les différences:

Subject: [PATCH] backoffice: display mail templates usage on workflow page
 (#51898)

 tests/admin_pages/test_workflow.py         | 25 ++++++++++++++++++++++
 wcs/templates/wcs/backoffice/workflow.html | 12 +++++++++--
 wcs/workflows.py                           |  5 +++++
 3 files changed, 40 insertions(+), 2 deletions(-)
tests/admin_pages/test_workflow.py
7 7
import mock
8 8
import pytest
9 9
from quixote.http_request import Upload as QuixoteUpload
10 10
from webtest import Upload
11 11

  
12 12
from wcs import fields
13 13
from wcs.carddef import CardDef
14 14
from wcs.formdef import FormDef
15
from wcs.mail_templates import MailTemplate
15 16
from wcs.qommon.errors import ConnectionError
16 17
from wcs.qommon.form import UploadedFile
17 18
from wcs.qommon.http_request import HTTPRequest
18 19
from wcs.wf.create_carddata import CreateCarddataWorkflowStatusItem
19 20
from wcs.wf.create_formdata import CreateFormdataWorkflowStatusItem, Mapping
20 21
from wcs.wf.dispatch import DispatchWorkflowStatusItem
21 22
from wcs.wf.edit_carddata import EditCarddataWorkflowStatusItem
22 23
from wcs.wf.export_to_model import ExportToModel
......
26 27
from wcs.wf.redirect_to_url import RedirectToUrlWorkflowStatusItem
27 28
from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem
28 29
from wcs.wf.wscall import WebserviceCallStatusItem
29 30
from wcs.workflows import (
30 31
    ChoiceWorkflowStatusItem,
31 32
    CommentableWorkflowStatusItem,
32 33
    DisplayMessageWorkflowStatusItem,
33 34
    JumpOnSubmitWorkflowStatusItem,
35
    SendmailWorkflowStatusItem,
34 36
    Workflow,
35 37
    WorkflowBackofficeFieldsFormDef,
36 38
    WorkflowCriticalityLevel,
37 39
    WorkflowVariablesFieldsFormDef,
38 40
    item_classes,
39 41
)
40 42

  
41 43
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login
......
299 301
    assert resp.location == 'http://example.net/backoffice/workflows/'
300 302
    resp = resp.follow()
301 303
    assert Workflow.count() == 0
302 304

  
303 305

  
304 306
def test_workflows_usage(pub):
305 307
    Workflow.wipe()
306 308
    workflow = Workflow(name='foo')
309
    st1 = workflow.add_status('Status1')
310
    item = SendmailWorkflowStatusItem()
311
    st1.items.append(item)
312
    item.parent = st1
307 313
    workflow.store()
308 314

  
309 315
    create_superuser(pub)
310 316
    app = login(get_app(pub))
311 317

  
312 318
    resp = app.get('/backoffice/workflows/%s/' % workflow.id)
313 319
    assert 'Usage' not in resp.text
314 320

  
......
333 339
    assert '/cards/%s/' % carddef.id in resp.text
334 340

  
335 341
    formdef.remove_self()
336 342

  
337 343
    resp = app.get('/backoffice/workflows/%s/' % workflow.id)
338 344
    assert 'Usage' in resp.text
339 345
    assert '/cards/%s/' % carddef.id in resp.text
340 346

  
347
    mail_template = MailTemplate()
348
    mail_template.name = 'Mail template title'
349
    mail_template.store()
350

  
351
    assert workflow.mail_templates() == []
352
    item.mail_template = mail_template.slug
353
    workflow.store()
354
    assert [x.id for x in workflow.mail_templates()] == [mail_template.id]
355

  
356
    resp = app.get('/backoffice/workflows/%s/' % workflow.id)
357
    assert 'Usage' in resp.text
358
    assert '/mail-templates/%s/' % mail_template.id in resp.text
359

  
360
    carddef.remove_self()
361

  
362
    resp = app.get('/backoffice/workflows/%s/' % workflow.id)
363
    assert 'Usage' in resp.text
364
    assert '/mail-templates/%s/' % mail_template.id in resp.text
365

  
341 366

  
342 367
def test_workflows_export_import(pub):
343 368
    create_superuser(pub)
344 369

  
345 370
    Workflow.wipe()
346 371
    workflow = Workflow(name='foo')
347 372
    workflow.add_status(name='baz')
348 373
    workflow.store()
wcs/templates/wcs/backoffice/workflow.html
143 143

  
144 144
{% if workflow.possible_status %}
145 145
<div class="bo-block">
146 146
{{ view.graphviz|safe }}
147 147
<div class="full-screen-link"><a href="schema.svg">{% trans "Full Screen" %}</a></div>
148 148
</div>
149 149
{% endif %}
150 150

  
151
{% with formdefs=workflow.formdefs carddefs=workflow.carddefs %}
152
{% if formdefs or carddefs %}
151
{% with formdefs=workflow.formdefs carddefs=workflow.carddefs mail_templates=workflow.mail_templates %}
152
{% if formdefs or carddefs or mail_templates %}
153 153
<div class="section">
154 154
<h3>{% trans "Usage" %}</h3>
155 155
<div>
156 156
{% if formdefs %}
157 157
<p>{% trans "This workflow is used for the following forms:" %}
158 158
<ul class="objects-list single-links">
159 159
{% for formdef in formdefs %}
160 160
<li><a href="{{ formdef.get_admin_url }}">{{ formdef.name }}</a></li>
......
164 164
{% if carddefs %}
165 165
<p>{% trans "This workflow is used for the following card models:" %}
166 166
<ul class="objects-list single-links">
167 167
{% for carddef in carddefs %}
168 168
<li><a href="{{ carddef.get_admin_url }}">{{ carddef.name }}</a></li>
169 169
{% endfor %}
170 170
</ul>
171 171
{% endif %}
172
{% if mail_templates %}
173
<p>{% trans "The following mail templates are used in this workflow:" %}
174
<ul class="objects-list single-links">
175
{% for mail_template in mail_templates %}
176
<li><a href="{{ mail_template.get_admin_url }}">{{ mail_template.name }}</a></li>
177
{% endfor %}
178
</ul>
179
{% endif %}
172 180
</div>
173 181
</div>
174 182
{% endif %}
175 183
{% endwith %}
176 184

  
177 185
{% endblock %}
wcs/workflows.py
921 921
    def formdefs(self, **kwargs):
922 922
        order_by = kwargs.pop('order_by', 'name')
923 923
        return list(FormDef.select(lambda x: x.workflow_id == self.id, order_by=order_by, **kwargs))
924 924

  
925 925
    def carddefs(self, **kwargs):
926 926
        order_by = kwargs.pop('order_by', 'name')
927 927
        return list(CardDef.select(lambda x: x.workflow_id == self.id, order_by=order_by, **kwargs))
928 928

  
929
    def mail_templates(self):
930
        slugs = [x.mail_template for x in self.get_all_items() if x.key == 'sendmail' and x.mail_template]
931
        criterias = [Contains('slug', slugs)]
932
        return list(MailTemplate.select(criterias, order_by='name'))
933

  
929 934

  
930 935
class XmlSerialisable:
931 936
    node_name = None
932 937
    key = None
933 938

  
934 939
    def export_to_xml(self, charset, include_id=False):
935 940
        node = ET.Element(self.node_name)
936 941
        if self.key:
937
-