diff --git a/app/modules/project/router.py b/app/modules/project/router.py index 0a5075e..3dbb671 100644 --- a/app/modules/project/router.py +++ b/app/modules/project/router.py @@ -205,6 +205,31 @@ def _fmt_date_kr(d: str | None) -> str: return dd.strftime("%m/%d") + f"({_WEEKDAYS_KR[dd.weekday()]})" +def _group_my_tasks(my_tasks: list[dict[str, Any]]) -> list[dict[str, Any]]: + """담당 업무를 프로젝트별로 묶고, "내 업무" 패널에 표시할 전체/진행/완료 + 개수를 함께 센다(홈 화면·프로젝트 화면 양쪽에서 재사용).""" + groups: dict[int, dict[str, Any]] = {} + for t in my_tasks: + pid = t.get("project_id") + g = groups.get(pid) + if g is None: + g = { + "id": pid, + "name": t.get("project_name") or "프로젝트", + "color": t.get("project_color") or "#4573d2", + "tasks": [], + } + groups[pid] = g + g["tasks"].append(t) + for g in groups.values(): + total = len(g["tasks"]) + done = sum(1 for t in g["tasks"] if t.get("completed_at")) + g["total"] = total + g["done"] = done + g["open"] = total - done + return list(groups.values()) + + def _build_tree(projects: list[dict[str, Any]]) -> list[dict[str, Any]]: """평면 프로젝트 목록 → parent_id 기준 트리(children 키).""" by_id: dict[int, dict[str, Any]] = {} @@ -426,21 +451,8 @@ async def index(request: Request) -> HTMLResponse: for t in my_tasks: t["start_label"] = _fmt_date_kr(t.get("start_date")) t["due_label"] = _fmt_date_kr(t.get("due_date")) - # 내 업무를 프로젝트별로 묶어 트리로 표시 - my_groups: dict[int, dict[str, Any]] = {} - for t in my_tasks: - pid = t.get("project_id") - g = my_groups.get(pid) - if g is None: - g = { - "id": pid, - "name": t.get("project_name") or "프로젝트", - "color": t.get("project_color") or "#4573d2", - "tasks": [], - } - my_groups[pid] = g - g["tasks"].append(t) - my_projects = list(my_groups.values()) + # 내 업무를 프로젝트별로 묶어 트리로 표시(전체/진행/완료 개수 포함) + my_projects = _group_my_tasks(my_tasks) # 홈 화면 카드/내업무에 노출된 업무 전체(id→업무) — 클릭 시 페이지 이동 없이 # 팝업으로 편집하기 위해 필요한 원본 데이터를 그대로 클라이언트에 넘긴다. @@ -567,20 +579,7 @@ async def project_page(request: Request, project_id: int) -> HTMLResponse: for t in my_tasks: t["start_label"] = _fmt_date_kr(t.get("start_date")) t["due_label"] = _fmt_date_kr(t.get("due_date")) - my_groups: dict[int, dict[str, Any]] = {} - for t in my_tasks: - pid = t.get("project_id") - g = my_groups.get(pid) - if g is None: - g = { - "id": pid, - "name": t.get("project_name") or "프로젝트", - "color": t.get("project_color") or "#4573d2", - "tasks": [], - } - my_groups[pid] = g - g["tasks"].append(t) - my_projects = list(my_groups.values()) + my_projects = _group_my_tasks(my_tasks) # 달력(휴가식 월간 그리드) — ?y=&m= 로 월 이동, 기본 이번 달 today = today_kst() diff --git a/app/modules/project/templates/project/inbox.html b/app/modules/project/templates/project/inbox.html index 07f83b1..7715b85 100644 --- a/app/modules/project/templates/project/inbox.html +++ b/app/modules/project/templates/project/inbox.html @@ -1,7 +1,7 @@ {% extends "erp_base.html" %} {% block head_extra %} - + {% endblock %} @@ -45,5 +45,5 @@ {% endif %} - + {% endblock %} diff --git a/app/modules/project/templates/project/index.html b/app/modules/project/templates/project/index.html index eb4ea4d..2948e8a 100644 --- a/app/modules/project/templates/project/index.html +++ b/app/modules/project/templates/project/index.html @@ -1,7 +1,7 @@ {% extends "erp_base.html" %} {% block head_extra %} - + {% endblock %} @@ -165,6 +165,11 @@ {{ p.name }} + + 전체{{ p.total }} + 진행{{ p.open }} + 완료{{ p.done }} +