Odoo18-Base/addons/hr/models/mail_activity_plan.py
2025-01-06 10:57:38 +07:00

46 lines
2.0 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class MailActivityPlan(models.Model):
_inherit = 'mail.activity.plan'
department_id = fields.Many2one(
'hr.department', check_company=True,
compute='_compute_department_id', ondelete='cascade', readonly=False, store=True)
department_assignable = fields.Boolean(compute='_compute_department_assignable')
@api.constrains('res_model')
def _check_compatibility_with_model(self):
""" Check that when the model is updated to a model different from employee,
there are no remaining specific values to employee. """
plan_tocheck = self.filtered(lambda plan: not plan.department_assignable)
failing_plans = plan_tocheck.filtered('department_id')
if failing_plans:
raise UserError(
_('Plan %(plan_names)s cannot use a department as it is used only for some HR plans.',
plan_names=', '.join(failing_plans.mapped('name')))
)
plan_tocheck = self.filtered(lambda plan: plan.res_model != 'hr.employee')
failing_templates = plan_tocheck.template_ids.filtered(
lambda tpl: tpl.responsible_type in {'coach', 'manager', 'employee'}
)
if failing_templates:
raise UserError(
_('Plan activities %(template_names)s cannot use coach, manager or employee responsible as it is used only for employee plans.',
template_names=', '.join(failing_templates.mapped('activity_type_id.name')))
)
@api.depends('res_model')
def _compute_department_assignable(self):
for plan in self:
plan.department_assignable = plan.res_model == 'hr.employee'
@api.depends('res_model')
def _compute_department_id(self):
for plan in self.filtered(lambda plan: not plan.department_assignable):
plan.department_id = False