From 7e935f0378a2a781baff95d711c4f38b8686b9b8 Mon Sep 17 00:00:00 2001 From: king Date: Tue, 15 Sep 2026 22:51:42 +0900 Subject: [PATCH] =?UTF-8?q?fix(project):=20=EC=99=84=EB=A3=8C=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C=20=ED=9B=84=20=EC=A0=80=EC=9E=A5=ED=95=98=EB=A9=B4=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C=EA=B0=80=20=ED=92=80=EB=A6=AC=EB=8D=98=20?= =?UTF-8?q?=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 업무 편집 모달의 "저장"은 항상 현재 stage_id를 그대로 다시 보내는데, update_task가 stage_id가 payload에 있기만 하면(값이 그대로여도) 완료단계 여부를 재판정해 완료를 리셋했다 — "완료로 표시" 직후 저장하면 취소선이 안 보이던 원인. 실제로 stage_id가 바뀐 경우에만 완료/재오픈 판정하도록 수정. Co-Authored-By: Claude Sonnet 5 --- app/modules/project/db.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/app/modules/project/db.py b/app/modules/project/db.py index 36d138d..0ed8283 100644 --- a/app/modules/project/db.py +++ b/app/modules/project/db.py @@ -536,18 +536,22 @@ class ProjectStore: sets.append("assignee_name = %s") params.append(store.norm_str(fields["assignee_name"])) - # 단계 변경 → 완료단계 진입 시 completed_at 자동 세팅 + # 단계 변경 → 완료단계 진입 시 completed_at 자동 세팅. 단, 실제로 단계가 + # 바뀐 경우에만 판정한다 — 업무 편집 모달의 "저장"은 매번 현재 stage_id + # 를 그대로 다시 보내는데, 여기서 무조건 판정하면 방금 "완료로 표시"로 + # 켠 completed_at 을(단계는 그대로인데) 다시 꺼버리는 버그가 있었다. if "stage_id" in fields: new_stage = fields["stage_id"] sets.append("stage_id = %s") params.append(new_stage) - done = self._stage_is_done(new_stage) - if done and not prev.get("completed_at"): - sets.append("completed_at = %s") - params.append(now_kst()) - newly_completed = True - elif not done and prev.get("completed_at"): - sets.append("completed_at = NULL") + if new_stage != prev.get("stage_id"): + done = self._stage_is_done(new_stage) + if done and not prev.get("completed_at"): + sets.append("completed_at = %s") + params.append(now_kst()) + newly_completed = True + elif not done and prev.get("completed_at"): + sets.append("completed_at = NULL") # 직접 완료 토글 — 하위 업무는 세션(칸반 컬럼)이 없어 위 자동 세팅이 # 적용되지 않는다. "stage_id" 를 같이 보냈으면 그쪽 판정이 우선한다. elif "completed" in fields: