From 0b7bd9ddc5a5dc086d8986a9e5b085af40921c00 Mon Sep 17 00:00:00 2001 From: dpradeep Date: Fri, 6 Jun 2014 19:43:50 +0530 Subject: [PATCH] VAT-434 Batching contributions for Export --- CRM/Contribute/BAO/Contribution.php | 21 +++++++++++++++++++++ CRM/Financial/BAO/FinancialItem.php | 22 ++++++++++++++++++---- CRM/Price/BAO/LineItem.php | 3 +++ 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index 715ea11aba..cd66e95c2f 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -2776,6 +2776,27 @@ WHERE contribution_id = %1 "; // also make it available as return value $return = $financialTxn = CRM_Core_BAO_FinancialTrxn::create($trxnParams); $params['entity_id'] = $financialTxn->id; + + // when a tax is charged + if (!empty($params['tax_amount'])) { + $salesTaxTypeId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Sales Tax Account is' ")); + $amount = $params['tax_amount']; + if (!$amount) { + return FALSE; + } + + $taxTrxnParams = $trxnParams; + + //build financial transaction params for tax + $financialAccount = CRM_Contribute_PseudoConstant::financialAccountType($params['financial_type_id'], $salesTaxTypeId); + $taxTrxnParams['from_financial_account_id'] = $params['to_financial_account_id']; + $taxTrxnParams['to_financial_account_id'] = $financialAccount; + $taxTrxnParams['total_amount'] = $amount; + $taxTrxnParams['fee_amount'] = + $taxTrxnParams['net_amount'] = 0; + $trxn = CRM_Core_BAO_FinancialTrxn::create($taxTrxnParams); + $params['contribution']->tax_trxn_id = $trxn->id; + } } } // record line items and finacial items diff --git a/CRM/Financial/BAO/FinancialItem.php b/CRM/Financial/BAO/FinancialItem.php index 2427c08aec..b4374f9ddd 100644 --- a/CRM/Financial/BAO/FinancialItem.php +++ b/CRM/Financial/BAO/FinancialItem.php @@ -71,12 +71,13 @@ class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem { * * @param object $lineItem line item object * @param object $contribution contribution object + * @param boolean $taxTrxnID * * @access public * @static * @return void */ - static function add($lineItem, $contribution) { + static function add($lineItem, $contribution, $taxTrxnID = FALSE) { $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); $financialItemStatus = CRM_Core_PseudoConstant::get('CRM_Financial_DAO_FinancialItem', 'status_id'); $itemStatus = NULL; @@ -102,11 +103,19 @@ class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem { 'status_id' => $itemStatus, ); + if ($taxTrxnID) { + $params['amount'] = $lineItem->tax_amount; + $params['description'] = 'VAT'; + $accountRel = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Sales Tax Account is' ")); + } + else { + $accountRel = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Income Account is' ")); + } if ($lineItem->financial_type_id) { $searchParams = array( 'entity_table' => 'civicrm_financial_type', 'entity_id' => $lineItem->financial_type_id, - 'account_relationship' => 1, + 'account_relationship' => $accountRel, ); $result = array(); @@ -114,8 +123,13 @@ class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem { $params['financial_account_id'] = CRM_Utils_Array::value( 'financial_account_id', $result ); } - $trxn = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contribution->id, 'ASC', TRUE); - $trxnId['id'] = $trxn['financialTrxnId']; + if ($taxTrxnID) { + $trxnId['id'] = $contribution->tax_trxn_id; + } + else { + $trxn = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contribution->id, 'ASC', TRUE); + $trxnId['id'] = $trxn['financialTrxnId']; + } return self::create($params, NULL, $trxnId); } diff --git a/CRM/Price/BAO/LineItem.php b/CRM/Price/BAO/LineItem.php index 20ff8f740e..41d92349ff 100644 --- a/CRM/Price/BAO/LineItem.php +++ b/CRM/Price/BAO/LineItem.php @@ -317,6 +317,9 @@ AND li.entity_id = {$entityId} $lineItems = CRM_Price_BAO_LineItem::create($line); if (!$update && $contributionDetails) { CRM_Financial_BAO_FinancialItem::add($lineItems, $contributionDetails); + if (isset($contributionDetails->tax_trxn_id) && !empty($contributionDetails->tax_trxn_id)) { + CRM_Financial_BAO_FinancialItem::add($lineItems, $contributionDetails, TRUE); + } } } } -- 2.25.1