/** * Get grouped sales stats for the current range, grouped by user, device or location * @param $result * @param string $type * @return mixed */ public function getDeviceBreakdownStats($result, $type = 'device') { $stats = []; $salesMdl = new TransactionsModel(); $voidMdl = new SaleVoidsModel(); // check if params set, if not set defaults $stime = isset($this->data->stime) ? $this->data->stime : strtotime('-1 week') * 1000; $etime = isset($this->data->etime) ? $this->data->etime : time() * 1000; // setup default object $defaults = new stdClass(); $defaults->refs = ''; $defaults->refundrefs = ''; $defaults->voidtotal = 0; $defaults->voidnum = 0; $defaults->saletotal = 0; $defaults->salenum = 0; $defaults->refundtotal = 0; $defaults->refundnum = 0; // get non voided sales if (($sales = $salesMdl->getGroupedTotals($stime, $etime, 3, false, $type)) !== false) { foreach ($sales as $sale) { if ($sale['groupid'] == null) { $sale['name'] = "Admin Dash"; } if (!isset($stats[$sale['groupid']])) { $stats[$sale['groupid']] = clone $defaults; $stats[$sale['groupid']]->name = $sale['name']; } $stats[$sale['groupid']]->refs = $sale['refs']; $stats[$sale['groupid']]->salerefs = $sale['refs']; $stats[$sale['groupid']]->saletotal = $sale['stotal']; $stats[$sale['groupid']]->salenum = $sale['snum']; } } else { $result['error'] = "Error getting sales: " . $salesMdl->errorInfo; } // get voided sales if (($voids = $salesMdl->getGroupedTotals($stime, $etime, 3, true, $type)) !== false) { foreach ($voids as $void) { if ($void['groupid'] == null) { $sale['name'] = "Admin Dash"; } if (!isset($stats[$void['groupid']])) { $stats[$void['groupid']] = clone $defaults; $stats[$void['groupid']]->name = $void['name']; } $stats[$void['groupid']]->refs .= ($stats[$void['groupid']]->refs == '' ? '' : ',') . $void['refs']; $stats[$void['groupid']]->voidrefs = $void['refs']; $stats[$void['groupid']]->voidtotal = $void['stotal']; $stats[$void['groupid']]->voidnum = $void['snum']; } } else { $result['error'] = "Error getting voided sales: " . $salesMdl->errorInfo; } // get refunds if (($refunds = $voidMdl->getGroupedTotals($stime, $etime, false, $type)) !== false) { foreach ($refunds as $refund) { if ($refund['groupid'] == null) { $sale['name'] = "Admin Dash"; } if (!isset($stats[$refund['groupid']])) { $stats[$refund['groupid']] = clone $defaults; $stats[$refund['groupid']]->name = $refund['name']; } $stats[$refund['groupid']]->refs .= ($stats[$refund['groupid']]->refs == '' ? '' : ',') . $refund['refs']; $stats[$refund['groupid']]->refundrefs = $refund['refs']; $stats[$refund['groupid']]->refundtotal = $refund['stotal']; $stats[$refund['groupid']]->refundnum = $refund['snum']; } } else { $result['error'] = "Error getting refunds: " . $voidMdl->errorInfo; } // calc total takings for each device/location foreach ($stats as $key => $stat) { $stats[$key]->balance = number_format($stat->saletotal - $stat->refundtotal, 2, '.', ''); } // include totals if requested if ($this->data->totals == true) { $result = $this->getOverviewStats($result); $stats["Totals"] = $result['data']; } $result['data'] = $stats; return $result; }