From 05881808634434025c9a7db63c192c8b871b5412 Mon Sep 17 00:00:00 2001 From: Pradeep Nayak Date: Mon, 27 Jun 2016 20:24:33 +0530 Subject: [PATCH] CRM-16189, added function to validate financial type (#8570) * CRM-16189, added function to validate financial type ---------------------------------------- * CRM-16189: Improve support for Accrual Method bookkeeping https://issues.civicrm.org/jira/browse/CRM-16189 Conflicts: CRM/Financial/BAO/FinancialAccount.php * CRM-16189 Added unit test for ValidateFinancialType ---------------------------------------- * CRM-16189: Improve support for Accrual Method bookkeeping https://issues.civicrm.org/jira/browse/CRM-16189 Conflicts: tests/phpunit/CRM/Financial/BAO/FinancialAccountTest.php * CRM-16189, fixed stylings ---------------------------------------- * CRM-16189: Improve support for Accrual Method bookkeeping https://issues.civicrm.org/jira/browse/CRM-16189 Conflicts: CRM/Financial/BAO/FinancialAccount.php * --CRM-16189, updated code and removed unwanted checks * CRM-16189, updated class name ---------------------------------------- * CRM-16189: Improve support for Accrual Method bookkeeping https://issues.civicrm.org/jira/browse/CRM-16189 * --CRM-16189, fixed array indentation * --CRM-16189, removed conflicts * --CRM-16189, fixed return value to use it as bool --- CRM/Financial/BAO/FinancialAccount.php | 41 +++++++++++++++++++ .../Financial/BAO/FinancialAccountTest.php | 19 +++++++++ 2 files changed, 60 insertions(+) diff --git a/CRM/Financial/BAO/FinancialAccount.php b/CRM/Financial/BAO/FinancialAccount.php index 19147b11f7..fb551938f8 100644 --- a/CRM/Financial/BAO/FinancialAccount.php +++ b/CRM/Financial/BAO/FinancialAccount.php @@ -396,4 +396,45 @@ LIMIT 1"; return FALSE; } + /** + * Check if financial type has Deferred Revenue Account is relationship + * with Financial Account. + * + * @param int $financialTypeId + * + * @return bool + * + */ + public static function validateFinancialType($financialTypeId, $entityID = NULL, $entity = NULL) { + if (!CRM_Contribute_BAO_Contribution::checkContributeSettings('deferred_revenue_enabled')) { + return FALSE; + } + if ($entityID) { + $query = ' SELECT ps.extends FROM civicrm_price_set ps %3 WHERE %1.id = %2'; + $params = array( + 1 => array('ps', 'Text'), + 2 => array($entityID, 'Integer'), + ); + if ($entity == 'PriceField') { + $params[1] = array('pf', 'Text'); + $params[3] = array( + ' INNER JOIN civicrm_price_field pf ON pf.price_set_id = ps.id ', + 'Text', + ); + } + $extends = CRM_Core_DAO::singleValueQuery($query, $params); + $extends = explode('', $extends); + if (!(in_array(CRM_Core_Component::getComponentID('CiviEvent'), $extends) + || in_array(CRM_Core_Component::getComponentID('CiviMember'), $extends)) + ) { + return FALSE; + } + } + $deferredFinancialType = self::getDeferredFinancialType(); + if (!array_key_exists($financialTypeId, $deferredFinancialType)) { + return TRUE; + } + return FALSE; + } + } diff --git a/tests/phpunit/CRM/Financial/BAO/FinancialAccountTest.php b/tests/phpunit/CRM/Financial/BAO/FinancialAccountTest.php index aa92d7d72b..0eba0fdcaa 100644 --- a/tests/phpunit/CRM/Financial/BAO/FinancialAccountTest.php +++ b/tests/phpunit/CRM/Financial/BAO/FinancialAccountTest.php @@ -314,4 +314,23 @@ class CRM_Financial_BAO_FinancialAccountTest extends CiviUnitTestCase { $this->assertEquals($valid, $message, "The messages do not match"); } + /** + * Test if financial type has Deferred Revenue Account is relationship with Financial Account. + * + */ + public function testValidateFinancialType() { + Civi::settings()->set('contribution_invoice_settings', array('deferred_revenue_enabled' => '1')); + $deferred = CRM_Financial_BAO_FinancialAccount::getDeferredFinancialType(); + $financialTypes = CRM_Contribute_PseudoConstant::financialType(); + foreach ($financialTypes as $key => $value) { + $validate = CRM_Financial_BAO_FinancialAccount::validateFinancialType($key); + if (array_key_exists($key, $deferred)) { + $this->assertFalse($validate, "This should not have thrown an error."); + } + else { + $this->assertEquals($validate, TRUE); + } + } + } + } -- 2.25.1