CRM-16189, (AA-44) added function to create entries for Account Receivable
authorPradeep Nayak <pradpnayak@gmail.com>
Thu, 11 Aug 2016 02:18:47 +0000 (07:48 +0530)
committerPradeep Nayak <pradpnayak@gmail.com>
Sun, 25 Sep 2016 21:22:30 +0000 (02:52 +0530)
----------------------------------------
* CRM-16189: Improve support for Accrual Method bookkeeping
  https://issues.civicrm.org/jira/browse/CRM-16189

CRM/Contribute/BAO/Contribution.php

index 7adb98858dee4a353143fdea40e13ce2cbc25b26..8950429a71bd867f5991e217d67dd0e3f56b40e8 100644 (file)
@@ -226,6 +226,9 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
 
     //add Account details
     $params['contribution'] = $contribution;
+    if (empty($contributionID)) {
+      self::recordAlwaysAccountsReceivable($params);
+    }
     self::recordFinancialAccounts($params);
 
     if (self::isUpdateToRecurringContribution($params)) {
@@ -5296,4 +5299,37 @@ LEFT JOIN  civicrm_contribution on (civicrm_contribution.contact_id = civicrm_co
     return $flag;
   }
 
+  /**
+   * Create Accounts Receivable financial trxn entry for Completed Contribution.
+   *
+   * @param array $params
+   *
+   */
+  public static function recordAlwaysAccountsReceivable(&$params) {
+    if (!self::checkContributeSettings('always_post_to_accounts_receivable')) {
+      return NULL;
+    }
+
+    $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
+    $contributionStatus = empty($params['contribution_status_id']) ? NULL : $contributionStatuses[$params['contribution_status_id']];
+    // Return if contribution status is not completed.
+    if ($contributionStatus != 'Completed') {
+      return NULL;
+    }
+
+    $params['contribution_status_id'] = $params['contribution']->contribution_status_id = array_search('Pending', $contributionStatuses);
+    $params['is_pay_later'] = $params['contribution']->is_pay_later = TRUE;
+
+    self::recordFinancialAccounts($params);
+
+    $params['prevContribution'] = self::getOriginalContribution($params['contribution']->id);
+    $params['prevContribution']->contribution_status_id = array_search('Pending', $contributionStatuses);
+    $params['prevContribution']->is_pay_later = TRUE;
+
+    $params['contribution_status_id'] = $params['contribution']->contribution_status_id = array_search('Completed', $contributionStatuses);
+    unset($params['is_pay_later']);
+    $params['contribution']->is_pay_later = NULL;
+    $params['id'] = $params['contribution']->id;
+  }
+
 }