Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Call repeatTransation not completeOrder from repeatTransaction API #26557

Merged
merged 1 commit into from
Jun 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions CRM/Contribute/BAO/Contribution.php
Original file line number Diff line number Diff line change
Expand Up @@ -2146,6 +2146,11 @@ public static function contributionCount($contactId, $includeSoftCredit = TRUE)
/**
* Repeat a transaction as part of a recurring series.
*
* @internal NOT supported to be called from outside of core. Note this function
* was made public to be called from the v3 api which IS supported so we can
* amend it without regards to possible external callers as this warning
* was added in the same commit as it was made public rather than protected.
*
* The ideal flow is
* 1) Processor calls contribution.repeattransaction with contribution_status_id = Pending
* 2) The repeattransaction loads the 'template contribution' and calls a hook to allow altering of it .
Expand Down Expand Up @@ -2180,11 +2185,12 @@ public static function contributionCount($contactId, $includeSoftCredit = TRUE)
* @throws \Civi\API\Exception\UnauthorizedException
* @todo
*
* 2) repeattransaction code is current munged into completeTransaction code for historical bad coding reasons
* 2) repeattransaction code is callable from completeTransaction code for historical bad coding reasons
* 3) Repeat transaction duplicates rather than calls Order.create
* 4) Use of payment.create still limited - completetransaction is more common.
*/
protected static function repeatTransaction(array $input, int $recurringContributionID) {
public static function repeatTransaction(array $input, int $recurringContributionID) {
// @todo - this was shared with `completeOrder` and not all necessarily apply.
$inputContributionWhiteList = [
'fee_amount',
'net_amount',
Expand All @@ -2204,6 +2210,8 @@ protected static function repeatTransaction(array $input, int $recurringContribu

$completedContributionStatusID = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed');

// @todo this was taken from completeContribution - it may be this just duplicates
// upcoming filtering & can go.
$contributionParams = array_merge([
'contribution_status_id' => $completedContributionStatusID,
], array_intersect_key($input, array_fill_keys($inputContributionWhiteList, 1)
Expand Down
9 changes: 3 additions & 6 deletions api/v3/Contribution.php
Original file line number Diff line number Diff line change
Expand Up @@ -665,12 +665,9 @@ function civicrm_api3_contribution_repeattransaction($params) {
$input['receipt_from_email'] = ($params['receipt_from_email'] ?? NULL) ?: $domainFromEmail;
}

// @todo this should call CRM_Contribute_BAO_Contribution::repeatTransaction - some minor cleanup needed to separate
// from completeOrder
return CRM_Contribute_BAO_Contribution::completeOrder($input,
$templateContribution['contribution_recur_id'],
NULL,
$params['is_post_payment_create'] ?? NULL);
return CRM_Contribute_BAO_Contribution::repeatTransaction($input,
$templateContribution['contribution_recur_id']
);
}

/**
Expand Down