$receiveDate = CRM_Utils_Date::isoToMysql($params['contribution']->receive_date);
}
- $financialAccount = self::getFinancialAccountForStatusChangeTrxn($params, $prevFinancialItem['financial_account_id']);
+ $financialAccount = self::getFinancialAccountForStatusChangeTrxn($params, CRM_Utils_Array::value('financial_account_id', $prevFinancialItem));
$currency = $params['prevContribution']->currency;
if ($params['contribution']->currency) {
'contact_id' => $params['prevContribution']->contact_id,
'currency' => $currency,
'amount' => self::getFinancialItemAmountFromParams($inputParams, $context, $lineItemDetails, $isARefund, $previousLineItemTotal),
- 'description' => $prevFinancialItem['description'],
+ 'description' => CRM_Utils_Array::value('description', $prevFinancialItem),
'status_id' => $prevFinancialItem['status_id'],
'financial_account_id' => $financialAccount,
'entity_table' => 'civicrm_line_item',
$params['line_item'][$fieldId][$fieldValueId]['deferred_line_total'] = $itemParams['amount'];
$params['line_item'][$fieldId][$fieldValueId]['financial_item_id'] = $financialItem->id;
- if ($lineItemDetails['tax_amount'] && $lineItemDetails['tax_amount'] !== 'null') {
+ if (($lineItemDetails['tax_amount'] && $lineItemDetails['tax_amount'] !== 'null') || ($context == 'changeFinancialType')) {
$invoiceSettings = Civi::settings()->get('contribution_invoice_settings');
$taxTerm = CRM_Utils_Array::value('tax_term', $invoiceSettings);
$taxAmount = $lineItemDetails['tax_amount'];
- if ($previousLineItemTotal != $lineItemDetails['line_total']) {
+ if ($context == 'changeFinancialType' && $lineItemDetails['tax_amount'] === 'null') {
+ // reverse the Sale Tax amount if there is no tax rate associated with new Financial Type
+ $taxAmount = CRM_Utils_Array::value('tax_amount', CRM_Utils_Array::value($fieldValueId, $previousLineItems), 0);
+ }
+ elseif ($previousLineItemTotal != $lineItemDetails['line_total']) {
$taxAmount -= CRM_Utils_Array::value('tax_amount', CRM_Utils_Array::value($fieldValueId, $previousLineItems), 0);
}
$itemParams['amount'] = self::getMultiplier($params['contribution']->contribution_status_id, $context) * $taxAmount;
}
return $lineTotal;
}
- else if ($context == 'changeFinancialType') {
+ elseif ($context == 'changeFinancialType') {
return -$lineItemDetails['line_total'];
}
elseif ($context == 'changedStatus') {