You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.4 KiB
PHP
136 lines
4.4 KiB
PHP
<?php
|
|
|
|
/* 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/. */
|
|
|
|
|
|
// Detect if loaded by the user or by PHP
|
|
if (count(get_included_files()) == 1) {
|
|
define("LOADED", true);
|
|
} else {
|
|
define("LOADED", false);
|
|
}
|
|
|
|
require_once __DIR__ . "/../required.php";
|
|
|
|
// Allow access with a download code, for mobile app and stuff
|
|
$date = date("Y-m-d H:i:s");
|
|
if (isset($VARS['code']) && LOADED) {
|
|
if (!$database->has('report_access_codes', ["AND" => ['code' => $VARS['code'], 'expires[>]' => $date]])) {
|
|
dieifnotloggedin();
|
|
}
|
|
} else {
|
|
dieifnotloggedin();
|
|
}
|
|
|
|
// Delete old DB entries
|
|
$database->delete('report_access_codes', ['expires[<=]' => $date]);
|
|
|
|
if (LOADED) {
|
|
if (isset($VARS['type']) && isset($VARS['format'])) {
|
|
generateReport($VARS['type'], $VARS['format'], $VARS['register'], $VARS['startdate'], $VARS['enddate']);
|
|
die();
|
|
} else {
|
|
$Strings->get("invalid parameters");
|
|
die();
|
|
}
|
|
}
|
|
|
|
function getCashFlowReport($register = null, $start = null, $end = null) {
|
|
global $database, $Strings;
|
|
$where = [];
|
|
|
|
if (!is_null($register) && $database->has('registers', ['registerid' => $register])) {
|
|
$where["registers.registerid"] = $register;
|
|
}
|
|
|
|
if ((bool) strtotime($start) == TRUE) {
|
|
$where["OR #open"] = [
|
|
"open[>=]" => date("Y-m-d", strtotime($start)),
|
|
"close[>=]" => date("Y-m-d", strtotime($start))
|
|
];
|
|
}
|
|
if ((bool) strtotime($end) == TRUE) {
|
|
// Make the date be the end of the day, not the start
|
|
$where["close[<=]"] = date("Y-m-d", strtotime($end)) . " 23:59:59";
|
|
}
|
|
|
|
if (count($where) > 1) {
|
|
$where = ["AND" => $where];
|
|
}
|
|
$cash = $database->select(
|
|
"cash_drawer", [
|
|
'[>]registers' => ['cash_drawer.registerid' => 'registerid'],
|
|
'[>]transactions' => ['cash_drawer.cashid' => 'cashid'],
|
|
'[>]payments' => ['transactions.txid' => 'txid'],
|
|
'[>]payment_types' => ['payments.type' => 'typeid']
|
|
], [
|
|
"cash_drawer.cashid",
|
|
"registers.registername",
|
|
"cash_drawer.registerid",
|
|
"open",
|
|
"close",
|
|
"payments.type",
|
|
"payments.amount",
|
|
"payment_types.typename"
|
|
], $where
|
|
);
|
|
|
|
$report = new Report($Strings->get("cashflow", false));
|
|
$report->setHeader([$Strings->get("register", false), $Strings->get("open", false), $Strings->get("close", false), $Strings->get("cash", false), $Strings->get("card", false), $Strings->get("check", false), $Strings->get("crypto", false), $Strings->get("gift card", false), $Strings->get("free", false)]);
|
|
|
|
$registers = [];
|
|
|
|
foreach ($cash as $c) {
|
|
$registers[$c['registerid']]['name'] = $c['registername'];
|
|
$registers[$c['registerid']]['id'] = $c['registerid'];
|
|
$registers[$c['registerid']]['open'] = date(DATETIME_FORMAT, strtotime($c['open']));
|
|
if (is_null($c['close'])) {
|
|
$registers[$c['registerid']]['close'] = date(DATETIME_FORMAT);
|
|
} else {
|
|
$registers[$c['registerid']]['close'] = date(DATETIME_FORMAT, strtotime($c['close']));
|
|
}
|
|
if (!isset($registers[$c['registerid']][$c['typename']])) {
|
|
$registers[$c['registerid']][$c['typename']] = 0.0;
|
|
}
|
|
$registers[$c['registerid']][$c['typename']] += $c['amount'];
|
|
}
|
|
|
|
foreach ($registers as $r) {
|
|
$types = $database->select('payment_types', 'typename');
|
|
foreach ($types as $t) {
|
|
if (!isset($r[$t])) {
|
|
$r[$t] = 0.0;
|
|
}
|
|
}
|
|
$report->addDataRow([
|
|
$r['name'],
|
|
$r['open'],
|
|
$r['close'],
|
|
$r['cash'] . "",
|
|
$r['card'] . "",
|
|
$r['check'] . "",
|
|
$r['crypto'] . "",
|
|
$r['giftcard'] . "",
|
|
$r['free'] . ""
|
|
]);
|
|
}
|
|
|
|
return $report;
|
|
}
|
|
|
|
function getReport(string $type, $register = null, $start = null, $end = null): Report {
|
|
switch ($type) {
|
|
case "cashflow":
|
|
return getCashFlowReport($register, $start, $end);
|
|
default:
|
|
return new Report("error", ["ERROR"], ["Invalid report type."]);
|
|
}
|
|
}
|
|
|
|
function generateReport($type, $format, $register = null, $start = null, $end = null) {
|
|
$report = getReport($type, $register, $start, $end);
|
|
$report->output($format);
|
|
}
|