pfs 아카이브 — 견적 기능 완료 이력
견적 관련 완료·운영배포 끝난 작업 상세. BRIEF 미삽입(포인터만). 요약은 sessions.md.
견적서 엑셀 reference 양식 전면 보완 (2026-06-08, 운영 배포·검증 완료)
- 참조 양식 =
reference/넥서스 GS 오산 양산 MH 견적서.xlsx.estimate_print_service.py전면 재작성(513+/306-) — 테스트cfbebf3, 운영9fea3c6. - 요구 3가지: ① 공급자 셀 텍스트(우측 O열) ② 셀 수식 금액(품목
=H*I, 소계=SUM(K:L), 페이지 공급가액=SUMIF(I:I,"소 계",K:K), 합계바C{+13}==M{+37}, page1 요약=C{상세블록합계}, 종합=본건!M37) ③ 본건 단일탭 타입 누적(시트=종합/본건/추가건, 본건=page1 요약+타입별 45행 블록, row_breaks 45/90/…, fitToWidth=1/fitToHeight=0). - 신규 구조:
compose_sheets()·_build_money_sheet·_build_summary_sheet·_render_block. 기존compose_pages()(평면)는 프론트/data·/pdf용 유지 → controller 무수정. - 검증: mock + 테스트 견적707(27,118B·6블록) + 운영 견적703(14,589B). 단가 I열 = margin_total/qty →
H*I=라인금액. 그룹구분은 소계묶음(소 계+SUMIF).
견적서 엑셀 4종 추가 보완 (2026-06-08, 운영 배포·검증 완료)
- 사용자 추가 수정 4건.
estimate_print_service.py— 테스트b783c80, 운영a168b35. Actions run 27110222144 성공. 1. 공급자 정보 → 이미지(PNG→JPG): 에셋web/static/img/estimate_supplier_block.jpg(1392×462→JPEG q85)._render_block_header에서 우측 공급자 셀텍스트·테두리 제거·좌측 수신처만. 신규_render_supplier_image= G6 기준 OneCellAnchor+EMU, 폭=G~O 451px. Pillow/파일 없으면 try/except 스킵. 2. 비고 칸 확대(_COL_WIDTHS): 단가 I·J=6.0, 금액 K=7.5·L=7.0 축소 / 비고 M·N=9.0·O=12.0 확대(A4 가로 1장 유지). 3. 헤더 텍스트 정리: "규 격 (WDH)"→"규 격", "단 가 (SET)"→"단 가". 4. shrink_to_fit:_style_data_row·_render_subtotal에 적용(본문 셀 자동 축소). - 검증: py_compile + mock 13항목 → 테스트(견적1·300·700) → 운영(703=3개·300=8개) 통과.
- 함정: 엑셀 다운로드 실제 경로 =
/api/estimate/print/excel/(지시문의/api/estimate/excel/아님). - 참고: JPG 에셋 63KB > PNG 36KB(텍스트·라인 위주라 JPEG 불리).
견적 등록/수정 3버튼 + 파일명 (2026-06-09 완료·운영배포·검증)
- A(파일명):
_build_filename구분자+→공백, 견적명 '견적서' 끝나면 접미사 중복 제거. - B(버튼):
estimate_regist_v2.html(btnComplete/btnComplete2)·estimate_regist_v2.js(saveEstimate(isTemporary, navigate)+wasExisting+신규 저장 시history.replaceStateURL만 교체). - 커밋
1556038→테스트 Actions27195161875→deploy-livea2d7362→운영 Actions27195927353success. - 운영 검증: js(134,069B)에 btnComplete·
saveEstimate(false, true)·history.replaceState 존재. 파일명 2케이스(709 중복제거·706 접미사) 검증. - 지시문 =
CODI_estimate_3buttons_and_filename_dedup.md·CODI_estimate_filename_orderer_estname.md.
estimate sub-item(가구 하위 추가금액) 저장 (2026-06-08 완료·운영배포·검증)
- 근본원인 = 같은 세션 신규 가구행(detail_no=null) sub가 프론트
sub/save게이트에 막혀 유실. - 처방 = 서버가 메인 저장(PUT+POST) 트랜잭션 안에서 subList 직접 persist + 텍스트 업체명→company_no 해소(
_resolve_sub_company_no), 프론트 fan-out 제거. - 테스트(견적709)·운영(견적705) end-to-end 통과: RDS 실측 INSERT +1(테스트 sub_no=2797/넵스, 운영 sub_no=30/모아디자인).
- 지시문 =
CODI_estimate_subitem_server_persist.md. 잔여(승인대기): 운영 검증용 견적 705 잔존 → 소프트 삭제(승인 후). - 함정:
estimate_detail_sub_controllertry/except로 예외 삼키고 항상 HTTP 200 → DB 실측·journalctl로 확인.
견적서 엑셀 공급자 이미지 정렬 + 도장 (2026-06-09 완료·운영배포·실파일 확인)
- 근본원인 =
_render_supplier_imageOneCellAnchor cx(EMU) 지정했으나 Excel/LibreOffice가 원본 종횡비(1428×704≈2.03) 우선 → 폭 157px로 축소·좌측 치우침. - 처방 = ① 공급자 표
TwoCellAnchor(editAs="twoCell")시작 K6(col10,row5)·끝 O우측(col15,row11) 양 셀 고정 → 종횡비 의존 제거. ② 도장 흰배경 JPG(tools/make_stamp_jpg.py→web/static/img/estimate_stamp.jpg, 2KB) +_STAMP_IMG+ OneCellAnchor O열(col14)+우측42px·base+7행·위2px, 40×40px. - 검증: LibreOffice 렌더 정렬·도장 겹침, openpyxl 3.0.10(EC2) 호환, 출력 XML(editAs=twoCell·col10→15·도장 cx=381000) 일치.
- 배포:
a48aedf→테스트 27187658843→deploy-live2ba52d6→운영 27187767242 success. 페페 육안 확인. - 지시문 =
CODI_estimate_supplier_img_ko_align_and_stamp.md. 추후(백로그): 도장을 공급자 정보 이미지에 1장 합성(원본 고해상도 확보 후).