--CRM-16189, fixed code to add entries in civicrm_entity_financial_trxn table when...
authorPradeep Nayak <pradpnayak@gmail.com>
Fri, 15 Jul 2016 14:08:02 +0000 (19:38 +0530)
committerPradeep Nayak <pradpnayak@gmail.com>
Fri, 15 Jul 2016 14:08:02 +0000 (19:38 +0530)
CRM/Contribute/BAO/Contribution.php
CRM/Contribute/Form/AdditionalPayment.php

index a04b72a3bcb8ddea7e3dee27ea5a617878f7eff8..a1e2601b82308d4f3fd8a50d84257a50078669c3 100644 (file)
@@ -4816,9 +4816,10 @@ LIMIT 1;";
    *
    * @param array $lineItems
    * @param array $contributions
+   * @param array $previousContributionId
    *
    */
-  public static function addPayments($lineItems, $contributions) {
+  public static function addPayments($lineItems, $contributions, $previousContributionId = NULL) {
     // get financial trxn which is a payment
     $ftSql = "SELECT ft.id, ft.total_amount
       FROM civicrm_financial_trxn ft
@@ -4828,9 +4829,13 @@ LIMIT 1;";
       FROM civicrm_financial_item fi
       INNER JOIN civicrm_line_item li ON li.id = fi.entity_id
       WHERE li.contribution_id = %1";
-
+    $contributionStatus = CRM_Core_PseudoConstant::get('CRM_Contribute_DAO_Contribution', 'contribution_status_id', array(
+      'labelColumn' => 'name',
+    ));
     foreach ($contributions as $k => $contribution) {
-      if ($contribution->contribution_status_id != CRM_Core_OptionGroup::getValue('contribution_status', 'Partially paid', 'name')) {
+      if (!($contributionStatus[$contribution->contribution_status_id] == 'Partially paid'
+        || CRM_Utils_Array::value($previousContributionId, $contributionStatus) == 'Partially paid')
+      ) {
         continue;
       }
       $ftDao = CRM_Core_DAO::executeQuery($ftSql, array(1 => array($contribution->id, 'Integer')));
index 2aef27eac5ddada61b54d0320c13a716d00723b1..bbfcc709c569e160434fd1e0ae65862626abcb41 100644 (file)
@@ -383,13 +383,18 @@ class CRM_Contribute_Form_AdditionalPayment extends CRM_Contribute_Form_Abstract
     }
     else {
       $defaults = array();
+      $contribution = civicrm_api3('Contribution', 'getsingle', array(
+        'return' => array("contribution_status_id"),
+        'id' => $this->_contributionId,
+      ));
+      $contributionStatusId = CRM_Utils_Array::value('contribution_status_id', $contribution);
       $result = CRM_Contribute_BAO_Contribution::recordAdditionalPayment($this->_contributionId, $submittedValues, $this->_paymentType, $participantId);
       // Fetch the contribution & do proportional line item assignment
       $params = array('id' => $this->_contributionId);
       $contribution = CRM_Contribute_BAO_Contribution::retrieve($params, $defaults, $params);
       $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($this->_contributionId);
       if (!empty($lineItems)) {
-        CRM_Contribute_BAO_Contribution::addPayments($lineItems, array($contribution));
+        CRM_Contribute_BAO_Contribution::addPayments($lineItems, array($contribution), $contributionStatusId);
       }
 
       // email sending