diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-10-30 10:44:47 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-10-30 10:44:47 +0000 |
| commit | 871a6d46a769cbe9e87146434f4bcb2d6792ab81 (patch) | |
| tree | acc25b3645e2253625e68f3721a203131ff4f3c4 /lib/pq/pq-review-table-new/site-visit-dialog.tsx | |
| parent | 17b9d2016be7c0ab6571de6aba36b3f4ea37bdb1 (diff) | |
(최겸) 구매 PQ/실사 재개발(테스트 필요), 정규업체등록 결재 개발, 실사 의뢰 결재 후처리 등
Diffstat (limited to 'lib/pq/pq-review-table-new/site-visit-dialog.tsx')
| -rw-r--r-- | lib/pq/pq-review-table-new/site-visit-dialog.tsx | 135 |
1 files changed, 81 insertions, 54 deletions
diff --git a/lib/pq/pq-review-table-new/site-visit-dialog.tsx b/lib/pq/pq-review-table-new/site-visit-dialog.tsx index 2b65d03e..b1474150 100644 --- a/lib/pq/pq-review-table-new/site-visit-dialog.tsx +++ b/lib/pq/pq-review-table-new/site-visit-dialog.tsx @@ -140,6 +140,7 @@ interface SiteVisitDialogProps { projectCode?: string
pqItems?: Array<{itemCode: string, itemName: string}> | null
}
+ isReinspection?: boolean // 재실사 모드 플래그
}
export function SiteVisitDialog({
@@ -147,6 +148,7 @@ export function SiteVisitDialog({ onClose,
onSubmit,
investigation,
+ isReinspection = false,
}: SiteVisitDialogProps) {
const [isPending, setIsPending] = React.useState(false)
const [selectedFiles, setSelectedFiles] = React.useState<File[]>([])
@@ -184,58 +186,88 @@ export function SiteVisitDialog({ },
})
- // Dialog가 열릴 때마다 폼 재설정 및 기존 요청 확인
+ // Dialog가 열릴 때마다 폼 재설정 및 기존 요청 로딩
React.useEffect(() => {
if (isOpen) {
- // 기존 방문실사 요청이 있는지 확인
- const checkExistingRequest = async () => {
+ const loadExistingRequest = async () => {
try {
+ // 기존 방문실사 요청이 있는지 확인하고 최신 것을 로드
const existingRequest = await getSiteVisitRequestAction(investigation.id)
-
+
if (existingRequest.success && existingRequest.data) {
- toast.error("이미 방문실사 요청이 존재합니다. 추가 요청은 불가능합니다.")
- onClose()
+ // 기존 데이터를 form에 로드
+ const data = existingRequest.data
+ form.reset({
+ inspectionDuration: data.inspectionDuration || 1.0,
+ requestedStartDate: data.requestedStartDate ? new Date(data.requestedStartDate) : undefined,
+ requestedEndDate: data.requestedEndDate ? new Date(data.requestedEndDate) : undefined,
+ shiAttendees: data.shiAttendees || {
+ technicalSales: { checked: false, count: 0, details: "" },
+ design: { checked: false, count: 0, details: "" },
+ procurement: { checked: false, count: 0, details: "" },
+ quality: { checked: false, count: 0, details: "" },
+ production: { checked: false, count: 0, details: "" },
+ commissioning: { checked: false, count: 0, details: "" },
+ other: { checked: false, count: 0, details: "" },
+ },
+ shiAttendeeDetails: data.shiAttendeeDetails || "",
+ vendorRequests: data.vendorRequests || {
+ availableDates: false,
+ factoryName: false,
+ factoryLocation: false,
+ factoryAddress: false,
+ factoryPicName: false,
+ factoryPicPhone: false,
+ factoryPicEmail: false,
+ factoryDirections: false,
+ accessProcedure: false,
+ other: false,
+ },
+ otherVendorRequests: data.otherVendorRequests || "",
+ additionalRequests: data.additionalRequests || "",
+ })
return
}
+
+ // 기본값으로 폼 초기화 (기존 요청이 없는 경우)
+ form.reset({
+ inspectionDuration: 1.0,
+ requestedStartDate: undefined,
+ requestedEndDate: undefined,
+ shiAttendees: {
+ technicalSales: { checked: false, count: 0, details: "" },
+ design: { checked: false, count: 0, details: "" },
+ procurement: { checked: false, count: 0, details: "" },
+ quality: { checked: false, count: 0, details: "" },
+ production: { checked: false, count: 0, details: "" },
+ commissioning: { checked: false, count: 0, details: "" },
+ other: { checked: false, count: 0, details: "" },
+ },
+ shiAttendeeDetails: "",
+ vendorRequests: {
+ availableDates: false,
+ factoryName: false,
+ factoryLocation: false,
+ factoryAddress: false,
+ factoryPicName: false,
+ factoryPicPhone: false,
+ factoryPicEmail: false,
+ factoryDirections: false,
+ accessProcedure: false,
+ other: false,
+ },
+ otherVendorRequests: "",
+ additionalRequests: "",
+ })
} catch (error) {
- console.error("방문실사 요청 상태 확인 중 오류:", error)
- toast.error("방문실사 요청 상태 확인 중 오류가 발생했습니다.")
+ console.error("방문실사 요청 데이터 로드 중 오류:", error)
+ toast.error("방문실사 요청 데이터 로드 중 오류가 발생했습니다.")
onClose()
return
}
}
-
- checkExistingRequest()
-
- form.reset({
- inspectionDuration: 1.0,
- requestedStartDate: undefined,
- requestedEndDate: undefined,
- shiAttendees: {
- technicalSales: { checked: false, count: 0, details: "" },
- design: { checked: false, count: 0, details: "" },
- procurement: { checked: false, count: 0, details: "" },
- quality: { checked: false, count: 0, details: "" },
- production: { checked: false, count: 0, details: "" },
- commissioning: { checked: false, count: 0, details: "" },
- other: { checked: false, count: 0, details: "" },
- },
- shiAttendeeDetails: "",
- vendorRequests: {
- availableDates: false,
- factoryName: false,
- factoryLocation: false,
- factoryAddress: false,
- factoryPicName: false,
- factoryPicPhone: false,
- factoryPicEmail: false,
- factoryDirections: false,
- accessProcedure: false,
- other: false,
- },
- otherVendorRequests: "",
- additionalRequests: "",
- })
+
+ loadExistingRequest()
setSelectedFiles([])
}
}, [isOpen, form, investigation.id, onClose])
@@ -243,19 +275,11 @@ export function SiteVisitDialog({ async function handleSubmit(data: SiteVisitRequestFormValues) {
setIsPending(true)
try {
- // 제출 전에 한 번 더 기존 요청이 있는지 확인
- const existingRequest = await getSiteVisitRequestAction(investigation.id)
-
- if (existingRequest.success && existingRequest.data) {
- toast.error("이미 방문실사 요청이 존재합니다. 추가 요청은 불가능합니다.")
- onClose()
- return
- }
-
+
await onSubmit(data, selectedFiles)
- toast.success("방문실사 요청이 성공적으로 발송되었습니다.")
+ toast.success(isReinspection ? "재실사 요청이 성공적으로 발송되었습니다." : "방문실사 요청이 성공적으로 발송되었습니다.")
} catch (error) {
- toast.error("방문실사 요청 발송 중 오류가 발생했습니다.")
+ toast.error(isReinspection ? "재실사 요청 발송 중 오류가 발생했습니다." : "방문실사 요청 발송 중 오류가 발생했습니다.")
console.error("방문실사 요청 오류:", error)
} finally {
setIsPending(false)
@@ -294,9 +318,12 @@ export function SiteVisitDialog({ <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>
<DialogContent className="max-w-4xl max-h-[90vh] overflow-y-auto">
<DialogHeader>
- <DialogTitle>방문실사 요청 생성</DialogTitle>
+ <DialogTitle>{isReinspection ? "재실사 요청 생성" : "방문실사 요청 생성"}</DialogTitle>
<DialogDescription>
- 협력업체에 방문실사 요청을 생성하고, 협력업체가 입력할 정보 항목을 설정합니다.
+ {isReinspection
+ ? "협력업체에 재실사 요청을 생성하고, 협력업체가 입력할 정보 항목을 설정합니다."
+ : "협력업체에 방문실사 요청을 생성하고, 협력업체가 입력할 정보 항목을 설정합니다."
+ }
</DialogDescription>
</DialogHeader>
@@ -710,7 +737,7 @@ export function SiteVisitDialog({ 취소
</Button>
<Button type="submit" disabled={isPending}>
- {isPending ? "처리 중..." : "방문실사 요청 생성"}
+ {isPending ? "처리 중..." : (isReinspection ? "재실사 요청 생성" : "방문실사 요청 생성")}
</Button>
</DialogFooter>
</form>
|
