diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-11-18 10:30:31 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-11-18 10:30:31 +0000 |
| commit | c4f5472b961afb237dc819f9dd3f42a7b8f71075 (patch) | |
| tree | a1c0d00e46a005ff472bf1125e739bae73b0a53e /lib/approval | |
| parent | 1d1f6010704a1d655b3007887db0fe3ac866177a (diff) | |
(최겸) 구매 입찰 수정, 입찰초대 결재 등록, 재입찰, 차수증가, 폐찰, 유찰취소 로직 수정, readonly 추가 등
Diffstat (limited to 'lib/approval')
| -rw-r--r-- | lib/approval/handlers-registry.ts | 15 | ||||
| -rw-r--r-- | lib/approval/templates/입찰초대 결재.html | 805 |
2 files changed, 820 insertions, 0 deletions
diff --git a/lib/approval/handlers-registry.ts b/lib/approval/handlers-registry.ts index a92c5ce5..7aec3ae5 100644 --- a/lib/approval/handlers-registry.ts +++ b/lib/approval/handlers-registry.ts @@ -49,6 +49,21 @@ export async function initializeApprovalHandlers() { // RFQ 발송 핸들러 등록 (결재 승인 후 실행될 함수 sendRfqWithApprovalInternal) registerActionHandler('rfq_send_with_attachments', sendRfqWithApprovalInternal); + // 7. 기술영업 RFQ 발송 핸들러 (DRM 파일이 있는 경우) + const { + sendTechSalesRfqWithApprovalInternal, + resendTechSalesRfqWithDrmInternal + } = await import('@/lib/techsales-rfq/approval-handlers'); + // 기술영업 RFQ 발송 핸들러 등록 (결재 승인 후 실행될 함수 sendTechSalesRfqWithApprovalInternal) + registerActionHandler('tech_sales_rfq_send_with_drm', sendTechSalesRfqWithApprovalInternal); + // 기술영업 RFQ 재발송 핸들러 등록 (결재 승인 후 실행될 함수 resendTechSalesRfqWithDrmInternal) + registerActionHandler('tech_sales_rfq_resend_with_drm', resendTechSalesRfqWithDrmInternal); + + // 8. 입찰초대 핸들러 + const { requestBiddingInvitationInternal } = await import('@/lib/bidding/handlers'); + // 입찰초대 핸들러 등록 (결재 승인 후 실행될 함수 requestBiddingInvitationInternal) + registerActionHandler('bidding_invitation', requestBiddingInvitationInternal); + // ... 추가 핸들러 등록 console.log('[Approval Handlers] All handlers registered successfully'); diff --git a/lib/approval/templates/입찰초대 결재.html b/lib/approval/templates/입찰초대 결재.html new file mode 100644 index 00000000..d22b9322 --- /dev/null +++ b/lib/approval/templates/입찰초대 결재.html @@ -0,0 +1,805 @@ +<div + style=" + max-width: 1000px; + margin: 0 auto; + font-family: 'Malgun Gothic', 'Segoe UI', sans-serif; + font-size: 14px; + color: #333; + line-height: 1.5; + border: 1px solid #666; /* 전체적인 테두리 추가 */ + " +> + <!-- 1. 제목 --> + <table + style=" + width: 100%; + border-collapse: collapse; + margin-bottom: 0px; + border-bottom: 2px solid #000; + " + > + <thead> + <tr> + <th + style=" + background-color: #fff; + color: #000; + padding: 15px; + text-align: center; + font-size: 20px; + font-weight: 700; + " + > + 입찰 결재 요청서 ({{제목}}) + </th> + </tr> + </thead> + </table> + + <!-- 2. 입찰 기본 정보 및 개요 --> + <table + style=" + width: 100%; + border-collapse: collapse; + margin-bottom: 15px; + " + > + <thead> + <tr> + <th + colspan="4" + style=" + background-color: #333; + color: #fff; + padding: 10px; + text-align: left; + font-size: 15px; + font-weight: 600; + border-bottom: 1px solid #666; + " + > + ■ 입찰 기본 정보 + </th> + </tr> + </thead> + <tbody> + <!-- 1행 --> + <tr> + <td + style=" + background-color: #f5f5f5; + padding: 8px 10px; + font-weight: 600; + width: 15%; + border: 1px solid #ccc; + text-align: center; + " + > + 입찰명 + </td> + <td + style=" + padding: 8px 10px; + width: 35%; + border: 1px solid #ccc; + " + > + {{입찰명}} + </td> + <td + style=" + background-color: #f5f5f5; + padding: 8px 10px; + font-weight: 600; + width: 15%; + border: 1px solid #ccc; + text-align: center; + " + > + 입찰번호 + </td> + <td + style=" + padding: 8px 10px; + width: 35%; + border: 1px solid #ccc; + " + > + {{입찰번호}} + </td> + </tr> + <!-- 2행 --> + <tr> + <td + style=" + background-color: #f5f5f5; + padding: 8px 10px; + font-weight: 600; + border: 1px solid #ccc; + text-align: center; + " + > + 낙찰업체수 + </td> + <td + style=" + padding: 8px 10px; + border: 1px solid #ccc; + " + > + {{낙찰업체수}} + </td> + <td + style=" + background-color: #f5f5f5; + padding: 8px 10px; + font-weight: 600; + border: 1px solid #ccc; + text-align: center; + " + > + 계약구분 + </td> + <td + style=" + padding: 8px 10px; + border: 1px solid #ccc; + " + > + {{계약구분}} + </td> + </tr> + <!-- 3행 --> + <tr> + <td + style=" + background-color: #f5f5f5; + padding: 8px 10px; + font-weight: 600; + border: 1px solid #ccc; + text-align: center; + " + > + P/R번호 + </td> + <td + style=" + padding: 8px 10px; + border: 1px solid #ccc; + " + > + {{P/R번호}} + </td> + <td + style=" + background-color: #f5f5f5; + padding: 8px 10px; + font-weight: 600; + border: 1px solid #ccc; + text-align: center; + " + > + 예산 + </td> + <td + style=" + padding: 8px 10px; + border: 1px solid #ccc; + " + > + {{예산}} + </td> + </tr> + <!-- 4행 --> + <tr> + <td + style=" + background-color: #f5f5f5; + padding: 8px 10px; + font-weight: 600; + border: 1px solid #ccc; + text-align: center; + " + > + 내정가 + </td> + <td + style=" + padding: 8px 10px; + border: 1px solid #ccc; + " + > + {{내정가}} + </td> + <td + style=" + background-color: #f5f5f5; + padding: 8px 10px; + font-weight: 600; + border: 1px solid #ccc; + text-align: center; + " + > + 입찰요청 시스템 + </td> + <td + style=" + padding: 8px 10px; + border: 1px solid #ccc; + " + > + eVCP + </td> + </tr> + <!-- 5행 --> + <tr> + <td + style=" + background-color: #f5f5f5; + padding: 8px 10px; + font-weight: 600; + border: 1px solid #ccc; + text-align: center; + " + > + 입찰담당자 + </td> + <td + style=" + padding: 8px 10px; + border: 1px solid #ccc; + " + > + {{입찰담당자}} + </td> + <td + style=" + background-color: #f5f5f5; + padding: 8px 10px; + font-weight: 600; + border: 1px solid #ccc; + text-align: center; + " + > + 내정가 산정 기준 + </td> + <td + style=" + padding: 8px 10px; + border: 1px solid #ccc; + " + > + {{내정가_산정_기준}} + </td> + </tr> + <!-- 6행: 입찰 개요 --> + <tr> + <td + style=" + background-color: #f5f5f5; + padding: 8px 10px; + font-weight: 600; + border: 1px solid #ccc; + text-align: center; + " + > + 입찰 개요 + </td> + <td + colspan="3" + style=" + padding: 8px 10px; + height: 80px; + border: 1px solid #ccc; + vertical-align: top; + " + > + {{입찰개요}} + </td> + </tr> + <!-- 7행: 입찰 공고문 --> + <tr> + <td + style=" + background-color: #f5f5f5; + padding: 8px 10px; + font-weight: 600; + border: 1px solid #ccc; + text-align: center; + " + > + 입찰 공고문 + </td> + <td + colspan="3" + style=" + padding: 8px 10px; + height: 80px; + border: 1px solid #ccc; + vertical-align: top; + " + > + {{입찰공고문}} + </td> + </tr> + </tbody> + </table> + + <!-- 3. 입찰 대상 협력사 --> + <table + style=" + width: 100%; + border-collapse: collapse; + margin-bottom: 15px; + " + > + <thead> + <tr> + <th + colspan="6" + style=" + background-color: #333; + color: #fff; + padding: 10px; + text-align: left; + font-size: 15px; + font-weight: 600; + border-bottom: 1px solid #666; + " + > + ■ 입찰 대상 협력사 + </th> + </tr> + <tr> + <th + style=" + background-color: #e8e8e8; + padding: 8px 10px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + width: 5%; + " + > + 순번 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 8px 10px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + width: 15%; + " + > + 협력사 코드 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 8px 10px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + width: 25%; + " + > + 협력사명 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 8px 10px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + width: 15%; + " + > + 담당자 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 8px 10px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + width: 25%; + " + > + 이메일 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 8px 10px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + width: 15%; + " + > + 전화번호 + </th> + </tr> + </thead> + <tbody> + <!-- 데이터 행 (반복 영역) --> + <tr> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;">1</td> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;">{{협력사_코드_1}}</td> + <td style="padding: 8px 10px; border: 1px solid #ccc;">{{협력사명_1}}</td> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;">{{담당자_1}}</td> + <td style="padding: 8px 10px; border: 1px solid #ccc;">{{이메일_1}}</td> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;">{{전화번호_1}}</td> + </tr> + <!-- ... 추가 협력사 정보 행 ... --> + <tr> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;">2</td> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;">{{협력사_코드_2}}</td> + <td style="padding: 8px 10px; border: 1px solid #ccc;">{{협력사명_2}}</td> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;">{{담당자_2}}</td> + <td style="padding: 8px 10px; border: 1px solid #ccc;">{{이메일_2}}</td> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;">{{전화번호_2}}</td> + </tr> + <!-- /데이터 행 --> + </tbody> + </table> + + <!-- 4. 입찰 일정 계획 --> + <table + style=" + width: 100%; + border-collapse: collapse; + margin-bottom: 15px; + " + > + <thead> + <tr> + <th + colspan="4" + style=" + background-color: #333; + color: #fff; + padding: 10px; + text-align: left; + font-size: 15px; + font-weight: 600; + border-bottom: 1px solid #666; + " + > + ■ 입찰 일정 계획 + </th> + </tr> + <tr> + <th + style=" + background-color: #e8e8e8; + padding: 8px 10px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + width: 25%; + " + > + 구분 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 8px 10px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + width: 15%; + " + > + 실행 여부 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 8px 10px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + width: 30%; + " + > + 시작 예정 일시 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 8px 10px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + width: 30%; + " + > + 종료 예정 일시 + </th> + </tr> + </thead> + <tbody> + <tr> + <td + style=" + padding: 8px 10px; + border: 1px solid #ccc; + text-align: center; + font-weight: 600; + " + > + 사양 설명회 + </td> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;"> + {{사양설명회_실행여부}} + </td> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;"> + {{사양설명회_시작예정일시}} + </td> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;"> + {{사양설명회_종료예정일시}} + </td> + </tr> + <tr> + <td + style=" + padding: 8px 10px; + border: 1px solid #ccc; + text-align: center; + font-weight: 600; + " + > + 입찰서 제출 기간 + </td> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;"> + {{입찰서제출기간_실행여부}} + </td> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;"> + {{입찰서제출기간_시작예정일시}} + </td> + <td style="padding: 8px 10px; text-align: center; border: 1px solid #ccc;"> + {{입찰서제출기간_종료예정일시}} + </td> + </tr> + </tbody> + </table> + + <!-- 5. 입찰 대상 자재 정보 --> + <table + style=" + width: 100%; + border-collapse: collapse; + margin-bottom: 15px; + " + > + <thead> + <tr> + <th + colspan="15" + style=" + background-color: #333; + color: #fff; + padding: 10px; + text-align: left; + font-size: 15px; + font-weight: 600; + border-bottom: 1px solid #666; + " + > + ■ 입찰 대상 자재 정보 (총 {{대상_자재_수}} 건) + </th> + </tr> + <tr style="font-size: 12px;"> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 순번 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 프로젝트 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 자재그룹 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 자재그룹명 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 자재코드 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 자재코드명 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 수량 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 구매단위 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 내정단가 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 수량단위 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 총중량 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 중량단위 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 예산 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 내정금액 + </th> + <th + style=" + background-color: #e8e8e8; + padding: 6px 4px; + text-align: center; + font-weight: 600; + border: 1px solid #ccc; + " + > + 통화 + </th> + </tr> + </thead> + <tbody> + <!-- 데이터 행 (반복 영역) --> + <tr style="font-size: 12px;"> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">1</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{프로젝트_1}}</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{자재그룹_1}}</td> + <td style="padding: 6px 4px; border: 1px solid #ccc;">{{자재그룹명_1}}</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{자재코드_1}}</td> + <td style="padding: 6px 4px; border: 1px solid #ccc;">{{자재코드명_1}}</td> + <td style="padding: 6px 4px; text-align: right; border: 1px solid #ccc;">{{수량_1}}</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{구매단위_1}}</td> + <td style="padding: 6px 4px; text-align: right; border: 1px solid #ccc;">{{내정단가_1}}</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{수량단위_1}}</td> + <td style="padding: 6px 4px; text-align: right; border: 1px solid #ccc;">{{총중량_1}}</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{중량단위_1}}</td> + <td style="padding: 6px 4px; text-align: right; border: 1px solid #ccc;">{{예산_1}}</td> + <td style="padding: 6px 4px; text-align: right; border: 1px solid #ccc;">{{내정금액_1}}</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{통화_1}}</td> + </tr> + <tr style="font-size: 12px;"> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">2</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{프로젝트_2}}</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{자재그룹_2}}</td> + <td style="padding: 6px 4px; border: 1px solid #ccc;">{{자재그룹명_2}}</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{자재코드_2}}</td> + <td style="padding: 6px 4px; border: 1px solid #ccc;">{{자재코드명_2}}</td> + <td style="padding: 6px 4px; text-align: right; border: 1px solid #ccc;">{{수량_2}}</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{구매단위_2}}</td> + <td style="padding: 6px 4px; text-align: right; border: 1px solid #ccc;">{{내정단가_2}}</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{수량단위_2}}</td> + <td style="padding: 6px 4px; text-align: right; border: 1px solid #ccc;">{{총중량_2}}</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{중량단위_2}}</td> + <td style="padding: 6px 4px; text-align: right; border: 1px solid #ccc;">{{예산_2}}</td> + <td style="padding: 6px 4px; text-align: right; border: 1px solid #ccc;">{{내정금액_2}}</td> + <td style="padding: 6px 4px; text-align: center; border: 1px solid #ccc;">{{통화_2}}</td> + </tr> + <!-- /데이터 행 --> + </tbody> + </table> +</div>
\ No newline at end of file |
