Member detail report: nest "in" options in parentheses
authorAndrew Hunt <andrew@aghstrategies.com>
Wed, 22 Jul 2020 01:49:20 +0000 (21:49 -0400)
committerAndrew Hunt <andrew@aghstrategies.com>
Wed, 22 Jul 2020 01:49:20 +0000 (21:49 -0400)
CRM/Report/Form/Member/Detail.php
tests/phpunit/CRM/Report/Form/Member/DetailTest.php

index da7990ef0a98d5522975d204c002323590e89bd8..425695ac8ab2f7f10c78d7c6430d2b780182f479 100644 (file)
@@ -335,7 +335,8 @@ HERESQL;
             if (!empty($regularOptions)) {
               $clauseParts[] = "{$this->_aliases['civicrm_contribution_recur']}.contribution_status_id IN ($regularOptions)";
             }
-            return '(' . implode(') OR (', $clauseParts) . ')';
+            // Double parentheses b/c ORs should be treated as a group
+            return '((' . implode(') OR (', $clauseParts) . '))';
           }
           return;
 
index 92c851f9a81c753d7a78b08b887bc752867daab1..9c7bedcc9058680a41ee7ca1f72657931d6de136 100644 (file)
@@ -29,6 +29,7 @@ class CRM_Report_Form_Member_DetailTest extends CiviReportTestCase {
 
     $indContactID1 = $this->individualCreate();
     $indContactID2 = $this->individualCreate();
+    $indContactID3 = $this->individualCreate();
     $recurStatus = array_search(
       'In Progress',
       CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name')
@@ -61,6 +62,9 @@ class CRM_Report_Form_Member_DetailTest extends CiviReportTestCase {
     $memParams['contact_id'] = $indContactID2;
     $memParams['contribution_recur_id'] = $recur2['id'];
     $mem2 = civicrm_api3('Membership', 'create', $memParams);
+    $memParams['contact_id'] = $indContactID3;
+    unset($memParams['contribution_recur_id']);
+    $mem3 = civicrm_api3('Membership', 'create', $memParams);
 
     $input = [
       'fields' => ['autorenew_status_id'],
@@ -83,16 +87,21 @@ class CRM_Report_Form_Member_DetailTest extends CiviReportTestCase {
       }
     }
 
+    $input['filters']['autorenew_status_id_value'] = "0,$recurStatus";
+    $obj = $this->getReportObject('CRM_Report_Form_Member_Detail', $input);
+    $results = $obj->getResultSet();
+    $this->assertCount(3, $results);
+
     $input['filters']['autorenew_status_id_op'] = 'nll';
     $obj = $this->getReportObject('CRM_Report_Form_Member_Detail', $input);
     $results = $obj->getResultSet();
-    $this->assertCount(0, $results);
+    $this->assertCount(1, $results);
 
     $input['filters']['autorenew_status_id_op'] = 'in';
     $input['filters']['autorenew_status_id_value'] = 0;
     $obj = $this->getReportObject('CRM_Report_Form_Member_Detail', $input);
     $results = $obj->getResultSet();
-    $this->assertCount(0, $results);
+    $this->assertCount(1, $results);
 
     $input['filters']['autorenew_status_id_op'] = 'in';
     $input['filters']['autorenew_status_id_value'] = 1000;
@@ -104,6 +113,11 @@ class CRM_Report_Form_Member_DetailTest extends CiviReportTestCase {
     $input['filters']['autorenew_status_id_value'] = 1000;
     $obj = $this->getReportObject('CRM_Report_Form_Member_Detail', $input);
     $results = $obj->getResultSet();
+    $this->assertCount(3, $results);
+
+    $input['filters']['autorenew_status_id_value'] = '0,1000';
+    $obj = $this->getReportObject('CRM_Report_Form_Member_Detail', $input);
+    $results = $obj->getResultSet();
     $this->assertCount(2, $results);
   }