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 @@
+
+
+
\ 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" => ""
+];
-