summaryrefslogtreecommitdiff
path: root/components/form-data/form-data-report-batch-dialog.tsx
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-03-28 06:12:09 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-03-28 06:12:09 +0000
commitf2c29e0023200b58d5e5c7a4c677a3c473c9bb8e (patch)
treef6fcfb6e5dcddceab7529d7ca5fb0a4b44bd8798 /components/form-data/form-data-report-batch-dialog.tsx
parentf3e640b666c57f133c229d2742fb214c586d21e4 (diff)
parentdbfc752cbbae6bded6040f4727ec7564d2a3b759 (diff)
기만프로 작업내역 머지
Diffstat (limited to 'components/form-data/form-data-report-batch-dialog.tsx')
-rw-r--r--components/form-data/form-data-report-batch-dialog.tsx76
1 files changed, 59 insertions, 17 deletions
diff --git a/components/form-data/form-data-report-batch-dialog.tsx b/components/form-data/form-data-report-batch-dialog.tsx
index e3fd7ea2..f4efde64 100644
--- a/components/form-data/form-data-report-batch-dialog.tsx
+++ b/components/form-data/form-data-report-batch-dialog.tsx
@@ -6,11 +6,12 @@ import React, {
SetStateAction,
useState,
useEffect,
- useRef,
} from "react";
import { useToast } from "@/hooks/use-toast";
+import { toast as toastMessage} from "sonner";
import prettyBytes from "pretty-bytes";
import { X, Loader2 } from "lucide-react";
+import { saveAs } from 'file-saver';
import { Badge } from "@/components/ui/badge";
import {
Dialog,
@@ -25,7 +26,6 @@ import { Label } from "@/components/ui/label";
import {
Select,
SelectContent,
- SelectGroup,
SelectItem,
SelectTrigger,
SelectValue,
@@ -49,7 +49,7 @@ import {
FileListName,
} from "@/components/ui/file-list";
import { Button } from "@/components/ui/button";
-import { getReportTempList } from "@/lib/forms/services";
+import { getReportTempList, getOrigin } from "@/lib/forms/services";
import { DataTableColumnJSON } from "./form-data-table-columns";
const MAX_FILE_SIZE = 3000000;
@@ -129,30 +129,58 @@ export const FormDataReportBatchDialog: FC<FormDataReportBatchDialogProps> = ({
setIsUploading(true);
try {
- const totalFiles = selectedFiles.length;
- let successCount = 0;
+ const origin = await getOrigin()
- for (let i = 0; i < totalFiles; i++) {
- const file = selectedFiles[i];
+ const targetFiles = selectedFiles[0];
- const formData = new FormData();
- formData.append("file", file);
- formData.append("customFileName", file.name);
+ const reportDatas = reportData.map((c) => {
+ const reportValue = stringifyAllValues(c);
- // await uploadReportTemp(packageId, formId, formData);
+ const reportValueMapping: { [key: string]: any } = {};
- successCount++;
+ columnsJSON.forEach((c2) => {
+ const { key, label } = c2;
+
+ const objKey = label.split(" ").join("_");
+
+ reportValueMapping[objKey] = reportValue?.[key] ?? "";
+ });
+
+ return reportValueMapping;
+ });
+ const formData = new FormData();
+ formData.append("file", targetFiles);
+ formData.append("customFileName", `${formCode}.pdf`);
+ formData.append("reportDatas", JSON.stringify(reportDatas));
+ formData.append("reportTempPath", selectTemp);
+
+ const reqeustCreateReport = await fetch(
+ `${origin}/api/pdftron/createVendorDataReports`,
+ { method: "POST", body: formData }
+ );
+
+ if (reqeustCreateReport.ok) {
+ const blob = await reqeustCreateReport.blob();
+
+ saveAs(blob, `${formCode}.pdf`);
+
+ toastMessage.success("Report 다운로드 완료!")
+ } else {
+ const err = await reqeustCreateReport.json();
+ console.error("에러:", err);
+ throw new Error(err.message)
}
} catch (err) {
console.error(err);
toast({
title: "Error",
- description: "파일 업로드 중 오류가 발생했습니다.",
+ description: "Report 생성 중 오류가 발생했습니다.",
variant: "destructive",
});
} finally {
setIsUploading(false);
- setOpen(false);
+ setSelectedFiles([])
+ setOpen(false)
}
};
@@ -185,7 +213,7 @@ export const FormDataReportBatchDialog: FC<FormDataReportBatchDialogProps> = ({
</Select>
</div>
<div>
- <Label>Report Cover Page Upload</Label>
+ <Label>Report Cover Page Upload(.docx)</Label>
<Dropzone
maxSize={MAX_FILE_SIZE}
multiple={false}
@@ -237,10 +265,10 @@ export const FormDataReportBatchDialog: FC<FormDataReportBatchDialogProps> = ({
<DialogFooter>
<Button
- disabled={selectedFiles.length === 0 || selectTemp.length === 0}
+ disabled={selectedFiles.length === 0 || selectTemp.length === 0 || isUploading}
onClick={submitData}
>
- 다운로드
+ {isUploading && <Loader2 />}다운로드
</Button>
</DialogFooter>
</DialogContent>
@@ -305,3 +333,17 @@ const updateReportTempList: UpdateReportTempList = async (
})
);
};
+
+const stringifyAllValues = (obj: any): any => {
+ if (Array.isArray(obj)) {
+ return obj.map((item) => stringifyAllValues(item));
+ } else if (typeof obj === "object" && obj !== null) {
+ const result: any = {};
+ for (const key in obj) {
+ result[key] = stringifyAllValues(obj[key]);
+ }
+ return result;
+ } else {
+ return obj !== null && obj !== undefined ? String(obj) : "";
+ }
+};