@lighthouse/common 6.10.0 → 6.10.1-canary.0

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.
Files changed (229) hide show
  1. package/.mise.toml +6 -6
  2. package/CHANGELOG.md +758 -758
  3. package/README.md +1 -1
  4. package/dist/errors/FetchImageError.js +3 -3
  5. package/dist/helpers/fetch-image-for-pdf-generator-service/index.js +7 -7
  6. package/dist/helpers/floatify/index.js +6 -6
  7. package/dist/helpers/get-audit-items-data/index.js +47 -36
  8. package/dist/helpers/validate-url/index.js +4 -4
  9. package/dist/pdf/activity-report/index.js +32 -32
  10. package/dist/pdf/audit/index.js +23 -23
  11. package/dist/pdf/helpers/fields/index.js +47 -27
  12. package/dist/pdf/issue/index.js +23 -23
  13. package/dist/pdf/job/index.js +22 -22
  14. package/dist/pdf/shift-report/index.js +28 -28
  15. package/dist/pdf/task/index.js +23 -23
  16. package/dist/scheduling/generators/occurrenceIntervalsGenerator.js +2 -2
  17. package/dist/scheduling/generators/scheduleIntervalsGenerator.js +2 -2
  18. package/dist/scheduling/generators/serviceIntervalsGenerator.js +2 -2
  19. package/dist/scheduling/helpers/convertToTimezone.js +6 -6
  20. package/dist/scheduling/helpers/generateNonRepeatingSchedule.js +2 -2
  21. package/dist/scheduling/helpers/generateRepeatingSchedule.js +2 -2
  22. package/dist/scheduling/helpers/generateScheduleEnd.js +2 -2
  23. package/dist/scheduling/helpers/hasValidStartAndEnd.js +5 -5
  24. package/dist/scheduling/helpers/intervalCovers.js +6 -6
  25. package/dist/scheduling/helpers/intervalIntersectsEnd.js +6 -6
  26. package/dist/scheduling/helpers/intervalIntersectsStart.js +6 -6
  27. package/dist/scheduling/helpers/intervalOnlyIntersectsEnd.js +6 -6
  28. package/dist/scheduling/helpers/intervalOnlyIntersectsStart.js +6 -6
  29. package/dist/scheduling/helpers/intervalOutside.js +6 -6
  30. package/dist/scheduling/helpers/intervalWithin.js +6 -6
  31. package/dist/scheduling/helpers/mergeIntervals.js +6 -6
  32. package/dist/scheduling/helpers/splitIntervals.js +6 -6
  33. package/dist/scheduling/strategies/getNext.js +2 -2
  34. package/dist/scheduling/strategies/getNextExactDateOfMonth.js +2 -2
  35. package/dist/scheduling/strategies/getNextLastDayOfMonth.js +2 -2
  36. package/dist/scheduling/strategies/getNextLastWeekdayOfMonth.js +2 -2
  37. package/dist/scheduling/strategies/getNextNoRepeat.js +2 -2
  38. package/dist/scheduling/strategies/getNextWeekday.js +2 -2
  39. package/dist/scheduling/strategies/getNextXDayOfXWeekOfMonth.js +2 -2
  40. package/dist/service-hours/__helpers__/calculate-hours.js +4 -4
  41. package/dist/service-hours/__helpers__/isOpen.js +2 -2
  42. package/dist/service-hours/schema.js +4 -4
  43. package/lib/constants.js +12 -6
  44. package/lib/constants.js.map +1 -1
  45. package/lib/errors/DomainError.js +14 -21
  46. package/lib/errors/DomainError.js.map +1 -1
  47. package/lib/errors/FetchImageError.js +17 -24
  48. package/lib/errors/FetchImageError.js.map +1 -1
  49. package/lib/errors/ValidationError.js +30 -36
  50. package/lib/errors/ValidationError.js.map +1 -1
  51. package/lib/errors/index.js +23 -5
  52. package/lib/errors/index.js.map +1 -1
  53. package/lib/helpers/build-fetch-url/index.js +43 -47
  54. package/lib/helpers/build-fetch-url/index.js.map +1 -1
  55. package/lib/helpers/fetch-image/index.js +83 -82
  56. package/lib/helpers/fetch-image/index.js.map +1 -1
  57. package/lib/helpers/fetch-image-for-pdf-generator-service/index.js +168 -243
  58. package/lib/helpers/fetch-image-for-pdf-generator-service/index.js.map +1 -1
  59. package/lib/helpers/fetch-image-for-web/index.js +71 -94
  60. package/lib/helpers/fetch-image-for-web/index.js.map +1 -1
  61. package/lib/helpers/fetch-lighthouse-logo/index.js +36 -61
  62. package/lib/helpers/fetch-lighthouse-logo/index.js.map +1 -1
  63. package/lib/helpers/floatify/index.js +13 -7
  64. package/lib/helpers/floatify/index.js.map +1 -1
  65. package/lib/helpers/get-assignees-full-names/index.js +11 -7
  66. package/lib/helpers/get-assignees-full-names/index.js.map +1 -1
  67. package/lib/helpers/get-audit-entry-details/index.js +42 -32
  68. package/lib/helpers/get-audit-entry-details/index.js.map +1 -1
  69. package/lib/helpers/get-audit-items-data/index.js +104 -83
  70. package/lib/helpers/get-audit-items-data/index.js.map +1 -1
  71. package/lib/helpers/get-geometry-geocoded-string/index.js +10 -5
  72. package/lib/helpers/get-geometry-geocoded-string/index.js.map +1 -1
  73. package/lib/helpers/get-issue-details/index.js +53 -43
  74. package/lib/helpers/get-issue-details/index.js.map +1 -1
  75. package/lib/helpers/get-job-details/index.js +49 -41
  76. package/lib/helpers/get-job-details/index.js.map +1 -1
  77. package/lib/helpers/get-location-reference/index.js +32 -34
  78. package/lib/helpers/get-location-reference/index.js.map +1 -1
  79. package/lib/helpers/get-pretty-duration/index.js +16 -10
  80. package/lib/helpers/get-pretty-duration/index.js.map +1 -1
  81. package/lib/helpers/get-reference-details/index.js +20 -10
  82. package/lib/helpers/get-reference-details/index.js.map +1 -1
  83. package/lib/helpers/get-status-details/index.js +8 -2
  84. package/lib/helpers/get-status-details/index.js.map +1 -1
  85. package/lib/helpers/get-task-entry-details/index.js +32 -23
  86. package/lib/helpers/get-task-entry-details/index.js.map +1 -1
  87. package/lib/helpers/get-timezone-abbr/index.js +11 -4
  88. package/lib/helpers/get-timezone-abbr/index.js.map +1 -1
  89. package/lib/helpers/get-timezone-datetime/index.js +20 -13
  90. package/lib/helpers/get-timezone-datetime/index.js.map +1 -1
  91. package/lib/helpers/get-user-full-name/index.js +9 -3
  92. package/lib/helpers/get-user-full-name/index.js.map +1 -1
  93. package/lib/helpers/get-value-as-percentage/index.js +9 -4
  94. package/lib/helpers/get-value-as-percentage/index.js.map +1 -1
  95. package/lib/helpers/image-validators/index.js +18 -12
  96. package/lib/helpers/image-validators/index.js.map +1 -1
  97. package/lib/helpers/index.js +130 -18
  98. package/lib/helpers/index.js.map +1 -1
  99. package/lib/helpers/validate-url/index.js +11 -5
  100. package/lib/helpers/validate-url/index.js.map +1 -1
  101. package/lib/images/index.js +10 -4
  102. package/lib/images/index.js.map +1 -1
  103. package/lib/index.js +66 -10
  104. package/lib/index.js.map +1 -1
  105. package/lib/pdf/activity-report/index.js +407 -537
  106. package/lib/pdf/activity-report/index.js.map +1 -1
  107. package/lib/pdf/audit/index.js +137 -134
  108. package/lib/pdf/audit/index.js.map +1 -1
  109. package/lib/pdf/fonts/index.js +4 -2
  110. package/lib/pdf/fonts/index.js.map +1 -1
  111. package/lib/pdf/helpers/build-audit-content/index.js +57 -51
  112. package/lib/pdf/helpers/build-audit-content/index.js.map +1 -1
  113. package/lib/pdf/helpers/build-audit-follow-ups/index.js +52 -50
  114. package/lib/pdf/helpers/build-audit-follow-ups/index.js.map +1 -1
  115. package/lib/pdf/helpers/build-location-scans-content/index.js +22 -16
  116. package/lib/pdf/helpers/build-location-scans-content/index.js.map +1 -1
  117. package/lib/pdf/helpers/build-template-content/index.js +52 -51
  118. package/lib/pdf/helpers/build-template-content/index.js.map +1 -1
  119. package/lib/pdf/helpers/default-footer/index.js +38 -35
  120. package/lib/pdf/helpers/default-footer/index.js.map +1 -1
  121. package/lib/pdf/helpers/default-header/index.js +40 -35
  122. package/lib/pdf/helpers/default-header/index.js.map +1 -1
  123. package/lib/pdf/helpers/default-styles/index.js +7 -1
  124. package/lib/pdf/helpers/default-styles/index.js.map +1 -1
  125. package/lib/pdf/helpers/fields/index.js +225 -214
  126. package/lib/pdf/helpers/fields/index.js.map +1 -1
  127. package/lib/pdf/helpers/format-location-address/index.js +14 -8
  128. package/lib/pdf/helpers/format-location-address/index.js.map +1 -1
  129. package/lib/pdf/helpers/generate-definition/index.js +60 -65
  130. package/lib/pdf/helpers/generate-definition/index.js.map +1 -1
  131. package/lib/pdf/helpers/horizontal-line/index.js +14 -14
  132. package/lib/pdf/helpers/horizontal-line/index.js.map +1 -1
  133. package/lib/pdf/helpers/html-transformer/index.js +45 -35
  134. package/lib/pdf/helpers/html-transformer/index.js.map +1 -1
  135. package/lib/pdf/helpers/index.js +194 -15
  136. package/lib/pdf/helpers/index.js.map +1 -1
  137. package/lib/pdf/helpers/parse-value/index.js +10 -4
  138. package/lib/pdf/helpers/parse-value/index.js.map +1 -1
  139. package/lib/pdf/helpers/table/index.js +136 -205
  140. package/lib/pdf/helpers/table/index.js.map +1 -1
  141. package/lib/pdf/helpers/text/index.js +11 -8
  142. package/lib/pdf/helpers/text/index.js.map +1 -1
  143. package/lib/pdf/icons/index.js +8 -2
  144. package/lib/pdf/icons/index.js.map +1 -1
  145. package/lib/pdf/index.js +47 -6
  146. package/lib/pdf/index.js.map +1 -1
  147. package/lib/pdf/issue/index.js +141 -135
  148. package/lib/pdf/issue/index.js.map +1 -1
  149. package/lib/pdf/job/index.js +95 -81
  150. package/lib/pdf/job/index.js.map +1 -1
  151. package/lib/pdf/shift-report/emptyFixtures.js +8 -2
  152. package/lib/pdf/shift-report/emptyFixtures.js.map +1 -1
  153. package/lib/pdf/shift-report/index.js +399 -521
  154. package/lib/pdf/shift-report/index.js.map +1 -1
  155. package/lib/pdf/task/index.js +89 -83
  156. package/lib/pdf/task/index.js.map +1 -1
  157. package/lib/scheduling/generators/index.js +38 -3
  158. package/lib/scheduling/generators/index.js.map +1 -1
  159. package/lib/scheduling/generators/occurrenceIntervalsGenerator.js +44 -37
  160. package/lib/scheduling/generators/occurrenceIntervalsGenerator.js.map +1 -1
  161. package/lib/scheduling/generators/scheduleIntervalsGenerator.js +20 -28
  162. package/lib/scheduling/generators/scheduleIntervalsGenerator.js.map +1 -1
  163. package/lib/scheduling/generators/serviceIntervalsGenerator.js +120 -150
  164. package/lib/scheduling/generators/serviceIntervalsGenerator.js.map +1 -1
  165. package/lib/scheduling/helpers/convertToTimezone.js +18 -11
  166. package/lib/scheduling/helpers/convertToTimezone.js.map +1 -1
  167. package/lib/scheduling/helpers/generateNonRepeatingSchedule.js +57 -95
  168. package/lib/scheduling/helpers/generateNonRepeatingSchedule.js.map +1 -1
  169. package/lib/scheduling/helpers/generateRepeatingSchedule.js +80 -119
  170. package/lib/scheduling/helpers/generateRepeatingSchedule.js.map +1 -1
  171. package/lib/scheduling/helpers/generateScheduleEnd.js +24 -14
  172. package/lib/scheduling/helpers/generateScheduleEnd.js.map +1 -1
  173. package/lib/scheduling/helpers/hasValidStartAndEnd.js +19 -11
  174. package/lib/scheduling/helpers/hasValidStartAndEnd.js.map +1 -1
  175. package/lib/scheduling/helpers/index.js +159 -14
  176. package/lib/scheduling/helpers/index.js.map +1 -1
  177. package/lib/scheduling/helpers/intervalCovers.js +13 -7
  178. package/lib/scheduling/helpers/intervalCovers.js.map +1 -1
  179. package/lib/scheduling/helpers/intervalIntersectsEnd.js +13 -7
  180. package/lib/scheduling/helpers/intervalIntersectsEnd.js.map +1 -1
  181. package/lib/scheduling/helpers/intervalIntersectsStart.js +13 -7
  182. package/lib/scheduling/helpers/intervalIntersectsStart.js.map +1 -1
  183. package/lib/scheduling/helpers/intervalOnlyIntersectsEnd.js +15 -10
  184. package/lib/scheduling/helpers/intervalOnlyIntersectsEnd.js.map +1 -1
  185. package/lib/scheduling/helpers/intervalOnlyIntersectsStart.js +15 -10
  186. package/lib/scheduling/helpers/intervalOnlyIntersectsStart.js.map +1 -1
  187. package/lib/scheduling/helpers/intervalOutside.js +15 -9
  188. package/lib/scheduling/helpers/intervalOutside.js.map +1 -1
  189. package/lib/scheduling/helpers/intervalWithin.js +13 -7
  190. package/lib/scheduling/helpers/intervalWithin.js.map +1 -1
  191. package/lib/scheduling/helpers/mergeIntervals.js +21 -17
  192. package/lib/scheduling/helpers/mergeIntervals.js.map +1 -1
  193. package/lib/scheduling/helpers/splitIntervals.js +24 -23
  194. package/lib/scheduling/helpers/splitIntervals.js.map +1 -1
  195. package/lib/scheduling/index.js +38 -3
  196. package/lib/scheduling/index.js.map +1 -1
  197. package/lib/scheduling/scheduling.types.js +9 -3
  198. package/lib/scheduling/scheduling.types.js.map +1 -1
  199. package/lib/scheduling/strategies/getNext.js +57 -63
  200. package/lib/scheduling/strategies/getNext.js.map +1 -1
  201. package/lib/scheduling/strategies/getNextExactDateOfMonth.js +47 -56
  202. package/lib/scheduling/strategies/getNextExactDateOfMonth.js.map +1 -1
  203. package/lib/scheduling/strategies/getNextLastDayOfMonth.js +43 -51
  204. package/lib/scheduling/strategies/getNextLastDayOfMonth.js.map +1 -1
  205. package/lib/scheduling/strategies/getNextLastWeekdayOfMonth.js +49 -56
  206. package/lib/scheduling/strategies/getNextLastWeekdayOfMonth.js.map +1 -1
  207. package/lib/scheduling/strategies/getNextNoRepeat.js +25 -36
  208. package/lib/scheduling/strategies/getNextNoRepeat.js.map +1 -1
  209. package/lib/scheduling/strategies/getNextWeekday.js +47 -79
  210. package/lib/scheduling/strategies/getNextWeekday.js.map +1 -1
  211. package/lib/scheduling/strategies/getNextXDayOfXWeekOfMonth.js +52 -58
  212. package/lib/scheduling/strategies/getNextXDayOfXWeekOfMonth.js.map +1 -1
  213. package/lib/scheduling/strategies/index.js +82 -7
  214. package/lib/scheduling/strategies/index.js.map +1 -1
  215. package/lib/schema/index.js +16 -1
  216. package/lib/schema/index.js.map +1 -1
  217. package/lib/schema/schema.js +28 -34
  218. package/lib/schema/schema.js.map +1 -1
  219. package/lib/service-hours/__helpers__/calculate-hours.js +24 -22
  220. package/lib/service-hours/__helpers__/calculate-hours.js.map +1 -1
  221. package/lib/service-hours/__helpers__/isOpen.js +25 -24
  222. package/lib/service-hours/__helpers__/isOpen.js.map +1 -1
  223. package/lib/service-hours/index.js +27 -2
  224. package/lib/service-hours/index.js.map +1 -1
  225. package/lib/service-hours/schema.js +68 -55
  226. package/lib/service-hours/schema.js.map +1 -1
  227. package/package.json +86 -86
  228. package/vitest.config.ts +23 -23
  229. package/vitest.setup.js +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["filter","find","groupBy","isEmpty","map","size","sortBy","take","toString","reduce","moment","Promise","generateDefinition","buildLocationScansContent","buildLocationScansBoundaries","horizontalLine","summaryStatTable","summaryWrapperTable","table","summaryFieldsTable","text","zebraFillColor","getLocationReference","getTimezoneAbbr","getTimezoneDatetime","launchIcon","DEFAULT_MAX_SCANS","MAX_ATTACHMENTS","LIGHTHOUSE_BASE_URL","buildActivityPdf","_x","_x2","_buildActivityPdf","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","pdfOptions","data","timestamp","timezone","title","content","wrap","_context","prev","next","generateContent","sent","abrupt","_objectSpread","fileTitle","type","stop","_x3","_generateContent","_callee2","activitySection","summarySection","titleTable","_context2","buildActivitySection","buildSummarySection","buildTitleTable","_x4","_buildActivitySection","_callee3","_data$showAlternate","showAlternate","locationScans","otherActivity","activitySummary","_context3","buildLocationScansSection","buildOtherActivitySection","buildActivitySummarySection","_x5","_buildActivitySummarySection","_callee4","audits","events","issues","_data$maxScans","maxScans","settings","tasks","enterEvents","exceedsMaxScans","scans","auditRows","issueRows","scanRows","taskRows","formCount","exceedsMaxForms","rows","sortedRows","header","hLine","activityTable","activitySummarySection","maxScansText","maxFormsText","_context4","event","getFormRowData","getScanRowData","concat","_toConsumableArray","style","body","layout","buildActivityTable","link","margin","push","_x6","_buildActivityTable","_callee6","_ref","timezoneAbbr","activityTableHeader","activityTableRows","activityTableBody","_context6","bold","alignment","_ref4","_callee5","location","icon","name","summaryFields","timezoneHour","iconCell","hasSummaryFields","fieldsTable","activityTableRow","_context5","format","showTzAbbr","fit","image","fields","colSpan","dontBreakRows","headerRow","hLineWidth","paddingLeft","paddingRight","paddingTop","paddingBottom","vLineWidth","widths","_x8","fillColor","start","zones","hourIntervalBoundaries","hourIntervalColumnHeaders","columns","interval","index","intervals","scansTableHeader","sortedZones","groupedEventsByZone","memo","zone","zoneEvents","_id","scansTableRows","length","undefined","sortedGroup","locationScansByInterval","locationScansByIntervalContent","totalEvents","zoneDoc","doc","zoneName","scansTableBody","scansTable","eventsByType","enterEventsCount","enter","issuesCount","tasksCount","auditsCount","auditsText","issuesText","scansText","tasksText","auditsCountText","scansCountText","issuesCountText","tasksCountText","auditTable","scanTable","issueTable","taskTables","wrapperTable","_x7","_buildOtherActivitySection","_callee7","otherActivitySummarySection","_context7","end","_location$address","address","headerTitle","headerSubTitle","addressText","street","city","state","postalCode","headerAddress","mTimezoneStart","tz","mTimezoneEnd","rangeStart","rangeEnd","add","startOf","headerRange","collection","_ref2","locations","users","document","createdAt","_document$entry","entry","_document$title","_document$user","user","entity","userDoc","firstName","lastName","_ref3","_document$user2","_document$zone"],"sources":["../../../src/pdf/activity-report/index.js"],"sourcesContent":["import {\n filter,\n find,\n groupBy,\n isEmpty,\n map,\n size,\n sortBy,\n take,\n toString,\n reduce,\n} from 'lodash'\n\nimport moment from 'moment-timezone'\nimport Promise from 'bluebird'\n\nimport {\n generateDefinition,\n buildLocationScansContent,\n buildLocationScansBoundaries,\n horizontalLine,\n summaryStatTable,\n summaryWrapperTable,\n table,\n summaryFieldsTable,\n text,\n zebraFillColor,\n} from '../helpers'\n\nimport {\n getLocationReference,\n getTimezoneAbbr,\n getTimezoneDatetime,\n} from '../../helpers'\nimport { launchIcon } from '../../images'\n\nconst DEFAULT_MAX_SCANS = 200\nconst MAX_ATTACHMENTS = 100\nconst LIGHTHOUSE_BASE_URL = 'https://app.lighthouse.io'\n\n/**\n * buildActivityPdf\n *\n * @param {object} pdfOptions - the pdf options\n * @param {string} pdfOptions.fileTitle - pdf file title\n * @param {function} pdfOptions.footer - function executed to generate footer\n * @param {function} pdfOptions.header - function executed to generate header\n * @param {string} pdfOptions.logoUrl - pdf logo url\n * @param {array} pdfOptions.pageMargins - pdf page margins\n * @param {string} pdfOptions.pageOrientation - pdf page orientation\n * @param {string} pdfOptions.pageSize - pdf page size\n * @param {object} pdfOptions.styles - pdf styles\n * @param {object} pdfOptions.title - pdf title\n * @param {object} data - pdf data\n * @param {array} data.audits - audit documents\n * @param {string} data.end - end datetime of summary report\n * @param {array} data.events - event documents\n * @param {object} data.location - location document\n * @param {array} data.locations - location documents\n * @param {array} data.issues - issue documents\n * @param {bool} data.maxScans - max scans to include in standard report\n * @param {bool} data.showAlternate - show alternate summary report\n * @param {string} data.start - start datetime of summary report\n * @param {object} data.settings - settings properties\n * @param {string} data.settings.awsS3BaseUrl - aws S3 base url\n * @param {string} data.settings.cloudfrontBaseUrl - cloudfront base url\n * @param {array} data.tasks - task documents\n * @param {string} data.timestamp - timestamp string\n * @param {string} data.timezone - timezone string\n * @param {array} data.zones - zone documents\n * @param {array} data.users - user documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport async function buildActivityPdf(pdfOptions, data) {\n const { timestamp, timezone } = data\n\n const title = 'Daily Activity Report'\n const content = await generateContent(data)\n\n return generateDefinition({\n content,\n fileTitle: title,\n timestamp,\n timezone,\n type: 'Activity Summary',\n ...pdfOptions,\n })\n}\n\nasync function generateContent(data) {\n const activitySection = await buildActivitySection(data)\n const summarySection = buildSummarySection(data)\n const titleTable = buildTitleTable(data)\n\n return [titleTable, summarySection, activitySection]\n}\n\nasync function buildActivitySection(data) {\n const { showAlternate = false } = data\n\n if (showAlternate) {\n const locationScans = buildLocationScansSection(data)\n const otherActivity = await buildOtherActivitySection(data)\n\n return [locationScans, otherActivity]\n }\n\n const activitySummary = await buildActivitySummarySection(data)\n\n return [activitySummary]\n}\n\nasync function buildActivitySummarySection(data) {\n const {\n audits,\n events,\n issues,\n maxScans = DEFAULT_MAX_SCANS,\n settings,\n tasks,\n timezone,\n } = data\n\n const enterEvents = filter(events, (event) => event.type === 'enter')\n const exceedsMaxScans = size(enterEvents) > maxScans\n const scans = take(enterEvents, maxScans)\n\n const auditRows = map(audits, getFormRowData('audits', data))\n const issueRows = map(issues, getFormRowData('issues', data))\n const scanRows = map(scans, getScanRowData(data))\n const taskRows = map(tasks, getFormRowData('tasks', data))\n\n const formCount = size([...auditRows, ...issueRows, ...taskRows])\n const exceedsMaxForms = formCount > MAX_ATTACHMENTS\n\n const rows = [...auditRows, ...issueRows, ...scanRows, ...taskRows]\n const sortedRows = sortBy(rows, ['timestamp'], ['asc'])\n const title = text('Activity Summary', { style: 'summarySectionHeader' })\n\n const header = table({\n body: [[title]],\n layout: 'noBorders',\n style: 'summaryHeaderTable',\n })\n\n const hLine = horizontalLine()\n const activityTable = await buildActivityTable({\n rows: sortedRows,\n settings,\n timezone,\n })\n const activitySummarySection = [header, hLine, activityTable]\n\n if (exceedsMaxScans) {\n const maxScansText = {\n text: [\n text(\n `Location Scans in the Daily Activity Report are limited to a total of ${maxScans}.`\n ),\n text(' To view all Location Scans visit '),\n text('the Events Report', {\n link: `${LIGHTHOUSE_BASE_URL}/reports/events`,\n }),\n text(' in the Lighthouse Management Console.'),\n ],\n style: 'small',\n margin: [0, 10, 0, 10],\n }\n\n activitySummarySection.push(maxScansText)\n }\n\n if (exceedsMaxForms) {\n const maxFormsText = {\n text: [\n text(\n `Detailed Form Submissions in the Daily Activity Report are limited to a total of ${MAX_ATTACHMENTS}. `\n ),\n text(\n 'To access individual Form Submissions, open the hyperlink next to the respective submission within the Activity Summary table. Alternatively, they may be accessed in the Lighthouse Management Console.'\n ),\n ],\n style: 'small',\n margin: [0, 10, 0, 10],\n }\n activitySummarySection.push(maxFormsText)\n }\n\n return activitySummarySection\n}\n\nasync function buildActivityTable({ rows, settings, timezone }) {\n const timezoneAbbr = getTimezoneAbbr(timezone)\n\n const activityTableHeader = [\n text('Activity', { bold: true }),\n { text: '' }, // icon column\n text('Location', { bold: true }),\n text('User', { bold: true }),\n text(`Timestamp (${timezoneAbbr})`, { alignment: 'right', bold: true }),\n ]\n\n const activityTableRows = await Promise.map(rows, async function (data) {\n const { link, location, icon, name, summaryFields, timestamp, title } = data\n\n const timezoneHour = getTimezoneDatetime({\n format: 'ddd DD h:mm a',\n showTzAbbr: false,\n timestamp,\n timezone,\n })\n\n const iconCell = icon\n ? { alignment: 'center', fit: [8, 8], image: icon, link }\n : { text: '' }\n\n // NOTE: pass link to each column as\n // we can't wrap the entire table row\n const rows = [\n [\n text(title, { link }),\n iconCell,\n text(location, { link }),\n text(name, { link }),\n text(timezoneHour, { alignment: 'right', link }),\n ],\n ]\n\n const hasSummaryFields = !isEmpty(summaryFields)\n\n if (hasSummaryFields) {\n const fieldsTable = await summaryFieldsTable({\n fields: summaryFields,\n settings,\n timezone,\n })\n rows.push([fieldsTable])\n }\n\n // NOTE: we return a table per row which includes the entry details and the\n // summary fields if relevant\n const activityTableRow = [\n table({\n body: [...rows],\n colSpan: 5,\n dontBreakRows: true,\n headerRow: 0,\n layout: {\n hLineWidth: () => 0,\n paddingLeft: () => 0,\n paddingRight: () => 0,\n paddingTop: () => 5,\n paddingBottom: () => 5,\n vLineWidth: () => 0,\n },\n // NOTE: the timestamp must fill up the rest of the table space as\n // otherwise the padding would be off between this table and the parent\n // table that wraps it\n widths: [130, 25, 110, 110, '*'],\n }),\n ]\n\n return activityTableRow\n })\n\n const activityTableBody = isEmpty(activityTableRows)\n ? [[text('No other activity', { colSpan: 5 })]]\n : activityTableRows\n\n const activityTable = table({\n body: [activityTableHeader, ...activityTableBody],\n dontBreakRows: true,\n layout: {\n hLineWidth: () => 0,\n fillColor: zebraFillColor,\n paddingLeft: () => 5,\n paddingRight: () => 5,\n paddingTop: () => 5,\n paddingBottom: () => 5,\n vLineWidth: () => 0,\n },\n widths: [120, 15, 100, 100, '*'],\n })\n\n return activityTable\n}\n\nfunction buildLocationScansSection(data) {\n const { events, start, timezone, zones } = data\n\n const title = text('Location Scans', { style: 'summarySectionHeader' })\n\n const header = table({\n body: [[title]],\n layout: 'noBorders',\n style: 'summaryHeaderTable',\n })\n\n // use start time and timezone to figure out the interval boundaries\n const hourIntervalBoundaries = buildLocationScansBoundaries(start, timezone)\n\n // pair interval boundaries into column headers for the table\n const hourIntervalColumnHeaders = hourIntervalBoundaries.reduce(\n (columns, interval, index, intervals) => {\n if (index < size(intervals) - 1)\n // skip the final iteration as it's just the end of the last interval\n columns.push(\n text(`${interval.format('h')}-${intervals[index + 1].format('hA')}`, {\n alignment: 'center',\n bold: true,\n })\n )\n return columns\n },\n []\n )\n\n const scansTableHeader = [\n text('Location', { bold: true }),\n ...hourIntervalColumnHeaders,\n text('Total', { alignment: 'right', bold: true }),\n ]\n\n const hLine = horizontalLine()\n\n // NOTE: only show the enter events within the summary table\n const enterEvents = filter(events, (event) => event.type === 'enter')\n const sortedZones = sortBy(zones, ['name'])\n\n const groupedEventsByZone = reduce(\n sortedZones,\n (memo, zone) => {\n const zoneEvents = filter(\n enterEvents,\n (event) => event.zone && event.zone.toString() === zone._id.toString()\n )\n memo[zone._id] = zoneEvents\n return memo\n },\n {}\n )\n\n const scansTableRows = map(groupedEventsByZone, (events, zone = '') => {\n const sortedGroup = sortBy(events, ['timestamp'], ['asc'])\n\n // put events into interval buckets\n const locationScansByInterval = buildLocationScansContent(\n hourIntervalBoundaries,\n events\n )\n // map the interval buckets to a format fit for the table\n const locationScansByIntervalContent = locationScansByInterval.map(\n (interval) => {\n return { alignment: 'center', text: size(interval) }\n }\n )\n\n const totalEvents = size(sortedGroup)\n\n const zoneDoc =\n zone && find(zones, (doc) => doc._id.toString() === zone.toString())\n const zoneName = (zoneDoc && zoneDoc.name) || 'Unknown Location'\n\n return [\n zoneName,\n ...locationScansByIntervalContent,\n { alignment: 'right', bold: true, text: totalEvents },\n ]\n })\n\n const scansTableBody = isEmpty(scansTableRows)\n ? [[text('No location scans', { colSpan: 10 })]]\n : scansTableRows\n\n const scansTable = table({\n body: [scansTableHeader, ...scansTableBody],\n widths: [100, '*', '*', '*', '*', '*', '*', '*', '*', '*'],\n })\n\n return [header, hLine, scansTable]\n}\n\nfunction buildSummarySection(data) {\n const { audits, events, issues, tasks } = data\n\n //const userEvents = groupBy(events, 'user')\n const eventsByType = groupBy(events, 'type')\n\n const enterEventsCount = size(eventsByType.enter)\n //const geoEventsCount = size(eventsByType.geo)\n const issuesCount = size(issues)\n const tasksCount = size(tasks)\n const auditsCount = size(audits)\n //const uniqueUsers = size(userEvents)\n\n const auditsText = text('AUDITS', { style: 'summaryText' })\n //const geoText = text('GPS', { style: 'summaryText' })\n const issuesText = text('ISSUES', { style: 'summaryText' })\n //const peopleText = text('PEOPLE', { style: 'summaryText' })\n const scansText = text('SCANS', { style: 'summaryText' })\n const tasksText = text('TASKS', { style: 'summaryText' })\n\n const auditsCountText = text(toString(auditsCount), { style: 'summaryCount' })\n //const peopleCountText = text(toString(uniqueUsers), { style: 'summaryCount' })\n const scansCountText = text(toString(enterEventsCount), {\n style: 'summaryCount',\n })\n //const geoCountText = text(toString(geoEventsCount), { style: 'summaryCount' })\n const issuesCountText = text(toString(issuesCount), { style: 'summaryCount' })\n const tasksCountText = text(toString(tasksCount), { style: 'summaryCount' })\n\n const auditTable = summaryStatTable({\n body: [[auditsText], [auditsCountText]],\n })\n //const peopleTable = summaryStatTable({\n // body: [[peopleText], [peopleCountText]],\n //})\n //const gpsTable = summaryStatTable({ body: [[geoText], [geoCountText]] })\n const scanTable = summaryStatTable({ body: [[scansText], [scansCountText]] })\n const issueTable = summaryStatTable({\n body: [[issuesText], [issuesCountText]],\n })\n const taskTables = summaryStatTable({ body: [[tasksText], [tasksCountText]] })\n\n const wrapperTable = summaryWrapperTable({\n body: [\n [\n /*peopleTable,*/\n /*gpsTable,*/\n scanTable,\n issueTable,\n taskTables,\n auditTable,\n ],\n ],\n })\n\n return wrapperTable\n}\n\nasync function buildOtherActivitySection(data) {\n const { audits, issues, tasks, settings, timezone } = data\n\n const auditRows = map(audits, getFormRowData('audits', data))\n const issueRows = map(issues, getFormRowData('issues', data))\n const taskRows = map(tasks, getFormRowData('tasks', data))\n\n const rows = [...auditRows, ...issueRows, ...taskRows]\n const sortedRows = sortBy(rows, ['timestamp'], ['asc'])\n const title = text('Other Activity', { style: 'summarySectionHeader' })\n\n const header = table({\n body: [[title]],\n layout: 'noBorders',\n style: 'summaryHeaderTable',\n })\n\n const hLine = horizontalLine()\n const activityTable = await buildActivityTable({\n rows: sortedRows,\n settings,\n timezone,\n })\n\n const otherActivitySummarySection = [header, hLine, activityTable]\n\n const formCount = size(rows)\n const exceedsMaxForms = formCount > MAX_ATTACHMENTS\n\n if (exceedsMaxForms) {\n const maxFormsText = {\n text: [\n text(\n `Detailed Form Submissions in the Daily Activity Report are limited to a total of ${MAX_ATTACHMENTS}. `\n ),\n text(\n 'To access individual Form Submissions, open the hyperlink next to the respective submission within the Other Activity table. Alternatively, they may be accessed in the Lighthouse Management Console.'\n ),\n ],\n style: 'small',\n margin: [0, 10, 0, 10],\n }\n otherActivitySummarySection.push(maxFormsText)\n }\n\n return otherActivitySummarySection\n}\n\nfunction buildTitleTable(data) {\n const { location, start, end, timezone } = data\n const { address = {} } = location\n\n const headerTitle = text('Daily Activity Report', { style: 'title' })\n const headerSubTitle = text(location.name, { style: 'subTitle' })\n const addressText = !isEmpty(address)\n ? `${address.street}, ${address.city || ''} ${\n address.state || ''\n } ${address.postalCode || ''}`\n : ''\n const headerAddress = text(addressText, { style: 'small' })\n\n const mTimezoneStart = moment.tz(start, timezone)\n const mTimezoneEnd = moment.tz(end, timezone)\n const timezoneAbbr = getTimezoneAbbr(timezone)\n\n const rangeStart = moment(mTimezoneStart).format('MMM DD h:mma')\n\n const rangeEnd = moment(mTimezoneEnd)\n .add(1, 'hour')\n .startOf('hour')\n .format('MMM DD h:mma')\n\n const headerRange = text(`${rangeStart} - ${rangeEnd} (${timezoneAbbr})`, {\n style: 'subTitle2',\n })\n\n const body = !isEmpty(address)\n ? [[headerTitle], [headerSubTitle], [headerAddress], [headerRange]]\n : [[headerTitle], [headerSubTitle], [headerRange]]\n\n return table({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n })\n}\n\nfunction getFormRowData(collection, { locations, users, zones }) {\n return (document) => {\n const {\n _id,\n createdAt,\n entry = {},\n title = 'Unknown',\n user = '',\n } = document\n\n const location = getLocationReference({\n entity: document,\n locations,\n zones,\n })\n\n const link = `${LIGHTHOUSE_BASE_URL}/reports/${collection}/${_id}`\n const timestamp = createdAt\n const userDoc = find(users, (doc) => doc._id.toString() === user.toString())\n const name =\n (userDoc && `${userDoc.firstName} ${userDoc.lastName}`) || 'Unknown User'\n\n // NOTE: currently only issues and tasks will return summary fields, audits\n // aren't supported and will return an empty array here\n const summaryFields = entry.summaryFields || []\n\n return {\n icon: launchIcon,\n location,\n link,\n name,\n summaryFields,\n timestamp,\n title,\n }\n }\n}\n\nfunction getScanRowData({ users, zones }) {\n return (document) => {\n const { timestamp, user = '', zone = '' } = document\n\n const userDoc =\n user && find(users, (doc) => doc._id.toString() === user.toString())\n const zoneDoc =\n zone && find(zones, (doc) => doc._id.toString() === zone.toString())\n\n const zoneName = zoneDoc && zoneDoc.name\n const location = zoneName || 'Unknown Location'\n\n const name =\n (userDoc && `${userDoc.firstName} ${userDoc.lastName}`) || 'Unknown User'\n\n const title = 'Location Scan'\n\n return {\n location,\n timestamp,\n name,\n title,\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_lodash","require","_momentTimezone","_interopRequireDefault","_bluebird","_helpers","_helpers2","_images","DEFAULT_MAX_SCANS","MAX_ATTACHMENTS","LIGHTHOUSE_BASE_URL","buildActivityPdf","pdfOptions","data","timestamp","timezone","title","content","generateContent","generateDefinition","fileTitle","type","activitySection","buildActivitySection","summarySection","buildSummarySection","titleTable","buildTitleTable","showAlternate","locationScans","buildLocationScansSection","otherActivity","buildOtherActivitySection","activitySummary","buildActivitySummarySection","audits","events","issues","maxScans","settings","tasks","enterEvents","filter","event","exceedsMaxScans","size","scans","take","auditRows","map","getFormRowData","issueRows","scanRows","getScanRowData","taskRows","formCount","exceedsMaxForms","rows","sortedRows","sortBy","text","style","header","table","body","layout","hLine","horizontalLine","activityTable","buildActivityTable","activitySummarySection","maxScansText","link","margin","push","maxFormsText","timezoneAbbr","getTimezoneAbbr","activityTableHeader","bold","alignment","activityTableRows","Promise","location","icon","name","summaryFields","timezoneHour","getTimezoneDatetime","format","showTzAbbr","iconCell","fit","image","hasSummaryFields","isEmpty","fieldsTable","summaryFieldsTable","fields","activityTableRow","colSpan","dontBreakRows","headerRow","hLineWidth","paddingLeft","paddingRight","paddingTop","paddingBottom","vLineWidth","widths","activityTableBody","fillColor","zebraFillColor","start","zones","hourIntervalBoundaries","buildLocationScansBoundaries","hourIntervalColumnHeaders","reduce","columns","interval","index","intervals","scansTableHeader","sortedZones","groupedEventsByZone","memo","zone","zoneEvents","toString","_id","scansTableRows","sortedGroup","locationScansByInterval","buildLocationScansContent","locationScansByIntervalContent","totalEvents","zoneDoc","find","doc","zoneName","scansTableBody","scansTable","eventsByType","groupBy","enterEventsCount","enter","issuesCount","tasksCount","auditsCount","auditsText","issuesText","scansText","tasksText","auditsCountText","scansCountText","issuesCountText","tasksCountText","auditTable","summaryStatTable","scanTable","issueTable","taskTables","wrapperTable","summaryWrapperTable","otherActivitySummarySection","end","address","headerTitle","headerSubTitle","addressText","street","city","state","postalCode","headerAddress","mTimezoneStart","moment","tz","mTimezoneEnd","rangeStart","rangeEnd","add","startOf","headerRange","collection","locations","users","document","createdAt","entry","user","getLocationReference","entity","userDoc","firstName","lastName","launchIcon"],"sources":["../../../src/pdf/activity-report/index.js"],"sourcesContent":["import {\r\n filter,\r\n find,\r\n groupBy,\r\n isEmpty,\r\n map,\r\n size,\r\n sortBy,\r\n take,\r\n toString,\r\n reduce,\r\n} from 'lodash'\r\n\r\nimport moment from 'moment-timezone'\r\nimport Promise from 'bluebird'\r\n\r\nimport {\r\n generateDefinition,\r\n buildLocationScansContent,\r\n buildLocationScansBoundaries,\r\n horizontalLine,\r\n summaryStatTable,\r\n summaryWrapperTable,\r\n table,\r\n summaryFieldsTable,\r\n text,\r\n zebraFillColor,\r\n} from '../helpers'\r\n\r\nimport {\r\n getLocationReference,\r\n getTimezoneAbbr,\r\n getTimezoneDatetime,\r\n} from '../../helpers'\r\nimport { launchIcon } from '../../images'\r\n\r\nconst DEFAULT_MAX_SCANS = 200\r\nconst MAX_ATTACHMENTS = 100\r\nconst LIGHTHOUSE_BASE_URL = 'https://app.lighthouse.io'\r\n\r\n/**\r\n * buildActivityPdf\r\n *\r\n * @param {object} pdfOptions - the pdf options\r\n * @param {string} pdfOptions.fileTitle - pdf file title\r\n * @param {function} pdfOptions.footer - function executed to generate footer\r\n * @param {function} pdfOptions.header - function executed to generate header\r\n * @param {string} pdfOptions.logoUrl - pdf logo url\r\n * @param {array} pdfOptions.pageMargins - pdf page margins\r\n * @param {string} pdfOptions.pageOrientation - pdf page orientation\r\n * @param {string} pdfOptions.pageSize - pdf page size\r\n * @param {object} pdfOptions.styles - pdf styles\r\n * @param {object} pdfOptions.title - pdf title\r\n * @param {object} data - pdf data\r\n * @param {array} data.audits - audit documents\r\n * @param {string} data.end - end datetime of summary report\r\n * @param {array} data.events - event documents\r\n * @param {object} data.location - location document\r\n * @param {array} data.locations - location documents\r\n * @param {array} data.issues - issue documents\r\n * @param {bool} data.maxScans - max scans to include in standard report\r\n * @param {bool} data.showAlternate - show alternate summary report\r\n * @param {string} data.start - start datetime of summary report\r\n * @param {object} data.settings - settings properties\r\n * @param {string} data.settings.awsS3BaseUrl - aws S3 base url\r\n * @param {string} data.settings.cloudinaryBaseUrl - cloudinary base url\r\n * @param {array} data.tasks - task documents\r\n * @param {string} data.timestamp - timestamp string\r\n * @param {string} data.timezone - timezone string\r\n * @param {array} data.zones - zone documents\r\n * @param {array} data.users - user documents\r\n * @returns {Promise} returns pdfmake definition object\r\n */\r\nexport async function buildActivityPdf(pdfOptions, data) {\r\n const { timestamp, timezone } = data\r\n\r\n const title = 'Daily Activity Report'\r\n const content = await generateContent(data)\r\n\r\n return generateDefinition({\r\n content,\r\n fileTitle: title,\r\n timestamp,\r\n timezone,\r\n type: 'Activity Summary',\r\n ...pdfOptions,\r\n })\r\n}\r\n\r\nasync function generateContent(data) {\r\n const activitySection = await buildActivitySection(data)\r\n const summarySection = buildSummarySection(data)\r\n const titleTable = buildTitleTable(data)\r\n\r\n return [titleTable, summarySection, activitySection]\r\n}\r\n\r\nasync function buildActivitySection(data) {\r\n const { showAlternate = false } = data\r\n\r\n if (showAlternate) {\r\n const locationScans = buildLocationScansSection(data)\r\n const otherActivity = await buildOtherActivitySection(data)\r\n\r\n return [locationScans, otherActivity]\r\n }\r\n\r\n const activitySummary = await buildActivitySummarySection(data)\r\n\r\n return [activitySummary]\r\n}\r\n\r\nasync function buildActivitySummarySection(data) {\r\n const {\r\n audits,\r\n events,\r\n issues,\r\n maxScans = DEFAULT_MAX_SCANS,\r\n settings,\r\n tasks,\r\n timezone,\r\n } = data\r\n\r\n const enterEvents = filter(events, event => event.type === 'enter')\r\n const exceedsMaxScans = size(enterEvents) > maxScans\r\n const scans = take(enterEvents, maxScans)\r\n\r\n const auditRows = map(audits, getFormRowData('audits', data))\r\n const issueRows = map(issues, getFormRowData('issues', data))\r\n const scanRows = map(scans, getScanRowData(data))\r\n const taskRows = map(tasks, getFormRowData('tasks', data))\r\n\r\n const formCount = size([...auditRows, ...issueRows, ...taskRows])\r\n const exceedsMaxForms = formCount > MAX_ATTACHMENTS\r\n\r\n const rows = [...auditRows, ...issueRows, ...scanRows, ...taskRows]\r\n const sortedRows = sortBy(rows, ['timestamp'], ['asc'])\r\n const title = text('Activity Summary', { style: 'summarySectionHeader' })\r\n\r\n const header = table({\r\n body: [[title]],\r\n layout: 'noBorders',\r\n style: 'summaryHeaderTable',\r\n })\r\n\r\n const hLine = horizontalLine()\r\n const activityTable = await buildActivityTable({\r\n rows: sortedRows,\r\n settings,\r\n timezone,\r\n })\r\n const activitySummarySection = [header, hLine, activityTable]\r\n\r\n if (exceedsMaxScans) {\r\n const maxScansText = {\r\n text: [\r\n text(\r\n `Location Scans in the Daily Activity Report are limited to a total of ${maxScans}.`\r\n ),\r\n text(' To view all Location Scans visit '),\r\n text('the Events Report', {\r\n link: `${LIGHTHOUSE_BASE_URL}/reports/events`,\r\n }),\r\n text(' in the Lighthouse Management Console.'),\r\n ],\r\n style: 'small',\r\n margin: [0, 10, 0, 10],\r\n }\r\n\r\n activitySummarySection.push(maxScansText)\r\n }\r\n\r\n if (exceedsMaxForms) {\r\n const maxFormsText = {\r\n text: [\r\n text(\r\n `Detailed Form Submissions in the Daily Activity Report are limited to a total of ${MAX_ATTACHMENTS}. `\r\n ),\r\n text(\r\n 'To access individual Form Submissions, open the hyperlink next to the respective submission within the Activity Summary table. Alternatively, they may be accessed in the Lighthouse Management Console.'\r\n ),\r\n ],\r\n style: 'small',\r\n margin: [0, 10, 0, 10],\r\n }\r\n activitySummarySection.push(maxFormsText)\r\n }\r\n\r\n return activitySummarySection\r\n}\r\n\r\nasync function buildActivityTable({ rows, settings, timezone }) {\r\n const timezoneAbbr = getTimezoneAbbr(timezone)\r\n\r\n const activityTableHeader = [\r\n text('Activity', { bold: true }),\r\n { text: '' }, // icon column\r\n text('Location', { bold: true }),\r\n text('User', { bold: true }),\r\n text(`Timestamp (${timezoneAbbr})`, { alignment: 'right', bold: true }),\r\n ]\r\n\r\n const activityTableRows = await Promise.map(rows, async function(data) {\r\n const { link, location, icon, name, summaryFields, timestamp, title } = data\r\n\r\n const timezoneHour = getTimezoneDatetime({\r\n format: 'ddd DD h:mm a',\r\n showTzAbbr: false,\r\n timestamp,\r\n timezone,\r\n })\r\n\r\n const iconCell = icon\r\n ? { alignment: 'center', fit: [8, 8], image: icon, link }\r\n : { text: '' }\r\n\r\n // NOTE: pass link to each column as\r\n // we can't wrap the entire table row\r\n const rows = [\r\n [\r\n text(title, { link }),\r\n iconCell,\r\n text(location, { link }),\r\n text(name, { link }),\r\n text(timezoneHour, { alignment: 'right', link }),\r\n ],\r\n ]\r\n\r\n const hasSummaryFields = !isEmpty(summaryFields)\r\n\r\n if (hasSummaryFields) {\r\n const fieldsTable = await summaryFieldsTable({\r\n fields: summaryFields,\r\n settings,\r\n timezone,\r\n })\r\n rows.push([fieldsTable])\r\n }\r\n\r\n // NOTE: we return a table per row which includes the entry details and the\r\n // summary fields if relevant\r\n const activityTableRow = [\r\n table({\r\n body: [...rows],\r\n colSpan: 5,\r\n dontBreakRows: true,\r\n headerRow: 0,\r\n layout: {\r\n hLineWidth: () => 0,\r\n paddingLeft: () => 0,\r\n paddingRight: () => 0,\r\n paddingTop: () => 5,\r\n paddingBottom: () => 5,\r\n vLineWidth: () => 0,\r\n },\r\n // NOTE: the timestamp must fill up the rest of the table space as\r\n // otherwise the padding would be off between this table and the parent\r\n // table that wraps it\r\n widths: [130, 25, 110, 110, '*'],\r\n }),\r\n ]\r\n\r\n return activityTableRow\r\n })\r\n\r\n const activityTableBody = isEmpty(activityTableRows)\r\n ? [[text('No other activity', { colSpan: 5 })]]\r\n : activityTableRows\r\n\r\n const activityTable = table({\r\n body: [activityTableHeader, ...activityTableBody],\r\n dontBreakRows: true,\r\n layout: {\r\n hLineWidth: () => 0,\r\n fillColor: zebraFillColor,\r\n paddingLeft: () => 5,\r\n paddingRight: () => 5,\r\n paddingTop: () => 5,\r\n paddingBottom: () => 5,\r\n vLineWidth: () => 0,\r\n },\r\n widths: [120, 15, 100, 100, '*'],\r\n })\r\n\r\n return activityTable\r\n}\r\n\r\nfunction buildLocationScansSection(data) {\r\n const { events, start, timezone, zones } = data\r\n\r\n const title = text('Location Scans', { style: 'summarySectionHeader' })\r\n\r\n const header = table({\r\n body: [[title]],\r\n layout: 'noBorders',\r\n style: 'summaryHeaderTable',\r\n })\r\n\r\n // use start time and timezone to figure out the interval boundaries\r\n const hourIntervalBoundaries = buildLocationScansBoundaries(start, timezone)\r\n\r\n // pair interval boundaries into column headers for the table\r\n const hourIntervalColumnHeaders = hourIntervalBoundaries.reduce(\r\n (columns, interval, index, intervals) => {\r\n if (index < size(intervals) - 1)\r\n // skip the final iteration as it's just the end of the last interval\r\n columns.push(\r\n text(`${interval.format('h')}-${intervals[index + 1].format('hA')}`, {\r\n alignment: 'center',\r\n bold: true,\r\n })\r\n )\r\n return columns\r\n },\r\n []\r\n )\r\n\r\n const scansTableHeader = [\r\n text('Location', { bold: true }),\r\n ...hourIntervalColumnHeaders,\r\n text('Total', { alignment: 'right', bold: true }),\r\n ]\r\n\r\n const hLine = horizontalLine()\r\n\r\n // NOTE: only show the enter events within the summary table\r\n const enterEvents = filter(events, event => event.type === 'enter')\r\n const sortedZones = sortBy(zones, ['name'])\r\n\r\n const groupedEventsByZone = reduce(\r\n sortedZones,\r\n (memo, zone) => {\r\n const zoneEvents = filter(\r\n enterEvents,\r\n event => event.zone && event.zone.toString() === zone._id.toString()\r\n )\r\n memo[zone._id] = zoneEvents\r\n return memo\r\n },\r\n {}\r\n )\r\n\r\n const scansTableRows = map(groupedEventsByZone, (events, zone = '') => {\r\n const sortedGroup = sortBy(events, ['timestamp'], ['asc'])\r\n\r\n // put events into interval buckets\r\n const locationScansByInterval = buildLocationScansContent(\r\n hourIntervalBoundaries,\r\n events\r\n )\r\n // map the interval buckets to a format fit for the table\r\n const locationScansByIntervalContent = locationScansByInterval.map(\r\n interval => {\r\n return { alignment: 'center', text: size(interval) }\r\n }\r\n )\r\n\r\n const totalEvents = size(sortedGroup)\r\n\r\n const zoneDoc =\r\n zone && find(zones, doc => doc._id.toString() === zone.toString())\r\n const zoneName = (zoneDoc && zoneDoc.name) || 'Unknown Location'\r\n\r\n return [\r\n zoneName,\r\n ...locationScansByIntervalContent,\r\n { alignment: 'right', bold: true, text: totalEvents },\r\n ]\r\n })\r\n\r\n const scansTableBody = isEmpty(scansTableRows)\r\n ? [[text('No location scans', { colSpan: 10 })]]\r\n : scansTableRows\r\n\r\n const scansTable = table({\r\n body: [scansTableHeader, ...scansTableBody],\r\n widths: [100, '*', '*', '*', '*', '*', '*', '*', '*', '*'],\r\n })\r\n\r\n return [header, hLine, scansTable]\r\n}\r\n\r\nfunction buildSummarySection(data) {\r\n const { audits, events, issues, tasks } = data\r\n\r\n //const userEvents = groupBy(events, 'user')\r\n const eventsByType = groupBy(events, 'type')\r\n\r\n const enterEventsCount = size(eventsByType.enter)\r\n //const geoEventsCount = size(eventsByType.geo)\r\n const issuesCount = size(issues)\r\n const tasksCount = size(tasks)\r\n const auditsCount = size(audits)\r\n //const uniqueUsers = size(userEvents)\r\n\r\n const auditsText = text('AUDITS', { style: 'summaryText' })\r\n //const geoText = text('GPS', { style: 'summaryText' })\r\n const issuesText = text('ISSUES', { style: 'summaryText' })\r\n //const peopleText = text('PEOPLE', { style: 'summaryText' })\r\n const scansText = text('SCANS', { style: 'summaryText' })\r\n const tasksText = text('TASKS', { style: 'summaryText' })\r\n\r\n const auditsCountText = text(toString(auditsCount), { style: 'summaryCount' })\r\n //const peopleCountText = text(toString(uniqueUsers), { style: 'summaryCount' })\r\n const scansCountText = text(toString(enterEventsCount), {\r\n style: 'summaryCount',\r\n })\r\n //const geoCountText = text(toString(geoEventsCount), { style: 'summaryCount' })\r\n const issuesCountText = text(toString(issuesCount), { style: 'summaryCount' })\r\n const tasksCountText = text(toString(tasksCount), { style: 'summaryCount' })\r\n\r\n const auditTable = summaryStatTable({\r\n body: [[auditsText], [auditsCountText]],\r\n })\r\n //const peopleTable = summaryStatTable({\r\n // body: [[peopleText], [peopleCountText]],\r\n //})\r\n //const gpsTable = summaryStatTable({ body: [[geoText], [geoCountText]] })\r\n const scanTable = summaryStatTable({ body: [[scansText], [scansCountText]] })\r\n const issueTable = summaryStatTable({\r\n body: [[issuesText], [issuesCountText]],\r\n })\r\n const taskTables = summaryStatTable({ body: [[tasksText], [tasksCountText]] })\r\n\r\n const wrapperTable = summaryWrapperTable({\r\n body: [\r\n [\r\n /*peopleTable,*/\r\n /*gpsTable,*/\r\n scanTable,\r\n issueTable,\r\n taskTables,\r\n auditTable,\r\n ],\r\n ],\r\n })\r\n\r\n return wrapperTable\r\n}\r\n\r\nasync function buildOtherActivitySection(data) {\r\n const { audits, issues, tasks, settings, timezone } = data\r\n\r\n const auditRows = map(audits, getFormRowData('audits', data))\r\n const issueRows = map(issues, getFormRowData('issues', data))\r\n const taskRows = map(tasks, getFormRowData('tasks', data))\r\n\r\n const rows = [...auditRows, ...issueRows, ...taskRows]\r\n const sortedRows = sortBy(rows, ['timestamp'], ['asc'])\r\n const title = text('Other Activity', { style: 'summarySectionHeader' })\r\n\r\n const header = table({\r\n body: [[title]],\r\n layout: 'noBorders',\r\n style: 'summaryHeaderTable',\r\n })\r\n\r\n const hLine = horizontalLine()\r\n const activityTable = await buildActivityTable({\r\n rows: sortedRows,\r\n settings,\r\n timezone,\r\n })\r\n\r\n const otherActivitySummarySection = [header, hLine, activityTable]\r\n\r\n const formCount = size(rows)\r\n const exceedsMaxForms = formCount > MAX_ATTACHMENTS\r\n\r\n if (exceedsMaxForms) {\r\n const maxFormsText = {\r\n text: [\r\n text(\r\n `Detailed Form Submissions in the Daily Activity Report are limited to a total of ${MAX_ATTACHMENTS}. `\r\n ),\r\n text(\r\n 'To access individual Form Submissions, open the hyperlink next to the respective submission within the Other Activity table. Alternatively, they may be accessed in the Lighthouse Management Console.'\r\n ),\r\n ],\r\n style: 'small',\r\n margin: [0, 10, 0, 10],\r\n }\r\n otherActivitySummarySection.push(maxFormsText)\r\n }\r\n\r\n return otherActivitySummarySection\r\n}\r\n\r\nfunction buildTitleTable(data) {\r\n const { location, start, end, timezone } = data\r\n const { address = {} } = location\r\n\r\n const headerTitle = text('Daily Activity Report', { style: 'title' })\r\n const headerSubTitle = text(location.name, { style: 'subTitle' })\r\n const addressText = !isEmpty(address)\r\n ? `${address.street}, ${address.city || ''} ${address.state ||\r\n ''} ${address.postalCode || ''}`\r\n : ''\r\n const headerAddress = text(addressText, { style: 'small' })\r\n\r\n const mTimezoneStart = moment.tz(start, timezone)\r\n const mTimezoneEnd = moment.tz(end, timezone)\r\n const timezoneAbbr = getTimezoneAbbr(timezone)\r\n\r\n const rangeStart = moment(mTimezoneStart).format('MMM DD h:mma')\r\n\r\n const rangeEnd = moment(mTimezoneEnd)\r\n .add(1, 'hour')\r\n .startOf('hour')\r\n .format('MMM DD h:mma')\r\n\r\n const headerRange = text(`${rangeStart} - ${rangeEnd} (${timezoneAbbr})`, {\r\n style: 'subTitle2',\r\n })\r\n\r\n const body = !isEmpty(address)\r\n ? [[headerTitle], [headerSubTitle], [headerAddress], [headerRange]]\r\n : [[headerTitle], [headerSubTitle], [headerRange]]\r\n\r\n return table({\r\n body,\r\n layout: 'noBorders',\r\n style: 'titleTable',\r\n })\r\n}\r\n\r\nfunction getFormRowData(collection, { locations, users, zones }) {\r\n return document => {\r\n const {\r\n _id,\r\n createdAt,\r\n entry = {},\r\n title = 'Unknown',\r\n user = '',\r\n } = document\r\n\r\n const location = getLocationReference({\r\n entity: document,\r\n locations,\r\n zones,\r\n })\r\n\r\n const link = `${LIGHTHOUSE_BASE_URL}/reports/${collection}/${_id}`\r\n const timestamp = createdAt\r\n const userDoc = find(users, doc => doc._id.toString() === user.toString())\r\n const name =\r\n (userDoc && `${userDoc.firstName} ${userDoc.lastName}`) || 'Unknown User'\r\n\r\n // NOTE: currently only issues and tasks will return summary fields, audits\r\n // aren't supported and will return an empty array here\r\n const summaryFields = entry.summaryFields || []\r\n\r\n return {\r\n icon: launchIcon,\r\n location,\r\n link,\r\n name,\r\n summaryFields,\r\n timestamp,\r\n title,\r\n }\r\n }\r\n}\r\n\r\nfunction getScanRowData({ users, zones }) {\r\n return document => {\r\n const { timestamp, user = '', zone = '' } = document\r\n\r\n const userDoc =\r\n user && find(users, doc => doc._id.toString() === user.toString())\r\n const zoneDoc =\r\n zone && find(zones, doc => doc._id.toString() === zone.toString())\r\n\r\n const zoneName = zoneDoc && zoneDoc.name\r\n const location = zoneName || 'Unknown Location'\r\n\r\n const name =\r\n (userDoc && `${userDoc.firstName} ${userDoc.lastName}`) || 'Unknown User'\r\n\r\n const title = 'Location Scan'\r\n\r\n return {\r\n location,\r\n timestamp,\r\n name,\r\n title,\r\n }\r\n }\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -1,215 +1,218 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
- import Promise from 'bluebird';
6
- import { isEmpty, round } from 'lodash';
7
- import moment from 'moment-timezone';
8
- import { buildAuditContent, buildAuditFollowUps, buildTemplateContent, generateDefinition, getFormattedAddress, horizontalLine, text, twoColumnTable } from '../helpers';
9
- import { getAuditEntryDetails } from '../../helpers';
1
+ "use strict";
10
2
 
11
- /**
12
- * buildAuditPdf
13
- *
14
- * @param {object} pdfOptions - the pdf options
15
- * @param {string} pdfOptions.fileTitle - pdf file title
16
- * @param {function} pdfOptions.footer - function executed to generate footer
17
- * @param {function} pdfOptions.header - function executed to generate header
18
- * @param {string} pdfOptions.logoUrl - pdf logo url
19
- * @param {array} pdfOptions.pageMargins - pdf page margins
20
- * @param {string} pdfOptions.pageOrientation - pdf page orientation
21
- * @param {string} pdfOptions.pageSize - pdf page size
22
- * @param {object} pdfOptions.styles - pdf styles
23
- * @param {object} pdfOptions.title - pdf title
24
- * @param {object} pdfOptions.flags - flags to conditionally render parts of the pdf
25
- * @param {object} data - pdf data
26
- * @param {object} data.entity - audit document
27
- * @param {object} data.locations - locations documents
28
- * @param {object} data.settings - settings properties
29
- * @param {string} data.settings.awsS3BaseUrl - aws S3 base url
30
- * @param {string} data.settings.cloudfrontBaseUrl - cloudfront base url
31
- * @param {string} data.timezone - timezone string
32
- * @param {object} data.users - application user documents
33
- * @returns {Promise} returns pdfmake definition object
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.buildAuditPdf = buildAuditPdf;
8
+ var _bluebird = _interopRequireDefault(require("bluebird"));
9
+ var _lodash = require("lodash");
10
+ var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
11
+ var _helpers = require("../helpers");
12
+ var _helpers2 = require("../../helpers");
13
+ /**
14
+ * buildAuditPdf
15
+ *
16
+ * @param {object} pdfOptions - the pdf options
17
+ * @param {string} pdfOptions.fileTitle - pdf file title
18
+ * @param {function} pdfOptions.footer - function executed to generate footer
19
+ * @param {function} pdfOptions.header - function executed to generate header
20
+ * @param {string} pdfOptions.logoUrl - pdf logo url
21
+ * @param {array} pdfOptions.pageMargins - pdf page margins
22
+ * @param {string} pdfOptions.pageOrientation - pdf page orientation
23
+ * @param {string} pdfOptions.pageSize - pdf page size
24
+ * @param {object} pdfOptions.styles - pdf styles
25
+ * @param {object} pdfOptions.title - pdf title
26
+ * @param {object} pdfOptions.flags - flags to conditionally render parts of the pdf
27
+ * @param {object} data - pdf data
28
+ * @param {object} data.entity - audit document
29
+ * @param {object} data.locations - locations documents
30
+ * @param {object} data.settings - settings properties
31
+ * @param {string} data.settings.awsS3BaseUrl - aws S3 base url
32
+ * @param {string} data.settings.cloudinaryBaseUrl - cloudinary base url
33
+ * @param {string} data.timezone - timezone string
34
+ * @param {object} data.users - application user documents
35
+ * @returns {Promise} returns pdfmake definition object
34
36
  */
35
- export function buildAuditPdf(pdfOptions, data) {
36
- var entity = data.entity,
37
- timezone = data.timezone;
38
- var _pdfOptions$flags = pdfOptions.flags,
39
- flags = _pdfOptions$flags === void 0 ? {} : _pdfOptions$flags;
40
- var sequenceId = entity.sequenceId;
41
- var timestamp = entity.createdAt;
42
- var title = entity.title || 'Unknown';
43
- var fileTitle = "Audit Report - ".concat(title);
44
- return generateContent(data, flags).then(function (content) {
45
- return generateDefinition(_objectSpread({
46
- content: content,
47
- fileTitle: fileTitle,
48
- sequenceId: sequenceId,
49
- timestamp: timestamp,
50
- timezone: timezone,
51
- type: 'Audit'
52
- }, pdfOptions));
53
- }).catch(function (err) {
54
- throw new Error("BuildAuditPdfError: ".concat(err.message));
37
+ function buildAuditPdf(pdfOptions, data) {
38
+ const {
39
+ entity,
40
+ timezone
41
+ } = data;
42
+ const {
43
+ flags = {}
44
+ } = pdfOptions;
45
+ const sequenceId = entity.sequenceId;
46
+ const timestamp = entity.createdAt;
47
+ const title = entity.title || 'Unknown';
48
+ const fileTitle = `Audit Report - ${title}`;
49
+ return generateContent(data, flags).then(content => (0, _helpers.generateDefinition)({
50
+ content,
51
+ fileTitle,
52
+ sequenceId,
53
+ timestamp,
54
+ timezone,
55
+ type: 'Audit',
56
+ ...pdfOptions
57
+ })).catch(err => {
58
+ throw new Error(`BuildAuditPdfError: ${err.message}`);
55
59
  });
56
60
  }
57
61
  function generateContent(data) {
58
- var entity = data.entity;
59
- var _entity$followUps = entity.followUps,
60
- followUps = _entity$followUps === void 0 ? [] : _entity$followUps,
61
- _entity$footerFields = entity.footerFields,
62
- footerFields = _entity$footerFields === void 0 ? {} : _entity$footerFields,
63
- _entity$gps = entity.gps,
64
- gps = _entity$gps === void 0 ? {} : _entity$gps,
65
- _entity$headerFields = entity.headerFields,
66
- headerFields = _entity$headerFields === void 0 ? {} : _entity$headerFields,
67
- _entity$score = entity.score,
68
- score = _entity$score === void 0 ? {} : _entity$score,
69
- _entity$title = entity.title,
70
- title = _entity$title === void 0 ? 'Unknown' : _entity$title;
71
- var timezone = (entity === null || entity === void 0 ? void 0 : entity.timezone) || (data === null || data === void 0 ? void 0 : data.timezone) || 'UTC';
72
- var entityDetails = getAuditEntryDetails(data);
73
- var gpsText = entityDetails.gpsText,
74
- groupedData = entityDetails.groupedData,
75
- locationText = entityDetails.locationText,
76
- referenceValue = entityDetails.referenceValue,
77
- timezoneHourTime = entityDetails.timezoneHourTime,
78
- scoreText = entityDetails.scoreText,
79
- target = entityDetails.target,
80
- targetServiceLevel = entityDetails.targetServiceLevel;
81
- var renderTargetFields = !!targetServiceLevel;
82
- var headerTitle = text(title, {
62
+ const {
63
+ entity
64
+ } = data;
65
+ const {
66
+ followUps = [],
67
+ footerFields = {},
68
+ gps = {},
69
+ headerFields = {},
70
+ score = {},
71
+ title = 'Unknown'
72
+ } = entity;
73
+ const timezone = entity?.timezone || data?.timezone || 'UTC';
74
+ const entityDetails = (0, _helpers2.getAuditEntryDetails)(data);
75
+ const {
76
+ gpsText,
77
+ groupedData,
78
+ locationText,
79
+ referenceValue,
80
+ timezoneHourTime,
81
+ scoreText,
82
+ target,
83
+ targetServiceLevel
84
+ } = entityDetails;
85
+ const renderTargetFields = !!targetServiceLevel;
86
+ const headerTitle = (0, _helpers.text)(title, {
83
87
  style: 'title'
84
88
  });
85
- var headerScore = text(scoreText, {
89
+ const headerScore = (0, _helpers.text)(scoreText, {
86
90
  alignment: 'right',
87
91
  style: 'title'
88
92
  });
89
- var firstRow = [headerTitle, headerScore];
90
- var subTitle = "".concat(locationText || gpsText, " - ").concat(timezoneHourTime, " by ").concat(referenceValue);
91
- var headerSubTitle = text(subTitle, {
93
+ const firstRow = [headerTitle, headerScore];
94
+ const subTitle = `${locationText || gpsText} - ${timezoneHourTime} by ${referenceValue}`;
95
+ let headerSubTitle = (0, _helpers.text)(subTitle, {
92
96
  colSpan: 2,
93
97
  style: 'subTitle'
94
98
  });
95
- var secondRow = [headerSubTitle];
96
- var reverseGeocoded = gps.reverseGeocoded;
97
- var address = !isEmpty(reverseGeocoded) ? getFormattedAddress(reverseGeocoded) : '';
98
- var renderHeaderAddress = !isEmpty(reverseGeocoded);
99
- var dummyColumn = text(' ', {
99
+ let secondRow = [headerSubTitle];
100
+ const reverseGeocoded = gps.reverseGeocoded;
101
+ const address = !(0, _lodash.isEmpty)(reverseGeocoded) ? (0, _helpers.getFormattedAddress)(reverseGeocoded) : '';
102
+ const renderHeaderAddress = !(0, _lodash.isEmpty)(reverseGeocoded);
103
+ const dummyColumn = (0, _helpers.text)(' ', {
100
104
  style: 'small'
101
105
  });
102
- var headerAddress = text(address, {
106
+ let headerAddress = (0, _helpers.text)(address, {
103
107
  colSpan: 2,
104
108
  style: 'small'
105
109
  });
106
- var renderThirdRow = renderHeaderAddress || renderTargetFields;
107
- var thirdRow = renderHeaderAddress ? [headerAddress] : [];
110
+ const renderThirdRow = renderHeaderAddress || renderTargetFields;
111
+ let thirdRow = renderHeaderAddress ? [headerAddress] : [];
108
112
  if (renderTargetFields) {
109
- headerSubTitle = text(subTitle, {
113
+ headerSubTitle = (0, _helpers.text)(subTitle, {
110
114
  style: 'subTitle'
111
115
  });
112
- var serviceLevelBelow = targetServiceLevel === 'below';
113
- var serviceLevelText = targetServiceLevel === 'above' ? 'Above Target' : targetServiceLevel === 'on' ? 'On Target' : targetServiceLevel === 'below' ? 'Below Target' : '';
114
- var scoreServiceLevelSubTitle = text(serviceLevelText, {
116
+ const serviceLevelBelow = targetServiceLevel === 'below';
117
+ const serviceLevelText = targetServiceLevel === 'above' ? 'Above Target' : targetServiceLevel === 'on' ? 'On Target' : targetServiceLevel === 'below' ? 'Below Target' : '';
118
+ const scoreServiceLevelSubTitle = (0, _helpers.text)(serviceLevelText, {
115
119
  alignment: 'right',
116
120
  style: serviceLevelBelow ? 'serviceLevelBelow' : 'serviceLevelAboveOrOn'
117
121
  });
118
122
  secondRow = [headerSubTitle, scoreServiceLevelSubTitle];
119
- headerAddress = text(address, {
123
+ headerAddress = (0, _helpers.text)(address, {
120
124
  style: 'small'
121
125
  });
122
- var truncatedTargetPercent = round(target, 2);
123
- var scoreTargetText = "(Target - ".concat(truncatedTargetPercent, "%)");
124
- var scoreTargetSubTitle = text(scoreTargetText, {
126
+ const truncatedTargetPercent = (0, _lodash.round)(target, 2);
127
+ const scoreTargetText = `(Target - ${truncatedTargetPercent}%)`;
128
+ const scoreTargetSubTitle = (0, _helpers.text)(scoreTargetText, {
125
129
  alignment: 'right',
126
130
  style: 'subTitle'
127
131
  });
128
132
  thirdRow = renderHeaderAddress ? [headerAddress, scoreTargetSubTitle] : [dummyColumn, scoreTargetSubTitle];
129
133
  }
130
- var scoreBreakdown = text("".concat(round(score.actual, 2), " / ").concat(round(score.max, 2)), {
134
+ const scoreBreakdown = (0, _helpers.text)(`${(0, _lodash.round)(score.actual, 2)} / ${(0, _lodash.round)(score.max, 2)}`, {
131
135
  alignment: 'right',
132
136
  style: 'totalScore'
133
137
  });
134
- var scorePercentage = text(scoreText, {
138
+ const scorePercentage = (0, _helpers.text)(scoreText, {
135
139
  alignment: 'right',
136
140
  colSpan: 2,
137
141
  style: 'totalAuditScore'
138
142
  });
139
- var scoreTitle = text('Total Score', {
143
+ const scoreTitle = (0, _helpers.text)('Total Score', {
140
144
  style: 'totalScore'
141
145
  });
142
- var body = renderThirdRow ? [firstRow, secondRow, thirdRow] : [firstRow, secondRow];
143
- var submittedAtInTimezone = entity.submittedAt ? moment(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
144
- var submittedAt = text("Submitted: ".concat(submittedAtInTimezone), {
146
+ const body = renderThirdRow ? [firstRow, secondRow, thirdRow] : [firstRow, secondRow];
147
+ const submittedAtInTimezone = entity.submittedAt ? (0, _momentTimezone.default)(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
148
+ const submittedAt = (0, _helpers.text)(`Submitted: ${submittedAtInTimezone}`, {
145
149
  colSpan: 2,
146
150
  style: 'small'
147
151
  });
148
152
  if (entity.showSimplifiedDuration) {
149
153
  body.push([submittedAt, dummyColumn]);
150
154
  } else {
151
- var startedAtInTimezone = entity.startedAt ? moment(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
152
- var startedAt = text("Started: ".concat(startedAtInTimezone), {
155
+ const startedAtInTimezone = entity.startedAt ? (0, _momentTimezone.default)(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
156
+ const startedAt = (0, _helpers.text)(`Started: ${startedAtInTimezone}`, {
153
157
  colSpan: 2,
154
158
  style: 'small'
155
159
  });
156
- var _submittedAtInTimezone = entity.submittedAt ? moment(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
157
- var _submittedAt = text("Submitted: ".concat(_submittedAtInTimezone), {
160
+ const submittedAtInTimezone = entity.submittedAt ? (0, _momentTimezone.default)(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z') : 'Not recorded';
161
+ const submittedAt = (0, _helpers.text)(`Submitted: ${submittedAtInTimezone}`, {
158
162
  colSpan: 2,
159
163
  style: 'small'
160
164
  });
161
- var momentDuration = moment.duration(Math.abs(entity.formDuration));
162
- var days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
163
- var hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
164
- var minutes = momentDuration.minutes().toString().padStart(2, '0');
165
- var seconds = momentDuration.seconds().toString().padStart(2, '0');
166
- var formattedFormDuration = entity.formDuration ? "".concat(entity.formDuration < 0 ? '-' : '').concat(days, ":").concat(hours, ":").concat(minutes, ":").concat(seconds) : 'Not recorded';
167
- var formDuration = text("Form Duration (DD:HH:MM:SS): ".concat(formattedFormDuration), {
165
+ const momentDuration = _momentTimezone.default.duration(Math.abs(entity.formDuration));
166
+ const days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0');
167
+ const hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0');
168
+ const minutes = momentDuration.minutes().toString().padStart(2, '0');
169
+ const seconds = momentDuration.seconds().toString().padStart(2, '0');
170
+ const formattedFormDuration = entity.formDuration ? `${entity.formDuration < 0 ? '-' : ''}${days}:${hours}:${minutes}:${seconds}` : 'Not recorded';
171
+ const formDuration = (0, _helpers.text)(`Form Duration (DD:HH:MM:SS): ${formattedFormDuration}`, {
168
172
  colSpan: 2,
169
173
  style: 'small'
170
174
  });
171
175
  body.push([startedAt, dummyColumn]);
172
- body.push([_submittedAt, dummyColumn]);
176
+ body.push([submittedAt, dummyColumn]);
173
177
  body.push([formDuration, dummyColumn]);
174
178
  }
175
- var titleTable = twoColumnTable({
176
- body: body,
179
+ const titleTable = (0, _helpers.twoColumnTable)({
180
+ body,
177
181
  layout: 'noBorders',
178
182
  style: 'titleTable',
179
183
  widths: ['*', 100],
180
184
  margin: [0, 0, 0, 30]
181
185
  });
182
- var totalScoreTable = twoColumnTable({
186
+ const totalScoreTable = (0, _helpers.twoColumnTable)({
183
187
  body: [[scoreTitle, scoreBreakdown], [scorePercentage]],
184
188
  layout: 'noBorders',
185
189
  widths: ['*', 100]
186
190
  });
187
- var hLineTop = horizontalLine({
191
+ const hLineTop = (0, _helpers.horizontalLine)({
188
192
  margin: [0, 10, 0, 0]
189
193
  });
190
- var hLineBottom = horizontalLine();
191
- var followUpItems = buildAuditFollowUps(followUps, {
192
- timezone: timezone
194
+ const hLineBottom = (0, _helpers.horizontalLine)();
195
+ const followUpItems = (0, _helpers.buildAuditFollowUps)(followUps, {
196
+ timezone
193
197
  });
194
- var promises = {
195
- entry: buildAuditContent(groupedData.items, data.settings),
196
- footerTemplate: buildTemplateContent(footerFields.formGroups, data),
197
- headerTemplate: buildTemplateContent(headerFields.formGroups, data)
198
+ const promises = {
199
+ entry: (0, _helpers.buildAuditContent)(groupedData.items, data.settings),
200
+ footerTemplate: (0, _helpers.buildTemplateContent)(footerFields.formGroups, data),
201
+ headerTemplate: (0, _helpers.buildTemplateContent)(headerFields.formGroups, data)
198
202
  };
199
- var auditItemsTitle = [{
203
+ const auditItemsTitle = [{
200
204
  text: 'Audit Items',
201
205
  style: {
202
206
  font: 'Gotham',
203
207
  lineHeight: 1.1
204
208
  }
205
209
  }, hLineTop];
206
- return Promise.props(promises).then(function (_ref) {
207
- var entry = _ref.entry,
208
- footerTemplate = _ref.footerTemplate,
209
- headerTemplate = _ref.headerTemplate;
210
- return [titleTable, followUpItems].concat(auditItemsTitle, _toConsumableArray(headerTemplate), _toConsumableArray(entry), [hLineTop, totalScoreTable, hLineBottom], _toConsumableArray(footerTemplate));
211
- }).catch(function (err) {
212
- throw new Error("GenerateContentError: ".concat(err.message));
210
+ return _bluebird.default.props(promises).then(({
211
+ entry,
212
+ footerTemplate,
213
+ headerTemplate
214
+ }) => [titleTable, followUpItems, ...auditItemsTitle, ...headerTemplate, ...entry, hLineTop, totalScoreTable, hLineBottom, ...footerTemplate]).catch(err => {
215
+ throw new Error(`GenerateContentError: ${err.message}`);
213
216
  });
214
217
  }
215
218
  //# sourceMappingURL=index.js.map