45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
from odoo import models
|
|
|
|
|
|
class AccountMove(models.Model):
|
|
_name = 'account.move'
|
|
_inherit = ['account.move', 'account.external.tax.mixin']
|
|
|
|
def button_draft(self):
|
|
res = super().button_draft()
|
|
self._filtered_external_tax_moves()._uncommit_external_taxes()
|
|
return res
|
|
|
|
def unlink(self):
|
|
self._filtered_external_tax_moves()._void_external_taxes()
|
|
return super().unlink()
|
|
|
|
def _post(self, soft=True):
|
|
""" Ensure taxes are correct before posting. """
|
|
self._get_and_set_external_taxes_on_eligible_records()
|
|
return super()._post(soft=soft)
|
|
|
|
def _filtered_external_tax_moves(self):
|
|
return self.filtered(lambda move: move.is_tax_computed_externally and
|
|
not move._is_downpayment())
|
|
|
|
def _get_and_set_external_taxes_on_eligible_records(self):
|
|
""" account.external.tax.mixin override. """
|
|
eligible_moves = self._filtered_external_tax_moves().filtered(lambda move: move.state != 'posted')
|
|
eligible_moves._set_external_taxes(eligible_moves._get_external_taxes())
|
|
return super()._get_and_set_external_taxes_on_eligible_records()
|
|
|
|
def _get_line_data_for_external_taxes(self):
|
|
""" account.external.tax.mixin override. """
|
|
res = []
|
|
base_lines_values = [value for value in self._get_rounded_base_and_tax_lines()[0] if not value['record']._get_downpayment_lines()]
|
|
|
|
for base_line in base_lines_values:
|
|
res.append({
|
|
'base_line': base_line,
|
|
'description': base_line['record'].name,
|
|
})
|
|
|
|
return res
|