link on portal for pdf download

This commit is contained in:
2025-06-24 10:52:06 +01:00
parent febfb4e532
commit 4d310fd6c1
10 changed files with 564 additions and 64 deletions
+66 -50
View File
@@ -28,6 +28,11 @@ import {
setWatchedCasesDetails,
} from "../../store/watchedCases/action";
import { planningappeals78_pdf } from "../../components/pdftemplates/planningappeals78_pdf";
import { other_pdf } from "../../components/pdftemplates/other_pdf";
import { PDFDownloadLink, pdf } from "@react-pdf/renderer";
const TopThree = (props) => {
let { t } = useTranslation();
const {
@@ -188,6 +193,29 @@ const TopThree = (props) => {
}
};
const downloadPDF = async (docProps, ticketnumber) => {
try {
const res = await fetch("/api/file/generateappealpdfcopy", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ docProps }),
});
if (!res.ok) throw new Error("PDF generation failed");
const blob = await res.blob();
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = `Appeal_${ticketnumber || "summary"}.pdf`;
a.click();
URL.revokeObjectURL(url);
} catch (err) {
console.error("Download error:", err);
alert("Could not generate PDF.");
}
};
let topThreeOnlyArr = showTopThreeArr.slice(0, 3);
Object.keys(topThreeOnlyArr).map((key, index) => {
topthreeRow.push(
@@ -197,10 +225,44 @@ const TopThree = (props) => {
<b>{t("myportal:case-reference")}:</b>
{topThreeType == "myCases" &&
showTopThreeArr[key].pinswg_publishtoweb === false ? (
<span>
{showTopThreeArr[key].ticketnumber}{" "}
<b> - {t("myportal:appeal-pending-label")}</b>
</span>
<>
<span>
{showTopThreeArr[key].ticketnumber}{" "}
<b>
{" "}
- {t("myportal:appeal-pending-label")}
</b>
</span>
<span
className=" govuk-link govuk-link--no-underline "
style={{ cursor: "pointer" }}
onClick={() => {
confirm(
"Do you want to download a pdf copy of your appeal for " +
showTopThreeArr[key]
.ticketnumber
) &&
downloadPDF(
showTopThreeArr[key].incidentid,
showTopThreeArr[key]
.ticketnumber
);
}}
>
<img
src={
"/assets/images/documenttypes/pdf.png"
}
alt={showTopThreeArr[key].ticketnumber}
width={25}
height={25}
title={
"Download summary for " +
showTopThreeArr[key].ticketnumber
}
/>
</span>
</>
) : (
<Link
href={
@@ -477,52 +539,6 @@ const TopThree = (props) => {
</div>
)}
</div>
{/* {topThreeType == "watchedCases" && !props.myReps && (
<div className="">
<button
title={t("case:you-have-stopped-watching-label")}
className=" cardModuleRemoveCase govuk-link govuk-link--no-underline govuk-link--inverse "
onClick={() => {
confirm(
t("case:you-have-stopped-watching-label") +
showTopThreeArr[key][
"_pinswg_watchedcase_value@OData.Community.Display.V1.FormattedValue"
]
) &&
deleteItem(
showTopThreeArr[key].pinswg_watchlistid,
"watchedCases"
);
}}
>
&mdash;
</button>
</div>
)}
{topThreeType == "awaitingSubmission" && (
<div className="">
<button
title={t("case:do-you-want-to-delete-case-label")}
className=" cardModuleRemoveCase govuk-link govuk-link--no-underline govuk-link--inverse "
onClick={() => {
confirm(
t("case:do-you-want-to-delete-case-label") +
showTopThreeArr[key].ticketnumber +
"?\n" +
t(
"case:do-you-want-to-delete-case-disclaimer-label"
)
) &&
deleteItem(
showTopThreeArr[key].incidentid,
"awaitingSubmission"
);
}}
>
&mdash;
</button>
</div>
)} */}
</div>
);
});
+57 -4
View File
@@ -116,6 +116,30 @@ const ViewAllResults = (props) => {
: props[viewAllKey][viewAllKey + "Details"] || [];
let resultsRowArr = [];
const downloadPDF = async (docProps, ticketnumber) => {
try {
const res = await fetch("/api/file/generateappealpdfcopy", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ docProps }),
});
if (!res.ok) throw new Error("PDF generation failed");
const blob = await res.blob();
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = `Appeal_${ticketnumber || "summary"}.pdf`;
a.click();
URL.revokeObjectURL(url);
} catch (err) {
console.error("Download error:", err);
alert("Could not generate PDF.");
}
};
const buildResultsRowArr = () => {
resultsArr.map((item, key) => {
let detailsObj = jsonpath({
@@ -149,10 +173,39 @@ const ViewAllResults = (props) => {
<dd className="govuk-summary-list__value govuk-!-font-size-16 govuk-!-padding-left-2">
{viewAllKey == "myCases" &&
resultsArr[key].pinswg_publishtoweb === false ? (
<div className="cardModuleReference">
{resultsArr[key].ticketnumber}{" "}
<b> {t("myportal:appeal-pending-label")}</b>
</div>
<>
<div className="cardModuleReference">
{resultsArr[key].ticketnumber}{" "}
<b> {t("myportal:appeal-pending-label")}</b>
</div>
<span
className=" govuk-link govuk-link--no-underline "
style={{ cursor: "pointer" }}
onClick={() => {
confirm(
"Do you want to download a pdf copy of your appeal for " +
resultsArr[key].ticketnumber
) &&
downloadPDF(
resultsArr[key].incidentid,
resultsArr[key].ticketnumber
);
}}
>
<img
src={
"/assets/images/documenttypes/pdf.png"
}
alt={resultsArr[key].ticketnumber}
width={25}
height={25}
title={
"Download summary for " +
resultsArr[key].ticketnumber
}
/>
</span>
</>
) : (
<>
<Link