diff --git a/pages.php b/pages.php index ad2a84f..28de167 100644 --- a/pages.php +++ b/pages.php @@ -11,6 +11,14 @@ define("PAGES", [ "navbar" => true, "icon" => "fas fa-home" ], + "pos" => [ + "title" => "point of sale", + "navbar" => true, + "icon" => "far fa-money-bill-alt", + "scripts" => [ + "static/js/pos.js", + ] + ], "404" => [ "title" => "404 error" ] diff --git a/pages/pos.php b/pages/pos.php new file mode 100644 index 0000000..06cc133 --- /dev/null +++ b/pages/pos.php @@ -0,0 +1,73 @@ + +
+
+
+
$236.32
+
+ +
+
+
+
+ +
+ " /> +
+ +
+
+
+
+
+ +
+
+
+ Cool Widget +
+
+ 659321 + + $10.23 + +
+
+
+
+
+ $ +
+ +
+ + +
+ +
+ +
+
+
+
+ +
+
+
+
+ +
+
+
$236.32
+
+
+
\ No newline at end of file diff --git a/static/css/app.css b/static/css/app.css index e255bff..320c743 100644 --- a/static/css/app.css +++ b/static/css/app.css @@ -47,4 +47,18 @@ body { .footer { margin-top: 10em; text-align: center; +} + +input[type="number"]::-webkit-outer-spin-button, +input[type="number"]::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} +input[type="number"] { + -moz-appearance: textfield; +} + +#pos-lines-box { + max-height: calc(100vh - 200px); + overflow-y: scroll; } \ No newline at end of file diff --git a/static/js/pos.js b/static/js/pos.js new file mode 100644 index 0000000..f1a1d2d --- /dev/null +++ b/static/js/pos.js @@ -0,0 +1,86 @@ +/* + * 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 addItem(name, code, price) { + if ($(".list-group-item[data-code='" + code + "']").length) { + updateQty($(".list-group-item[data-code='" + code + "']").find(".qty-plus"), 1); + return; + } + $("#pos-lines-box").append('
' + + '
' + + '
' + + name + + '
' + + '
' + + '' + code + '' + + '' + + '$' + + price + + '' + + '' + + '
' + + '
' + + '
' + + '
' + + '
' + + '$' + + '
' + + '' + + '
' + + '' + + '' + + '
' + + '' + + '
' + + '' + + '
' + + '
' + + '
' + + '
'); +} + +function recalculate() { + var total = 0.0; + $("#pos-lines-box .list-group-item").each(function () { + var each = $(".item-price", this).val() * 1.0; + var qty = $(".item-qty", this).val() * 1.0; + var line = each * qty; + $(".line-total", this).text(line.toFixed(2)); + $(".item-price", this).val(each.toFixed(2)); + total += line; + }); + $(".grand-total").text(total.toFixed(2)); +} + +function updateQty(btn, diff) { + var qtybox = $(btn).parent().parent().find(".item-qty"); + var qty = parseInt(qtybox.val()); + qty += diff; + if (qty > 0) { + qtybox.val(qty); + var minbtn = $(btn).parent().parent().find(".qty-minus"); + if (qty == 1) { + minbtn.html(""); + } else { + minbtn.html(""); + } + } else { + qtybox.closest(".list-group-item").remove(); + } + recalculate(); +} + +$("#pos-lines-box").on("click", ".qty-minus", function () { + updateQty(this, -1); +}); + +$("#pos-lines-box").on("click", ".qty-plus", function () { + updateQty(this, 1); +}); + +$("#pos-lines-box").on("change", ".item-qty,.item-price", function () { + recalculate(); +}); \ No newline at end of file