@measurequick/measurequick-report-generator 1.2.3 → 1.2.5

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@measurequick/measurequick-report-generator",
3
- "version": "1.2.3",
3
+ "version": "1.2.5",
4
4
  "description": "Generates PDF documents for various MeasureQuick applications.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -1,4 +1,6 @@
1
- import { PDFDocument } from 'pdf-lib';
1
+ import {
2
+ PDFDocument
3
+ } from 'pdf-lib';
2
4
  import * as base64 from '../base-64/icons.js';
3
5
  import * as util from '../util.js';
4
6
  import * as pdf from '../base-64/measurement-details-page.js';
@@ -6,159 +8,169 @@ import * as pdf from '../base-64/measurement-details-page.js';
6
8
  let embeddedIconsTestIn = {};
7
9
  let embeddedIconsTestOut = {};
8
10
 
9
- export async function getReport(payload) { console.log(payload);
10
- const pdfDocPg1 = await PDFDocument.load(util._base64ToArrayBuffer(pdf.base64));
11
- const pdfDocPg2 = await PDFDocument.load(util._base64ToArrayBuffer(pdf.base64));
12
-
13
- const formPg1 = pdfDocPg1.getForm();
14
- const formPg2 = pdfDocPg2.getForm();
15
-
16
- let mapImagePg1, mapImagePg2;
17
- if (payload.map) {
18
- if (payload.map.includes("image/jpeg")) {
19
- mapImagePg1 = await pdfDocPg1.embedJpg(util._base64ToArrayBuffer(payload.map));
20
- mapImagePg2 = await pdfDocPg2.embedJpg(util._base64ToArrayBuffer(payload.map));
21
- } else if (payload.map.includes("image/png")) {
22
- mapImagePg1 = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(payload.map));
23
- mapImagePg2 = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(payload.map));
24
- }
11
+ export async function getReport(payload) {
12
+ console.log(payload);
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));
25
27
  }
26
-
27
- let labels = ["iconRangeHigh", "iconRangeLow", "iconRangeNormal", "iconTesto", "iconCalculator", "iconFieldpiece",
28
- "iconUei", "iconSporlanPro", "iconSporlanLegacy", "iconIconnect", "iconImanifold", "iconSensi",
29
- "iconBluflame", "iconRedfish510", "iconRedfish510333", "iconRedfish550", "iconDg1000", "iconTrueflow", "iconThumbprintRed", "iconThumbprintGreen", "iconThumbprintYellow"];
30
- for (let label of labels) embeddedIconsTestIn[label] = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(base64[label]));
31
- for (let label of labels) embeddedIconsTestOut[label] = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(base64[label]));
32
-
33
- const mqLogoBytes = util._base64ToArrayBuffer(base64.mqLogo);
34
- const mqLogoPg1 = await pdfDocPg1.embedPng(mqLogoBytes);
35
- const mqLogoPg2 = await pdfDocPg2.embedPng(mqLogoBytes);
36
-
37
- // embed company logo and profile picture
38
- let profileImagePg1, companyImagePg1, profileImagePg2, companyImagePg2;
39
- if (payload.meta.pdf_settings.includeProfilePic) {
40
- if (payload.meta.pdf_settings.shapeProfilePic && payload.meta.profile_settings.profilePicCircleBase64) {
41
- if (payload.meta.profile_settings.profilePicCircleBase64.includes("image/jpeg")) {
42
- profileImagePg1 = await pdfDocPg1.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicCircleBase64));
43
- profileImagePg2 = await pdfDocPg2.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicCircleBase64));
44
- } else if (payload.meta.profile_settings.profilePicCircleBase64.includes("image/png")) {
45
- profileImagePg1 = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicCircleBase64));
46
- profileImagePg2 = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicCircleBase64));
47
- }
48
- } else if (payload.meta.profile_settings.profilePicSquareBase64) {
49
- if (payload.meta.profile_settings.profilePicSquareBase64.includes("image/jpeg")) {
50
- profileImagePg1 = await pdfDocPg1.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicSquareBase64));
51
- profileImagePg2 = await pdfDocPg2.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicSquareBase64));
52
- } else if (payload.meta.profile_settings.profilePicSquareBase64.includes("image/png")) {
53
- profileImagePg1 = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicSquareBase64));
54
- profileImagePg2 = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.profilePicSquareBase64));
55
- }
56
- }
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));
59
+ }
57
60
  }
58
- if (payload.meta.pdf_settings.includeCompanyLogo && payload.meta.profile_settings.companyLogoBase64) {
59
- if (payload.meta.profile_settings.companyLogoBase64.includes("image/jpeg")) {
60
- companyImagePg1 = await pdfDocPg1.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
61
- companyImagePg2 = await pdfDocPg2.embedJpg(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
62
- } else if (payload.meta.profile_settings.companyLogoBase64.includes("image/png")) {
63
- companyImagePg1 = await pdfDocPg1.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
64
- companyImagePg2 = await pdfDocPg2.embedPng(util._base64ToArrayBuffer(payload.meta.profile_settings.companyLogoBase64));
65
- }
61
+ }
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));
66
69
  }
67
-
68
- // print company logo and profile picture
69
- if (profileImagePg1 && companyImagePg1) {
70
- formPg1.getButton("ProfilePicture").setImage(profileImagePg1);
71
- formPg1.getButton("HalfWidthLogo").setImage(companyImagePg1);
72
- formPg2.getButton("ProfilePicture").setImage(profileImagePg2);
73
- formPg2.getButton("HalfWidthLogo").setImage(companyImagePg2);
74
- if (payload.meta.profile_settings.techFirstName || payload.meta.profile_settings.techLastName) {
75
- formPg1.getTextField('TechName').setText(`${payload.meta.profile_settings.techFirstName} ${payload.meta.profile_settings.techLastName}`);
76
- formPg2.getTextField('TechName').setText(`${payload.meta.profile_settings.techFirstName} ${payload.meta.profile_settings.techLastName}`);
77
- }
78
- } else if (profileImagePg1) {
79
- formPg1.getButton("ProfilePicture").setImage(profileImagePg1);
80
- formPg1.getButton("HalfWidthLogo").setImage(mqLogoPg1);
81
- formPg2.getButton("ProfilePicture").setImage(profileImagePg2);
82
- formPg2.getButton("HalfWidthLogo").setImage(mqLogoPg2);
83
- if (payload.meta.profile_settings.techFirstName || payload.meta.profile_settings.techLastName) {
84
- formPg1.getTextField('TechName').setText(`${payload.meta.profile_settings.techFirstName} ${payload.meta.profile_settings.techLastName}`);
85
- formPg2.getTextField('TechName').setText(`${payload.meta.profile_settings.techFirstName} ${payload.meta.profile_settings.techLastName}`);
86
- }
70
+ }
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
+ }
91
+ } else {
92
+ if (companyImagePg1) {
93
+ formPg1.getButton("FullWidthLogo").setImage(companyImagePg1);
94
+ formPg2.getButton("FullWidthLogo").setImage(companyImagePg2);
87
95
  } else {
88
- if (companyImagePg1) {
89
- formPg1.getButton("FullWidthLogo").setImage(companyImagePg1);
90
- formPg2.getButton("FullWidthLogo").setImage(companyImagePg2);
91
- } else {
92
- formPg1.getButton("FullWidthLogo").setImage(mqLogoPg1);
93
- formPg2.getButton("FullWidthLogo").setImage(mqLogoPg2);
94
- }
96
+ formPg1.getButton("FullWidthLogo").setImage(mqLogoPg1);
97
+ formPg2.getButton("FullWidthLogo").setImage(mqLogoPg2);
95
98
  }
96
-
97
- for (let t = 0; t < payload.tests.length; t++) {
98
- let section = t == 0 ? 'test_in' : 'test_out';
99
- let form = t == 0 ? formPg1 : formPg2;
100
- let test = payload.tests[t].testInfo;
101
- let date = new Date();
102
- if (payload.meta.cName && payload.meta.address && payload.meta.city && payload.meta.state && payload.meta.zip) {
103
- form.getTextField('Name').setText(`${payload.meta.cName}`);
104
- form.getTextField('Address 1').setText(`${payload.meta.address}`);
105
- if (payload.meta.address2) {
106
- form.getTextField('Address 2').setText(`${payload.meta.address2}`);
107
- form.getTextField('City State Zip').setText(`${payload.meta.city}${payload.meta.state}${payload.meta.zip}`);
108
- } else form.getTextField('Address 2').setText(`${payload.meta.city}${payload.meta.state}${payload.meta.zip}`);
109
- form.getTextField('Date of Service').setText(date.toLocaleDateString("en-US"));
110
- form.getTextField('Time of Service').setText(date.toLocaleTimeString("en-US"));
111
- }
112
-
113
- let systemScorePercentage = +payload.meta.system_score.toFixed(0);
114
- let systemScoreGrade = util.getGradeFromScore(systemScorePercentage);
115
- let systemScoreColor = util.getColorFromGrade(systemScoreGrade);
116
- form.getTextField(`YourSystemScore${systemScoreColor}`).setText(`${systemScorePercentage}% ${systemScoreGrade}`);
117
-
118
- if (mapImagePg1 && t == 0) form.getButton('Map Image').setImage(mapImagePg1);
119
- if (mapImagePg2 && t == 1) form.getButton('Map Image').setImage(mapImagePg2);
120
- 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.");
121
-
122
- for (let blockNum = 1; blockNum < 5; blockNum++) {
123
- form.getTextField(`Block${blockNum}-Title`).setText(payload[section][`title${blockNum}`]);
124
- for (let rowNum = 1; rowNum < 14; rowNum++) {
125
- let measurement;// = payload.test_in[`block${blockNum}`][rowNum-1];
126
- //let measurement1, measurement2;
127
- if (t == 0) measurement = payload.test_in[`block${blockNum}`][rowNum-1];
128
- else if (t == 1) measurement = payload.test_out[`block${blockNum}`][rowNum-1];
129
- if (measurement) {
130
- let units = measurement.units ? `(${measurement.units})` : "";
131
- form.getTextField(`Block${blockNum}-Row${rowNum}-Col1`).setText(`${measurement.label} ${units}`);
132
- let val = measurement.value ? measurement.value : (+test.data[measurement.ref]);
133
- if (!val) val = "--";
134
- else if (measurement.fixTo) val = val.toFixed(measurement.fixTo);
135
- form.getTextField(`Block${blockNum}-Row${rowNum}-Col2`).setText(`${val}`);
136
- let embeddedIcons = section == "test_in" ? embeddedIconsTestIn : embeddedIconsTestOut;
137
- if (blockNum != 4) {
138
- let rangeIcon = util.getRangeIcon(test, measurement.ref, embeddedIcons);
139
- if (rangeIcon && payload.meta.pdf_settings._includeRangeIndicators) form.getButton(`Block${blockNum}-Row${rowNum}-Col3`).setImage(rangeIcon);
140
- let toolIcon = false;
141
- if (measurement.ref == "superheat" || measurement.ref == "subcooling" || measurement.ref == "compression_ratio" || measurement.ref == "airflow_estimated") toolIcon = embeddedIcons.iconCalculator;
142
- else toolIcon = util.getToolIcon(test, measurement.ref, embeddedIcons);
143
-
144
- let benchmarkIcon = embeddedIcons.iconThumbprintRed;
145
- if (measurement.value == "Yes, under duress") benchmarkIcon = embeddedIcons.iconThumbprintYellow;
146
- else if (measurement.value == "Yes") benchmarkIcon = embeddedIcons.iconThumbprintGreen;
147
-
148
- toolIcon = measurement.ref == "benchmark" ? benchmarkIcon : toolIcon;
149
- if (toolIcon) form.getButton(`Block${blockNum}-Row${rowNum}-Col4`).setImage(toolIcon);
150
- }
151
- } else break;
152
- }
153
- }
99
+ }
100
+
101
+ for (let t = 0; t < payload.tests.length; t++) {
102
+ let section = t == 0 ? 'test_in' : 'test_out';
103
+ let form = t == 0 ? formPg1 : formPg2;
104
+ let test = payload.tests[t].testInfo;
105
+ let date = new Date();
106
+ if (payload.meta.cName && payload.meta.address && payload.meta.city && payload.meta.state && payload.meta.zip) {
107
+ form.getTextField('Name').setText(`${payload.meta.cName}`);
108
+ form.getTextField('Address 1').setText(`${payload.meta.address}`);
109
+ if (payload.meta.address2) {
110
+ form.getTextField('Address 2').setText(`${payload.meta.address2}`);
111
+ form.getTextField('City State Zip').setText(`${payload.meta.city}${payload.meta.state}${payload.meta.zip}`);
112
+ } else form.getTextField('Address 2').setText(`${payload.meta.city}${payload.meta.state}${payload.meta.zip}`);
113
+ form.getTextField('Date of Service').setText(date.toLocaleDateString("en-US"));
114
+ form.getTextField('Time of Service').setText(date.toLocaleTimeString("en-US"));
154
115
  }
155
- formPg1.flatten();
156
- formPg2.flatten();
157
116
 
158
- if (payload.tests.length > 1) {
159
- const [secondPage] = await pdfDocPg1.copyPages(pdfDocPg2, [0]);
160
- pdfDocPg1.insertPage(1, secondPage);
117
+ let systemScorePercentage = +payload.meta.system_score.toFixed(0);
118
+ let systemScoreGrade = util.getGradeFromScore(systemScorePercentage);
119
+ let systemScoreColor = util.getColorFromGrade(systemScoreGrade);
120
+ form.getTextField(`YourSystemScore${systemScoreColor}`).setText(`${systemScorePercentage}% ${systemScoreGrade}`);
121
+
122
+ if (mapImagePg1 && t == 0) form.getButton('Map Image').setImage(mapImagePg1);
123
+ if (mapImagePg2 && t == 1) form.getButton('Map Image').setImage(mapImagePg2);
124
+ 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.");
125
+
126
+ for (let blockNum = 1; blockNum < 5; blockNum++) {
127
+ form.getTextField(`Block${blockNum}-Title`).setText(payload[section][`title${blockNum}`]);
128
+ for (let rowNum = 1; rowNum < 14; rowNum++) {
129
+ let measurement;
130
+ if (t == 0) measurement = payload.test_in[`block${blockNum}`][rowNum - 1];
131
+ else if (t == 1) measurement = payload.test_out[`block${blockNum}`][rowNum - 1];
132
+ if (measurement) {
133
+ if (measurement.label == "Cond. Volts/Amps") {
134
+ let condDisplay = util.getElectricalData(test, "");
135
+ if (condDisplay.voltageIcon) form.getButton(`Block${blockNum}-Row${rowNum}-Col4`).setImage(condDisplay.voltageIcon);
136
+ } else if (measurement.label == "AHU Volts/Amps") {
137
+ let ahuDisplay = util.getElectricalData(test, "_ahu");
138
+ if (ahuDisplay.voltageIcon) form.getButton(`Block${blockNum}-Row${rowNum}-Col4`).setImage(ahuDisplay.voltageIcon);
139
+ }
140
+ let units = measurement.units ? `(${measurement.units})` : "";
141
+ form.getTextField(`Block${blockNum}-Row${rowNum}-Col1`).setText(`${measurement.label} ${units}`);
142
+ let val = measurement.value ? measurement.value : (+test.data[measurement.ref]);
143
+ if (!val) val = "--";
144
+ else if (measurement.fixTo) val = val.toFixed(measurement.fixTo);
145
+ form.getTextField(`Block${blockNum}-Row${rowNum}-Col2`).setText(`${val}`);
146
+ let embeddedIcons = section == "test_in" ? embeddedIconsTestIn : embeddedIconsTestOut;
147
+ if (blockNum != 4) {
148
+ let rangeIcon = util.getRangeIcon(test, measurement.ref, embeddedIcons);
149
+ if (rangeIcon && payload.meta.pdf_settings._includeRangeIndicators) form.getButton(`Block${blockNum}-Row${rowNum}-Col3`).setImage(rangeIcon);
150
+ let toolIcon = false;
151
+ if (measurement.ref == "superheat" || measurement.ref == "subcooling" || measurement.ref == "compression_ratio" || measurement.ref == "airflow_estimated") toolIcon = embeddedIcons.iconCalculator;
152
+ else toolIcon = util.getToolIcon(test, measurement.ref, embeddedIcons);
153
+
154
+ let benchmarkIcon = embeddedIcons.iconThumbprintRed;
155
+ if (measurement.value == "Yes, under duress") benchmarkIcon = embeddedIcons.iconThumbprintYellow;
156
+ else if (measurement.value == "Yes") benchmarkIcon = embeddedIcons.iconThumbprintGreen;
157
+
158
+ toolIcon = measurement.ref == "benchmark" ? benchmarkIcon : toolIcon;
159
+ if (toolIcon) form.getButton(`Block${blockNum}-Row${rowNum}-Col4`).setImage(toolIcon);
160
+ }
161
+ } else break;
162
+ }
161
163
  }
162
-
163
- return await pdfDocPg1.saveAsBase64({ dataUri: true });
164
+ }
165
+ formPg1.flatten();
166
+ formPg2.flatten();
167
+
168
+ if (payload.tests.length > 1) {
169
+ const [secondPage] = await pdfDocPg1.copyPages(pdfDocPg2, [0]);
170
+ pdfDocPg1.insertPage(1, secondPage);
171
+ }
172
+
173
+ return await pdfDocPg1.saveAsBase64({
174
+ dataUri: true
175
+ });
164
176
  }
@@ -47,13 +47,13 @@ export async function getReport(payload) { console.log("Photos Report"); console
47
47
  else if (photo.includes("image/png")) image = await doc.embedPng(util._base64ToArrayBuffer(photo));
48
48
  if (image) form.getButton(`photo${size}${j}`).setImage(image);
49
49
  let firstPhoto = (lastTag != currentTag);
50
+ lastTag = currentTag;
50
51
  let notes = payload.photos[keys[k]][sections[sectionNum]].name;
51
52
  if (payload.photos[keys[k]][sections[sectionNum]].hasNotes && firstPhoto) notes += ": " + payload.photos[keys[k]][sections[sectionNum]].notes;
52
53
  form.getTextField(`Notes${j}`).setText(`${notes}`);
53
54
  }
54
55
  }
55
56
  }
56
- lastTag = currentTag;
57
57
  }
58
58
  }
59
59
  forms.forEach(form => { form.flatten() });