0001-backoffice-display-mail-templates-usage-on-workflow-.patch
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 |
- |