示例#1
0
 protected function compile()
 {
     $periodFactory = new PeriodFactory();
     $arrSession = \Session::getInstance()->get('iso_reports');
     $intConfig = (int) $arrSession[$this->name]['iso_config'];
     $strPeriod = (string) $arrSession[$this->name]['period'];
     $intStart = (int) $arrSession[$this->name]['start'];
     $intStop = (int) $arrSession[$this->name]['stop'];
     $intStatus = (int) $arrSession[$this->name]['iso_status'];
     $period = $periodFactory->create($strPeriod);
     $intStart = $period->getPeriodStart($intStart);
     $intStop = $period->getPeriodEnd($intStop);
     $dateFrom = $period->getKey($intStart);
     $dateTo = $period->getKey($intStop);
     $objData = \Database::getInstance()->query("\n            SELECT\n                c.id AS config_id,\n        \t\tc.currency,\n                o.locked AS date,\n        \t\tme.firstname AS member_firstname,\n        \t\tme.lastname AS member_lastname,\n        \t\tme.id AS member_number,\n                COUNT(DISTINCT o.id) AS total_orders,\n                COUNT(DISTINCT i.id) AS total_products,\n        \t\tSUM(i.quantity) AS total_items,\n                SUM(i.tax_free_price * i.quantity) AS total_sales,\n                " . $period->getSqlField('o.' . $this->strDateField) . " AS dateGroup\n            FROM " . ProductCollection::getTable() . " o\n            LEFT JOIN " . ProductCollectionItem::getTable() . " i ON o.id=i.pid\n            LEFT JOIN " . OrderStatus::getTable() . " os ON os.id=o.order_status\n            LEFT OUTER JOIN " . Config::getTable() . " c ON o.config_id=c.id\n        \tLEFT OUTER JOIN " . MemberModel::getTable() . " me ON o.member=me.id\n            WHERE o.type='order' AND o.order_status>0 AND o.locked!=''\n            " . ($intStatus > 0 ? " AND o.order_status=" . $intStatus : '') . "\n            " . $this->getProductProcedure('i', 'product_id') . "\n            " . ($intConfig > 0 ? " AND c.id=" . $intConfig : '') . "\n            " . $this->getConfigProcedure('c') . "\n            GROUP BY config_id, dateGroup, member_number\n            HAVING dateGroup>={$dateFrom} AND dateGroup<={$dateTo}\n        ");
     $arrCurrencies = array();
     $arrDataMember = $this->initializeData($period, $intStart, $intStop);
     $arrDataGuests = $this->initializeData($period, $intStart, $intStop);
     $arrChart = $this->initializeChart($period, $intStart, $intStop);
     while ($objData->next()) {
         $arrCurrencies[$objData->currency] = $objData->config_id;
         if ($objData->member_number > 0) {
             $arrDataMember = $this->fillData($arrDataMember, $objData);
             // Generate chart data
             $arrChart[$objData->currency . '_Members']['data'][$objData->dateGroup]['y'] = (double) $arrChart[$objData->currency . '_Members']['data'][$objData->dateGroup]['y'] + $objData->total_sales;
         } else {
             $arrDataGuests = $this->fillData($arrDataGuests, $objData);
             // Generate chart data
             $arrChart[$objData->currency . '_Guests']['data'][$objData->dateGroup]['y'] = (double) $arrChart[$objData->currency . '_Guests']['data'][$objData->dateGroup]['y'] + $objData->total_sales;
         }
     }
     // Apply formatting
     $arrDataMember = $this->formatValues($arrDataMember, $arrCurrencies);
     $arrDataGuests = $this->formatValues($arrDataGuests, $arrCurrencies);
     $this->Template->dataMember = $arrDataMember;
     $this->Template->dataGuests = $arrDataGuests;
     $this->Template->chart = $arrChart;
     $this->Template->periodFormat = $period->getJavascriptClosure();
 }