/**
* Cancel Recurring contribution.
*
- * @param int $recurId
- * Recur contribution id.
+ * @param array $params
+ * Recur contribution params
*
* @param array $activityParams
*
* @return bool
*/
- public static function cancelRecurContribution($recurId, $activityParams = []) {
+ public static function cancelRecurContribution($params, $activityParams = []) {
+ if (is_int($params)) {
+ CRM_Core_Error::deprecatedFunctionWarning('You are using a BAO function whose signature has changed. Please use the ContributionRecur.cancel api');
+ $params = ['id' => $params];
+ }
+ $recurId = $params['id'];
if (!$recurId) {
return FALSE;
}
$recur->start_date = CRM_Utils_Date::isoToMysql($recur->start_date);
$recur->create_date = CRM_Utils_Date::isoToMysql($recur->create_date);
$recur->modified_date = CRM_Utils_Date::isoToMysql($recur->modified_date);
+ $recur->cancel_reason = CRM_Utils_Array::value('cancel_reason', $params);
$recur->cancel_date = date('YmdHis');
$recur->save();
'details' => $message,
];
$cancelStatus = CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution(
- $this->_subscriptionDetails->recur_id,
+ ['id' => $this->_subscriptionDetails->recur_id],
$activityParams
);
* returns true is successfully cancelled
*/
function civicrm_api3_contribution_recur_cancel($params) {
- civicrm_api3_verify_one_mandatory($params, NULL, ['id']);
- return CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution($params['id']) ? civicrm_api3_create_success() : civicrm_api3_create_error(ts('Error while cancelling recurring contribution'));
+ return CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution($params) ? civicrm_api3_create_success() : civicrm_api3_create_error(ts('Error while cancelling recurring contribution'));
+}
+
+/**
+ * Adjust Metadata for Cancel action.
+ *
+ * The metadata is used for setting defaults, documentation & validation.
+ *
+ * @param array $params
+ * Array of parameters determined by getfields.
+ */
+function _civicrm_api3_contribution_recur_cancel_spec(&$params) {
+ $params['id'] = [
+ 'title' => ts('Contribution Recur ID'),
+ 'api.required' => TRUE,
+ 'type' => CRM_Utils_Type::T_INT,
+ ];
}
/**
*/
public function testCancelRecur() {
$contributionRecur = $this->callAPISuccess('contribution_recur', 'create', $this->_params);
- CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution($contributionRecur['id']);
+ CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution(['id' => $contributionRecur['id']]);
}
/**
$this->assertEquals(12, $result['values']['start_date']['type']);
}
+ /**
+ * Test that we can cancel a contribution and add a cancel_reason via the api.
+ */
+ public function testContributionRecurCancel() {
+ $result = $this->callAPISuccess($this->_entity, 'create', $this->params);
+ $this->callAPISuccess('ContributionRecur', 'cancel', ['id' => $result['id'], 'cancel_reason' => 'just cos']);
+ $cancelled = $this->callAPISuccess('ContributionRecur', 'getsingle', ['id' => $result['id']]);
+ $this->assertEquals('just cos', $cancelled['cancel_reason']);
+ $this->assertEquals(CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_ContributionRecur', 'contribution_status_id', 'Cancelled'), $cancelled['contribution_status_id']);
+ $this->assertEquals(date('Y-m-d'), date('Y-m-d', strtotime($cancelled['cancel_date'])));
+ }
+
}