0001-admin-display-and-use-card-default-workflow-when-set.patch
tests/test_admin_pages.py | ||
---|---|---|
5202 | 5202 |
resp = resp.click('Duplicate') |
5203 | 5203 |
assert CardDef.get(2).name == 'card title (copy)' |
5204 | 5204 |
assert CardDef.get(2).disabled is False |
5205 | ||
5206 |
def test_card_workflow_change(pub, studio): |
|
5207 |
Workflow.wipe() |
|
5208 |
workflow = Workflow(name='Workflow Two') |
|
5209 |
workflow.add_status('plop') |
|
5210 |
workflow.store() |
|
5211 | ||
5212 |
CardDef.wipe() |
|
5213 |
create_superuser(pub) |
|
5214 |
app = login(get_app(pub)) |
|
5215 |
resp = app.get('/backoffice/cards/') |
|
5216 |
resp = resp.click('New Card') |
|
5217 |
resp.form['name'] = 'card title' |
|
5218 |
resp = resp.form.submit() |
|
5219 |
resp = resp.follow() |
|
5220 |
resp = resp.click(href='workflow', index=1) |
|
5221 |
assert resp.form['workflow_id'].options[0][2] == 'Default (cards)' |
|
5222 |
resp = resp.form.submit('submit').follow() |
|
5223 |
assert CardDef.select()[0].workflow_id is None |
|
5224 | ||
5225 |
carddata = CardDef.select()[0].data_class()() |
|
5226 |
carddata.status = 'wf-recorded' |
|
5227 |
carddata.store() |
|
5228 | ||
5229 |
resp = resp.click(href='workflow', index=1) |
|
5230 |
resp.form['workflow_id'] = '%s' % workflow.id |
|
5231 |
resp = resp.form.submit('submit') |
|
5232 |
assert resp.location == 'http://example.net/backoffice/cards/1/workflow-status-remapping?new=%s' % workflow.id |
|
5233 |
resp = resp.follow() |
|
5234 |
resp = resp.form.submit('submit').follow() |
|
5235 | ||
5236 |
resp = resp.click(href='workflow', index=1) |
|
5237 |
resp.form['workflow_id'] = '' |
|
5238 |
resp = resp.form.submit('submit') |
|
5239 |
assert resp.location == 'http://example.net/backoffice/cards/1/workflow-status-remapping?new=%s' % '_carddef_default' |
|
5240 |
resp = resp.follow() |
|
5241 |
resp = resp.form.submit('submit').follow() |
wcs/admin/forms.py | ||
---|---|---|
53 | 53 |
t = sorted([(misc.simplify(x.name), x.id, x.name, x.id) for x in Category.select()]) |
54 | 54 |
return [x[1:] for x in t] |
55 | 55 | |
56 |
def get_workflows(condition=lambda x: True): |
|
57 |
t = sorted([(misc.simplify(x.name), x.id, x.name, x.id) for x in Workflow.select() if condition(x)]) |
|
58 |
return [x[1:] for x in t] |
|
59 | ||
60 | 56 | |
61 | 57 |
class FormDefUI(object): |
62 | 58 |
formdef_class = FormDef |
... | ... | |
67 | 63 |
def get_categories(self): |
68 | 64 |
return get_categories() |
69 | 65 | |
66 |
@classmethod |
|
67 |
def get_workflows(cls, condition=lambda x: True): |
|
68 |
default_workflow = cls.formdef_class.get_default_workflow() |
|
69 |
t = sorted([(misc.simplify(x.name), x.id, x.name, x.id) for x in Workflow.select() if condition(x)]) |
|
70 |
return [(None, default_workflow.name, '')] + [x[1:] for x in t] |
|
71 | ||
70 | 72 |
def new_form_ui(self): |
71 | 73 |
form = Form(enctype='multipart/form-data') |
72 | 74 |
if self.formdef: |
... | ... | |
80 | 82 |
form.add(SingleSelectWidget, 'category_id', title = _('Category'), |
81 | 83 |
value = formdef.category_id, |
82 | 84 |
options = [(None, '---', '')] + categories) |
83 |
workflows = get_workflows() |
|
84 |
if workflows:
|
|
85 |
form.add(SingleSelectWidget, 'workflow_id', title = _('Workflow'),
|
|
86 |
value = formdef.workflow_id,
|
|
87 |
options = [(None, _('Default Workflow'), '')] + workflows)
|
|
85 |
workflows = self.get_workflows()
|
|
86 |
if len(workflows) > 1:
|
|
87 |
form.add(SingleSelectWidget, 'workflow_id', title=_('Workflow'),
|
|
88 |
value=formdef.workflow_id,
|
|
89 |
options=workflows)
|
|
88 | 90 |
form.add_submit('submit', _('Submit')) |
89 | 91 |
form.add_submit('cancel', _('Cancel')) |
90 | 92 |
return form |
... | ... | |
357 | 359 |
formdef_class = FormDef |
358 | 360 |
formdef_export_prefix = 'form' |
359 | 361 |
formdef_ui_class = FormDefUI |
362 |
formdef_default_workflow = '_default' |
|
360 | 363 | |
361 | 364 |
delete_message = N_('You are about to irrevocably delete this form.') |
362 | 365 |
delete_title = N_('Deleting Form:') |
... | ... | |
792 | 795 | |
793 | 796 |
def workflow(self): |
794 | 797 |
form = Form(enctype='multipart/form-data') |
795 |
workflows = get_workflows(condition=lambda x: x.possible_status) |
|
798 |
workflows = self.formdef_ui_class.get_workflows(condition=lambda x: x.possible_status)
|
|
796 | 799 |
form.add(SingleSelectWidget, 'workflow_id', |
797 | 800 |
value=self.formdef.workflow_id, |
798 |
options = [(None, _('Default Workflow'), '')] + workflows)
|
|
801 |
options=workflows)
|
|
799 | 802 |
form.add_submit('submit', _('Submit')) |
800 | 803 |
form.add_submit('cancel', _('Cancel')) |
801 | 804 |
if form.get_widget('cancel').parse(): |
... | ... | |
814 | 817 |
if self.formdef.data_class().keys(): |
815 | 818 |
# there are existing formdata, status will have to be mapped |
816 | 819 |
if workflow_id is None: |
817 |
workflow_id = '_default'
|
|
820 |
workflow_id = self.formdef_default_workflow
|
|
818 | 821 |
return redirect('workflow-status-remapping?new=%s' % workflow_id) |
819 | 822 |
self.formdef.workflow_id = workflow_id |
820 | 823 |
self.formdef.store() |
... | ... | |
853 | 856 |
get_logger().info('admin - form "%s", workflow is now "%s" (was "%s")' % ( |
854 | 857 |
self.formdef.name, new_workflow.name, self.formdef.workflow.name)) |
855 | 858 |
self.workflow_status_remapping_submit(form) |
856 |
if new_workflow.id == '_default':
|
|
859 |
if new_workflow.id == self.formdef_default_workflow:
|
|
857 | 860 |
self.formdef.workflow_id = None |
858 | 861 |
else: |
859 | 862 |
self.formdef.workflow_id = new_workflow.id |
wcs/backoffice/cards.py | ||
---|---|---|
42 | 42 |
formdef_class = CardDef |
43 | 43 |
formdef_export_prefix = 'card' |
44 | 44 |
formdef_ui_class = CardDefUI |
45 |
formdef_default_workflow = '_carddef_default' |
|
45 | 46 | |
46 | 47 |
delete_message = N_('You are about to irrevocably delete this card.') |
47 | 48 |
delete_title = N_('Deleting Card:') |
wcs/formdef.py | ||
---|---|---|
416 | 416 |
else: |
417 | 417 |
return self.get_default_workflow() |
418 | 418 | |
419 |
def get_default_workflow(self): |
|
419 |
@classmethod |
|
420 |
def get_default_workflow(cls): |
|
420 | 421 |
from wcs.workflows import Workflow |
421 | 422 |
return Workflow.get_default_workflow() |
422 | 423 |
wcs/workflows.py | ||
---|---|---|
364 | 364 |
def get(cls, id, ignore_errors=False, ignore_migration=False): |
365 | 365 |
if id == '_default': |
366 | 366 |
return cls.get_default_workflow() |
367 |
elif id == '_carddef_default': |
|
368 |
from wcs.carddef import CardDef |
|
369 |
return CardDef.get_default_workflow() |
|
367 | 370 |
return super(Workflow, cls).get (id, ignore_errors=ignore_errors, |
368 | 371 |
ignore_migration=ignore_migration) |
369 | 372 | |
370 |
- |