diff --git a/CRM/Report/Form/Contribute/Detail.php b/CRM/Report/Form/Contribute/Detail.php index 3619a474093..949fbc260cf 100644 --- a/CRM/Report/Form/Contribute/Detail.php +++ b/CRM/Report/Form/Contribute/Detail.php @@ -926,6 +926,9 @@ public function softCreditFrom() { {$this->_aclFrom} "; + if (!empty($this->_params['gid_op']) && $this->_params['gid_op'] == 'notin') { + $this->joinGroupTempTable('civicrm_contact', 'id', $this->_aliases['civicrm_contact']); + } $this->appendAdditionalFromJoins(); } diff --git a/CRM/Report/Form/Contribute/Repeat.php b/CRM/Report/Form/Contribute/Repeat.php index 6b87d4ebfdb..db0a680d946 100644 --- a/CRM/Report/Form/Contribute/Repeat.php +++ b/CRM/Report/Form/Contribute/Repeat.php @@ -400,6 +400,10 @@ public function from() { .{$this->contributionJoinTableColumn} LEFT JOIN $this->tempTableRepeat2 {$this->_aliases['civicrm_contribution']}2 ON {$this->groupByTableAlias}.$fromCol = {$this->_aliases['civicrm_contribution']}2.{$this->contributionJoinTableColumn}"; + + if (!empty($this->_params['gid_op']) && $this->_params['gid_op'] == 'notin') { + $this->joinGroupTempTable('civicrm_contact', 'id', $this->_aliases['civicrm_contact']); + } } /** @@ -825,6 +829,7 @@ public function statistics(&$rows) { public function postProcess() { $this->beginPostProcess(); + $this->buildGroupTempTable(); $this->select(); $this->from(); $this->where(); diff --git a/tests/phpunit/api/v3/ReportTemplateTest.php b/tests/phpunit/api/v3/ReportTemplateTest.php index 118a3e57f32..715b4111771 100644 --- a/tests/phpunit/api/v3/ReportTemplateTest.php +++ b/tests/phpunit/api/v3/ReportTemplateTest.php @@ -364,7 +364,7 @@ public function testLybuntReportWithFYData() { SELECT SQL_CALC_FOUND_ROWS contact_civireport.id as cid FROM civicrm_contact contact_civireport INNER JOIN civicrm_contribution contribution_civireport USE index (received_date) ON contribution_civireport.contact_id = contact_civireport.id AND contribution_civireport.is_test = 0 AND contribution_civireport.receive_date BETWEEN \'20140701000000\' AND \'20150630235959\' - + LEFT JOIN civicrm_contribution cont_exclude ON cont_exclude.contact_id = contact_civireport.id AND cont_exclude.receive_date BETWEEN \'2015-7-1\' AND \'20160630235959\' WHERE cont_exclude.id IS NULL AND 1 AND ( contribution_civireport.contribution_status_id IN (1) ) GROUP BY contact_civireport.id', $rows['metadata']['sql'][0]); @@ -756,4 +756,23 @@ public function testDeferredRevenueReport() { } } + /** + * Test the group filter works on the various reports. + * + * @dataProvider getMembershipAndContributionReportTemplatesForGroupTests + * + * @param string $template + * Report template unique identifier. + */ + public function testReportsWithNoTInSmartGroupFilter($template) { + $groupID = $this->setUpPopulatedGroup(); + $rows = $this->callAPISuccess('report_template', 'getrows', array( + 'report_id' => $template, + 'gid_value' => array($groupID), + 'gid_op' => 'notin', + 'options' => array('metadata' => array('sql')), + )); + $this->assertNumberOfContactsInResult(2, $rows, $template); + } + }