public static function resolveValue($attribute, ReportResultsRowData $data) { list($notUsed, $displayAttributeKey) = explode(ReportResultsRowData::ATTRIBUTE_NAME_PREFIX, $attribute); $displayAttributes = $data->getDisplayAttributes(); $metadata = CalculatedDerivedAttributeMetadata::getByNameAndModelClassName($displayAttributes[$displayAttributeKey]->getResolvedAttribute(), $displayAttributes[$displayAttributeKey]->getResolvedAttributeModelClassName()); return CalculatedNumberUtil::calculateByFormulaAndModelAndResolveFormat($metadata->getFormula(), $data->getModel($attribute)); }
protected static function resolveModuleClassName($attribute, ReportResultsRowData $data) { if (get_class($data->getModel($attribute)) == 'Contact' && LeadsUtil::isStateALead($data->getModel($attribute)->state)) { return 'LeadsModule'; } else { return $data->getModel($attribute)->getModuleClassName(); } }
public static function makeStringForLinkOrLinks($attribute, ReportResultsRowData $data, $shouldRenderMultipleLinks, $attributeString) { assert('is_string($attribute)'); if (null == ($model = $data->getModel($attribute))) { return null; } $modelClassName = get_class($data->getModel($attribute)); $moduleClassName = self::resolveModuleClassName($attribute, $data); if (!$shouldRenderMultipleLinks) { $url = static::makeUrl($model->id, $moduleClassName); return ZurmoHtml::link($attributeString, $url, array("target" => "new")); } return static::makeStringForMultipleLinks($attributeString, $modelClassName, $moduleClassName); }
/** * @depends testMakeStringForMultipleLinks */ public function testMakeStringForLinkOrLinks() { $accounts = Account::getByName('account1'); $account1 = $accounts[0]; $account2 = $accounts[1]; $displayAttribute = new DisplayAttributeForReportForm('AccountsModule', 'Account', Report::TYPE_ROWS_AND_COLUMNS); $displayAttribute->setModelAliasUsingTableAliasName('abc'); $displayAttribute->attributeIndexOrDerivedType = 'name'; $reportResultsRowData = new ReportResultsRowData(array($displayAttribute), 4); $reportResultsRowData->addModelAndAlias($account2, 'abc'); $result = ReportResultsGridUtil::makeStringForLinkOrLinks('attribute0', $reportResultsRowData, true, 'account1'); $this->assertContains('<span class="tooltip">2</span>', $result); $result = ReportResultsGridUtil::makeStringForLinkOrLinks('attribute0', $reportResultsRowData, false, 'account1'); $this->assertContains('a target="new"', $result); $this->assertContains('id=' . $account2->id, $result); $this->assertNotContains('tooltip', $result); }
/** * @param int $offset * @param int $limit * @return array */ protected function runQueryAndGetResolveResultsData($offset, $limit) { assert('is_int($offset) || $offset == null'); assert('is_int($limit) || $limit == null'); $selectQueryAdapter = $this->makeSelectQueryAdapter(); $sql = $this->makeSqlQueryForFetchingData($selectQueryAdapter, $offset, $limit); $rows = $this->getRowsData($sql); $resultsData = array(); $idByOffset = self::resolveIdByOffset($offset); foreach ($rows as $key => $row) { $reportResultsRowData = new ReportResultsRowData($this->resolveDisplayAttributes(), $idByOffset); foreach ($selectQueryAdapter->getIdTableAliasesAndModelClassNames() as $tableAlias => $modelClassName) { $idColumnName = $selectQueryAdapter->getIdColumNameByTableAlias($tableAlias); $id = (int) $row[$idColumnName]; if ($id != null) { $reportResultsRowData->addModelAndAlias($modelClassName::getById($id), $tableAlias); } unset($row[$idColumnName]); } foreach ($row as $columnName => $value) { $reportResultsRowData->addSelectedColumnNameAndValue($columnName, $value); } $resultsData[$key] = $reportResultsRowData; $idByOffset++; } return $resultsData; }
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); }
/** * Utilized for summation with drill down rows. For a given group, the grouped value needs to be used * as a filter for the drilled down row. This method will add that groupBy as a filter and update the * filterStructure accordingly. * @param array $getData */ public function resolveGroupBysAsFilters(array $getData) { $newStartingStructurePosition = count($this->filters) + 1; $structure = null; foreach ($this->getGroupBys() as $groupBy) { $index = ReportResultsRowData::resolveDataParamKeyForDrillDown($groupBy->attributeIndexOrDerivedType); if (isset($getData[$index])) { $value = $getData[$index]; } else { $value = null; } $filter = new FilterForReportForm($groupBy->getModuleClassName(), $groupBy->getModelClassName(), $this->type); $filter->attributeIndexOrDerivedType = $groupBy->attributeIndexOrDerivedType; self::resolveGroupByAsFilterValue($value, $filter); $this->addFilter($filter); if ($structure != null) { $structure .= ' AND '; } $structure .= $newStartingStructurePosition; $newStartingStructurePosition++; } $structure = '(' . $structure . ')'; if ($this->filtersStructure != null) { $this->filtersStructure = '(' . $this->filtersStructure . ')'; $this->filtersStructure .= ' AND '; } $this->filtersStructure .= $structure; }
/** * There was a bug with showing address->state on a contact rows and columns report. it was showing the * contact->state instead. this test passes after this bug was fixed */ public function testDisplayingAOwnedModelAttributeThatIsAlsoDefinedAsAnAttributeOnTheOwningModel() { $contactStates = ContactState::getByName('Qualified'); $contact = new Contact(); $contact->owner = Yii::app()->user->userModel; $contact->title->value = 'Mr.'; $contact->firstName = 'Super'; $contact->lastName = 'Man'; $contact->jobTitle = 'Superhero'; $contact->description = 'Some Description'; $contact->department = 'Red Tape'; $contact->officePhone = '1234567890'; $contact->mobilePhone = '0987654321'; $contact->officeFax = '1222222222'; $contact->state = $contactStates[0]; $contact->primaryAddress->state = 'IL'; $this->assertTrue($contact->save()); $displayAttribute = new DisplayAttributeForReportForm('ContactsModule', 'Contact', Report::TYPE_ROWS_AND_COLUMNS); $displayAttribute->setModelAliasUsingTableAliasName('abc'); $displayAttribute->attributeIndexOrDerivedType = 'primaryAddress___state'; $this->assertEquals('col0', $displayAttribute->columnAliasName); $reportResultsRowData = new ReportResultsRowData(array($displayAttribute), 4); $reportResultsRowData->addModelAndAlias($contact, 'abc'); $model = $reportResultsRowData->getModel('attribute0'); $this->assertEquals('IL', $model->primaryAddress->state); $this->assertEquals('IL', $reportResultsRowData->attribute0); }
/** * 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()); }
/** * @param $key * @return string */ public function resolveAttributeNameForGridViewColumn($key) { assert('is_int($key)'); $modelToReportAdapter = $this->makeResolvedAttributeModelRelationsAndAttributesToReportAdapter(); if ($modelToReportAdapter->isDisplayAttributeMadeViaSelect($this->getResolvedAttribute())) { return $this->columnAliasName; } return ReportResultsRowData::resolveAttributeNameByKey($key); }
public function testResolveValueOnBaseModelAndRelatedModel() { $reportModelTestItem11 = new ReportModelTestItem11(); $reportModelTestItem11->integer = 5; $currencies = Currency::getAll(); $currencyValue = new CurrencyValue(); $currencyValue->value = 100; $currencyValue->currency = $currencies[0]; $reportModelTestItem11->amount = $currencyValue; $reportModelTestItem11b = new ReportModelTestItem11(); $reportModelTestItem11b->integer = 7; $currencyValue = new CurrencyValue(); $currencyValue->value = 200; $currencyValue->currency = $currencies[0]; $reportModelTestItem11b->amount = $currencyValue; $reportModelTestItem10 = new ReportModelTestItem10(); $reportModelTestItem10->integer = 12; $currencyValue = new CurrencyValue(); $currencyValue->value = 400; $currencyValue->currency = $currencies[0]; $reportModelTestItem10->currencyValue = $currencyValue; $reportModelTestItem10->reportModelTestItem11->add($reportModelTestItem11); $reportModelTestItem10->reportModelTestItem11->add($reportModelTestItem11b); $saved = $reportModelTestItem10->save(); $this->assertTrue($saved); $displayAttributeX = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem10', Report::TYPE_ROWS_AND_COLUMNS); $displayAttributeX->setModelAliasUsingTableAliasName('abc'); $displayAttributeX->attributeIndexOrDerivedType = 'reportModelTestItem11___calculated2'; $this->assertEquals('col0', $displayAttributeX->columnAliasName); $displayAttributeY = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem10', Report::TYPE_ROWS_AND_COLUMNS); $displayAttributeY->setModelAliasUsingTableAliasName('def'); $displayAttributeY->attributeIndexOrDerivedType = 'calculated'; $this->assertEquals('col1', $displayAttributeY->columnAliasName); $reportResultsRowData = new ReportResultsRowData(array($displayAttributeX, $displayAttributeY), 4); $reportResultsRowData->addModelAndAlias($reportModelTestItem11b, 'abc'); $reportResultsRowData->addModelAndAlias($reportModelTestItem10, 'def'); //Get value for calculated which is on base model $value = CalculatedNumberForReportListViewColumnAdapter::resolveValue('attribute1', $reportResultsRowData); $this->assertEquals('$412.00', $value); //Get value for calculated2 which is on a relateds model $value = CalculatedNumberForReportListViewColumnAdapter::resolveValue('attribute0', $reportResultsRowData); $this->assertEquals('$207.00', $value); }
/** * @param ReportResultsRowData $reportResultsRowData * @param $totalCount */ protected function addDefaultColumnNamesAndValuesToReportResultsRowData(ReportResultsRowData $reportResultsRowData, $totalCount) { for ($i = 0; $i < $totalCount; $i++) { $columnAliasName = DisplayAttributeForReportForm::COLUMN_ALIAS_PREFIX . $i; $value = 0; $reportResultsRowData->addSelectedColumnNameAndValue($columnAliasName, $value); } }
public function testGetAttributeLabel() { $reportModelTestItemX = new ReportModelTestItem(); $reportModelTestItemX->string = 'someString'; $displayAttributeX = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', Report::TYPE_SUMMATION); $displayAttributeX->setModelAliasUsingTableAliasName('abc'); $displayAttributeX->attributeIndexOrDerivedType = 'string'; $displayAttributeY = new DisplayAttributeForReportForm('ReportsTestModule', 'ReportModelTestItem', Report::TYPE_SUMMATION); $displayAttributeY->attributeIndexOrDerivedType = 'integer__Maximum'; $reportResultsRowData = new ReportResultsRowData(array($displayAttributeX, $displayAttributeY), 4); $reportResultsRowData->addModelAndAlias($reportModelTestItemX, 'abc'); $reportResultsRowData->addSelectedColumnNameAndValue('col1', 55); //Test a viaModel attribute $this->assertEquals('String', $reportResultsRowData->getAttributeLabel('attribute0')); //Test a viaSelect attriubte $this->assertEquals('Integer -(Max)', $reportResultsRowData->getAttributeLabel('col1')); }