avl.crowny.org의 잔여 이슈 3건을 모두 해결하고 기능을 완성했다.
담당: 이용찬 팀장 / 010-9915-6990 / avl@crowny.org
Chrome Headless(--print-to-pdf)를 사용하여 서버 사이드에서 PDF를 생성하고 직접 다운로드한다.
GET /api/quotes/:id/pdf → 견적서 PDF 다운로드
GET /api/proposals/:id/pdf → 제안서 PDF 다운로드
GET /api/contracts/:id/pdf → 계약서 PDF 다운로드
UI: 프로젝트 상세 + 견적생성 결과에 [PDF] 버튼 추��.
POST /api/webhook/crm 웹훅 엔드포인트 추가. crm.crowny.org에서 리드 단계를 변경하면 AVL에 자동 반영된다.
POST /api/webhook/crm
Body: { leadId?, phone?, org?, stage?, assignee?, nextAction?, nextActionDate?, note? }
→ 매칭 리드 찾기 (leadId > phone > org 우선순위)
→ 단계 변경 + 활동 이력 자동 기록 ("CRM역방향")
→ 담당자/다음액션/메모 업데이트 가능
순수 Node.js SMTP 클라이언트로 이메일 발송. PDF 첨부 지원.
POST /api/quotes/:id/email { to: "수신@이메일" } → 견적서 PDF 첨부 발송
POST /api/proposals/:id/email { to: "수신@이메일" } → 제안서 PDF 첨부 발송
POST /api/contracts/:id/email { to: "수신@이메일" } → 계약서 PDF 첨부 발송
환경변수:
CROWNY_SMTP_HOST (기본: 127.0.0.1)CROWNY_SMTP_PORT (기본: 25)CROWNY_SMTP_FROM (기본: avl@crowny.org)PDF 견적서: OK (528KB, 5페이지)
PDF 제안서: OK (8페이지)
PDF 계약서: OK (3페이지)
CRM 웹훅: OK (단계변경 + 활동이력 정상)
이메일 API: OK (PDF 생성 + SMTP 연결 확인)
기존 기능: OK (변경 없음)
| Method | Endpoint | 설명 |
|---|---|---|
| GET | /api/quotes/:id/pdf | 견적서 PDF 직접 다운로드 |
| GET | /api/proposals/:id/pdf | 제안서 PDF 직접 다운로드 |
| GET | /api/contracts/:id/pdf | 계약서 PDF 직접 다운로드 |
| POST | /api/quotes/:id/email | 견적서 이메일 발송 (PDF 첨부) |
| POST | /api/proposals/:id/email | 제안서 이메일 발송 (PDF 첨부) |
| POST | /api/contracts/:id/email | 계약서 이메일 발송 (PDF 첨부) |
| POST | /api/webhook/crm | CRM → AVL 역방향 동기화 웹훅 |
/Users/ef/crowny-avl/server.js (3155줄, +272줄)/Users/ef/crowny-avl/web/index.html (3041줄, +55줄)대시보드, 고객관리, 프로젝트, 견적생성, 큐시트, DMX맵, 오디오매트릭스, 패키지비교, 시그널플로우, 랙다이어그램, 실시간모니터, 장소목록, 장비현황, 프리셋, 스케줄, 유지보수, 시공사례, 시공현황, 파트너십, 제품카탈로그, 도입문의, 장비등록, 장소등록, 활동로그