import { createContainer, getContainers, getBlobs, createRepBlob, uploadFile, uploadPDFAppealFiles, downloadProgressFile, getProgressBlobs, getTempCaseBlob, createAppealPDFBlob, } from "../../../actions/azurestorage"; import { hashAPIPath, getSearchDocumentDetails, getCaseByID, getPortalModuleDetails, getAppealPDFDocs, } from "../../../actions"; import { getFormCollectionByID } from "../../../components/utils"; import ReactPDF, { Document, Page, Text, View, StyleSheet, PDFViewer, pdf, } from "@react-pdf/renderer"; import middleware from "../middleware/middleware"; import nextConnect from "next-connect"; import fs from "fs"; import path from "path"; import { getPickLists } from "../../../actions"; import { planningappeals78_pdf } from "../../../components/pdftemplates/planningappeals78_pdf"; import { finalComments_pdf } from "../../../components/pdftemplates/finalComments_pdf"; import { statement_pdf } from "../../../components/pdftemplates/statement_pdf"; import { writtenStatement_pdf } from "../../../components/pdftemplates/writtenStatement_pdf"; import { other_pdf } from "../../../components/pdftemplates/other_pdf"; const getDetails = (resultsObj, detailsType) => { if (!Array.isArray(resultsObj)) { console.warn("getDetails: resultsObj is not an array"); return Promise.resolve([]); } const detailsPromises = resultsObj .filter((searchDetail) => searchDetail.pinswg_appealcasetype != null) .map((searchDetail) => { const caseID = searchDetail.ticketnumber; const appealType = searchDetail.pinswg_appealcasetype; const form = getFormCollectionByID(appealType); if (!form) { console.warn("No form found for appeal type:", appealType); return null; } return getPortalModuleDetails(form.LogicalCollectionName, caseID); }) .filter(Boolean); // Remove any `null` if form not found return Promise.all(detailsPromises); }; export default async function handler(req, res) { const incidentid = req.body?.docProps; if (!incidentid) return res.status(400).send("Missing incident ID"); const caseObj = await getCaseByID(incidentid); if (!Array.isArray(caseObj) || caseObj.length === 0) return res.status(404).send("Case not found"); const caseDetailsObj = await getDetails(caseObj, "myCases"); const fileList = (await getAppealPDFDocs(incidentid)) || []; // Inject into the first item in `value` array if (caseDetailsObj[0]?.value?.[0]) { caseDetailsObj[0].value[0].pinswg_developmentdescription = caseObj[0].description; caseDetailsObj[0].value[0].caseObj = caseObj[0]; caseDetailsObj[0].value[0].filesList = fileList; } const whichForm = getFormCollectionByID(caseObj[0].pinswg_appealcasetype); const pickListData = await getPickLists(whichForm.UrlName); const appealTypeMap = { 846040000: planningappeals78_pdf, 846040004: planningappeals78_pdf, }; //console.log(caseDetailsObj[0].value[0]); const MyDocument = (values) => { const type = caseObj[0].pinswg_appealcasetype; const renderDocument = appealTypeMap[type] || other_pdf; return renderDocument(values); }; const pdfComponent = MyDocument({ docProps: caseDetailsObj[0].value[0], pickListData, }); const pdfBuffer = await pdf(pdfComponent).toBuffer(); const repDate = new Date(); const formattedDate = repDate.toISOString().split("T")[0]; res.setHeader("Content-Type", "application/pdf"); res.setHeader( "Content-Disposition", `attachment; filename=${formattedDate}_-_Appeal_Form.pdf` ); res.send(pdfBuffer); }