summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/menuConfig.ts84
-rw-r--r--lib/evaluation-submit/service.ts26
-rw-r--r--lib/evaluation-target-list/service.ts5
-rw-r--r--lib/evaluation-target-list/table/evaluation-targets-columns.tsx18
4 files changed, 74 insertions, 59 deletions
diff --git a/config/menuConfig.ts b/config/menuConfig.ts
index 3511ce84..9dd649e2 100644
--- a/config/menuConfig.ts
+++ b/config/menuConfig.ts
@@ -330,18 +330,18 @@ export const mainNav: MenuSection[] = [
descriptionKey: "menu.procurement.bid_management_desc",
groupKey: "groups.quote_bid_management"
},
- {
- titleKey: "menu.procurement.tbe_ship",
- href: "/evcp/tbe-ship",
- descriptionKey: "menu.procurement.tbe_ship_desc",
- groupKey: "groups.evaluation_management"
- },
- {
- titleKey: "menu.procurement.tbe_plant",
- href: "/evcp/tbe-plant",
- descriptionKey: "menu.procurement.tbe_plant_desc",
- groupKey: "groups.evaluation_management"
- },
+ // {
+ // titleKey: "menu.procurement.tbe_ship",
+ // href: "/evcp/tbe-ship",
+ // descriptionKey: "menu.procurement.tbe_ship_desc",
+ // groupKey: "groups.evaluation_management"
+ // },
+ // {
+ // titleKey: "menu.procurement.tbe_plant",
+ // href: "/evcp/tbe-plant",
+ // descriptionKey: "menu.procurement.tbe_plant_desc",
+ // groupKey: "groups.evaluation_management"
+ // },
{
titleKey: "menu.procurement.po_issuance",
href: "/evcp/po",
@@ -676,18 +676,18 @@ export const procurementNav: MenuSection[] = [
descriptionKey: "menu.procurement.bid_management_desc",
groupKey: "groups.quote_bid_management"
},
- {
- titleKey: "menu.procurement.tbe_ship",
- href: "/procurement/tbe-ship",
- descriptionKey: "menu.procurement.tbe_ship_desc",
- groupKey: "groups.evaluation_management"
- },
- {
- titleKey: "menu.procurement.tbe_plant",
- href: "/procurement/tbe-plant",
- descriptionKey: "menu.procurement.tbe_plant_desc",
- groupKey: "groups.evaluation_management"
- },
+ // {
+ // titleKey: "menu.procurement.tbe_ship",
+ // href: "/procurement/tbe-ship",
+ // descriptionKey: "menu.procurement.tbe_ship_desc",
+ // groupKey: "groups.evaluation_management"
+ // },
+ // {
+ // titleKey: "menu.procurement.tbe_plant",
+ // href: "/procurement/tbe-plant",
+ // descriptionKey: "menu.procurement.tbe_plant_desc",
+ // groupKey: "groups.evaluation_management"
+ // },
{
titleKey: "menu.procurement.po_issuance",
href: "/procurement/po",
@@ -842,24 +842,24 @@ export const engineeringNav: MenuSection[] = [
},
],
},
- {
- titleKey: "menu.procurement.title",
- useGrouping: true,
- items: [
- {
- titleKey: "menu.procurement.tbe_ship",
- href: "/evcp/tbe-ship",
- descriptionKey: "menu.procurement.tbe_ship_desc",
- groupKey: "groups.evaluation_management"
- },
- {
- titleKey: "menu.procurement.tbe_plant",
- href: "/evcp/tbe-plant",
- descriptionKey: "menu.procurement.tbe_plant_desc",
- groupKey: "groups.evaluation_management"
- },
- ],
- },
+ // {
+ // titleKey: "menu.procurement.title",
+ // useGrouping: true,
+ // items: [
+ // {
+ // titleKey: "menu.procurement.tbe_ship",
+ // href: "/evcp/tbe-ship",
+ // descriptionKey: "menu.procurement.tbe_ship_desc",
+ // groupKey: "groups.evaluation_management"
+ // },
+ // {
+ // titleKey: "menu.procurement.tbe_plant",
+ // href: "/evcp/tbe-plant",
+ // descriptionKey: "menu.procurement.tbe_plant_desc",
+ // groupKey: "groups.evaluation_management"
+ // },
+ // ],
+ // },
];
// 파트너 사이트 메인 네비게이션
diff --git a/lib/evaluation-submit/service.ts b/lib/evaluation-submit/service.ts
index 023961de..a16a365a 100644
--- a/lib/evaluation-submit/service.ts
+++ b/lib/evaluation-submit/service.ts
@@ -1,14 +1,11 @@
'use server'
import db from "@/db/db";
-import {
+import {
reviewerEvaluations,
reviewerEvaluationsView,
reviewerEvaluationDetails,
regEvalCriteriaDetails,
- regEvalCriteriaView,
- NewReviewerEvaluationDetail,
- ReviewerEvaluationDetail,
evaluationTargetReviewers,
evaluationTargets,
regEvalCriteria,
@@ -16,7 +13,7 @@ import {
reviewerEvaluationAttachments,
users
} from "@/db/schema";
-import { and, inArray, asc, desc, eq, ilike, or, SQL, count , sql, avg, isNotNull} from "drizzle-orm";
+import { and, inArray, asc, desc, eq, ilike, or, SQL, count , sql} from "drizzle-orm";
import { filterColumns } from "@/lib/filter-columns";
import { DEPARTMENT_CATEGORY_MAPPING, EvaluationFormData, GetSHIEvaluationsSubmitSchema, REVIEWER_TYPES, ReviewerType } from "./validation";
import { AttachmentInfo, EvaluationQuestionItem } from "@/types/evaluation-form";
@@ -52,7 +49,12 @@ function calculateReviewerType(division: string, materialType: string): Reviewer
* reviewerType에 따라 해당하는 점수 필드를 가져옵니다
*/
function getScoreByReviewerType(
- detailRecord: any,
+ detailRecord: {
+ scoreEquipShip: string | null;
+ scoreEquipMarine: string | null;
+ scoreBulkShip: string | null;
+ scoreBulkMarine: string | null;
+ },
reviewerType: ReviewerType
): number | null {
let score: string | null = null;
@@ -267,7 +269,7 @@ export async function getEvaluationFormData(reviewerEvaluationId: number): Promi
category: regEvalCriteria.category,
})
.from(reviewerEvaluationAttachments)
- .innerJoin(
+ .leftJoin(
reviewerEvaluationDetails,
eq(reviewerEvaluationAttachments.reviewerEvaluationDetailId, reviewerEvaluationDetails.id)
)
@@ -358,7 +360,7 @@ export async function getEvaluationFormData(reviewerEvaluationId: number): Promi
// 📎 첨부파일 정보 추가
attachments: questionAttachments,
attachmentCount: questionAttachments.length,
- attachmentTotalSize: questionAttachments.reduce((sum, att) => sum + att.fileSize, 0),
+ attachmentTotalSize: questionAttachments.reduce((sum, att) => sum + (att.fileSize || 0), 0),
});
}
@@ -414,7 +416,7 @@ export async function getEvaluationFormData(reviewerEvaluationId: number): Promi
const questions: EvaluationQuestionItem[] = [];
questionsMap.forEach(question => {
// 현재 선택된 답변 찾기 (실제 응답이 있는 경우에만)
- let selectedResponse = null;
+ let selectedResponse: any = null;
for (const option of question.availableOptions) {
const response = existingResponsesMap.get(option.detailId);
if (response) {
@@ -426,7 +428,7 @@ export async function getEvaluationFormData(reviewerEvaluationId: number): Promi
if (selectedResponse) {
question.responseId = selectedResponse.id;
- question.currentScore = selectedResponse.score ? Number(selectedResponse.score) : null;
+ question.currentScore = selectedResponse.score;
question.currentComment = selectedResponse.comment;
}
// ✅ else 케이스: 아직 답변하지 않은 상태 (모든 값이 null)
@@ -437,7 +439,7 @@ export async function getEvaluationFormData(reviewerEvaluationId: number): Promi
// 📎 11. 전체 첨부파일 통계 계산
const attachmentStats = {
totalFiles: attachmentsData.length,
- totalSize: attachmentsData.reduce((sum, att) => sum + att.fileSize, 0),
+ totalSize: attachmentsData.reduce((sum, att) => sum + (att.fileSize || 0), 0),
questionsWithAttachments: attachmentsByQuestion.size + variableTypeAttachments.size,
filesByCategory: Object.fromEntries(attachmentsByCategory),
};
@@ -598,7 +600,7 @@ export async function updateEvaluationResponse(
await db.transaction(async (tx) => {
// 1. 선택된 답변 옵션의 정보 조회 (variable 타입이 아닌 경우)
- let selectedDetail = null;
+ let selectedDetail: any = null;
let score: number;
if (selectedDetailId !== -1) {
diff --git a/lib/evaluation-target-list/service.ts b/lib/evaluation-target-list/service.ts
index 572a9006..00d0d294 100644
--- a/lib/evaluation-target-list/service.ts
+++ b/lib/evaluation-target-list/service.ts
@@ -13,6 +13,7 @@ import {
isNotNull,
lte,
or,
+ ne,
sql,
type SQL,
} from 'drizzle-orm';
@@ -686,8 +687,10 @@ export async function getAvailableReviewers(departmentCode?: string) {
// departmentName: "API로 추후", // ✅ 부서명도 반환
})
.from(users)
+ .where(ne(users.domain, "partners"))
.orderBy(users.name)
// .limit(100);
+ //partners가 아닌 domain에 따라서 필터링
return reviewers;
} catch (error) {
@@ -1857,7 +1860,7 @@ export async function importEvalTargetExcel(file: File): Promise<{
const { userList } = await db.transaction(async (tx) => {
const selectRes = await selectUsers(tx, {
- where: and(eq(users.email, managerEmail), eq(users.isActive, true), isNotNull(users.userCode)),
+ where: and(eq(users.email, managerEmail), eq(users.isActive, true), ne(users.domain, "partners")),
orderBy: [asc(users.name)],
});
diff --git a/lib/evaluation-target-list/table/evaluation-targets-columns.tsx b/lib/evaluation-target-list/table/evaluation-targets-columns.tsx
index f00738c7..63b7cb7a 100644
--- a/lib/evaluation-target-list/table/evaluation-targets-columns.tsx
+++ b/lib/evaluation-target-list/table/evaluation-targets-columns.tsx
@@ -130,8 +130,18 @@ const renderIsApproved = (fieldName: string) => ({ row }: any) => {
return getEvaluationTargetBadge(isApproved);
};
-const renderComment = (maxWidth: string) => ({ row }: any) => {
- const comment = row.getValue<string>("adminComment") || row.getValue<string>("consolidatedComment");
+const renderAdminComment = (maxWidth: string) => ({ row }: any) => {
+ const comment = row.getValue<string>("adminComment") ;
+ return comment ? (
+ <div className={`truncate ${maxWidth}`} title={comment}>
+ {comment}
+ </div>
+ ) : (
+ <span className="text-muted-foreground">-</span>
+ );
+};
+const renderConsolidatedComment = (maxWidth: string) => ({ row }: any) => {
+ const comment = row.getValue<string>("consolidatedComment");
return comment ? (
<div className={`truncate ${maxWidth}`} title={comment}>
{comment}
@@ -453,7 +463,7 @@ function createStaticColumns(setRowAction: GetColumnsProps['setRowAction']): Col
{
accessorKey: "adminComment",
header: createHeaderRenderer("관리자 의견"),
- cell: renderComment("max-w-[150px]"),
+ cell: renderAdminComment("max-w-[150px]"),
size: 150,
meta: {
excelHeader: "관리자 의견",
@@ -462,7 +472,7 @@ function createStaticColumns(setRowAction: GetColumnsProps['setRowAction']): Col
{
accessorKey: "consolidatedComment",
header: createHeaderRenderer("종합 의견"),
- cell: renderComment("max-w-[150px]"),
+ cell: renderConsolidatedComment("max-w-[150px]"),
size: 150,
meta: {
excelHeader: "종합 의견",