From 2f4358c1b47490880721083770d7d9b856230207 Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Wed, 10 Oct 2018 16:01:23 +0200 Subject: [PATCH] End SEPA mandates when ending a debit_manual recurring contribution. --- api/v3/TwingleDonation/EndRecurring.php | 30 ++++++++++++++++++++----- api/v3/TwingleDonation/Submit.php | 2 +- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/api/v3/TwingleDonation/EndRecurring.php b/api/v3/TwingleDonation/EndRecurring.php index 356c39b..c90e13b 100644 --- a/api/v3/TwingleDonation/EndRecurring.php +++ b/api/v3/TwingleDonation/EndRecurring.php @@ -70,12 +70,30 @@ function civicrm_api3_twingle_donation_EndRecurring($params) { $contribution = civicrm_api3('ContributionRecur', 'getsingle', array( 'trxn_id' => $params['trx_id'], )); - // TODO: End SEPA mandates? - $contribution = civicrm_api3('ContributionRecur', 'create', array( - 'id' => $contribution['id'], - 'end_date' => $params['ended_at'], - 'contribution_status_id' => 'Completed', // TODO: Correct? - )); + // End SEPA mandate (which ends the associated recurring contribution) or + // recurring contributions. + if ( + CRM_Twingle_Submission::civiSepaEnabled() + && CRM_Sepa_Logic_Settings::isSDD($contribution) + ) { + $mandate_id = CRM_Sepa_Logic_Settings::getMandateFor($contribution['id']); + if (!CRM_Sepa_BAO_SEPAMandate::terminateMandate($mandate_id, $params['ended_at'])) { + throw new CiviCRM_API3_Exception( + E::ts('Could not terminate SEPA mandate'), + 'api_error' + ); + } + $contribution = civicrm_api3('ContributionRecur', 'getsingle', array( + 'id' => $contribution['id'], + )); + } + else { + $contribution = civicrm_api3('ContributionRecur', 'create', array( + 'id' => $contribution['id'], + 'end_date' => $params['ended_at'], + 'contribution_status_id' => 'Completed', + )); + } $result = civicrm_api3_create_success($contribution); } diff --git a/api/v3/TwingleDonation/Submit.php b/api/v3/TwingleDonation/Submit.php index cfb8ba0..c789549 100644 --- a/api/v3/TwingleDonation/Submit.php +++ b/api/v3/TwingleDonation/Submit.php @@ -492,7 +492,7 @@ function civicrm_api3_twingle_donation_Submit($params) { $contribution_recur_data = $contribution_data + array( - 'contribution_status_id' => 'Pending', // TODO: Or "In Progress"? + 'contribution_status_id' => 'Pending', 'start_date' => $params['confirmed_at'], ) + CRM_Twingle_Submission::getFrequencyMapping($params['donation_rhythm']);