From 8e8d287f4510e61a2da5973f7a4ef425b884be2b Mon Sep 17 00:00:00 2001 From: eileen Date: Thu, 24 Nov 2016 17:39:12 +1300 Subject: [PATCH] CRM-19594 another fix on line items for membership. This one was test driven, but extends us to checking correct line item amounts --- CRM/Contribute/BAO/Contribution/Utils.php | 6 ++++-- CRM/Contribute/Form/Contribution/Confirm.php | 8 +++++++- CRM/Member/BAO/Membership.php | 1 + CRM/Price/BAO/LineItem.php | 5 ++++- tests/phpunit/api/v3/ContributionPageTest.php | 3 ++- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/CRM/Contribute/BAO/Contribution/Utils.php b/CRM/Contribute/BAO/Contribution/Utils.php index 4fb8800887..a4bc54c941 100644 --- a/CRM/Contribute/BAO/Contribution/Utils.php +++ b/CRM/Contribute/BAO/Contribution/Utils.php @@ -64,7 +64,6 @@ class CRM_Contribute_BAO_Contribution_Utils { $isRecur ) { CRM_Core_Payment_Form::mapParams($form->_bltID, $form->_params, $paymentParams, TRUE); - $lineItems = $form->_lineItem; $isPaymentTransaction = self::isPaymentTransaction($form); $financialType = new CRM_Financial_DAO_FinancialType(); @@ -104,12 +103,15 @@ class CRM_Contribute_BAO_Contribution_Utils { $contributionParams = array( 'id' => CRM_Utils_Array::value('contribution_id', $paymentParams), 'contact_id' => $contactID, - 'line_item' => $lineItems, 'is_test' => $isTest, 'campaign_id' => CRM_Utils_Array::value('campaign_id', $paymentParams, CRM_Utils_Array::value('campaign_id', $form->_values)), 'contribution_page_id' => $form->_id, 'source' => CRM_Utils_Array::value('source', $paymentParams, CRM_Utils_Array::value('description', $paymentParams)), ); + if (isset($paymentParams['line_item'])) { + // @todo make sure this is consisently set at this point. + $contributionParams['line_item'] = $paymentParams['line_item']; + } if (!empty($form->_paymentProcessor)) { $contributionParams['payment_instrument_id'] = $paymentParams['payment_instrument_id'] = $form->_paymentProcessor['payment_instrument_id']; } diff --git a/CRM/Contribute/Form/Contribution/Confirm.php b/CRM/Contribute/Form/Contribution/Confirm.php index 4242abfac1..807a1e0cd4 100644 --- a/CRM/Contribute/Form/Contribution/Confirm.php +++ b/CRM/Contribute/Form/Contribution/Confirm.php @@ -1470,6 +1470,11 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr if (!$isProcessSeparateMembershipTransaction) { $membershipParams['skipLineItem'] = 1; } + else { + $membershipParams['total_amount'] = $totalAmount; + CRM_Price_BAO_LineItem::getLineItemArray($membershipParams); + + } $paymentResult = CRM_Contribute_BAO_Contribution_Utils::processConfirm($form, $membershipParams, $contactID, $financialTypeID, @@ -1494,7 +1499,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr if (empty($form->_params['auto_renew']) && !empty($membershipParams['is_recur'])) { unset($membershipParams['is_recur']); } - list($membershipContribution, $secondPaymentResult) = $this->processSecondaryFinancialTransaction($contactID, $form, $membershipParams, + list($membershipContribution, $secondPaymentResult) = $this->processSecondaryFinancialTransaction($contactID, $form, array_merge($membershipParams, array('skipLineItem' => 1)), $isTest, $membershipLineItems, CRM_Utils_Array::value('minimum_fee', $membershipDetails, 0), CRM_Utils_Array::value('financial_type_id', $membershipDetails)); $paymentResults[] = array('contribution_id' => $membershipContribution->id, 'result' => $secondPaymentResult); } @@ -1564,6 +1569,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr if (!empty($membershipContribution)) { // update recurring id for membership record CRM_Member_BAO_Membership::updateRecurMembership($membership, $membershipContribution); + // Next line is probably redundant. Checksprevent it happening twice. CRM_Member_BAO_Membership::linkMembershipPayment($membership, $membershipContribution); } } diff --git a/CRM/Member/BAO/Membership.php b/CRM/Member/BAO/Membership.php index 52743165ce..c54ee9acaa 100644 --- a/CRM/Member/BAO/Membership.php +++ b/CRM/Member/BAO/Membership.php @@ -1835,6 +1835,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND * @param int $campaignId * @param array $formDates * @param null|CRM_Contribute_BAO_Contribution $contribution + * @param array $lineItems * * @return array * @throws \CRM_Core_Exception diff --git a/CRM/Price/BAO/LineItem.php b/CRM/Price/BAO/LineItem.php index 75f55f6e93..0d0d6ad520 100644 --- a/CRM/Price/BAO/LineItem.php +++ b/CRM/Price/BAO/LineItem.php @@ -51,7 +51,10 @@ class CRM_Price_BAO_LineItem extends CRM_Price_DAO_LineItem { * @param array $params * (reference) an assoc array of name/value pairs. * - * @return CRM_Price_DAO_LineItem + * @return \CRM_Price_DAO_LineItem + * + * @throws \CiviCRM_API3_Exception + * @throws \Exception */ public static function create(&$params) { $id = CRM_Utils_Array::value('id', $params); diff --git a/tests/phpunit/api/v3/ContributionPageTest.php b/tests/phpunit/api/v3/ContributionPageTest.php index c877392f6f..014da9d8ff 100644 --- a/tests/phpunit/api/v3/ContributionPageTest.php +++ b/tests/phpunit/api/v3/ContributionPageTest.php @@ -401,7 +401,8 @@ class api_v3_ContributionPageTest extends CiviUnitTestCase { $this->callAPIAndDocument('contribution_page', 'submit', $submitParams, __FUNCTION__, __FILE__, 'submit contribution page', NULL); $contributions = $this->callAPISuccess('contribution', 'get', array('contribution_page_id' => $this->_ids['contribution_page'])); $this->assertCount(2, $contributions['values']); - $this->callAPISuccessGetCount('LineItem', array(), 2); + $lines = $this->callAPISuccess('LineItem', 'get', array('sequential' => 1)); + $this->assertEquals(10, $lines['values'][0]['line_total']); $membershipPayment = $this->callAPISuccess('membership_payment', 'getsingle', array()); $this->assertTrue(in_array($membershipPayment['contribution_id'], array_keys($contributions['values']))); $membership = $this->callAPISuccessGetSingle('membership', array('id' => $membershipPayment['membership_id'])); -- 2.25.1