}
}
+ /**
+ * Function use to check check line items
+ *
+ * @param array $params
+ * array of order params.
+ *
+ * @return string
+ */
+ 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) {
+ return "Line item total doesn't match with total amount.";
+ }
+ return NULL;
+ }
+
}
return array($lineItems, $contributions);
}
+ /**
+ * checkLineItems() check if total amount matches the sum of line total
+ */
+ public function testcheckLineItems() {
+ $params = array(
+ 'contact_id' => 202,
+ 'receive_date' => '2010-01-20',
+ 'total_amount' => 100,
+ 'financial_type_id' => 3,
+ 'line_items' => array(
+ array(
+ 'line_item' => array(
+ array(
+ 'entity_table' => 'civicrm_contribution',
+ 'price_field_id' => 8,
+ 'price_field_value_id' => 16,
+ 'label' => 'test 1',
+ 'qty' => 1,
+ 'unit_price' => 100,
+ 'line_total' => 100,
+ ),
+ array(
+ 'entity_table' => 'civicrm_contribution',
+ 'price_field_id' => 8,
+ 'price_field_value_id' => 17,
+ 'label' => 'Test 2',
+ 'qty' => 1,
+ 'unit_price' => 200,
+ 'line_total' => 200,
+ 'financial_type_id' => 1,
+ ),
+ ),
+ 'params'=> array(),
+ ),
+ )
+ );
+ $error = CRM_Contribute_BAO_Contribution::checkLineItems($params);
+ $this->assertEquals("Line item total doesn't match with total amount.", $error);
+ $this->assertEquals(3, $params['line_items'][0]['line_item'][0]['financial_type_id']);
+ $params['total_amount'] = 300;
+ $error = CRM_Contribute_BAO_Contribution::checkLineItems($params);
+ $this->assertEquals(NULL, $error);
+ }
+
}