soft credit statistics, hyperlink for soft-credit-for-name
authorDeepak Srivastava <deepak.srivastava.0303@gmail.com>
Tue, 4 Mar 2014 11:20:50 +0000 (16:50 +0530)
committerDeepak Srivastava <deepak.srivastava.0303@gmail.com>
Tue, 4 Mar 2014 11:20:50 +0000 (16:50 +0530)
CRM/Contact/BAO/Query.php
CRM/Contribute/BAO/Query.php
CRM/Contribute/Selector/Search.php
CRM/Export/BAO/Export.php
templates/CRM/Contribute/Form/Selector.tpl
templates/CRM/Contribute/Page/ContributionTotals.tpl

index ecc239171d740336383217b62761e101785e6ea2..760ef92b7962975187e4222a3396916c70796b46 100644 (file)
@@ -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(',&nbsp;', $summary['soft_credit']['amount']);
+        $summary['soft_credit']['avg'] = implode(',&nbsp;', $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 (
index 84d9558e2957db3e75e68df79c71297763f02c00..a434976830d5d2db6e8e9b544b9a5547bc597cdf 100644 (file)
@@ -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,
index 7e0d3fbbaa34a57dd58df64fe1956cd54faa2cc5..cb17eef2fe0bcd296b6f498109c4bbe0a6955127 100644 (file)
@@ -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(
index 6a6120bbb613234d1cc950ca286411457e3db80c..4c28c8694191adcd3f8a0530d44bf96ded812803 100644 (file)
@@ -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';
         }
index 21ac56abb338825637ae82c6885bd39d8df814e1..7b341377d7a4a78183ba4d335112f99fe05b699a 100644 (file)
@@ -79,7 +79,7 @@
     </td>
     <td class="crm-contribution-product_name">{$row.product_name}</td>
     {if $softCreditColumns}
-      <td class="crm-contribution-soft_credit_name">{$row.contribution_soft_credit_name}</td>
+    <td class="crm-contribution-soft_credit_name"><a href="{crmURL p='civicrm/contact/view' q="reset=1&cid=`$row.contribution_soft_credit_contact_id`"}">{$row.contribution_soft_credit_name}</a></td>
       <td class="right bold crm-contribution-soft_credit_amount"><span class="nowrap">{$row.contribution_soft_credit_amount|crmMoney:$row.currency}</span></td>
       <td class="crm-contribution-soft_credit_type">{$row.contribution_soft_credit_type}</td>
     {/if}
index 42647a871db2a603e6b705692c8b528ea6d448a4..f5a7e39da19745b3e76087f80c3c08f52691d418 100644 (file)
             <th class="disabled right contriTotalRight"> &nbsp; {ts}Total Cancelled Amount{/ts} - {$contributionSummary.cancel.amount}</th>
           {/if}
       </tr>  
+      {if $contributionSummary.soft_credit.count}
+      <tr>
+        <th class="contriTotalLeft right">{ts}Total Soft Credit Amount{/ts} - {$contributionSummary.soft_credit.amount}</th>
+        <th class="right"> &nbsp; {ts}# Completed Soft Credits{/ts} - {$contributionSummary.soft_credit.count}</th>
+        <th class="right contriTotalRight"> &nbsp; {ts}Avg Soft Credit Amount{/ts} - {$contributionSummary.soft_credit.avg}</th>
+      </tr>  
+      {/if}
     {/if}
     
     </table>