You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
HelenaExpressApp/www/assets/js/dropandsend.js

152 lines
7.1 KiB
JavaScript

/*
* 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/.
*/
function captureAndSendPickupCode() {
scanBarcode(function (result) {
var code = "";
var coderegex = /^[0-9a-zA-Z]{5,40}$/;
if (result.startsWith("https://helena.express/dropandsend#")) {
code = result.split("#")[1];
} else if (result.startsWith("https://helena.express/das/pickup#")) {
code = result.split("#")[1];
} else if (coderegex.test(result)) {
code = result;
} else {
app.dialog.alert("That's not a valid Drop and Send pickup code.", "Error");
return;
}
sendPickupCode(code);
}, function () {
app.dialog.prompt("Something went wrong while trying to scan the barcode. Type the location number to request a pickup.", "Send Pickup Code", function (code) {
if (code == "") {
app.dialog.alert("You didn't enter a location number.", "Error");
} else {
sendPickupCode(code);
}
}, function (cancel) {
}, "");
});
}
function sendPickupCode(code) {
app.dialog.preloader("Loading...");
apirequest(SETTINGS.apis.dropandsendpickup, {
accountnumber: getStorage("accountnumber"),
accountkey: getStorage("accountkey"),
locationnumber: code
}, function (resp) {
app.dialog.close();
if (resp.status == "OK") {
app.dialog.alert("Thank you for using Helena Express! You'll get an emailed receipt after we pick up and process your package(s).", "Pickup Requested!");
sendActionReport("Pickup", "Drop and Send", "Pickup requested");
} else if (resp.status == "ERROR") {
app.dialog.alert(resp.msg, "Error");
sendErrorReport("Pickup", "Drop and Send", resp.msg);
}
}, function (xhr, status, error) {
app.dialog.close();
app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error");
sendErrorReport("Pickup", "Drop and Send", "Server/network problem: " + xhr.status + ": " + xhr.statusText);
});
}
$("#app").on("click", "#pickupCodeQRScanBtn", function () {
captureAndSendPickupCode();
});
$("#app").on("click", "#pickupCodeManualEntryBtn", function () {
app.dialog.prompt("Enter the location number to request a pickup.", "Send Pickup Code", function (code) {
if (code == "") {
app.dialog.alert("You didn't enter a location number.", "Error");
} else {
sendPickupCode(code);
}
}, function (cancel) {
}, "");
});
$("body").on("popup:open", "#dasLocationMapPopup", function () {
if (MapControl.supported()) {
if (dropboxMap == null) {
var mapboxel = document.getElementById("mapbox-dropboxes");
dropboxMap = new MapControl(mapboxel, true);
dropboxMap.reloadMap();
dropboxMap.mapObj.on('load', function () {
dropboxMap.mapObj.jumpTo({center: [-112.005, 46.589], zoom: 8});
dropboxMap.loadIcon("./assets/images/DAS_marker.png", "dropbox", function () {
apirequest(SETTINGS.apis.dropandsendlocations, {}, function (data) {
dropboxMap.loadMarkersFromGeoJson(data, "dropbox", "dropbox");
dropboxMap.mapObj.on('click', 'marker-layer-dropbox', function (e) {
var coordinates = e.features[0].geometry.coordinates.slice();
var name = e.features[0].properties.name;
var type = e.features[0].properties.type;
var info = e.features[0].properties.info;
var hours = e.features[0].properties.hours;
var geolink = "geo:" + (Math.round(coordinates[1] * 1000000) / 1000000) + "," + (Math.round(coordinates[0] * 1000000) / 1000000);
var typedesc = "";
switch (type) {
case "micro":
typedesc = "<i class='fas fa-envelope'></i> Fits envelopes";
break;
case "mini":
typedesc = "<i class='fas fa-mail-bulk'></i> Fits large envelopes and small packages";
break;
case "standard":
typedesc = "<i class='fas fa-box-alt'></i> Fits up to medium-size packages";
break;
case "large":
typedesc = "<i class='fas fa-boxes-alt'></i> Fits most packages";
break;
case "business":
typedesc = "<i class='fas fa-store-alt'></i> Accepts all size packages";
break;
}
while (Math.abs(e.lngLat.lng - coordinates[0]) > 180) {
coordinates[0] += e.lngLat.lng > coordinates[0] ? 360 : -360;
}
new maplibregl.Popup()
.setLngLat(coordinates)
.setHTML("<b>" + name + "</b><br>" + typedesc
+ "<br><b>Hours:</b><br>" + hours
+ "<br><b>More Info:</b><br>" + info
+ "<br><a class=\"button button-fill button-small\" href=\"" + geolink + "\"><i class=\"fas fa-location-circle\"></i> Directions</a>")
.addTo(dropboxMap.mapObj);
});
dropboxMap.mapObj.on('mouseenter', 'marker-layer-dropbox', function () {
dropboxMap.mapObj.getCanvas().style.cursor = 'pointer';
});
dropboxMap.mapObj.on('mouseleave', 'marker-layer-dropbox', function () {
dropboxMap.mapObj.getCanvas().style.cursor = '';
});
dropboxMap.animateMapIn(46.589, -112.005, 9, 0);
}, function (error) {
}, "GET");
});
});
}
} else {
showWebGLErrorMessage();
}
trackPageView("/dropandsend/locations_popup", $("#dasLocationMapPopup .navbar .navbar-inner .title").first().text());
});
$("body").on("popup:open", "#dasHowItWorksPopup", function () {
// Put user's account number in the instructions
if (inStorage("accountnumber") && inStorage("accountkey")) {
$("#dasHowItWorksAccountNumber").text(" (" + getStorage("accountnumber") + ")");
}
trackPageView("/dropandsend/howitworks_popup", $("#dasHowItWorksPopup .navbar .navbar-inner .title").first().text());
});