create rep pdf tweaks prior to multi types matrix

This commit is contained in:
2023-10-11 13:51:35 +01:00
parent 1f669a5efe
commit f53faf47e2
10 changed files with 1824 additions and 799 deletions
+47 -1
View File
@@ -428,6 +428,52 @@ export const uploadRepFiles = async (
); );
}; };
export const uploadPDFRepFiles = async (
formContent,
containerName,
foldername,
repType
) => {
const containerToken = await createContainerSas(containerName);
const sasUrl = `${STORAGE_PATH}/${containerName}?${containerToken}`;
const containerClient = new ContainerClient(sasUrl);
const files = formContent;
console.log(formContent, containerName, foldername);
console.log(
"rep pdf files...",
files,
Object.keys(files).length,
foldername
);
// console.log(`files[${prop}] = ${files[prop][0].size}`);
console.log(foldername + "/files/" + formContent.split("tmp/")[1]);
const blobName = foldername + "/" + formContent.split("tmp/")[1];
console.log(blobName);
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
const uploadBlobResponse = await blockBlobClient.uploadFile(formContent);
const tags = {
containerid: containerName,
caseID: foldername.split("/")[0],
documentType: repType,
blobType: "RepresentationPDF",
};
console.log("the tags:", tags);
const withTags = await blockBlobClient.setTags(tags);
const withMeta = await blockBlobClient.setMetadata(tags);
console.log(
`Uploaded block blob ${files} successfully`,
uploadBlobResponse.requestId
);
};
export const uploadPDFCaseFiles = async ( export const uploadPDFCaseFiles = async (
formContent, formContent,
containerName, containerName,
@@ -821,7 +867,7 @@ export const getRepsBlobs = async (containerName) => {
listOptions listOptions
)) { )) {
const blobClient = await containerClient.getBlobClient(blob.name); const blobClient = await containerClient.getBlobClient(blob.name);
console.log(blob); console.log("getreps blob blob", blob);
blob.name.split("/")[2].indexOf("_rep.json") > 0 && blob.name.split("/")[2].indexOf("_rep.json") > 0 &&
blob.name.split("/")[2].indexOf("undefined") < 0 && blob.name.split("/")[2].indexOf("undefined") < 0 &&
blobObj.push({ blobObj.push({
+51 -35
View File
@@ -432,40 +432,56 @@ let MakeRepresentation = (props) => {
detailsObj = detailsObj[0]; detailsObj = detailsObj[0];
Object.assign(values, { console.log(
"containerID": props.props.accountDetails.containerID, "Has data from form:",
"appealType": props.props.currentView.caseReference.appealType, formObj.hasOwnProperty("representationForm") &&
"incidentID": props.props.currentView.caseReference.incidentid, formObj.representationForm.hasOwnProperty("values")
"caseRef": props.props.currentView.caseReference.currentReference, );
"pinswg_name":
props.props.currentView.caseReference.currentReference, formObj.hasOwnProperty("representationForm") &&
"firstname": props.props.accountDetails.accountDetails.firstname, !router.query.hasOwnProperty("state") &&
"lastname": props.props.accountDetails.accountDetails.lastname, formObj.representationForm.hasOwnProperty("values") &&
"emailAddress": (Object.assign(values, formObj.representationForm.values),
props.props.accountDetails.accountDetails.emailaddress1, Object.assign(values, {
"siteAddress": "containerID": props.props.accountDetails.containerID,
detailsObj.pinswg_siteaddressline1 + "appealType": props.props.currentView.caseReference.appealType,
" " + "incidentID": props.props.currentView.caseReference.incidentid,
detailsObj.pinswg_siteaddressline2 + "caseRef":
" " + props.props.currentView.caseReference.currentReference,
detailsObj.pinswg_siteaddresstown + "pinswg_name":
" " + props.props.currentView.caseReference.currentReference,
detailsObj.pinswg_siteaddresspostcode, "firstname":
"pinswg_siteaddressline1": detailsObj.pinswg_siteaddressline1, props.props.accountDetails.accountDetails.firstname,
"pinswg_siteaddressline2": detailsObj.pinswg_siteaddressline2, "lastname": props.props.accountDetails.accountDetails.lastname,
"pinswg_siteaddresstown": detailsObj.pinswg_siteaddresstown, "emailAddress":
"pinswg_siteaddresspostcode": detailsObj.pinswg_siteaddresspostcode, props.props.accountDetails.accountDetails.emailaddress1,
"_pinswg_appellant_value": detailsObj["_pinswg_appellant_value"], "siteAddress":
"_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue": detailsObj.pinswg_siteaddressline1 +
detailsObj[ " " +
"_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue" detailsObj.pinswg_siteaddressline2 +
], " " +
"representationCapacity": router.query.hasOwnProperty("state") detailsObj.pinswg_siteaddresstown +
? router.query.state == "edit" " " +
? props.props.currentView.representationCapacity detailsObj.pinswg_siteaddresspostcode,
: values.representationCapacity "pinswg_siteaddressline1": detailsObj.pinswg_siteaddressline1,
: values.representationCapacity, "pinswg_siteaddressline2": detailsObj.pinswg_siteaddressline2,
}); "pinswg_siteaddresstown": detailsObj.pinswg_siteaddresstown,
"pinswg_siteaddresspostcode":
detailsObj.pinswg_siteaddresspostcode,
"_pinswg_appellant_value":
detailsObj["_pinswg_appellant_value"],
"_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue":
detailsObj[
"_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue"
],
"representationCapacity": router.query.hasOwnProperty("state")
? router.query.state == "edit"
? props.props.currentView.representationCapacity
: values.representationCapacity
: isLPA
? "lpa"
: values.representationCapacity,
}));
console.log(values); console.log(values);
currentView.representationSubmit != true currentView.representationSubmit != true
? _.isEmpty(currentView.representationCapacity) ? _.isEmpty(currentView.representationCapacity)
@@ -610,7 +626,7 @@ let MakeRepresentation = (props) => {
}; };
const mapStateToProps = (state) => { const mapStateToProps = (state) => {
console.log("\\\\\\\\\\\\\\\\\\\\\\\\\\\\/nin map state", state); console.log("\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \n in map state", state);
return { return {
search: state.search, search: state.search,
File diff suppressed because it is too large Load Diff
+348
View File
@@ -0,0 +1,348 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import xpath from "xpath";
import jsonpath from "jsonpath";
import { useSelector, shallowEqual, connect } from "react-redux";
import fieldLookup from "../../data/crmfieldlookuptranslations.json";
import {
getFormCollectionByID,
getPickListLabel,
getRadioLabel,
} from "../../components/utils";
import ReactPDF, {
Document,
Page,
Text,
View,
Image,
StyleSheet,
PDFViewer,
Font,
} from "@react-pdf/renderer";
import _ from "lodash";
import { DOMParser, XMLSerializer } from "@xmldom/xmldom";
export const AppealRow_pdf = (props) => {
let { t } = useTranslation();
// const router = useRouter();
// console.log(router);
// const { locale } = router;
const {
formXML,
whichSection,
sectionCount,
onSubmit,
updateCurrentSection,
mandatoryFieldsData,
} = props;
const styles = StyleSheet.create({
page: {
backgroundColor: "white",
padding: 20,
fontSize: 16,
paddingBottom: 50,
},
header: {
fontSize: 25,
fontFamily: "Helvetica",
flexDirection: "row",
justifyContent: "space-between",
},
subHeader: {
fontSize: 20,
},
logoImage: { width: "200pt" },
questionBullet: { width: "5%", fontSize: 12 },
questionText: { width: "30%", fontSize: 12 },
questionTextMid: { width: "80%", fontSize: 12 },
questionTextWide: { width: "95%", fontSize: 12, marginBottom: 5 },
questionAnswer: {
color: "#757575",
width: "65%",
fontSize: 12,
padding: 5,
border: 1,
borderColor: "#eee",
paddingLeft: 10,
backgroundColor: "white",
},
questionAnswerMid: {
color: "#757575",
width: "20%",
fontSize: 12,
padding: 5,
border: 1,
borderColor: "#eee",
paddingLeft: 10,
backgroundColor: "white",
},
questionAnswerWide: {
color: "#757575",
width: "95%",
fontSize: 12,
marginLeft: "5%",
border: 1,
borderColor: "#eee",
backgroundColor: "white",
padding: 5,
},
sectionContainer: {
backgroundColor: "#F8F8F8",
padding: 10,
marginTop: 20,
fontSize: 15,
},
pageNumber: {
position: "absolute",
fontSize: 12,
bottom: 20,
left: 0,
right: 0,
textAlign: "center",
color: "grey",
},
richArea: {
fontSize: 12,
color: "red",
flexDirection: "column",
},
});
const parser = new DOMParser();
var doc = parser.parseFromString(formXML, "text/xml");
var rowXML = xpath.select(
"/form/tabs/tab[" +
whichSection +
"]/columns//sections/section/rows/row",
doc
);
//console.log(rowXML);
function formatDate(dateObj) {
var m = new Date(dateObj);
var dateString;
dateObj != null
? (dateString =
("0" + m.getDate()).slice(-2) +
"/" +
("0" + (m.getMonth() + 1)).slice(-2) +
"/" +
m.getFullYear())
: (dateString = "");
return dateString;
}
const FieldsTranslations = (label) => {
// const router = useRouter();
// const { locale } = router;
const { appealtypes } = router.query;
let formObj = jsonpath.query(fieldLookup, "$['" + appealtypes + "']");
// let labelTrans =
// router.locale == "cy"
// ? jsonpath.query(
// formObj,
// "$..[?(@.value=='" + label + "')].value_cy"
// )
// : label;
let labelTrans = label;
return labelTrans;
};
return (
<>
{Object.keys(rowXML).map((key, index) => {
var newRowXML = new XMLSerializer().serializeToString(
rowXML[key]
);
//console.log(newRowXML);
var doc = parser.parseFromString(newRowXML, "text/xml");
var rows = xpath.select("//label/@description", doc);
var fieldtype = xpath.select("//@classid", doc);
var datafieldname = xpath.select("//@datafieldname", doc);
return (
<>
{(() => {
switch (fieldtype[0].value) {
case "{5B773807-9FB2-42db-97C3-7A91EFF8ADFF}":
return (
<View
wrap={false}
style={{
flexDirection: "row",
marginBottom: 10,
}}
>
<Text
style={styles.questionTextWide}
>
{/* {FieldsTranslations(rows[0].value)} */}
{rows[0].value}
</Text>
<Text
style={
styles.questionAnswerWide
}
>
{formatDate(
props.props[
datafieldname[0].value
]
)}{" "}
</Text>
</View>
);
break;
case "{E0DECE4B-6FC8-4a8f-A065-082708572369}":
return (
<View
style={{
flexDirection: "column",
marginBottom: 10,
}}
>
<View
wrap={false}
style={{
flexDirection: "row",
marginBottom: 10,
}}
>
<Text
style={
styles.questionTextMid
}
>
{rows[0].value}
</Text>
</View>
<View
style={
styles.questionAnswerWide
}
>
<Text>
{
props.props[
datafieldname[0]
.value
]
}
</Text>
</View>
</View>
);
break;
case "{07FAC785-CD58-4f9f-ABB3-4B7DDC6ED5ED}":
return (
<View
style={{
flexDirection: "column",
marginBottom: 10,
}}
>
<View
wrap={false}
style={{
flexDirection: "row",
marginBottom: 10,
}}
>
<Text
style={styles.questionText}
>
{rows[0].value}
</Text>
</View>
<View style={styles.questionAnswer}>
<Text>
{
props.props[
datafieldname[0]
.value
]
}
</Text>
</View>
</View>
);
break;
default:
return (
<View
wrap={false}
style={{
flexDirection: "row",
marginBottom: 10,
}}
>
<Text style={styles.questionText}>
{/* {FieldsTranslations(rows[0].value)} */}
{rows[0].value}
</Text>
<Text
style={
styles.questionAnswerWide
}
>
{
props.props[
datafieldname[0].value
]
}
</Text>
</View>
);
break;
}
})()}
{/* <Text className="govuk-summary-list__value">
{fieldtype[0].value ==
"{5B773807-9FB2-42db-97C3-7A91EFF8ADFF}"
? formatDate(
props.props.values[datafieldname[0].value]
)
: fieldtype[0].value ==
"{3EF39988-22BB-4f0b-BBBE-64B5A3748AEE}"
? getPickListLabel(
props.props.formData.pickListData,
datafieldname[0].value,
props.props.values[datafieldname[0].value]
)
: fieldtype[0].value ==
"{07FAC785-CD58-4f9f-ABB3-4B7DDC6ED5ED}"
? getRadioLabel(
props.props.formData.pickListData,
datafieldname[0].value,
props.props.values[datafieldname[0].value]
)
: fieldtype[0].value ==
"{16D63FD6-119B-4353-BDCA-18358721C3FE}"
? "ssss"
: props.props.values[datafieldname[0].value]}
</Text> */}
</>
);
})}
</>
);
};
@@ -9,6 +9,7 @@ import ReactPDF, {
Font, Font,
} from "@react-pdf/renderer"; } from "@react-pdf/renderer";
import Html from "react-pdf-html"; import Html from "react-pdf-html";
import { getFormCollectionByID } from "../../components/utils";
const styles = StyleSheet.create({ const styles = StyleSheet.create({
page: { page: {
@@ -96,6 +97,7 @@ export const lpaQuestionnaire_pdf = ({ docProps }) => {
return dd + "/" + mm + "/" + yyyy; return dd + "/" + mm + "/" + yyyy;
} }
let values = docProps; let values = docProps;
let appealTypeValue = getFormCollectionByID(values.appealType);
console.log("sdffhjdhjdjdgkj: ", values.procedureType); console.log("sdffhjdhjdjdgkj: ", values.procedureType);
return ( return (
+30 -19
View File
@@ -103,7 +103,7 @@ export const other_pdf = ({ docProps }) => {
let datestr = values.pinswg_name.split("-"); let datestr = values.pinswg_name.split("-");
let signedDate = datestr[2] + "/" + datestr[1] + "/" + datestr[0]; let signedDate = datestr[2] + "/" + datestr[1] + "/" + datestr[0];
let appealTypeValue = getFormCollectionByID(values.appealType); const isLPA = values.representationCapacity == "lpa" ? true : false;
return ( return (
<Document> <Document>
@@ -128,9 +128,13 @@ export const other_pdf = ({ docProps }) => {
fontFamily: "Helvetica-Bold", fontFamily: "Helvetica-Bold",
}} }}
> >
For Planning, Conservation area, Listed For Planning Appeal, Planning Conditions,
Building and Advertisement Listed Building and Conservation Area
applications/appeals Appeal, Lawful Development Appeal, Planning
Obligations, Community Infrastructure Levy,
Enforcement Notice appeal, Enforcement
Listed Building Appeal, Maintenance of land,
Called in Application applications/appeals
</Text> </Text>
</View> </View>
</View> </View>
@@ -199,7 +203,10 @@ export const other_pdf = ({ docProps }) => {
Case Type: Case Type:
</Text> </Text>
<Text style={styles.questionAnswer}> <Text style={styles.questionAnswer}>
{appealTypeValue.value} {
getFormCollectionByID(values.appealType)
.value
}
</Text> </Text>
</View> </View>
</View> </View>
@@ -342,20 +349,24 @@ export const other_pdf = ({ docProps }) => {
</Text> </Text>
</View> </View>
</View> </View>
<View {isLPA && (
wrap={false} <View
style={{ wrap={false}
flexDirection: "row", style={{
marginBottom: 10, flexDirection: "row",
}} marginBottom: 10,
> }}
<Text style={{ width: "18%", fontSize: 12 }}> >
On behalf of: <Text
</Text> style={{ width: "18%", fontSize: 12 }}
<Text style={styles.questionAnswerWide}> >
{values.representationCapacity} On behalf of:
</Text> </Text>
</View> <Text style={styles.questionAnswerWide}>
{values.representationCapacity}
</Text>
</View>
)}
</View> </View>
</View> </View>
</View> </View>
@@ -0,0 +1,362 @@
import ReactPDF, {
Document,
Page,
Text,
View,
Image,
StyleSheet,
PDFViewer,
Font,
} from "@react-pdf/renderer";
import { createElement } from "react";
import Html from "react-pdf-html";
import { getFormCollectionByID } from "../utils";
import fs from "fs";
import xpath from "xpath";
import renderers, { renderBlock } from "react-pdf-html/dist/renderers";
import _ from "lodash";
import { DOMParser, XMLSerializer } from "@xmldom/xmldom";
import { AppealRow_pdf } from "./appealRow_pdf";
const styles = StyleSheet.create({
page: {
backgroundColor: "white",
padding: 20,
fontSize: 16,
paddingBottom: 50,
},
header: {
fontSize: 25,
fontFamily: "Helvetica",
flexDirection: "row",
justifyContent: "space-between",
},
subHeader: {
fontSize: 20,
},
logoImage: { width: "200pt" },
questionBullet: { width: "5%", fontSize: 12 },
questionText: { width: "30%", fontSize: 12 },
questionTextMid: { width: "80%", fontSize: 12 },
questionTextWide: { width: "95%", fontSize: 12, marginBottom: 5 },
questionAnswer: {
color: "#757575",
width: "65%",
fontSize: 12,
padding: 5,
border: 1,
borderColor: "#eee",
paddingLeft: 10,
backgroundColor: "white",
},
questionAnswerMid: {
color: "#757575",
width: "20%",
fontSize: 12,
padding: 5,
border: 1,
borderColor: "#eee",
paddingLeft: 10,
backgroundColor: "white",
},
questionAnswerWide: {
color: "#757575",
width: "95%",
fontSize: 12,
marginLeft: "5%",
border: 1,
borderColor: "#eee",
backgroundColor: "white",
padding: 5,
},
sectionContainer: {
backgroundColor: "#F8F8F8",
padding: 10,
marginTop: 20,
fontSize: 15,
},
pageNumber: {
position: "absolute",
fontSize: 12,
bottom: 20,
left: 0,
right: 0,
textAlign: "center",
color: "grey",
},
richArea: {
fontSize: 12,
color: "red",
flexDirection: "column",
},
});
export const planningappeals78_pdf = ({ docProps }) => {
//console.log("----", docProps);
function formatDates(dateObj) {
var dateObj = new Date(dateObj);
var dd = String(dateObj.getDate()).padStart(2, "0");
var mm = String(dateObj.getMonth() + 1).padStart(2, "0"); //January is 0!
var yyyy = dateObj.getFullYear();
return dd + "/" + mm + "/" + yyyy;
}
let values = docProps;
let datestr = values.pinswg_name.split("-");
let signedDate = datestr[2] + "/" + datestr[1] + "/" + datestr[0];
let appealTypeValue = getFormCollectionByID(values.pinswg_appealcasetype);
var path = require("path");
const configDirectory = path.resolve(process.cwd(), "data/formsxml");
var xmlStr = fs.readFileSync(
path.join(configDirectory, "planningappeals78" + ".xml"),
"utf8"
);
xmlStr = xmlStr.replace(/\t/g, "");
xmlStr = xmlStr.replace(/\n/g, "");
xmlStr = xmlStr.replace(/> <"/g, "><");
xmlStr = xmlStr.toString();
console.log(xmlStr);
const parser = new DOMParser();
var doc = parser.parseFromString(xmlStr, "text/xml");
var titles = xpath.select(
"//form/tabs/tab[*]/labels/label/@description",
doc
);
var rowXML = xpath.select(
"/form/tabs/tab[*]/columns//sections/section/rows/row",
doc
);
var titleList = xpath.select(
"//form/tabs/tab[*]/labels/label/@description",
doc
);
//console.log(titles);
return (
<Document>
<Page size="A4" style={styles.page} wrap>
<View style={{ padding: 20 }}>
<View style={styles.header}>
<View>
<Text
style={{
width: "60%",
fontFamily: "Helvetica-Bold",
}}
>
Planning Appeals s78
</Text>
<View>
<Text
style={{
width: "60%",
fontSize: 15,
marginTop: 20,
fontFamily: "Helvetica-Bold",
}}
>
For Planning, Conservation area, Listed
Building and Advertisement
applications/appeals
</Text>
</View>
</View>
<Image
style={styles.logoImage}
src="public/assets/images/pedw_logo.png"
/>
</View>
<View style={styles.section}>
<View
style={{
marginTop: 10,
fontFamily: "Helvetica-Bold",
}}
>
<Text style={{ fontSize: 14 }}>Case details</Text>
</View>
<View style={styles.sectionContainer}>
<View
wrap={false}
style={{
flexDirection: "row",
marginBottom: 10,
}}
>
<Text style={styles.questionBullet}>1.</Text>
<Text style={styles.questionText}>
PEDW reference:
</Text>
<Text style={styles.questionAnswer}>
{values.caseRef}
</Text>
</View>
<View
wrap={false}
style={{
flexDirection: "row",
marginBottom: 10,
}}
></View>
<View
wrap={false}
style={{
flexDirection: "row",
marginBottom: 10,
}}
>
<Text style={styles.questionBullet}>3.</Text>
<Text style={styles.questionText}>
Site address/grid ref:
</Text>
<Text style={styles.questionAnswer}>
{values.siteAddress}
</Text>
</View>
<View
wrap={false}
style={{
flexDirection: "row",
marginBottom: 10,
}}
>
<Text style={styles.questionBullet}>4.</Text>
<Text style={styles.questionText}>
Case Type:
</Text>
<Text style={styles.questionAnswer}>
{appealTypeValue.value}
</Text>
</View>
</View>
</View>
{Object.keys(titles).map((key) => (
<View key={key}>
<View
style={{
marginTop: 10,
fontFamily: "Helvetica-Bold",
}}
>
<Text style={{ fontSize: 14 }}>
{parseInt(key) + 1} {titles[key].value}
</Text>
<View style={styles.sectionContainer}>
<View
wrap={false}
style={{
flexDirection: "row",
marginBottom: 10,
}}
>
<View
style={{
flexDirection: "column",
marginBottom: 10,
}}
>
<AppealRow_pdf
formXML={xmlStr}
whichSection={parseInt(key) + 1}
sectionCount={key}
props={docProps}
key={key}
mandatoryFieldsData={null}
/>
</View>
</View>
</View>
</View>
</View>
))}
<View>
<View
style={{
marginTop: 10,
fontFamily: "Helvetica-Bold",
}}
>
<Text style={{ fontSize: 14 }}>
Supporting documents
</Text>
</View>
<View style={styles.sectionContainer}>
<View
wrap={false}
style={{
flexDirection: "row",
marginBottom: 10,
}}
>
<Text style={styles.questionBullet}>11.</Text>
<Text style={styles.questionText}>
List of attached files
</Text>
<View
style={[
styles.questionAnswer,
{ flexDirection: "column" },
]}
>
{values.hasOwnProperty("filesList") &&
values.filesList.map(function (p) {
return (
<View
style={{
flexDirection: "row",
marginBottom: 4,
}}
>
<Text
styles={
styles.questionTextMid
}
>
{p.name} - {p.size}
</Text>
</View>
);
})}
</View>
</View>
</View>
</View>
</View>
<Text
style={styles.pageNumber}
render={({ pageNumber, totalPages }) =>
`${pageNumber} / ${totalPages}`
}
fixed
/>
<View
fixed
style={{
position: "absolute",
top: 20,
left: 20,
bottom: 20,
right: 20,
border: 1,
borderColor: "#eee",
padding: 20,
paddingTop: 30,
height: "100%",
}}
></View>
</Page>
</Document>
);
};
+1
View File
@@ -22,6 +22,7 @@
"@prisma/client": "^5.0.0", "@prisma/client": "^5.0.0",
"@react-pdf/renderer": "^3.1.12", "@react-pdf/renderer": "^3.1.12",
"@redux-devtools/extension": "^3.2.5", "@redux-devtools/extension": "^3.2.5",
"@xmldom/xmldom": "^0.8.10",
"applicationinsights": "^2.2.0", "applicationinsights": "^2.2.0",
"axios": "^0.24.0", "axios": "^0.24.0",
"compression": "^1.7.4", "compression": "^1.7.4",
+211
View File
@@ -0,0 +1,211 @@
/**
* @swagger
* /api/file/generateappealpdf:
* 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,
uploadPDFAppealFiles,
downloadProgressFile,
getProgressBlobs,
} 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 { 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 ApiProxy = nextConnect();
// ApiProxy.use(middleware);
// ApiProxy.post(async (req, res) => {
export default async function handler(req, res) {
var checkHash = req.query.hash;
let appealBodyObj = req.body; //JSON.parse(req.body);
console.log(
"//////////////////////\nappealBodyObj" +
req +
"\n//////////////////////\n"
);
console.log(
"//////////////////////\nappealBodyObj" +
req.body +
"\n//////////////////////\n"
);
var containerID = req.query.containerID;
var casefolderID = req.query.casefolderID;
var caseRef = req.query.caseRef;
//console.log("there are files:", Object.keys(req.files).length);
var checkquerypath = "/api/file/generateappealpdf";
//console.log("-------", checkHash);
// console.log(hashAPIPath(checkquerypath) == "?hash=" + checkHash);
console.log(casefolderID, caseRef);
// Create Document Component
const MyDocument = (values) => {
switch (values.docProps.pinswg_appealcasetype) {
case "846040000":
return planningappeals78_pdf(values);
break;
case "846040025":
return listedbuildingandconservationareaconsen_pdf(values);
break;
case "846040004":
return householderappealhas_pdf(values);
break;
case "846040018":
return adverts_pdf(values);
break;
case "846040024":
return nonvalidation_pdf(values);
break;
case "846040005":
return enforcement_pdf(values);
break;
case "846040017":
return highhedgestpo_pdf(values);
break;
default:
return other_pdf(values);
}
};
const blobProgress = await getProgressBlobs(containerID, casefolderID).then(
(data) => {
console.log("Progress blob path:", data);
return downloadProgressFile(containerID, data.path, casefolderID);
}
);
console.log(blobProgress);
//if (hashAPIPath(checkquerypath) == "?hash=" + checkHash) {
// //createContainer(containerID).then((containerName) => {
// console.log("does this get folder name:", containerID, casefolderID);
console.log(
"///////////////////////////////////\n file created: \n" +
`tmp/${blobProgress.pinswg_name}.pdf` +
"\n/////////////////////////"
);
// createRepBlob(req.body, containerID, caseRef);
ReactPDF.render(
<MyDocument docProps={blobProgress} />,
`tmp/${blobProgress.pinswg_name}.pdf`
);
// uploadPDFAppealFiles(
// `tmp/${appealBodyObj.repfile_name}.pdf`,
// containerID,
// caseRef + "/" + appealBodyObj.pinswg_name
// );
// to do upload file to storage account
// then remove from local folder
// fs.unlinkSync( `tmp/${appealBodyObj.repfile_name}.pdf`,);
return res.status(200).json({
data: "success",
path: `tmp/${blobProgress.pinswg_name}.pdf`,
});
// } else {
// return res.status(400).json();
// }
}
+2 -25
View File
@@ -207,38 +207,18 @@ export default function handler(req, res) {
// code block // code block
} }
// const repDate = new Date();
// let day = ("0" + repDate.getDate()).slice(-2);
// let month = ("0" + (repDate.getMonth() + 1)).slice(-2);
// let year = repDate.getFullYear();
// let time =
// ("0" + repDate.getHours()).slice(-2) +
// "" +
// ("0" + repDate.getMinutes()).slice(-2);
// let repDateStamp = "";
// repDateStamp = year + "" + month + day; //+ "-" + time;
//console.log(reqBodyobj);
//if (hashAPIPath(checkquerypath) == "?hash=" + checkHash) {
// //createContainer(containerID).then((containerName) => {
// console.log("does this get folder name:", containerID, casefolderID);
console.log( console.log(
"///////////////////////////////////\n file created: \n" + "///////////////////////////////////\n file created: \n" +
`tmp/${reqBodyobj.repfile_name}.pdf` + `tmp/${reqBodyobj.repfile_name}.pdf` +
"\n/////////////////////////" "\n/////////////////////////"
); );
// createRepBlob(req.body, containerID, caseRef);
ReactPDF.render( ReactPDF.render(
<MyDocument docProps={reqBodyobj} />, <MyDocument docProps={reqBodyobj} />,
`tmp/${reqBodyobj.repfile_name}.pdf` `tmp/${reqBodyobj.repfile_name}.pdf`
); );
// upload file to storage account
uploadPDFRepFiles( uploadPDFRepFiles(
`tmp/${reqBodyobj.repfile_name}.pdf`, `tmp/${reqBodyobj.repfile_name}.pdf`,
containerID, containerID,
@@ -246,10 +226,7 @@ export default function handler(req, res) {
repType repType
); );
// to do upload file to storage account // remove from local folder
// then remove from local folder
// fs.unlinkSync( `tmp/${reqBodyobj.repfile_name}.pdf`,); // fs.unlinkSync( `tmp/${reqBodyobj.repfile_name}.pdf`,);
return res.status(200).json({ return res.status(200).json({