/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ var scannerCodes = []; function resetScanner() { scannerCodes = []; app.popup.close("#scanEventTypePopup"); app.popup.close("#scanEventPopup"); router.refreshPage(); } function brokenScannerEsc() { app.dialog.confirm( "Clear list?", "Confirm", function () { resetScanner(); }, function () { // cancel } ); } function brokenScannerScan() { scanBarcode(function (code) { playSound("scan"); addCodeToScannerList(code); }, function (error) { app.dialog.alert(error, "Error"); }); } function brokenScannerAddTextEntry() { var code = $("#brokenscannerinput").val(); if (code != "" && code.length > 5 && code.match(/^[0-9A-Z]+$/i)) { addCodeToScannerList(code); $("#brokenscannerinput").val(""); } else { app.dialog.alert("That's not a valid tracking code.", "Error"); } } function addCodeToScannerList(code) { code = code.toUpperCase(); if (code != "" && code.length > 5 && code.match(/^[0-9A-Z]+$/i)) { // continue } else { app.dialog.alert("That's not a valid tracking code.", "Error"); return; } var signatureregexes = [ /^E[A-Z][0-9]{9}US$/, // Priority Mail Express /^[RV][A-Z][0-9]{9}[A-Z]{2}$/, // Registered mail /^(420[0-9]{5})?7[0-9]{19}$/ // Certified Mail ]; /** * Regex of IMpb codes that don't need anything special * Updated with July 9 2023 STC list from https://postalpro.usps.com/impb-stcs-excel * @type {RegExp} */ var stcregex = /^(420[0-9]{5})?[0-9]{2}(001|017|019|020|022|024|037|055|058|091|112|113|116|120|134|135|138|140|141|142|164|184|185|187|190|209|211|217|218|219|259|265|269|346|361|362|363|367|368|385|388|389|390|395|419|431|453|468|483|490|502|515|526|551|563|596|597|598|612|624|671|676|701|702|703|704|746|748|760|785|786|790|791|793|794|798|837|859|905|906|907|909)[0-9]+$/; var signatureRequired = false; for (var i = 0; i < signatureregexes.length; i++) { if (code.match(signatureregexes[i])) { signatureRequired = true; break; } } if (!code.match(stcregex)) { signatureRequired = true; } var codeEntryTemplate = Template7.compile('
  • ' + '
    ' + '
    ' + '
    {{code}}
    ' + '
    ' + '
    ' + '
  • '); if (signatureRequired) { if (code.match(/^E[A-Z][0-9]{9}US$/)) { app.dialog.confirm( "Does this item contain a waiver of signature endorsement?", "Express Item", function () { $("#codelist").append(codeEntryTemplate({ code: code })); }, function () { // cancel } ); } else { app.dialog.confirm( "It looks like this item might require a signature or other special procedures. Add it anyways?", "Special Item", function () { $("#codelist").append(codeEntryTemplate({ code: code })); }, function () { // cancel } ); } } else { $("#codelist").append(codeEntryTemplate({ code: code })); } } function chooseScanEvent() { if ($("#codelist li.codelist-entry").length <= 0) { app.dialog.alert("Nothing was entered!"); return; } $("#codelist li.codelist-entry").each(function () { scannerCodes.push($(this).data("code")); }); openEventPopup(); } function openEventPopup() { var eventItemTemplate = Template7.compile('
  • ' + ' ' + '
  • '); $("#scanEventPopup ul.eventlist").html(""); for (i in SETTINGS.scannerevents) { var event = SETTINGS.scannerevents[i]; $("#scanEventPopup ul.eventlist").append(eventItemTemplate({ button: event.button, title: event.title })); } app.popup.open("#scanEventPopup"); } function openEventTypePopup(eventname) { var eventItemTemplate = Template7.compile('
  • ' + ' ' + '
  • '); var eventafter = false; for (i in SETTINGS.scannerevents) { var event = SETTINGS.scannerevents[i]; if (event.title == eventname) { eventafter = event.after; break; } } $("#scanEventTypePopup ul.eventlist").html(""); for (i in eventafter) { var event = eventafter[i]; $("#scanEventTypePopup ul.eventlist").append(eventItemTemplate({ button: event.button, title: event.title, parenttitle: eventname, form3849: event.after == "3849" ? "1" : "0" })); } app.popup.open("#scanEventTypePopup"); } function saveScanCode(code) { if (getStorage("scanevents") == null) { setStorage("scanevents", "[]"); } var events = JSON.parse(getStorage("scanevents")); events.push(code); setStorage("scanevents", JSON.stringify(events)); appendActivityLog("Scanned Item", code.event.join(' '), code.code + (code.form3849 == "" ? "" : "
    Form 3849: " + code.form3849), "fas fa-barcode"); } $(".view-main").off("click", "#codelist li.codelist-entry"); $(".view-main").on("click", "#codelist li.codelist-entry", function () { var entry = $(this); var code = entry.data("code"); app.dialog.confirm( "Remove " + code + " from list?", "Confirm", function () { // delete entry.remove(); }, function () { // cancel } ); }); $("#app").off("click", "ul li.eventtypebutton"); $("#app").on("click", "ul li.eventtypebutton", function () { var eventname = $(this).data("parenttitle"); var eventtypename = $(this).data("title"); var scanEvent = []; scanEvent.push(eventname); scanEvent.push(eventtypename); if ($(this).data("form3849") == "1") { // TODO: make this not a hack app.dialog.prompt("Key in 3849 form", "3849 Form", function (formcode) { for (i in scannerCodes) { saveScanCode({ code: scannerCodes[i], event: scanEvent, form3849: formcode, date: timestampToDateTimeString((new Date).getTime() / 1000) }); } app.toast.show({ text: 'Information recorded successfully!', position: "center", destroyOnClose: true, closeTimeout: 1000 * 3 }); resetScanner(); }, function () { }, ""); } else { for (i in scannerCodes) { saveScanCode({ code: scannerCodes[i], event: scanEvent, form3849: "", date: timestampToDateTimeString((new Date).getTime() / 1000) }); } app.toast.show({ text: 'Information recorded successfully!', position: "center", destroyOnClose: true, closeTimeout: 1000 * 3 }); resetScanner(); } }); $("#brokenscannerinput").on('keypress', function (e) { if (event.key === "Enter") { brokenScannerAddTextEntry(); } });