320 lines
9.7 KiB
JavaScript
320 lines
9.7 KiB
JavaScript
/**
|
|
* @swagger
|
|
* /api/file/generatepdf:
|
|
* post:
|
|
* tags: [Azure Storage]
|
|
* summary: Phase 2
|
|
* description: Create reps pdf from text field
|
|
* consumes:
|
|
* - application/json
|
|
* requestBody:
|
|
* name: PDF
|
|
* description: PDF content body
|
|
* required: true
|
|
* content:
|
|
* 'application/json':
|
|
* schema:
|
|
* type: object
|
|
* properties:
|
|
* representationType:
|
|
* type: string
|
|
* example: "Questionnaire"
|
|
* representationQuestion1:
|
|
* type: string
|
|
* example: "question 111111"
|
|
* representationQuestion2:
|
|
* type: string
|
|
* example: "question 232222"
|
|
* representationCapacity:
|
|
* type: string
|
|
* example: "yes"
|
|
* representationDocuments:
|
|
* type: array
|
|
* example: [{}]
|
|
* pinswg_name:
|
|
* type: string
|
|
* example: "2023-8-24-1692882853853--REP_Bond"
|
|
* containerID:
|
|
* type: string
|
|
* example: "cljzkgyev0006f9tl4pk6u171"
|
|
* appealType:
|
|
* type: integer
|
|
* example: 846040000
|
|
* incidentID:
|
|
* type: string
|
|
* example: "50b533aa-43f1-ec11-aade-00224800be9c"
|
|
* caseRef:
|
|
* type: string
|
|
* example: "CAS-00764-L0Q9W2"
|
|
* parameters:
|
|
* - name: container
|
|
* in: query
|
|
* required: true
|
|
* example: cljzkgyev0006f9tl4pk6u171
|
|
* schema:
|
|
* type: string
|
|
* - name: casefolderID
|
|
* in: query
|
|
* required: true
|
|
* example: CAS-00764-L0Q9W2
|
|
* schema:
|
|
* type: string
|
|
* - name: hash
|
|
* in: query
|
|
* required: true
|
|
* example: 530b67db992ea277a236790be05b2e49bdd9dd02e6d790cc1c25f96cf39687cb
|
|
* schema:
|
|
* type: string
|
|
|
|
*
|
|
* responses:
|
|
* 200:
|
|
* description: Success
|
|
*/
|
|
|
|
import {
|
|
createContainer,
|
|
getContainers,
|
|
getBlobs,
|
|
createRepBlob,
|
|
uploadFile,
|
|
uploadPDFRepFiles,
|
|
createRepPDFBlob,
|
|
} from "../../../actions/azurestorage";
|
|
import { hashAPIPath } from "../../../actions";
|
|
|
|
import ReactPDF, {
|
|
Document,
|
|
Page,
|
|
Text,
|
|
View,
|
|
StyleSheet,
|
|
PDFViewer,
|
|
} from "@react-pdf/renderer";
|
|
import middleware from "../middleware/middleware";
|
|
import nextConnect from "next-connect";
|
|
import fs from "fs";
|
|
import { EnforcementQuestionnaire_pdf } from "../../../components/pdftemplates/enforcement_pdf";
|
|
import { lpaQuestionnaire_pdf } from "../../../components/pdftemplates/lpaQuestionnaire_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";
|
|
import { consoleLogger } from "../../../actions";
|
|
//const ApiProxy = nextConnect();
|
|
// ApiProxy.use(middleware);
|
|
|
|
// ApiProxy.post(async (req, res) => {
|
|
|
|
export default async function handler(req, res) {
|
|
var checkHash = req.query.hash;
|
|
let reqBodyobj = req.body; //JSON.parse(req.body);
|
|
|
|
const cleanFilesList = (blobList) => {
|
|
let newblobList = blobList.filesList;
|
|
function removeNullObjects(arr) {
|
|
if (arr.length === 0) {
|
|
return arr;
|
|
}
|
|
return arr.filter((obj) => obj !== null);
|
|
}
|
|
|
|
function removeObjectsWithUndefinedKey(arr, key) {
|
|
if (arr.length === 0) {
|
|
return arr;
|
|
}
|
|
return arr.filter((obj) => obj[key] !== undefined);
|
|
}
|
|
|
|
function removeEmptyObjects(arr) {
|
|
if (arr.length === 0) {
|
|
return arr;
|
|
}
|
|
return arr.filter(
|
|
(obj) =>
|
|
obj &&
|
|
typeof obj === "object" &&
|
|
Object.keys(obj).length > 0
|
|
);
|
|
}
|
|
|
|
newblobList = removeEmptyObjects(newblobList);
|
|
newblobList = removeObjectsWithUndefinedKey(newblobList, "name");
|
|
newblobList = removeNullObjects(newblobList);
|
|
|
|
Object.assign(blobList, {
|
|
"filesList": newblobList,
|
|
});
|
|
|
|
return blobList;
|
|
};
|
|
|
|
reqBodyobj = reqBodyobj.hasOwnProperty("filesList")
|
|
? cleanFilesList(reqBodyobj)
|
|
: reqBodyobj;
|
|
|
|
console.log(
|
|
"//////////////////////\nreqBodyobj" +
|
|
req +
|
|
"\n//////////////////////\n"
|
|
);
|
|
console.log(
|
|
"//////////////////////\nreqBodyobj" +
|
|
JSON.stringify(req.body) +
|
|
"\n//////////////////////\n"
|
|
);
|
|
|
|
var containerID = reqBodyobj.containerID;
|
|
var casefolderID = reqBodyobj.casefolderID;
|
|
var caseRef = reqBodyobj.caseRef;
|
|
var representationType = reqBodyobj.representationType;
|
|
var repRaiser = reqBodyobj.lastname;
|
|
var localeSelect = reqBodyobj.locale;
|
|
//console.log("there are files:", Object.keys(req.files).length);
|
|
|
|
var checkquerypath = "/api/file/generatepdf";
|
|
|
|
//console.log("-------", checkHash);
|
|
//console.log(hashAPIPath(checkquerypath) == "?hash=" + checkHash);
|
|
//console.log(casefolderID, caseRef);
|
|
// Create Document Component
|
|
|
|
const MyDocument = (values) => {
|
|
console.log(values.docProps.locale);
|
|
switch (values.docProps.representationType) {
|
|
case "Questionnaire":
|
|
switch (values.docProps.appealType) {
|
|
case 846040005:
|
|
case 846040006:
|
|
case 846040007:
|
|
return EnforcementQuestionnaire_pdf(
|
|
values,
|
|
values.docProps.locale
|
|
);
|
|
default:
|
|
return lpaQuestionnaire_pdf(
|
|
values,
|
|
values.docProps.locale
|
|
);
|
|
}
|
|
|
|
return lpaQuestionnaire_pdf(values, values.docProps.locale);
|
|
break;
|
|
case "Final comments":
|
|
return finalComments_pdf(values, values.docProps.locale);
|
|
break;
|
|
case "Statement":
|
|
return statement_pdf(values, values.docProps.locale);
|
|
break;
|
|
case "Written statement":
|
|
return writtenStatement_pdf(values, values.docProps.locale);
|
|
break;
|
|
case "Impact":
|
|
return statement_pdf(values, values.docProps.locale);
|
|
break;
|
|
case "Other":
|
|
return other_pdf(values, values.docProps.locale);
|
|
break;
|
|
default:
|
|
return other_pdf(values, values.docProps.locale);
|
|
}
|
|
};
|
|
|
|
let repCapacity = "";
|
|
switch (reqBodyobj.representationCapacity) {
|
|
case "Appellant":
|
|
repCapacity = "APP";
|
|
break;
|
|
case "Agent":
|
|
repCapacity = "AGENT";
|
|
break;
|
|
case "Interested Party/Person":
|
|
repCapacity = "IP";
|
|
break;
|
|
case "Land Owner":
|
|
repCapacity = "LO";
|
|
break;
|
|
case "lpa":
|
|
case "LPA":
|
|
repCapacity = "LPA";
|
|
break;
|
|
|
|
default:
|
|
// code block
|
|
}
|
|
|
|
let repType = "";
|
|
switch (reqBodyobj.representationType) {
|
|
case "Statement":
|
|
repType = "Statement";
|
|
break;
|
|
case "Statement of common ground":
|
|
repType = "SCG";
|
|
break;
|
|
case "Written statement":
|
|
repType = "WS";
|
|
break;
|
|
case "Written statement of evidence":
|
|
repType = "WSE";
|
|
break;
|
|
case "Questionnaire":
|
|
repType = "Questionnaire";
|
|
break;
|
|
case "Final comments":
|
|
repType = "Comments";
|
|
break;
|
|
case "Local Impact Report":
|
|
repType = "Impact";
|
|
break;
|
|
|
|
case "Other":
|
|
repType = "OTHER";
|
|
break;
|
|
|
|
default:
|
|
// code block
|
|
}
|
|
|
|
//console.log(
|
|
// "///////////////////////////////////\n file created: \n" +
|
|
// process.cwd() +
|
|
// `tmp/${reqBodyobj.repfile_name}.pdf` +
|
|
// "\n folder:" +
|
|
// process.cwd() +
|
|
// "\n/////////////////////////"
|
|
// );
|
|
|
|
// umcomment to render pdf locally
|
|
// ReactPDF.render(
|
|
// <MyDocument docProps={reqBodyobj} />,
|
|
// process.cwd() + `/tmp/${reqBodyobj.repfile_name}.pdf`
|
|
// );
|
|
|
|
const renderedPDF = await ReactPDF.renderToStream(
|
|
<MyDocument docProps={reqBodyobj} />
|
|
);
|
|
|
|
await createRepPDFBlob(
|
|
renderedPDF,
|
|
containerID,
|
|
caseRef,
|
|
reqBodyobj.repfile_name
|
|
)
|
|
.then((data) => {
|
|
console.log(
|
|
"///////////////////////////////////\nrep pdf file created: " +
|
|
`${caseRef}/files/${reqBodyobj.repfile_name}.pdf`,
|
|
"\n/////////////////////////"
|
|
);
|
|
return res.status(200).json({
|
|
status: "success",
|
|
data: data,
|
|
path: `${caseRef}/${reqBodyobj.repfile_name}/files/${reqBodyobj.repfile_name}.pdf`,
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
consoleLogger(error);
|
|
res.status(400).json(error);
|
|
});
|
|
}
|