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: