CRM-19594 another fix on line items for membership.
authoreileen <emcnaughton@wikimedia.org>
Thu, 24 Nov 2016 04:39:12 +0000 (17:39 +1300)
committereileen <emcnaughton@wikimedia.org>
Thu, 24 Nov 2016 06:55:56 +0000 (19:55 +1300)
This one was test driven, but extends us to checking correct line item amounts

CRM/Contribute/BAO/Contribution/Utils.php
CRM/Contribute/Form/Contribution/Confirm.php
CRM/Member/BAO/Membership.php
CRM/Price/BAO/LineItem.php
tests/phpunit/api/v3/ContributionPageTest.php

index 4fb880088775c3ea24a7a2c7f9ae84831185d244..a4bc54c941e417f79ca15400597a88d354a6c27c 100644 (file)
@@ -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'];
       }
index 4242abfac156fa0bf6e9913ac711b97078c30cb6..807a1e0cd4ec47c1d479291b5f7704ca9d490432 100644 (file)
@@ -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);
         }
       }
index 52743165ce60ec363cab2e563b9c7fca41e5de4a..c54ee9acaaa201cb03272b1e9edbc4b9c8daf67c 100644 (file)
@@ -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
index 75f55f6e93bc8486730c6559233d5ecd769b5962..0d0d6ad520f04174d8b93c5705fe4a0b5a8f83f3 100644 (file)
@@ -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);
index c877392f6f2f0fb7b4e18690537e0aaa4caa2f14..014da9d8ff890ed89cfbfabfdb36790fb1d3aaef 100644 (file)
@@ -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']));