diff --git a/action.php b/action.php index 8f67de9..3ca4748 100644 --- a/action.php +++ b/action.php @@ -52,6 +52,7 @@ switch ($VARS['action']) { $totalcharge = 0.00; $totalpaid = 0.00; + $change = 0.0; foreach ($items as $i) { $totalcharge += $i['each'] * $i['qty']; if (!$binstack->has('items', ['itemid' => $i['id']])) { @@ -128,6 +129,17 @@ switch ($VARS['action']) { ]); } + if ($totalcharge < $totalpaid) { + $change = $totalpaid - $totalcharge; + $database->insert('payments', [ + 'amount' => $change * -1.0, + 'data' => '', + 'type' => 1, + 'txid' => $txid, + 'certid' => null + ]); + } + exit(json_encode(["status" => "OK", "txid" => $txid])); break; @@ -175,6 +187,9 @@ switch ($VARS['action']) { 'txid' => $txid ]); foreach ($payments as $p) { + if ($p['amount'] < 0) { + continue; + } $paymenthtml .= "\n"; $paymenthtml .= '
'; $paymenthtml .= '
' . lang($p['text'], false) . '
'; @@ -364,6 +379,72 @@ END; } returnToSender("customer_saved"); + case "set_register": + $regid = $VARS['register']; + if (!$database->has('registers', ['registerid' => $regid])) { + returnToSender("invalid_parameters"); + } + if (!$database->has('cash_drawer', ['AND' => ['registerid' => $regid, 'close' => null]])) { + returnToSender("cash_not_open"); + } + $cashid = $database->get('cash_drawer', 'cashid', ['AND' => ['registerid' => $regid, 'close' => null]]); + $_SESSION['register'] = (int) $regid; + returnToSender("register_set"); + break; + case "opencash": + $regid = $VARS['register']; + $start = $VARS['startamount']; + if (!$database->has('registers', ['registerid' => $regid])) { + returnToSender("invalid_parameters"); + } + if ($database->has('cash_drawer', ['AND' => ['registerid' => $regid, 'close' => null]])) { + returnToSender("cash_already_open"); + } + if (!is_numeric($start) || (float) $start < 0) { + $start = 0.0; + } + $database->insert('cash_drawer', [ + 'registerid' => $regid, + 'open' => date('Y-m-d H:i:s'), + 'close' => null, + 'start_amount' => $start, + 'end_amount' => null + ]); + returnToSender("cash_opened"); + break; + case "closecash": + $regid = $VARS['register']; + if (!$database->has('registers', ['registerid' => $regid])) { + returnToSender("invalid_parameters"); + } + if (!$database->has('cash_drawer', ['AND' => ['registerid' => $regid, 'close' => null]])) { + returnToSender("cash_not_open"); + } + + $cash = $database->get('cash_drawer', ['cashid', 'start_amount'], ['AND' => ['registerid' => $regid, 'close' => null]]); + + $balance = (float) $cash['start_amount']; + $rows = $database->select("payments", [ + "[>]transactions" => ['txid' => 'txid'] + ], 'amount', [ + 'AND' => [ + 'transactions.cashid' => $cash['cashid'], + 'payments.type' => 1 + ] + ]); + foreach ($rows as $row) { + $balance += $row; + } + + $database->update('cash_drawer', [ + 'close' => date('Y-m-d H:i:s'), + 'end_amount' => $balance + ], [ + 'cashid' => $cash['cashid'] + ]); + + returnToSender("cash_closed"); + break; case "session_keepalive": header("Content-Type: application/json"); exit(json_encode(["status" => "OK"])); diff --git a/database.mwb b/database.mwb index cbdacbd..0dad56f 100644 Binary files a/database.mwb and b/database.mwb differ diff --git a/lang/en_us.php b/lang/en_us.php index 969ce5a..f06e796 100644 --- a/lang/en_us.php +++ b/lang/en_us.php @@ -72,5 +72,21 @@ define("STRINGS", [ "delete" => "Delete", "cancel" => "Cancel", "price" => "Price", - "finish" => "Finish" + "finish" => "Finish", + "registers" => "Registers", + "add register" => "Add Register", + "balance" => "Balance", + "opened" => "Opened", + "closed" => "Closed", + "never" => "Never", + "last opened" => "Last Opened", + "still open" => "Still Open", + "open" => "Open", + "no cash" => "No cash", + "choose register" => "Choose a cash register", + "cash not open" => "Cash not open. Go to Registers to open it.", + "cash opened" => "Cash opened.", + "cash closed" => "Cash closed.", + "register set" => "Register set.", + "change register" => "Change register", ]); \ No newline at end of file diff --git a/lang/messages.php b/lang/messages.php index 7b55a46..cddac19 100644 --- a/lang/messages.php +++ b/lang/messages.php @@ -25,4 +25,20 @@ define("MESSAGES", [ "string" => "invalid customer id", "type" => "danger" ], + "cash_not_open" => [ + "string" => "cash not open", + "type" => "danger" + ], + "cash_already_open" => [ + "string" => "cash already open", + "type" => "danger" + ], + "register_set" => [ + "string" => "register set", + "type" => "success" + ], + "cash_opened" => [ + "string" => "cash opened", + "type" => "success" + ], ]); diff --git a/lib/chooseregister.php b/lib/chooseregister.php new file mode 100644 index 0000000..6767b7c --- /dev/null +++ b/lib/chooseregister.php @@ -0,0 +1,36 @@ + + +
+
+
+

+ +

+
+
+
+ select("registers", ['registers.registerid (id)', 'registername (name)']); + foreach ($registers as $r) { + ?> + + +
+
+ + + +
+
+
\ No newline at end of file diff --git a/pages.php b/pages.php index 1446141..1e3e95e 100644 --- a/pages.php +++ b/pages.php @@ -14,7 +14,7 @@ define("PAGES", [ "pos" => [ "title" => "point of sale", "navbar" => true, - "icon" => "far fa-money-bill-alt", + "icon" => "fas fa-store-alt", "styles" => [ "static/css/pos.css", ], @@ -55,6 +55,19 @@ define("PAGES", [ "static/js/editcustomer.js" ] ], + "registers" => [ + "title" => "registers", + "navbar" => true, + "icon" => "far fa-money-bill-alt", + "styles" => [ + "static/css/datatables.min.css", + "static/css/tables.css" + ], + "scripts" => [ + "static/js/datatables.min.js", + "static/js/registers.js" + ], + ], "404" => [ "title" => "404 error" ] diff --git a/pages/pos.php b/pages/pos.php index f845693..47a9632 100644 --- a/pages/pos.php +++ b/pages/pos.php @@ -4,130 +4,145 @@ * 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/. */ -?> - +$register = [ + "name" => lang("no cash", false), + "id" => "" +]; -