Add number pad and currency calculator tools, close #16

master
Skylar Ittner 6 år sedan
förälder da2fee3222
incheckning ce10e4af95

@ -120,7 +120,7 @@ define("STRINGS", [
"pick cash" => "Choose",
"cash already closed" => "Cash already closed, cannot edit this transaction. Process a return instead.",
"update" => "Update",
"transaction search" => "Search transactions (by Tx ID or customer)",
"transaction search" => "Search transactions",
"return" => "Return",
"enter refund" => "Enter Refund",
"refund" => "Refund",

@ -21,6 +21,8 @@ define("PAGES", [
"scripts" => [
"static/js/input_type_money.js",
"static/js/bsalert.js",
"static/js/bsnumpad.js",
"static/js/bsmoneypad.js",
"static/js/pos_items.js",
"static/js/pos_customer.js",
"static/js/pos_gridview.js",

@ -102,6 +102,9 @@ if (isset($_GET['switch']) || !isset($_SESSION['register']) || !$registeropen) {
<div class="input-group">
<input type="text" class="form-control" id="transactionsearch" placeholder="<?php lang("transaction search"); ?>" />
<div class="input-group-append">
<span class="btn btn-link open-number-pad-btn">
<i class="fas fa-keyboard"></i>
</span>
<button class="btn btn-link" type="button" id="transactionsearchbtn"><i class="fas fa-search"></i></button>
</div>
</div>
@ -174,6 +177,11 @@ if (isset($_GET['switch']) || !isset($_SESSION['register']) || !$registeropen) {
<span class="input-group-text pr-1"><b>$</b></span>
</div>
<input type="money" class="form-control item-price" value="<?php echo number_format($amount, 2); ?>"/>
<div class="input-group-append">
<span class="btn btn-outline-primary open-number-pad-btn">
<i class="fas fa-keyboard"></i>
</span>
</div>
<div class="input-group-prepend">
<span class="input-group-text px-2"><i class="fas fa-times"></i></span>
<button class="btn btn-red qty-minus" type="button"><i class="fas <?php
@ -319,6 +327,11 @@ if (isset($_GET['switch']) || !isset($_SESSION['register']) || !$registeropen) {
</span>
</div>
<input class="form-control payment-entry" type="money" data-type="<?php echo $p['typename']; ?>" value="<?php echo number_format($p['amount'], 2); ?>" />
<div class="input-group-prepend input-group-append">
<span class="btn btn-outline-success open-money-pad-btn">
<i class="fas fa-calculator"></i>
</span>
</div>
<?php
if ($p['typename'] == 'giftcard') {
?>
@ -328,6 +341,11 @@ if (isset($_GET['switch']) || !isset($_SESSION['register']) || !$registeropen) {
</span>
</div>
<input class="form-control giftcard-number" type="number" value="<?php echo $p['certcode']; ?>" />
<div class="input-group-prepend input-group-append">
<span class="btn btn-outline-primary open-number-pad-btn" data-gc="1">
<i class="fas fa-keyboard"></i>
</span>
</div>
<?php
}
?>

@ -47,6 +47,16 @@ function bsalert(title, message, okbtn, cancelbtn, callback) {
$("#bsalert").modal("show");
}
/**
* Prompt the user for input with a modal dialog.
* @param {type} title Modal title
* @param {type} message Message content
* @param {type} okbtn Text for the OK button
* @param {type} cancelbtn Text for the cancel button
* @param {type} type Input box type (text, number, etc)
* @param {type} callback Function to pass the user input to
* @returns {undefined}
*/
function bsprompt(title, message, okbtn, cancelbtn, type, callback) {
var html = '<div class="modal fade" id="bsprompt">'
+ ' <div class="modal-dialog">'

@ -0,0 +1,99 @@
/*
* 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 bsmoneypad(title, amount, okbtn, cancelbtn, denominations, callback) {
var html = '<div class="modal fade" id="bsmoneypad">'
+ ' <div class="modal-dialog">'
+ ' <div class="modal-content">'
+ ' <div class="modal-header">'
+ ' <h5 class="modal-title" id="bsmoneypad-title"></h5>'
+ ' <button type="button" class="close" data-dismiss="modal" aria-label="Close">'
+ ' <span aria-hidden="true">&times;</span>'
+ ' </button>'
+ ' </div>'
+ ' <div class="modal-body" id="bsmoneypad-body">'
+ ' <div class="d-flex justify-content-between align-content-center m-2">'
+ ' <div class="btn btn-outline-success" id="bsmoneypad-plusminus" data-direction="plus"><i class="fas fa-plus"></i></div>'
+ ' <div class="h2" id="bsmoneypad-amount" data-amount="0">$0.00</div>'
+ ' <div class="btn btn-outline-primary" id="bsmoneypad-reset"><i class="fas fa-eraser"></i></div>'
+ ' </div>'
+ ' <div id="bsmoneypad-pad" class="d-flex flex-wrap"></div>'
+ ' </div>'
+ ' <div class="modal-footer">'
+ ' <button type="button" class="btn btn-secondary" data-dismiss="modal" id="bsmoneypad-cancel">Cancel</button>'
+ ' <button type="button" class="btn btn-primary" id="bsmoneypad-ok">OK</button>'
+ ' </div>'
+ ' </div>'
+ ' </div>'
+ '</div>';
$("body").append(html);
if (denominations == null) {
denominations = [1.00, 2.00, 5.00, 10.00, 20.00, 50.00, 100.00, null, 0.01, 0.05, 0.10, 0.25, 0.50];
}
function addButton(val, label) {
$("#bsmoneypad-pad").append('<div class="btn btn-default moneypadbtn m-1" data-amount="' + val + '"><h5>' + label + '</h5></div>');
}
for (var i = 0; i < denominations.length; i++) {
if (denominations[i] === null) {
$("#bsmoneypad-pad").append('<div class="w-100 my-0 py-0"><hr /></div>');
continue;
}
var lbl = "";
if (denominations[i] < 1) {
lbl = denominations[i] * 100.0 + "¢";
} else if (denominations[i] % 1 === 0) {
lbl = "$" + denominations[i];
} else {
lbl = "$" + denominations[i].toFixed(2);
}
addButton(denominations[i], lbl);
}
$("#bsmoneypad-title").html(title);
$("#bsmoneypad-amount").text("$" + (amount * 1.0).toFixed(2));
$("#bsmoneypad-amount").data('amount', (amount * 1.0));
$("#bsmoneypad-ok").html(okbtn);
$("#bsmoneypad-cancel").html(cancelbtn);
$("#bsmoneypad-pad").on("click", ".moneypadbtn", function () {
var total = $("#bsmoneypad-amount").data('amount') * 1.0;
var amount = $(this).data('amount');
if ($("#bsmoneypad-plusminus").data("direction") == "plus") {
total += amount;
} else {
total -= amount;
}
$("#bsmoneypad-amount").text("$" + (total * 1.0).toFixed(2));
$("#bsmoneypad-amount").data('amount', (total * 1.0));
});
$("#bsmoneypad-plusminus").on("click", function () {
if ($(this).data("direction") == "plus") {
$(this).data("direction", "minus");
$(this).removeClass("btn-outline-success");
$(this).addClass("btn-outline-danger");
$(this).html('<i class="fas fa-minus"></i>');
} else {
$(this).data("direction", "plus");
$(this).removeClass("btn-outline-danger");
$(this).addClass("btn-outline-success");
$(this).html('<i class="fas fa-plus"></i>');
}
});
$("#bsmoneypad-reset").on("click", function () {
$("#bsmoneypad-amount").text("$0.00");
$("#bsmoneypad-amount").data('amount', 0.0);
});
$("#bsmoneypad-ok").on("click", function () {
callback($("#bsmoneypad-amount").data('amount').toFixed(2) * 1.0);
$("#bsmoneypad").modal("hide");
});
$("#bsmoneypad").on("shown.bs.modal", function () {
$("#bsmoneypad-input").focus();
});
$("#bsmoneypad").on("hidden.bs.modal", function () {
$("#bsmoneypad").remove();
});
$("#bsmoneypad").modal("show");
}

@ -0,0 +1,68 @@
/*
* 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 bsnumpad(title, content, okbtn, cancelbtn, callback) {
var html = '<div class="modal fade" id="bsnumpad">'
+ ' <div class="modal-dialog">'
+ ' <div class="modal-content">'
+ ' <div class="modal-header">'
+ ' <h5 class="modal-title" id="bsnumpad-title"></h5>'
+ ' <button type="button" class="close" data-dismiss="modal" aria-label="Close">'
+ ' <span aria-hidden="true">&times;</span>'
+ ' </button>'
+ ' </div>'
+ ' <div class="modal-body" id="bsnumpad-body">'
+ ' <div class="display-4 text-center">&nbsp;<span id="bsnumpad-input"></span>&nbsp;</div>'
+ ' <div id="bsnumpad-pad" class="row"></div>'
+ ' </div>'
+ ' <div class="modal-footer">'
+ ' <button type="button" class="btn btn-secondary" data-dismiss="modal" id="bsnumpad-cancel">Cancel</button>'
+ ' <button type="button" class="btn btn-primary" id="bsnumpad-ok">OK</button>'
+ ' </div>'
+ ' </div>'
+ ' </div>'
+ '</div>';
$("body").append(html);
function addButton(val, label) {
$("#bsnumpad-pad").append('<div class="col-4 p-1"><div class="w-100 h-100 p-2 py-3 btn btn-default numpadbtn" data-key="' + val + '"><h5>' + label + '</h5></div></div>');
}
for (var i = 1; i <= 9; i++) {
addButton(i, i);
}
addButton('0', '0');
addButton('.', '.');
addButton('clear', '<i class="fas fa-eraser"></i>');
$("#bsnumpad-pad").on("click", ".numpadbtn", function () {
var char = $(this).data('key');
var val = $("#bsnumpad-input").text();
if (char == "clear") {
val = "";
} else if (char == ".") {
if (!val.includes('.')) {
val += char;
}
} else {
val += char;
}
$("#bsnumpad-input").text(val);
});
$("#bsnumpad-title").html(title);
$("#bsnumpad-input").text(content);
$("#bsnumpad-ok").html(okbtn);
$("#bsnumpad-cancel").html(cancelbtn);
$("#bsnumpad-ok").on("click", function () {
callback($("#bsnumpad-input").text());
$("#bsnumpad").modal("hide");
});
$("#bsnumpad").on("shown.bs.modal", function () {
$("#bsnumpad-input").focus();
});
$("#bsnumpad").on("hidden.bs.modal", function () {
$("#bsnumpad").remove();
});
$("#bsnumpad").modal("show");
}

@ -30,6 +30,11 @@ function addItem(name, code, price, id) {
+ '<span class="input-group-text pr-1"><b>$</b></span>'
+ '</div>'
+ '<input type="money" class="form-control item-price" value="' + price + '"/>'
+ ' <div class="input-group-append">'
+ ' <span class="btn btn-outline-primary open-number-pad-btn">'
+ ' <i class="fas fa-keyboard"></i>'
+ ' </span>'
+ ' </div>'
+ '<div class="input-group-prepend">'
+ '<span class="input-group-text px-2"><i class="fas fa-times"></i></span>'
+ '<button class="btn btn-red qty-minus" type="button"><i class="fas fa-trash"></i></button>'
@ -153,6 +158,18 @@ $("#pos-lines-box").on("keypress", ".item-qty,.item-price", function (e) {
}
});
$("#pos-lines-box").on("click", ".open-number-pad-btn", function (e) {
var inputbox = $(this).parents('.input-group').children(".item-price");
var value = inputbox.val();
if (isNaN(value)) {
value = '';
}
bsnumpad("Keyboard", value, "Save", "Cancel", function (answer) {
inputbox.val(answer);
recalculate();
});
});
$("#barcode").on('keypress', function (e) {
if (e.which === 13) {
findItem($("#barcode").val());

@ -85,7 +85,7 @@ $("#transactionsearch").on('keypress', function (e) {
});
$("#transactionsearchbtn").on("click", function () {
showCustomerList($("#transactionsearch").val());
showTransactionList($("#transactionsearch").val());
$("#transactionsearch").val("");
});
@ -94,4 +94,15 @@ $("#managermodal").on("click", ".printreceiptbtn", function () {
$("#receiptchangediv").addClass("d-none");
$("#receiptframe").attr("src", 'action.php?action=getreceipt&txid=' + $(this).data("txid"));
$("#receiptmodal").modal();
});
$("#managermodal .open-number-pad-btn").click(function () {
var inputbox = $("#transactionsearch");
var value = inputbox.val();
if (isNaN(value)) {
value = '';
}
bsnumpad("Keyboard", value, '<i class="fas fa-search"></i> Search', "Cancel", function (answer) {
showTransactionList(answer);
});
});

@ -13,7 +13,12 @@ function addPayment(type, icon, text) {
+ ' #'
+ ' </span>'
+ ' </div>'
+ ' <input class="form-control giftcard-number" type="number" />';
+ ' <input class="form-control giftcard-number" type="number" />'
+ ' <div class="input-group-prepend input-group-append">'
+ ' <span class="btn btn-outline-primary open-number-pad-btn" data-gc="1">'
+ ' <i class="fas fa-keyboard"></i>'
+ ' </span>'
+ ' </div>';
}
var amount = "";
// Autofill the exact due amount for payment methods that are flexible like that
@ -37,6 +42,14 @@ function addPayment(type, icon, text) {
+ ' </span>'
+ ' </div>'
+ ' <input class="form-control payment-entry" type="money" data-type="' + type + '" value="' + amount + '" />'
+ ' <div class="input-group-prepend input-group-append">'
// + ' <span class="btn btn-outline-primary open-number-pad-btn" data-gc="0">'
// + ' <i class="fas fa-keyboard"></i>'
// + ' </span>'
+ ' <span class="btn btn-outline-success open-money-pad-btn">'
+ ' <i class="fas fa-calculator"></i>'
+ ' </span>'
+ ' </div>'
+ extrafield
+ ' <div class="input-group-append">'
+ ' <span class="btn btn-outline-danger remove-payment-btn">'
@ -102,6 +115,34 @@ $("#payment-lines").on("click", ".remove-payment-btn", function () {
recalculate();
});
$("#payment-lines").on("click", ".open-money-pad-btn", function () {
var inputbox = $(this).parents('.input-group').children(".payment-entry");
var value = inputbox.val();
if (isNaN(value)) {
value = 0.0;
}
bsmoneypad("Currency Calculator", value * 1.0, "Save", "Cancel", null, function (answer) {
inputbox.val(answer);
recalculate();
});
});
$("#payment-lines").on("click", ".open-number-pad-btn", function () {
if ($(this).data('gc') == '1') {
var inputbox = $(this).parents('.input-group').children(".giftcard-number");
} else {
var inputbox = $(this).parents('.input-group').children(".payment-entry");
}
var value = inputbox.val();
if (isNaN(value)) {
value = '';
}
bsnumpad("Keyboard", value, "Save", "Cancel", function (answer) {
inputbox.val(answer);
recalculate();
});
});
$("#paymentbtn").click(function () {
$("#paymentui").removeClass("d-none");
});

Laddar…
Avbryt
Spara