From 217b7befd2c7758f16aaed5df90cba00c808ff05 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Sat, 2 Jun 2018 19:21:21 -0600 Subject: [PATCH] Add Z report (issue #17) --- action.php | 21 ++++++++++++- lang/en_us.php | 1 + lib/generatereceipt.php | 70 +++++++++++++++++++++++++++++++++++++---- 3 files changed, 85 insertions(+), 7 deletions(-) diff --git a/action.php b/action.php index f99f738..64bca1d 100644 --- a/action.php +++ b/action.php @@ -433,10 +433,29 @@ switch ($VARS['action']) { exit(json_encode(["status" => "ERROR"])); } - $receipt = GenerateReceipt::getReceipt(GenerateReceipt::RECEIPT_TYPE_X, null, $VARS['register']); + $receipt = GenerateReceipt::getReceipt(GenerateReceipt::RECEIPT_TYPE_X, $VARS['register']); exit(GenerateReceipt::outputReceipt($receipt, $format, $width, "X Report")); break; + case "zreport": + require_once __DIR__ . "/lib/generatereceipt.php"; + $format = "html"; + $width = 64; + if (isset($VARS['width']) && preg_match("/[0-9]+/", $VARS['width']) && (int) $VARS['width'] > 0) { + $width = (int) $VARS['width']; + } + if (isset($VARS['format'])) { + $format = $VARS['format']; + } + if (!$database->has('cash_drawer', ['AND' => ['open[!]' => null, 'close[!]' => null, 'cashid' => $VARS['cash']]])) { + header("Content-Type: application/json"); + exit(json_encode(["status" => "ERROR"])); + } + + $receipt = GenerateReceipt::getReceipt(GenerateReceipt::RECEIPT_TYPE_Z, $VARS['cash']); + + exit(GenerateReceipt::outputReceipt($receipt, $format, $width, "Z Report")); + break; case "session_keepalive": header("Content-Type: application/json"); exit(json_encode(["status" => "OK"])); diff --git a/lang/en_us.php b/lang/en_us.php index e0ac814..633cf16 100644 --- a/lang/en_us.php +++ b/lang/en_us.php @@ -116,4 +116,5 @@ define("STRINGS", [ "manage register" => "Manage register", "manage" => "Manage", "x report" => "X Report", + "z report" => "Z Report", ]); diff --git a/lib/generatereceipt.php b/lib/generatereceipt.php index a4c0066..0d67570 100644 --- a/lib/generatereceipt.php +++ b/lib/generatereceipt.php @@ -12,7 +12,7 @@ class GenerateReceipt { const RECEIPT_TYPE_TRANSACTION = 1; const RECEIPT_TYPE_X = 2; - const RECEIPT_TYPE_Y = 3; + const RECEIPT_TYPE_Z = 3; static function transactionReceipt($transaction) { global $database; @@ -107,6 +107,7 @@ class GenerateReceipt { 'transactions.cashid' => $cash['cashid'], ] ]); + $transactioncount = $database->count('transactions', ['cashid' => $cash['cashid']]); foreach ($paymenttypes as $t) { $balance[$t['type']] = 0.0; } @@ -118,6 +119,7 @@ class GenerateReceipt { $receipt->appendLine(new ReceiptLine("Date:", "", date(DATETIME_FORMAT))); $receipt->appendLine(new ReceiptLine("Register:", "", $registername)); + $receipt->appendLine(new ReceiptLine("Transactions:", "", $transactioncount)); $receipt->appendBlank(); $receipt->appendBreak(); @@ -143,16 +145,72 @@ class GenerateReceipt { return $receipt; } - static function getReceipt($type, $transaction = null, $register = null, $cashid = null) { + static function zReceipt($cashid) { + global $database; + $receipt = new Receipt(); + + $cash = $database->get('cash_drawer', ['open', 'close', 'start_amount', 'end_amount', 'cashid', 'registerid'], ['cashid' => $cashid]); + $registername = $database->get('registers', 'registername', ['registerid' => $cash['registerid']]); + + $balance = []; + $paymenttypes = $database->select('payment_types', ['typename (type)', 'text']); + $payments = $database->select("payments", [ + "[>]transactions" => ['txid' => 'txid'], + "[>]payment_types" => ['type' => 'typeid'] + ], ['amount', 'typename (type)'], [ + 'AND' => [ + 'transactions.cashid' => $cash['cashid'], + ] + ]); + $transactioncount = $database->count('transactions', ['cashid' => $cashid]); + foreach ($paymenttypes as $t) { + $balance[$t['type']] = 0.0; + } + foreach ($payments as $p) { + $balance[$p['type']] += $p['amount']; + } + + $receipt->appendHeader(new ReceiptLine(lang("z report", false), "", "", ReceiptLine::LINEFORMAT_BOLD | ReceiptLine::LINEFORMAT_CENTER)); + + $receipt->appendLine(new ReceiptLine("Date:", "", date(DATETIME_FORMAT))); + $receipt->appendLine(new ReceiptLine("Register:", "", $registername)); + $receipt->appendLine(new ReceiptLine("Transactions:", "", $transactioncount)); + + $receipt->appendBlank(); + $receipt->appendBreak(); + $receipt->appendLine(new ReceiptLine("Opening", "", "", ReceiptLine::LINEFORMAT_CENTER)); + $receipt->appendBreak(); + $receipt->appendLine(new ReceiptLine("Date:", "", date(DATETIME_FORMAT, strtotime($cash['open'])))); + $receipt->appendLine(new ReceiptLine("Cash:", "", '$' . number_format($cash['start_amount'], 2))); + + $receipt->appendBlank(); + $receipt->appendBreak(); + $receipt->appendLine(new ReceiptLine("Closing", "", "", ReceiptLine::LINEFORMAT_CENTER)); + $receipt->appendBreak(); + $receipt->appendLine(new ReceiptLine("Date:", "", date(DATETIME_FORMAT, strtotime($cash['close'])))); + $receipt->appendLine(new ReceiptLine("Cash:", "", '$' . number_format($cash['end_amount'], 2))); + + $receipt->appendBlank(); + $receipt->appendBreak(); + $receipt->appendLine(new ReceiptLine("Sales", "", "", ReceiptLine::LINEFORMAT_CENTER)); + $receipt->appendBreak(); + foreach ($paymenttypes as $t) { + $receipt->appendLine(new ReceiptLine(lang($t['text'], false) . ":", "", '$' . number_format($balance[$t['type']], 2))); + } + + return $receipt; + } + + static function getReceipt($type, $data) { switch ($type) { case GenerateReceipt::RECEIPT_TYPE_X: - return GenerateReceipt::xReceipt($register); + return GenerateReceipt::xReceipt($data); break; - case GenerateReceipt::RECEIPT_TYPE_Y: - return GenerateReceipt::Receipt($register, $cashid); + case GenerateReceipt::RECEIPT_TYPE_Z: + return GenerateReceipt::zReceipt($data); break; case GenerateReceipt::RECEIPT_TYPE_TRANSACTION: - return GenerateReceipt::transactionReceipt($transaction); + return GenerateReceipt::transactionReceipt($data); break; default: return new Receipt();