+ /**
+ * Create Accounts Receivable financial trxn entry for Completed Contribution.
+ *
+ * @param array $trxnParams
+ * Financial trxn params
+ * @param string $contributionParams
+ * Contribution Params
+ *
+ * @return string
+ */
+ public static function recordAlwaysAccountsReceivable(&$trxnParams, $contributionParams) {
+ if (!self::checkContributeSettings('always_post_to_accounts_receivable')) {
+ return NULL;
+ }
+ $statusId = $contributionParams['contribution']->contribution_status_id;
+ $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
+ $contributionStatus = empty($statusId) ? NULL : $contributionStatuses[$statusId];
+ $previousContributionStatus = empty($contributionParams['prevContribution']) ? NULL : $contributionStatuses[$contributionParams['prevContribution']->contribution_status_id];
+ // Return if contribution status is not completed.
+ if (!($contributionStatus == 'Completed' && (empty($previousContributionStatus)
+ || (!empty($previousContributionStatus) && $previousContributionStatus == 'Pending'
+ && $contributionParams['prevContribution']->is_pay_later == 0
+ )))
+ ) {
+ return NULL;
+ }
+
+ $params = $trxnParams;
+ $financialTypeID = CRM_Utils_Array::value('financial_type_id', $contributionParams) ? $contributionParams['financial_type_id'] : $contributionParams['prevContribution']->financial_type_id;
+ $relationTypeId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Accounts Receivable Account is' "));
+ $arAccountId = CRM_Contribute_PseudoConstant::financialAccountType($financialTypeID, $relationTypeId);
+ $params['to_financial_account_id'] = $arAccountId;
+ $params['status_id'] = array_search('Pending', $contributionStatuses);
+ $params['is_payment'] = FALSE;
+ $trxn = CRM_Core_BAO_FinancialTrxn::create($params);
+ self::$_trxnIDs[] = $trxn->id;
+ $trxnParams['from_financial_account_id'] = $params['to_financial_account_id'];
+ }
+