Merge pull request #4806 from civicrm/4.5
[civicrm-core.git] / CRM / Financial / BAO / FinancialItem.php
index 2427c08aecf55fc91614f00f37132587fc885754..273abab03878f232a181865b91cd44b3b16790e8 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.5                                                |
+ | CiviCRM version 4.6                                                |
  +--------------------------------------------------------------------+
  | Copyright CiviCRM LLC (c) 2004-2014                                |
  +--------------------------------------------------------------------+
 class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem {
 
   /**
-   * class constructor
+   * Class constructor
    */
   function __construct( ) {
     parent::__construct( );
   }
 
   /**
-   * Takes a bunch of params that are needed to match certain criteria and
-   * retrieves the relevant objects. Typically the valid params are only
-   * contact_id. We'll tweak this function to be more full featured over a period
-   * of time. This is the inverse function of create. It also stores all the retrieved
-   * values in the default array
+   * Fetch object based on array of properties
    *
    * @param array $params   (reference ) an assoc array of name/value pairs
    * @param array $defaults (reference ) an assoc array to hold the flattened values
    *
-   * @return object CRM_Contribute_BAO_FinancialItem object
+   * @return CRM_Contribute_BAO_FinancialItem object
    * @access public
    * @static
    */
@@ -67,16 +63,17 @@ class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem {
   }
 
   /**
-   * function to add the financial items and financial trxn
+   * Add the financial items and financial trxn
    *
    * @param object $lineItem     line item object
    * @param object $contribution contribution object
+   * @param boolean $taxTrxnID
    *
    * @access public
    * @static
    * @return void
    */
-  static function add($lineItem, $contribution) {
+  static function add($lineItem, $contribution, $taxTrxnID = FALSE) {
     $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
     $financialItemStatus = CRM_Core_PseudoConstant::get('CRM_Financial_DAO_FinancialItem', 'status_id');
     $itemStatus = NULL;
@@ -102,25 +99,35 @@ class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem {
       'status_id'         => $itemStatus,
     );
 
+    if ($taxTrxnID) {
+      $invoiceSettings = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME, 'contribution_invoice_settings');
+      $taxTerm = CRM_Utils_Array::value('tax_term', $invoiceSettings);
+      $params['amount'] = $lineItem->tax_amount;
+      $params['description'] = $taxTerm;
+      $accountRel = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Sales Tax Account is' "));
+    }
+    else {
+      $accountRel = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Income Account is' "));
+    }
     if ($lineItem->financial_type_id) {
       $searchParams = array(
         'entity_table'         => 'civicrm_financial_type',
         'entity_id'            => $lineItem->financial_type_id,
-        'account_relationship' => 1,
+        'account_relationship' => $accountRel,
       );
 
       $result = array();
       CRM_Financial_BAO_FinancialTypeAccount::retrieve( $searchParams, $result );
       $params['financial_account_id'] = CRM_Utils_Array::value( 'financial_account_id', $result );
     }
-
     $trxn = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contribution->id, 'ASC', TRUE);
     $trxnId['id'] = $trxn['financialTrxnId'];
+
     return self::create($params, NULL, $trxnId);
   }
 
   /**
-   * function to create the financial Items and financial enity trxn
+   * Create the financial Items and financial enity trxn
    *
    * @param array $params  associated array to create financial items
    * @param array $ids financial item ids
@@ -132,6 +139,14 @@ class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem {
    */
   static function create(&$params, $ids = NULL, $trxnIds = NULL) {
     $financialItem = new CRM_Financial_DAO_FinancialItem();
+    
+    if (!empty($ids['id'])) {
+      CRM_Utils_Hook::pre('edit', 'FinancialItem', $ids['id'], $params);
+    }
+    else {
+      CRM_Utils_Hook::pre('create', 'FinancialItem', NULL, $params);
+    }
+    
     $financialItem->copyValues($params);
     if (!empty($ids['id'])) {
       $financialItem->id = $ids['id'];
@@ -153,15 +168,21 @@ class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem {
       }
       $entity_trxn->save();
     }
+    if (!empty($ids['id'])) {
+      CRM_Utils_Hook::post('edit', 'FinancialItem', $financialItem->id, $financialItem);
+    }
+    else {      
+      CRM_Utils_Hook::post('create', 'FinancialItem', $financialItem->id, $financialItem);
+    }
     return $financialItem;
   }
 
   /**
-   * takes an associative array and creates a entity financial transaction object
+   * Takes an associative array and creates a entity financial transaction object
    *
    * @param array  $params (reference ) an assoc array of name/value pairs
    *
-   * @return object CRM_Core_BAO_FinancialTrxn object
+   * @return CRM_Core_BAO_FinancialTrxn object
    * @access public
    * @static
    */
@@ -173,13 +194,10 @@ class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem {
   }
 
   /**
-   * retrive entity financial trxn details
+   * Retrive entity financial trxn details
    *
    * @param array $params (reference ) an assoc array of name/value pairs
-   *
-   * @param bool $maxId
-   *
-   * @internal param bool $maxID to retrive max id
+   * @param bool $maxId to retrive max id
    *
    * @return array
    * @access public
@@ -212,7 +230,7 @@ class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem {
   }
 
   /**
-   * check if contact is present in financial_item table
+   * Check if contact is present in financial_item table
    *
    * CRM-12929
    *