public static function makeSummationWithDrillDownReport()
 {
     $report = new Report();
     $report->setDescription('A test summation report with drill down description');
     $report->setModuleClassName('ReportsTestModule');
     $report->setName('A test summation report with drill down');
     $report->setType(Report::TYPE_SUMMATION);
     $report->setOwner(Yii::app()->user->userModel);
     $report->setFiltersStructure('1');
     $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE);
     $filter = new FilterForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $filter->attributeIndexOrDerivedType = 'string';
     $filter->value = '123';
     $filter->operator = OperatorRules::TYPE_EQUALS;
     $report->addFilter($filter);
     $groupBy = new GroupByForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'owner__User';
     $groupBy->axis = 'x';
     $report->addGroupBy($groupBy);
     $displayAttribute = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'owner__User';
     $report->addDisplayAttribute($displayAttribute);
     $displayAttribute = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'Count';
     $report->addDisplayAttribute($displayAttribute);
     $displayAttribute = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'currencyValue__Summation';
     $report->addDisplayAttribute($displayAttribute);
     $drillDownDisplayAttribute = new DrillDownDisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $drillDownDisplayAttribute->attributeIndexOrDerivedType = 'string';
     $report->addDrillDownDisplayAttribute($drillDownDisplayAttribute);
     $drillDownDisplayAttribute = new DrillDownDisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $drillDownDisplayAttribute->attributeIndexOrDerivedType = 'hasOne___name';
     $report->addDrillDownDisplayAttribute($drillDownDisplayAttribute);
     $drillDownDisplayAttribute = new DrillDownDisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $drillDownDisplayAttribute->attributeIndexOrDerivedType = 'currencyValue';
     $report->addDrillDownDisplayAttribute($drillDownDisplayAttribute);
     $drillDownDisplayAttribute = new DrillDownDisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $drillDownDisplayAttribute->attributeIndexOrDerivedType = 'date';
     $report->addDrillDownDisplayAttribute($drillDownDisplayAttribute);
     $chart = new ChartForReportForm();
     $chart->type = 'Pie2D';
     $chart->firstSeries = 'owner__User';
     $chart->firstRange = 'currencyValue__Summation';
     $report->setChart($chart);
     $savedReport = new SavedReport();
     SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
     $saved = $savedReport->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     return $savedReport;
 }
 public function testRunQueryAndGrandTotalsData()
 {
     ContactTestHelper::createContactByNameForOwner('testContact', $this->super);
     $report = new Report();
     $report->setType(Report::TYPE_SUMMATION);
     $report->setModuleClassName('ContactsModule');
     $report->setFiltersStructure('');
     $groupBy = new GroupByForReportForm('ContactsModule', 'Contact', Report::TYPE_SUMMATION);
     $groupBy->attributeIndexOrDerivedType = 'createdDateTime__Day';
     $report->addGroupBy($groupBy);
     $displayAttribute = new DisplayAttributeForReportForm('ContactsModule', 'Contact', Report::TYPE_SUMMATION);
     $displayAttribute->attributeIndexOrDerivedType = 'createdDateTime__Day';
     $report->addDisplayAttribute($displayAttribute);
     $dataProvider = new SummationReportDataProvider($report);
     $this->assertEmpty($dataProvider->runQueryAndGrandTotalsData());
 }
 public function testMakeAxisCrossingColumnCountAndLeadingHeaderRowsData()
 {
     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);
     $groupBy = new GroupByForReportForm('ReportsTestModule', 'ReportModelTestItem', Report::TYPE_MATRIX);
     $groupBy->attributeIndexOrDerivedType = 'float';
     $groupBy->axis = 'x';
     $report->addGroupBy($groupBy);
     $reportDataProvider = new MatrixReportDataProvider($report);
     $data = $reportDataProvider->makeAxisCrossingColumnCountAndLeadingHeaderRowsData();
     $compareData = array('rows' => array(), 'axisCrossingColumnCount' => 0, 'renderTotalColumn' => true);
     $this->assertEquals($compareData, $data);
 }
示例#4
0
 public function testCanCurrentUserProperlyRenderResults()
 {
     $billy = User::getByUsername('billy');
     $billy->setRight('AccountsModule', AccountsModule::RIGHT_ACCESS_ACCOUNTS);
     $billy->setRight('OpportunitiesModule', OpportunitiesModule::RIGHT_ACCESS_OPPORTUNITIES);
     $saved = $billy->save();
     $this->assertTrue($saved);
     $report = new Report();
     $report->setModuleClassName('ContactsModule');
     $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
     $this->assertTrue($report->canCurrentUserProperlyRenderResults());
     //Now set to Billy
     Yii::app()->user->userModel = $billy;
     //Billy can't see the contacts module.
     $this->assertFalse($report->canCurrentUserProperlyRenderResults());
     //Billy can see accounts
     $report->setModuleClassName('AccountsModule');
     $this->assertTrue($report->canCurrentUserProperlyRenderResults());
     //A filter on accounts is ok for Billy to see
     $filter = new FilterForReportForm('AccountsModule', 'Account', $report->getType());
     $filter->attributeIndexOrDerivedType = 'officePhone';
     $filter->value = 'aValue';
     $filter->operator = 'equals';
     $report->addFilter($filter);
     $this->assertTrue($report->canCurrentUserProperlyRenderResults());
     //A filter on contacts is not ok for Billy to see
     $filter2 = new FilterForReportForm('AccountsModule', 'Account', $report->getType());
     $filter2->attributeIndexOrDerivedType = 'contacts___lastName';
     $filter2->value = 'aValue';
     $filter2->operator = 'equals';
     $report->addFilter($filter2);
     $this->assertFalse($report->canCurrentUserProperlyRenderResults());
     //A related filter on opportunities would be ok for Billy to see
     $report->removeAllFilters();
     $filter = new FilterForReportForm('AccountsModule', 'Account', $report->getType());
     $filter->attributeIndexOrDerivedType = 'opportunities___name';
     $filter->value = 'aValue';
     $filter->operator = 'equals';
     $report->addFilter($filter);
     $this->assertTrue($report->canCurrentUserProperlyRenderResults());
     $report->removeAllFilters();
     //Billy can see a groupBy on Accounts
     $groupBy = new GroupByForReportForm('AccountsModule', 'Account', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'name';
     $groupBy->axis = 'y';
     $report->addGroupBy($groupBy);
     $this->assertTrue($report->canCurrentUserProperlyRenderResults());
     //Billy cannot see a related groupBy on Contacts
     $groupBy = new GroupByForReportForm('AccountsModule', 'Account', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'contacts___lastName';
     $groupBy->axis = 'y';
     $report->addGroupBy($groupBy);
     $this->assertFalse($report->canCurrentUserProperlyRenderResults());
     //Billy can see a related groupBy on Opportunities
     $report->removeAllGroupBys();
     $groupBy = new GroupByForReportForm('AccountsModule', 'Account', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'opportunities___name';
     $groupBy->axis = 'y';
     $report->addGroupBy($groupBy);
     $this->assertTrue($report->canCurrentUserProperlyRenderResults());
     $report->removeAllGroupBys();
     //Billy can see an orderBy on Accounts
     $orderBy = new OrderByForReportForm('AccountsModule', 'Account', $report->getType());
     $orderBy->attributeIndexOrDerivedType = 'name';
     $orderBy->order = 'desc';
     $report->addOrderBy($orderBy);
     $this->assertTrue($report->canCurrentUserProperlyRenderResults());
     //Billy cannot see a related orderBy on Contacts
     $orderBy = new OrderByForReportForm('AccountsModule', 'Account', $report->getType());
     $orderBy->attributeIndexOrDerivedType = 'contacts___lastName';
     $orderBy->order = 'desc';
     $report->addOrderBy($orderBy);
     $this->assertFalse($report->canCurrentUserProperlyRenderResults());
     //Billy can see a related orderBy on Opportunities
     $report->removeAllOrderBys();
     $orderBy = new OrderByForReportForm('AccountsModule', 'Account', $report->getType());
     $orderBy->attributeIndexOrDerivedType = 'opportunities___name';
     $orderBy->order = 'desc';
     $report->addOrderBy($orderBy);
     $this->assertTrue($report->canCurrentUserProperlyRenderResults());
     $report->removeAllOrderBys();
     //Billy can see a displayAttribute on Accounts
     $displayAttribute = new DisplayAttributeForReportForm('AccountsModule', 'Account', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'name';
     $displayAttribute->label = 'someNewLabel';
     $report->addDisplayAttribute($displayAttribute);
     $this->assertTrue($report->canCurrentUserProperlyRenderResults());
     //Billy cannot see a related displayAttribute on Contacts
     $displayAttribute = new DisplayAttributeForReportForm('AccountsModule', 'Account', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'contacts___firstName';
     $displayAttribute->label = 'someNewLabel';
     $report->addDisplayAttribute($displayAttribute);
     $this->assertFalse($report->canCurrentUserProperlyRenderResults());
     //Billy can see a related displayAttribute on Opportunities
     $report->removeAllDisplayAttributes();
     $displayAttribute = new DisplayAttributeForReportForm('AccountsModule', 'Account', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'opportunities___name';
     $displayAttribute->label = 'someNewLabel';
     $report->addDisplayAttribute($displayAttribute);
     $this->assertTrue($report->canCurrentUserProperlyRenderResults());
     $report->removeAllDisplayAttributes();
     //Billy can see a drillDownDisplayAttribute on Accounts
     $drillDownDisplayAttribute = new DrillDownDisplayAttributeForReportForm('AccountsModule', 'Account', $report->getType());
     $drillDownDisplayAttribute->attributeIndexOrDerivedType = 'name';
     $drillDownDisplayAttribute->label = 'someNewLabel';
     $report->addDrillDownDisplayAttribute($drillDownDisplayAttribute);
     $this->assertTrue($report->canCurrentUserProperlyRenderResults());
     //Billy cannot see a related drillDownDisplayAttribute on Contacts
     $drillDownDisplayAttribute = new DrillDownDisplayAttributeForReportForm('AccountsModule', 'Account', $report->getType());
     $drillDownDisplayAttribute->attributeIndexOrDerivedType = 'contacts___firstName';
     $drillDownDisplayAttribute->label = 'someNewLabel';
     $report->addDrillDownDisplayAttribute($drillDownDisplayAttribute);
     $this->assertFalse($report->canCurrentUserProperlyRenderResults());
     //Billy can see a related drillDownDisplayAttribute on Opportunities
     $report->removeAllDrillDownDisplayAttributes();
     $drillDownDisplayAttribute = new DrillDownDisplayAttributeForReportForm('AccountsModule', 'Account', $report->getType());
     $drillDownDisplayAttribute->attributeIndexOrDerivedType = 'opportunities___name';
     $drillDownDisplayAttribute->label = 'someNewLabel';
     $report->addDrillDownDisplayAttribute($drillDownDisplayAttribute);
     $this->assertTrue($report->canCurrentUserProperlyRenderResults());
 }
 /**
  * @param array $data
  * @param Report $report
  */
 protected static function resolveGroupBys($data, Report $report)
 {
     $report->removeAllGroupBys();
     $moduleClassName = $report->getModuleClassName();
     if (count($groupBysData = ArrayUtil::getArrayValue($data, ComponentForReportForm::TYPE_GROUP_BYS)) > 0) {
         foreach ($groupBysData as $key => $groupByData) {
             $groupBy = new GroupByForReportForm($moduleClassName, $moduleClassName::getPrimaryModelName(), $report->getType(), $key);
             $groupBy->setAttributes($groupByData);
             $report->addGroupBy($groupBy);
         }
     } else {
         $report->removeAllGroupBys();
     }
 }
 /**
  * @depends testExportByModelIds
  */
 public function testExportReportWithMultiplePagesOfData()
 {
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $numberOfUserNotifications = Notification::getCountByTypeAndUser('ExportProcessCompleted', Yii::app()->user->userModel);
     $report = new Report();
     $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
     $report->setModuleClassName('AccountsModule');
     $report->setFiltersStructure('');
     $displayAttribute = new DisplayAttributeForReportForm('AccountsModule', 'Account', Report::TYPE_ROWS_AND_COLUMNS);
     $displayAttribute->setModelAliasUsingTableAliasName('model1');
     $displayAttribute->attributeIndexOrDerivedType = 'name';
     $report->addDisplayAttribute($displayAttribute);
     $dataProvider = new RowsAndColumnsReportDataProvider($report);
     $exportItem = new ExportItem();
     $exportItem->isCompleted = 0;
     $exportItem->exportFileType = 'csv';
     $exportItem->exportFileName = 'rowAndColumnsTest2';
     $exportItem->modelClassName = 'SavedReport';
     $exportItem->serializedData = ExportUtil::getSerializedDataForExport($dataProvider);
     $this->assertTrue($exportItem->save());
     $id = $exportItem->id;
     $exportItem->forget();
     unset($exportItem);
     //Delete queued jobs from test exportItems created above
     Yii::app()->jobQueue->deleteAll();
     ExportModule::$asynchronousPageSize = 2;
     $job = new ExportJob();
     $this->assertEquals(0, count(Yii::app()->jobQueue->getAll()));
     $this->assertTrue($job->run());
     $this->assertEquals(0, count(Yii::app()->jobQueue->getAll()));
     $exportItem = ExportItem::getById($id);
     $fileModel = $exportItem->exportFileModel;
     $this->assertEquals(1, $exportItem->isCompleted);
     $this->assertEquals(0, $exportItem->processOffset);
     $this->assertEquals('csv', $exportItem->exportFileType);
     $this->assertEquals('rowAndColumnsTest2', $exportItem->exportFileName);
     $this->assertTrue($fileModel instanceof ExportFileModel);
     $accounts = Account::getAll();
     $headerData = array('Name');
     $data = array();
     foreach ($accounts as $account) {
         $data[] = array($account->name);
     }
     $output = ExportItemToCsvFileUtil::export($data, $headerData, 'rowAndColumnsTest2.csv', false);
     $this->assertEquals($output, $fileModel->fileContent->content);
     // Check if user got notification message, and if its type is ExportProcessCompleted
     $this->assertEquals($numberOfUserNotifications + 1, Notification::getCountByTypeAndUser('ExportProcessCompleted', Yii::app()->user->userModel));
     //Matrix report should not paginate
     $report = new Report();
     $report->setType(Report::TYPE_MATRIX);
     $report->setModuleClassName('AccountsModule');
     $report->setFiltersStructure('');
     $displayAttribute = new DisplayAttributeForReportForm('AccountsModule', 'Account', Report::TYPE_MATRIX);
     $displayAttribute->setModelAliasUsingTableAliasName('model1');
     $displayAttribute->attributeIndexOrDerivedType = 'Count';
     $report->addDisplayAttribute($displayAttribute);
     $groupBy = new GroupByForReportForm('AccountsModule', 'Account', Report::TYPE_MATRIX);
     $groupBy->attributeIndexOrDerivedType = 'name';
     $groupBy->axis = 'y';
     $report->addGroupBy($groupBy);
     $groupBy = new GroupByForReportForm('AccountsModule', 'Account', Report::TYPE_MATRIX);
     $groupBy->attributeIndexOrDerivedType = 'officePhone';
     $report->addGroupBy($groupBy);
     $dataProvider = new MatrixReportDataProvider($report);
     $exportItem = new ExportItem();
     $exportItem->isCompleted = 0;
     $exportItem->exportFileType = 'csv';
     $exportItem->exportFileName = 'matrixTest1';
     $exportItem->modelClassName = 'SavedReport';
     $exportItem->serializedData = ExportUtil::getSerializedDataForExport($dataProvider);
     $this->assertTrue($exportItem->save());
     $id = $exportItem->id;
     $exportItem->forget();
     unset($exportItem);
     //Delete queued jobs from test exportItems created above
     Yii::app()->jobQueue->deleteAll();
     ExportModule::$asynchronousPageSize = 2;
     $job = new ExportJob();
     $this->assertTrue($job->run());
     $exportItem = ExportItem::getById($id);
     $fileModel = $exportItem->exportFileModel;
     $this->assertEquals(1, $exportItem->isCompleted);
     $this->assertEquals(0, $exportItem->processOffset);
     $this->assertEquals('csv', $exportItem->exportFileType);
     $this->assertEquals('matrixTest1', $exportItem->exportFileName);
     $this->assertTrue($fileModel instanceof ExportFileModel);
     $fileContent = $fileModel->fileContent->content;
     $this->assertContains('Test Account', $fileContent);
     $this->assertContains('Test Account 2', $fileContent);
     $this->assertContains('Test Account 3', $fileContent);
     $this->assertContains('Test Account 4', $fileContent);
     // Check if user got notification message, and if its type is ExportProcessCompleted
     $this->assertEquals($numberOfUserNotifications + 2, Notification::getCountByTypeAndUser('ExportProcessCompleted', Yii::app()->user->userModel));
 }
 /**
  * @depends testNextedGroupBys
  */
 public function testWhereNestedGroupBysAndGettingDataForOrderBy()
 {
     $report = new Report();
     $report->setType(Report::TYPE_SUMMATION);
     $groupBy = new GroupByForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'hasOne___name';
     $groupBy->axis = 'x';
     $report->addGroupBy($groupBy);
     $report->setModuleClassName('ReportsTestModule');
     $adapter = new ReportRelationsAndAttributesToTreeAdapter($report, ComponentForReportForm::TYPE_ORDER_BYS);
     $data = $adapter->getData(ComponentForReportForm::TYPE_ORDER_BYS . '_hasOne');
     $this->assertEquals('OrderBys_hasOne___name', $data[0]['id']);
     $this->assertEquals('OrderBys_hasOne___createdByUser', $data[1]['id']);
     $this->assertEquals('OrderBys_hasOne___hasMany3', $data[2]['id']);
     $this->assertEquals('OrderBys_hasOne___modifiedByUser', $data[3]['id']);
     $this->assertEquals('OrderBys_hasOne___owner', $data[4]['id']);
 }
 public static function makeMeetingsCategoryAndMonthStartTimeByOwner()
 {
     $report = new Report();
     $report->setModuleClassName('MeetingsModule');
     $report->setName('Meettings Category And Month Start Time By Owner');
     $report->setType(Report::TYPE_MATRIX);
     $report->setOwner(Yii::app()->user->userModel);
     $report->setFiltersStructure('');
     $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE);
     $groupBy = new GroupByForReportForm('MeetingsModule', 'Meeting', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'startDateTime__Month';
     $groupBy->axis = 'x';
     $report->addGroupBy($groupBy);
     $groupBy = new GroupByForReportForm('MeetingsModule', 'Meeting', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'category';
     $groupBy->axis = 'x';
     $report->addGroupBy($groupBy);
     $groupBy = new GroupByForReportForm('MeetingsModule', 'Meeting', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'owner__User';
     $groupBy->axis = 'y';
     $report->addGroupBy($groupBy);
     $displayAttribute = new DisplayAttributeForReportForm('MeetingsModule', 'Meeting', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'Count';
     $report->addDisplayAttribute($displayAttribute);
     $savedReport = new SavedReport();
     SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
     //set explicit
     $saved = $savedReport->save();
     assert('$saved');
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($savedReport);
     $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME));
     $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($savedReport, $explicitReadWriteModelPermissions);
     assert('$success');
     $saved = $savedReport->save();
     assert('$saved');
 }
 /**
  * @depends testGetAvailableAttributesForMatrixGroupBys
  */
 public function testGetAvailableAttributesForMatrixDisplayAttributes()
 {
     //Without any group by displayed, nothing is available
     $model = new ReportModelTestItem();
     $rules = new ReportsTestReportRules();
     $report = new Report();
     $report->setType(Report::TYPE_MATRIX);
     $report->setModuleClassName('ReportsTestModule');
     $adapter = new ModelRelationsAndAttributesToMatrixReportAdapter($model, $rules, $report->getType());
     $attributes = $adapter->getAttributesForDisplayAttributes($report->getGroupBys());
     $this->assertEquals(0, count($attributes));
     //Select dropDown as the groupBy attribute
     $groupBy = new GroupByForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'dropDown';
     $report = new Report();
     $report->setType(Report::TYPE_MATRIX);
     $report->setModuleClassName('ReportsTestModule');
     $report->addGroupBy($groupBy);
     $adapter = new ModelRelationsAndAttributesToMatrixReportAdapter($model, $rules, $report->getType());
     $attributes = $adapter->getAttributesForDisplayAttributes($report->getGroupBys());
     $this->assertEquals(21, count($attributes));
     $compareData = array('label' => 'Count');
     $this->assertEquals($compareData, $attributes['Count']);
     $compareData = array('label' => 'Created Date Time -(Min)');
     $this->assertEquals($compareData, $attributes['createdDateTime__Minimum']);
     $compareData = array('label' => 'Created Date Time -(Max)');
     $this->assertEquals($compareData, $attributes['createdDateTime__Maximum']);
     $compareData = array('label' => 'Modified Date Time -(Min)');
     $this->assertEquals($compareData, $attributes['modifiedDateTime__Minimum']);
     $compareData = array('label' => 'Modified Date Time -(Max)');
     $this->assertEquals($compareData, $attributes['modifiedDateTime__Maximum']);
     $compareData = array('label' => 'Date -(Min)');
     $this->assertEquals($compareData, $attributes['date__Minimum']);
     $compareData = array('label' => 'Date -(Max)');
     $this->assertEquals($compareData, $attributes['date__Maximum']);
     $compareData = array('label' => 'Date Time -(Min)');
     $this->assertEquals($compareData, $attributes['dateTime__Minimum']);
     $compareData = array('label' => 'Date Time -(Max)');
     $this->assertEquals($compareData, $attributes['dateTime__Maximum']);
     $compareData = array('label' => 'Float -(Min)');
     $this->assertEquals($compareData, $attributes['float__Minimum']);
     $compareData = array('label' => 'Float -(Max)');
     $this->assertEquals($compareData, $attributes['float__Maximum']);
     $compareData = array('label' => 'Float -(Sum)');
     $this->assertEquals($compareData, $attributes['float__Summation']);
     $compareData = array('label' => 'Float -(Avg)');
     $this->assertEquals($compareData, $attributes['float__Average']);
     $compareData = array('label' => 'Integer -(Min)');
     $this->assertEquals($compareData, $attributes['integer__Minimum']);
     $compareData = array('label' => 'Integer -(Max)');
     $this->assertEquals($compareData, $attributes['integer__Maximum']);
     $compareData = array('label' => 'Integer -(Sum)');
     $this->assertEquals($compareData, $attributes['integer__Summation']);
     $compareData = array('label' => 'Integer -(Avg)');
     $this->assertEquals($compareData, $attributes['integer__Average']);
     $compareData = array('label' => 'Currency Value -(Min)');
     $this->assertEquals($compareData, $attributes['currencyValue__Minimum']);
     $compareData = array('label' => 'Currency Value -(Max)');
     $this->assertEquals($compareData, $attributes['currencyValue__Maximum']);
     $compareData = array('label' => 'Currency Value -(Sum)');
     $this->assertEquals($compareData, $attributes['currencyValue__Summation']);
     $compareData = array('label' => 'Currency Value -(Avg)');
     $this->assertEquals($compareData, $attributes['currencyValue__Average']);
 }
示例#10
0
 public static function makeOpportunitiesByStage()
 {
     $report = new Report();
     $report->setModuleClassName('OpportunitiesModule');
     $report->setName('Opportunities by Stage');
     $report->setType(Report::TYPE_SUMMATION);
     $report->setOwner(Yii::app()->user->userModel);
     $report->setFiltersStructure('');
     $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE);
     $groupBy = new GroupByForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'stage';
     $groupBy->axis = 'x';
     $report->addGroupBy($groupBy);
     $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'stage';
     $report->addDisplayAttribute($displayAttribute);
     $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'Count';
     $report->addDisplayAttribute($displayAttribute);
     $displayAttribute = new DisplayAttributeForReportForm('OpportunitiesModule', 'Opportunity', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'amount__Summation';
     $report->addDisplayAttribute($displayAttribute);
     $chart = new ChartForReportForm();
     $chart->type = 'Column2D';
     $chart->firstSeries = 'stage';
     $chart->firstRange = 'amount__Summation';
     $report->setChart($chart);
     $savedReport = new SavedReport();
     SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
     //set explicit
     $saved = $savedReport->save();
     assert('$saved');
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($savedReport);
     $explicitReadWriteModelPermissions->addReadWritePermitable(Group::getByName(Group::EVERYONE_GROUP_NAME));
     $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($savedReport, $explicitReadWriteModelPermissions);
     assert('$success');
     $saved = $savedReport->save();
     assert('$saved');
 }
 public function testResolveReportToSavedReport()
 {
     $billy = User::getByUsername('billy');
     $report = new Report();
     $report->setDescription('aDescription');
     $report->setModuleClassName('ReportsTestModule');
     $report->setName('myFirstReport');
     $report->setType(Report::TYPE_ROWS_AND_COLUMNS);
     $report->setOwner($billy);
     $report->setFiltersStructure('1 and 2 or 3');
     $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_SPOT);
     $report->setSpotConversionCurrencyCode('CAD');
     $filter = new FilterForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $filter->attributeIndexOrDerivedType = 'string';
     $filter->value = 'aValue';
     $filter->operator = 'equals';
     $filter->availableAtRunTime = true;
     $report->addFilter($filter);
     $filter = new FilterForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $filter->attributeIndexOrDerivedType = 'currencyValue';
     $filter->value = 'aValue';
     $filter->secondValue = 'bValue';
     $filter->operator = 'between';
     $filter->currencyIdForValue = '4';
     $filter->availableAtRunTime = true;
     $report->addFilter($filter);
     $filter = new FilterForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $filter->attributeIndexOrDerivedType = 'owner__User';
     $filter->value = 'aValue';
     $filter->stringifiedModelForValue = 'someName';
     $filter->availableAtRunTime = false;
     $report->addFilter($filter);
     $filter = new FilterForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $filter->attributeIndexOrDerivedType = 'createdDateTime';
     $filter->value = 'aValue';
     $filter->secondValue = 'bValue';
     $filter->operator = null;
     $filter->currencyIdForValue = null;
     $filter->availableAtRunTime = true;
     $filter->valueType = 'Between';
     $report->addFilter($filter);
     $groupBy = new GroupByForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'lastName';
     $groupBy->axis = 'y';
     $report->addGroupBy($groupBy);
     $orderBy = new OrderByForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $orderBy->attributeIndexOrDerivedType = 'url';
     $orderBy->order = 'desc';
     $report->addOrderBy($orderBy);
     $displayAttribute = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'phone';
     $displayAttribute->label = 'someNewLabel';
     $report->addDisplayAttribute($displayAttribute);
     $drillDownDisplayAttribute = new DrillDownDisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $drillDownDisplayAttribute->attributeIndexOrDerivedType = 'firstName';
     $drillDownDisplayAttribute->label = 'someNewLabel';
     $report->addDrillDownDisplayAttribute($drillDownDisplayAttribute);
     $savedReport = new SavedReport();
     $this->assertNull($savedReport->serializedData);
     SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport);
     $this->assertEquals('ReportsTestModule', $savedReport->moduleClassName);
     $this->assertEquals('myFirstReport', $savedReport->name);
     $this->assertEquals('aDescription', $savedReport->description);
     $this->assertEquals(Report::TYPE_ROWS_AND_COLUMNS, $savedReport->type);
     $this->assertEquals('1 and 2 or 3', $report->getFiltersStructure());
     $this->assertTrue($savedReport->owner->isSame($billy));
     $compareData = array('Filters' => array(array('availableAtRunTime' => true, 'currencyIdForValue' => null, 'value' => 'aValue', 'secondValue' => null, 'stringifiedModelForValue' => null, 'valueType' => null, 'attributeIndexOrDerivedType' => 'string', 'operator' => 'equals'), array('availableAtRunTime' => true, 'currencyIdForValue' => '4', 'value' => 'aValue', 'secondValue' => 'bValue', 'stringifiedModelForValue' => null, 'valueType' => null, 'attributeIndexOrDerivedType' => 'currencyValue', 'operator' => 'between'), array('availableAtRunTime' => false, 'currencyIdForValue' => null, 'value' => 'aValue', 'secondValue' => null, 'stringifiedModelForValue' => 'someName', 'valueType' => null, 'attributeIndexOrDerivedType' => 'owner__User', 'operator' => null), array('availableAtRunTime' => true, 'value' => 'aValue', 'secondValue' => 'bValue', 'stringifiedModelForValue' => null, 'valueType' => 'Between', 'attributeIndexOrDerivedType' => 'createdDateTime', 'operator' => null, 'currencyIdForValue' => null)), 'OrderBys' => array(array('order' => 'desc', 'attributeIndexOrDerivedType' => 'url')), 'GroupBys' => array(array('axis' => 'y', 'attributeIndexOrDerivedType' => 'lastName')), 'DisplayAttributes' => array(array('label' => 'someNewLabel', 'attributeIndexOrDerivedType' => 'phone', 'columnAliasName' => 'col0', 'queryOnly' => false, 'valueUsedAsDrillDownFilter' => false, 'madeViaSelectInsteadOfViaModel' => false)), 'DrillDownDisplayAttributes' => array(array('label' => 'someNewLabel', 'attributeIndexOrDerivedType' => 'firstName', 'columnAliasName' => 'col0', 'queryOnly' => false, 'valueUsedAsDrillDownFilter' => false, 'madeViaSelectInsteadOfViaModel' => false)));
     $unserializedData = unserialize($savedReport->serializedData);
     $this->assertEquals($compareData['Filters'], $unserializedData['Filters']);
     $this->assertEquals($compareData['OrderBys'], $unserializedData['OrderBys']);
     $this->assertEquals($compareData['GroupBys'], $unserializedData['GroupBys']);
     $this->assertEquals($compareData['DisplayAttributes'], $unserializedData['DisplayAttributes']);
     $this->assertEquals($compareData['DrillDownDisplayAttributes'], $unserializedData['DrillDownDisplayAttributes']);
     $this->assertEquals('1 and 2 or 3', $unserializedData['filtersStructure']);
     $this->assertEquals(Report::CURRENCY_CONVERSION_TYPE_SPOT, $unserializedData['currencyConversionType']);
     $this->assertEquals('CAD', $unserializedData['spotConversionCurrencyCode']);
     $saved = $savedReport->save();
     $this->assertTrue($saved);
 }
 public function testGetLeadingHeadersDataFromMatrixReportDataProviderWithALinkableAttribute()
 {
     $reportModelTestItem2 = new ReportModelTestItem2();
     $reportModelTestItem2->name = 'report name';
     $reportModelTestItem2->phone = '123456789';
     $this->assertTrue($reportModelTestItem2->save());
     $reportModelTestItem2 = new ReportModelTestItem2();
     $reportModelTestItem2->name = 'report name';
     $reportModelTestItem2->phone = '987654321';
     $this->assertTrue($reportModelTestItem2->save());
     $report = new Report();
     $report->setType(Report::TYPE_MATRIX);
     $report->setModuleClassName('ReportsTest2Module');
     $report->setFiltersStructure('');
     $displayAttribute = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_MATRIX);
     $displayAttribute->attributeIndexOrDerivedType = 'Count';
     $report->addDisplayAttribute($displayAttribute);
     $groupBy = new GroupByForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_MATRIX);
     $groupBy->attributeIndexOrDerivedType = 'phone';
     $report->addGroupBy($groupBy);
     $groupBy = new GroupByForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_MATRIX);
     $groupBy->attributeIndexOrDerivedType = 'name';
     $groupBy->axis = 'y';
     $report->addGroupBy($groupBy);
     $dataProvider = new MatrixReportDataProvider($report);
     $adapter = ReportToExportAdapterFactory::createReportToExportAdapter($report, $dataProvider);
     $compareRowData = array(array(null, '123456789', '987654321', 'Total'), array('Name', 'Count', 'Count', 'Count'), array('report name', 1, 1, 2), array('Total', 1, 1));
     $this->assertEmpty($adapter->getHeaderData());
     $this->assertEquals($compareRowData, $adapter->getData());
     $report = new Report();
     $report->setType(Report::TYPE_MATRIX);
     $report->setModuleClassName('ReportsTest2Module');
     $report->setFiltersStructure('');
     $displayAttribute = new DisplayAttributeForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_MATRIX);
     $displayAttribute->attributeIndexOrDerivedType = 'Count';
     $report->addDisplayAttribute($displayAttribute);
     $groupBy = new GroupByForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_MATRIX);
     $groupBy->attributeIndexOrDerivedType = 'name';
     $report->addGroupBy($groupBy);
     $groupBy = new GroupByForReportForm('ReportsTest2Module', 'ReportModelTestItem2', Report::TYPE_MATRIX);
     $groupBy->attributeIndexOrDerivedType = 'phone';
     $groupBy->axis = 'y';
     $report->addGroupBy($groupBy);
     $dataProvider = new MatrixReportDataProvider($report);
     $adapter = ReportToExportAdapterFactory::createReportToExportAdapter($report, $dataProvider);
     $compareRowData = array(array(null, 'report name', 'Total'), array('Phone', 'Count', 'Count'), array('123456789', 1, 1), array('987654321', 1, 1), array('Total', 2));
     $this->assertEmpty($adapter->getHeaderData());
     $this->assertEquals($compareRowData, $adapter->getData());
 }
 /**
  * @depends testGetAttributesForOrderBysOnUser
  */
 public function testGetAttributesForChartSeries()
 {
     $model = new ReportModelTestItem();
     $rules = new ReportsTestReportRules();
     $report = new Report();
     $report->setType(Report::TYPE_SUMMATION);
     $report->setModuleClassName('ReportsTestModule');
     $adapter = new ModelRelationsAndAttributesToSummationReportAdapter($model, $rules, $report->getType());
     $attributes = $adapter->getAttributesForChartSeries($report->getGroupBys());
     $this->assertEquals(0, count($attributes));
     //Add a group by, but not as a display attribute
     $groupBy = new GroupByForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'dropDown';
     $report->setModuleClassName('ReportsTestModule');
     $report->addGroupBy($groupBy);
     $attributes = $adapter->getAttributesForChartSeries($report->getGroupBys());
     $this->assertEquals(0, count($attributes));
     //Add a group by as a display attribute
     $groupBy = new GroupByForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'dropDown';
     $report->setModuleClassName('ReportsTestModule');
     $report->addGroupBy($groupBy);
     $displayAttribute = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'dropDown';
     $report->addDisplayAttribute($displayAttribute);
     $attributes = $adapter->getAttributesForChartSeries($report->getGroupBys(), $report->getDisplayAttributes());
     $this->assertEquals(1, count($attributes));
     $compareData = array('label' => 'Drop Down');
     $this->assertEquals($compareData, $attributes['dropDown']);
     //Add a second group by as a display attribute
     $groupBy = new GroupByForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'radioDropDown';
     $report->setModuleClassName('ReportsTestModule');
     $report->addGroupBy($groupBy);
     $displayAttribute = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'radioDropDown';
     $report->addDisplayAttribute($displayAttribute);
     $attributes = $adapter->getAttributesForChartSeries($report->getGroupBys(), $report->getDisplayAttributes());
     $this->assertEquals(2, count($attributes));
     $compareData = array('label' => 'Drop Down');
     $this->assertEquals($compareData, $attributes['dropDown']);
     $compareData = array('label' => 'Radio Drop Down');
     $this->assertEquals($compareData, $attributes['radioDropDown']);
     //Add a third group by that is likeContactState as a display attribute
     $groupBy = new GroupByForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'likeContactState';
     $report->setModuleClassName('ReportsTestModule');
     $report->addGroupBy($groupBy);
     $displayAttribute = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $displayAttribute->attributeIndexOrDerivedType = 'likeContactState';
     $report->addDisplayAttribute($displayAttribute);
     $attributes = $adapter->getAttributesForChartSeries($report->getGroupBys(), $report->getDisplayAttributes());
     $this->assertEquals(3, count($attributes));
     $compareData = array('label' => 'Drop Down');
     $this->assertEquals($compareData, $attributes['dropDown']);
     $compareData = array('label' => 'Radio Drop Down');
     $this->assertEquals($compareData, $attributes['radioDropDown']);
     $compareData = array('label' => 'A name for a state');
     $this->assertEquals($compareData, $attributes['likeContactState']);
 }