From f53a29b1966b76d244f5474761d7f6533b050ec8 Mon Sep 17 00:00:00 2001 From: Pradeep Nayak Date: Mon, 31 Oct 2016 17:10:43 +0530 Subject: [PATCH] CRM-19585, fixed code to get previous financial item details ---------------------------------------- * CRM-19585: Sales tax issue https://issues.civicrm.org/jira/browse/CRM-19585 --- CRM/Financial/BAO/FinancialItem.php | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/CRM/Financial/BAO/FinancialItem.php b/CRM/Financial/BAO/FinancialItem.php index 2dfb32297ba7..b765c0db1eda 100644 --- a/CRM/Financial/BAO/FinancialItem.php +++ b/CRM/Financial/BAO/FinancialItem.php @@ -295,13 +295,28 @@ public static function checkContactPresent($contactIds, &$error) { * @return object CRM_Core_DAO */ public static function getPreviousFinancialItem($entityId, $entityTable = 'civicrm_line_item') { + $liabilityAccountType = CRM_Core_OptionGroup::getValue('financial_account_type', 'Liability', 'name'); $queryParams = array( 1 => array($entityId, 'Integer'), 2 => array($entityTable, 'String'), + 3 => array($liabilityAccountType, 'Integer'), ); - $query = 'SELECT id, description, status_id, financial_account_id - FROM civicrm_financial_item - WHERE entity_id = %1 AND entity_table = %2 ORDER BY id DESC LIMIT 1'; + $query = 'SELECT cfi.id, cfi.description, cfi.amount, cfi.financial_account_id, cfi.status_id + FROM `civicrm_financial_item` cfi + INNER JOIN civicrm_entity_financial_trxn ceft + ON ceft.entity_id = cfi.id AND ceft.entity_table = "civicrm_financial_item" + INNER JOIN civicrm_financial_trxn cft ON cft.id = ceft.financial_trxn_id + INNER JOIN civicrm_financial_account cfa ON cfa.id = cfi.financial_account_id + WHERE cfi.entity_table = %2 AND cfi.entity_id = %1 AND + CASE + WHEN cfa.financial_account_type_id = %3 + AND cfi.financial_account_id = from_financial_account_id + THEN 1 + WHEN cfa.financial_account_type_id = %3 + THEN 0 + ELSE 1 + END + GROUP BY cfi.id ORDER BY cfi.id DESC LIMIT 1'; $prevFinancialItem = CRM_Core_DAO::executeQuery($query, $queryParams); $prevFinancialItem->fetch(); return $prevFinancialItem;