0001-backoffice-make-edit-workflow-stay-in-backoffice-909.patch
tests/test_backoffice_pages.py | ||
---|---|---|
17 | 17 |
from wcs.qommon.http_request import HTTPRequest |
18 | 18 |
from wcs.roles import Role |
19 | 19 |
from wcs.workflows import (Workflow, CommentableWorkflowStatusItem, |
20 |
ChoiceWorkflowStatusItem) |
|
20 |
ChoiceWorkflowStatusItem, EditableWorkflowStatusItem)
|
|
21 | 21 |
from wcs.wf.wscall import WebserviceCallStatusItem |
22 | 22 |
from wcs.categories import Category |
23 | 23 |
from wcs.formdef import FormDef |
... | ... | |
1049 | 1049 |
assert (' with the number %s.' % number31) in resp.body |
1050 | 1050 |
assert not 'Error during webservice call' in resp.body |
1051 | 1051 | |
1052 |
def test_backoffice_wfedit(pub): |
|
1053 |
user = create_user(pub) |
|
1054 |
create_environment(pub) |
|
1055 |
formdef = FormDef.get_by_urlname('form-title') |
|
1056 |
form_class = formdef.data_class() |
|
1057 | ||
1058 |
number31 = [x for x in form_class.select() if x.data['1'] == 'FOO BAR 30'][0] |
|
1059 | ||
1060 |
# attach a custom workflow |
|
1061 |
workflow = Workflow(name='wfedit') |
|
1062 |
st1 = workflow.add_status('Status1', number31.status.split('-')[1]) |
|
1063 | ||
1064 |
wfedit = EditableWorkflowStatusItem() |
|
1065 |
wfedit.id = '_wfedit' |
|
1066 |
wfedit.by = [user.roles[0]] |
|
1067 |
st1.items.append(wfedit) |
|
1068 |
wfedit.parent = st1 |
|
1069 |
workflow.store() |
|
1070 | ||
1071 |
formdef.workflow_id = workflow.id |
|
1072 |
formdef.store() |
|
1073 | ||
1074 |
app = login(get_app(pub)) |
|
1075 | ||
1076 |
resp = app.get('/backoffice/management/form-title/%s/' % number31.id) |
|
1077 |
assert (' with the number %s.' % number31.id) in resp.body |
|
1078 |
resp = resp.form.submit('button_wfedit') |
|
1079 |
resp = resp.follow() |
|
1080 |
assert resp.form['f1'].value == number31.data['1'] |
|
1081 |
assert resp.form['f2'].value == number31.data['2'] |
|
1082 |
assert resp.form['f3'].value == number31.data['3'] |
|
1083 |
assert 'value="Save Changes"' in resp.body |
|
1084 |
resp.form['f2'].value = 'bar' |
|
1085 |
resp = resp.form.submit('submit') |
|
1086 |
resp = resp.follow() |
|
1087 |
assert form_class().get(number31.id).data['2'] == 'bar' |
|
1088 |
number31.store() |
|
1089 | ||
1052 | 1090 |
def test_global_listing(pub): |
1053 | 1091 |
if not pub.is_using_postgresql(): |
1054 | 1092 |
pytest.skip('this requires SQL') |
wcs/backoffice/management.py | ||
---|---|---|
51 | 51 |
from wcs.categories import Category |
52 | 52 |
from wcs.formdef import FormDef |
53 | 53 |
from wcs.roles import logged_users_role |
54 |
from wcs.workflows import EditableWorkflowStatusItem |
|
55 | ||
56 |
from .submission import FormFillPage |
|
54 | 57 | |
55 | 58 | |
56 | 59 |
class SendCodeFormdefDirectory(Directory): |
... | ... | |
1547 | 1550 | |
1548 | 1551 | |
1549 | 1552 |
class FormBackOfficeStatusPage(FormStatusPage): |
1553 |
_q_exports = ['', 'download', 'json', 'wfedit'] |
|
1554 | ||
1550 | 1555 |
def html_top(self, title = None): |
1551 | 1556 |
return html_top('management', title) |
1552 | 1557 | |
... | ... | |
1669 | 1674 | |
1670 | 1675 |
return r.getvalue() |
1671 | 1676 | |
1677 |
def wfedit(self): |
|
1678 |
wf_status = self.filled.get_status() |
|
1679 |
for item in wf_status.items: |
|
1680 |
if not isinstance(item, EditableWorkflowStatusItem): |
|
1681 |
continue |
|
1682 |
if item.check_auth(self.filled, get_request().user): |
|
1683 |
f = FormFillPage(self.formdef.url_name) |
|
1684 |
f.edit_mode = True |
|
1685 |
get_response().breadcrumb = get_response().breadcrumb[:-1] |
|
1686 |
get_response().breadcrumb.append( ('wfedit', _('Edit')) ) |
|
1687 |
return f._q_index(editing=self.filled) |
|
1688 | ||
1689 |
raise errors.AccessForbiddenError() |
|
1690 | ||
1672 | 1691 | |
1673 | 1692 |
class FakeField(object): |
1674 | 1693 |
def __init__(self, id, type_, label): |
wcs/backoffice/submission.py | ||
---|---|---|
25 | 25 |
from wcs.categories import Category |
26 | 26 |
from wcs.forms.root import FormPage as PublicFormFillPage |
27 | 27 | |
28 |
from .management import FormBackOfficeStatusPage |
|
29 | ||
30 | 28 | |
31 | 29 |
class FormFillPage(PublicFormFillPage): |
30 |
edit_mode = False |
|
31 | ||
32 | 32 |
def html_top(self, *args, **kwargs): |
33 | 33 |
return html_top('submission', *args, **kwargs) |
34 | 34 | |
35 | 35 |
def check_role(self): |
36 |
if self.edit_mode: |
|
37 |
return True |
|
36 | 38 |
if not self.formdef.backoffice_submission_roles: |
37 | 39 |
raise errors.AccessUnauthorizedError() |
38 | 40 |
for role in get_request().user.roles or []: |
... | ... | |
57 | 59 |
r += htmltext('<p>-</p>') |
58 | 60 | |
59 | 61 |
if formdata and formdata.submission_context: |
62 |
from .management import FormBackOfficeStatusPage |
|
60 | 63 |
r += FormBackOfficeStatusPage(self.formdef, formdata).get_extra_context_bar() |
61 | 64 | |
62 | 65 |
return r.getvalue() |
wcs/workflows.py | ||
---|---|---|
1656 | 1656 | |
1657 | 1657 |
def submit_form(self, form, formdata, user, evo): |
1658 | 1658 |
if form.get_submit() == 'button%s' % self.id: |
1659 |
return formdata.get_url() + 'wfedit' |
|
1659 |
return formdata.get_url(backoffice=get_request().is_in_backoffice()) + 'wfedit'
|
|
1660 | 1660 | |
1661 | 1661 |
def add_parameters_widgets(self, form, parameters, prefix='', formdef=None): |
1662 | 1662 |
if 'by' in parameters: |
1663 |
- |