summaryrefslogtreecommitdiff
path: root/lib/evaluation-submit
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-10-01 06:27:55 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-10-01 06:27:55 +0000
commitb4e80d7fe2e2873b5af551947a0e323f4bf357e4 (patch)
tree6990af37f16cb21e6fcb2f22e9d02f140059efca /lib/evaluation-submit
parentd689608ca2a54cab2cd12a12f0b6007a1be39ab2 (diff)
(최겸) 구메 정기평가 수정, menuconfig tbe 주석처리
Diffstat (limited to 'lib/evaluation-submit')
-rw-r--r--lib/evaluation-submit/service.ts26
1 files changed, 14 insertions, 12 deletions
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) {