+ /**
+ * Function to check line items
+ *
+ * @param array $params
+ * array of order params.
+ *
+ */
+ public static function checkLineItems(&$params) {
+ $totalAmount = CRM_Utils_Array::value('total_amount', $params);
+ $lineItemAmount = 0;
+ foreach ($params['line_items'] as &$lineItems) {
+ foreach ($lineItems['line_item'] as &$item) {
+ if (empty($item['financial_type_id'])) {
+ $item['financial_type_id'] = $params['financial_type_id'];
+ }
+ $lineItemAmount += $item['line_total'];
+ }
+ }
+ if (!isset($totalAmount)) {
+ $params['total_amount'] = $lineItemAmount;
+ }
+ elseif ($totalAmount != $lineItemAmount) {
+ throw new API_Exception("Line item total doesn't match with total amount.");
+ }
+ }
+
+ /**
+ * Get the financial account for the item associated with the new transaction.
+ *
+ * @param array $params
+ * @param CRM_Financial_BAO_FinancialItem $prevFinancialItem
+ *
+ * @return int
+ */
+ public static function getFinancialAccountForStatusChangeTrxn($params, $prevFinancialItem) {
+
+ if (!empty($params['financial_account_id'])) {
+ return $params['financial_account_id'];
+ }
+ $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus($params['contribution_status_id'], 'name');
+ $preferredAccountsRelationships = array(
+ 'Refunded' => 'Credit/Contra Revenue Account is',
+ 'Chargeback' => 'Chargeback Account is',
+ );
+ if (in_array($contributionStatus, array_keys($preferredAccountsRelationships))) {
+ $financialTypeID = !empty($params['financial_type_id']) ? $params['financial_type_id'] : $params['prevContribution']->financial_type_id;
+ return CRM_Financial_BAO_FinancialAccount::getFinancialAccountForFinancialTypeByRelationship(
+ $financialTypeID,
+ $preferredAccountsRelationships[$contributionStatus]
+ );
+ }
+ return $prevFinancialItem->financial_account_id;
+ }
+