42 lines
1.8 KiB
Python
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)
|