towards CRM-14197 separate out building contribution Params array
authorEileen McNaughton <eileen@fuzion.co.nz>
Tue, 20 May 2014 22:36:45 +0000 (10:36 +1200)
committerEileen McNaughton <eileen@fuzion.co.nz>
Tue, 20 May 2014 22:41:22 +0000 (10:41 +1200)
CRM/Contribute/Form/Contribution/Confirm.php

index 27c8953bd5b32ddcb69402b338d1923a9e495a75..42df5a419bef0012a7871766ad21f196592f9ff7 100644 (file)
@@ -55,6 +55,112 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr
    */
   public $_contributionID;
 
+  /**
+   * Set the parameters to be passed to contribution create function
+   *
+   * @param array $params
+   * @param integer $contactID
+   * @param $financialTypeID
+   * @param $online
+   * @param $contributionPageId
+   * @param $nonDeductibleAmount
+   * @param $campaignId
+   *
+   * @param $isMonetary
+   *
+   * @param $pending
+   * @param $paymentProcessorOutcome
+   * @param $receiptDate
+   *
+   * @param $recurringContributionID
+   * @param $isTest
+   *
+   * @param $addressID
+   *
+   * @param $softCreditToID
+   *
+   * @param $lineItems
+   *
+   * @internal param $financialType
+   * @return array
+   */
+  public static function getContributionParams($params, $contactID, $financialTypeID, $online, $contributionPageId, $nonDeductibleAmount, $campaignId, $isMonetary, $pending,
+    $paymentProcessorOutcome, $receiptDate, $recurringContributionID, $isTest, $addressID, $softCreditToID, $lineItems)
+  {
+    $contributionParams = array(
+      'contact_id' => $contactID,
+      'financial_type_id' => $financialTypeID,
+      'contribution_page_id' => $contributionPageId,
+      'receive_date' => (CRM_Utils_Array::value('receive_date', $params)) ? CRM_Utils_Date::processDate($params['receive_date']) : date('YmdHis'),
+      'non_deductible_amount' => $nonDeductibleAmount,
+      'total_amount' => $params['amount'],
+      'amount_level' => CRM_Utils_Array::value('amount_level', $params),
+      'invoice_id' => $params['invoiceID'],
+      'currency' => $params['currencyID'],
+      'source' =>
+        (!$online || !empty($params['source'])) ?
+          CRM_Utils_Array::value('source', $params) :
+          CRM_Utils_Array::value('description', $params),
+      'is_pay_later' => CRM_Utils_Array::value('is_pay_later', $params, 0),
+      //configure cancel reason, cancel date and thankyou date
+      //from 'contribution' type profile if included
+      'cancel_reason' => CRM_Utils_Array::value('cancel_reason', $params, 0),
+      'cancel_date' =>
+        isset($params['cancel_date']) ?
+          CRM_Utils_Date::format($params['cancel_date']) :
+          NULL,
+      'thankyou_date' =>
+        isset($params['thankyou_date']) ?
+          CRM_Utils_Date::format($params['thankyou_date']) :
+          NULL,
+      'campaign_id' => $campaignId,
+      'is_test' => $isTest,
+      'address_id' => $addressID,
+      //setting to make available to hook - although seems wrong to set on form for BAO hook availability
+      'soft_credit_to' => $softCreditToID,
+      'line_item' => $lineItems
+    );
+    if (!$online && isset($params['thankyou_date'])) {
+      $contributionParam['thankyou_date'] = $params['thankyou_date'];
+    }
+    if (!$online || $isMonetary) {
+      if (empty($params['is_pay_later'])) {
+        $contributionParams['payment_instrument_id'] = 1;
+      }
+    }
+    if (!$pending && $paymentProcessorOutcome) {
+      $contributionParams += array(
+        'fee_amount' => CRM_Utils_Array::value('fee_amount', $paymentProcessorOutcome),
+        'net_amount' => CRM_Utils_Array::value('net_amount', $paymentProcessorOutcome, $params['amount']),
+        'trxn_id' => $paymentProcessorOutcome['trxn_id'],
+        'receipt_date' => $receiptDate,
+        // also add financial_trxn details as part of fix for CRM-4724
+        'trxn_result_code' => CRM_Utils_Array::value('trxn_result_code', $paymentProcessorOutcome),
+        'payment_processor' => CRM_Utils_Array::value('payment_processor', $paymentProcessorOutcome),
+      );
+    }
+
+    // CRM-4038: for non-en_US locales, CRM_Contribute_BAO_Contribution::add() expects localised amounts
+    $contributionParams['non_deductible_amount'] = trim(CRM_Utils_Money::format($contributionParams['non_deductible_amount'], ' '));
+    $contributionParams['total_amount'] = trim(CRM_Utils_Money::format($contributionParams['total_amount'], ' '));
+
+    if ($recurringContributionID) {
+      $contributionParams['contribution_recur_id'] = $recurringContributionID;
+    }
+
+    $contributionParams['contribution_status_id'] = $pending ? 2 : 1;
+    if (isset($contributionParams['invoice_id'])) {
+      $contributionParams['id'] = CRM_Core_DAO::getFieldValue(
+        'CRM_Contribute_DAO_Contribution',
+        $contributionParams['invoice_id'],
+        'id',
+        'invoice_id'
+      );
+    }
+
+    return $contributionParams;
+  }
+
   /**
    * Function to set variables up before form is built
    *
@@ -1089,11 +1195,17 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr
     $online
   ) {
     $transaction = new CRM_Core_Transaction();
-    $className   = get_class($form);
-    $recurringContributionID = NULL;
+    $recurringContributionID =  $contribSoftContactId = $addressID = NULL;
 
     // add these values for the recurringContrib function ,CRM-10188
     $params['financial_type_id'] = $financialType->id;
+
+    //create an contribution address
+    if (
+      $form->_contributeMode != 'notify' && empty($params['is_pay_later']) && !empty($form->_values['is_monetary'])) {
+      $addressID = CRM_Contribute_BAO_Contribution::createAddress($params, $form->_bltID);
+    }
+
     //@todo - this is being set from the form to resolve CRM-10188 - an
     // eNotice caused by it not being set @ the front end
     // however, we then get it being over-written with null for backend contributions
@@ -1169,94 +1281,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr
       $campaignId = CRM_Utils_Array::value('campaign_id', $params);
     }
 
-    // first create the contribution record
-    $contribParams = array(
-      'contact_id' => $contactID,
-      'financial_type_id'  => $financialType->id,
-      'contribution_page_id' => $contributionPageId,
-      'receive_date' => (CRM_Utils_Array::value('receive_date', $params)) ? CRM_Utils_Date::processDate($params['receive_date']) : date('YmdHis'),
-      'non_deductible_amount' => $nonDeductibleAmount,
-      'total_amount' => $params['amount'],
-      'amount_level' => CRM_Utils_Array::value('amount_level', $params),
-      'invoice_id' => $params['invoiceID'],
-      'currency' => $params['currencyID'],
-      'source' =>
-      (!$online || !empty($params['source'])) ?
-      CRM_Utils_Array::value('source', $params) :
-      CRM_Utils_Array::value('description', $params),
-      'is_pay_later' => CRM_Utils_Array::value('is_pay_later', $params, 0),
-      //configure cancel reason, cancel date and thankyou date
-      //from 'contribution' type profile if included
-      'cancel_reason' => CRM_Utils_Array::value('cancel_reason', $params, 0),
-      'cancel_date' =>
-      isset($params['cancel_date']) ?
-      CRM_Utils_Date::format($params['cancel_date']) :
-      NULL,
-      'thankyou_date' =>
-      isset($params['thankyou_date']) ?
-      CRM_Utils_Date::format($params['thankyou_date']) :
-      NULL,
-      'campaign_id' => $campaignId,
-    );
-
-    if (!$online && isset($params['thankyou_date'])) {
-      $contribParams['thankyou_date'] = $params['thankyou_date'];
-    }
-
-    if (!$online || $form->_values['is_monetary']) {
-      if (empty($params['is_pay_later'])) {
-        $contribParams['payment_instrument_id'] = 1;
-      }
-    }
-
-    if (!$pending && $result) {
-      $contribParams += array(
-        'fee_amount' => CRM_Utils_Array::value('fee_amount', $result),
-        'net_amount' => CRM_Utils_Array::value('net_amount', $result, $params['amount']),
-        'trxn_id' => $result['trxn_id'],
-        'receipt_date' => $receiptDate,
-        // also add financial_trxn details as part of fix for CRM-4724
-        'trxn_result_code' => CRM_Utils_Array::value('trxn_result_code', $result),
-        'payment_processor' => CRM_Utils_Array::value('payment_processor', $result),
-      );
-    }
-
-    if ($recurringContributionID) {
-      $contribParams['contribution_recur_id'] = $recurringContributionID;
-    }
-
-    $contribParams['contribution_status_id'] = $pending ? 2 : 1;
-
-    $contribParams['is_test'] = 0;
-    if ($form->_mode == 'test') {
-      $contribParams['is_test'] = 1;
-    }
-
-    $ids = array();
-    if (isset($contribParams['invoice_id'])) {
-      $contribID = CRM_Core_DAO::getFieldValue(
-        'CRM_Contribute_DAO_Contribution',
-        $contribParams['invoice_id'],
-        'id',
-        'invoice_id'
-      );
-      if (isset($contribID)) {
-        $ids['contribution'] = $contribID;
-        $contribParams['id'] = $contribID;
-      }
-    }
-
-
-    //create an contribution address
-    if (
-      $form->_contributeMode != 'notify' && empty($params['is_pay_later']) && !empty($form->_values['is_monetary'])) {
-      $contribParams['address_id'] = CRM_Contribute_BAO_Contribution::createAddress($params, $form->_bltID);
-    }
-
-    // CRM-4038: for non-en_US locales, CRM_Contribute_BAO_Contribution::add() expects localised amounts
-    $contribParams['non_deductible_amount'] = trim(CRM_Utils_Money::format($contribParams['non_deductible_amount'], ' '));
-    $contribParams['total_amount'] = trim(CRM_Utils_Money::format($contribParams['total_amount'], ' '));
-
     // Prepare soft contribution due to pcp or Submit Credit / Debit Card Contribution by admin.
     if (!empty($params['pcp_made_through_id']) || !empty($params['soft_credit_to'])) {
       // if its due to pcp
@@ -1273,13 +1297,15 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr
 
       // Pass these details onto with the contribution to make them
       // available at hook_post_process, CRM-8908
-      $contribParams['soft_credit_to'] = $params['soft_credit_to'] = $contribSoftContactId;
+      $params['soft_credit_to'] = $contribSoftContactId;
     }
 
     if (isset($params['amount'])) {
-      $contribParams['line_item'] = $form->_lineItem;
-      //add contribution record
-      $contribution = CRM_Contribute_BAO_Contribution::add($contribParams, $ids);
+      $contribParams = self::getContributionParams(
+        $params, $contactID, $financialType->id, $online, $contributionPageId, $nonDeductibleAmount, $campaignId, $form->_values['is_monetary'], $pending, $result, $receiptDate,
+        $recurringContributionID, $isTest, $addressID, $contribSoftContactId, $lineItems
+      );
+      $contribution = CRM_Contribute_BAO_Contribution::add($contribParams);
       if (is_a($contribution, 'CRM_Core_Error')) {
         $message = CRM_Core_Error::getMessages($contribution);
         CRM_Core_Error::fatal($message);