"use client" import * as React from "react" import { toast } from "sonner" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { type ProjectSeries } from "@/db/schema/projects" import { getProjectSeriesForProject } from "@/lib/bidding-projects/service" // 기본적인 RFQ 타입 정의 (rfq-table.tsx와 일치) interface TechSalesRfq { id: number rfqCode: string | null itemId: number itemName: string | null materialCode: string | null dueDate: Date rfqSendDate: Date | null status: "RFQ Created" | "RFQ Vendor Assignned" | "RFQ Sent" | "Quotation Analysis" | "Closed" picCode: string | null remark: string | null cancelReason: string | null createdAt: Date updatedAt: Date createdBy: number | null createdByName: string updatedBy: number | null updatedByName: string sentBy: number | null sentByName: string | null pspid: string projNm: string sector: string projMsrm: number ptypeNm: string attachmentCount: number quotationCount: number } // K/L 날짜를 4분기로 변환하는 함수 function convertKLToQuarter(klDate: string | null): string { if (!klDate) return "정보 없음" try { // YYYYMMDD 형식의 날짜를 파싱 const year = parseInt(klDate.substring(0, 4)) const month = parseInt(klDate.substring(4, 6)) // 4분기 계산 (1-3월: 1Q, 4-6월: 2Q, 7-9월: 3Q, 10-12월: 4Q) const quarter = Math.ceil(month / 3) return `${year} ${quarter}Q` } catch (error) { console.error("K/L 날짜 변환 오류:", error) return "날짜 오류" } } interface ProjectDetailDialogProps { open: boolean onOpenChange: (open: boolean) => void selectedRfq: TechSalesRfq | null } export function ProjectDetailDialog({ open, onOpenChange, selectedRfq, }: ProjectDetailDialogProps) { const [projectSeries, setProjectSeries] = React.useState([]) const [isLoadingSeries, setIsLoadingSeries] = React.useState(false) React.useEffect(() => { async function loadSeries() { if (!selectedRfq?.pspid) return setIsLoadingSeries(true) try { const result = await getProjectSeriesForProject(selectedRfq.pspid) setProjectSeries(result) } catch (error) { console.error("프로젝트 시리즈 로드 오류:", error) toast.error("프로젝트 시리즈 로드 실패") } finally { setIsLoadingSeries(false) } } if (open && selectedRfq) { loadSeries() } }, [selectedRfq, open]) if (!selectedRfq) { return null } return ( 프로젝트 상세정보 {selectedRfq.pspid}
RFQ: {selectedRfq.rfqCode || "미할당"} | 자재: {selectedRfq.materialCode || "N/A"}
{selectedRfq.projNm} - {selectedRfq.ptypeNm} ({selectedRfq.itemName || "자재명 없음"})
{/* 기본 프로젝트 정보 */}

기본 정보

프로젝트 ID
{selectedRfq.pspid}
프로젝트명
{selectedRfq.projNm}
선종
{selectedRfq.ptypeNm}
척수
{selectedRfq.projMsrm}
섹터
{selectedRfq.sector}
{/* 시리즈 정보 */}

시리즈 정보

{isLoadingSeries ? (
시리즈 정보 로딩 중...
) : projectSeries.length > 0 ? (
{projectSeries.map((series) => (
시리즈번호:
{series.sersNo}
K/L (Keel Laying):
{convertKLToQuarter(series.klDt)}
도크코드:
{series.dockNo || "N/A"}
도크명:
{series.dockNm || "N/A"}
))}
) : (
시리즈 데이터가 없습니다.
)}
{/* 닫기 버튼 */}
) }