Skip to content

Commit

Permalink
fix(redo): recalculate deadline after updating a redo work item to ready
Browse files Browse the repository at this point in the history
  • Loading branch information
anehx committed Aug 30, 2022
1 parent db7370b commit f803fbe
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 16 deletions.
8 changes: 1 addition & 7 deletions caluma/caluma_workflow/domain_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,12 +180,8 @@ def post_complete(
)

if all_siblings_complete:
redo_work_items = work_item.case.work_items.filter(
task__in=next_tasks, status=models.WorkItem.STATUS_REDO
)

created_work_items = utils.create_work_items(
next_tasks.exclude(pk__in=redo_work_items.values("task")),
next_tasks,
case,
user,
work_item,
Expand All @@ -201,8 +197,6 @@ def post_complete(
context=context,
)

redo_work_items.update(status=models.WorkItem.STATUS_READY)

if (
not next_tasks.exists()
and not work_item.case.work_items.filter(
Expand Down
32 changes: 23 additions & 9 deletions caluma/caluma_workflow/tests/test_work_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -1578,7 +1578,11 @@ def redo_test_setup(
task_flow_factory,
admin_user,
):
tasks = task_factory.create_batch(5, type=models.Task.TYPE_SIMPLE)
tasks = task_factory.create_batch(
5,
type=models.Task.TYPE_SIMPLE,
lead_time=86400, # 1 day
)

workflow.start_tasks.add(tasks[0])

Expand All @@ -1602,13 +1606,15 @@ def redo_test_setup(
return task_flow, case, tasks, work_item_to_be_redone


@pytest.mark.freeze_time("2022-08-30")
@pytest.mark.parametrize("use_graphql", [False, True])
def test_redo_work_item(
db,
redo_test_setup,
schema_executor,
admin_user,
use_graphql,
freezer,
):
task_flow, case, tasks, work_item_to_be_redone = redo_test_setup

Expand All @@ -1635,20 +1641,28 @@ def test_redo_work_item(
api.redo_work_item(work_item=work_item_to_be_redone, user=admin_user)

assert case.work_items.get(task=tasks[0]).status == models.WorkItem.STATUS_READY
assert case.work_items.get(task=tasks[1]).status == models.WorkItem.STATUS_REDO
assert case.work_items.get(task=tasks[2]).status == models.WorkItem.STATUS_REDO
assert case.work_items.get(task=tasks[3]).status == models.WorkItem.STATUS_REDO
assert case.work_items.get(task=tasks[4]).status == models.WorkItem.STATUS_REDO

for task in tasks[1:]:
work_item = case.work_items.get(task=task)
assert work_item.status == models.WorkItem.STATUS_REDO
assert work_item.deadline.date().isoformat() == "2022-08-31"

freezer.move_to("2022-09-12")

api.complete_work_item(
work_item=case.work_items.get(task=tasks[0]), user=admin_user
)

assert case.work_items.get(task=tasks[0]).status == models.WorkItem.STATUS_COMPLETED
assert case.work_items.get(task=tasks[1]).status == models.WorkItem.STATUS_READY
assert case.work_items.get(task=tasks[2]).status == models.WorkItem.STATUS_READY
assert case.work_items.get(task=tasks[3]).status == models.WorkItem.STATUS_REDO
assert case.work_items.get(task=tasks[4]).status == models.WorkItem.STATUS_REDO

for task in tasks[1:3]:
work_item = case.work_items.get(task=task)
assert work_item.status == models.WorkItem.STATUS_READY
assert work_item.deadline.date().isoformat() == "2022-09-13"

for task in tasks[3:5]:
work_item = case.work_items.get(task=task)
assert work_item.status == models.WorkItem.STATUS_REDO


@pytest.mark.parametrize("use_graphql", [False, True])
Expand Down
19 changes: 19 additions & 0 deletions caluma/caluma_workflow/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,25 @@ def create_work_items(tasks, case, user, prev_work_item=None, context: dict = No
# work item already exists, do not create a new one
continue

work_items_to_redo = models.WorkItem.objects.filter(
addressed_groups=groups,
controlling_groups=controlling_groups,
task_id=task.pk,
case=case,
status=models.WorkItem.STATUS_REDO,
)

if work_items_to_redo.exists():
# there is already an existing work item in status redo that
# needs to be reopened instead of creating a new one.
work_items_to_redo.update(
deadline=task.calculate_deadline(),
modified_by_user=user.username,
modified_by_group=user.username,
status=models.WorkItem.STATUS_READY,
)
continue

work_items.append(
models.WorkItem.objects.create(
addressed_groups=groups,
Expand Down

0 comments on commit f803fbe

Please sign in to comment.