From d4e2b9783fec8760a261a4709d0d6154ce05a166 Mon Sep 17 00:00:00 2001 From: Deepak Srivastava Date: Tue, 4 Mar 2014 16:50:50 +0530 Subject: [PATCH] soft credit statistics, hyperlink for soft-credit-for-name --- CRM/Contact/BAO/Query.php | 26 +++++++++++++++++++ CRM/Contribute/BAO/Query.php | 17 +++++++++--- CRM/Contribute/Selector/Search.php | 3 ++- CRM/Export/BAO/Export.php | 2 +- templates/CRM/Contribute/Form/Selector.tpl | 2 +- .../Contribute/Page/ContributionTotals.tpl | 7 +++++ 6 files changed, 50 insertions(+), 7 deletions(-) diff --git a/CRM/Contact/BAO/Query.php b/CRM/Contact/BAO/Query.php index ecc239171d..760ef92b79 100644 --- a/CRM/Contact/BAO/Query.php +++ b/CRM/Contact/BAO/Query.php @@ -4537,6 +4537,32 @@ SELECT COUNT( conts.total_amount ) as total_count, $summary['total']['amount'] = $summary['total']['avg'] = 0; } + // soft credit summary + if (CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled()) { + $softCreditWhere = "{$completedWhere} AND civicrm_contribution_soft.id IS NOT NULL"; + $query = " + $select FROM ( + SELECT civicrm_contribution_soft.amount as total_amount, civicrm_contribution_soft.currency $from $softCreditWhere + GROUP BY civicrm_contribution_soft.id + ) as conts + GROUP BY currency"; + $dao = CRM_Core_DAO::executeQuery($query); + $summary['soft_credit']['count'] = 0; + $summary['soft_credit']['amount'] = $summary['soft_credit']['avg'] = array(); + while ($dao->fetch()) { + $summary['soft_credit']['count'] += $dao->total_count; + $summary['soft_credit']['amount'][] = CRM_Utils_Money::format($dao->total_amount, $dao->currency); + $summary['soft_credit']['avg'][] = CRM_Utils_Money::format($dao->total_avg, $dao->currency); + } + if (!empty($summary['soft_credit']['amount'])) { + $summary['soft_credit']['amount'] = implode(', ', $summary['soft_credit']['amount']); + $summary['soft_credit']['avg'] = implode(', ', $summary['soft_credit']['avg']); + } + else { + $summary['soft_credit']['amount'] = $summary['soft_credit']['avg'] = 0; + } + } + // hack $select //@todo - this could be one query using the IF in mysql - eg // SELECT sum(total_completed), sum(count_completed), sum(count_cancelled), sum(total_cancelled) FROM ( diff --git a/CRM/Contribute/BAO/Query.php b/CRM/Contribute/BAO/Query.php index 84d9558e29..a434976830 100644 --- a/CRM/Contribute/BAO/Query.php +++ b/CRM/Contribute/BAO/Query.php @@ -145,11 +145,21 @@ class CRM_Contribute_BAO_Query { if (!empty($query->_returnProperties['contribution_soft_credit_name'])) { $query->_select['contribution_soft_credit_name'] = "civicrm_contact_d.display_name as contribution_soft_credit_name"; $query->_element['contribution_soft_credit_name'] = 1; + + // also include contact id. Will help build hyperlinks + $query->_select['contribution_soft_credit_contact_id'] = "civicrm_contact_d.id as contribution_soft_credit_contact_id"; + $query->_element['contribution_soft_credit_contact_id'] = 1; + $query->_tables['civicrm_contribution'] = 1; $query->_tables['civicrm_contribution_soft'] = 1; $query->_tables['civicrm_contribution_soft_contact'] = 1; } + if (!empty($query->_returnProperties['contribution_soft_credit_contact_id'])) { + $query->_tables['civicrm_contribution'] = 1; + $query->_tables['civicrm_contribution_soft'] = 1; + } + if (!empty($query->_returnProperties['contribution_soft_credit_amount'])) { $query->_select['contribution_soft_credit_amount'] = "civicrm_contribution_soft.amount as contribution_soft_credit_amount"; $query->_element['contribution_soft_credit_amount'] = 1; @@ -768,7 +778,7 @@ class CRM_Contribute_BAO_Query { } static function initializeAnySoftCreditClause(&$query) { - if (self::initializeAnySoftCreditsVars($query->_params)) { + if (self::isSoftCreditOptionEnabled($query->_params)) { if ($query->_mode & CRM_Contact_BAO_Query::MODE_CONTRIBUTE) { unset($query->_distinctComponentClause, $query->_groupByComponentClause); $query->_rowCountClause = " count(civicrm_contribution.id)"; @@ -776,7 +786,7 @@ class CRM_Contribute_BAO_Query { } } - static function initializeAnySoftCreditsVars($queryParams = array()) { + static function isSoftCreditOptionEnabled($queryParams = array()) { static $tempTableFilled = FALSE; if (!empty($queryParams)) { foreach (array_keys($queryParams) as $id) { @@ -791,7 +801,6 @@ class CRM_Contribute_BAO_Query { } if (in_array(self::$_contribOrSoftCredit, array("only_scredits", "both_related", "both"))) { - CRM_Core_Error::backtrace( 'backtrace', TRUE ); if (!$tempTableFilled) { $tempQuery = " CREATE TEMPORARY TABLE IF NOT EXISTS contribution_search_scredit_combined AS @@ -850,7 +859,7 @@ class CRM_Contribute_BAO_Query { 'contribution_batch' => 1, 'contribution_campaign_id' => 1, ); - if (self::initializeAnySoftCreditsVars()) { + if (self::isSoftCreditOptionEnabled()) { $properties = array_merge( $properties, array( 'contribution_soft_credit_name' => 1, diff --git a/CRM/Contribute/Selector/Search.php b/CRM/Contribute/Selector/Search.php index 7e0d3fbbaa..cb17eef2fe 100644 --- a/CRM/Contribute/Selector/Search.php +++ b/CRM/Contribute/Selector/Search.php @@ -84,6 +84,7 @@ class CRM_Contribute_Selector_Search extends CRM_Core_Selector_Base implements C 'currency', 'contribution_campaign_id', 'contribution_soft_credit_name', + 'contribution_soft_credit_contact_id', 'contribution_soft_credit_amount', 'contribution_soft_credit_type', ); @@ -187,7 +188,7 @@ class CRM_Contribute_Selector_Search extends CRM_Core_Selector_Base implements C // type of selector $this->_action = $action; - $this->_includeSoftCredits = CRM_Contribute_BAO_Query::initializeAnySoftCreditsVars($this->_queryParams); + $this->_includeSoftCredits = CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled($this->_queryParams); $this->_query = new CRM_Contact_BAO_Query( $this->_queryParams, CRM_Contribute_BAO_Query::defaultReturnProperties( diff --git a/CRM/Export/BAO/Export.php b/CRM/Export/BAO/Export.php index 6a6120bbb6..4c28c86941 100644 --- a/CRM/Export/BAO/Export.php +++ b/CRM/Export/BAO/Export.php @@ -562,7 +562,7 @@ INSERT INTO {$componentTable} SELECT distinct gc.contact_id FROM civicrm_group_c switch ($exportMode) { case CRM_Export_Form_Select::CONTRIBUTE_EXPORT: - if (!CRM_Contribute_BAO_Query::initializeAnySoftCreditsVars()) { + if (!CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled()) { // apply group-by only when no soft credit columns are included $groupBy = 'GROUP BY civicrm_contribution.id'; } diff --git a/templates/CRM/Contribute/Form/Selector.tpl b/templates/CRM/Contribute/Form/Selector.tpl index 21ac56abb3..7b341377d7 100644 --- a/templates/CRM/Contribute/Form/Selector.tpl +++ b/templates/CRM/Contribute/Form/Selector.tpl @@ -79,7 +79,7 @@ {$row.product_name} {if $softCreditColumns} - {$row.contribution_soft_credit_name} + {$row.contribution_soft_credit_name} {$row.contribution_soft_credit_amount|crmMoney:$row.currency} {$row.contribution_soft_credit_type} {/if} diff --git a/templates/CRM/Contribute/Page/ContributionTotals.tpl b/templates/CRM/Contribute/Page/ContributionTotals.tpl index 42647a871d..f5a7e39da1 100644 --- a/templates/CRM/Contribute/Page/ContributionTotals.tpl +++ b/templates/CRM/Contribute/Page/ContributionTotals.tpl @@ -49,6 +49,13 @@   {ts}Total Cancelled Amount{/ts} - {$contributionSummary.cancel.amount} {/if} + {if $contributionSummary.soft_credit.count} + + {ts}Total Soft Credit Amount{/ts} - {$contributionSummary.soft_credit.amount} +   {ts}# Completed Soft Credits{/ts} - {$contributionSummary.soft_credit.count} +   {ts}Avg Soft Credit Amount{/ts} - {$contributionSummary.soft_credit.avg} + + {/if} {/if} -- 2.25.1