*/
static $_exportableFields = NULL;
+ /**
+ * Static field to hold financial trxn id's.
+ *
+ * @var array
+ */
+ static $_trxnIDs = NULL;
+
/**
* Field for all the objects related to this contribution
* @var array of objects (e.g membership object, participant object)
//add Account details
$params['contribution'] = $contribution;
- if (empty($contributionID)) {
- self::recordAlwaysAccountsReceivable($params);
- }
self::recordFinancialAccounts($params);
if (self::isUpdateToRecurringContribution($params)) {
if (!isset($totalAmount) && !empty($params['prevContribution'])) {
$totalAmount = $params['total_amount'] = $params['prevContribution']->total_amount;
}
-
//build financial transaction params
$trxnParams = array(
'contribution_id' => $params['contribution']->id,
if (!$update) {
// records finanical trxn and entity financial trxn
// also make it available as return value
+ self::recordAlwaysAccountsReceivable($trxnParams, $params);
$return = $financialTxn = CRM_Core_BAO_FinancialTrxn::create($trxnParams);
- $params['entity_id'] = $financialTxn->id;
+ $params['entity_id'] = self::$_trxnIDs[] = $financialTxn->id;
}
}
// record line items and financial items
// & this can be removed
return;
}
+ self::recordAlwaysAccountsReceivable($params['trxnParams'], $params);
$trxn = CRM_Core_BAO_FinancialTrxn::create($params['trxnParams']);
- $params['entity_id'] = $trxn->id;
+ $params['entity_id'] = self::$_trxnIDs[] = $trxn->id;
$query = "UPDATE civicrm_financial_item SET status_id = %1 WHERE entity_id = %2 and entity_table = 'civicrm_line_item'";
$sql = "SELECT id, amount FROM civicrm_financial_item WHERE entity_id = %1 and entity_table = 'civicrm_line_item'";
$entityParams = array(
'entity_table' => 'civicrm_financial_item',
- 'financial_trxn_id' => $trxn->id,
);
foreach ($params['line_item'] as $fieldId => $fields) {
foreach ($fields as $fieldValueId => $fieldValues) {
while ($financialItem->fetch()) {
$entityParams['entity_id'] = $financialItem->id;
$entityParams['amount'] = $financialItem->amount;
- CRM_Financial_BAO_FinancialItem::createEntityTrxn($entityParams);
+ foreach (self::$_trxnIDs as $tID) {
+ $entityParams['financial_trxn_id'] = $tID;
+ CRM_Financial_BAO_FinancialItem::createEntityTrxn($entityParams);
+ }
}
}
}
/**
* Create Accounts Receivable financial trxn entry for Completed Contribution.
*
- * @param array $params
- *
- * @param string $context
+ * @param array $trxnParams
+ * Financial trxn params
+ * @param string $contributionParams
+ * Contribution Params
*
+ * @return string
*/
- public static function recordAlwaysAccountsReceivable(&$params, $context = NULL) {
+ public static function recordAlwaysAccountsReceivable(&$trxnParams, $contributionParams) {
if (!self::checkContributeSettings('always_post_to_accounts_receivable')) {
return NULL;
}
- $statusId = $params['contribution']->contribution_status_id;
+ $statusId = $contributionParams['contribution']->contribution_status_id;
$contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
$contributionStatus = empty($statusId) ? NULL : $contributionStatuses[$statusId];
// Return if contribution status is not completed.
if ($contributionStatus != 'Completed') {
return NULL;
}
-
- if (empty($context)) {
- $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;
- if (!empty($context)) {
- self::recordFinancialAccounts($params);
- }
+ $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'];
}
}
$params['financial_account_id'] = CRM_Utils_Array::value('financial_account_id', $result);
}
if (empty($trxnId)) {
- $trxn = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contribution->id, 'ASC', TRUE);
- $trxnId['id'] = $trxn['financialTrxnId'];
+ $trxnId['id'] = CRM_Contribute_BAO_Contribution::$_trxnIDs;
+ if (empty($trxnId['id'])) {
+ $trxn = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contribution->id, 'ASC', TRUE);
+ $trxnId['id'] = $trxn['financialTrxnId'];
+ }
}
$financialItem = self::create($params, NULL, $trxnId);
return $financialItem;
}
$financialItem->save();
- if (!empty($trxnIds['id'])) {
- $entity_financial_trxn_params = array(
- 'entity_table' => "civicrm_financial_item",
- 'entity_id' => $financialItem->id,
- 'financial_trxn_id' => $trxnIds['id'],
- 'amount' => $params['amount'],
- );
-
- $entity_trxn = new CRM_Financial_DAO_EntityFinancialTrxn();
- $entity_trxn->copyValues($entity_financial_trxn_params);
- if (!empty($ids['entityFinancialTrxnId'])) {
- $entity_trxn->id = $ids['entityFinancialTrxnId'];
+ $financialtrxnIDS = CRM_Utils_Array::value('id', $trxnIds);
+ if (!empty($financialtrxnIDS)) {
+ if (!is_array($financialtrxnIDS)) {
+ $financialtrxnIDS = array($financialtrxnIDS);
+ }
+ foreach ($financialtrxnIDS as $tID) {
+ $entity_financial_trxn_params = array(
+ 'entity_table' => "civicrm_financial_item",
+ 'entity_id' => $financialItem->id,
+ 'financial_trxn_id' => $tID,
+ 'amount' => $params['amount'],
+ );
+ if (!empty($ids['entityFinancialTrxnId'])) {
+ $entity_financial_trxn_params['id'] = $ids['entityFinancialTrxnId'];
+ }
+ self::createEntityTrxn($entity_financial_trxn_params);
}
- $entity_trxn->save();
}
if (!empty($ids['id'])) {
CRM_Utils_Hook::post('edit', 'FinancialItem', $financialItem->id, $financialItem);