addons-cm/project_task_analytic_account_sync/models/project_task.py

42 lines
1.8 KiB
Python

# Copyright 2026 Criptomart
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, models
class ProjectTask(models.Model):
_inherit = "project.task"
@api.depends("project_id.analytic_account_id")
def _compute_analytic_account_id(self):
super()._compute_analytic_account_id()
for task in self:
expected = (
task.project_id.analytic_account_id if task.project_id else False
)
if task.analytic_account_id != expected:
task.analytic_account_id = expected
def write(self, vals):
if "project_id" in vals and "analytic_account_id" not in vals:
# Project changed: force the correct account from the new project
new_project = self.env["project.project"].browse(vals["project_id"])
vals["analytic_account_id"] = (
new_project.analytic_account_id.id if new_project else False
)
elif "analytic_account_id" in vals and "project_id" not in vals:
# Validate provided account against the current project
for task in self:
expected = (
task.project_id.analytic_account_id.id if task.project_id else False
)
if vals["analytic_account_id"] != expected:
vals["analytic_account_id"] = expected
break
elif "project_id" in vals and "analytic_account_id" in vals:
# Both changed: force account from the new project
new_project = self.env["project.project"].browse(vals["project_id"])
vals["analytic_account_id"] = (
new_project.analytic_account_id.id if new_project else False
)
return super().write(vals)