Add rate calculator

master v1.0.0
Skylar Ittner 3 years ago
parent 952417f231
commit ccdfc19c54

@ -0,0 +1,87 @@
/*
* 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 updateRateForm() {
$("#itemweight").css("display", "none");
$("#itemsize").css("display", "none");
$("#itemweightlbs").css("display", "");
switch ($(this).val()) {
case "Card":
$("#itemweight").css("display", "none");
$("#weightLbs").val("0");
$("#weightOz").val("0");
break;
case "Letter":
$("#itemweight").css("display", "");
$("#itemweightlbs").css("display", "none");
$("#weightLbs").val("0");
break;
case "Flat":
$("#itemweight").css("display", "");
break;
case "Parcel":
$("#itemweight").css("display", "");
$("#itemsize").css("display", "");
break;
case "RegionalRateBoxA":
case "RegionalRateBoxB":
$("#itemweight").css("display", "");
break;
default:
break;
}
}
$("#app").on("click change", "#itemType", updateRateForm);
function initRateForm() {
$("#itemType").val("");
updateRateForm();
}
function getRates() {
app.dialog.preloader("Loading...");
apirequest(
SETTINGS.apis.rates,
{
from_street1: $("#from_street1").val(),
from_zip: $("#from_zip").val(),
to_street1: $("#to_street1").val(),
to_zip: $("#to_zip").val(),
itemType: $("#itemType").val(),
length: $("input[name=length]").val(),
width: $("input[name=width]").val(),
height: $("input[name=height]").val(),
weightLbs: $("#weightLbs").val(),
weightOz: $("#weightOz").val()
},
function (resp) {
app.dialog.close();
if (resp.status == "OK") {
if (resp.rates.length == 0) {
resp.rates = false;
}
if (resp.hints.length == 0) {
resp.hints = false;
}
router.navigate("/rateresult", {
context: resp
});
} else {
app.dialog.alert(resp.message, "Error");
}
},
function (xhr) {
app.dialog.close();
var error = $.parseJSON(xhr.responseText);
if (error && typeof error.msg != 'undefined') {
app.dialog.alert(error.msg, "Error");
} else {
app.dialog.alert("A server or network error occurred.", "Error");
}
}, "GET");
}

@ -46,6 +46,7 @@
<script src="assets/js/util.js"></script>
<script src="assets/js/track.js"></script>
<script src="assets/js/addresscode.js"></script>
<script src="assets/js/rates.js"></script>
<script src="routes.js"></script>
<script src="assets/js/main.js"></script>

@ -0,0 +1,162 @@
<!-- 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/. -->
<div class="page" data-name="rateresult">
<div class="navbar">
<div class="navbar-inner">
<div class="left">
<a class="link back" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Back</span>
</a>
</div>
<div class="title">Rates</div>
</div>
</div>
<div class="page-content">
<div class="row justify-content-center">
<div class="col-100 medium-60 large-50 xlarge-40">
<div class="list transparent no-hairlines tablet-inset elevation-tablet">
<ul>
<li class="item-divider">From:</li>
{{#with from}}
<li>
<div class="item-content">
<div class="item-inner">
<div class="item-title" style="white-space: normal !important;">
{{street}}
</div>
</div>
</div>
</li>
<li>
<div class="item-content">
<div class="item-inner">
<div class="item-title" style="white-space: normal !important;">
{{citystatezip}}
</div>
</div>
</div>
</li>
{{/with}}
<li class="item-divider">To:</li>
{{#with to}}
<li>
<div class="item-content">
<div class="item-inner">
<div class="item-title" style="white-space: normal !important;">
{{street}}
</div>
</div>
</div>
</li>
<li>
<div class="item-content">
<div class="item-inner">
<div class="item-title" style="white-space: normal !important;">
{{citystatezip}}
</div>
</div>
</div>
</li>
{{/with}}
<li class="item-divider">Item:</li>
<li>
<div class="item-content">
<div class="item-inner">
<div class="item-title" style="white-space: normal !important;">
{{weight}}
</div>
</div>
</div>
</li>
<li>
<div class="item-content">
<div class="item-inner">
<div class="item-title" style="white-space: normal !important;">
{{size}}
</div>
</div>
</div>
</li>
<li class="item-divider">Rates:</li>
{{#if rates}}
<li>
<div class="item-content">
<div class="item-inner item-cell">
<div class="item-row" style="font-weight: 500;">
<div class="item-cell">
Service
</div>
<div class="item-cell">
Delivery Estimate
</div>
<div class="item-cell">
Price
</div>
</div>
</div>
</div>
</li>
{{#each rates}}
<li>
<div class="item-content">
<div class="item-inner item-cell">
<div class="item-row">
<div class="item-cell">
{{carrier}} {{service}}
</div>
<div class="item-cell">
{{date}}
</div>
<div class="item-cell">
${{rate}}
</div>
</div>
</div>
</div>
</li>
{{/each}}
{{else}}
<li>
<div class="item-content">
<div class="item-inner item-cell">
<div class="item-row">
<div class="item-cell">
We could find no available shipping options based on the information you provided.
</div>
</div>
</div>
</div>
</li>
{{/if}}
{{#if hints}}
<li class="item-divider">Tip{{#js_if "this.hints.length > 1"}}s{{/js_if}}:</li>
{{#each hints}}
<li>
<div class="item-content">
<div class="item-inner item-cell">
<div class="item-row">
<div class="item-cell">
{{this}}
</div>
</div>
</div>
</div>
</li>
{{/each}}
{{/if}}
</ul>
</div>
</div>
</div>
<div class="block">
Rates provided do not include pickup fees. This tool provides shipping cost <i>estimates</i>; actual prices, available service options, and delivery dates shown are not guaranteed to be actually available when you ship your item. Your item's contents may not be eligible for certain services.
</div>
</div>
</div>

@ -0,0 +1,149 @@
<!-- 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/. -->
<div class="page" data-name="rates">
<div class="navbar">
<div class="navbar-inner">
<div class="left">
<a class="link back" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Back</span>
</a>
</div>
<div class="title">Rate Calculator</div>
</div>
</div>
<div class="page-content">
<div class="row justify-content-center">
<div class="col-100 medium-90 xlarge-75 margin-horizontal">
<div class="card margin">
<div class="card-content text-align-center">
<div class="list" id="ratesform">
<ul>
<li class="item-divider">From:</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Street Address</div>
<div class="item-input-wrap">
<input type="text" id="from_street1" placeholder="1234 Example Rd" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">ZIP Code</div>
<div class="item-input-wrap">
<input type="text" id="from_zip" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-divider">To:</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Street Address</div>
<div class="item-input-wrap">
<input type="text" id="to_street1" placeholder="987 Street Drive" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">ZIP Code</div>
<div class="item-input-wrap">
<input type="text" id="to_zip" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-divider">Item Type:</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-input-wrap">
<select id="itemType" name="itemType">
<option value="" selected>Choose Item Type</option>
<option value="Card">Postcard</option>
<option value="Letter">Letter</option>
<option value="Flat">Large envelope</option>
<option value="Parcel">Parcel</option>
<option value="FlatRateEnvelope">USPS Flat Rate Envelope</option>
<option value="FlatRateLegalEnvelope">USPS Flat Rate Legal Envelope</option>
<option value="FlatRatePaddedEnvelope">USPS Flat Rate Padded Envelope</option>
<option value="SmallFlatRateBox">USPS Small Flat Rate Box</option>
<option value="MediumFlatRateBox">USPS Medium Flat Rate Box</option>
<option value="LargeFlatRateBox">USPS Large Flat Rate Box</option>
<option value="RegionalRateBoxA">USPS Regional Rate Box A</option>
<option value="RegionalRateBoxB">USPS Regional Rate Box B</option>
</select>
</div>
</div>
</li>
</ul>
<ul id="itemsize" style="display: none;">
<li class="item-divider">Size (inches)</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Length</div>
<div class="item-input-wrap">
<input type="number" name="length" min="0" max="100" step="0.1" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Width</div>
<div class="item-input-wrap">
<input type="number" name="width" min="0" max="100" step="0.1" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Height</div>
<div class="item-input-wrap">
<input type="number" name="height" min="0" max="100" step="0.1" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
</ul>
<ul id="itemweight" style="display: none;">
<li class="item-divider">Weight</li>
<li class="item-content item-input item-input-outline" id="itemweightlbs">
<div class="item-inner">
<div class="item-title item-floating-label">Pounds</div>
<div class="item-input-wrap">
<input type="number" id="weightLbs" name="weightLbs" min="0" max="70" step="1" placeholder="0" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Ounces</div>
<div class="item-input-wrap">
<input type="number" id="weightOz" name="weightOz" min="0" max="15.9" step="0.1" placeholder="0" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
</ul>
</div>
<div class="card-content-padding">
<div class="button" onclick="getRates()"><i class="far fa-calculator"></i> Get Rates</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

@ -25,7 +25,7 @@ var routes = [
icon: "fad fa-search"
},
{
title: "Check Rates",
title: "Get Rates",
href: "/rates",
icon: "fad fa-calculator"
}
@ -60,6 +60,21 @@ var routes = [
}
}
},
{
path: '/rates',
url: './pages/rates.html',
name: 'rates',
on: {
pageAfterIn: function () {
initRateForm();
}
}
},
{
path: '/rateresult',
name: 'rateresult',
templateUrl: './pages/rateresult.html'
},
{
path: '/addresscode',
name: 'addresscode',

@ -6,7 +6,8 @@
var SETTINGS = {
apis: {
track: "https://helena.express/tracker/api.php"
track: "https://helena.express/tracker/api.php",
rates: "https://helena.express/rateapi.php"
},
appointmenturl: "https://appointments.netsyms.com/index.php?service=19&hlnexp=1&embed=1&only=1",
branding: {

Loading…
Cancel
Save