author | Laurent Peuch <cortex@worlddomination.be> |
Thu, 16 May 2019 04:42:59 +0200 | |
changeset 12614 | 8ac9ac8d9143 |
parent 12567 | 26744ad37953 |
permissions | -rw-r--r-- |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
1 |
# copyright 2003 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
2 |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
3 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
4 |
# This file is part of CubicWeb. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
5 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
6 |
# CubicWeb is free software: you can redistribute it and/or modify it under the |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
7 |
# terms of the GNU Lesser General Public License as published by the Free |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
8 |
# Software Foundation, either version 2.1 of the License, or (at your option) |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
9 |
# any later version. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
10 |
# |
5424
8ecbcbff9777
replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5421
diff
changeset
|
11 |
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
12 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
13 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
14 |
# details. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
15 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
16 |
# You should have received a copy of the GNU Lesser General Public License along |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
17 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
18 |
"""workflow views: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
19 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
20 |
* IWorkflowable views and forms |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
21 |
* workflow entities views (State, Transition, TrInfo) |
0 | 22 |
""" |
5737 | 23 |
|
11767
432f87a63057
flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11197
diff
changeset
|
24 |
|
10666
7f6b5f023884
[py3k] replace '_ = unicode' in global scope (closes #7589459)
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10006
diff
changeset
|
25 |
from cubicweb import _ |
0 | 26 |
|
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2005
diff
changeset
|
27 |
from logilab.mtconverter import xml_escape |
822 | 28 |
|
7403
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
29 |
from cubicweb import Unauthorized |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
30 |
from cubicweb.predicates import (one_line_rset, |
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
31 |
relation_possible, match_form_params, |
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
32 |
score_entity, is_instance, adaptable) |
2438
576f4d51f826
[cleanup] fix deprecation warnings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2381
diff
changeset
|
33 |
from cubicweb.view import EntityView |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
34 |
from cubicweb.web import stdmsgs, action, component, form |
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
35 |
from cubicweb.web import formwidgets as fwdgs |
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
36 |
from cubicweb.web.views import uicfg, forms, ibreadcrumbs |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
37 |
from cubicweb.web.views.tabs import TabbedPrimaryView, PrimaryTab |
6093
9001a74fcc82
more generic dot graph generator
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
5877
diff
changeset
|
38 |
from cubicweb.web.views.dotgraphview import DotGraphView, DotPropsHandler |
3306
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
39 |
|
3487
2e705d9fdaf1
[views] workflow primary view: do not show states and transitions in side boxes
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3350
diff
changeset
|
40 |
_pvs = uicfg.primaryview_section |
2e705d9fdaf1
[views] workflow primary view: do not show states and transitions in side boxes
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3350
diff
changeset
|
41 |
_pvs.tag_subject_of(('Workflow', 'initial_state', '*'), 'hidden') |
2e705d9fdaf1
[views] workflow primary view: do not show states and transitions in side boxes
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3350
diff
changeset
|
42 |
_pvs.tag_object_of(('*', 'state_of', 'Workflow'), 'hidden') |
2e705d9fdaf1
[views] workflow primary view: do not show states and transitions in side boxes
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3350
diff
changeset
|
43 |
_pvs.tag_object_of(('*', 'transition_of', 'Workflow'), 'hidden') |
5239
471554b842d2
[schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5224
diff
changeset
|
44 |
_pvs.tag_object_of(('*', 'wf_info_for', '*'), 'hidden') |
471554b842d2
[schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5224
diff
changeset
|
45 |
for rtype in ('in_state', 'by_transition', 'from_state', 'to_state'): |
471554b842d2
[schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5224
diff
changeset
|
46 |
_pvs.tag_subject_of(('*', rtype, '*'), 'hidden') |
471554b842d2
[schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5224
diff
changeset
|
47 |
_pvs.tag_object_of(('*', rtype, '*'), 'hidden') |
471554b842d2
[schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5224
diff
changeset
|
48 |
_pvs.tag_object_of(('*', 'wf_info_for', '*'), 'hidden') |
3487
2e705d9fdaf1
[views] workflow primary view: do not show states and transitions in side boxes
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3350
diff
changeset
|
49 |
|
3262
12ffb1e95771
uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3228
diff
changeset
|
50 |
_abaa = uicfg.actionbox_appearsin_addmenu |
12ffb1e95771
uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3228
diff
changeset
|
51 |
_abaa.tag_subject_of(('BaseTransition', 'condition', 'RQLExpression'), False) |
12ffb1e95771
uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3228
diff
changeset
|
52 |
_abaa.tag_subject_of(('State', 'allowed_transition', 'BaseTransition'), False) |
12ffb1e95771
uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3228
diff
changeset
|
53 |
_abaa.tag_object_of(('SubWorkflowExitPoint', 'destination_state', 'State'), |
12ffb1e95771
uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3228
diff
changeset
|
54 |
False) |
4995
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
55 |
_abaa.tag_subject_of(('*', 'wf_info_for', '*'), False) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
56 |
_abaa.tag_object_of(('*', 'wf_info_for', '*'), False) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
57 |
|
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
58 |
_abaa.tag_object_of(('*', 'state_of', 'CWEType'), True) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
59 |
_abaa.tag_object_of(('*', 'transition_of', 'CWEType'), True) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
60 |
_abaa.tag_subject_of(('Transition', 'destination_state', '*'), True) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
61 |
_abaa.tag_object_of(('*', 'allowed_transition', 'Transition'), True) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
62 |
_abaa.tag_object_of(('*', 'destination_state', 'State'), True) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
63 |
_abaa.tag_subject_of(('State', 'allowed_transition', '*'), True) |
3306
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
64 |
_abaa.tag_object_of(('State', 'state_of', 'Workflow'), True) |
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
65 |
_abaa.tag_object_of(('Transition', 'transition_of', 'Workflow'), True) |
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
66 |
_abaa.tag_object_of(('WorkflowTransition', 'transition_of', 'Workflow'), True) |
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
67 |
|
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
68 |
_afs = uicfg.autoform_section |
7598
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
69 |
_affk = uicfg.autoform_field_kwargs |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
70 |
|
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
71 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
72 |
# IWorkflowable views ######################################################### |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
73 |
|
2920
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2726
diff
changeset
|
74 |
class ChangeStateForm(forms.CompositeEntityForm): |
6692
bbc3f7c9f8d9
[change state form] set domid to avoid data conflict with other (eg edition) form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6690
diff
changeset
|
75 |
# set dom id to ensure there is no conflict with edition form (see |
bbc3f7c9f8d9
[change state form] set domid to avoid data conflict with other (eg edition) form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6690
diff
changeset
|
76 |
# session_key() implementation) |
bbc3f7c9f8d9
[change state form] set domid to avoid data conflict with other (eg edition) form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6690
diff
changeset
|
77 |
__regid__ = domid = 'changestate' |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
78 |
|
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
79 |
form_renderer_id = 'base' # don't want EntityFormRenderer |
3805
ad0b38e1a4eb
[web ui] rename form buttons to ok/cancel where workflow change state
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3513
diff
changeset
|
80 |
form_buttons = [fwdgs.SubmitButton(), |
11197
9f1c89e7426d
[web/views] stop using cwaction='cancel'
Julien Cristau <julien.cristau@logilab.fr>
parents:
11057
diff
changeset
|
81 |
fwdgs.Button(stdmsgs.BUTTON_CANCEL, |
9f1c89e7426d
[web/views] stop using cwaction='cancel'
Julien Cristau <julien.cristau@logilab.fr>
parents:
11057
diff
changeset
|
82 |
{'class': fwdgs.Button.css_class + ' cwjs-edition-cancel'})] |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
83 |
|
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
84 |
|
7403
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
85 |
class ChangeStateFormView(form.FormViewMixIn, EntityView): |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
86 |
__regid__ = 'statuschange' |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
87 |
title = _('status change') |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
88 |
__select__ = (one_line_rset() |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
89 |
& match_form_params('treid') |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
90 |
& adaptable('IWorkflowable')) |
0 | 91 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
92 |
def cell_call(self, row, col): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
93 |
entity = self.cw_rset.get_entity(row, col) |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
94 |
transition = self._cw.entity_from_eid(self._cw.form['treid']) |
3920
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
95 |
form = self.get_form(entity, transition) |
3998
94cc7cad3d2d
backport stable into default
Sylvain Thénault <sylvain.thenault@logilab.fr>
diff
changeset
|
96 |
self.w(u'<h4>%s %s</h4>\n' % (self._cw._(transition.name), |
1305
395ef7f2b95b
cleanup, remove some unnecessary (sometime buggy) stuff
sylvain.thenault@logilab.fr
parents:
1304
diff
changeset
|
97 |
entity.view('oneline'))) |
4780
58432e8e7dde
fix a Depression Warning
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
4646
diff
changeset
|
98 |
msg = self._cw._('status will change from %(st1)s to %(st2)s') % { |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
99 |
'st1': entity.cw_adapt_to('IWorkflowable').printable_state, |
4646
322c3dd96dd5
[workflow] finish refactoring introduced by 021035b9a7ab for 'go back' transition:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4436
diff
changeset
|
100 |
'st2': self._cw._(transition.destination(entity).name)} |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
101 |
self.w(u'<p>%s</p>\n' % msg) |
6690
7d68948015ba
[forms] remove some deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6473
diff
changeset
|
102 |
form.render(w=self.w) |
3920
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
103 |
|
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
104 |
def redirectpath(self, entity): |
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
105 |
return entity.rest_path() |
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
106 |
|
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
107 |
def get_form(self, entity, transition, **kwargs): |
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
108 |
# XXX used to specify both rset/row/col and entity in case implements |
7411
238da9684f99
cleanup and update some copyright
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7403
diff
changeset
|
109 |
# selector (and not is_instance) is used on custom form |
3998
94cc7cad3d2d
backport stable into default
Sylvain Thénault <sylvain.thenault@logilab.fr>
diff
changeset
|
110 |
form = self._cw.vreg['forms'].select( |
94cc7cad3d2d
backport stable into default
Sylvain Thénault <sylvain.thenault@logilab.fr>
diff
changeset
|
111 |
'changestate', self._cw, entity=entity, transition=transition, |
3920
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
112 |
redirect_path=self.redirectpath(entity), **kwargs) |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
113 |
trinfo = self._cw.vreg['etypes'].etype_class('TrInfo')(self._cw) |
10669
155c29e0ed1c
[py3k] use next builtin instead of next method
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10666
diff
changeset
|
114 |
trinfo.eid = next(self._cw.varmaker) |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
115 |
subform = self._cw.vreg['forms'].select('edition', self._cw, entity=trinfo, |
4159
6b2b20c73d59
refactor form field value handling, to get a nicer api and an easier algorithm to get field's value
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4090
diff
changeset
|
116 |
mainform=False) |
6b2b20c73d59
refactor form field value handling, to get a nicer api and an easier algorithm to get field's value
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4090
diff
changeset
|
117 |
subform.field_by_name('wf_info_for', 'subject').value = entity.eid |
6b2b20c73d59
refactor form field value handling, to get a nicer api and an easier algorithm to get field's value
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4090
diff
changeset
|
118 |
trfield = subform.field_by_name('by_transition', 'subject') |
6b2b20c73d59
refactor form field value handling, to get a nicer api and an easier algorithm to get field's value
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4090
diff
changeset
|
119 |
trfield.widget = fwdgs.HiddenInput() |
6b2b20c73d59
refactor form field value handling, to get a nicer api and an easier algorithm to get field's value
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4090
diff
changeset
|
120 |
trfield.value = transition.eid |
3513
c002f6488631
[form] replace is_subform by parent_form, carrying more information at the same cost
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3487
diff
changeset
|
121 |
form.add_subform(subform) |
3920
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
122 |
return form |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
123 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
124 |
|
2440
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
125 |
class WFHistoryView(EntityView): |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
126 |
__regid__ = 'wfhistory' |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
127 |
__select__ = (relation_possible('wf_info_for', role='object') |
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
128 |
& score_entity(lambda x: x.cw_adapt_to('IWorkflowable').workflow_history)) |
3998
94cc7cad3d2d
backport stable into default
Sylvain Thénault <sylvain.thenault@logilab.fr>
diff
changeset
|
129 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
130 |
title = _('Workflow history') |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
131 |
|
6473
2b09a410ff8e
[wf history] avoid title duplication
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6456
diff
changeset
|
132 |
def cell_call(self, row, col, view=None, title=title): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
133 |
_ = self._cw._ |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
134 |
eid = self.cw_rset[row][col] |
8050
0f3a54c37b05
[table view, workflow] fix the display of wf history table (closes: #2065652)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7992
diff
changeset
|
135 |
sel = 'Any FS,TS,C,D' |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
136 |
rql = ' ORDERBY D DESC WHERE WF wf_info_for X,'\ |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
137 |
'WF from_state FS, WF to_state TS, WF comment C,'\ |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
138 |
'WF creation_date D' |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
139 |
if self._cw.vreg.schema.eschema('CWUser').has_perm(self._cw, 'read'): |
8050
0f3a54c37b05
[table view, workflow] fix the display of wf history table (closes: #2065652)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7992
diff
changeset
|
140 |
sel += ',U,WF' |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
141 |
rql += ', WF owned_by U?' |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
142 |
headers = (_('from_state'), _('to_state'), _('comment'), _('date'), |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
143 |
_('CWUser')) |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
144 |
else: |
8050
0f3a54c37b05
[table view, workflow] fix the display of wf history table (closes: #2065652)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7992
diff
changeset
|
145 |
sel += ',WF' |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
146 |
headers = (_('from_state'), _('to_state'), _('comment'), _('date')) |
11851
002007272a76
[views/optimization] Prefetch state'names and comment format in wfhistory component
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11767
diff
changeset
|
147 |
sel += ',FSN,TSN,CF' |
002007272a76
[views/optimization] Prefetch state'names and comment format in wfhistory component
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11767
diff
changeset
|
148 |
rql = '%s %s, FS name FSN, TS name TSN, WF comment_format CF, X eid %%(x)s' % (sel, rql) |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
149 |
try: |
5174
78438ad513ca
#759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
150 |
rset = self._cw.execute(rql, {'x': eid}) |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
151 |
except Unauthorized: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
152 |
return |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
153 |
if rset: |
6473
2b09a410ff8e
[wf history] avoid title duplication
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6456
diff
changeset
|
154 |
if title: |
7992
4ff9f25cb06e
[table views] closes #1986413: refactor TableView, EntityAttributesTableView, PyValTableView
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7988
diff
changeset
|
155 |
self.w(u'<h2>%s</h2>\n' % _(title)) |
8050
0f3a54c37b05
[table view, workflow] fix the display of wf history table (closes: #2065652)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7992
diff
changeset
|
156 |
self.wview('table', rset, headers=headers, |
0f3a54c37b05
[table view, workflow] fix the display of wf history table (closes: #2065652)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7992
diff
changeset
|
157 |
cellvids={2: 'editable-final'}) |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
158 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
159 |
|
6456
150246e77cda
[workflow] fix bw compat code
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6366
diff
changeset
|
160 |
class WFHistoryVComponent(component.EntityCtxComponent): |
2440
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
161 |
"""display the workflow history for entities supporting it""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
162 |
__regid__ = 'wfhistory' |
6456
150246e77cda
[workflow] fix bw compat code
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6366
diff
changeset
|
163 |
__select__ = component.EntityCtxComponent.__select__ & WFHistoryView.__select__ |
2440
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
164 |
context = 'navcontentbottom' |
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
165 |
title = _('Workflow history') |
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
166 |
|
6141
b8287e54b528
[web api] unify 'contentnav' (VComponent) and 'boxes' registries as 'ctxcomponents' (CtxComponent)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6103
diff
changeset
|
167 |
def render_body(self, w): |
10006
8391bf718485
remove most 3.10 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
9440
diff
changeset
|
168 |
self.entity.view('wfhistory', w=w, title=None) |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
169 |
|
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
170 |
|
7403
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
171 |
class InContextWithStateView(EntityView): |
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
172 |
"""display incontext view for an entity as well as its current state""" |
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
173 |
__regid__ = 'incontext-state' |
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
174 |
__select__ = adaptable('IWorkflowable') |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
175 |
|
7403
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
176 |
def entity_call(self, entity): |
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
177 |
iwf = entity.cw_adapt_to('IWorkflowable') |
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
178 |
self.w(u'%s [%s]' % (entity.view('incontext'), iwf.printable_state)) |
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
179 |
|
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
180 |
|
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
181 |
# workflow actions ############################################################# |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
182 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
183 |
class WorkflowActions(action.Action): |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
184 |
"""fill 'workflow' sub-menu of the actions box""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
185 |
__regid__ = 'workflow' |
12355
c703dc95c82e
Fix flake8 issues since release 3.6.0
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
12251
diff
changeset
|
186 |
__select__ = (action.Action.__select__ & one_line_rset() |
c703dc95c82e
Fix flake8 issues since release 3.6.0
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
12251
diff
changeset
|
187 |
& relation_possible('in_state')) |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
188 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
189 |
submenu = _('workflow') |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
190 |
order = 10 |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
191 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
192 |
def fill_menu(self, box, menu): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
193 |
entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0) |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
194 |
menu.label = u'%s: %s' % (self._cw._('state'), |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
195 |
entity.cw_adapt_to('IWorkflowable').printable_state) |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
196 |
menu.append_anyway = True |
3228
7b05b2709439
[actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
197 |
super(WorkflowActions, self).fill_menu(box, menu) |
7b05b2709439
[actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
198 |
|
7b05b2709439
[actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
199 |
def actual_actions(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
200 |
entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0) |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
201 |
iworkflowable = entity.cw_adapt_to('IWorkflowable') |
3228
7b05b2709439
[actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
202 |
hastr = False |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
203 |
for tr in iworkflowable.possible_transitions(): |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
204 |
url = entity.absolute_url(vid='statuschange', treid=tr.eid) |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
205 |
yield self.build_action(self._cw._(tr.name), url) |
3228
7b05b2709439
[actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
206 |
hastr = True |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
207 |
# don't propose to see wf if user can't pass any transition |
3228
7b05b2709439
[actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
208 |
if hastr: |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
209 |
wfurl = iworkflowable.current_workflow.absolute_url() |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
210 |
yield self.build_action(self._cw._('view workflow'), wfurl) |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
211 |
if iworkflowable.workflow_history: |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
212 |
wfurl = entity.absolute_url(vid='wfhistory') |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
213 |
yield self.build_action(self._cw._('view history'), wfurl) |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
214 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
215 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
216 |
# workflow entity types views ################################################## |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
217 |
|
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
218 |
_pvs = uicfg.primaryview_section |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
219 |
_pvs.tag_subject_of(('Workflow', 'initial_state', '*'), 'hidden') |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
220 |
_pvs.tag_object_of(('*', 'state_of', 'Workflow'), 'hidden') |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
221 |
_pvs.tag_object_of(('*', 'transition_of', 'Workflow'), 'hidden') |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
222 |
_pvs.tag_object_of(('*', 'default_workflow', 'Workflow'), 'hidden') |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
223 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
224 |
_abaa = uicfg.actionbox_appearsin_addmenu |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
225 |
_abaa.tag_subject_of(('BaseTransition', 'condition', 'RQLExpression'), False) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
226 |
_abaa.tag_subject_of(('State', 'allowed_transition', 'BaseTransition'), False) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
227 |
_abaa.tag_object_of(('SubWorkflowExitPoint', 'destination_state', 'State'), |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
228 |
False) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
229 |
_abaa.tag_object_of(('State', 'state_of', 'Workflow'), True) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
230 |
_abaa.tag_object_of(('BaseTransition', 'transition_of', 'Workflow'), False) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
231 |
_abaa.tag_object_of(('Transition', 'transition_of', 'Workflow'), True) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
232 |
_abaa.tag_object_of(('WorkflowTransition', 'transition_of', 'Workflow'), True) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
233 |
|
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
234 |
|
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
235 |
class WorkflowPrimaryView(TabbedPrimaryView): |
5877
0c7b7b76a84f
[selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5752
diff
changeset
|
236 |
__select__ = is_instance('Workflow') |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
237 |
tabs = [_('wf_tab_info'), _('wfgraph')] |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
238 |
default_tab = 'wf_tab_info' |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
239 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
240 |
|
7403
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
241 |
class StateInContextView(EntityView): |
795
63f4f81e19f1
restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
728
diff
changeset
|
242 |
"""convenience trick, State's incontext view should not be clickable""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
243 |
__regid__ = 'incontext' |
5877
0c7b7b76a84f
[selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5752
diff
changeset
|
244 |
__select__ = is_instance('State') |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
245 |
|
795
63f4f81e19f1
restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
728
diff
changeset
|
246 |
def cell_call(self, row, col): |
3460
e4843535db25
[api] some more _cw / __regid__, automatic tests now pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3451
diff
changeset
|
247 |
self.w(xml_escape(self._cw.view('textincontext', self.cw_rset, |
e4843535db25
[api] some more _cw / __regid__, automatic tests now pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3451
diff
changeset
|
248 |
row=row, col=col))) |
795
63f4f81e19f1
restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
728
diff
changeset
|
249 |
|
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
250 |
|
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
251 |
class WorkflowTabTextView(PrimaryTab): |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
252 |
__regid__ = 'wf_tab_info' |
5877
0c7b7b76a84f
[selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5752
diff
changeset
|
253 |
__select__ = PrimaryTab.__select__ & one_line_rset() & is_instance('Workflow') |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
254 |
|
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
255 |
def render_entity_attributes(self, entity): |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
256 |
_ = self._cw._ |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
257 |
self.w(u'<div>%s</div>' % (entity.printable_value('description'))) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
258 |
self.w(u'<span>%s%s</span>' % (_("workflow_of").capitalize(), _(" :"))) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
259 |
html = [] |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
260 |
for e in entity.workflow_of: |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
261 |
view = e.view('outofcontext') |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
262 |
if entity.eid == e.default_workflow[0].eid: |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
263 |
view += u' <span>[%s]</span>' % _('default_workflow') |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
264 |
html.append(view) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
265 |
self.w(', '.join(v for v in html)) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
266 |
self.w(u'<h2>%s</h2>' % _("Transition_plural")) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
267 |
rset = self._cw.execute( |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
268 |
'Any T,T,DS,T,TT ORDERBY TN WHERE T transition_of WF, WF eid %(x)s,' |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
269 |
'T type TT, T name TN, T destination_state DS?', {'x': entity.eid}) |
7992
4ff9f25cb06e
[table views] closes #1986413: refactor TableView, EntityAttributesTableView, PyValTableView
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7988
diff
changeset
|
270 |
self.wview('table', rset, 'null', |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
271 |
cellvids={1: 'trfromstates', 2: 'outofcontext', 3: 'trsecurity'}, |
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
272 |
headers=(_('Transition'), _('from_state'), |
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
273 |
_('to_state'), _('permissions'), _('type'))) |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
274 |
|
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
275 |
|
7403
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
276 |
class TransitionSecurityTextView(EntityView): |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
277 |
__regid__ = 'trsecurity' |
5877
0c7b7b76a84f
[selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5752
diff
changeset
|
278 |
__select__ = is_instance('Transition') |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
279 |
|
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
280 |
def cell_call(self, row, col): |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
281 |
_ = self._cw._ |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
282 |
entity = self.cw_rset.get_entity(self.cw_row, self.cw_col) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
283 |
if entity.require_group: |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
284 |
self.w(u'<div>%s%s %s</div>' % |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
285 |
(_('groups'), _(" :"), |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
286 |
u', '.join((g.view('incontext') for g |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
287 |
in entity.require_group)))) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
288 |
if entity.condition: |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
289 |
self.w(u'<div>%s%s %s</div>' % |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
290 |
(_('conditions'), _(" :"), |
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
291 |
u'<br/>'.join((e.dc_title() for e in entity.condition)))) |
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
292 |
|
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
293 |
|
7403
344aa07dd0f2
[workflow] new 'incontext-state' view for IWorkflowable entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6763
diff
changeset
|
294 |
class TransitionAllowedTextView(EntityView): |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
295 |
__regid__ = 'trfromstates' |
5877
0c7b7b76a84f
[selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5752
diff
changeset
|
296 |
__select__ = is_instance('Transition') |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
297 |
|
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
298 |
def cell_call(self, row, col): |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
299 |
entity = self.cw_rset.get_entity(self.cw_row, self.cw_col) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
300 |
self.w(u', '.join((e.view('outofcontext') for e |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
301 |
in entity.reverse_allowed_transition))) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
302 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
303 |
|
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
304 |
# workflow entity types edition ################################################ |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
305 |
|
7598
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
306 |
def _wf_items_for_relation(req, wfeid, wfrelation, field): |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
307 |
wf = req.entity_from_eid(wfeid) |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
308 |
rschema = req.vreg.schema[field.name] |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
309 |
param = 'toeid' if field.role == 'subject' else 'fromeid' |
12567
26744ad37953
Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
12503
diff
changeset
|
310 |
return sorted((e.view('combobox'), str(e.eid)) |
7598
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
311 |
for e in getattr(wf, 'reverse_%s' % wfrelation) |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
312 |
if rschema.has_perm(req, 'add', **{param: e.eid})) |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
313 |
|
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
314 |
|
7598
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
315 |
# TrInfo |
4004
c52619c738a5
api renaming update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
3998
diff
changeset
|
316 |
_afs.tag_subject_of(('TrInfo', 'to_state', '*'), 'main', 'hidden') |
c52619c738a5
api renaming update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
3998
diff
changeset
|
317 |
_afs.tag_subject_of(('TrInfo', 'from_state', '*'), 'main', 'hidden') |
7598
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
318 |
_afs.tag_attribute(('TrInfo', 'tr_count'), 'main', 'hidden') |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
319 |
|
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
320 |
|
7598
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
321 |
# BaseTransition |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
322 |
# XXX * allowed_transition BaseTransition |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
323 |
# XXX BaseTransition destination_state * |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
324 |
|
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
325 |
def transition_states_vocabulary(form, field): |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
326 |
entity = form.edited_entity |
8482
0044a29ea118
[workflow ui] fix state/transition edition form on existing entity. Closes #2423531
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8216
diff
changeset
|
327 |
if entity.has_eid(): |
0044a29ea118
[workflow ui] fix state/transition edition form on existing entity. Closes #2423531
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8216
diff
changeset
|
328 |
wfeid = entity.transition_of[0].eid |
0044a29ea118
[workflow ui] fix state/transition edition form on existing entity. Closes #2423531
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8216
diff
changeset
|
329 |
else: |
7875
65e460690139
[form, entity]Â refactor '__linkto', now handled by the entity form, not the entity itself. Closes #1931543
Florent Cayré <florent.cayre@gmail.com>
parents:
7598
diff
changeset
|
330 |
eids = form.linked_to.get(('transition_of', 'subject')) |
7598
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
331 |
if not eids: |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
332 |
return [] |
8482
0044a29ea118
[workflow ui] fix state/transition edition form on existing entity. Closes #2423531
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8216
diff
changeset
|
333 |
wfeid = eids[0] |
0044a29ea118
[workflow ui] fix state/transition edition form on existing entity. Closes #2423531
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8216
diff
changeset
|
334 |
return _wf_items_for_relation(form._cw, wfeid, 'state_of', field) |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
335 |
|
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
336 |
|
7598
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
337 |
_afs.tag_subject_of(('*', 'destination_state', '*'), 'main', 'attributes') |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
338 |
_affk.tag_subject_of(('*', 'destination_state', '*'), |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
339 |
{'choices': transition_states_vocabulary}) |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
340 |
_afs.tag_object_of(('*', 'allowed_transition', '*'), 'main', 'attributes') |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
341 |
_affk.tag_object_of(('*', 'allowed_transition', '*'), |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
342 |
{'choices': transition_states_vocabulary}) |
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
343 |
|
7598
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
344 |
|
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
345 |
# State |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
346 |
|
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
347 |
def state_transitions_vocabulary(form, field): |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
348 |
entity = form.edited_entity |
8482
0044a29ea118
[workflow ui] fix state/transition edition form on existing entity. Closes #2423531
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8216
diff
changeset
|
349 |
if entity.has_eid(): |
0044a29ea118
[workflow ui] fix state/transition edition form on existing entity. Closes #2423531
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8216
diff
changeset
|
350 |
wfeid = entity.state_of[0].eid |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
351 |
else: |
7875
65e460690139
[form, entity]Â refactor '__linkto', now handled by the entity form, not the entity itself. Closes #1931543
Florent Cayré <florent.cayre@gmail.com>
parents:
7598
diff
changeset
|
352 |
eids = form.linked_to.get(('state_of', 'subject')) |
8482
0044a29ea118
[workflow ui] fix state/transition edition form on existing entity. Closes #2423531
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8216
diff
changeset
|
353 |
if not eids: |
0044a29ea118
[workflow ui] fix state/transition edition form on existing entity. Closes #2423531
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8216
diff
changeset
|
354 |
return [] |
0044a29ea118
[workflow ui] fix state/transition edition form on existing entity. Closes #2423531
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8216
diff
changeset
|
355 |
wfeid = eids[0] |
0044a29ea118
[workflow ui] fix state/transition edition form on existing entity. Closes #2423531
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8216
diff
changeset
|
356 |
return _wf_items_for_relation(form._cw, wfeid, 'transition_of', field) |
7598
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
357 |
|
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
358 |
|
7598
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
359 |
_afs.tag_subject_of(('State', 'allowed_transition', '*'), 'main', 'attributes') |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
360 |
_affk.tag_subject_of(('State', 'allowed_transition', '*'), |
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
361 |
{'choices': state_transitions_vocabulary}) |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
362 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
363 |
|
7598
781def950a85
[worklow forms] rewrite remaining pre 3.10 form code using uicfg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7411
diff
changeset
|
364 |
# adaptaters ################################################################### |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
365 |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
366 |
class WorkflowIBreadCrumbsAdapter(ibreadcrumbs.IBreadCrumbsAdapter): |
5877
0c7b7b76a84f
[selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5752
diff
changeset
|
367 |
__select__ = is_instance('Workflow') |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
368 |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
369 |
# XXX what if workflow of multiple types? |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
370 |
def parent_entity(self): |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
371 |
return self.entity.workflow_of and self.entity.workflow_of[0] or None |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
372 |
|
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
373 |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
374 |
class WorkflowItemIBreadCrumbsAdapter(ibreadcrumbs.IBreadCrumbsAdapter): |
5877
0c7b7b76a84f
[selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5752
diff
changeset
|
375 |
__select__ = is_instance('BaseTransition', 'State') |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
376 |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
377 |
def parent_entity(self): |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
378 |
return self.entity.workflow |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
379 |
|
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
380 |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
381 |
class TransitionItemIBreadCrumbsAdapter(ibreadcrumbs.IBreadCrumbsAdapter): |
5877
0c7b7b76a84f
[selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5752
diff
changeset
|
382 |
__select__ = is_instance('SubWorkflowExitPoint') |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
383 |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
384 |
def parent_entity(self): |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
385 |
return self.entity.reverse_subworkflow_exit[0] |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
386 |
|
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
387 |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
388 |
class TrInfoIBreadCrumbsAdapter(ibreadcrumbs.IBreadCrumbsAdapter): |
5877
0c7b7b76a84f
[selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5752
diff
changeset
|
389 |
__select__ = is_instance('TrInfo') |
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
390 |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
391 |
def parent_entity(self): |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
392 |
return self.entity.for_entity |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
393 |
|
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
394 |
|
3215
bf30ab5ba6ee
fix workflow graph views and tabs for the new wf system, remove useless view and action (actually useless since introduction of tabbed entity type view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
395 |
# workflow images ############################################################## |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
396 |
|
6093
9001a74fcc82
more generic dot graph generator
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
5877
diff
changeset
|
397 |
class WorkflowDotPropsHandler(DotPropsHandler): |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
398 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
399 |
def node_properties(self, stateortransition): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
400 |
"""return default DOT drawing options for a state or transition""" |
6093
9001a74fcc82
more generic dot graph generator
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
5877
diff
changeset
|
401 |
props = super(WorkflowDotPropsHandler, self).node_properties(stateortransition) |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
402 |
if hasattr(stateortransition, 'state_of'): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
403 |
props['shape'] = 'box' |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
404 |
props['style'] = 'filled' |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
405 |
if stateortransition.reverse_initial_state: |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
406 |
props['fillcolor'] = '#88CC88' |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
407 |
else: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
408 |
props['shape'] = 'ellipse' |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
409 |
return props |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
410 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
411 |
|
6103 | 412 |
class WorkflowVisitor(object): |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
413 |
def __init__(self, entity): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
414 |
self.entity = entity |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
415 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
416 |
def nodes(self): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
417 |
for state in self.entity.reverse_state_of: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
418 |
state.complete() |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
419 |
yield state.eid, state |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
420 |
for transition in self.entity.reverse_transition_of: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
421 |
transition.complete() |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
422 |
yield transition.eid, transition |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
423 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
424 |
def edges(self): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
425 |
for transition in self.entity.reverse_transition_of: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
426 |
for incomingstate in transition.reverse_allowed_transition: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
427 |
yield incomingstate.eid, transition.eid, transition |
4646
322c3dd96dd5
[workflow] finish refactoring introduced by 021035b9a7ab for 'go back' transition:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4436
diff
changeset
|
428 |
for outgoingstate in transition.potential_destinations(): |
322c3dd96dd5
[workflow] finish refactoring introduced by 021035b9a7ab for 'go back' transition:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4436
diff
changeset
|
429 |
yield transition.eid, outgoingstate.eid, transition |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
430 |
|
12210
3fa6c9ef2f51
[cleanup] Fix some flake8 errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11851
diff
changeset
|
431 |
|
6093
9001a74fcc82
more generic dot graph generator
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
5877
diff
changeset
|
432 |
class WorkflowGraphView(DotGraphView): |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
433 |
__regid__ = 'wfgraph' |
5877
0c7b7b76a84f
[selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5752
diff
changeset
|
434 |
__select__ = EntityView.__select__ & one_line_rset() & is_instance('Workflow') |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
435 |
|
6093
9001a74fcc82
more generic dot graph generator
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
5877
diff
changeset
|
436 |
def build_visitor(self, entity): |
9001a74fcc82
more generic dot graph generator
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
5877
diff
changeset
|
437 |
return WorkflowVisitor(entity) |
9001a74fcc82
more generic dot graph generator
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
5877
diff
changeset
|
438 |
|
9001a74fcc82
more generic dot graph generator
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
5877
diff
changeset
|
439 |
def build_dotpropshandler(self): |
6103 | 440 |
return WorkflowDotPropsHandler(self._cw) |