# HG changeset patch # User Sylvain Thénault # Date 1251196717 -7200 # Node ID d8c5ad14ab8e86c36579256d14a9dd849fac0cae # Parent 6dd4f4a3ff2a503621869dc01939fcd7845f3c49 [wf] distinguish main workflow / current workflow diff -r 6dd4f4a3ff2a -r d8c5ad14ab8e entities/wfobjs.py --- a/entities/wfobjs.py Tue Aug 25 12:36:23 2009 +0200 +++ b/entities/wfobjs.py Tue Aug 25 12:38:37 2009 +0200 @@ -291,13 +291,18 @@ __implements__ = (IWorkflowable,) @property - def current_workflow(self): + def main_workflow(self): """return current workflow applied to this entity""" if self.custom_workflow: return self.custom_workflow[0] return self.cwetype_workflow() @property + def current_workflow(self): + """return current workflow applied to this entity""" + return self.current_state.workflow + + @property def current_state(self): """return current state entity""" return self.in_state and self.in_state[0] or None diff -r 6dd4f4a3ff2a -r d8c5ad14ab8e server/hooks.py --- a/server/hooks.py Tue Aug 25 12:36:23 2009 +0200 +++ b/server/hooks.py Tue Aug 25 12:38:37 2009 +0200 @@ -440,7 +440,11 @@ raise ValidationError(entity.eid, {'wf_info_for': msg}) forentity = session.entity_from_eid(foreid) # then check it has a workflow set - wf = forentity.current_workflow + if session.transaction_data.get((forentity.eid, 'customwf')): + wfeid = session.transaction_data[(forentity.eid, 'customwf')] + wf = session.entity_from_eid(wfeid) + else: + wf = forentity.current_workflow if wf is None: msg = session._('related entity has no workflow set') raise ValidationError(entity.eid, {None: msg}) @@ -503,8 +507,8 @@ # use the initial state as a default state pendingeids = session.transaction_data.get('pendingeids', ()) if not entity.eid in pendingeids and not entity.in_state and \ - entity.current_workflow: - state = entity.current_workflow.initial + entity.main_workflow: + state = entity.main_workflow.initial if state: # use super session to by-pass security checks session.super_session.add_relation(entity.eid, 'in_state', @@ -524,14 +528,15 @@ if self.eid in pendingeids: return entity = session.entity_from_eid(self.eid) - # notice that enforcment that new workflow apply to the entity's type is - # done by schema rule, no need to check it here - if entity.current_workflow.eid == self.wfeid: - deststate = entity.current_workflow.initial + # check custom workflow has not been rechanged to another one in the same + # transaction + mainwf = entity.main_workflow + if mainwf.eid == self.wfeid: + deststate = mainwf.initial if not deststate: msg = session._('workflow has no initial state') raise ValidationError(entity.eid, {'custom_workflow': msg}) - if entity.current_workflow.state_by_eid(entity.current_state.eid): + if mainwf.state_by_eid(entity.current_state.eid): # nothing to do return # if there are no history, simply go to new workflow's initial state @@ -541,8 +546,9 @@ entity.current_state.eid, deststate.eid) return msg = session._('workflow changed to "%s"') - msg %= entity.current_workflow.name - entity.change_state(deststate.name, msg) + msg %= session._(mainwf.name) + session.transaction_data[(entity.eid, 'customwf')] = self.wfeid + entity.change_state(deststate, msg) def set_custom_workflow(session, eidfrom, rtype, eidto):