feat(B01,B07): 담당자 회사 구성원 지정 + 로고·서명 회사 공유 자산 모달
- B01 프로젝트 수정: 과업책임자·분야별책임자·설계자를 회사 구성원 목록(select)에서 지정. 회사 로고·설계자 서명 칸은 누르면 등록 목록 모달(선택·삭제·신규 추가 업로드). - 백엔드: `company_assets`(013) CRUD 라우트 신설 — 목록·업로드(Form+File, 2MB·확장자 검사)·수정·소프트 삭제·파일 서빙. `_scope_company` 로 SYSTEM_ADMIN 만 타 회사 지정, `_check_project_refs` 로 담당자·자산이 같은 회사·같은 종류인지 검사(400). - projects 조회·수정에 pm/field_lead/designer/logo_asset/signature_asset 5칸 합류. 중복 3곳을 `_project_rows` 로 묶어 700줄 제한 유지. - B07 표제란: 로고·서명 출처를 `companies.logo_path`/`users.signature_path` 에서 프로젝트가 고른 `company_assets` 로 전환(삭제된 자산은 그림째 제외). - 검증: pytest 143 통과(신규 4), tsc·ruff·prettier 통과. 공용 브라우저 사용자 경로 (업로드→선택→저장→재열기) 및 종단도 API 표제란 글자 4건·그림 2건 수치 확인. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -120,6 +120,9 @@ async def _title_block_fields(project_id: UUID) -> dict[str, str]:
|
||||
|
||||
사람 배정(과업책임자·분야별책임자·설계자)은 `projects`의 FK를 따라간다. 설계자는
|
||||
배정이 없으면 프로젝트 소유자로 떨어진다 — 혼자 쓰는 계정에서도 칸이 차게.
|
||||
로고·서명은 프로젝트가 회사 공유 자산(`company_assets`, 013)에서 고른 것만 싣는다 —
|
||||
안 골랐거나 자산이 지워졌으면 그림째 빠진다. 011 의 `companies.logo_path` ·
|
||||
`users.signature_path` 는 더 읽지 않는다.
|
||||
|
||||
아직 못 채우는 자리와 이유:
|
||||
- 사업량·연도기번은 사람이 넣는 값이다(B01 프로젝트 수정 화면). 비어 있으면 빈칸.
|
||||
@@ -132,9 +135,8 @@ async def _title_block_fields(project_id: UUID) -> dict[str, str]:
|
||||
await cursor.execute(
|
||||
"""
|
||||
SELECT p.name, p.region, p.client_org, p.project_number, p.work_amount,
|
||||
p.design_date, c.name, c.logo_path,
|
||||
COALESCE(designer.name, owner.name),
|
||||
COALESCE(designer.signature_path, owner.signature_path),
|
||||
p.design_date, c.name, logo.file_path,
|
||||
COALESCE(designer.name, owner.name), sig.file_path,
|
||||
pm.name, lead.name
|
||||
FROM projects p
|
||||
LEFT JOIN companies c ON c.id = p.company_id
|
||||
@@ -142,6 +144,10 @@ async def _title_block_fields(project_id: UUID) -> dict[str, str]:
|
||||
LEFT JOIN users designer ON designer.id = p.designer_user_id
|
||||
LEFT JOIN users pm ON pm.id = p.pm_user_id
|
||||
LEFT JOIN users lead ON lead.id = p.field_lead_user_id
|
||||
LEFT JOIN company_assets logo
|
||||
ON logo.id = p.logo_asset_id AND logo.deleted_at IS NULL
|
||||
LEFT JOIN company_assets sig
|
||||
ON sig.id = p.signature_asset_id AND sig.deleted_at IS NULL
|
||||
WHERE p.id = %s AND p.deleted_at IS NULL
|
||||
""",
|
||||
(str(project_id),),
|
||||
|
||||
Reference in New Issue
Block a user