2
0
account-financial-tools/account_move_line_tax_editable/models/account_move_line.py

48 lines
1.8 KiB
Python

# Copyright 2017 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class AccountMoveLine(models.Model):
_inherit = "account.move.line"
is_tax_editable = fields.Boolean(
string="Is tax data editable?", compute="_compute_is_tax_editable"
)
tax_line_id = fields.Many2one(inverse="_inverse_tax_line_id")
@api.depends("move_id.state")
def _compute_is_tax_editable(self):
for rec in self:
rec.is_tax_editable = rec.move_id.state == "draft"
def _inverse_tax_line_id(self):
for rec in self:
repartition_type = rec.tax_repartition_line_id.repartition_type or "tax"
factor_percent = rec.tax_repartition_line_id.factor_percent or 100
has_account = bool(rec.tax_repartition_line_id.account_id)
if rec.move_id.move_type in ("out_refund", "in_refund"):
repartition_lines = rec.tax_line_id.refund_repartition_line_ids
else:
repartition_lines = rec.tax_line_id.invoice_repartition_line_ids
lines = repartition_lines.filtered(
lambda rl: rl.repartition_type == repartition_type
and rl.factor_percent == factor_percent
)
if len(lines) > 1:
lines = (
lines.filtered(
lambda rl: rl.repartition_type == "base"
or has_account is bool(rl.account_id)
)[:1]
or lines[:1]
)
elif not lines:
lines = repartition_lines.filtered(
lambda rl: rl.repartition_type == repartition_type
)[:1]
rec.tax_repartition_line_id = lines