diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/docuSign/docuSignFns.ts | 2 | ||||
| -rw-r--r-- | lib/forms/services.ts | 61 | ||||
| -rw-r--r-- | lib/pdftron/serverSDK/createReport.ts | 83 | ||||
| -rw-r--r-- | lib/po/service.ts | 4 |
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({ |
