From 66878a9d5f62747c725eea27a6d0c0ee586b203b Mon Sep 17 00:00:00 2001 From: Vincent Fretin Date: Fri, 11 Oct 2013 15:06:15 +0200 Subject: [PATCH] fix ObjectWillBeRemovedEvent task subscriber --- src/collective/task/subscribers.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/collective/task/subscribers.py b/src/collective/task/subscribers.py index 1bd636c..af130e2 100644 --- a/src/collective/task/subscribers.py +++ b/src/collective/task/subscribers.py @@ -1,7 +1,7 @@ from five import grok -from zope.lifecycleevent.interfaces import IObjectRemovedEvent,\ - IObjectAddedEvent, IObjectModifiedEvent +from OFS.interfaces import IObjectWillBeRemovedEvent +from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent from zope.container.contained import ContainerModifiedEvent from plone import api @@ -40,16 +40,29 @@ def task_changed_state(context, event): parent.reindexObject(idxs=['review_state']) -@grok.subscribe(ITask, IObjectRemovedEvent) +@grok.subscribe(ITask, IObjectWillBeRemovedEvent) def reopen_parent_task(context, event): """When a task is deleted, reopen its parent task """ parent = context.getParentNode() parent_state = api.content.get_state(parent) if parent.portal_type == 'task' and parent_state == 'attributed': - with api.env.adopt_roles(['Reviewer']): - api.content.transition(obj=parent, transition='subtask-abandoned') - parent.reindexObject(idxs=['review_state']) + state = api.content.get_state(context) + if state == 'todo': + with api.env.adopt_roles(['Reviewer']): + api.content.transition(obj=context, transition='abandon') + context.reindexObject(idxs=['review_state']) + elif state == 'refusal-requested': + with api.env.adopt_roles(['Reviewer']): + api.content.transition(obj=context, transition='accept-refusal') + context.reindexObject(idxs=['review_state']) + elif state == 'in-progress': + with api.env.adopt_roles(['Editor']): + api.content.transition(obj=context, transition='ask-for-refusal') + context.reindexObject(idxs=['review_state']) + with api.env.adopt_roles(['Reviewer']): + api.content.transition(obj=context, transition='accept-refusal') + context.reindexObject(idxs=['review_state']) @grok.subscribe(IBaseTask, IObjectAddedEvent)