Skip to content

Commit 8652627

Browse files
committed
Implement error handling when autoclose is not possible
1 parent fa03215 commit 8652627

7 files changed

Lines changed: 79 additions & 5 deletions

File tree

opengever/api/tests/test_dossier_workflow.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,3 +283,39 @@ def test_resolve_dossier_auto_close_tasks(self, browser):
283283
self.assert_state('task-state-cancelled', open_task)
284284
self.assert_state('task-state-tested-and-closed', in_progress_task)
285285
self.assert_state('task-state-tested-and-closed', resolved_task)
286+
287+
@browsing
288+
def test_resolve_dossier_auto_close_tasks_raises_error_if_auto_close_is_not_possible(self, browser):
289+
self.login(self.secretariat_user, browser)
290+
291+
# A private task cannot be closed by the secretarian user.
292+
# The api should raise an error in this case.
293+
create(
294+
Builder('task')
295+
.within(self.resolvable_dossier)
296+
.in_state('task-state-open')
297+
.titled(u'Task 1')
298+
.having(
299+
issuer=self.regular_user.id,
300+
responsible=self.regular_user.id,
301+
responsible_client='fa',
302+
is_private=True,
303+
)
304+
)
305+
306+
with browser.expect_http_error(code=400):
307+
self.api_transition(
308+
self.resolvable_dossier,
309+
'dossier-transition-resolve',
310+
browser,
311+
data=json.dumps({"auto_close_tasks": True})
312+
)
313+
314+
self.assertEqual(
315+
{
316+
u'error': {
317+
u'errors': [u'Auto-close tasks is not possible. Please close the tasks manually.'],
318+
u'type': u'AutoCloseTasksNotPossible'
319+
}
320+
},
321+
browser.json)

opengever/api/transition.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from opengever.dossier.deactivate import DossierDeactivator
77
from opengever.dossier.reactivate import Reactivator
88
from opengever.dossier.resolve import AlreadyBeingResolved
9+
from opengever.dossier.resolve import AutoCloseTasksNotPossible
910
from opengever.dossier.resolve import InvalidDates
1011
from opengever.dossier.resolve import LockingResolveManager
1112
from opengever.dossier.resolve import MSG_ALREADY_BEING_RESOLVED
@@ -212,6 +213,12 @@ def reply(self):
212213
type='AlreadyBeingResolved',
213214
message=msg))
214215

216+
except AutoCloseTasksNotPossible as e:
217+
self.request.response.setStatus(400)
218+
return dict(error=dict(
219+
type='AutoCloseTasksNotPossible',
220+
errors=[self.translate(e.message)]))
221+
215222
except BadRequest as e:
216223
self.request.response.setStatus(400)
217224
return dict(error=dict(

opengever/dossier/locales/de/LC_MESSAGES/opengever.dossier.po

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
msgid ""
22
msgstr ""
33
"Project-Id-Version: 1.0\n"
4-
"POT-Creation-Date: 2025-03-24 10:10+0000\n"
4+
"POT-Creation-Date: 2025-06-24 08:51+0000\n"
55
"PO-Revision-Date: 2017-05-23 04:53+0000\n"
66
"Last-Translator: Jacqueline Sposato <jacqueline.sposato@gmail.com>\n"
77
"Language-Team: German <https://translations.onegovgever.ch/projects/onegov-gever/opengever-dossier/de/>\n"
@@ -269,6 +269,11 @@ msgstr "Alle"
269269
msgid "any_role"
270270
msgstr "Alle"
271271

272+
#. Default: "Auto-close tasks is not possible. Please close the tasks manually."
273+
#: ./opengever/dossier/resolve.py
274+
msgid "auto_close_tasks_not_possible"
275+
msgstr "Die Aufgaben konnten nicht automatisch geschlossen werden. Bitte schliessen Sie die Aufgaben manuell."
276+
272277
#. Default: "Add"
273278
#: ./opengever/dossier/browser/forms.py
274279
msgid "button_add"

opengever/dossier/locales/en/LC_MESSAGES/opengever.dossier.po

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
msgid ""
22
msgstr ""
33
"Project-Id-Version: 1.0\n"
4-
"POT-Creation-Date: 2025-03-24 10:10+0000\n"
4+
"POT-Creation-Date: 2025-06-24 08:51+0000\n"
55
"PO-Revision-Date: 2017-05-23 04:53+0000\n"
66
"Last-Translator: Jacqueline Sposato <jacqueline.sposato@gmail.com>\n"
77
"Language-Team: German <https://translations.onegovgever.ch/projects/onegov-gever/opengever-dossier/de/>\n"
@@ -336,6 +336,11 @@ msgstr "Any participant"
336336
msgid "any_role"
337337
msgstr "Any role"
338338

339+
#. Default: "Auto-close tasks is not possible. Please close the tasks manually."
340+
#: ./opengever/dossier/resolve.py
341+
msgid "auto_close_tasks_not_possible"
342+
msgstr "Auto-close tasks is not possible. Please close the tasks manually."
343+
339344
#. German translation: Erstellen
340345
#. Default: "Add"
341346
#: ./opengever/dossier/browser/forms.py

opengever/dossier/locales/fr/LC_MESSAGES/opengever.dossier.po

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
msgid ""
22
msgstr ""
33
"Project-Id-Version: PACKAGE VERSION\n"
4-
"POT-Creation-Date: 2025-03-24 10:10+0000\n"
4+
"POT-Creation-Date: 2025-06-24 08:51+0000\n"
55
"PO-Revision-Date: 2017-12-03 11:16+0000\n"
66
"Last-Translator: Jacqueline Sposato <jacqueline.sposato@gmail.com>\n"
77
"Language-Team: French <https://translations.onegovgever.ch/projects/onegov-gever/opengever-dossier/fr/>\n"
@@ -267,6 +267,11 @@ msgstr "Tous"
267267
msgid "any_role"
268268
msgstr "Tous"
269269

270+
#. Default: "Auto-close tasks is not possible. Please close the tasks manually."
271+
#: ./opengever/dossier/resolve.py
272+
msgid "auto_close_tasks_not_possible"
273+
msgstr "La fermeture automatique des tâches n'est pas possible. Veuillez clôturer les tâches manuellement."
274+
270275
#. Default: "Add"
271276
#: ./opengever/dossier/browser/forms.py
272277
msgid "button_add"

opengever/dossier/locales/opengever.dossier.pot

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
msgid ""
55
msgstr ""
66
"Project-Id-Version: PACKAGE VERSION\n"
7-
"POT-Creation-Date: 2025-03-24 10:10+0000\n"
7+
"POT-Creation-Date: 2025-06-24 08:51+0000\n"
88
"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
99
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1010
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -268,6 +268,11 @@ msgstr ""
268268
msgid "any_role"
269269
msgstr ""
270270

271+
#. Default: "Auto-close tasks is not possible. Please close the tasks manually."
272+
#: ./opengever/dossier/resolve.py
273+
msgid "auto_close_tasks_not_possible"
274+
msgstr ""
275+
271276
#. Default: "Add"
272277
#: ./opengever/dossier/browser/forms.py
273278
msgid "button_add"

opengever/dossier/resolve.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from opengever.dossier.statusmessage_mixin import DossierResolutionStatusmessageMixin
2020
from opengever.task.task import ITask
2121
from plone import api
22+
from plone.api.exc import InvalidParameterError
2223
from Products.CMFCore.Expression import createExprContext
2324
from Products.CMFCore.Expression import Expression
2425
from Products.CMFCore.utils import getToolByName
@@ -64,6 +65,11 @@ def __init__(self, invalid_dossier_titles):
6465
self.invalid_dossier_titles = invalid_dossier_titles
6566

6667

68+
class AutoCloseTasksNotPossible(Exception):
69+
"""Could not auto close the tasks. Please do it manually.
70+
"""
71+
72+
6773
def get_resolver(dossier):
6874
"""Return the currently configured dossier-resolver."""
6975

@@ -196,7 +202,12 @@ def _auto_close_tasks(self, tasks):
196202
"""Auto-close all pending tasks."""
197203
for brain in tasks:
198204
task = brain.getObject()
199-
task.force_finish_task()
205+
try:
206+
task.force_finish_task()
207+
except InvalidParameterError:
208+
raise AutoCloseTasksNotPossible(
209+
_('auto_close_tasks_not_possible',
210+
default=u'Auto-close tasks is not possible. Please close the tasks manually.'))
200211

201212
def _get_pending_tasks(self):
202213
"""Get all pending tasks in dossier."""

0 commit comments

Comments
 (0)