soft credit multi-line export
authorDeepak Srivastava <deepak.srivastava.0303@gmail.com>
Tue, 4 Mar 2014 08:15:05 +0000 (13:45 +0530)
committerDeepak Srivastava <deepak.srivastava.0303@gmail.com>
Tue, 4 Mar 2014 08:15:05 +0000 (13:45 +0530)
CRM/Contribute/BAO/Query.php
CRM/Contribute/Selector/Search.php
CRM/Export/BAO/Export.php

index ca06a84f0fa4dedee98f8781bb4d570203332247..84d9558e2957db3e75e68df79c71297763f02c00 100644 (file)
@@ -194,7 +194,7 @@ class CRM_Contribute_BAO_Query {
   static function where(&$query) {
     $grouping = NULL;
 
-    self::isIncludeSoftCredits($query->_params);
+    self::initializeAnySoftCreditClause($query);
     foreach (array_keys($query->_params) as $id) {
       if (empty($query->_params[$id][0])) {
         continue;
@@ -767,13 +767,32 @@ class CRM_Contribute_BAO_Query {
     return $from;
   }
 
-  static function isIncludeSoftCredits($queryParams = array()) {
-    foreach (array_keys($queryParams) as $id) {
-      if (empty($queryParams[$id][0])) {
-        continue;
+  static function initializeAnySoftCreditClause(&$query) {
+    if (self::initializeAnySoftCreditsVars($query->_params)) {
+      if ($query->_mode & CRM_Contact_BAO_Query::MODE_CONTRIBUTE) {
+        unset($query->_distinctComponentClause, $query->_groupByComponentClause);
+        $query->_rowCountClause = " count(civicrm_contribution.id)";
       }
-      if ($queryParams[$id][0] == 'contribution_or_softcredits' && 
-        in_array($queryParams[$id][2], array("only_scredits", "both_related", "both"))) {
+    }
+  }
+
+  static function initializeAnySoftCreditsVars($queryParams = array()) {
+    static $tempTableFilled = FALSE;
+    if (!empty($queryParams)) {
+      foreach (array_keys($queryParams) as $id) {
+        if (empty($queryParams[$id][0])) {
+          continue;
+        }
+        if ($queryParams[$id][0] == 'contribution_or_softcredits' && 
+          in_array($queryParams[$id][2], array("only_scredits", "both_related", "both"))) {
+            self::$_contribOrSoftCredit = $queryParams[$id][2];
+          }
+      }
+    }
+    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 
                SELECT con.id as id, con.contact_id, cso.id as filter_id, NULL as scredit_id 
@@ -783,14 +802,14 @@ class CRM_Contribute_BAO_Query {
                SELECT scredit.contribution_id as id, scredit.contact_id, scredit.id as filter_id, scredit.id as scredit_id 
                  FROM civicrm_contribution_soft as scredit";
           CRM_Core_DAO::executeQuery($tempQuery);
-          self::$_contribOrSoftCredit = $queryParams[$id][2];
-          return TRUE;
+          $tempTableFilled = TRUE;
         }
-    }
+        return TRUE;
+      }
     return FALSE;
   }
 
-  static function defaultReturnProperties($mode, $includeCustomFields = TRUE, $includeSoftCredits = FALSE) {
+  static function defaultReturnProperties($mode, $includeCustomFields = TRUE) {
     $properties = NULL;
     if ($mode & CRM_Contact_BAO_Query::MODE_CONTRIBUTE) {
       $properties = array(
@@ -831,7 +850,7 @@ class CRM_Contribute_BAO_Query {
         'contribution_batch' => 1,
         'contribution_campaign_id' => 1,
       );
-      if ($includeSoftCredits) {
+      if (self::initializeAnySoftCreditsVars()) {
         $properties = array_merge(
           $properties, array(
             'contribution_soft_credit_name'   => 1,
index 045c21d8dbcc57a58b9b4d7a7badd22116972c10..7e0d3fbbaa34a57dd58df64fe1956cd54faa2cc5 100644 (file)
@@ -187,13 +187,12 @@ class CRM_Contribute_Selector_Search extends CRM_Core_Selector_Base implements C
     // type of selector
     $this->_action = $action;
 
-    $this->_includeSoftCredits = CRM_Contribute_BAO_Query::isIncludeSoftCredits($this->_queryParams);
+    $this->_includeSoftCredits = CRM_Contribute_BAO_Query::initializeAnySoftCreditsVars($this->_queryParams);
     $this->_query = new CRM_Contact_BAO_Query(
       $this->_queryParams,
       CRM_Contribute_BAO_Query::defaultReturnProperties(
         CRM_Contact_BAO_Query::MODE_CONTRIBUTE,
-        FALSE,
-        $this->_includeSoftCredits
+        FALSE
       ),
       NULL, FALSE, FALSE,
       CRM_Contact_BAO_Query::MODE_CONTRIBUTE
index 246e090399cde3dc510b1a0de15249df977b4555..6a6120bbb613234d1cc950ca286411457e3db80c 100644 (file)
@@ -562,7 +562,10 @@ INSERT INTO {$componentTable} SELECT distinct gc.contact_id FROM civicrm_group_c
 
     switch ($exportMode) {
       case CRM_Export_Form_Select::CONTRIBUTE_EXPORT:
-        $groupBy = 'GROUP BY civicrm_contribution.id';
+        if (!CRM_Contribute_BAO_Query::initializeAnySoftCreditsVars()) {
+          // apply group-by only when no soft credit columns are included
+          $groupBy = 'GROUP BY civicrm_contribution.id';
+        }
         break;
 
       case CRM_Export_Form_Select::EVENT_EXPORT: