diff options
Diffstat (limited to 'lib/vendor-regular-registrations')
4 files changed, 2 insertions, 208 deletions
diff --git a/lib/vendor-regular-registrations/repository.ts b/lib/vendor-regular-registrations/repository.ts index 3713f628..8aeb63fc 100644 --- a/lib/vendor-regular-registrations/repository.ts +++ b/lib/vendor-regular-registrations/repository.ts @@ -31,7 +31,6 @@ export async function getVendorRegularRegistrations( assignedUser: vendorRegularRegistrations.assignedUser, remarks: vendorRegularRegistrations.remarks, // 새로 추가된 필드들 - safetyQualificationContent: vendorRegularRegistrations.safetyQualificationContent, gtcSkipped: vendorRegularRegistrations.gtcSkipped, // 벤더 기본 정보 businessNumber: vendors.taxId, @@ -164,10 +163,9 @@ export async function getVendorRegularRegistrations( const allDocumentsSubmitted = Object.values(documentSubmissionsStatus).every(status => status === true); // 진행현황과 dialog에서 VENDOR_SIGNED도 완료로 간주하므로, 조건충족 체크도 동일하게 처리 const allContractsCompleted = vendorContracts.length > 0 && vendorContracts.every(c => c.status === "COMPLETED" || c.status === "VENDOR_SIGNED"); - const safetyQualificationCompleted = !!registration.safetyQualificationContent; // 모든 조건이 충족되면 status를 "approval_ready"(조건충족)로 자동 변경 - const shouldUpdateStatus = allDocumentsSubmitted && allContractsCompleted && safetyQualificationCompleted && additionalInfoCompleted; + const shouldUpdateStatus = allDocumentsSubmitted && allContractsCompleted && additionalInfoCompleted; // 현재 상태가 조건충족이 아닌데 모든 조건이 충족되면 상태 업데이트 // 단, 결재진행중(pending_approval) 또는 등록요청완료(registration_completed), 등록실패(registration_failed) 상태인 경우 무시 @@ -195,7 +193,6 @@ export async function getVendorRegularRegistrations( documentFiles: documentFiles, // 파일 정보 추가 contractAgreements: contractAgreementsStatus, // 새로 추가된 필드들 - safetyQualificationContent: registration.safetyQualificationContent, gtcSkipped: registration.gtcSkipped || false, additionalInfo: additionalInfoCompleted, // 기본계약 정보 @@ -229,7 +226,6 @@ export async function createVendorRegularRegistration(data: { assignedUser?: string; assignedUserCode?: string; remarks?: string; - safetyQualificationContent?: string; gtcSkipped?: boolean; }) { try { @@ -245,7 +241,6 @@ export async function createVendorRegularRegistration(data: { assignedUser: data.assignedUser, assignedUserCode: data.assignedUserCode, remarks: data.remarks, - safetyQualificationContent: data.safetyQualificationContent, gtcSkipped: data.gtcSkipped || false, }) .returning(); @@ -269,7 +264,6 @@ export async function updateVendorRegularRegistration( assignedUser: string; assignedUserCode: string; remarks: string; - safetyQualificationContent: string; gtcSkipped: boolean; }> ) { diff --git a/lib/vendor-regular-registrations/service.ts b/lib/vendor-regular-registrations/service.ts index eaf62ac7..5cb6f7c2 100644 --- a/lib/vendor-regular-registrations/service.ts +++ b/lib/vendor-regular-registrations/service.ts @@ -445,7 +445,6 @@ export async function fetchVendorRegistrationStatus(vendorId: number) { assignedUser: vendorRegularRegistrations.assignedUser,
assignedUserCode: vendorRegularRegistrations.assignedUserCode,
remarks: vendorRegularRegistrations.remarks,
- safetyQualificationContent: vendorRegularRegistrations.safetyQualificationContent,
gtcSkipped: vendorRegularRegistrations.gtcSkipped,
createdAt: vendorRegularRegistrations.createdAt,
updatedAt: vendorRegularRegistrations.updatedAt,
@@ -556,7 +555,6 @@ export async function fetchVendorRegistrationStatus(vendorId: number) { safetyHealth: vendorContracts.some(c => c.templateName?.includes("안전보건") && c.status === "COMPLETED"),
ethics: vendorContracts.some(c => c.templateName?.includes("윤리") && c.status === "COMPLETED"),
domesticCredit: vendorContracts.some(c => c.templateName?.includes("신용") && c.status === "COMPLETED"),
- safetyQualification: investigationFiles.length > 0,
}
// 문서별 파일 정보 (다운로드용)
@@ -584,7 +582,6 @@ export async function fetchVendorRegistrationStatus(vendorId: number) { console.log(`🔍 Partners 벤더 ID ${vendorId} 전체 데이터:`, {
vendor: vendor[0],
registration: registration[0],
- safetyQualificationContent: registration[0]?.safetyQualificationContent,
gtcSkipped: registration[0]?.gtcSkipped,
requiredContactTypes,
existingContactTypes,
@@ -723,37 +720,6 @@ export async function saveVendorAdditionalInfo( }
}
-// 안전적격성 평가 업데이트
-export async function updateSafetyQualification(
- registrationId: number,
- safetyQualificationContent: string
-) {
- try {
- const session = await getServerSession(authOptions);
- if (!session?.user) {
- return { success: false, error: "로그인이 필요합니다." };
- }
-
- const result = await updateVendorRegularRegistration(registrationId, {
- safetyQualificationContent: safetyQualificationContent.trim(),
- });
-
- if (!result) {
- return { success: false, error: "등록 정보를 찾을 수 없습니다." };
- }
-
- return {
- success: true,
- message: "안전적격성 평가가 등록되었습니다.",
- };
- } catch (error) {
- console.error("Error updating safety qualification:", error);
- return {
- success: false,
- error: error instanceof Error ? error.message : "안전적격성 평가 등록 중 오류가 발생했습니다.",
- };
- }
-}
// 정규업체 등록 요청을 위한 상세 데이터 조회
diff --git a/lib/vendor-regular-registrations/table/safety-qualification-update-dialog.tsx b/lib/vendor-regular-registrations/table/safety-qualification-update-dialog.tsx deleted file mode 100644 index 80084732..00000000 --- a/lib/vendor-regular-registrations/table/safety-qualification-update-dialog.tsx +++ /dev/null @@ -1,143 +0,0 @@ -"use client" - -import * as React from "react" -import { useForm } from "react-hook-form" -import { zodResolver } from "@hookform/resolvers/zod" -import { z } from "zod" -import { toast } from "sonner" - -import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, -} from "@/components/ui/dialog" -import { - Form, - FormControl, - FormField, - FormItem, - FormLabel, - FormMessage, -} from "@/components/ui/form" -import { Button } from "@/components/ui/button" -import { Textarea } from "@/components/ui/textarea" -import { updateSafetyQualification } from "../service" - -const formSchema = z.object({ - safetyQualificationContent: z.string().min(1, "안전적격성 평가 내용을 입력해주세요."), -}) - -interface SafetyQualificationUpdateDialogProps { - open: boolean - onOpenChange: (open: boolean) => void - registrationId?: number - vendorName?: string - currentContent?: string | null - onSuccess?: () => void -} - -export function SafetyQualificationUpdateDialog({ - open, - onOpenChange, - registrationId, - vendorName, - currentContent, - onSuccess, -}: SafetyQualificationUpdateDialogProps) { - const [isLoading, setIsLoading] = React.useState(false) - - const form = useForm<z.infer<typeof formSchema>>({ - resolver: zodResolver(formSchema), - defaultValues: { - safetyQualificationContent: currentContent || "", - }, - }) - - // 폼 값 초기화 - React.useEffect(() => { - if (open) { - form.reset({ - safetyQualificationContent: currentContent || "", - }) - } - }, [open, currentContent, form]) - - async function onSubmit(values: z.infer<typeof formSchema>) { - if (!registrationId) { - toast.error("등록 ID가 없습니다.") - return - } - - setIsLoading(true) - try { - const result = await updateSafetyQualification( - registrationId, - values.safetyQualificationContent - ) - - if (result.success) { - toast.success("안전적격성 평가가 등록되었습니다.") - onOpenChange(false) - onSuccess?.() - } else { - toast.error(result.error || "안전적격성 평가 등록에 실패했습니다.") - } - } catch (error) { - console.error("안전적격성 평가 등록 오류:", error) - toast.error("안전적격성 평가 등록 중 오류가 발생했습니다.") - } finally { - setIsLoading(false) - } - } - - return ( - <Dialog open={open} onOpenChange={onOpenChange}> - <DialogContent className="w-[400px] sm:w-[540px] max-h-[90vh] overflow-y-auto"> - <DialogHeader> - <DialogTitle>안전적격성 평가 입력</DialogTitle> - <DialogDescription> - {vendorName && `${vendorName}의 `}안전적격성 평가 내용을 입력해주세요. - </DialogDescription> - </DialogHeader> - - <Form {...form}> - <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6 mt-6"> - <FormField - control={form.control} - name="safetyQualificationContent" - render={({ field }) => ( - <FormItem> - <FormLabel>안전적격성 평가 내용</FormLabel> - <FormControl> - <Textarea - placeholder="안전적격성 평가 결과 및 내용을 입력해주세요..." - className="min-h-[200px]" - {...field} - /> - </FormControl> - <FormMessage /> - </FormItem> - )} - /> - - <div className="flex justify-end space-x-2"> - <Button - type="button" - variant="outline" - onClick={() => onOpenChange(false)} - disabled={isLoading} - > - 취소 - </Button> - <Button type="submit" disabled={isLoading}> - {isLoading ? "저장 중..." : "저장"} - </Button> - </div> - </form> - </Form> - </DialogContent> - </Dialog> - ) -} diff --git a/lib/vendor-regular-registrations/table/vendor-regular-registrations-table-columns.tsx b/lib/vendor-regular-registrations/table/vendor-regular-registrations-table-columns.tsx index 075724a2..2e3920af 100644 --- a/lib/vendor-regular-registrations/table/vendor-regular-registrations-table-columns.tsx +++ b/lib/vendor-regular-registrations/table/vendor-regular-registrations-table-columns.tsx @@ -10,9 +10,8 @@ import { VendorRegularRegistration, statusLabels, statusColors } from "@/config/ import { DocumentStatusDialog } from "@/components/vendor-regular-registrations/document-status-dialog" import { Button } from "@/components/ui/button" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" -import { Ellipsis, Shield, Package } from "lucide-react" +import { Ellipsis, Package } from "lucide-react" import { useState } from "react" -import { SafetyQualificationUpdateDialog } from "./safety-qualification-update-dialog" import { MajorItemsUpdateDialog } from "./major-items-update-dialog" export function getColumns(): ColumnDef<VendorRegularRegistration>[] { @@ -177,9 +176,6 @@ export function getColumns(): ColumnDef<VendorRegularRegistration>[] { const completedContracts = registration.basicContracts?.filter(c => c.status === "VENDOR_SIGNED" || c.status === "COMPLETED").length || 0 const incompleteContracts = totalContracts - completedContracts - // 안전적격성 평가 현황 - const safetyCompleted = !!registration.safetyQualificationContent - // 추가정보 현황 const additionalInfoCompleted = registration.additionalInfo @@ -187,7 +183,6 @@ export function getColumns(): ColumnDef<VendorRegularRegistration>[] { const totalIncomplete = (incompleteDocs > 0 ? 1 : 0) + incompleteContracts + - (!safetyCompleted ? 1 : 0) + (!additionalInfoCompleted ? 1 : 0) const isAllComplete = totalIncomplete === 0 @@ -260,7 +255,6 @@ export function getColumns(): ColumnDef<VendorRegularRegistration>[] { id: "actions", cell: ({ row }) => { const ActionsDropdownCell = () => { - const [safetyQualificationSheetOpen, setSafetyQualificationSheetOpen] = useState(false) const [majorItemsSheetOpen, setMajorItemsSheetOpen] = useState(false) const registration = row.original @@ -278,12 +272,6 @@ export function getColumns(): ColumnDef<VendorRegularRegistration>[] { </DropdownMenuTrigger> <DropdownMenuContent align="end" className="w-[160px]"> <DropdownMenuItem - onClick={() => setSafetyQualificationSheetOpen(true)} - > - <Shield className="mr-2 h-4 w-4" /> - 안전적격성 평가 - </DropdownMenuItem> - <DropdownMenuItem onClick={() => setMajorItemsSheetOpen(true)} > <Package className="mr-2 h-4 w-4" /> @@ -292,17 +280,6 @@ export function getColumns(): ColumnDef<VendorRegularRegistration>[] { </DropdownMenuContent> </DropdownMenu> - <SafetyQualificationUpdateDialog - open={safetyQualificationSheetOpen} - onOpenChange={setSafetyQualificationSheetOpen} - registrationId={registration.id} - vendorName={registration.companyName} - currentContent={registration.safetyQualificationContent} - onSuccess={() => { - // 페이지 새로고침 또는 데이터 리페치 - window.location.reload() - }} - /> <MajorItemsUpdateDialog open={majorItemsSheetOpen} onOpenChange={setMajorItemsSheetOpen} |
