fix: properly generate milestone_code and task/support/meeting codes

This commit is contained in:
Zhi
2026-03-12 23:18:20 +00:00
parent a1a99bb838
commit 41d92c5e68

View File

@@ -547,8 +547,10 @@ def create_task(project_code: str, milestone_id: int, task_data: dict, db: Sessi
if ms.status and hasattr(ms.status, "value") and ms.status.value == "progressing":
raise HTTPException(status_code=400, detail="Cannot add items to a milestone that is in_progress")
max_task = db.query(Task).filter(Task.project_id == project.id).order_by(Task.id.desc()).first()
next_id = (max_task.id + 1) if max_task else 1
# Generate task_code: milestoneCode:T{i:05x}
milestone_code = ms.milestone_code or f"m{ms.id}"
max_task = db.query(Task).filter(Task.milestone_id == ms.id).order_by(Task.id.desc()).first()
next_num = (max_task.id + 1) if max_task else 1
task_code = f"{milestone_code}:T{next_num:05x}"
est_time = None
@@ -695,6 +697,12 @@ def create_support(project_code: str, milestone_id: int, support_data: dict, db:
if ms.status and hasattr(ms.status, "value") and ms.status.value == "progressing":
raise HTTPException(status_code=400, detail="Cannot add items to a milestone that is in_progress")
# Generate support_code: milestoneCode:S{i:05x}
milestone_code = ms.milestone_code or f"m{ms.id}"
max_support = db.query(Support).filter(Support.milestone_id == milestone_id).order_by(Support.id.desc()).first()
next_num = (max_support.id + 1) if max_support else 1
support_code = f"{milestone_code}:S{next_num:05x}"
support = Support(
title=support_data.get("title"),
description=support_data.get("description"),
@@ -703,6 +711,7 @@ def create_support(project_code: str, milestone_id: int, support_data: dict, db:
project_id=project.id,
milestone_id=milestone_id,
reporter_id=current_user.id,
support_code=support_code,
)
db.add(support)
db.commit()
@@ -750,6 +759,12 @@ def create_meeting(project_code: str, milestone_id: int, meeting_data: dict, db:
if ms.status and hasattr(ms.status, "value") and ms.status.value == "progressing":
raise HTTPException(status_code=400, detail="Cannot add items to a milestone that is in_progress")
# Generate meeting_code: milestoneCode:M{i:05x}
milestone_code = ms.milestone_code or f"m{ms.id}"
max_meeting = db.query(Meeting).filter(Meeting.milestone_id == milestone_id).order_by(Meeting.id.desc()).first()
next_num = (max_meeting.id + 1) if max_meeting else 1
meeting_code = f"{milestone_code}:M{next_num:05x}"
scheduled_at = None
if meeting_data.get("scheduled_at"):
try:
@@ -765,6 +780,7 @@ def create_meeting(project_code: str, milestone_id: int, meeting_data: dict, db:
project_id=project.id,
milestone_id=milestone_id,
reporter_id=current_user.id,
meeting_code=meeting_code,
scheduled_at=scheduled_at,
duration_minutes=meeting_data.get("duration_minutes"),
)