diff --git a/src/assets/Classes.js b/src/assets/Classes.js new file mode 100644 index 0000000..d0bcbc8 --- /dev/null +++ b/src/assets/Classes.js @@ -0,0 +1,110 @@ +/** + * Represents a line item with text, font information, and spacing options. + * @param {String} text The contents of the line + * @param {FontInfo} fontInfo Font details to use for the line + * @param {Boolean} moveDownAfter Provide extra spacing after this line? + * @returns LineItem + */ +class LineItem { + constructor(text, fontInfo, moveDownAfter) { + this.text = text; + this.fontInfo = fontInfo; + this.moveDownAfter = moveDownAfter || false; + + return this; + } + + /** + * Set the contents of the line + * @param {String} text The contents of the line + * @returns LineItem + */ + setText(text) { + if (typeof text !== 'string') { + throw new Error('Text must be a string'); + } + this.text = text; + return this; + } + + /** + * Set the font information for the line + * @param {FontInfo} fontInfo Font details to use for the line + * @returns LineItem + */ + setFontInfo(fontInfo) { + if (!(fontInfo instanceof FontInfo)) { + throw new Error('fontInfo must be an instance of FontInfo'); + } + this.fontInfo = fontInfo; + return this; + } + + /** + * Set whether to provide extra spacing after this line + * @param {Boolean} moveDownAfter Provide extra spacing after this line? + * @returns LineItem + */ + setMoveDownAfter(moveDownAfter) { + if (typeof moveDownAfter !== 'boolean') { + throw new Error('moveDownAfter must be a boolean'); + } + this.moveDownAfter = moveDownAfter; + return this; + } +} + +/** + * Represents font information including name, size, and style. + * @param {String} name The font name + * @param {Number} size The font size + * @param {String} style The font style + * @returns FontInfo + */ +class FontInfo { + constructor(name, size, style) { + this.name = name || 'Helvetica'; + this.style = style || ''; + this.size = size || 12; + return this; + } + + /** + * Set the font name + * @param {String} name The font name + * @returns FontInfo + */ + setName(name) { + if (typeof name !== 'string') { + throw new Error('Font name must be a string'); + } + this.name = name; + return this; + } + + /** + * Set the font size + * @param {Number} size The font size + * @returns FontInfo + */ + setSize(size) { + if (typeof size !== 'number' || size <= 0) { + throw new Error('Font size must be a positive number'); + } + this.size = size; + return this; + } + + /** + * Set the font style + * @param {String} style The font style + * @returns FontInfo + */ + setStyle(style) { + if (typeof style !== 'string') { + throw new Error('Font style must be a string'); + } + this.style = style; + return this; + } +} \ No newline at end of file diff --git a/src/assets/ITThermal.js b/src/assets/ITThermal.js index 88a7d98..a46b322 100644 --- a/src/assets/ITThermal.js +++ b/src/assets/ITThermal.js @@ -1,7 +1,7 @@ /* ITS Thermal Receipt Printer * Developed by Skylar Grant for MCCS ITS */ -const version = "1.2.4"; +const version = "1.2.5"; // ############################################################# // Variables // ############################################################# @@ -21,140 +21,6 @@ const contactInfo = { const headerImageUri = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/4QDyRXhpZgAASUkqAAgAAAAIAA4BAgASAAAAbgAAABIBAwABAAAAAQAAABoBBQABAAAAgAAAABsBBQABAAAAiAAAACgBAwABAAAAAgAAADEBAgANAAAAkAAAADIBAgAUAAAAngAAAGmHBAABAAAAsgAAAAAAAABDcmVhdGVkIHdpdGggR0lNUAAsAQAAAQAAACwBAAABAAAAR0lNUCAyLjEwLjM4AAAyMDI0OjA5OjA5IDExOjMzOjUwAAIAhpIHABkAAADQAAAAAaADAAEAAAABAAAAAAAAAAAAAAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVAA/+EMzWh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjBlMGZhMWIxLWI4OTAtNDU1MC05ZTNhLTg5NmNkODI4Zjk3NyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5MzJlMGM1Yi02OTZjLTRlODItODI5ZC1iMzhiMzRmYzgxYTEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3MDM3OGQyMS05MzJmLTRlMmYtYTlmNS0xNzhhZjFkNzdiMGEiIGRjOkZvcm1hdD0iaW1hZ2UvanBlZyIgR0lNUDpBUEk9IjIuMCIgR0lNUDpQbGF0Zm9ybT0iV2luZG93cyIgR0lNUDpUaW1lU3RhbXA9IjE3MjU4OTYwMzQ0MzE3MTAiIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQ6MDk6MDlUMTE6MzM6NTAtMDQ6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0OjA5OjA5VDExOjMzOjUwLTA0OjAwIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0OmNoYW5nZWQ9Ii8iIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZWNiZDFiNzgtZTFhOS00ODBhLWE1NzItNWI0MmIzNWYzNDM5IiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIiBzdEV2dDp3aGVuPSIyMDI0LTA5LTA5VDExOjMzOjU0Ii8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8+/+ICsElDQ19QUk9GSUxFAAEBAAACoGxjbXMEQAAAbW50clJHQiBYWVogB+gACQAJAA8AIQAoYWNz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"; const headerImageType = 'JPEG'; -// Strings for use generating the PDF -const strings = { - global: { - receiptFooter: `${contactInfo.deptName} Contact Details:\n${contactInfo.supportEmail}\nor ${contactInfo.supportPhone}.` - }, - tempPassword: { - main: 'We have set a temporary password on your account, shown below. Next time you log into Microsoft you will be prompted to change your password.', - valid: 'This password will not work until after', - unLabel: 'Email:', - pwLabel: 'Password:', - pwRequirements: 'Password requirements:\n - Does not contain words or names\n - 8+ characters\n - 1+ Uppercase\n - 1+ Lowercase\n - 1+ Special (!/_=.,?)', - }, - deviceTracker: { - date: 'Date Tracked:', - ticketNumber: 'Ticket Number:', - user: 'User:', - serviceType: 'Service Type:', - notes: 'Notes:' - } -} - -// ############################################################# -// Classes -// ############################################################# -/** - * Represents a line item with text, font information, and spacing options. - * @param {String} text The contents of the line - * @param {FontInfo} fontInfo Font details to use for the line - * @param {Boolean} moveDownAfter Provide extra spacing after this line? - * @returns LineItem - */ -class LineItem { - constructor(text, fontInfo, moveDownAfter) { - this.text = text; - this.fontInfo = fontInfo; - this.moveDownAfter = moveDownAfter || false; - - return this; - } - - /** - * Set the contents of the line - * @param {String} text The contents of the line - * @returns LineItem - */ - setText(text) { - if (typeof text !== 'string') { - throw new Error('Text must be a string'); - } - this.text = text; - return this; - } - - /** - * Set the font information for the line - * @param {FontInfo} fontInfo Font details to use for the line - * @returns LineItem - */ - setFontInfo(fontInfo) { - if (!(fontInfo instanceof FontInfo)) { - throw new Error('fontInfo must be an instance of FontInfo'); - } - this.fontInfo = fontInfo; - return this; - } - - /** - * Set whether to provide extra spacing after this line - * @param {Boolean} moveDownAfter Provide extra spacing after this line? - * @returns LineItem - */ - setMoveDownAfter(moveDownAfter) { - if (typeof moveDownAfter !== 'boolean') { - throw new Error('moveDownAfter must be a boolean'); - } - this.moveDownAfter = moveDownAfter; - return this; - } -} - -/** - * Represents font information including name, size, and style. - * @param {String} name The font name - * @param {Number} size The font size - * @param {String} style The font style - * @returns FontInfo - */ -class FontInfo { - constructor(name, size, style) { - this.name = name || 'Helvetica'; - this.style = style || ''; - this.size = size || 12; - return this; - } - - /** - * Set the font name - * @param {String} name The font name - * @returns FontInfo - */ - setName(name) { - if (typeof name !== 'string') { - throw new Error('Font name must be a string'); - } - this.name = name; - return this; - } - - /** - * Set the font size - * @param {Number} size The font size - * @returns FontInfo - */ - setSize(size) { - if (typeof size !== 'number' || size <= 0) { - throw new Error('Font size must be a positive number'); - } - this.size = size; - return this; - } - - /** - * Set the font style - * @param {String} style The font style - * @returns FontInfo - */ - setStyle(style) { - if (typeof style !== 'string') { - throw new Error('Font style must be a string'); - } - this.style = style; - return this; - } -} // ############################################################# // Fonts @@ -166,6 +32,47 @@ const standardBold = new FontInfo('Helvetica', 12, 'Bold'); /** @type {FontInfo} */ const monospace = new FontInfo('Courier', 16, 'Bold'); +// ############################################################# +// Strings to use generating the PDF +// ############################################################# +const strings = { + global: { + receiptFooter: [ + {text: `${contactInfo.deptName} Contact Details:`, fontInfo: standard}, + {text: `${contactInfo.supportEmail}`, fontInfo: standard}, + {text: `or ${contactInfo.supportPhone}.`, fontInfo: standard} + ], + domain: '@mainecc.edu' + }, + tempPassword: { + main: { + text: 'We have set a temporary password on your account, shown below. Next time you log into Microsoft you will be prompted to change your password.', + fontInfo: standard + }, + valid: { + text: 'This password will not work until after', + fontInfo: standard + }, + unLabel: {text: 'Email:', fontInfo: standard}, + pwLabel: {text: 'Password:', fontInfo: standard}, + pwRequirements: [ + {text: 'Password requirements:', fontInfo: standard}, + {text: ' - Does not contain words or names', fontInfo: standardBold}, + {text: ' - 8+ characters', fontInfo: standard}, + {text: ' - 1+ Uppercase', fontInfo: standard}, + {text: ' - 1+ Lowercase', fontInfo: standard}, + {text: ' - 1+ Special (!/_=.,?)', fontInfo: standard} + ], + }, + deviceTracker: { + date: {text: 'Date Tracked:', fontInfo: standard}, + ticketNumber: {text: 'Ticket Number:', fontInfo: standard}, + user: {text: 'User:', fontInfo: standard}, + serviceType: {text: 'Service Type:', fontInfo: standard}, + notes: {text: 'Notes:', fontInfo: standard} + } +} + // ############################################################# // Functions // ############################################################# @@ -236,6 +143,7 @@ function deviceTrackerHandler() { * @returns Array */ function prepTempPassword(password, username) { + const s = strings.tempPassword; const lineArray = []; const validTime = new Date(Date.now() + 10 * 60000); // 10 minutes from now const formattedTime = validTime.toLocaleTimeString('en-US', { @@ -244,18 +152,20 @@ function prepTempPassword(password, username) { hour12: true // Explicitly ensures 12-hour format, though it's the default for 'en-US' }); - lineArray.push(new LineItem(strings.tempPassword.main, standard, true)); - lineArray.push(new LineItem(`${strings.tempPassword.valid} ${formattedTime}.`, standard, true)); + lineArray.push(new LineItem(s.main.text, s.main.fontInfo, true)); + lineArray.push(new LineItem(`${s.valid.text} ${formattedTime}.`, s.valid.fontInfo, true)); if (username) { - if (!(username.toLowerCase().endsWith('@mainecc.edu'))) username += '@mainecc.edu'; - lineArray.push(new LineItem(strings.tempPassword.unLabel, standard, false)); + if (!(username.toLowerCase().endsWith(strings.global.domain))) username += strings.global.domain; + lineArray.push(new LineItem(s.unLabel.text, s.unLabel.fontInfo, false)); lineArray.push(new LineItem(username, monospace, true)); } - lineArray.push(new LineItem(strings.tempPassword.pwLabel, standard, false)); + lineArray.push(new LineItem(s.pwLabel.text, s.pwLabel.fontInfo, false)); lineArray.push(new LineItem(password, monospace, true)); - lineArray.push(new LineItem(strings.tempPassword.pwRequirements, standardBold, true)); + for (const reqLine of s.pwRequirements) { + lineArray.push(new LineItem(reqLine.text, reqLine.fontInfo, false)); + } return lineArray; }; @@ -271,7 +181,6 @@ function prepCustomDetails(content) { }; /** - * * @param {String} dtTicketNumber * @param {String} dtUser * @param {String} dtService @@ -279,18 +188,19 @@ function prepCustomDetails(content) { * @returns Array */ function prepDeviceTracker(dtTicketNumber, dtUser, dtService, dtNotes) { + const s = strings.deviceTracker; const lineArray = []; const now = new Date(); const formattedDate = `${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}-${now.getFullYear()}`; - lineArray.push(new LineItem(strings.deviceTracker.date, standard, false)); + lineArray.push(new LineItem(s.date.text, s.date.fontInfo, false)); lineArray.push(new LineItem(formattedDate, monospace, false)); - lineArray.push(new LineItem(strings.deviceTracker.ticketNumber, standard, false)); + lineArray.push(new LineItem(s.ticketNumber.text, s.ticketNumber.fontInfo, false)); lineArray.push(new LineItem(dtTicketNumber, monospace, false)); - lineArray.push(new LineItem(strings.deviceTracker.user, standard, false)); + lineArray.push(new LineItem(s.user.text, s.user.fontInfo, false)); lineArray.push(new LineItem(dtUser, monospace, false)); - lineArray.push(new LineItem(strings.deviceTracker.serviceType, standard, false)); + lineArray.push(new LineItem(s.serviceType.text, s.serviceType.fontInfo, false)); lineArray.push(new LineItem(dtService, monospace, false)); - lineArray.push(new LineItem(strings.deviceTracker.notes, standard, false)); + lineArray.push(new LineItem(s.notes.text, s.notes.fontInfo, false)); lineArray.push(new LineItem(dtNotes, monospace, false)); return lineArray; }; @@ -320,7 +230,7 @@ function generateFile(lineArray, header, footer) { currentPos += logoHeightMm + ( verticalSpacing * 2); - for (row of lineArray) { + for (const row of lineArray) { doc.setFont(row.fontInfo.name, row.fontInfo.style); doc.setFontSize(row.fontInfo.size); @@ -339,9 +249,16 @@ function generateFile(lineArray, header, footer) { // Print the footer if needed if (footer) { - doc.setFontSize(12); - doc.setFont(standard.name, ''); - doc.text(strings.global.receiptFooter, 0, currentPos); + // doc.setFontSize(12); + // doc.setFont(standard.name, ''); + // doc.text(strings.global.receiptFooter, 0, currentPos); + for (const footerLine of strings.global.receiptFooter) { + doc.setFont(footerLine.fontInfo.name, footerLine.fontInfo.style); + doc.setFontSize(footerLine.fontInfo.size); + const footerStringArray = doc.splitTextToSize(footerLine.text, 68); + doc.text(footerStringArray, 0, currentPos); + currentPos += (verticalSpacing * ( footerStringArray.length - 1 )) + verticalSpacing; + } } // Output the PDF to a blob URL and return it diff --git a/src/index.html b/src/index.html index 5030fce..44e8254 100644 --- a/src/index.html +++ b/src/index.html @@ -157,6 +157,7 @@ +