}
}
- $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
//if contribution is created with cancelled or refunded status, add credit note id
// do the same for chargeback - this entered the code 'accidentally' but moving it to here
// as part of cleanup maintains consistency.
$params['creditnote_id'] = self::createCreditNoteId();
}
}
- if (empty($params['contribution_status_id'])) {
+ $contributionStatusID = $params['contribution_status_id'] ?? NULL;
+ if (CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', (int) $contributionStatusID) === 'Partially paid' && empty($params['is_post_payment_create'])) {
+ CRM_Core_Error::deprecatedFunctionWarning('Setting status to partially paid other than by using Payment.create is deprecated and unreliable');
+ }
+ if (!$contributionStatusID) {
// Since the fee amount is expecting this (later on) ensure it is always set.
// It would only not be set for an update where it is unchanged.
$params['contribution_status_id'] = civicrm_api3('Contribution', 'getvalue', [
'return' => 'contribution_status_id',
]);
}
+ $contributionStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', (int) $params['contribution_status_id']);
if (!$contributionID
&& CRM_Utils_Array::value('membership_id', $params)
if ($contributionID && $setPrevContribution) {
$params['prevContribution'] = self::getOriginalContribution($contributionID);
}
+ $previousContributionStatus = ($contributionID && !empty($params['prevContribution'])) ? CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', (int) $params['prevContribution']->contribution_status_id) : NULL;
- if ($contributionID && !empty($params['revenue_recognition_date']) && !empty($params['prevContribution'])
- && !($contributionStatus[$params['prevContribution']->contribution_status_id] == 'Pending')
+ if ($contributionID && !empty($params['revenue_recognition_date'])
+ && !($previousContributionStatus === 'Pending')
&& !self::allowUpdateRevenueRecognitionDate($contributionID)
) {
unset($params['revenue_recognition_date']);
if (self::isUpdateToRecurringContribution($params)) {
CRM_Contribute_BAO_ContributionRecur::updateOnNewPayment(
(!empty($params['contribution_recur_id']) ? $params['contribution_recur_id'] : $params['prevContribution']->contribution_recur_id),
- $contributionStatus[$params['contribution_status_id']],
+ $contributionStatus,
CRM_Utils_Array::value('receive_date', $params)
);
}
/**
* CRM-19722 - Check CRM_Contribute_Form_Task::preProcessCommon()
* executes without any error after sorting the search result.
+ *
+ * @throws \CRM_Core_Exception
*/
public function testPreProcessCommonAfterSorting() {
$fields = [
'financial_type_id' => $financialTypes[$i],
'contribution_status_id' => $status[$i],
];
+ if ($status[$i] === 'Partially paid') {
+ $contributionParams['contribution_status_id'] = 'Pending';
+ $contributionParams['api.Payment.create'] = ['total_amount' => 50];
+ }
$contribution = $this->callAPISuccess('Contribution', 'create', $contributionParams);
$contributionIds[] = $contribution['id'];
}