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']);