summaryrefslogtreecommitdiff
path: root/lib/pq
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-09-22 08:54:41 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-09-22 08:54:41 +0000
commit06d4753d61a803e2f8447bc3167dced3434107d4 (patch)
treecb5552768a390a5033d4f0d5922947f19229cdf8 /lib/pq
parenta1e2aae9b68b7d6f998e40e801822f1385c3c1ab (diff)
(최겸) 구매 협력업체 관리 피드백 반영(PQ, 실사, QM 담당자 등)
Diffstat (limited to 'lib/pq')
-rw-r--r--lib/pq/pq-criteria/pq-table-column.tsx40
-rw-r--r--lib/pq/pq-review-table-new/vendors-table-columns.tsx10
-rw-r--r--lib/pq/service.ts81
3 files changed, 94 insertions, 37 deletions
diff --git a/lib/pq/pq-criteria/pq-table-column.tsx b/lib/pq/pq-criteria/pq-table-column.tsx
index 924d80c4..de7396bf 100644
--- a/lib/pq/pq-criteria/pq-table-column.tsx
+++ b/lib/pq/pq-criteria/pq-table-column.tsx
@@ -125,26 +125,26 @@ export function getColumns({
minSize: 180,
size: 180,
},
- // {
- // accessorKey: "remarks",
- // header: ({ column }) => (
- // <DataTableColumnHeaderSimple column={column} title="SHI Comment" />
- // ),
- // cell: ({ row }) => {
- // const text = row.getValue("remarks") as string
- // return (
- // <div style={{ whiteSpace: "pre-wrap" }}>
- // {text || "-"}
- // </div>
- // )
- // },
- // meta: {
- // excelHeader: "Remarks"
- // },
- // enableResizing: true,
- // minSize: 180,
- // size: 180,
- // },
+ {
+ accessorKey: "remarks",
+ header: ({ column }) => (
+ <DataTableColumnHeaderSimple column={column} title="비고" />
+ ),
+ cell: ({ row }) => {
+ const text = row.getValue("remarks") as string
+ return (
+ <div style={{ whiteSpace: "pre-wrap" }}>
+ {text || "-"}
+ </div>
+ )
+ },
+ meta: {
+ excelHeader: "Remarks"
+ },
+ enableResizing: true,
+ minSize: 180,
+ size: 180,
+ },
{
accessorKey: "inputFormat",
header: ({ column }) => (
diff --git a/lib/pq/pq-review-table-new/vendors-table-columns.tsx b/lib/pq/pq-review-table-new/vendors-table-columns.tsx
index 449b69be..e3687f52 100644
--- a/lib/pq/pq-review-table-new/vendors-table-columns.tsx
+++ b/lib/pq/pq-review-table-new/vendors-table-columns.tsx
@@ -175,6 +175,8 @@ export function getColumns({ setRowAction, router }: GetColumnsProps): ColumnDef
<span className="text-xs text-muted-foreground">{row.original.vendorCode ? row.original.vendorCode : "-"}/{row.original.taxId}</span>
</div>
),
+ enableSorting: true,
+ enableHiding: true,
}
// PQ 유형 컬럼
@@ -200,6 +202,8 @@ export function getColumns({ setRowAction, router }: GetColumnsProps): ColumnDef
filterFn: (row, id, value) => {
return value.includes(row.getValue(id));
},
+ enableSorting: true,
+ enableHiding: true,
}
// 프로젝트 컬럼
@@ -225,6 +229,8 @@ export function getColumns({ setRowAction, router }: GetColumnsProps): ColumnDef
</div>
)
},
+ enableSorting: true,
+ enableHiding: true,
}
// 상태 컬럼
@@ -241,6 +247,8 @@ export function getColumns({ setRowAction, router }: GetColumnsProps): ColumnDef
const combinedStatus = getCombinedStatus(row.original);
return value.includes(combinedStatus.status);
},
+ enableSorting: true,
+ enableHiding: true,
};
// PQ 상태와 실사 상태를 결합하는 헬퍼 함수
@@ -362,6 +370,8 @@ export function getColumns({ setRowAction, router }: GetColumnsProps): ColumnDef
if (!investigation || !investigation.evaluationResult) return value.includes("null");
return value.includes(investigation.evaluationResult);
},
+ enableSorting: true,
+ enableHiding: true,
};
// 답변 수 컬럼
diff --git a/lib/pq/service.ts b/lib/pq/service.ts
index 5870a77f..172542a3 100644
--- a/lib/pq/service.ts
+++ b/lib/pq/service.ts
@@ -18,7 +18,7 @@ import { vendorRegularRegistrations } from "@/db/schema/vendorRegistrations";
import { saveFile, saveDRMFile } from "@/lib/file-stroage";
import { GetVendorsSchema } from "../vendors/validations";
import { selectVendors } from "../vendors/repository";
-import { projects, users } from "@/db/schema";
+import { projects, users, roles, userRoles } from "@/db/schema";
import { headers } from 'next/headers';
import { getServerSession } from "next-auth/next"
import { authOptions } from "@/app/api/auth/[...nextauth]/route"
@@ -1763,8 +1763,20 @@ export async function getPQSubmissions(input: GetPQSubmissionsSchema) {
// 7) 정렬 및 페이징 처리된 데이터 조회
const orderByColumns = input.sort.map((sort) => {
- const column = sort.id as keyof typeof vendorPQSubmissions.$inferSelect;
- return sort.desc ? desc(vendorPQSubmissions[column]) : asc(vendorPQSubmissions[column]);
+ const column = sort.id;
+
+ // JOIN된 테이블의 컬럼인 경우 적절한 테이블 참조
+ if (column === 'vendorName') {
+ return sort.desc ? desc(vendors.vendorName) : asc(vendors.vendorName);
+ } else if (column === 'projectName') {
+ return sort.desc ? desc(projects.name) : asc(projects.name);
+ } else if (column === 'requesterName') {
+ return sort.desc ? desc(users.name) : asc(users.name);
+ } else {
+ // vendorPQSubmissions 테이블의 컬럼인 경우
+ const dbColumn = column as keyof typeof vendorPQSubmissions.$inferSelect;
+ return sort.desc ? desc(vendorPQSubmissions[dbColumn]) : asc(vendorPQSubmissions[dbColumn]);
+ }
});
if (orderByColumns.length === 0) {
@@ -2818,40 +2830,75 @@ function getInvestigationMethodLabel(method: string): string {
}
}
+// export async function getQMManagers() {
+// try {
+// // QM 부서 사용자만 필터링 (department 필드가 있다고 가정)
+// // 또는 QM 역할을 가진 사용자만 필터링 (role 필드가 있다고 가정)
+// const qmUsers = await db
+// .select({
+// id: users.id,
+// name: users.name,
+// email: users.email,
+// })
+// .from(users)
+// // .where(
+// // // 필요에 따라 조건 조정 (예: QM 부서 또는 특정 역할만)
+// // // eq(users.department, "QM") 또는
+// // // eq(users.role, "QM_MANAGER")
+// // // 테스트를 위해 모든 사용자 반환도 가능
+// // eq(users.active, true)
+// // )
+// .orderBy(users.name)
+
+// return {
+// data: qmUsers,
+// success: true
+// }
+// } catch (error) {
+// console.error("QM 담당자 목록 조회 오류:", error)
+// return {
+// data: [],
+// success: false,
+// error: error instanceof Error ? error.message : "QM 담당자 목록을 가져오는 중 오류가 발생했습니다."
+// }
+// }
+// }
export async function getQMManagers() {
try {
- // QM 부서 사용자만 필터링 (department 필드가 있다고 가정)
- // 또는 QM 역할을 가진 사용자만 필터링 (role 필드가 있다고 가정)
+ // QM 역할이 할당된 사용자들을 조회
const qmUsers = await db
.select({
id: users.id,
name: users.name,
email: users.email,
+ employeeNumber: users.employeeNumber,
+ deptName: users.deptName,
+ isActive: users.isActive,
})
.from(users)
- // .where(
- // // 필요에 따라 조건 조정 (예: QM 부서 또는 특정 역할만)
- // // eq(users.department, "QM") 또는
- // // eq(users.role, "QM_MANAGER")
- // // 테스트를 위해 모든 사용자 반환도 가능
- // eq(users.active, true)
- // )
+ .innerJoin(userRoles, eq(users.id, userRoles.userId))
+ .innerJoin(roles, eq(userRoles.roleId, roles.id))
+ .where(
+ and(
+ ilike(roles.name, "%QM%"), // "QM"이 포함된 역할명
+ eq(users.isActive, true) // 활성 사용자만
+ )
+ )
.orderBy(users.name)
- return {
+ return {
data: qmUsers,
- success: true
+ success: true
}
} catch (error) {
console.error("QM 담당자 목록 조회 오류:", error)
- return {
+ return {
data: [],
success: false,
- error: error instanceof Error ? error.message : "QM 담당자 목록을 가져오는 중 오류가 발생했습니다."
+ error: error instanceof Error ? error.message : "QM 담당자 목록을 가져오는 중 오류가 발생했습니다."
}
}
}
-
export async function getFactoryLocationAnswer(vendorId: number, projectId: number | null = null) {
try {
// 1. "Location of Factory" 체크포인트를 가진 criteria 찾기