'contribution_recur_id' => $contributionParams['contribution_recur_id'],
'options' => array('limit' => 1),
));
+ if (!empty($contributionParams['contribution_recur_id'])) {
+ $recurringContribution = civicrm_api3('ContributionRecur', 'getsingle', array(
+ 'id' => $contributionParams['contribution_recur_id'],
+ ));
+ if (!empty($recurringContribution['campaign_id'])) {
+ // CRM-17718 the campaign id on the contribution recur record should get precedence.
+ $contributionParams['campaign_id'] = $recurringContribution['campaign_id'];
+ }
+ }
+
$contributionParams['skipLineItem'] = TRUE;
$contributionParams['status_id'] = 'Pending';
- $contributionParams['financial_type_id'] = $templateContribution['financial_type_id'];
+ if (isset($contributionParams['financial_type_id'])) {
+ // Give precedence to passed in type.
+ $contribution->financial_type_id = $contributionParams['financial_type_id'];
+ }
+ else {
+ $contributionParams['financial_type_id'] = $templateContribution['financial_type_id'];
+ }
$contributionParams['contact_id'] = $templateContribution['contact_id'];
$contributionParams['source'] = empty($templateContribution['source']) ? ts('Recurring contribution') : $templateContribution['source'];
$createContribution = civicrm_api3('Contribution', 'create', $contributionParams);
}
}
+ /**
+ * Is there only one line item attached to the contribution.
+ *
+ * @param int $id
+ * Contribution ID.
+ *
+ * @return bool
+ * @throws \CiviCRM_API3_Exception
+ */
+ public static function isSingleLineItem($id) {
+ $lineItemCount = civicrm_api3('LineItem', 'getcount', array('id' => $id));
+ return ($lineItemCount == 1);
+ }
+
/**
* Complete an order.
*
'campaign_id',
'receive_date',
);
+ if (self::isSingleLineItem($primaryContributionID)) {
+ $inputContributionWhiteList[] = 'financial_type_id';
+ }
$contributionParams = array_merge(array(
'contribution_status_id' => 'Completed',