diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-22 08:54:41 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-22 08:54:41 +0000 |
| commit | 06d4753d61a803e2f8447bc3167dced3434107d4 (patch) | |
| tree | cb5552768a390a5033d4f0d5922947f19229cdf8 /lib/pq | |
| parent | a1e2aae9b68b7d6f998e40e801822f1385c3c1ab (diff) | |
(최겸) 구매 협력업체 관리 피드백 반영(PQ, 실사, QM 담당자 등)
Diffstat (limited to 'lib/pq')
| -rw-r--r-- | lib/pq/pq-criteria/pq-table-column.tsx | 40 | ||||
| -rw-r--r-- | lib/pq/pq-review-table-new/vendors-table-columns.tsx | 10 | ||||
| -rw-r--r-- | lib/pq/service.ts | 81 |
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 찾기
|
