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); }