From af357fecd61708b1e2e02c6e10021f7b792a5bb0 Mon Sep 17 00:00:00 2001 From: Kevin Baptiste Date: Thu, 22 Oct 2020 08:00:46 +0000 Subject: [PATCH] [IMP] hr: enforce selection of one advanced control option Before this commit, it was possible to activate the Advanced Presence Control feature without any advanced feature enabled. This commit enforces the selection of *at least* one of those option (email or IP). closes odoo/odoo#60498 Taskid: 2361870 Signed-off-by: Yannick Tivisse (yti) --- addons/hr/models/res_config_settings.py | 14 +++++++++++++- addons/hr_presence/__init__.py | 12 ++++++++++++ addons/hr_presence/__manifest__.py | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/addons/hr/models/res_config_settings.py b/addons/hr/models/res_config_settings.py index 80c972fa442..457188e9bb8 100644 --- a/addons/hr/models/res_config_settings.py +++ b/addons/hr/models/res_config_settings.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- -from odoo import fields, models +import threading +from odoo import fields, models, api, _ +from odoo.exceptions import ValidationError class ResConfigSettings(models.TransientModel): @@ -18,3 +20,13 @@ class ResConfigSettings(models.TransientModel): hr_presence_control_email_amount = fields.Integer(related="company_id.hr_presence_control_email_amount", readonly=False) hr_presence_control_ip_list = fields.Char(related="company_id.hr_presence_control_ip_list", readonly=False) hr_employee_self_edit = fields.Boolean(string="Employee Editing", config_parameter='hr.hr_employee_self_edit') + + @api.constrains('module_hr_presence', 'hr_presence_control_email', 'hr_presence_control_ip') + def _check_advanced_presence(self): + test_mode = self.env.registry.in_test_mode() or getattr(threading.currentThread(), 'testing', False) + if self.env.context.get('install_mode', False) or test_mode: + return + + for settings in self: + if settings.module_hr_presence and not (settings.hr_presence_control_email or settings.hr_presence_control_ip): + raise ValidationError(_('You should select at least one Advanced Presence Control option.')) diff --git a/addons/hr_presence/__init__.py b/addons/hr_presence/__init__.py index 7d34c7c054a..c7f0e376f24 100644 --- a/addons/hr_presence/__init__.py +++ b/addons/hr_presence/__init__.py @@ -3,3 +3,15 @@ from . import controllers from . import models + +from odoo import api, SUPERUSER_ID + + +def post_init_hook(cr, registry): + env = api.Environment(cr, SUPERUSER_ID, {}) + + email = env['ir.config_parameter'].get_param('hr_presence.hr_presence_control_email') + ip = env['ir.config_parameter'].get_param('hr_presence.hr_presence_control_ip') + + if not email and not ip: + env['ir.config_parameter'].sudo().set_param('hr_presence.hr_presence_control_email', True) diff --git a/addons/hr_presence/__manifest__.py b/addons/hr_presence/__manifest__.py index 05b27fca5ca..11060294d3e 100644 --- a/addons/hr_presence/__manifest__.py +++ b/addons/hr_presence/__manifest__.py @@ -26,4 +26,5 @@ Allows to contact directly the employee in case of unjustified absence. 'demo': [], 'installable': True, 'auto_install': False, + 'post_init_hook': 'post_init_hook' }