import ReactPDF, { Document, Page, Text, View, Image, StyleSheet, PDFViewer, Font } from "@react-pdf/renderer"; import Html from "react-pdf-html"; import { getFormCollectionByID, bytesToSize } from "../utils"; import fs from "fs"; import xpath from "xpath"; import _ from "lodash"; import { DOMParser, XMLSerializer } from "@xmldom/xmldom"; import { AppealRow_pdf } from "./appealRow_pdf"; import transLookupCY from "../../locales/cy/newappeal.json"; import transLookupEN from "../../locales/en/newappeal.json"; import transLookup from "../../data/lookuptranslations.json"; import fieldLookup from "../../data/crmfieldlookuptranslations.json"; import { JSONPath as jsonpath } from "jsonpath-plus"; import resolveCrmDisplayValue from "../../lib/i18n/crmDisplay/resolveCrmDisplayValue"; const getTrans = (locale, key) => { let jsonQuery = `$.${key}`; let jsonObj = locale == "cy" ? transLookupCY : transLookupEN; //console.log(locale, jsonObj[key]); return jsonObj[key]; }; 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: "35%", fontSize: 12, fontFamily: "Helvetica-Bold" }, 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: "100%", 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, flexDirection: "column" } }); export const planningappeals78_pdf = ({ docProps, pickListData }) => { //console.log("----", docProps); const locale = docProps.locale; 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("\n//////////\n The Case:\n", docProps.caseObj); Font.registerHyphenationCallback((word) => [word]); const FieldsTranslations = (label, locale) => { const appealtypes = getFormCollectionByID( docProps.caseObj.pinswg_appealcasetype ).UrlName; const formObj = jsonpath({ path: `$['${appealtypes}'].[?(@.value=="${label}")]`, json: fieldLookup, eval: true }); const item = formObj?.[0]; if (locale === "cy" && !item?.value_cy) { console.warn(`[Missing Welsh translation]`, { label: item?.value, orig: label, appealType: appealtypes }); } return locale === "cy" ? (item?.value_cy ?? item?.value ?? label) : (item?.value ?? label); }; return ( {getTrans(locale, "pdf-s78-heading")} {" "} {getTrans( locale, "pdf-s78-header-paragraph" )} PEDW Logo {Object.keys(titles).map( (key) => key != 0 && ( {parseInt(key)}{" "} {FieldsTranslations( titles[key].value, locale )} ) )} `${pageNumber} / ${totalPages}` } fixed /> {" "} {getTrans(locale, "pdf-s78-heading")} {getTrans( locale, "pdf-case-details-label-1" )} {" "} {values.caseObj.pinswg_onbehalfof} {getTrans( locale, "pdf-case-details-label-2" )} {" "} {values.caseObj .pinswg_appellantagent == "846040000" ? locale == "cy" ? "Apelydd" : "Appellant" : locale == "cy" ? "Asiant" : "Agent"} {getTrans( locale, "pdf-case-details-label-3" )} {values.caseObj .pinswg_appellantfirstname + " " + values.caseObj .pinswg_appellantlastname} {getTrans( locale, "pdf-case-details-label-4" )} { values.caseObj .pinswg_appellantemailaddress } {getTrans( locale, "pdf-case-details-label-5" )} { values.caseObj .pinswg_appellantaddress } {getTrans( locale, "pdf-case-details-label-6" )} {" "} { values.caseObj .pinswg_appellantphonenumber } {getTrans( locale, "pdf-case-details-label-8" )} {" "} {values.caseObj .pinswg_languagepreference == "846040000" ? locale == "cy" ? "Saesneg" : "English" : locale == "cy" ? "Cymraeg" : "Welsh"} {values.caseObj.pinswg_appellantagent != "846040000" && ( <> {getTrans( locale, "pdf-case-details-agent-label-1" )} { values.caseObj .pinswg_agentcompanyname } {getTrans( locale, "pdf-case-details-agent-label-2" )} { values.caseObj .pinswg_agentfirstname }{" "} { values.caseObj .pinswg_agentlastname } {getTrans( locale, "pdf-case-details-agent-label-3" )} { values.caseObj .pinswg_agentemailaddress } {getTrans( locale, "pdf-case-details-agent-label-4" )} { values.caseObj .pinswg_agentaddress } {getTrans( locale, "pdf-case-details-agent-label-5" )} { values.caseObj .pinswg_agentphonenumber } {getTrans( locale, "pdf-case-details-agent-label-6" )} {values.caseObj .pinswg_agentlanguagepreference == "846040000" ? locale == "cy" ? "Saesneg" : "English" : locale == "cy" ? "Cymraeg" : "Welsh"} )} {getTrans( locale, "pdf-case-details-label-7" )} {resolveCrmDisplayValue({ value: values.caseObj .pinswg_lpaname, locale, translations: transLookup })} {/* Contact Preference {values.caseObj .pinswg_contactprefs == "846040000" ? "Email" : "Post"} */} ); };