From ef1afb7b69610fa3ff783751ee544d7a0d020841 Mon Sep 17 00:00:00 2001 From: jem-odoo Date: Mon, 27 May 2019 09:51:06 +0000 Subject: [PATCH] [FIX] project_timesheet_holidays: multi company fixes In a multi company environment, some adjustment must be done: - the company of an internal project of a company should be in that company - the generate timesheet on holidays validation must be in the company the task (or internal project) The company should be correctly propagate to timesheets. Task-1999686 --- .../project_timesheet_holidays/models/hr_holidays.py | 1 + .../project_timesheet_holidays/models/res_company.py | 10 +++++++++- .../models/res_config_settings.py | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/addons/project_timesheet_holidays/models/hr_holidays.py b/addons/project_timesheet_holidays/models/hr_holidays.py index ada3b56acc1..e78420a0176 100644 --- a/addons/project_timesheet_holidays/models/hr_holidays.py +++ b/addons/project_timesheet_holidays/models/hr_holidays.py @@ -83,6 +83,7 @@ class Holidays(models.Model): 'date': fields.Date.to_string(day_date), 'holiday_id': holiday.id, 'employee_id': holiday.employee_id.id, + 'company_id': holiday_task.company_id.id or holiday_project.company_id.id, }) return super(Holidays, self)._validate_leave_request() diff --git a/addons/project_timesheet_holidays/models/res_company.py b/addons/project_timesheet_holidays/models/res_company.py index 948b4f3bffa..56b59e1b022 100644 --- a/addons/project_timesheet_holidays/models/res_company.py +++ b/addons/project_timesheet_holidays/models/res_company.py @@ -2,6 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError class Company(models.Model): @@ -14,6 +15,13 @@ class Company(models.Model): 'project.task', string="Time Off Task", domain="[('project_id', '=', leave_timesheet_project_id)]") + @api.constrains('leave_timesheet_project_id') + def _check_leave_timesheet_project_id_company(self): + for company in self: + if company.leave_timesheet_project_id: + if company.leave_timesheet_project_id.company_id != company: + raise ValidationError(_('The Internal Project of a company should be in that company.')) + def init(self): self.search([('leave_timesheet_project_id', '=', False)])._create_leave_project_task() @@ -40,7 +48,7 @@ class Company(models.Model): 'name': _('Time Off'), 'project_id': company.leave_timesheet_project_id.id, 'active': False, - 'company_id': False, + 'company_id': company.id, }) company.write({ 'leave_timesheet_task_id': task.id, diff --git a/addons/project_timesheet_holidays/models/res_config_settings.py b/addons/project_timesheet_holidays/models/res_config_settings.py index bbc0b0a12ce..2bf86555488 100644 --- a/addons/project_timesheet_holidays/models/res_config_settings.py +++ b/addons/project_timesheet_holidays/models/res_config_settings.py @@ -7,5 +7,5 @@ from odoo import fields, models class ResConfigSettings(models.TransientModel): _inherit = 'res.config.settings' - leave_timesheet_project_id = fields.Many2one(related='company_id.leave_timesheet_project_id', string="Internal Project", readonly=False) - leave_timesheet_task_id = fields.Many2one(related='company_id.leave_timesheet_task_id', string="Time Off Task", readonly=False) + leave_timesheet_project_id = fields.Many2one(related='company_id.leave_timesheet_project_id', string="Internal Project", domain="[('company_id', '=', company_id)]", readonly=False) + leave_timesheet_task_id = fields.Many2one(related='company_id.leave_timesheet_task_id', string="Time Off Task", domain="[('company_id', '=', company_id)]", readonly=False)