Projet

Général

Profil

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

Nicolas Roche, 15 avril 2021 14:27

Télécharger (6,42 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                           |  6 ++++++
 3 files changed, 41 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
917 917
    def formdefs(self, **kwargs):
918 918
        order_by = kwargs.pop('order_by', 'name')
919 919
        return list(FormDef.select(lambda x: x.workflow_id == self.id, order_by=order_by, **kwargs))
920 920

  
921 921
    def carddefs(self, **kwargs):
922 922
        order_by = kwargs.pop('order_by', 'name')
923 923
        return list(CardDef.select(lambda x: x.workflow_id == self.id, order_by=order_by, **kwargs))
924 924

  
925
    def mail_templates(self, **kwargs):
926
        order_by = kwargs.pop('order_by', 'name')
927
        slugs = [x.mail_template for x in self.get_all_items() if x.key == 'sendmail' and x.mail_template]
928
        criterias = [Contains('slug', slugs)]
929
        return list(MailTemplate.select(criterias, order_by=order_by, **kwargs))
930

  
925 931

  
926 932
class XmlSerialisable:
927 933
    node_name = None
928 934
    key = None
929 935

  
930 936
    def export_to_xml(self, charset, include_id=False):
931 937
        node = ET.Element(self.node_name)
932 938
        if self.key:
933
-