Skip to content

Commit

Permalink
Merge pull request #26228 from eileenmcnaughton/add_pay
Browse files Browse the repository at this point in the history
Only call transitionComponents when transitioning pending/pay later to completed
  • Loading branch information
mattwire authored May 22, 2023
2 parents a157b35 + 6c33ebb commit dbcbdf9
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 18 deletions.
13 changes: 2 additions & 11 deletions CRM/Contribute/BAO/Contribution.php
Original file line number Diff line number Diff line change
Expand Up @@ -1786,16 +1786,13 @@ public static function checkOnlinePendingContribution($componentId, $componentNa
*
*/
public static function transitionComponents($params) {
$contributionStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $params['contribution_status_id']);
$previousStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $params['previous_contribution_status_id']);
// @todo fix the one place that calls this function to use Payment.create
// remove this.
// get minimum required values.
$contributionId = $params['contribution_id'];
$contributionStatusId = $params['contribution_status_id'];

// we process only ( Completed, Cancelled, or Failed ) contributions.
if (!$contributionId || $contributionStatus !== 'Completed') {
if (!$contributionId) {
return;
}

Expand Down Expand Up @@ -1880,12 +1877,6 @@ public static function transitionComponents($params) {
);
}

// only pending contribution related object processed.
if (!in_array($previousStatus, ['Pending', 'Partially paid'])) {
// this is case when we already processed contribution object.
return;
}

if (is_array($memberships)) {
foreach ($memberships as $membership) {
if ($membership) {
Expand Down Expand Up @@ -2039,7 +2030,7 @@ public static function transitionComponents($params) {
}

if ($pledgePayment) {
CRM_Pledge_BAO_PledgePayment::updatePledgePaymentStatus($pledgeID, $pledgePaymentIDs, $contributionStatusId);
CRM_Pledge_BAO_PledgePayment::updatePledgePaymentStatus($pledgeID, $pledgePaymentIDs, CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed'));
}

}
Expand Down
7 changes: 4 additions & 3 deletions CRM/Contribute/Form/Contribution.php
Original file line number Diff line number Diff line change
Expand Up @@ -1791,15 +1791,16 @@ protected function submit($submittedValues, $action, $pledgePaymentID) {
}
$contribution = CRM_Contribute_BAO_Contribution::create($params);

$previousStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $this->_values['contribution_status_id'] ?? NULL);
// process associated membership / participant, CRM-4395
if ($contribution->id && $action & CRM_Core_Action::UPDATE) {
if ($contribution->id && $action & CRM_Core_Action::UPDATE
&& in_array($previousStatus, ['Pending', 'Partially paid'], TRUE)
&& 'Completed' === CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $this->getSubmittedValue('contribution_status_id'))) {
// @todo use Payment.create to do this, remove transitioncomponents function
// if contribution is being created with a completed status it should be
// created pending & then Payment.create adds the payment
CRM_Contribute_BAO_Contribution::transitionComponents([
'contribution_id' => $contribution->id,
'contribution_status_id' => $contribution->contribution_status_id,
'previous_contribution_status_id' => $this->_values['contribution_status_id'] ?? NULL,
'receive_date' => $contribution->receive_date,
]);
}
Expand Down
9 changes: 5 additions & 4 deletions CRM/Contribute/Form/Task/Batch.php
Original file line number Diff line number Diff line change
Expand Up @@ -208,13 +208,14 @@ public function postProcess() {
$contribution = civicrm_api3('Contribution', 'create', $value);
$contribution = $contribution['values'][$contributionID];

// @todo add check as to whether the status is updated.
if (!empty($value['contribution_status_id'])) {
$currentStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $value['contribution_status_id'] ?? NULL);
$previousStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $this->_defaultValues["field[{$contributionID}][contribution_status_id]"] ?? NULL);

if ('Completed' === $currentStatus &&
in_array($previousStatus, ['Pending', 'Partially paid'], TRUE)) {
// @todo - use completeorder api or make api call do this.
CRM_Contribute_BAO_Contribution::transitionComponents([
'contribution_id' => $contribution['id'],
'contribution_status_id' => $value['contribution_status_id'],
'previous_contribution_status_id' => CRM_Utils_Array::value("field[{$contributionID}][contribution_status_id]", $this->_defaultValues),
'receive_date' => $contribution['receive_date'],
]);
}
Expand Down

0 comments on commit dbcbdf9

Please sign in to comment.