|
|
"""
Note: as total_amount can be set directly by the user when the currency_rate is overridden,
the tax must be computed after the total_amount.
"""
AccountTax = self.env['account.tax']
for expense in self:
if not expense.company_id:
# This would be happening when emptying the required company_id field, triggering the "onchange"s.
# A traceback would occur because company_currency_id would be set to False.
# Instead of using the env company, recomputing the interface just to be blocked when trying to save
# we choose not to recompute anything and wait for a proper company to be inputted.
continue
if expense.is_multiple_currency:
base_line = expense._prepare_base_line_for_taxes_computation(
price_unit=expense.total_amount,
quantity=1.0,
currency=expense.company_currency_id,
)
AccountTax._add_tax_details_in_base_line(base_line, expense.company_id)
AccountTax._round_base_lines_tax_details([base_line], expense.company_id)
tax_details = base_line['tax_details']
expense.tax_amount = tax_details['total_included_currency'] - tax_details['total_excluded_currency']
expense.untaxed_amount = tax_details['total_excluded_currency']
else: # Mono-currency case computation shortcut
expense.tax_amount = expense.tax_amount_currency
expense.untaxed_amount = expense.untaxed_amount_currency
|
|