Skip to content
Snippets Groups Projects
Commit f7e14d1e authored by jaapjansma's avatar jaapjansma
Browse files

Fixed issue in In- and Exclude filter contact has contributions.

parent 81b49944
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,7 @@
* Fixed regression bug in contact search.
* Added aggregated contribution source
* Added date filter to data sources.
* Fixed issue in In- and Exclude filter contact has contributions.
# Version 1.66
......
......@@ -148,7 +148,6 @@ abstract class AbstractFieldInPeriodFilter extends AbstractFieldFilterHandler {
} else {
$sqlStatement .= "DATE('{$filter['date']['value']}')";
}
$sqlStatement .= ")";
return $sqlStatement;
}
......
......@@ -255,19 +255,26 @@ class ContactHasContributionInPeriod extends AbstractFieldInPeriodFilter {
$this->resetFilter();
$dataFlow = $this->dataSource->ensureField($this->inputFieldSpecification);
if ($dataFlow instanceof SqlDataFlow) {
$includeOp = 'IN';
$excludeOp = 'NOT IN';
if ($filterParams['op'] == 'NOT IN') {
$excludeOp = 'IN';
$includeOp = 'NOT IN';
}
$tableAlias = $this->getTableAlias($dataFlow);
$fieldName = $this->inputFieldSpecification->getName();
$fieldAlias = $this->inputFieldSpecification->alias;
$sqlStatement = "`$tableAlias`.`$fieldName` {$filterParams['op']} (
$baseSqlStatement = "
SELECT `contact_id`
FROM `civicrm_contribution` `c_$fieldAlias`
WHERE 1";
if (isset($filterParams['status_ids']) && is_array($filterParams['status_ids']) && count($filterParams['status_ids'])) {
$sqlStatement .= " AND `c_$fieldAlias`.`contribution_status_id` IN (" . implode(",", $filterParams['status_ids']) . ")";
$baseSqlStatement .= " AND `c_$fieldAlias`.`contribution_status_id` IN (" . implode(",", $filterParams['status_ids']) . ")";
}
if (isset($filterParams['financial_type_ids']) && is_array($filterParams['financial_type_ids']) && count($filterParams['financial_type_ids'])) {
$sqlStatement .= " AND `c_$fieldAlias`.`financial_type_id` IN (" . implode(",", $filterParams['financial_type_ids']) . ")";
$baseSqlStatement .= " AND `c_$fieldAlias`.`financial_type_id` IN (" . implode(",", $filterParams['financial_type_ids']) . ")";
}
$baseSqlStatement .= " AND " . $this->getDateSqlStatement('c_'.$fieldAlias, 'receive_date', $filterParams);
$includeCampaignIds = [];
$excludeCampaignIds = [];
if (isset($filterParams['campaign_ids']) && is_array($filterParams['campaign_ids']) && count($filterParams['campaign_ids'])) {
......@@ -279,17 +286,27 @@ class ContactHasContributionInPeriod extends AbstractFieldInPeriodFilter {
}
}
}
$campaignIdStatments = [];
$sqlStatement = "";
if (count($includeCampaignIds)) {
$campaignIdStatments[] = "`c_$fieldAlias`.`campaign_id` IN (" . implode(",", $includeCampaignIds) . ")";
$sqlStatement = "`$tableAlias`.`$fieldName` {$includeOp} (";
$sqlStatement .= $baseSqlStatement;
$sqlStatement .= " AND `c_$fieldAlias`.`campaign_id` IN (" . implode(",", $includeCampaignIds) . ")";
$sqlStatement .= ")";
}
if (count($excludeCampaignIds)) {
$campaignIdStatments[] = "`c_$fieldAlias`.`campaign_id` NOT IN (" . implode(",", $excludeCampaignIds) . ")";
if (strlen($sqlStatement)) {
$sqlStatement .= " AND ";
}
$sqlStatement .= "`$tableAlias`.`$fieldName` {$excludeOp} (";
$sqlStatement .= $baseSqlStatement;
$sqlStatement .= " AND `c_$fieldAlias`.`campaign_id` IN (" . implode(",", $excludeCampaignIds) . ")";
$sqlStatement .= ")";
}
if (count($campaignIdStatments)) {
$sqlStatement .= " AND (" . implode (" OR ", $campaignIdStatments) . ")";
if (!strlen($sqlStatement)) {
$sqlStatement = "`$tableAlias`.`$fieldName` {$includeOp} (";
$sqlStatement .= $baseSqlStatement;
}
$sqlStatement .= " AND " . $this->getDateSqlStatement('c_'.$fieldAlias, 'receive_date', $filterParams);
$this->whereClause = new SqlDataFlow\PureSqlStatementClause($sqlStatement, FALSE);
$this->filterCollection->addWhere($this->whereClause);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment