@measurequick/measurequick-report-generator 1.2.57 → 1.2.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/report-gen-scripts/corrective-measures.js +94 -92
- package/report-gen-scripts/cover-page.js +4 -6
- package/report-gen-scripts/full-report.js +15 -25
- package/report-gen-scripts/measurement-details.js +162 -161
- package/report-gen-scripts/photos-report.js +59 -58
- package/report-gen-scripts/vitals-cooling-report.js +5 -4
- package/report-gen-scripts/vitals-heating-report.js +5 -4
package/package.json
CHANGED
|
@@ -5,107 +5,109 @@ import * as util from '../util.js';
|
|
|
5
5
|
|
|
6
6
|
let embeddedIcons = {};
|
|
7
7
|
|
|
8
|
-
export async function getReport(payload) {
|
|
8
|
+
export async function getReport(payload) { console.log("Corrective Measures - Payload:"); console.log(payload);
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
try {
|
|
11
|
+
const pdfDoc = await PDFDocument.load(util._base64ToArrayBuffer(pdf.base64));
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
const form = pdfDoc.getForm();
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
let labels = ["iconRangeHigh", "iconRangeLow", "iconRangeNormal", "iconTesto", "iconCalculator", "iconFieldpiece",
|
|
16
|
+
"iconUei", "iconSporlanPro", "iconSporlanLegacy", "iconIconnect", "iconImanifold", "iconSensi",
|
|
17
|
+
"iconBluflame", "iconRedfish510", "iconRedfish510333", "iconRedfish550", "iconDg1000", "iconTrueflow", "iconThumbprintRed", "iconThumbprintGreen", "iconThumbprintYellow"];
|
|
18
|
+
for (let label of labels) embeddedIcons[label] = await pdfDoc.embedPng(util._base64ToArrayBuffer(base64[label]));
|
|
19
|
+
const mqLogoBytes = util._base64ToArrayBuffer(base64.mqLogo);
|
|
20
|
+
const mqLogo = await pdfDoc.embedPng(mqLogoBytes);
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
// embed company logo and profile picture
|
|
23
|
+
let profileImage, companyImage;
|
|
24
|
+
let profileImageType = util.checkProfilePicture(payload.meta);
|
|
25
|
+
let companyImageType = util.checkCompanyLogo(payload.meta);
|
|
26
|
+
if (profileImageType) {
|
|
27
|
+
if (profileImageType.shape == "square") profileImage = payload.meta.profile_settings.profilePicSquareBase64;
|
|
28
|
+
else if (profileImageType.shape == "circle") profileImage = payload.meta.profile_settings.profilePicCircleBase64;
|
|
29
|
+
if (profileImageType.type == "jpg") profileImage = await pdfDoc.embedJpg(util._base64ToArrayBuffer(profileImage));
|
|
30
|
+
else if (profileImageType.type == "png") profileImage = await pdfDoc.embedPng(util._base64ToArrayBuffer(profileImage));
|
|
31
|
+
}
|
|
32
|
+
if (companyImageType == "jpg") companyImage = await pdfDoc.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
|
|
33
|
+
else if (companyImageType == "png") companyImage = await pdfDoc.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
35
|
+
// print company logo and profile picture
|
|
36
|
+
if (profileImage && companyImage) {
|
|
37
|
+
form.getButton("ProfilePicture").setImage(profileImage);
|
|
38
|
+
form.getButton("HalfWidthLogo").setImage(companyImage);
|
|
39
|
+
if (payload.meta.profile_settings.techFirstName || payload.meta.profile_settings.techLastName)
|
|
40
|
+
form.getTextField('TechName').setText(`${payload.meta.profile_settings.techFirstName} ${payload.meta.profile_settings.techLastName}`);
|
|
41
|
+
} else if (profileImage) {
|
|
42
|
+
form.getButton("ProfilePicture").setImage(profileImage);
|
|
43
|
+
form.getButton("HalfWidthLogo").setImage(mqLogo);
|
|
44
|
+
if (payload.meta.profile_settings.techFirstName || payload.meta.profile_settings.techLastName)
|
|
45
|
+
form.getTextField('TechName').setText(`${payload.meta.profile_settings.techFirstName} ${payload.meta.profile_settings.techLastName}`);
|
|
46
|
+
} else {
|
|
47
|
+
if (companyImage) form.getButton("FullWidthLogo").setImage(companyImage);
|
|
48
|
+
else form.getButton("FullWidthLogo").setImage(mqLogo);
|
|
49
|
+
}
|
|
49
50
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
51
|
+
let systemScorePercentage = payload.tests[0].testInfo.data.vitals_score ? +payload.tests[0].testInfo.data.vitals_score.toFixed(0) : 0;
|
|
52
|
+
let systemScoreGrade = util.getGradeFromScore(systemScorePercentage);
|
|
53
|
+
let systemScoreColor = util.getColorFromGrade(systemScoreGrade);
|
|
54
|
+
if (!payload.tests[0].testInfo.canScoreVitals) {
|
|
55
|
+
systemScorePercentage = "--";
|
|
56
|
+
systemScoreGrade = "";
|
|
57
|
+
} else systemScorePercentage += "%";
|
|
58
|
+
form.getTextField(`YourSystemScore${systemScoreColor}`).setText(`${systemScorePercentage} ${systemScoreGrade}`);
|
|
58
59
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
form.getTextField(`Block1-Title`).setText(payload.system_data.title1);
|
|
61
|
+
for (let rowNum = 1; rowNum < 12; rowNum++) {
|
|
62
|
+
let measurement = payload.system_data[`block1`][rowNum-1];
|
|
63
|
+
if (measurement) form.getTextField(`Block1-Row${rowNum}`).setText(`${measurement.value}`);
|
|
64
|
+
else break;
|
|
65
|
+
}
|
|
65
66
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
67
|
+
form.getTextField(`Block2-Title`).setText(payload.system_data.title2);
|
|
68
|
+
for (let rowNum = 1; rowNum < 12; rowNum++) {
|
|
69
|
+
let measurement = payload.system_data[`block2`][rowNum-1];
|
|
70
|
+
if (measurement) {
|
|
71
|
+
form.getTextField(`Block2-Row${rowNum}-Col1`).setText(measurement.label);
|
|
72
|
+
let val = measurement.value ? measurement.value : payload.equipment[measurement.ref];
|
|
73
|
+
form.getTextField(`Block2-Row${rowNum}-Col2`).setText(`${val}`);
|
|
74
|
+
let icon;// = util.getRangeIcon(test, measurement.ref);
|
|
75
|
+
if (icon) form.getButton(`Block2-Row${rowNum}-Col3`).setImage(icon);
|
|
76
|
+
} else break;
|
|
77
|
+
}
|
|
77
78
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
79
|
+
form.getTextField(`Block3-Title`).setText(payload.system_data.title3);
|
|
80
|
+
let caIndex = 0;
|
|
81
|
+
let header;
|
|
82
|
+
for (let colNum = 1; colNum < 4; colNum++) {
|
|
83
|
+
let row = 1;
|
|
84
|
+
let caMeas = payload.system_data.block3[caIndex];
|
|
85
|
+
if (caMeas && header == caMeas.ref) {
|
|
86
|
+
form.getTextField(`CA-Col${colNum}-Row${row}-Bold`).setText(`${caMeas.ref} (Cont.)`);
|
|
87
|
+
row++;
|
|
88
|
+
}
|
|
89
|
+
for (let rowNum = row; rowNum < 24; rowNum++) {
|
|
90
|
+
caMeas = payload.system_data.block3[caIndex];
|
|
91
|
+
if (caMeas) {
|
|
92
|
+
if (header !== caMeas.ref) {
|
|
93
|
+
if (rowNum + 2 > 23) {
|
|
94
|
+
colNum++;
|
|
95
|
+
rowNum = 1;
|
|
96
|
+
} else {
|
|
97
|
+
if (rowNum != 1) rowNum++;
|
|
98
|
+
form.getTextField(`CA-Col${colNum}-Row${rowNum}-Bold`).setText(caMeas.ref);
|
|
99
|
+
rowNum++;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
header = caMeas.ref;
|
|
103
|
+
form.getTextField(`CA-Col${colNum}-Row${rowNum}`).setText(caMeas.label);
|
|
104
|
+
caIndex++;
|
|
105
|
+
} else break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
107
108
|
|
|
108
|
-
|
|
109
|
-
|
|
109
|
+
form.flatten();
|
|
110
|
+
return await pdfDoc.saveAsBase64({ dataUri: true });
|
|
111
|
+
} catch (error) { console.log(error) }
|
|
110
112
|
|
|
111
113
|
}
|
|
@@ -2,7 +2,7 @@ import { PDFDocument } from 'pdf-lib';
|
|
|
2
2
|
import * as pdf from '../base-64/cover-page.js';
|
|
3
3
|
import * as util from '../util.js';
|
|
4
4
|
|
|
5
|
-
export async function getReport(payload) { console.log("Cover Page");
|
|
5
|
+
export async function getReport(payload) { console.log("Cover Page - Payload:"); console.log(payload);
|
|
6
6
|
try {
|
|
7
7
|
const pdfDoc = await PDFDocument.load(util._base64ToArrayBuffer(pdf.base64));
|
|
8
8
|
let profileImage, companyImage;
|
|
@@ -14,8 +14,8 @@ export async function getReport(payload) { console.log("Cover Page");
|
|
|
14
14
|
if (profileImageType.type == "jpg") profileImage = await pdfDoc.embedJpg(util._base64ToArrayBuffer(profileImage));
|
|
15
15
|
else if (profileImageType.type == "png") profileImage = await pdfDoc.embedPng(util._base64ToArrayBuffer(profileImage));
|
|
16
16
|
}
|
|
17
|
-
if (companyImageType == "jpg")
|
|
18
|
-
else if (companyImageType == "png")
|
|
17
|
+
if (companyImageType == "jpg") companyImage = await pdfDoc.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
|
|
18
|
+
else if (companyImageType == "png") companyImage = await pdfDoc.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
|
|
19
19
|
const form = pdfDoc.getForm();
|
|
20
20
|
form.getTextField("Report Title").setText(payload.meta.report_title);
|
|
21
21
|
form.getTextField("Technician Name").setText(payload.meta.technician_name);
|
|
@@ -29,7 +29,5 @@ export async function getReport(payload) { console.log("Cover Page");
|
|
|
29
29
|
form.flatten();
|
|
30
30
|
const pdfBase64 = await pdfDoc.saveAsBase64({ dataUri: true });
|
|
31
31
|
return pdfBase64;
|
|
32
|
-
} catch (error) {
|
|
33
|
-
console.log(error);
|
|
34
|
-
}
|
|
32
|
+
} catch (error) { console.log(error) }
|
|
35
33
|
}
|
|
@@ -13,7 +13,7 @@ import * as util from '../util.js';
|
|
|
13
13
|
let docs = [];
|
|
14
14
|
let forms = [];
|
|
15
15
|
|
|
16
|
-
export async function getReport(payload) { console.log("Full Report"); console.log(payload);
|
|
16
|
+
export async function getReport(payload) { console.log("Full Report"); console.log((payload));
|
|
17
17
|
|
|
18
18
|
const coreDoc = await PDFDocument.create();
|
|
19
19
|
|
|
@@ -22,14 +22,12 @@ export async function getReport(payload) { console.log("Full Report"); console.l
|
|
|
22
22
|
const coverPageDoc = coverPageBase64 ? await PDFDocument.load(util._base64ToArrayBuffer(coverPageBase64)) : false;
|
|
23
23
|
const [_coverPageDoc] = coverPageDoc ? await coreDoc.copyPages(coverPageDoc, [0]) : false;
|
|
24
24
|
if (_coverPageDoc) coreDoc.insertPage(coreDoc.getPages().length, _coverPageDoc);
|
|
25
|
-
} catch (
|
|
26
|
-
console.log("Cover Page Error: " + JSON.stringify(err));
|
|
27
|
-
}
|
|
25
|
+
} catch (e) {} // error printed in original pdf script
|
|
28
26
|
|
|
29
27
|
try {
|
|
30
28
|
if (payload.meta.report_mode == "goettl") {
|
|
31
|
-
if (payload.tests && payload.tests[
|
|
32
|
-
let vitalsReportBase64 = await vitalsCoolingReport.getReport(payload, payload.tests[
|
|
29
|
+
if (payload.tests && payload.tests[0] && payload.tests[0].testInfo && payload.tests[0].testInfo) {
|
|
30
|
+
let vitalsReportBase64 = await vitalsCoolingReport.getReport(payload, payload.tests[0]);
|
|
33
31
|
const vitalsReportDoc = await PDFDocument.load(util._base64ToArrayBuffer(vitalsReportBase64));
|
|
34
32
|
const [_vitalsReportPg1] = await coreDoc.copyPages(vitalsReportDoc, [0]);
|
|
35
33
|
const [_vitalsReportPg2] = await coreDoc.copyPages(vitalsReportDoc, [1]);
|
|
@@ -38,8 +36,8 @@ export async function getReport(payload) { console.log("Full Report"); console.l
|
|
|
38
36
|
coreDoc.insertPage(coreDoc.getPages().length, _vitalsReportPg2);
|
|
39
37
|
coreDoc.insertPage(coreDoc.getPages().length, _vitalsReportPg3);
|
|
40
38
|
}
|
|
41
|
-
if (payload.tests && payload.tests[
|
|
42
|
-
let vitalsReportBase64_ = await vitalsHeatingReport.getReport(payload, payload.tests[
|
|
39
|
+
if (payload.tests && payload.tests[1] && payload.tests[1].testInfo && payload.tests[1].testInfo) {
|
|
40
|
+
let vitalsReportBase64_ = await vitalsHeatingReport.getReport(payload, payload.tests[1]);
|
|
43
41
|
const vitalsReportDoc_ = await PDFDocument.load(util._base64ToArrayBuffer(vitalsReportBase64_));
|
|
44
42
|
const [_vitalsReportPg1_] = await coreDoc.copyPages(vitalsReportDoc_, [0]);
|
|
45
43
|
const [_vitalsReportPg2_] = await coreDoc.copyPages(vitalsReportDoc_, [1]);
|
|
@@ -48,7 +46,7 @@ export async function getReport(payload) { console.log("Full Report"); console.l
|
|
|
48
46
|
coreDoc.insertPage(coreDoc.getPages().length, _vitalsReportPg2_);
|
|
49
47
|
coreDoc.insertPage(coreDoc.getPages().length, _vitalsReportPg3_);
|
|
50
48
|
}
|
|
51
|
-
} else if (payload.tests && payload.tests[0] && payload.tests[0].testInfo && payload.tests[0].testInfo
|
|
49
|
+
} else if (payload.tests && payload.tests[0] && payload.tests[0].testInfo && payload.tests[0].testInfo) {
|
|
52
50
|
let vitalsReportBase64 = payload.meta.report_mode == "cooling" ? await vitalsCoolingReport.getReport(payload) : await vitalsHeatingReport.getReport(payload);
|
|
53
51
|
const vitalsReportDoc = await PDFDocument.load(util._base64ToArrayBuffer(vitalsReportBase64));
|
|
54
52
|
const [_vitalsReportPg1] = await coreDoc.copyPages(vitalsReportDoc, [0]);
|
|
@@ -57,12 +55,8 @@ export async function getReport(payload) { console.log("Full Report"); console.l
|
|
|
57
55
|
coreDoc.insertPage(coreDoc.getPages().length, _vitalsReportPg1);
|
|
58
56
|
coreDoc.insertPage(coreDoc.getPages().length, _vitalsReportPg2);
|
|
59
57
|
coreDoc.insertPage(coreDoc.getPages().length, _vitalsReportPg3);
|
|
60
|
-
} else {
|
|
61
|
-
console.log("cant generate vitals");
|
|
62
58
|
}
|
|
63
|
-
} catch (
|
|
64
|
-
console.log("Vitals Error: " + JSON.stringify(err));
|
|
65
|
-
}
|
|
59
|
+
} catch (e) {} // error printed in original pdf script
|
|
66
60
|
|
|
67
61
|
try {
|
|
68
62
|
let measurementDetailsBase64 = await measurementDetails.getReport(payload);
|
|
@@ -73,30 +67,26 @@ export async function getReport(payload) { console.log("Full Report"); console.l
|
|
|
73
67
|
const [_measurementDetailsDocPg2] = measurementDetailsDoc ? await coreDoc.copyPages(measurementDetailsDoc, [1]) : false;
|
|
74
68
|
if (_measurementDetailsDocPg2) coreDoc.insertPage(coreDoc.getPages().length, _measurementDetailsDocPg2);
|
|
75
69
|
}
|
|
76
|
-
} catch (
|
|
77
|
-
console.log("Measurement Details Error: " + JSON.stringify(err));
|
|
78
|
-
}
|
|
70
|
+
} catch (e) {} // error printed in original pdf script
|
|
79
71
|
|
|
80
72
|
try {
|
|
81
73
|
let correctiveMeasuresBase64 = await correctiveMeasures.getReport(payload);
|
|
82
74
|
const correctiveMeasuresDoc = correctiveMeasuresBase64 ? await PDFDocument.load(util._base64ToArrayBuffer(correctiveMeasuresBase64)) : false;
|
|
83
75
|
const [_correctiveMeasuresDoc] = correctiveMeasuresDoc ? await coreDoc.copyPages(correctiveMeasuresDoc, [0]) : false;
|
|
84
76
|
if (_correctiveMeasuresDoc) coreDoc.insertPage(coreDoc.getPages().length, _correctiveMeasuresDoc);
|
|
85
|
-
} catch (
|
|
86
|
-
console.log("Corrective Measures Error: " + JSON.stringify(err));
|
|
87
|
-
}
|
|
77
|
+
} catch (e) {} // error printed in original pdf script
|
|
88
78
|
|
|
89
79
|
try {
|
|
90
80
|
let selectedPhotosReport = payload.meta.origin == 'virtuoso' ? photosReportS3 : photosReport;
|
|
91
|
-
let photosReportBase64 = (payload.meta.pdf_settings.includePhotos && payload.meta.photo_count > 0) ? await selectedPhotosReport.getReport(payload) : false;
|
|
81
|
+
let photosReportBase64 = (payload.meta.pdf_settings.includePhotos && payload.meta.photo_count > 0) ? await selectedPhotosReport.getReport(payload.photos) : false;
|
|
92
82
|
const photosReportDoc = photosReportBase64 ? await PDFDocument.load(util._base64ToArrayBuffer(photosReportBase64)) : false;
|
|
93
83
|
for (let i = 0; (photosReportDoc && i < photosReportDoc.getPages().length); i++) {
|
|
94
84
|
const [_photosReport] = await coreDoc.copyPages(photosReportDoc, [i]);
|
|
95
85
|
coreDoc.insertPage(coreDoc.getPages().length, _photosReport);
|
|
96
86
|
}
|
|
97
|
-
} catch (
|
|
98
|
-
console.log("Photo Page Error: " + JSON.stringify(err));
|
|
99
|
-
}
|
|
87
|
+
} catch (e) {} // error printed in original pdf script
|
|
100
88
|
|
|
101
|
-
|
|
89
|
+
let b64 = await coreDoc.saveAsBase64({ dataUri: true });
|
|
90
|
+
console.log(b64);
|
|
91
|
+
return b64;
|
|
102
92
|
}
|
|
@@ -8,174 +8,175 @@ import * as pdf from '../base-64/measurement-details-page.js';
|
|
|
8
8
|
let embeddedIconsTestIn = {};
|
|
9
9
|
let embeddedIconsTestOut = {};
|
|
10
10
|
|
|
11
|
-
export async function getReport(payload) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
let labels = ["iconRangeHigh", "iconRangeLow", "iconRangeNormal", "iconTesto", "iconCalculator", "iconFieldpiece",
|
|
31
|
-
"iconUei", "iconSporlanPro", "iconSporlanLegacy", "iconIconnect", "iconImanifold", "iconSensi",
|
|
32
|
-
"iconBluflame", "iconRedfish510", "iconRedfish510333", "iconRedfish550", "iconDg1000", "iconTrueflow", "iconThumbprintRed", "iconThumbprintGreen", "iconThumbprintYellow"
|
|
33
|
-
];
|
|
34
|
-
for (let label of labels) embeddedIconsTestIn[label] = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(base64[label]));
|
|
35
|
-
for (let label of labels) embeddedIconsTestOut[label] = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(base64[label]));
|
|
36
|
-
|
|
37
|
-
const mqLogoBytes = util._base64ToArrayBuffer(base64.mqLogo);
|
|
38
|
-
const mqLogoPg1 = await pdfDocPg1.embedPng(mqLogoBytes);
|
|
39
|
-
const mqLogoPg2 = await pdfDocPg2.embedPng(mqLogoBytes);
|
|
40
|
-
|
|
41
|
-
// embed company logo and profile picture
|
|
42
|
-
let profileImagePg1, companyImagePg1, profileImagePg2, companyImagePg2;
|
|
43
|
-
if (payload.meta.pdf_settings.includeProfilePic) {
|
|
44
|
-
if (payload.meta.pdf_settings.shapeProfilePic && payload.meta.profile_settings.profilePicCircleBase64) {
|
|
45
|
-
if (payload.meta.profile_settings.profilePicCircleBase64.includes("image/jpeg")) {
|
|
46
|
-
profileImagePg1 = await pdfDocPg1.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicCircleBase64));
|
|
47
|
-
profileImagePg2 = await pdfDocPg2.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicCircleBase64));
|
|
48
|
-
} else if (payload.meta.profile_settings.profilePicCircleBase64.includes("image/png")) {
|
|
49
|
-
profileImagePg1 = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicCircleBase64));
|
|
50
|
-
profileImagePg2 = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicCircleBase64));
|
|
51
|
-
}
|
|
52
|
-
} else if (payload.meta.profile_settings.profilePicSquareBase64) {
|
|
53
|
-
if (payload.meta.profile_settings.profilePicSquareBase64.includes("image/jpeg")) {
|
|
54
|
-
profileImagePg1 = await pdfDocPg1.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicSquareBase64));
|
|
55
|
-
profileImagePg2 = await pdfDocPg2.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicSquareBase64));
|
|
56
|
-
} else if (payload.meta.profile_settings.profilePicSquareBase64.includes("image/png")) {
|
|
57
|
-
profileImagePg1 = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicSquareBase64));
|
|
58
|
-
profileImagePg2 = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicSquareBase64));
|
|
11
|
+
export async function getReport(payload) { console.log("Measurement Details - Payload:"); console.log(payload);
|
|
12
|
+
try {
|
|
13
|
+
const pdfDocPg1 = await PDFDocument.load(util._base64ToArrayBuffer(pdf.base64));
|
|
14
|
+
const pdfDocPg2 = await PDFDocument.load(util._base64ToArrayBuffer(pdf.base64));
|
|
15
|
+
|
|
16
|
+
const formPg1 = pdfDocPg1.getForm();
|
|
17
|
+
const formPg2 = pdfDocPg2.getForm();
|
|
18
|
+
|
|
19
|
+
let mapImagePg1, mapImagePg2;
|
|
20
|
+
if (payload.map) {
|
|
21
|
+
if (payload.map.includes("image/jpeg")) {
|
|
22
|
+
mapImagePg1 = await pdfDocPg1.embedJpg(util._base64ToArrayBuffer(payload.map));
|
|
23
|
+
mapImagePg2 = await pdfDocPg2.embedJpg(util._base64ToArrayBuffer(payload.map));
|
|
24
|
+
} else if (payload.map.includes("image/png")) {
|
|
25
|
+
mapImagePg1 = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(payload.map));
|
|
26
|
+
mapImagePg2 = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(payload.map));
|
|
59
27
|
}
|
|
60
28
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
29
|
+
|
|
30
|
+
let labels = ["iconRangeHigh", "iconRangeLow", "iconRangeNormal", "iconTesto", "iconCalculator", "iconFieldpiece",
|
|
31
|
+
"iconUei", "iconSporlanPro", "iconSporlanLegacy", "iconIconnect", "iconImanifold", "iconSensi",
|
|
32
|
+
"iconBluflame", "iconRedfish510", "iconRedfish510333", "iconRedfish550", "iconDg1000", "iconTrueflow", "iconThumbprintRed", "iconThumbprintGreen", "iconThumbprintYellow"
|
|
33
|
+
];
|
|
34
|
+
for (let label of labels) embeddedIconsTestIn[label] = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(base64[label]));
|
|
35
|
+
for (let label of labels) embeddedIconsTestOut[label] = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(base64[label]));
|
|
36
|
+
|
|
37
|
+
const mqLogoBytes = util._base64ToArrayBuffer(base64.mqLogo);
|
|
38
|
+
const mqLogoPg1 = await pdfDocPg1.embedPng(mqLogoBytes);
|
|
39
|
+
const mqLogoPg2 = await pdfDocPg2.embedPng(mqLogoBytes);
|
|
40
|
+
|
|
41
|
+
// embed company logo and profile picture
|
|
42
|
+
let profileImagePg1, companyImagePg1, profileImagePg2, companyImagePg2;
|
|
43
|
+
if (payload.meta.pdf_settings.includeProfilePic) {
|
|
44
|
+
if (payload.meta.pdf_settings.shapeProfilePic && payload.meta.profile_settings.profilePicCircleBase64) {
|
|
45
|
+
if (payload.meta.profile_settings.profilePicCircleBase64.includes("image/jpeg")) {
|
|
46
|
+
profileImagePg1 = await pdfDocPg1.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicCircleBase64));
|
|
47
|
+
profileImagePg2 = await pdfDocPg2.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicCircleBase64));
|
|
48
|
+
} else if (payload.meta.profile_settings.profilePicCircleBase64.includes("image/png")) {
|
|
49
|
+
profileImagePg1 = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicCircleBase64));
|
|
50
|
+
profileImagePg2 = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicCircleBase64));
|
|
51
|
+
}
|
|
52
|
+
} else if (payload.meta.profile_settings.profilePicSquareBase64) {
|
|
53
|
+
if (payload.meta.profile_settings.profilePicSquareBase64.includes("image/jpeg")) {
|
|
54
|
+
profileImagePg1 = await pdfDocPg1.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicSquareBase64));
|
|
55
|
+
profileImagePg2 = await pdfDocPg2.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicSquareBase64));
|
|
56
|
+
} else if (payload.meta.profile_settings.profilePicSquareBase64.includes("image/png")) {
|
|
57
|
+
profileImagePg1 = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicSquareBase64));
|
|
58
|
+
profileImagePg2 = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicSquareBase64));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
81
61
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
62
|
+
if (payload.meta.pdf_settings.includeCompanyLogo && payload.meta.profile_settings.companyLogoBase64) {
|
|
63
|
+
if (payload.meta.profile_settings.companyLogoBase64.includes("image/jpeg")) {
|
|
64
|
+
companyImagePg1 = await pdfDocPg1.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
|
|
65
|
+
companyImagePg2 = await pdfDocPg2.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
|
|
66
|
+
} else if (payload.meta.profile_settings.companyLogoBase64.includes("image/png")) {
|
|
67
|
+
companyImagePg1 = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
|
|
68
|
+
companyImagePg2 = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
|
|
69
|
+
}
|
|
90
70
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
71
|
+
|
|
72
|
+
// print company logo and profile picture
|
|
73
|
+
if (profileImagePg1 && companyImagePg1) {
|
|
74
|
+
formPg1.getButton("ProfilePicture").setImage(profileImagePg1);
|
|
75
|
+
formPg1.getButton("HalfWidthLogo").setImage(companyImagePg1);
|
|
76
|
+
formPg2.getButton("ProfilePicture").setImage(profileImagePg2);
|
|
77
|
+
formPg2.getButton("HalfWidthLogo").setImage(companyImagePg2);
|
|
78
|
+
if (payload.meta.profile_settings.techFirstName || payload.meta.profile_settings.techLastName) {
|
|
79
|
+
formPg1.getTextField('TechName').setText(`${payload.meta.profile_settings.techFirstName} ${payload.meta.profile_settings.techLastName}`);
|
|
80
|
+
formPg2.getTextField('TechName').setText(`${payload.meta.profile_settings.techFirstName} ${payload.meta.profile_settings.techLastName}`);
|
|
81
|
+
}
|
|
82
|
+
} else if (profileImagePg1) {
|
|
83
|
+
formPg1.getButton("ProfilePicture").setImage(profileImagePg1);
|
|
84
|
+
formPg1.getButton("HalfWidthLogo").setImage(mqLogoPg1);
|
|
85
|
+
formPg2.getButton("ProfilePicture").setImage(profileImagePg2);
|
|
86
|
+
formPg2.getButton("HalfWidthLogo").setImage(mqLogoPg2);
|
|
87
|
+
if (payload.meta.profile_settings.techFirstName || payload.meta.profile_settings.techLastName) {
|
|
88
|
+
formPg1.getTextField('TechName').setText(`${payload.meta.profile_settings.techFirstName} ${payload.meta.profile_settings.techLastName}`);
|
|
89
|
+
formPg2.getTextField('TechName').setText(`${payload.meta.profile_settings.techFirstName} ${payload.meta.profile_settings.techLastName}`);
|
|
90
|
+
}
|
|
95
91
|
} else {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
let sectionLabel = t == 0 ? 'Test In ' : 'Test Out ';
|
|
104
|
-
if (payload.tests.length == 1) sectionLabel = "";
|
|
105
|
-
let form = t == 0 ? formPg1 : formPg2;
|
|
106
|
-
let test = payload.tests[t].testInfo;
|
|
107
|
-
form.getTextField('Header').setText(`${sectionLabel}Measurement Details`);
|
|
108
|
-
if (payload.meta.cName && payload.meta.address && payload.meta.city && payload.meta.state && payload.meta.zip) {
|
|
109
|
-
form.getTextField('Name').setText(`${payload.meta.cName}`);
|
|
110
|
-
form.getTextField('Address 1').setText(`${payload.meta.address}`);
|
|
111
|
-
if (payload.meta.address2) {
|
|
112
|
-
form.getTextField('Address 2').setText(`${payload.meta.address2}`);
|
|
113
|
-
form.getTextField('City State Zip').setText(`${payload.meta.city}${payload.meta.state}${payload.meta.zip}`);
|
|
114
|
-
} else form.getTextField('Address 2').setText(`${payload.meta.city}${payload.meta.state}${payload.meta.zip}`);
|
|
115
|
-
form.getTextField('Date of Service').setText(payload.tests[t].created_date_string);
|
|
116
|
-
form.getTextField('Time of Service').setText(payload.tests[t].created_time_string);
|
|
92
|
+
if (companyImagePg1) {
|
|
93
|
+
formPg1.getButton("FullWidthLogo").setImage(companyImagePg1);
|
|
94
|
+
formPg2.getButton("FullWidthLogo").setImage(companyImagePg2);
|
|
95
|
+
} else {
|
|
96
|
+
formPg1.getButton("FullWidthLogo").setImage(mqLogoPg1);
|
|
97
|
+
formPg2.getButton("FullWidthLogo").setImage(mqLogoPg2);
|
|
98
|
+
}
|
|
117
99
|
}
|
|
118
100
|
|
|
119
|
-
let
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
if (measurement.
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
101
|
+
for (let t = 0; t < payload.tests.length; t++) {
|
|
102
|
+
let section = t == 0 ? 'test_in' : 'test_out';
|
|
103
|
+
let sectionLabel = t == 0 ? 'Test In ' : 'Test Out ';
|
|
104
|
+
if (payload.tests.length == 1) sectionLabel = "";
|
|
105
|
+
let form = t == 0 ? formPg1 : formPg2;
|
|
106
|
+
let test = payload.tests[t].testInfo;
|
|
107
|
+
form.getTextField('Header').setText(`${sectionLabel}Measurement Details`);
|
|
108
|
+
if (payload.meta.cName && payload.meta.address && payload.meta.city && payload.meta.state && payload.meta.zip) {
|
|
109
|
+
form.getTextField('Name').setText(`${payload.meta.cName}`);
|
|
110
|
+
form.getTextField('Address 1').setText(`${payload.meta.address}`);
|
|
111
|
+
if (payload.meta.address2) {
|
|
112
|
+
form.getTextField('Address 2').setText(`${payload.meta.address2}`);
|
|
113
|
+
form.getTextField('City State Zip').setText(`${payload.meta.city}${payload.meta.state}${payload.meta.zip}`);
|
|
114
|
+
} else form.getTextField('Address 2').setText(`${payload.meta.city}${payload.meta.state}${payload.meta.zip}`);
|
|
115
|
+
form.getTextField('Date of Service').setText(payload.tests[t].created_date_string);
|
|
116
|
+
form.getTextField('Time of Service').setText(payload.tests[t].created_time_string);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
let systemScorePercentage = payload.tests[t].testInfo.data.vitals_score ? +payload.tests[t].testInfo.data.vitals_score.toFixed(0) : 0;
|
|
120
|
+
let systemScoreGrade = util.getGradeFromScore(systemScorePercentage);
|
|
121
|
+
let systemScoreColor = util.getColorFromGrade(systemScoreGrade);
|
|
122
|
+
if (!payload.tests[0].testInfo.canScoreVitals) {
|
|
123
|
+
systemScorePercentage = "--";
|
|
124
|
+
systemScoreGrade = "";
|
|
125
|
+
} else systemScorePercentage += "%";
|
|
126
|
+
form.getTextField(`YourSystemScore${systemScoreColor}`).setText(`${systemScorePercentage} ${systemScoreGrade}`);
|
|
127
|
+
|
|
128
|
+
if (mapImagePg1 && t == 0) form.getButton('Map Image').setImage(mapImagePg1);
|
|
129
|
+
if (mapImagePg2 && t == 1) form.getButton('Map Image').setImage(mapImagePg2);
|
|
130
|
+
form.getTextField('Information Text').setText("What Are Your System Vitals?\nJust like your health vitals, temperature, pulse, blood pressure etc, your A/C system vitals show the overall health of your air conditioning system. These vitals account for both the refrigerant and air delivery side of the system. System targets that are out of range are typically related to a system diagnostic listed below. Correcting the diagnostic faults, if possible, should put the system vitals back in the normal range.");
|
|
131
|
+
|
|
132
|
+
for (let blockNum = 1; blockNum < 5; blockNum++) {
|
|
133
|
+
form.getTextField(`Block${blockNum}-Title`).setText(payload[section][`title${blockNum}`]);
|
|
134
|
+
for (let rowNum = 1; rowNum < 14; rowNum++) {
|
|
135
|
+
let measurement;
|
|
136
|
+
if (t == 0) measurement = payload.test_in[`block${blockNum}`][rowNum - 1];
|
|
137
|
+
else if (t == 1) measurement = payload.test_out[`block${blockNum}`][rowNum - 1];
|
|
138
|
+
let embeddedIcons = section == "test_in" ? embeddedIconsTestIn : embeddedIconsTestOut;
|
|
139
|
+
let condDisplay = util.getElectricalData(test, "", embeddedIcons);
|
|
140
|
+
let ahuDisplay = util.getElectricalData(test, "_ahu", embeddedIcons);
|
|
141
|
+
if (measurement) {
|
|
142
|
+
if (measurement.label == "Cond. Volts" && condDisplay.voltageIcon) form.getButton(`Block${blockNum}-Row${rowNum}-Col4`).setImage(condDisplay.voltageIcon);
|
|
143
|
+
if (measurement.label == "Cond. Amps" && condDisplay.amperageIcon) form.getButton(`Block${blockNum}-Row${rowNum}-Col4`).setImage(condDisplay.amperageIcon);
|
|
144
|
+
if (measurement.label == "AHU Volts" && ahuDisplay.voltageIcon) form.getButton(`Block${blockNum}-Row${rowNum}-Col4`).setImage(ahuDisplay.voltageIcon);
|
|
145
|
+
if (measurement.label == "AHU Amps" && ahuDisplay.amperageIcon) form.getButton(`Block${blockNum}-Row${rowNum}-Col4`).setImage(ahuDisplay.amperageIcon);
|
|
146
|
+
let units = measurement.units ? `(${measurement.units})` : "";
|
|
147
|
+
form.getTextField(`Block${blockNum}-Row${rowNum}-Col1`).setText(`${measurement.label} ${units}`);
|
|
148
|
+
let val = measurement.value ? measurement.value : (+test.data[measurement.ref]);
|
|
149
|
+
if (!val) val = "--";
|
|
150
|
+
else if (measurement.fixTo) val = val.toFixed(measurement.fixTo);
|
|
151
|
+
form.getTextField(`Block${blockNum}-Row${rowNum}-Col2`).setText(`${val}`);
|
|
152
|
+
if (blockNum != 4) {
|
|
153
|
+
let rangeIcon = util.getRangeIcon(test, measurement.ref, embeddedIcons);
|
|
154
|
+
if (rangeIcon && payload.meta.pdf_settings._includeRangeIndicators) form.getButton(`Block${blockNum}-Row${rowNum}-Col3`).setImage(rangeIcon);
|
|
155
|
+
let toolIcon = false;
|
|
156
|
+
if (measurement.ref == "superheat" || measurement.ref == "subcooling" || measurement.ref == "compression_ratio" || measurement.ref == "airflow_estimated") toolIcon = embeddedIcons.iconCalculator;
|
|
157
|
+
else toolIcon = util.getToolIcon(test, measurement.ref, embeddedIcons);
|
|
158
|
+
|
|
159
|
+
let benchmarkIcon = embeddedIcons.iconThumbprintRed;
|
|
160
|
+
if (measurement.value == "Yes, under duress") benchmarkIcon = embeddedIcons.iconThumbprintYellow;
|
|
161
|
+
else if (measurement.value == "Yes") benchmarkIcon = embeddedIcons.iconThumbprintGreen;
|
|
162
|
+
|
|
163
|
+
toolIcon = measurement.ref == "benchmark" ? benchmarkIcon : toolIcon;
|
|
164
|
+
if (toolIcon) form.getButton(`Block${blockNum}-Row${rowNum}-Col4`).setImage(toolIcon);
|
|
165
|
+
}
|
|
166
|
+
} else break;
|
|
167
|
+
}
|
|
167
168
|
}
|
|
168
169
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
})
|
|
170
|
+
formPg1.flatten();
|
|
171
|
+
formPg2.flatten();
|
|
172
|
+
|
|
173
|
+
if (payload.tests.length > 1) {
|
|
174
|
+
const [secondPage] = await pdfDocPg1.copyPages(pdfDocPg2, [0]);
|
|
175
|
+
pdfDocPg1.insertPage(1, secondPage);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return await pdfDocPg1.saveAsBase64({
|
|
179
|
+
dataUri: true
|
|
180
|
+
});
|
|
181
|
+
} catch (error) { console.log(error) }
|
|
181
182
|
}
|
|
@@ -5,69 +5,70 @@ import * as photos6 from '../base-64/photos6.js';
|
|
|
5
5
|
import * as base64 from '../base-64/icons.js';
|
|
6
6
|
import * as util from '../util.js';
|
|
7
7
|
|
|
8
|
-
export async function getReport(payload) {
|
|
8
|
+
export async function getReport(payload) { console.log("Photo Page(s) - Payload ?!??!:"); console.log(JSON.stringify(payload));
|
|
9
|
+
try {
|
|
10
|
+
const mqLogoBytes = util._base64ToArrayBuffer(base64.mqLogo);
|
|
11
|
+
let maxPhotosPerPage = payload.meta.pdf_settings.maxPhotosPerPage;
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
page = photos2;
|
|
20
|
-
pSize = "Large";
|
|
21
|
-
}
|
|
13
|
+
// Layout Configuration
|
|
14
|
+
let docs = [], forms = [], page = photos6, pSize = "Small";
|
|
15
|
+
if (maxPhotosPerPage == 4) {
|
|
16
|
+
page = photos4;
|
|
17
|
+
pSize = "Mid";
|
|
18
|
+
} else if (maxPhotosPerPage == 2) {
|
|
19
|
+
page = photos2;
|
|
20
|
+
pSize = "Large";
|
|
21
|
+
}
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
23
|
+
// Process All Photos
|
|
24
|
+
let previousPhotoSectionName;
|
|
25
|
+
let docIndex = 0;
|
|
26
|
+
let photoSectionKeys = Object.keys(payload.photos.project);
|
|
27
|
+
if (photoSectionKeys && photoSectionKeys.length > 0) {
|
|
28
|
+
docs[docIndex] = await PDFDocument.load(util._base64ToArrayBuffer(page.base64));
|
|
29
|
+
forms[docIndex] = docs[docIndex].getForm();
|
|
30
|
+
forms[docIndex].getButton("FullWidthLogo").setImage(await docs[docIndex].embedPng(mqLogoBytes));
|
|
31
|
+
forms[docIndex].getTextField("Header").setText(`Project Photos`);
|
|
32
|
+
let photoPosition = 1;
|
|
33
|
+
for (let pskIndex = 0; pskIndex < photoSectionKeys.length; pskIndex++) { // Iterate over X user-defined photo sections within each photo collection
|
|
34
|
+
let photoSectionKey = photoSectionKeys[pskIndex];
|
|
35
|
+
let photoSection = payload.photos.project[photoSectionKey];
|
|
36
|
+
let photoSectionName = photoSection.name;
|
|
37
|
+
let photos = photoSection.photos;
|
|
38
|
+
if (photos && photos.length > 0) {
|
|
39
|
+
for (let pIndex = 1; pIndex <= photos.length; pIndex++) { // Iterate over X user-defined photos within each photo section
|
|
40
|
+
let photo = photos[pIndex-1];
|
|
41
|
+
if (photoPosition > maxPhotosPerPage) { // Need a new page
|
|
42
|
+
photoPosition = 1;
|
|
43
|
+
docIndex++;
|
|
44
|
+
docs[docIndex] = await PDFDocument.load(util._base64ToArrayBuffer(page.base64));
|
|
45
|
+
forms[docIndex] = docs[docIndex].getForm();
|
|
46
|
+
forms[docIndex].getButton("FullWidthLogo").setImage(await docs[docIndex].embedPng(mqLogoBytes));
|
|
47
|
+
forms[docIndex].getTextField("Header").setText(`Project Photos`);
|
|
48
|
+
}
|
|
49
|
+
let imageToSet;
|
|
50
|
+
if (photo.base64.includes("image/jpeg")) imageToSet = await docs[docIndex].embedJpg(util._base64ToArrayBuffer(photo.base64));
|
|
51
|
+
else if (photo.base64.includes("image/png")) imageToSet = await docs[docIndex].embedPng(util._base64ToArrayBuffer(photo.base64));
|
|
52
|
+
if (imageToSet) forms[docIndex].getButton(`photo${pSize}${photoPosition}`).setImage(imageToSet);
|
|
53
|
+
let photoSubText = photoSection.name;
|
|
54
|
+
let isFirstPhotoOfSection = previousPhotoSectionName !== photoSectionName;
|
|
55
|
+
if (isFirstPhotoOfSection && photoSection.hasNotes && photoSection.notes) photoSubText += `: ${photoSection.notes}`;
|
|
56
|
+
forms[docIndex].getTextField(`Notes${photoPosition}`).setText(`${photoSubText}`);
|
|
57
|
+
photoPosition++;
|
|
58
|
+
previousPhotoSectionName = photoSectionName;
|
|
48
59
|
}
|
|
49
|
-
let imageToSet;
|
|
50
|
-
if (photo.base64.includes("image/jpeg")) imageToSet = await docs[docIndex].embedJpg(util._base64ToArrayBuffer(photo.base64));
|
|
51
|
-
else if (photo.base64.includes("image/png")) imageToSet = await docs[docIndex].embedPng(util._base64ToArrayBuffer(photo.base64));
|
|
52
|
-
if (imageToSet) forms[docIndex].getButton(`photo${pSize}${photoPosition}`).setImage(imageToSet);
|
|
53
|
-
let photoSubText = photoSection.name;
|
|
54
|
-
let isFirstPhotoOfSection = previousPhotoSectionName !== photoSectionName;
|
|
55
|
-
if (isFirstPhotoOfSection && photoSection.hasNotes && photoSection.notes) photoSubText += `: ${photoSection.notes}`;
|
|
56
|
-
forms[docIndex].getTextField(`Notes${photoPosition}`).setText(`${photoSubText}`);
|
|
57
|
-
photoPosition++;
|
|
58
|
-
previousPhotoSectionName = photoSectionName;
|
|
59
60
|
}
|
|
60
61
|
}
|
|
62
|
+
docIndex++;
|
|
61
63
|
}
|
|
62
|
-
docIndex++;
|
|
63
|
-
}
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
// Prepare Deliverable
|
|
66
|
+
forms.forEach(form => { form.flatten() });
|
|
67
|
+
let pdfDoc = await PDFDocument.create();
|
|
68
|
+
for (let i = 0; i < docs.length; i++) {
|
|
69
|
+
const [nextPage] = await pdfDoc.copyPages(docs[i], [0]);
|
|
70
|
+
pdfDoc.insertPage(i, nextPage);
|
|
71
|
+
}
|
|
72
|
+
return await pdfDoc.saveAsBase64({ dataUri: true });
|
|
73
|
+
} catch (error) { console.log(error) }
|
|
73
74
|
}
|
|
@@ -3,8 +3,8 @@ import * as base64 from '../base-64/icons.js';
|
|
|
3
3
|
import * as pdf from '../base-64/mq-vitals-cooling.js';
|
|
4
4
|
import * as util from '../util.js';
|
|
5
5
|
|
|
6
|
-
export async function getReport(payload, _test) { console.log(payload);
|
|
7
|
-
|
|
6
|
+
export async function getReport(payload, _test) { console.log("Vitals Cooling - Payload:"); console.log(payload);
|
|
7
|
+
try {
|
|
8
8
|
// fetch and load form
|
|
9
9
|
const formPdfBytes = util._base64ToArrayBuffer(pdf.base64);
|
|
10
10
|
const pdfDoc = await PDFDocument.load(formPdfBytes);
|
|
@@ -43,8 +43,8 @@ export async function getReport(payload, _test) { console.log(payload);
|
|
|
43
43
|
if (profileImageType.type == "jpg") profileImage = await pdfDoc.embedJpg(util._base64ToArrayBuffer(profileImage));
|
|
44
44
|
else if (profileImageType.type == "png") profileImage = await pdfDoc.embedPng(util._base64ToArrayBuffer(profileImage));
|
|
45
45
|
}
|
|
46
|
-
if (companyImageType == "jpg")
|
|
47
|
-
else if (companyImageType == "png")
|
|
46
|
+
if (companyImageType == "jpg") companyImage = await pdfDoc.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
|
|
47
|
+
else if (companyImageType == "png") companyImage = await pdfDoc.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
|
|
48
48
|
|
|
49
49
|
// get form for filling
|
|
50
50
|
const form = pdfDoc.getForm();
|
|
@@ -198,6 +198,7 @@ export async function getReport(payload, _test) { console.log(payload);
|
|
|
198
198
|
form.flatten();
|
|
199
199
|
const pdfBase64 = await pdfDoc.saveAsBase64({ dataUri: true });
|
|
200
200
|
return pdfBase64;
|
|
201
|
+
} catch (error) { console.log(error) }
|
|
201
202
|
}
|
|
202
203
|
|
|
203
204
|
function getTextFields(payload) {
|
|
@@ -3,8 +3,8 @@ import * as base64 from '../base-64/icons.js';
|
|
|
3
3
|
import * as pdf from '../base-64/mq-vitals-heating.js';
|
|
4
4
|
import * as util from '../util.js';
|
|
5
5
|
|
|
6
|
-
export async function getReport(payload, _test) { console.log("Vitals Heating
|
|
7
|
-
|
|
6
|
+
export async function getReport(payload, _test) { console.log("Vitals Heating - Payload:"); console.log(payload);
|
|
7
|
+
try {
|
|
8
8
|
// fetch and load form
|
|
9
9
|
const formPdfBytes = util._base64ToArrayBuffer(pdf.base64);
|
|
10
10
|
const pdfDoc = await PDFDocument.load(formPdfBytes);
|
|
@@ -43,8 +43,8 @@ export async function getReport(payload, _test) { console.log("Vitals Heating Re
|
|
|
43
43
|
if (profileImageType.type == "jpg") profileImage = await pdfDoc.embedJpg(util._base64ToArrayBuffer(profileImage));
|
|
44
44
|
else if (profileImageType.type == "png") profileImage = await pdfDoc.embedPng(util._base64ToArrayBuffer(profileImage));
|
|
45
45
|
}
|
|
46
|
-
if (companyImageType == "jpg")
|
|
47
|
-
else if (companyImageType == "png")
|
|
46
|
+
if (companyImageType == "jpg") companyImage = await pdfDoc.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
|
|
47
|
+
else if (companyImageType == "png") companyImage = await pdfDoc.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
|
|
48
48
|
|
|
49
49
|
// get form for filling
|
|
50
50
|
const form = pdfDoc.getForm();
|
|
@@ -194,6 +194,7 @@ export async function getReport(payload, _test) { console.log("Vitals Heating Re
|
|
|
194
194
|
form.flatten();
|
|
195
195
|
const pdfBase64 = await pdfDoc.saveAsBase64({ dataUri: true });
|
|
196
196
|
return pdfBase64;
|
|
197
|
+
} catch (error) { console.log(error) }
|
|
197
198
|
}
|
|
198
199
|
|
|
199
200
|
function getTextFields(payload) {
|