web/views/workflow.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Tue, 29 Sep 2009 15:58:44 +0200
changeset 3524 a3431f4e2f40
parent 3503 06bced8edddf
parent 3513 c002f6488631
child 3659 993997b4b41d
permissions -rw-r--r--
backport stable branch
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
     1
"""workflow views:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
     2
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
     3
* IWorkflowable views and forms
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
     4
* workflow entities views (State, Transition, TrInfo)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     5
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     6
:organization: Logilab
1977
606923dff11b big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1739
diff changeset
     7
:copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     8
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
1977
606923dff11b big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1739
diff changeset
     9
:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    10
"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    11
__docformat__ = "restructuredtext en"
1739
78b0819162a8 final rtag api
sylvain.thenault@logilab.fr
parents: 1721
diff changeset
    12
_ = unicode
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    13
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2005
diff changeset
    14
from logilab.mtconverter import xml_escape
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    15
from logilab.common.graph import escape, GraphGenerator, DotBackend
822
e3d8db01f3f5 test_views fixes
sylvain.thenault@logilab.fr
parents: 795
diff changeset
    16
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    17
from cubicweb import Unauthorized, view
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
    18
from cubicweb.selectors import (implements, has_related_entities, one_line_rset,
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    19
                                relation_possible, match_form_params)
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    20
from cubicweb.interfaces import IWorkflowable
2438
576f4d51f826 [cleanup] fix deprecation warnings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2381
diff changeset
    21
from cubicweb.view import EntityView
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
    22
from cubicweb.schema import display_name
3262
12ffb1e95771 uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3228
diff changeset
    23
from cubicweb.web import uicfg, stdmsgs, action, component, form, action
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2726
diff changeset
    24
from cubicweb.web import formfields as ff, formwidgets as fwdgs
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
    25
from cubicweb.web.views import TmpFileViewMixin, forms, primary
1151
b20677336ee6 turn old __rtags__ the new way
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    26
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
    27
_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
    28
_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
    29
_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
    30
_pvs.tag_object_of(('*', 'transition_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
    31
3262
12ffb1e95771 uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3228
diff changeset
    32
_abaa = uicfg.actionbox_appearsin_addmenu
12ffb1e95771 uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3228
diff changeset
    33
_abaa.tag_subject_of(('BaseTransition', 'condition', 'RQLExpression'), False)
12ffb1e95771 uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3228
diff changeset
    34
_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
    35
_abaa.tag_object_of(('SubWorkflowExitPoint', 'destination_state', 'State'),
12ffb1e95771 uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3228
diff changeset
    36
                    False)
3306
bf50dc056edd [wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3304
diff changeset
    37
_abaa.tag_object_of(('State', 'state_of', 'Workflow'), True)
bf50dc056edd [wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3304
diff changeset
    38
_abaa.tag_object_of(('Transition', 'transition_of', 'Workflow'), True)
bf50dc056edd [wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3304
diff changeset
    39
_abaa.tag_object_of(('WorkflowTransition', 'transition_of', 'Workflow'), True)
bf50dc056edd [wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3304
diff changeset
    40
bf50dc056edd [wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3304
diff changeset
    41
_afs = uicfg.autoform_section
bf50dc056edd [wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3304
diff changeset
    42
_afs.tag_subject_of(('TrInfo', 'to_state', '*'), 'generated')
bf50dc056edd [wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3304
diff changeset
    43
_afs.tag_subject_of(('TrInfo', 'from_state', '*'), 'generated')
bf50dc056edd [wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3304
diff changeset
    44
_afs.tag_object_of(('State', 'allowed_transition', '*'), 'primary')
bf50dc056edd [wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3304
diff changeset
    45
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    46
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    47
# IWorkflowable views #########################################################
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    48
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2726
diff changeset
    49
class ChangeStateForm(forms.CompositeEntityForm):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
    50
    __regid__ = 'changestate'
1504
c6051f141807 register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    51
1995
ec95eaa2b711 turn renderers into appobjects
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    52
    form_renderer_id = 'base' # don't want EntityFormRenderer
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2726
diff changeset
    53
    form_buttons = [fwdgs.SubmitButton(stdmsgs.YES),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2726
diff changeset
    54
                    fwdgs.Button(stdmsgs.NO, cwaction='cancel')]
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    55
1504
c6051f141807 register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    56
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2726
diff changeset
    57
class ChangeStateFormView(form.FormViewMixIn, view.EntityView):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
    58
    __regid__ = 'statuschange'
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    59
    title = _('status change')
3335
3c035436ca65 statuschange form view only works w/ one entity, fix selector accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3307
diff changeset
    60
    __select__ = (one_line_rset() & implements(IWorkflowable)
3c035436ca65 statuschange form view only works w/ one entity, fix selector accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3307
diff changeset
    61
                  & match_form_params('treid'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    62
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    63
    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
    64
        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
    65
        transition = self._cw.entity_from_eid(self._cw.form['treid'])
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    66
        dest = transition.destination()
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    67
        _ = self._cw._
3339
d1d643ef37f7 fix argument given to changestate form selection
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3335
diff changeset
    68
        # specify both rset/row/col and entity in case implements selector (and
d1d643ef37f7 fix argument given to changestate form selection
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3335
diff changeset
    69
        # not entity_implements) is used on custom form
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    70
        form = self._cw.vreg['forms'].select(
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    71
            'changestate', self._cw, rset=self.cw_rset, row=row, col=col,
3350
fa77640a9155 since we have the transition entity, give it directly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3339
diff changeset
    72
            entity=entity, transition=transition,
3339
d1d643ef37f7 fix argument given to changestate form selection
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3335
diff changeset
    73
            redirect_path=self.redirectpath(entity))
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    74
        self.w(form.error_message())
1305
395ef7f2b95b cleanup, remove some unnecessary (sometime buggy) stuff
sylvain.thenault@logilab.fr
parents: 1304
diff changeset
    75
        self.w(u'<h4>%s %s</h4>\n' % (_(transition.name),
395ef7f2b95b cleanup, remove some unnecessary (sometime buggy) stuff
sylvain.thenault@logilab.fr
parents: 1304
diff changeset
    76
                                      entity.view('oneline')))
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    77
        msg = _('status will change from %(st1)s to %(st2)s') % {
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2726
diff changeset
    78
            'st1': _(entity.current_state.name),
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    79
            'st2': _(dest.name)}
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    80
        self.w(u'<p>%s</p>\n' % msg)
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    81
        trinfo = self._cw.vreg['etypes'].etype_class('TrInfo')(self._cw)
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    82
        trinfo.eid = self._cw.varmaker.next()
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    83
        subform = self._cw.vreg['forms'].select('edition', self._cw, entity=trinfo,
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2726
diff changeset
    84
                                            mainform=False)
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2726
diff changeset
    85
        subform.field_by_name('by_transition').widget = fwdgs.HiddenInput()
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
    86
        form.add_subform(subform)
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2726
diff changeset
    87
        self.w(form.form_render(wf_info_for=entity.eid,
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2726
diff changeset
    88
                                by_transition=transition.eid))
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    89
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    90
    def redirectpath(self, entity):
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    91
        return entity.rest_path()
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    92
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    93
2440
8e6b83e3b6b5 #343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2438
diff changeset
    94
class WFHistoryView(EntityView):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
    95
    __regid__ = 'wfhistory'
2440
8e6b83e3b6b5 #343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2438
diff changeset
    96
    __select__ = relation_possible('wf_info_for', role='object')
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    97
    title = _('Workflow history')
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    98
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
    99
    def cell_call(self, row, col, view=None):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   100
        _ = self._cw._
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   101
        eid = self.cw_rset[row][col]
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   102
        sel = 'Any FS,TS,WF,D'
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   103
        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
   104
              '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
   105
              '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
   106
        if self._cw.vreg.schema.eschema('CWUser').has_perm(self._cw, 'read'):
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   107
            sel += ',U,C'
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   108
            rql += ', WF owned_by U?'
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   109
            displaycols = range(5)
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   110
            headers = (_('from_state'), _('to_state'), _('comment'), _('date'),
1504
c6051f141807 register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   111
                       _('CWUser'))
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   112
        else:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   113
            sel += ',C'
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   114
            displaycols = range(4)
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   115
            headers = (_('from_state'), _('to_state'), _('comment'), _('date'))
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   116
        rql = '%s %s, X eid %%(x)s' % (sel, rql)
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   117
        try:
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   118
            rset = self._cw.execute(rql, {'x': eid}, 'x')
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   119
        except Unauthorized:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   120
            return
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   121
        if rset:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   122
            self.wview('table', rset, title=_(self.title), displayactions=False,
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   123
                       displaycols=displaycols, headers=headers)
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   124
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   125
2440
8e6b83e3b6b5 #343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2438
diff changeset
   126
class WFHistoryVComponent(component.EntityVComponent):
8e6b83e3b6b5 #343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2438
diff changeset
   127
    """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
   128
    __regid__ = 'wfhistory'
2440
8e6b83e3b6b5 #343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2438
diff changeset
   129
    __select__ = WFHistoryView.__select__ & component.EntityVComponent.__select__
8e6b83e3b6b5 #343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2438
diff changeset
   130
    context = 'navcontentbottom'
8e6b83e3b6b5 #343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2438
diff changeset
   131
    title = _('Workflow history')
8e6b83e3b6b5 #343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2438
diff changeset
   132
8e6b83e3b6b5 #343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2438
diff changeset
   133
    def cell_call(self, row, col, view=None):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   134
        self.wview('wfhistory', self.cw_rset, row=row, col=col, view=view)
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   135
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   136
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   137
# workflow actions #############################################################
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   138
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   139
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
   140
    """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
   141
    __regid__ = 'workflow'
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   142
    __select__ = (action.Action.__select__ & one_line_rset() &
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   143
                  relation_possible('in_state'))
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   144
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   145
    submenu = _('workflow')
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   146
    order = 10
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   147
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   148
    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
   149
        entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0)
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   150
        menu.label = u'%s: %s' % (self._cw._('state'), entity.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
   151
        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
   152
        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
   153
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
   154
    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
   155
        entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0)
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
   156
        hastr = False
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   157
        for tr in entity.possible_transitions():
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   158
            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
   159
            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
   160
            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
   161
        # 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
   162
        if hastr:
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   163
            wfurl = entity.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
   164
            yield self.build_action(self._cw._('view workflow'), wfurl)
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   165
        if entity.workflow_history:
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   166
            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
   167
            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
   168
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   169
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3216
diff changeset
   170
# workflow entity types views ##################################################
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   171
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   172
class CellView(view.EntityView):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
   173
    __regid__ = 'cell'
728
a95b284150d1 first pass to use __select__ instead of __selectors__
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 688
diff changeset
   174
    __select__ = implements('TrInfo')
1504
c6051f141807 register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   175
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   176
    def cell_call(self, row, col, cellvid=None):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   177
        self.w(self.cw_rset.get_entity(row, col).view('reledit', rtype='comment'))
795
63f4f81e19f1 restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 728
diff changeset
   178
63f4f81e19f1 restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 728
diff changeset
   179
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   180
class StateInContextView(view.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
   181
    """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
   182
    __regid__ = 'incontext'
795
63f4f81e19f1 restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 728
diff changeset
   183
    __select__ = implements('State')
1504
c6051f141807 register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   184
795
63f4f81e19f1 restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 728
diff changeset
   185
    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
   186
        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
   187
                                        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
   188
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   189
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
   190
class WorkflowPrimaryView(primary.PrimaryView):
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
   191
    __select__ = implements('Workflow')
1504
c6051f141807 register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   192
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
   193
    def render_entity_attributes(self, entity):
3220
11b6016e3970 cleanup, futur warning fixes :)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3219
diff changeset
   194
        self.w(entity.view('reledit', rtype='description'))
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
   195
        self.w(u'<img src="%s" alt="%s"/>' % (
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
   196
            xml_escape(entity.absolute_url(vid='wfgraph')),
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   197
            xml_escape(self._cw._('graphical workflow for %s') % entity.name)))
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   198
1504
c6051f141807 register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   199
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
   200
# workflow images ##############################################################
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   201
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   202
class WorkflowDotPropsHandler(object):
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   203
    def __init__(self, req):
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   204
        self._ = req._
1504
c6051f141807 register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   205
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   206
    def node_properties(self, stateortransition):
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   207
        """return default DOT drawing options for a state or transition"""
3304
2b18276b21ab [ui] translate state/tr names in wf image
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3262
diff changeset
   208
        props = {'label': stateortransition.printable_value('name'),
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   209
                 'fontname': 'Courier'}
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   210
        if hasattr(stateortransition, 'state_of'):
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   211
            props['shape'] = 'box'
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   212
            props['style'] = 'filled'
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   213
            if stateortransition.reverse_initial_state:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   214
                props['color'] = '#88CC88'
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   215
        else:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   216
            props['shape'] = 'ellipse'
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   217
            descr = []
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   218
            tr = stateortransition
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   219
            if tr.require_group:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   220
                descr.append('%s %s'% (
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   221
                    self._('groups:'),
3307
d1230b89d887 [wf graph] translate group names as well
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3306
diff changeset
   222
                    ','.join(g.printable_value('name') for g in tr.require_group)))
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   223
            if tr.condition:
3216
4a006fce6023 [wf graph] fix display of condition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3215
diff changeset
   224
                descr.append('%s %s'% (
4a006fce6023 [wf graph] fix display of condition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3215
diff changeset
   225
                    self._('condition:'),
4a006fce6023 [wf graph] fix display of condition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3215
diff changeset
   226
                    ' | '.join(e.expression for e in tr.condition)))
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   227
            if descr:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   228
                props['label'] += escape('\n'.join(descr))
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   229
        return props
1504
c6051f141807 register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   230
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   231
    def edge_properties(self, transition, fromstate, tostate):
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   232
        return {'label': '', 'dir': 'forward',
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   233
                'color': 'black', 'style': 'filled'}
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   234
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   235
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   236
class WorkflowVisitor:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   237
    def __init__(self, entity):
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   238
        self.entity = entity
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   239
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   240
    def nodes(self):
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   241
        for state in self.entity.reverse_state_of:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   242
            state.complete()
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   243
            yield state.eid, state
1504
c6051f141807 register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   244
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   245
        for transition in self.entity.reverse_transition_of:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   246
            transition.complete()
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   247
            yield transition.eid, transition
1504
c6051f141807 register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   248
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   249
    def edges(self):
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   250
        for transition in self.entity.reverse_transition_of:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   251
            for incomingstate in transition.reverse_allowed_transition:
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   252
                yield incomingstate.eid, transition.eid, transition
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   253
            yield transition.eid, transition.destination().eid, transition
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   254
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   255
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
   256
class WorkflowImageView(TmpFileViewMixin, view.EntityView):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
   257
    __regid__ = 'wfgraph'
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
   258
    __select__ = implements('Workflow')
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   259
    content_type = 'image/png'
1504
c6051f141807 register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   260
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   261
    def _generate(self, tmpfile):
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   262
        """display schema information for an entity"""
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   263
        entity = self.cw_rset.get_entity(self.cw_row, self.cw_col)
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   264
        visitor = WorkflowVisitor(entity)
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   265
        prophdlr = WorkflowDotPropsHandler(self._cw)
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   266
        generator = GraphGenerator(DotBackend('workflow', 'LR',
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   267
                                              ratio='compress', size='30,12'))
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   268
        return generator.generate(visitor, prophdlr, tmpfile)
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 984
diff changeset
   269