feat(B01,B07): 표지 연도·기번·사업량을 사람이 넣는 자리 신설

표제란에 남아 있던 빈칸 중 연도·기번과 사업량은 프로그램이 지어낼 수 없는 값이라
입력 자리를 만든다. 값의 출처를 정하지 않고 받을 칸만 세운다.

DB (`012_title_block_inputs.sql`, ADD COLUMN·NULL 허용)
- `projects.project_number` — 표지 연도·기번(실무문서 폴더명 관행:
  `2024년 간선임도(기번3-울진.대흥)`)
- `projects.work_amount` — 표지 사업량. 단위·표기가 사업 종류마다 달라 자유 문자열.

B01 프로젝트 수정
- 수정 모달에 시행청·연도기번·사업량 3칸 추가. 011 로 만든 시행청도 여기서 처음 입력
  가능해짐(그전에는 스크립트로만 넣었음).
- 목록·단건 조회 4곳과 UPDATE 에 세 칸을 함께 실음. USER 권한은 다른 칸과 같이 잠금.

B07
- `_title_block_fields` 가 연도기번·사업량도 실어 보냄. 비어 있으면 종전대로 빈칸.

검증: `pytest tmp/tests/ -q` 139 passed / 0 failed(표지 값 1건 신규), 루트 `tsc --noEmit`
통과. 실사용자 경로 실측(5174) — 대시보드 wdw 행 [수정] 클릭 → 모달 라벨 9개에 새 3칸
확인 → 연도기번·사업량 입력 → [확인] 저장 → 표지 도면 Text 7개 **빈칸 0 · `{{` 잔존 0**,
화면에도 연도기번·`wdw 설계도`·위치·사업량·시행청이 모두 그려짐.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-02 10:28:25 +09:00
co-authored by Claude Opus 5
parent 07926e3867
commit 56aed2f2aa
6 changed files with 87 additions and 7 deletions
+18 -3
View File
@@ -122,7 +122,7 @@ async def _title_block_fields(project_id: UUID) -> dict[str, str]:
배정이 없으면 프로젝트 소유자로 떨어진다 — 혼자 쓰는 계정에서도 칸이 차게.
아직 못 채우는 자리와 이유:
- 축척(A1/A3)·사업량·연도기번 — 값을 지어내지 않는다(임의 수치 금지).
- 사업량·연도기번은 사람이 넣는 값이다(B01 프로젝트 수정 화면). 비어 있으면 빈칸.
- 설계일자 — "확정일"인데 도각은 **확정 전**에 그려져 저장본에 굳는다.
채울 시점 정의가 미결이라 비워 둔다.
- 도면번호 — 단건 조회가 목록 순서를 모른다(목록을 다시 만들면 도면을 열 때마다
@@ -132,7 +132,8 @@ async def _title_block_fields(project_id: UUID) -> dict[str, str]:
async with pool.acquire() as connection, connection.cursor() as cursor:
await cursor.execute(
"""
SELECT p.name, p.region, p.client_org, c.name, c.logo_path,
SELECT p.name, p.region, p.client_org, p.project_number, p.work_amount,
c.name, c.logo_path,
COALESCE(designer.name, owner.name),
COALESCE(designer.signature_path, owner.signature_path),
pm.name, lead.name
@@ -149,11 +150,25 @@ async def _title_block_fields(project_id: UUID) -> dict[str, str]:
row = await cursor.fetchone()
if not row:
return {}
name, region, client_org, company, logo_path, designer, signature_path, pm, lead = row
(
name,
region,
client_org,
project_number,
work_amount,
company,
logo_path,
designer,
signature_path,
pm,
lead,
) = row
fields = {
"공사명": name,
"위치": region,
"시행청": client_org,
"연도기번": project_number,
"사업량": work_amount,
"용역회사": company,
"설계자": designer,
"과업책임자": pm,