CRM-16189, updated function to throw exception in BAO and catch in form level
authorPradeep Nayak <pradpnayak@gmail.com>
Wed, 27 Jul 2016 12:55:32 +0000 (18:25 +0530)
committerPradeep Nayak <pradpnayak@gmail.com>
Wed, 27 Jul 2016 12:55:32 +0000 (18:25 +0530)
----------------------------------------
* CRM-16189: Improve support for Accrual Method bookkeeping
  https://issues.civicrm.org/jira/browse/CRM-16189

CRM/Contribute/BAO/Contribution.php
CRM/Contribute/Form/Contribution.php
CRM/Financial/BAO/FinancialAccount.php

index 8ffd1c011d7c5cac23e65e5ff732b085327f52ab..092e8875e822ae8f74061359c8253796f551a37b 100644 (file)
@@ -178,10 +178,8 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
     }
 
     // CRM-16189
-    if (CRM_Financial_BAO_FinancialAccount::checkFinancialTypeHasDeferred($params, $contributionID)) {
-      $error = ts('Revenue recognition date can only be specified if the financial type selected has a deferred revenue account configured. Please have an administrator set up the deferred revenue account at Administer > CiviContribute > Financial Accounts, then configure it for financial types at Administer > CiviContribution > Financial Types, Accounts');
-      throw new CRM_Core_Exception($error);
-    }
+    CRM_Financial_BAO_FinancialAccount::checkFinancialTypeHasDeferred($params, $contributionID);
+
     if ($contributionID) {
       CRM_Utils_Hook::pre('edit', 'Contribution', $contributionID, $params);
     }
index 94f9bb5ae121053376bcf8e55fd8949f6aed25ba..7d65913dd792ba0179d7f462a58e8e00901d07ee 100644 (file)
@@ -1009,9 +1009,12 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP
       $errors['revenue_recognition_date'] = ts('Month and Year are required field for Revenue Recognition.');
     }
     // CRM-16189
-    if (CRM_Financial_BAO_FinancialAccount::checkFinancialTypeHasDeferred($fields, $self->_id, $self->_priceSet['fields'])) {
+    try {
+      CRM_Financial_BAO_FinancialAccount::checkFinancialTypeHasDeferred($fields, $self->_id, $self->_priceSet['fields']);
+    }
+    catch (CRM_Core_Exception $e) {
       $errors['financial_type_id'] = ' ';
-      $errors['_qf_default'] = ts('Revenue recognition date can only be specified if the financial type selected has a deferred revenue account configured. Please have an administrator set up the deferred revenue account at Administer > CiviContribute > Financial Accounts, then configure it for financial types at Administer > CiviContribution > Financial Types, Accounts');
+      $errors['_qf_default'] = $e->getMessage();
     }
     $errors = array_merge($errors, $softErrors);
     return $errors;
index f02a4716ef2d184f86283ab039129d2aae74b5dc..aea07d410fd5a7485105e8a0828ca0c66e607a6e 100644 (file)
@@ -401,19 +401,25 @@ LIMIT 1";
       }
     }
     $deferredFinancialType = self::getDeferredFinancialType();
+    $isError = FALSE;
     if (!empty($lineItems)) {
       foreach ($lineItems as $lineItem) {
         foreach ($lineItem as $items) {
           if (!array_key_exists($items['financial_type_id'], $deferredFinancialType)) {
-            return TRUE;
+            $isError = TRUE;
           }
         }
       }
     }
     elseif (!array_key_exists($financialTypeID, $deferredFinancialType)) {
-      return TRUE;
+      $isError = TRUE;
     }
-    return FALSE;
+
+    if ($isError) {
+      $error = ts('Revenue recognition date can only be specified if the financial type selected has a deferred revenue account configured. Please have an administrator set up the deferred revenue account at Administer > CiviContribute > Financial Accounts, then configure it for financial types at Administer > CiviContribution > Financial Types, Accounts');
+      throw new CRM_Core_Exception($error);
+    }
+    return $isError;
   }
 
   /**