/** * @param SavedReport $savedReport * @param string $controllerId * @param string $moduleId * @param string $redirectUrl * @return ReportDetailsAndResultsView based object * @throws NotSupportedException if the report type is invalid or null */ public static function makeView(SavedReport $savedReport, $controllerId, $moduleId, $redirectUrl) { assert('is_string($controllerId)'); assert('is_string($moduleId)'); assert('is_string($redirectUrl)'); $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport); $params = array('controllerId' => $controllerId, 'relationModuleId' => $moduleId, 'relationModel' => $report, 'redirectUrl' => $redirectUrl); if ($report->getType() == Report::TYPE_ROWS_AND_COLUMNS) { $viewClassName = 'RowsAndColumnsReportDetailsAndResultsView'; } elseif ($report->getType() == Report::TYPE_SUMMATION) { $viewClassName = 'SummationReportDetailsAndResultsView'; } elseif ($report->getType() == Report::TYPE_MATRIX) { $viewClassName = 'MatrixReportDetailsAndResultsView'; } else { throw new NotSupportedException(); } return new $viewClassName($controllerId, $moduleId, $params, $report, $savedReport); }
public function actionDetails($id, $runReport = false) { $savedReport = SavedReport::getById((int) $id); ControllerSecurityUtil::resolveCanCurrentUserAccessModule($savedReport->moduleClassName); ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($savedReport, true); $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport); $portlet = Portlet::getById(intval($_GET['portletId'])); $portlet->params = array('controllerId' => 'default', 'relationModuleId' => $this->getModule()->getId(), 'relationModel' => $report, 'redirectUrl' => Yii::app()->request->getRequestUri(), 'dataProvider' => $this->getDataProvider($report, $report->getId(), (bool) $runReport)); $portletView = $portlet->getView(); if (!RightsUtil::canUserAccessModule($portletView::getModuleClassName(), Yii::app()->user->userModel)) { $messageView = new AccessFailureView(); $view = new AccessFailurePageView($messageView); echo $view->render(); Yii::app()->end(0, false); } $view = new AjaxPageView($portletView); echo $view->render(); }
public static function makeReportDataProviderAndResolveAttributeName($id, $pageSize, &$attributeName) { assert('is_int($pageSize)'); $savedReport = SavedReport::getById($id); $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport); foreach ($report->getDisplayAttributes() as $key => $displayAttribute) { if ($displayAttribute->getAttributeIndexOrDerivedType() == 'id') { $attributeName = ReportResultsRowData::resolveAttributeNameByKey($key); break; } } if ($attributeName == null) { $moduleClassName = $report->getModuleClassName(); $modelClassName = $moduleClassName::getPrimaryModelName(); $displayAttribute = new DisplayAttributeForReportForm($moduleClassName, $modelClassName, $report->getType()); $displayAttribute->attributeIndexOrDerivedType = 'id'; $report->addDisplayAttribute($displayAttribute); $attributeName = ReportResultsRowData::resolveAttributeNameByKey($key + 1); } return ReportDataProviderFactory::makeByReport($report, $pageSize); }
protected function resolveSavedReportAndReportByPostData(array $postData, &$savedReport, &$report, $type, $id = null, $isBeingCopied = false) { if ($id == null) { $this->resolveCanCurrentUserAccessReports(); $savedReport = new SavedReport(); $report = new Report(); $report->setType($type); } elseif ($isBeingCopied) { $savedReport = new SavedReport(); $oldReport = SavedReport::getById(intval($id)); ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($oldReport); SavedReportCopyModelUtil::copy($oldReport, $savedReport); $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport); } else { $savedReport = SavedReport::getById(intval($id)); ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($savedReport); $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport); } DataToReportUtil::resolveReportByWizardPostData($report, $postData, ReportToWizardFormAdapter::getFormClassNameByType($type)); }
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'); }
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'); }
/** * @depends testResolveReportToSavedReport */ public function testMakeReportBySavedReport() { $billy = User::getByUsername('billy'); $savedReports = SavedReport::getAll(); $this->assertEquals(1, count($savedReports)); $savedReport = $savedReports[0]; $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport); $filters = $report->getFilters(); $groupBys = $report->getGroupBys(); $orderBys = $report->getOrderBys(); $displayAttributes = $report->getDisplayAttributes(); $drillDownDisplayAttributes = $report->getDrillDownDisplayAttributes(); $this->assertEquals('ReportsTestModule', $report->getModuleClassName()); $this->assertEquals('myFirstReport', $report->getName()); $this->assertEquals('aDescription', $report->getDescription()); $this->assertEquals(Report::TYPE_ROWS_AND_COLUMNS, $report->getType()); $this->assertEquals('1 and 2 or 3', $report->getFiltersStructure()); $this->assertTrue($report->getOwner()->isSame($billy)); $this->assertCount(4, $filters); $this->assertCount(1, $groupBys); $this->assertCount(1, $orderBys); $this->assertCount(1, $displayAttributes); $this->assertCount(1, $drillDownDisplayAttributes); $this->assertEquals(true, $filters[0]->availableAtRunTime); $this->assertEquals('aValue', $filters[0]->value); $this->assertEquals('string', $filters[0]->attributeIndexOrDerivedType); $this->assertNull($filters[0]->currencyIdForValue); $this->assertNull($filters[0]->secondValue); $this->assertNull($filters[0]->stringifiedModelForValue); $this->assertNull($filters[0]->valueType); $this->assertEquals('equals', $filters[0]->operator); $this->assertEquals(true, $filters[1]->availableAtRunTime); $this->assertEquals('aValue', $filters[1]->value); $this->assertEquals('currencyValue', $filters[1]->attributeIndexOrDerivedType); $this->assertEquals(4, $filters[1]->currencyIdForValue); $this->assertEquals('bValue', $filters[1]->secondValue); $this->assertNull($filters[1]->stringifiedModelForValue); $this->assertNull($filters[1]->valueType); $this->assertEquals('between', $filters[1]->operator); $this->assertEquals(false, $filters[2]->availableAtRunTime); $this->assertEquals('aValue', $filters[2]->value); $this->assertEquals('owner__User', $filters[2]->attributeIndexOrDerivedType); $this->assertNull($filters[2]->currencyIdForValue); $this->assertNull($filters[2]->secondValue); $this->assertEquals('someName', $filters[2]->stringifiedModelForValue); $this->assertNull($filters[2]->valueType); $this->assertNull($filters[2]->operator); $this->assertEquals(true, $filters[3]->availableAtRunTime); $this->assertEquals('aValue', $filters[3]->value); $this->assertEquals('createdDateTime', $filters[3]->attributeIndexOrDerivedType); $this->assertNull($filters[3]->currencyIdForValue); $this->assertEquals('bValue', $filters[3]->secondValue); $this->assertNull($filters[3]->stringifiedModelForValue); $this->assertNull($filters[3]->operator); $this->assertEquals('Between', $filters[3]->valueType); $this->assertEquals('url', $orderBys[0]->attributeIndexOrDerivedType); $this->assertEquals('desc', $orderBys[0]->order); $this->assertEquals('lastName', $groupBys[0]->attributeIndexOrDerivedType); $this->assertEquals('y', $groupBys[0]->axis); $this->assertEquals('phone', $displayAttributes[0]->attributeIndexOrDerivedType); $this->assertEquals('someNewLabel', $displayAttributes[0]->label); $this->assertEquals('firstName', $drillDownDisplayAttributes[0]->attributeIndexOrDerivedType); $this->assertEquals('someNewLabel', $drillDownDisplayAttributes[0]->label); }
private function resolveSavedReportAndWarningData() { try { $savedReport = SavedReport::getById((int) $this->getSavedReportId()); if (!ControllerSecurityUtil::doesCurrentUserHavePermissionOnSecurableItem($savedReport, Permission::READ)) { $this->warningMessage = Zurmo::t('ReportsModule', 'You have tried to access a report you do not have access to'); } else { $report = SavedReportToReportAdapter::makeReportBySavedReport($savedReport); if ($report->getChart()->type == null) { $this->warningMessage = Zurmo::t('ReportsModule', 'This report does not have a chart to display'); } else { $this->savedReport = $savedReport; } } } catch (NotFoundException $e) { $this->warningMessage = Zurmo::t('ReportsModule', 'You have tried to access a report that is no longer available'); } catch (AccessDeniedSecurityException $e) { $this->warningMessage = Zurmo::t('ReportsModule', 'You have tried to access a report you do not have access to'); } $this->savedReportHasBeenResolved = true; }
public static function makeSimpleContactRowsAndColumnsReport() { $report = new Report(); $report->setDescription('A test contact report'); $report->setModuleClassName('ContactsModule'); $report->setName('A rows and columns report'); $report->setType(Report::TYPE_ROWS_AND_COLUMNS); $report->setOwner(Yii::app()->user->userModel); $report->setCurrencyConversionType(Report::CURRENCY_CONVERSION_TYPE_BASE); $report->setFiltersStructure(''); $displayAttribute = new DisplayAttributeForReportForm('ContactsModule', 'Contact', $report->getType()); $displayAttribute->attributeIndexOrDerivedType = 'lastName'; $report->addDisplayAttribute($displayAttribute); $savedReport = new SavedReport(); SavedReportToReportAdapter::resolveReportToSavedReport($report, $savedReport); $saved = $savedReport->save(); if (!$saved) { throw new FailedToSaveModelException(); } return $savedReport; }