protected function makeData()
 {
     $data = array();
     $this->headerData = array();
     foreach ($this->dataForExport as $reportResultsRowData) {
         $line = array();
         $header = array();
         $temporaryHeader = array();
         //This is used because when resolving header for last columns we got strange results
         $key = $this->dataProvider->getXAxisGroupByDataValuesCount();
         $column = array();
         $extraLeadingHeaderColumns = 0;
         foreach ($this->dataProvider->getDisplayAttributesThatAreYAxisGroupBys() as $displayAttribute) {
             $header[] = $displayAttribute->label;
             $className = $this->resolveExportClassNameForReportToExportValueAdapter($displayAttribute);
             $attributeName = MatrixReportDataProvider::resolveHeaderColumnAliasName($displayAttribute->columnAliasName);
             $params = array();
             $line[] = $displayAttribute->resolveValueAsLabelForHeaderCell($reportResultsRowData->{$attributeName}, true);
         }
         $leadingHeaders = $this->dataProvider->makeAxisCrossingColumnCountAndLeadingHeaderRowsData(true);
         $rows = count($leadingHeaders['rows']);
         $matrixColumnCount = $leadingHeaders['rows'][$rows - 1]['colSpan'];
         //This is the true columns count, the other are repeated for each grouping
         $attributeKey = 0;
         for ($i = 0; $i < $this->dataProvider->getXAxisGroupByDataValuesCount(); $i++) {
             foreach ($this->dataProvider->resolveDisplayAttributes() as $displayAttribute) {
                 if (!$displayAttribute->queryOnly) {
                     $column = MatrixReportDataProvider::resolveColumnAliasName($attributeKey);
                     $className = $this->resolveExportClassNameForReportToExportValueAdapter($displayAttribute);
                     $params = array('label' => $displayAttribute->label);
                     $adapter = new $className($reportResultsRowData, $column, $params);
                     $adapter->resolveData($line);
                     if ($attributeKey < $matrixColumnCount) {
                         $oldHeaderCount = count($temporaryHeader);
                         $adapter->resolveHeaderData($temporaryHeader);
                         $adapter->resolveHeaderData($header);
                         $extraLeadingHeaderColumns += count($temporaryHeader) - ($oldHeaderCount + 1);
                     } elseif ($attributeKey % $matrixColumnCount == 0) {
                         foreach ($temporaryHeader as $column) {
                             $header[] = $column;
                         }
                     }
                     $attributeKey++;
                 }
             }
         }
         $data[] = $line;
     }
     $leadingHeaderData = $this->getLeadingHeadersDataFromMatrixReportDataProvider($extraLeadingHeaderColumns);
     $this->data = array_merge($leadingHeaderData, array_merge(array($header), $data));
 }
 public function testCalculateTotalGroupingsCount()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $report = new Report();
     $report->setType(Report::TYPE_MATRIX);
     $report->setModuleClassName('ReportsTestModule');
     $report->setFiltersStructure('');
     $displayAttribute = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', Report::TYPE_MATRIX);
     $displayAttribute->attributeIndexOrDerivedType = 'integer__Maximum';
     $report->addDisplayAttribute($displayAttribute);
     $reportDataProvider = new MatrixReportDataProvider($report);
     $count = $reportDataProvider->calculateTotalGroupingsCount();
     $this->assertEquals(0, $count);
 }
 /**
  * @return array
  */
 protected function getCGridViewColumns()
 {
     $columns = array();
     $attributeKey = 0;
     $isFirstRow = true;
     foreach ($this->dataProvider->getDisplayAttributesThatAreYAxisGroupBys() as $displayAttribute) {
         $columnClassName = $this->resolveColumnClassNameForListViewColumnAdapter($displayAttribute);
         $attributeName = MatrixReportDataProvider::resolveHeaderColumnAliasName($displayAttribute->columnAliasName);
         $params = $this->resolveParamsForColumnElement($displayAttribute);
         $columnAdapter = new $columnClassName($attributeName, $this, $params);
         $column = $columnAdapter->renderGridViewData();
         $column['header'] = $displayAttribute->label;
         $column['class'] = 'YAxisHeaderColumn';
         if ($isFirstRow) {
             $column['footer'] = Zurmo::t('Core', 'Total');
             $column['footerHtmlOptions'] = array('colSpan' => $this->dataProvider->getYAxisGroupByDataValuesCount());
         }
         array_push($columns, $column);
         $isFirstRow = false;
     }
     $grandTotals = $this->dataProvider->runQueryAndGrandTotalsData();
     for ($i = 0; $i < $this->dataProvider->getXAxisGroupByDataValuesCount(); $i++) {
         $grandTotalsRow = $grandTotals[$i];
         foreach ($this->dataProvider->resolveDisplayAttributes() as $displayAttribute) {
             if (!$displayAttribute->queryOnly) {
                 $columnClassName = $this->resolveColumnClassNameForListViewColumnAdapter($displayAttribute);
                 $attributeName = MatrixReportDataProvider::resolveColumnAliasName($attributeKey);
                 $params = $this->resolveParamsForColumnElement($displayAttribute);
                 $columnAdapter = new $columnClassName($attributeName, $this, $params);
                 $column = $columnAdapter->renderGridViewData();
                 $column['header'] = $displayAttribute->label;
                 if (!isset($column['class'])) {
                     $column['class'] = 'DataColumn';
                 }
                 if (isset($grandTotalsRow[$displayAttribute->columnAliasName])) {
                     $column['footer'] = $columnAdapter->renderValue($grandTotalsRow[$displayAttribute->columnAliasName]);
                 }
                 array_push($columns, $column);
                 $attributeKey++;
             }
         }
     }
     $attributeKey = 0;
     foreach ($this->dataProvider->resolveDisplayAttributes() as $displayAttribute) {
         if (!$displayAttribute->queryOnly) {
             $columnClassName = $this->resolveColumnClassNameForListViewColumnAdapter($displayAttribute);
             $attributeName = MatrixReportDataProvider::resolveTotalColumnAliasName($displayAttribute->columnAliasName);
             $params = $this->resolveParamsForColumnElement($displayAttribute);
             $columnAdapter = new $columnClassName($attributeName, $this, $params);
             $column = $columnAdapter->renderGridViewData();
             $column['header'] = $displayAttribute->label;
             $column['htmlOptions'] = array('class' => 'total-column');
             $column['headerHtmlOptions'] = array('class' => 'total-column');
             if (!isset($column['class'])) {
                 $column['class'] = 'DataColumn';
             }
             array_push($columns, $column);
             $attributeKey++;
         }
     }
     return $columns;
 }
 /**
  * @return array
  */
 protected function getCGridViewColumns()
 {
     $columns = array();
     $attributeKey = 0;
     foreach ($this->dataProvider->getDisplayAttributesThatAreYAxisGroupBys() as $displayAttribute) {
         $columnClassName = $this->resolveColumnClassNameForListViewColumnAdapter($displayAttribute);
         $attributeName = MatrixReportDataProvider::resolveHeaderColumnAliasName($displayAttribute->columnAliasName);
         $params = $this->resolveParamsForColumnElement($displayAttribute);
         $columnAdapter = new $columnClassName($attributeName, $this, $params);
         $column = $columnAdapter->renderGridViewData();
         $column['header'] = $displayAttribute->label;
         $column['class'] = 'YAxisHeaderColumn';
         array_push($columns, $column);
     }
     for ($i = 0; $i < $this->dataProvider->getXAxisGroupByDataValuesCount(); $i++) {
         foreach ($this->dataProvider->resolveDisplayAttributes() as $displayAttribute) {
             if (!$displayAttribute->queryOnly) {
                 $columnClassName = $this->resolveColumnClassNameForListViewColumnAdapter($displayAttribute);
                 $attributeName = MatrixReportDataProvider::resolveColumnAliasName($attributeKey);
                 $params = $this->resolveParamsForColumnElement($displayAttribute);
                 $columnAdapter = new $columnClassName($attributeName, $this, $params);
                 $column = $columnAdapter->renderGridViewData();
                 $column['header'] = $displayAttribute->label;
                 if (!isset($column['class'])) {
                     $column['class'] = 'DataColumn';
                 }
                 array_push($columns, $column);
                 $attributeKey++;
             }
         }
     }
     return $columns;
 }