summaryrefslogtreecommitdiff
path: root/lib/forms
diff options
context:
space:
mode:
Diffstat (limited to 'lib/forms')
-rw-r--r--lib/forms/stat.ts82
1 files changed, 63 insertions, 19 deletions
diff --git a/lib/forms/stat.ts b/lib/forms/stat.ts
index 45bf2710..887f1a05 100644
--- a/lib/forms/stat.ts
+++ b/lib/forms/stat.ts
@@ -1,7 +1,7 @@
"use server"
import db from "@/db/db"
-import { vendors, contracts, contractItems, forms, formEntries, formMetas, tags, tagClasses, tagClassAttributes } from "@/db/schema"
+import { vendors, contracts, contractItems, forms, formEntries, formMetas, tags, tagClasses, tagClassAttributes, projects } from "@/db/schema"
import { eq, and } from "drizzle-orm"
import { getEditableFieldsByTag } from "./services"
@@ -15,17 +15,47 @@ interface VendorFormStatus {
completionRate: number // 완료율 (%)
}
+export async function getProjectsWithContracts() {
+ try {
+ const projectList = await db
+ .selectDistinct({
+ id: projects.id,
+ projectCode: projects.projectCode,
+ projectName: projects.projectName,
+ })
+ .from(projects)
+ .innerJoin(contracts, eq(contracts.projectId, projects.id))
+ .orderBy(projects.projectCode)
+
+ return projectList
+ } catch (error) {
+ console.error('Error getting projects with contracts:', error)
+ throw new Error('계약이 있는 프로젝트 조회 중 오류가 발생했습니다.')
+ }
+}
+
+
-export async function getVendorFormStatus(): Promise<VendorFormStatus[]> {
+export async function getVendorFormStatus(projectId?: number): Promise<VendorFormStatus[]> {
try {
- // 1. 모든 벤더 조회
- const vendorList = await db
- .selectDistinct({
- vendorId: vendors.id,
- vendorName: vendors.vendorName,
- })
- .from(vendors)
- .innerJoin(contracts, eq(contracts.vendorId, vendors.id))
+ // 1. 벤더 조회 쿼리 수정
+ const vendorList = projectId
+ ? await db
+ .selectDistinct({
+ vendorId: vendors.id,
+ vendorName: vendors.vendorName,
+ })
+ .from(vendors)
+ .innerJoin(contracts, eq(contracts.vendorId, vendors.id))
+ .where(eq(contracts.projectId, projectId))
+ : await db
+ .selectDistinct({
+ vendorId: vendors.id,
+ vendorName: vendors.vendorName,
+ })
+ .from(vendors)
+ .innerJoin(contracts, eq(contracts.vendorId, vendors.id))
+
const vendorStatusList: VendorFormStatus[] = []
@@ -36,15 +66,29 @@ export async function getVendorFormStatus(): Promise<VendorFormStatus[]> {
let vendorCompletedFields = 0
const uniqueTags = new Set<string>()
- // 2. 벤더별 계약 조회
- const vendorContracts = await db
- .select({
- id: contracts.id,
- projectId: contracts.projectId
- })
- .from(contracts)
- .where(eq(contracts.vendorId, vendor.vendorId))
-
+ // 2. 계약 조회 시 projectId 필터 추가
+ const vendorContracts = projectId
+ ? await db
+ .select({
+ id: contracts.id,
+ projectId: contracts.projectId
+ })
+ .from(contracts)
+ .where(
+ and(
+ eq(contracts.vendorId, vendor.vendorId),
+ eq(contracts.projectId, projectId)
+ )
+ )
+ : await db
+ .select({
+ id: contracts.id,
+ projectId: contracts.projectId
+ })
+ .from(contracts)
+ .where(eq(contracts.vendorId, vendor.vendorId))
+
+
for (const contract of vendorContracts) {
// 3. 계약별 contractItems 조회
const contractItemsList = await db