Skip to content

Commit 2010182

Browse files
authored
Merge pull request #8163 from 4teamwork/es/TI-2432-task-abort-workflow
Disallow to cancel tasks which are synced between multiple admin units.
2 parents ff27f23 + 817acb9 commit 2010182

3 files changed

Lines changed: 45 additions & 0 deletions

File tree

changes/TI-2432.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Disallow to cancel tasks which are synced between multiple admin units. [elioschmutz]

opengever/task/browser/transitioncontroller.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,11 +303,15 @@ def open_to_cancelled_guard(self, c, include_agency):
303303
def progress_to_cancelled_guard(self, c, include_agency):
304304
"""Checks if:
305305
- The task is generated from tasktemplate and its the main task
306+
- Task is not a predecessor or a successor
306307
- The current user is the issuer
307308
"""
308309
if self.context.is_from_tasktemplate:
309310
return not ITask.providedBy(aq_parent(self.context))
310311

312+
if c.task.has_successors or (c.task.is_successor and not c.task.is_forwarding_successor):
313+
return False
314+
311315
if include_agency:
312316
return (c.current_user.is_issuer
313317
or c.current_user.in_issuing_orgunits_inbox_group

opengever/task/tests/test_transitioncontroller.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
from ftw.builder import Builder
2+
from ftw.builder import create
13
from ftw.testbrowser import browsing
24
from opengever.base.role_assignments import RoleAssignmentManager
35
from opengever.base.role_assignments import SharingRoleAssignment
6+
from opengever.task.browser.accept.utils import accept_task_with_successor
47
from opengever.task.browser.transitioncontroller import TaskTransitionController
58
from opengever.tasktemplates.interfaces import IFromTasktemplateGenerated
69
from opengever.testing import IntegrationTestCase
@@ -255,6 +258,43 @@ def test_only_available_for_tasktemplate_process_main_tasks(self):
255258
self.assertNotIn(
256259
self.transition, self.get_workflow_transitions_for(self.subtask))
257260

261+
@browsing
262+
def test_not_available_for_predecessor_and_successor(self, browser):
263+
self.login(self.dossier_responsible, browser)
264+
predecessor = create(
265+
Builder('task')
266+
.within(self.dossier)
267+
.having(issuer=self.dossier_responsible.id,
268+
responsible=self.regular_user.id,
269+
responsible_client='rk',
270+
task_type='correction')
271+
.in_state('task-state-open')
272+
.titled(u'Inquiry from a concerned citizen'))
273+
274+
sql_task = predecessor.get_sql_object()
275+
with self.login(self.regular_user):
276+
successor = accept_task_with_successor(
277+
self.dossier,
278+
'plone:%s' % sql_task.int_id,
279+
u'I accept this task',
280+
)
281+
282+
self.assertNotIn(self.transition, self.get_workflow_transitions_for(predecessor))
283+
self.assertNotIn(self.transition, self.get_workflow_transitions_for(successor))
284+
285+
@browsing
286+
def test_available_for_forwarding_successor(self, browser):
287+
self.login(self.secretariat_user, browser)
288+
forwarding_successor = create(
289+
Builder('task')
290+
.within(self.dossier)
291+
.having(issuer=self.secretariat_user.id,
292+
responsible=self.regular_user.id,
293+
responsible_client='rk',
294+
task_type='correction')
295+
.in_state('task-state-in-progress').successor_from(self.inbox_forwarding))
296+
self.assertIn(self.transition, self.get_workflow_transitions_for(forwarding_successor))
297+
258298

259299
class TestInProgressResolvedGuard(BaseTransitionGuardTests):
260300
transition = 'task-transition-in-progress-resolved'

0 commit comments

Comments
 (0)