diff --git a/bode/bode/models/task/actions.py b/bode/bode/models/task/actions.py
index e2bc79f..06812cb 100644
--- a/bode/bode/models/task/actions.py
+++ b/bode/bode/models/task/actions.py
@@ -32,6 +32,9 @@ def edit_task(task_id, **task_data):
def is_interchangable_relation(relation):
return relation.type == RelationType.Interchangable.value and str(relation.first_task_id) == task_id
+ def is_subtask_relation(relation):
+ return relation.type == RelationType.Subtask.value and str(relation.first_task_id) == task_id
+
task = get_task(task_id)
for key, value in task_data.items():
@@ -47,12 +50,16 @@ def is_interchangable_relation(relation):
if related_task.status != TaskStatus.TODO.value:
continue
inter_task_data = {
- "title": related_task.title,
- "description": related_task.description,
- "due_date": related_task.due_date,
"status": TaskStatus.INDIRECTLY_DONE.value,
}
edit_task(str(related_task.id), **inter_task_data)
+ if is_subtask_relation(relation):
+ if related_task.status == TaskStatus.DONE.value:
+ continue
+ subtask_data = {
+ "status": TaskStatus.DONE.value,
+ }
+ edit_task(str(related_task.id), **subtask_data)
return task
diff --git a/bode/bode/resources/tasks/schemas.py b/bode/bode/resources/tasks/schemas.py
index 7e67c71..df2fb41 100644
--- a/bode/bode/resources/tasks/schemas.py
+++ b/bode/bode/resources/tasks/schemas.py
@@ -33,7 +33,7 @@ class TaskSchema(BaseSchema):
due_date = fields.DateTime()
status = fields.String(validate=validate.OneOf(TaskStatus.list()))
rrule = fields.String()
- is_blocked = fields.Function(lambda task: task.status != TaskStatus.DONE.value and is_task_blocked(task.id))
+ is_blocked = fields.Function(lambda task: is_task_blocked(task.id))
tags = fields.List(fields.Nested(TagSchema))
relation_types = fields.List(fields.String(validate=validate.OneOf(DirectedRelationType.list())))
diff --git a/cabra/src/assets/indirectly_done_icon.svg b/cabra/src/assets/indirectly_done_icon.svg
new file mode 100644
index 0000000..de1a165
--- /dev/null
+++ b/cabra/src/assets/indirectly_done_icon.svg
@@ -0,0 +1,23 @@
+
+
+
\ No newline at end of file
diff --git a/cabra/src/pages/components/CheckBox.tsx b/cabra/src/pages/components/CheckBox.tsx
index a48779e..1a058b0 100644
--- a/cabra/src/pages/components/CheckBox.tsx
+++ b/cabra/src/pages/components/CheckBox.tsx
@@ -2,7 +2,7 @@ import tw, { TwStyle, styled } from "twin.macro";
import CheckboxBlankIcon from "remixicon-react/CheckboxBlankCircleLineIcon";
import CheckboxCheckedIcon from "remixicon-react/CheckboxCircleLineIcon";
-import CheckboxMultiIcon from "remixicon-react/CheckboxMultipleLineIcon";
+import CheckboxIndirectlyDoneIcon from "../../assets/indirectly_done_icon.svg";
import DisabledIcon from "remixicon-react/IndeterminateCircleLineIcon";
import { InputHTMLAttributes } from "react";
import ReactTooltip from "react-tooltip";
@@ -14,6 +14,7 @@ type Props = Omit<
> & {
id: string;
status: TaskStatus;
+ blocked: boolean;
size?: Size;
};
type Size = "sm" | "base" | "lg";
@@ -31,7 +32,7 @@ const iconSizes: Record