summaryrefslogtreecommitdiff
path: root/lib/forms/vendor-completion-examples.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/forms/vendor-completion-examples.ts')
-rw-r--r--lib/forms/vendor-completion-examples.ts205
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
+ };
+}