Files
enterprise-addons/industry_fsm_report/models/project_project.py
T

60 lines
2.9 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
class ProjectProject(models.Model):
_inherit = "project.project"
allow_worksheets = fields.Boolean(
"Worksheets", compute="_compute_allow_worksheets", store=True, readonly=False)
worksheet_template_id = fields.Many2one(
'worksheet.template', compute="_compute_worksheet_template_id", store=True, readonly=False,
string="Worksheet Template",
domain="[('res_model', '=', 'project.task'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]")
@api.depends('is_fsm')
def _compute_allow_worksheets(self):
for project in self:
project.allow_worksheets = project.is_fsm
@api.depends('allow_worksheets', 'company_id')
def _compute_worksheet_template_id(self):
default_worksheet = self.env.ref('industry_fsm_report.fsm_worksheet_template', False)
project_ids = []
for project in self:
if not project.worksheet_template_id:
if project.allow_worksheets:
if default_worksheet and (not project.company_id or not default_worksheet.company_id or project.company_id in default_worksheet.company_id):
project.worksheet_template_id = default_worksheet
else:
project_ids.append(project.id)
else:
project.worksheet_template_id = False
elif (project.allow_worksheets and project.company_id != project.worksheet_template_id.company_id):
project_ids.append(project.id)
if project_ids:
projects = self.browse(project_ids)
WorksheetTemplate = self.env['worksheet.template']
if len(projects.company_id) == 1:
projects.worksheet_template_id = WorksheetTemplate.search(
[('company_id', 'in', [projects.company_id.id, False]), ('res_model', '=', 'project.task')],
limit=1,
order="company_id, sequence, id DESC",
)
else:
company_worksheets = WorksheetTemplate._read_group(
[('company_id', 'in', [*projects.company_id.ids, False]), ('res_model', '=', 'project.task')],
['company_id'],
['id:recordset'],
)
worksheet_mapping = {company.id: templates.sorted(key=lambda t: (t.sequence, -t.id))[:1] for company, templates in company_worksheets}
# Assign the appropriate worksheet template to each project
for project in projects:
project.worksheet_template_id = worksheet_mapping.get(
project.company_id.id,
worksheet_mapping.get(False, False) # Fallback to a template without a company
)