Skip to content

Commit

Permalink
Merge pull request #19269 from eileenmcnaughton/mem_form
Browse files Browse the repository at this point in the history
[REF] Unshared another function back onto Membership_Form
  • Loading branch information
seamuslee001 authored Dec 24, 2020
2 parents 3f148fd + 66c8ea6 commit 44e9ef9
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 6 deletions.
5 changes: 1 addition & 4 deletions CRM/Contribute/Form/Contribution/Confirm.php
Original file line number Diff line number Diff line change
Expand Up @@ -1096,10 +1096,7 @@ public static function processRecurringContribution(&$form, &$params, $contactID
}
CRM_Utils_System::redirect(CRM_Utils_System::url($urlString, $urlParams));
}
// Only set contribution recur ID for contributions since offline membership recur payments are handled somewhere else.
if (!is_a($form, "CRM_Member_Form_Membership")) {
$form->_params['contributionRecurID'] = $recurring->id;
}
$form->_params['contributionRecurID'] = $recurring->id;

return $recurring->id;
}
Expand Down
72 changes: 71 additions & 1 deletion CRM/Member/Form/Membership.php
Original file line number Diff line number Diff line change
Expand Up @@ -1886,7 +1886,7 @@ protected function processContribution(
}
$params['is_recur'] = TRUE;
$params['payment_instrument_id'] = $contributionParams['payment_instrument_id'] ?? NULL;
$recurringContributionID = CRM_Contribute_Form_Contribution_Confirm::processRecurringContribution($form, $params, $contactID, $financialType);
$recurringContributionID = $this->legacyProcessRecurringContribution($params, $contactID, $financialType);

$now = date('YmdHis');
$receiptDate = $params['receipt_date'] ?? NULL;
Expand Down Expand Up @@ -1953,4 +1953,74 @@ protected function processContribution(
return $contribution;
}

/**
* Create the recurring contribution record.
*
* This function was copied from another form & needs cleanup.
*
* @param array $params
* @param int $contactID
* @param string $contributionType
*
* @return int|null
*/
protected function legacyProcessRecurringContribution(&$params, $contactID, $contributionType) {
$form = $this;
if (empty($params['is_recur'])) {
return NULL;
}

$recurParams = ['contact_id' => $contactID];
$recurParams['amount'] = $params['amount'] ?? NULL;
$recurParams['auto_renew'] = $params['auto_renew'] ?? NULL;
$recurParams['frequency_unit'] = $params['frequency_unit'] ?? NULL;
$recurParams['frequency_interval'] = $params['frequency_interval'] ?? NULL;
$recurParams['installments'] = $params['installments'] ?? NULL;
$recurParams['financial_type_id'] = $params['financial_type_id'] ?? NULL;
$recurParams['currency'] = $params['currency'] ?? NULL;
$recurParams['payment_instrument_id'] = $params['payment_instrument_id'];

// CRM-14354: For an auto-renewing membership with an additional contribution,
// if separate payments is not enabled, make sure only the membership fee recurs
if (!empty($form->_membershipBlock)
&& $form->_membershipBlock['is_separate_payment'] === '0'
&& isset($params['selectMembership'])
&& $form->_values['is_allow_other_amount'] == '1'
// CRM-16331
&& !empty($form->_membershipTypeValues)
&& !empty($form->_membershipTypeValues[$params['selectMembership']]['minimum_fee'])
) {
$recurParams['amount'] = $form->_membershipTypeValues[$params['selectMembership']]['minimum_fee'];
}

$recurParams['is_test'] = 0;
if (($form->_action & CRM_Core_Action::PREVIEW) ||
(isset($form->_mode) && ($form->_mode == 'test'))
) {
$recurParams['is_test'] = 1;
}

$recurParams['start_date'] = $recurParams['create_date'] = $recurParams['modified_date'] = date('YmdHis');
if (!empty($params['receive_date'])) {
$recurParams['start_date'] = date('YmdHis', strtotime($params['receive_date']));
}
$recurParams['invoice_id'] = $params['invoiceID'] ?? NULL;
$recurParams['contribution_status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending');
$recurParams['payment_processor_id'] = $params['payment_processor_id'] ?? NULL;
$recurParams['is_email_receipt'] = $params['is_email_receipt'] ?? NULL;
// we need to add a unique trxn_id to avoid a unique key error
// in paypal IPN we reset this when paypal sends us the real trxn id, CRM-2991
$recurParams['trxn_id'] = $params['trxn_id'] ?? $params['invoiceID'];
$recurParams['financial_type_id'] = $contributionType->id;

$campaignId = $params['campaign_id'] ?? $form->_values['campaign_id'] ?? NULL;
$recurParams['campaign_id'] = $campaignId;
$recurring = CRM_Contribute_BAO_ContributionRecur::add($recurParams);
if (is_a($recurring, 'CRM_Core_Error')) {
throw new CRM_Core_Exception(CRM_Core_Error::getMessages($recurring));
}

return $recurring->id;
}

}
2 changes: 1 addition & 1 deletion tests/phpunit/CRM/Member/Form/MembershipTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ public function tearDown() {
* @throws \CiviCRM_API3_Exception
* @throws \CRM_Core_Exception
*/
public function testFormRuleEmptyContact() {
public function testFormRuleEmptyContact(): void {
$params = [
'contact_select_id' => 0,
'membership_type_id' => [1 => NULL],
Expand Down

0 comments on commit 44e9ef9

Please sign in to comment.