From c3eb46c43eaa7bc7cb01ba7076ddee905f26bcc7 Mon Sep 17 00:00:00 2001 From: Andrew Hunt Date: Tue, 21 Jul 2020 21:49:20 -0400 Subject: [PATCH] Member detail report: nest "in" options in parentheses --- CRM/Report/Form/Member/Detail.php | 3 ++- .../CRM/Report/Form/Member/DetailTest.php | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/CRM/Report/Form/Member/Detail.php b/CRM/Report/Form/Member/Detail.php index da7990ef0a..425695ac8a 100644 --- a/CRM/Report/Form/Member/Detail.php +++ b/CRM/Report/Form/Member/Detail.php @@ -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; diff --git a/tests/phpunit/CRM/Report/Form/Member/DetailTest.php b/tests/phpunit/CRM/Report/Form/Member/DetailTest.php index 92c851f9a8..9c7bedcc90 100644 --- a/tests/phpunit/CRM/Report/Form/Member/DetailTest.php +++ b/tests/phpunit/CRM/Report/Form/Member/DetailTest.php @@ -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); } -- 2.25.1