/** * 벤더 입력 완성도 서버 액션 사용 예제 * * 이 파일은 실제 사용 방법을 보여주는 예제입니다. */ import { calculateVendorFormCompletion, getProjectVendorCompletionSummary, calculateVendorContractCompletion, getVendorAllContractsCompletionSummary, getAllVendorsContractsCompletionSummary, getAllProjectsVendorCompletionSummary } from './vendor-completion-stats'; /** * 예제 1: 특정 벤더의 특정 Form 완성도 확인 */ export async function exampleVendorFormCompletion() { const contractItemId = 123; const formCode = "SPR_LST"; const stats = await calculateVendorFormCompletion(contractItemId, formCode); if (stats) { console.log(`벤더: ${stats.vendorName}`); console.log(`폼: ${stats.formName} (${stats.formCode})`); console.log(`완성도: ${stats.completionPercentage}%`); console.log(`입력 현황: ${stats.totalFilledFields}/${stats.totalRequiredFields} 필드 완료`); console.log(`미입력 필드: ${stats.totalEmptyFields}개`); console.log(`총 태그 수: ${stats.tagCount}개`); // 태그별 세부 현황 stats.detailsByTag.forEach(tag => { console.log(` 태그 ${tag.tagNo}: ${tag.completionPercentage}% (${tag.filledFields}/${tag.requiredFields})`); }); } return stats; } /** * 예제 2: 프로젝트의 모든 벤더들의 특정 Form 완성도 요약 */ export async function exampleProjectFormCompletion() { const projectId = 456; const formCode = "SPR_LST"; const summary = await getProjectVendorCompletionSummary(projectId, formCode); if (summary) { console.log(`프로젝트: ${summary.projectName} (${summary.projectCode})`); console.log(`평균 완성도: ${summary.averageCompletionPercentage}%`); console.log(`참여 벤더 수: ${summary.totalVendors}개`); // 벤더별 완성도 summary.vendors.forEach(vendor => { console.log(` ${vendor.vendorName}: ${vendor.completionPercentage}%`); }); } return summary; } /** * 예제 3: 특정 벤더의 특정 계약에 대한 모든 Form 완성도 */ export async function exampleVendorContractCompletion() { const vendorId = 789; const contractItemId = 123; const stats = await calculateVendorContractCompletion(vendorId, contractItemId); if (stats) { console.log(`벤더: ${stats.contracts?.[0]?.forms?.[0]?.vendorName || 'Unknown'}`); console.log(`프로젝트: ${stats.projectName} (${stats.projectCode})`); console.log(`아이템: ${stats.itemName} (${stats.itemCode})`); console.log(`전체 완성도: ${stats.averageCompletionPercentage}%`); console.log(`총 폼 수: ${stats.totalForms}개`); console.log(`총 필드 수: ${stats.totalRequiredFields}개`); console.log(`입력된 필드: ${stats.totalFilledFields}개`); // 폼별 완성도 stats.forms.forEach(form => { console.log(` ${form.formName}: ${form.completionPercentage}%`); }); } return stats; } /** * 예제 4: 특정 벤더의 모든 계약에 대한 입력 완성도 요약 */ export async function exampleVendorAllContractsCompletion() { const vendorId = 789; const summary = await getVendorAllContractsCompletionSummary(vendorId); if (summary) { console.log(`벤더: ${summary.vendorName}`); console.log(`전체 완성도: ${summary.overallCompletionPercentage}%`); console.log(`총 계약 수: ${summary.totalContracts}개`); console.log(`총 폼 수: ${summary.totalForms}개`); console.log(`총 필드 수: ${summary.totalRequiredFields}개`); console.log(`입력된 필드: ${summary.totalFilledFields}개`); // 프로젝트별 요약 console.log('\n프로젝트별 완성도:'); summary.projectBreakdown.forEach(project => { console.log(` ${project.projectName}: ${project.completionPercentage}% (계약 ${project.contractsCount}개, 폼 ${project.formsCount}개)`); }); // 계약별 세부 현황 console.log('\n계약별 세부 현황:'); summary.contracts.forEach(contract => { console.log(` ${contract.itemName}: ${contract.averageCompletionPercentage}% (폼 ${contract.totalForms}개)`); }); } return summary; } /** * 예제 5: 모든 벤더들의 계약 완성도 요약 (관리자용) */ export async function exampleAllVendorsCompletion() { const summary = await getAllVendorsContractsCompletionSummary(); console.log(`전체 벤더 수: ${summary.totalVendors}개`); console.log(`전체 평균 완성도: ${summary.overallAverageCompletion}%`); // 상위 성과 벤더들 console.log('\n상위 성과 벤더들:'); summary.topPerformingVendors.forEach((vendor, index) => { console.log(` ${index + 1}. ${vendor.vendorName}: ${vendor.completionPercentage}%`); }); // 하위 성과 벤더들 console.log('\n개선이 필요한 벤더들:'); summary.lowPerformingVendors.forEach((vendor, index) => { console.log(` ${index + 1}. ${vendor.vendorName}: ${vendor.completionPercentage}%`); }); return summary; } /** * 예제 6: 모든 프로젝트의 벤더 완성도 요약 (관리자용) */ export async function exampleAllProjectsCompletion() { const summary = await getAllProjectsVendorCompletionSummary(); console.log(`전체 프로젝트 수: ${summary.totalProjects}개`); console.log(`전체 평균 완성도: ${summary.overallAverageCompletion}%`); // 프로젝트별 완성도 console.log('\n프로젝트별 완성도:'); summary.projects.forEach(project => { console.log(` ${project.projectName}: ${project.averageCompletionPercentage}% (벤더 ${project.totalVendors}개)`); }); return summary; } /** * 예제 7: 대시보드용 완성도 통계 생성 */ export async function generateCompletionDashboard() { console.log('=== 벤더 입력 완성도 대시보드 ===\n'); // 전체 벤더 요약 const allVendors = await getAllVendorsContractsCompletionSummary(); console.log(`📊 전체 통계`); console.log(`- 총 벤더 수: ${allVendors.totalVendors}개`); console.log(`- 평균 완성도: ${allVendors.overallAverageCompletion}%`); // 전체 프로젝트 요약 const allProjects = await getAllProjectsVendorCompletionSummary(); console.log(`- 총 프로젝트 수: ${allProjects.totalProjects}개`); console.log(`- 프로젝트 평균 완성도: ${allProjects.overallAverageCompletion}%\n`); // 우수 벤더 console.log('🏆 우수 벤더 (완성도 90% 이상):'); const excellentVendors = allVendors.vendors.filter(v => v.overallCompletionPercentage >= 90); excellentVendors.forEach(vendor => { console.log(` ✅ ${vendor.vendorName}: ${vendor.overallCompletionPercentage}%`); }); // 주의 필요 벤더 console.log('\n⚠️ 주의 필요 벤더 (완성도 50% 미만):'); const warningVendors = allVendors.vendors.filter(v => v.overallCompletionPercentage < 50); warningVendors.forEach(vendor => { console.log(` 🔴 ${vendor.vendorName}: ${vendor.overallCompletionPercentage}%`); }); return { totalVendors: allVendors.totalVendors, averageCompletion: allVendors.overallAverageCompletion, excellentVendors: excellentVendors.length, warningVendors: warningVendors.length, topVendors: allVendors.topPerformingVendors, lowVendors: allVendors.lowPerformingVendors }; }