From 0de16605d901c605884eec47394e650b71944520 Mon Sep 17 00:00:00 2001 From: olayiwola-compucorp Date: Tue, 26 Mar 2024 07:05:30 +0100 Subject: [PATCH] Compute allocated tax amount in getPayableLineItems --- CRM/Financial/BAO/Payment.php | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/CRM/Financial/BAO/Payment.php b/CRM/Financial/BAO/Payment.php index db23a20ce253..3d39dda7556d 100644 --- a/CRM/Financial/BAO/Payment.php +++ b/CRM/Financial/BAO/Payment.php @@ -43,7 +43,7 @@ public static function create(array $params): CRM_Financial_DAO_FinancialTrxn { $contribution = civicrm_api3('Contribution', 'getsingle', ['id' => $params['contribution_id']]); $contributionStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $contribution['contribution_status_id']); $isPaymentCompletesContribution = self::isPaymentCompletesContribution($params['contribution_id'], $params['total_amount'], $contributionStatus); - $lineItems = self::getPayableLineItems($params); + $lineItems = self::getPayableLineItems($params, $contribution); $whiteList = ['check_number', 'payment_processor_id', 'fee_amount', 'total_amount', 'contribution_id', 'net_amount', 'card_type_id', 'pan_truncation', 'trxn_result_code', 'payment_instrument_id', 'trxn_id', 'trxn_date', 'order_reference']; $paymentTrxnParams = array_intersect_key($params, array_fill_keys($whiteList, 1)); @@ -163,19 +163,13 @@ public static function create(array $params): CRM_Financial_DAO_FinancialTrxn { if ($financialItem['financial_item.entity_id'] === (int) $lineItem['id'] && in_array($financialItem['financial_item.financial_account_id'], $salesTaxFinancialAccount, TRUE) ) { - // If we find a "Sales Tax" lineitem we record a tax entry in entityFiancncialTrxn - // @todo - this is expected to be broken - it should be fixed to - // a) have the getPayableLineItems add the amount to allocate for tax - // b) call EntityFinancialTrxn directly - per above. - // - see https://github.com/civicrm/civicrm-core/pull/14763 - $entityParams = [ - 'contribution_total_amount' => $contribution['total_amount'], - 'trxn_total_amount' => $params['total_amount'], - 'trxn_id' => $trxn->id, - 'line_item_amount' => $financialItem['tax_amount'], + $eftParams = [ + 'entity_table' => 'civicrm_financial_item', + 'financial_trxn_id' => $trxn->id, + 'entity_id' => $financialItem['financial_item.id'], + 'amount' => $lineItem['tax_allocation'], ]; - $eftParams['entity_id'] = $financialItem['financial_item.id']; - CRM_Contribute_BAO_Contribution::createProportionalEntry($entityParams, $eftParams); + civicrm_api3('EntityFinancialTrxn', 'create', $eftParams); } } } @@ -537,11 +531,12 @@ private static function updateContributionStatus(int $contributionID, string $st * - if overrides have been passed in we use those amounts instead. * * @param $params + * @param $contribution * * @return array * @throws \CRM_Core_Exception */ - protected static function getPayableLineItems($params): array { + protected static function getPayableLineItems($params, $contribution): array { $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($params['contribution_id']); $lineItemOverrides = []; if (!empty($params['line_item'])) { @@ -577,8 +572,14 @@ protected static function getPayableLineItems($params): array { else { $lineItems[$lineItemID]['allocation'] = $lineItems[$lineItemID]['balance'] * $ratio; } + + if (!empty($lineItem['tax_amount'])) { + $lineItems[$lineItemID]['tax_allocation'] = $lineItem['tax_amount'] * ($params['total_amount'] / $contribution['total_amount']); + } + } } + return $lineItems; }