Projet

Général

Profil

0001-admin-display-and-use-card-default-workflow-when-set.patch

Frédéric Péters, 24 septembre 2019 18:10

Télécharger (7,64 ko)

Voir les différences:

Subject: [PATCH] admin: display and use card default workflow when setting
 workflow (#36413)

 tests/test_admin_pages.py | 37 +++++++++++++++++++++++++++++++++++++
 wcs/admin/forms.py        | 29 ++++++++++++++++-------------
 wcs/backoffice/cards.py   |  1 +
 wcs/formdef.py            |  3 ++-
 wcs/workflows.py          |  3 +++
 5 files changed, 59 insertions(+), 14 deletions(-)
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
-