/** * Test for viaSelect and viaModel together * @depends testExportSummationAttributes */ public function testViaSelectAndViaModelTogether() { $reportModelTestItem = new ReportModelTestItem(); $report = new Report(); //viaSelect attribute $displayAttribute1 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', Report::TYPE_SUMMATION); $displayAttribute1->attributeIndexOrDerivedType = 'integer__Minimum'; $displayAttribute1->madeViaSelectInsteadOfViaModel = true; $this->assertTrue($displayAttribute1->columnAliasName == 'col0'); //viaModel attribute $reportModelTestItem->boolean = true; $displayAttribute2 = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', Report::TYPE_ROWS_AND_COLUMNS); $displayAttribute2->setModelAliasUsingTableAliasName('model1'); $displayAttribute2->attributeIndexOrDerivedType = 'boolean'; $reportResultsRowData = new ReportResultsRowData(array($displayAttribute1, $displayAttribute2), 4); $reportResultsRowData->addSelectedColumnNameAndValue('col0', 9000); $reportResultsRowData->addModelAndAlias($reportModelTestItem, 'model1'); $adapter = new ReportToExportAdapter($reportResultsRowData, $report); $compareHeaderData = array('Integer -(Min)', 'Boolean'); $compareRowData = array(9000, true); $this->assertEquals($compareHeaderData, $adapter->getHeaderData()); $this->assertEquals($compareRowData, $adapter->getData()); }
public function actionExport($id, $stickySearchKey = null) { assert('$stickySearchKey == null || is_string($stickySearchKey)'); $savedReport = SavedReport::getById((int) $id); ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName); ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($savedReport); $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport); $dataProvider = $this->getDataProviderForExport($report, $report->getId(), false); $totalItems = intval($dataProvider->calculateTotalItemCount()); $data = array(); if ($totalItems > 0) { if ($totalItems <= ExportModule::$asynchronusThreshold) { // Output csv file directly to user browser if ($dataProvider) { $data1 = ExportUtil::getDataForExport($dataProvider); $headerData = array(); foreach ($data1 as $reportResultsRowData) { $reportToExportAdapter = new ReportToExportAdapter($reportResultsRowData, $report); if (count($headerData) == 0) { $headerData = $reportToExportAdapter->getHeaderData(); } $data[] = $reportToExportAdapter->getData(); } } // Output data if (count($data)) { $fileName = $this->getModule()->getName() . ".csv"; ExportItemToCsvFileUtil::export($data, $headerData, $fileName, true); } else { Yii::app()->user->setFlash('notification', Zurmo::t('ZurmoModule', 'There is no data to export.')); } } else { if ($dataProvider) { $serializedData = ExportUtil::getSerializedDataForExport($dataProvider); } // Create background job $exportItem = new ExportItem(); $exportItem->isCompleted = 0; $exportItem->exportFileType = 'csv'; $exportItem->exportFileName = $this->getModule()->getName(); $exportItem->modelClassName = 'SavedReport'; $exportItem->serializedData = $serializedData; $exportItem->save(); $exportItem->forget(); Yii::app()->user->setFlash('notification', Zurmo::t('ZurmoModule', 'A large amount of data has been requested for export. You will receive ' . 'a notification with the download link when the export is complete.')); } } else { Yii::app()->user->setFlash('notification', Zurmo::t('ZurmoModule', 'There is no data to export.')); } $this->redirect(array($this->getId() . '/index')); }