from odoo import models, fields, api class AccountMove(models.Model): _inherit = "account.move" project_ids = fields.Many2many('project.project', name="Projects", compute='get_related_project_ids') project_count = fields.Integer("Project Count", compute='get_related_project_ids') projects_name = fields.Char('Project(s)', compute='get_related_project_ids') def action_open_projects(self): ''' Open related projects, in form or tree view depending on project numbers ''' project_ids = self.project_ids.ids action = self.env["ir.actions.actions"]._for_xml_id("project.open_view_project_all") if self.project_count == 1: action['res_id'] = project_ids[0] action['views'] = [[False, "form"]] else: action['views'] = [[False, "tree"], [False, "form"]] action['domain'] = [('id', 'in', project_ids)] del action['target'] #to display breadcrumbs return action @api.depends('line_ids.sale_line_ids') def get_related_project_ids(self): for move in self: projects = self.env['project.task'].search([('sale_order_id','in',move.line_ids.sale_line_ids.order_id.ids)]).project_id move.project_ids = projects.ids move.projects_name = ' ; '.join([p.name for p in projects]) move.project_count = len(projects)