diff options
Diffstat (limited to 'lib/forms/vendor-completion-examples.ts')
| -rw-r--r-- | lib/forms/vendor-completion-examples.ts | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/lib/forms/vendor-completion-examples.ts b/lib/forms/vendor-completion-examples.ts new file mode 100644 index 00000000..b2cac730 --- /dev/null +++ b/lib/forms/vendor-completion-examples.ts @@ -0,0 +1,205 @@ +/** + * 벤더 입력 완성도 서버 액션 사용 예제 + * + * 이 파일은 실제 사용 방법을 보여주는 예제입니다. + */ + +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 + }; +} |
