[ready-for-core-team-review]CRM-16189, Added checks to validate financial type to...
authorPradeep Nayak <pradpnayak@gmail.com>
Wed, 6 Jul 2016 03:18:01 +0000 (08:48 +0530)
committercolemanw <coleman@civicrm.org>
Wed, 6 Jul 2016 03:18:01 +0000 (23:18 -0400)
* CRM-16189, Added checks to validate financial type to have deferred relationship

----------------------------------------
* CRM-16189: Improve support for Accrual Method bookkeeping
  https://issues.civicrm.org/jira/browse/CRM-16189

* CRM-16189, fixed notice error and code stylings

----------------------------------------
* CRM-16189: Improve support for Accrual Method bookkeeping
  https://issues.civicrm.org/jira/browse/CRM-16189

* CRM-16189, updated code to include error msg

----------------------------------------
* CRM-16189: Improve support for Accrual Method bookkeeping
  https://issues.civicrm.org/jira/browse/CRM-16189

CRM/Event/BAO/Event.php
CRM/Event/Form/ManageEvent/Fee.php
CRM/Member/BAO/MembershipType.php
CRM/Member/Form/MembershipType.php
CRM/Price/BAO/PriceFieldValue.php
CRM/Price/BAO/PriceSet.php
CRM/Price/Form/Field.php
CRM/Price/Form/Option.php
CRM/Price/Form/Set.php

index 6a42e2488395269c461a9c703cd0c0414312b86a..d5419f8458eb8d0a9e661b8c2cf788a4a2d6cae7 100644 (file)
@@ -95,6 +95,14 @@ class CRM_Event_BAO_Event extends CRM_Event_DAO_Event {
       CRM_Utils_Hook::pre('create', 'Event', NULL, $params);
     }
 
+    // CRM-16189
+    $isError = CRM_Financial_BAO_FinancialAccount::validateFinancialType(
+      CRM_Utils_Array::value('financial_type_id', $params)
+    );
+    if ($isError) {
+      throw new CRM_Core_Exception(ts('Deferred revenue account is not configured for selected financial type. 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'));
+    }
+
     $event = new CRM_Event_DAO_Event();
 
     $event->copyValues($params);
index adef3c6ca8f19f53a3607890a75a18e72e8c0aed..c86240e146a570a7e6cb334d86695af30035bcdc 100644 (file)
@@ -521,6 +521,11 @@ class CRM_Event_Form_ManageEvent_Fee extends CRM_Event_Form_ManageEvent {
         }
       }
     }
+    // CRM-16189
+    $isError = CRM_Financial_BAO_FinancialAccount::validateFinancialType($values['financial_type_id']);
+    if ($isError) {
+      $errors['financial_type_id'] = ts('Deferred revenue account is not configured for selected financial type. 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');
+    }
     return empty($errors) ? TRUE : $errors;
   }
 
index 5b26ab77f4ad0706fb4784355e7ca50f294553ca..1d29b8e7aae619c460b7c592e1088b2a552cedcd 100644 (file)
@@ -106,6 +106,14 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
       }
     }
 
+    // CRM-16189
+    $isError = CRM_Financial_BAO_FinancialAccount::validateFinancialType(
+      CRM_Utils_Array::value('financial_type_id', $params)
+    );
+    if ($isError) {
+      throw new CRM_Core_Exception(ts('Deferred revenue account is not configured for selected financial type. 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'));
+    }
+
     // action is taken depending upon the mode
     $membershipType = new CRM_Member_DAO_MembershipType();
     $membershipType->copyValues($params);
index b695c8b6dbeb4c269fd65f7fe757399876c76c72..3cd0264a46de1a560514d4c566b1b08ced6b8f3c 100644 (file)
@@ -282,6 +282,12 @@ class CRM_Member_Form_MembershipType extends CRM_Member_Form_MembershipConfig {
       }
     }
 
+    // CRM-16189
+    $isError = CRM_Financial_BAO_FinancialAccount::validateFinancialType($params['financial_type_id']);
+    if ($isError) {
+      $errors['financial_type_id'] = ts('Deferred revenue account is not configured for selected financial type. 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');
+    }
+
     return empty($errors) ? TRUE : $errors;
   }
 
index a89b25c0ede89eb4087bebab9636bff89bef486c..9a6fdf979ca08b498cc86b691c0a879754e2af16 100644 (file)
@@ -61,6 +61,19 @@ class CRM_Price_BAO_PriceFieldValue extends CRM_Price_DAO_PriceFieldValue {
         self::updateAmountAndFeeLevel($id, $prevLabel, $params['label']);
       }
     }
+    // CRM-16189
+    $priceFieldID = CRM_Utils_Array::value('price_field_id', $params);
+    if (!$priceFieldID) {
+      $priceFieldID = CRM_Core_DAO::getFieldValue('CRM_Price_BAO_PriceFieldValue', $id, 'price_field_id');
+    }
+    $isError = CRM_Financial_BAO_FinancialAccount::validateFinancialType(
+      CRM_Utils_Array::value('financial_type_id', $params),
+      $priceFieldID,
+      'PriceField'
+    );
+    if ($isError) {
+      throw new CRM_Core_Exception(ts('Deferred revenue account is not configured for selected financial type. 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'));
+    }
     if (!empty($params['is_default'])) {
       $query = 'UPDATE civicrm_price_field_value SET is_default = 0 WHERE  price_field_id = %1';
       $p = array(1 => array($params['price_field_id'], 'Integer'));
index 1b52e187fe0ddc30aef2018e3e1060f84e127156..74e3e5da461347371df7b13d7f421e1ff777fbc0 100644 (file)
@@ -65,9 +65,29 @@ class CRM_Price_BAO_PriceSet extends CRM_Price_DAO_PriceSet {
     if (empty($params['id']) && empty($params['name'])) {
       $params['name'] = CRM_Utils_String::munge($params['title'], '_', 242);
     }
+    $priceSetID = NULL;
+    $validatePriceSet = TRUE;
     if (!empty($params['extends']) && is_array($params['extends'])) {
+      if (!array_key_exists(CRM_Core_Component::getComponentID('CiviEvent'), $params['extends'])
+        || !array_key_exists(CRM_Core_Component::getComponentID('CiviMember'), $params['extends'])
+      ) {
+        $validatePriceSet = FALSE;
+      }
       $params['extends'] = CRM_Utils_Array::implodePadded($params['extends']);
     }
+    else {
+      $priceSetID = CRM_Utils_Array::value('id', $params);
+    }
+    // CRM-16189
+    if ($validatePriceSet) {
+      $isError = CRM_Financial_BAO_FinancialAccount::validateFinancialType(
+        CRM_Utils_Array::value('financial_type_id', $params),
+        $priceSetID
+      );
+      if ($isError) {
+        throw new CRM_Core_Exception(ts('Deferred revenue account is not configured for selected financial type. 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'));
+      }
+    }
     $priceSetBAO = new CRM_Price_BAO_PriceSet();
     $priceSetBAO->copyValues($params);
     if (self::eventPriceSetDomainID()) {
index 5c50b9ff72a49d8f04d896da0ee3812028a0c013..57c4f09d479fca32eecfa37d6b44d9b889de8e0f 100644 (file)
@@ -399,15 +399,21 @@ class CRM_Price_Form_Field extends CRM_Core_Form {
      *  Incomplete row checking is also required.
      */
     if (($form->_action & CRM_Core_Action::ADD || $form->_action & CRM_Core_Action::UPDATE) &&
-      $fields['html_type'] == 'Text' && $fields['price'] == NULL
+      $fields['html_type'] == 'Text'
     ) {
-      $errors['price'] = ts('Price is a required field');
-    }
-
-    if (($form->_action & CRM_Core_Action::ADD || $form->_action & CRM_Core_Action::UPDATE) &&
-      $fields['html_type'] == 'Text' && $fields['financial_type_id'] == ''
-    ) {
-      $errors['financial_type_id'] = ts('Financial Type is a required field');
+      if ($fields['price'] == NULL) {
+        $errors['price'] = ts('Price is a required field');
+      }
+      if ($fields['financial_type_id'] == '') {
+        $errors['financial_type_id'] = ts('Financial Type is a required field');
+      }
+      else {
+        // CRM-16189
+        $isError = CRM_Financial_BAO_FinancialAccount::validateFinancialType($fields['financial_type_id'], $form->_sid);
+        if ($isError) {
+          $errors['financial_type_id'] = ts('Deferred revenue account is not configured for selected financial type. 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');
+        }
+      }
     }
 
     //avoid the same price field label in Within PriceSet
@@ -524,6 +530,11 @@ class CRM_Price_Form_Field extends CRM_Core_Form {
           }
 
           $_flagOption = $_emptyRow = 0;
+          // CRM-16189
+          $isError = CRM_Financial_BAO_FinancialAccount::validateFinancialType($fields['option_financial_type_id'][$index], $form->_fid, 'PriceField');
+          if ($isError) {
+            $errors["option_financial_type_id[{$index}]"] = ts('Deferred revenue account is not configured for selected financial type. 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');
+          }
         }
 
         if (!empty($memTypesIDS)) {
index a29cf32631ca13f9e126107af35cd6c23c931bb2..e61012232f10e9741267cc62a312eae581f24821 100644 (file)
@@ -285,7 +285,11 @@ class CRM_Price_Form_Option extends CRM_Core_Form {
     ) {
       $errors['count'] = ts('Participant count can not be greater than max participants.');
     }
-
+    // CRM-16189
+    $isError = CRM_Financial_BAO_FinancialAccount::validateFinancialType($fields['financial_type_id'], $form->_fid, 'PriceField');
+    if ($isError) {
+      $errors['financial_type_id'] = ts('Deferred revenue account is not configured for selected financial type. 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');
+    }
     return empty($errors) ? TRUE : $errors;
   }
 
index c1a87bc643c477cf4d4046fc5c1db9faff3c3bbc..b78bc7de04e7e8f53994c132d9e65cc6f5c84777 100644 (file)
@@ -102,6 +102,16 @@ class CRM_Price_Form_Set extends CRM_Core_Form {
     if ($asciiValue >= 48 && $asciiValue <= 57) {
       $errors['title'] = ts("Name cannot not start with a digit");
     }
+    // CRM-16189
+    if (!empty($fields['extends'])
+      && (array_key_exists(CRM_Core_Component::getComponentID('CiviEvent'), $fields['extends'])
+        || array_key_exists(CRM_Core_Component::getComponentID('CiviMember'), $fields['extends']))
+    ) {
+      $isError = CRM_Financial_BAO_FinancialAccount::validateFinancialType($fields['financial_type_id']);
+      if ($isError) {
+        $errors['financial_type_id'] = ts('Deferred revenue account is not configured for selected financial type. 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');
+      }
+    }
     return empty($errors) ? TRUE : $errors;
   }