Skip to content
Snippets Groups Projects
Commit 33477278 authored by Erik Hommel's avatar Erik Hommel
Browse files

fix #13 added SpecificAmount Condition

parent 26323c36
Branches
Tags
No related merge requests found
......@@ -3,14 +3,14 @@
return array (
0 =>
array (
'name' => 'Civirules:Condition.CountSpecificAmount',
'name' => 'Civirules:Condition.SpecificAmount',
'entity' => 'CiviRuleCondition',
'params' =>
array (
'version' => 3,
'name' => 'count_specific_amount',
'name' => 'specific_amount',
'label' => 'xth Contribution of Amount xxx',
'class_name' => 'CRM_CivirulesConditions_Contribution_CountSpecificAmount',
'class_name' => 'CRM_CivirulesConditions_Contribution_SpecificAmount',
'is_active' => 1
),
),
......
<?php
/**
* Class CRM_CivirulesConditions_Contribution_CountSpecificAmount
* Class CRM_CivirulesConditions_Contribution_SpecificAmount
*
* This CiviRule condition will check for the xth contribution of a certain amount and financial type
*
......@@ -9,7 +9,7 @@
* @link http://redmine.civicoop.org/projects/civirules/wiki/Tutorial_create_a_more_complicated_condition_with_its_own_form_processing
*/
class CRM_CivirulesConditions_Contribution_CountSpecificAmount extends CRM_Civirules_Condition {
class CRM_CivirulesConditions_Contribution_SpecificAmount extends CRM_Civirules_Condition {
private $conditionParams = array();
private $whereClauses = array();
......@@ -40,36 +40,33 @@ class CRM_CivirulesConditions_Contribution_CountSpecificAmount extends CRM_Civir
$isConditionValid = FALSE;
$this->buildWhereClauses($eventData->getEntityData('Contribution'));
CRM_Core_Error::debug('whereClauses', $this->whereClauses);
CRM_Core_Error::debug('whereParams', $this->whereParams);
exit();
if (!empty($whereClauses)) {
if (!empty($this->whereClauses)) {
$query = 'SELECT COUNT(*) as countContributions FROM civicrm_contribution WHERE '.implode(' AND ', $this->whereClauses);
$dao = CRM_Core_DAO::executeQuery($query, $this->whereParams);
if ($dao->fetch()) {
switch ($this->conditionParams['count_operator']) {
case 1:
if ($dao->countContributions != $this->conditionParams['no_of_contribution']) {
if ($dao->countContributions != $this->conditionParams['no_of_contributions']) {
$isConditionValid = TRUE;
}
break;
case 2:
if ($dao->countContributions > $this->conditionParams['no_of_contribution']) {
if ($dao->countContributions > $this->conditionParams['no_of_contributions']) {
$isConditionValid = TRUE;
}
break;
case 3:
if ($dao->countContributions >= $this->conditionParams['no_of_contribution']) {
if ($dao->countContributions >= $this->conditionParams['no_of_contributions']) {
$isConditionValid = TRUE;
}
break;
case 4:
if ($dao->countContributions < $this->conditionParams['no_of_contribution']) {
if ($dao->countContributions < $this->conditionParams['no_of_contributions']) {
$isConditionValid = TRUE;
}
break;
case 5:
if ($dao->countContributions <= $this->conditionParams['no_of_contribution']) {
if ($dao->countContributions <= $this->conditionParams['no_of_contributions']) {
$isConditionValid = TRUE;
}
break;
......@@ -90,7 +87,6 @@ class CRM_CivirulesConditions_Contribution_CountSpecificAmount extends CRM_Civir
* @access protected
*/
protected function buildWhereClauses($contribution) {
$this->whereClauses[] = 'contribution_status_id = %1';
$this->whereParams[1] = array(CRM_Civirules_Utils::getContributionStatusIdWithName('Completed'), 'Integer');
$this->whereClauses[] = 'is_test = %2';
......@@ -101,12 +97,12 @@ class CRM_CivirulesConditions_Contribution_CountSpecificAmount extends CRM_Civir
if (!empty($this->conditionParams['amount'])) {
$index++;
$this->whereClauses[] = 'total_amount '.$this->setOperator($this->conditionParams['amount_operator']).' %'.$index;
$this->whereParams[$index] = array($this->conditionParams['amount']);
$this->whereParams[$index] = array($this->conditionParams['amount'], 'Money');
}
if (!empty($this->conditionParams['financial_type'])) {
$index++;
$this->whereClauses[] = 'financial_type_id = %'.$index;
$this->whereParams[$index] = array($this->conditionParams['financial_type']);
$this->whereParams[$index] = array($this->conditionParams['financial_type'], 'Integer');
}
}
......@@ -151,7 +147,7 @@ class CRM_CivirulesConditions_Contribution_CountSpecificAmount extends CRM_Civir
* @abstract
*/
public function getExtraDataInputUrl($ruleConditionId) {
return CRM_Utils_System::url('civicrm/civirule/form/condition/contribution_countrecurring/', 'rule_condition_id='.$ruleConditionId);
return CRM_Utils_System::url('civicrm/civirule/form/condition/contribution_specificamount/', 'rule_condition_id='.$ruleConditionId);
}
/**
......@@ -163,27 +159,18 @@ class CRM_CivirulesConditions_Contribution_CountSpecificAmount extends CRM_Civir
*/
public function userFriendlyConditionParams() {
$operator = null;
switch ($this->conditionParams['operator']) {
case 1:
$operator = 'is not equal to';
break;
case 2:
$operator = 'more than';
break;
case 3:
$operator = 'more than or equal to';
break;
case 4:
$operator = 'less than';
break;
case 5:
$operator = 'less than or equal to';
break;
default:
$operator = 'is equal to';
break;
$countOperator = $this->setOperator($this->conditionParams['count_operator']);
$formattedString = 'Number of contributions '.$countOperator.' '.$this->conditionParams['no_of_contributions'];
if (!empty($this->conditionParams['financial_type'])) {
$financialType = new CRM_Financial_BAO_FinancialType();
$financialType->id = $this->conditionParams['financial_type'];
if ($financialType->find(true)) {
$formattedString .= ' of financial type ' . $financialType->name;
}
}
return 'Number of recurring contribution collections '.$operator.' '.$this->conditionParams['no_of_recurring'];
$amountOperator = $this->setOperator($this->conditionParams['amount_operator']);
$formattedString .= ' where amount '.$amountOperator.' '.CRM_Utils_Money::format($this->conditionParams['amount']);
return $formattedString;
}
/**
......
<?php
/**
* Class for CiviRules Condition Contribution Count Contributions from a Recurring
* Class for CiviRules Condition Contribution Count Number of Contributions with a Specific Amount
*
* @author Erik Hommel (CiviCooP) <erik.hommel@civicoop.org>
* @license AGPL-3.0
*/
class CRM_CivirulesConditions_Form_Contribution_CountSpecificAmount extends CRM_CivirulesConditions_Form_Form {
class CRM_CivirulesConditions_Form_Contribution_SpecificAmount extends CRM_CivirulesConditions_Form_Form {
/**
* Overridden parent method to build form
......
<h3>{$ruleConditionHeader}</h3>
<div class="crm-block crm-form-block crm-civirule-rule_condition-block-contribution_countspecificamount">
<div class="crm-block crm-form-block crm-civirule-rule_condition-block-contribution_specificamount">
<div class="'crm-section">
Contribution is:
</div>
......
......@@ -73,9 +73,9 @@
<access_arguments>access CiviCRM</access_arguments>
</item>
<item>
<path>civicrm/civirule/form/condition/contribution_countspecificamount</path>
<page_callback>CRM_CivirulesConditions_Form_Contribution_CountSpecificAmount</page_callback>
<title>count specific amount</title>
<path>civicrm/civirule/form/condition/contribution_specificamount</path>
<page_callback>CRM_CivirulesConditions_Form_Contribution_SpecificAmount</page_callback>
<title>specific amount count</title>
<access_arguments>access CiviCRM</access_arguments>
</item>
<item>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment