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