Skip to content

Commit

Permalink
Attempt to fix paging on contact summary
Browse files Browse the repository at this point in the history
  • Loading branch information
eileenmcnaughton committed Oct 19, 2019
1 parent bd66c91 commit 50f2c45
Showing 1 changed file with 31 additions and 73 deletions.
104 changes: 31 additions & 73 deletions CRM/Report/Form/Contribute/Summary.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,13 @@ class CRM_Report_Form_Contribute_Summary extends CRM_Report_Form {
*/
protected $groupFilterNotOptimised = FALSE;

/**
* Indicate that report is not fully FGB compliant.
*
* @var bool
*/
public $optimisedForOnlyFullGroupBy;

/**
* Class constructor.
*/
Expand Down Expand Up @@ -584,12 +591,9 @@ public function groupBy() {
$this->_groupBy = "GROUP BY " . implode(', ', $groupBy);
}
else {
$groupBy = "{$this->_aliases['civicrm_contact']}.id";
$this->_groupBy = "GROUP BY {$this->_aliases['civicrm_contact']}.id";
}
$this->_groupBy .= $this->_rollup;
// append select with ANY_VALUE() keyword
$this->_select = CRM_Contact_BAO_Query::appendAnyValueToSelect($this->_selectClauses, $groupBy);
}

/**
Expand Down Expand Up @@ -733,75 +737,6 @@ public function postProcess() {
parent::postProcess();
}

/**
* Build table rows for output.
*
* @param string $sql
* @param array $rows
*/
public function buildRows($sql, &$rows) {
CRM_Core_DAO::disableFullGroupByMode();
$dao = CRM_Core_DAO::executeQuery($sql);
CRM_Core_DAO::reenableFullGroupByMode();
$this->addToDeveloperTab($sql);
if (!is_array($rows)) {
$rows = array();
}

// use this method to modify $this->_columnHeaders
$this->modifyColumnHeaders();
$contriRows = array();
$unselectedSectionColumns = $this->unselectedSectionColumns();

//CRM-16338 if both soft-credit and contribution are enabled then process the contribution's
//total amount's average, count and sum separately and add it to the respective result list
$softCredit = (!empty($this->_params['fields']['soft_amount']) && !empty($this->_params['fields']['total_amount'])) ? TRUE : FALSE;
if ($softCredit) {
$this->from('contribution');
$this->customDataFrom();
$contriSQL = "{$this->_select} {$this->_from} {$this->_where} {$this->_groupBy} {$this->_having} {$this->_orderBy} {$this->_limit}";
$contriDAO = CRM_Core_DAO::executeQuery($contriSQL);
$this->addToDeveloperTab($contriSQL);
$contriFields = array(
'civicrm_contribution_total_amount_sum',
'civicrm_contribution_total_amount_avg',
'civicrm_contribution_total_amount_count',
);
$contriRows = array();
while ($contriDAO->fetch()) {
$contriRow = array();
foreach ($contriFields as $column) {
$contriRow[$column] = $contriDAO->$column;
}
$contriRows[] = $contriRow;
}
}

$count = 0;
while ($dao->fetch()) {
$row = array();
foreach ($this->_columnHeaders as $key => $value) {
if ($softCredit && array_key_exists($key, $contriRows[$count])) {
$row[$key] = $contriRows[$count][$key];
}
elseif (property_exists($dao, $key)) {
$row[$key] = $dao->$key;
}
}

// section headers not selected for display need to be added to row
foreach ($unselectedSectionColumns as $key => $values) {
if (property_exists($dao, $key)) {
$row[$key] = $dao->$key;
}
}

$count++;
$rows[] = $row;
}

}

/**
* Build chart.
*
Expand Down Expand Up @@ -868,7 +803,30 @@ public function alterDisplay(&$rows) {
$entryFound = FALSE;
$contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label');
$contributionPages = CRM_Contribute_PseudoConstant::contributionPage();

//CRM-16338 if both soft-credit and contribution are enabled then process the contribution's
//total amount's average, count and sum separately and add it to the respective result list
$softCredit = (!empty($this->_params['fields']['soft_amount']) && !empty($this->_params['fields']['total_amount'])) ? TRUE : FALSE;
if ($softCredit) {
$this->from('contribution');
$this->customDataFrom();
$contriSQL = "{$this->_select} {$this->_from} {$this->_where} {$this->_groupBy} {$this->_having} {$this->_orderBy} {$this->_limit}";
CRM_Core_DAO::disableFullGroupByMode();
$contriDAO = CRM_Core_DAO::executeQuery($contriSQL);
CRM_Core_DAO::reenableFullGroupByMode();
$this->addToDeveloperTab($contriSQL);
$contriFields = array(
'civicrm_contribution_total_amount_sum',
'civicrm_contribution_total_amount_avg',
'civicrm_contribution_total_amount_count',
);
$count = 0;
while ($contriDAO->fetch()) {
foreach ($contriFields as $column) {
$rows[$count][$column] = $contriDAO->$column;
}
$count++;
}
}
foreach ($rows as $rowNum => $row) {
// make count columns point to detail report
if (!empty($this->_params['group_bys']['receive_date']) &&
Expand Down

0 comments on commit 50f2c45

Please sign in to comment.