$trxnParams['from_financial_account_id'] = $params['to_financial_account_id'];
}
+ /**
+ * Calculate financial item amount when contribution is updated.
+ *
+ * @param array $params
+ * contribution params
+ * @param array $amountParams
+ *
+ * @param string $context
+ *
+ * @return float
+ */
+ public static function calculateFinancialItemAmount($params, $amountParams, $context) {
+ if (!empty($params['is_quick_config'])) {
+ $amount = $amountParams['item_amount'];
+ if (!$amount) {
+ $amount = $params['total_amount'];
+ if ($context === NULL) {
+ $amount -= CRM_Utils_Array::value('tax_amount', $params, 0);
+ }
+ }
+ }
+ else {
+ $amount = $amountParams['line_total'];
+ if ($context == 'changedAmount') {
+ $amount -= $amountParams['previous_line_total'];
+ }
+ $amount *= $amountParams['diff'];
+ }
+ return $amount;
+ }
+
}
$this->assertFalse($allowUpdate);
}
+ /**
+ * Test calculateFinancialItemAmount().
+ */
+ public function testcalculateFinancialItemAmount() {
+ $testParams = array(
+ array(
+ 'params' => array(),
+ 'amountParams' => array(
+ 'line_total' => 100,
+ 'previous_line_total' => 300,
+ 'diff' => 1,
+ ),
+ 'context' => 'changedAmount',
+ 'expectedItemAmount' => -200,
+ ),
+ array(
+ 'params' => array(),
+ 'amountParams' => array(
+ 'line_total' => 100,
+ 'previous_line_total' => 100,
+ 'diff' => -1,
+ ),
+ 'context' => 'changePaymentInstrument',
+ 'expectedItemAmount' => -100,
+ ),
+ array(
+ 'params' => array(
+ 'is_quick_config' => TRUE,
+ 'total_amount' => 110,
+ 'tax_amount' => 10,
+ ),
+ 'amountParams' => array(
+ 'item_amount' => 100,
+ ),
+ 'context' => 'changedAmount',
+ 'expectedItemAmount' => 100,
+ ),
+ array(
+ 'params' => array(
+ 'is_quick_config' => TRUE,
+ 'total_amount' => 110,
+ 'tax_amount' => 10,
+ ),
+ 'amountParams' => array(
+ 'item_amount' => NULL,
+ ),
+ 'context' => 'changedAmount',
+ 'expectedItemAmount' => 110,
+ ),
+ array(
+ 'params' => array(
+ 'is_quick_config' => TRUE,
+ 'total_amount' => 110,
+ 'tax_amount' => 10,
+ ),
+ 'amountParams' => array(
+ 'item_amount' => NULL,
+ ),
+ 'context' => NULL,
+ 'expectedItemAmount' => 100,
+ ),
+ );
+ foreach ($testParams as $params) {
+ $itemAmount = CRM_Contribute_BAO_Contribution::calculateFinancialItemAmount($params['params'], $params['amountParams'], $params['context']);
+ $this->assertEquals($itemAmount, $params['expectedItemAmount'], 'Invalid Financial Item amount.');
+ }
+ }
+
}