summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/docuSign/docuSignFns.ts2
-rw-r--r--lib/forms/services.ts61
-rw-r--r--lib/pdftron/serverSDK/createReport.ts83
-rw-r--r--lib/po/service.ts4
4 files changed, 147 insertions, 3 deletions
diff --git a/lib/docuSign/docuSignFns.ts b/lib/docuSign/docuSignFns.ts
index 662ff23a..e42babaa 100644
--- a/lib/docuSign/docuSignFns.ts
+++ b/lib/docuSign/docuSignFns.ts
@@ -103,7 +103,7 @@ export async function requestContractSign(
let accountInfo = await authenticate();
if (accountInfo) {
const { accessToken, basePath, apiAccountId } = accountInfo;
- console.log({ basePath });
+
const {
email: subEmail,
name: subConName,
diff --git a/lib/forms/services.ts b/lib/forms/services.ts
index ff21626c..22f10466 100644
--- a/lib/forms/services.ts
+++ b/lib/forms/services.ts
@@ -1,6 +1,7 @@
// lib/forms/services.ts
"use server";
+import { headers } from "next/headers";
import path from "path";
import fs from "fs/promises";
import { v4 as uuidv4 } from "uuid";
@@ -805,3 +806,63 @@ export async function uploadReportTemp(
});
}
}
+
+export const getOrigin = async (): Promise<string> => {
+ const headersList = await headers();
+ const host = headersList.get("host");
+ const proto = headersList.get("x-forwarded-proto") || "http"; // 기본값은 http
+ const origin = `${proto}://${host}`;
+
+ return origin;
+};
+
+export const getReportTempFileData = async (): Promise<{
+ fileName: string;
+ fileType: string;
+ base64: string;
+}> => {
+ const fileName = "sample_template_file.docx";
+
+ const tempFile = await fs.readFile(
+ `public/vendorFormReportSample/${fileName}`
+ );
+
+ return {
+ fileName,
+ fileType:
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ base64: tempFile.toString("base64"),
+ };
+};
+
+type deleteReportTempFile = (id: number) => Promise<{
+ result: boolean;
+ error?: any;
+}>;
+
+export const deleteReportTempFile: deleteReportTempFile = async (id) => {
+ try {
+ return db.transaction(async (tx) => {
+ const [targetTempFile] = await tx
+ .select()
+ .from(vendorDataReportTemps)
+ .where(eq(vendorDataReportTemps.id, id));
+
+ if (!targetTempFile) {
+ throw new Error("해당 Template File을 찾을 수 없습니다.");
+ }
+
+ await tx
+ .delete(vendorDataReportTemps)
+ .where(eq(vendorDataReportTemps.id, id));
+
+ const { filePath } = targetTempFile;
+
+ await fs.unlink("public" + filePath);
+
+ return { result: true };
+ });
+ } catch (err) {
+ return { result: false, error: (err as Error).message };
+ }
+};
diff --git a/lib/pdftron/serverSDK/createReport.ts b/lib/pdftron/serverSDK/createReport.ts
new file mode 100644
index 00000000..412ada87
--- /dev/null
+++ b/lib/pdftron/serverSDK/createReport.ts
@@ -0,0 +1,83 @@
+const { PDFNet } = require("@pdftron/pdfnet-node");
+
+type CreateReport = (
+ coverPage: Buffer,
+ reportTempPath: string,
+ reportDatas: {
+ [key: string]: any;
+ }[]
+) => Promise<{
+ result: boolean;
+ buffer?: ArrayBuffer;
+ error?: any;
+}>;
+
+export const createReport: CreateReport = async (
+ coverPage,
+ reportTempPath,
+ reportDatas
+) => {
+ const main = async () => {
+ await PDFNet.initialize(process.env.NEXT_PUBLIC_PDFTRON_SERVER_KEY);
+
+ const mainDoc = await PDFNet.PDFDoc.create();
+ const buf = await PDFNet.Convert.office2PDFBuffer(coverPage);
+ const coverPDFDoc = await PDFNet.PDFDoc.createFromBuffer(buf);
+
+ const options = new PDFNet.Convert.OfficeToPDFOptions();
+
+ await mainDoc.insertPages(
+ (await mainDoc.getPageCount()) + 1,
+ coverPDFDoc,
+ 1,
+ await coverPDFDoc.getPageCount(),
+ PDFNet.PDFDoc.InsertFlag.e_none
+ );
+
+ for (const reportData of reportDatas) {
+ const resportDataJson = JSON.stringify(reportData);
+
+ const templateDoc = await PDFNet.Convert.createOfficeTemplateWithPath(
+ "public" + reportTempPath,
+ options
+ );
+
+ const pdfdoc = await templateDoc.fillTemplateJson(resportDataJson);
+
+ await mainDoc.insertPages(
+ (await mainDoc.getPageCount()) + 1,
+ pdfdoc,
+ 1,
+ await pdfdoc.getPageCount(),
+ PDFNet.PDFDoc.InsertFlag.e_none
+ );
+ }
+
+ // await mainDoc.save("test1.pdf", PDFNet.SDFDoc.SaveOptions.e_linearized);
+
+ const buffer = await mainDoc.saveMemoryBuffer(
+ PDFNet.SDFDoc.SaveOptions.e_linearized
+ );
+
+ return {
+ result: true,
+ buffer,
+ };
+ };
+
+ const result = await PDFNet.runWithCleanup(
+ main,
+ process.env.NEXT_PUBLIC_PDFTRON_SERVER_KEY
+ )
+ .catch((err: any) => {
+ return {
+ result: false,
+ error: err,
+ };
+ })
+ .then(async (data: any) => {
+ return data;
+ });
+
+ return result;
+};
diff --git a/lib/po/service.ts b/lib/po/service.ts
index a6c53d9c..f62b57fa 100644
--- a/lib/po/service.ts
+++ b/lib/po/service.ts
@@ -328,7 +328,6 @@ Remarks:${contract.remarks}`,
const { success: sendDocuSignResult, envelopeId } = sendDocuSign;
-
await tx
.update(contracts)
.set({
@@ -348,7 +347,8 @@ Remarks:${contract.remarks}`,
const fileName = `${contractNo}-signature.pdf`;
const ext = path.extname(fileName);
const uniqueName = uuidv4() + ext;
- // Create a single envelope for all signers
+
+ // Create a single envelope for all signers
const [newEnvelope] = await tx
.insert(contractEnvelopes)
.values({