Purpose ======= Several actions are done even if nothing has changed on the configuration. Example: Writing on a cron the same value makes a dummy write-lock on the table ... Part-of: odoo/odoo#82999
72 lines
3.8 KiB
Python
72 lines
3.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class ResConfigSettings(models.TransientModel):
|
|
_inherit = 'res.config.settings'
|
|
|
|
module_project_forecast = fields.Boolean(string="Planning")
|
|
module_hr_timesheet = fields.Boolean(string="Task Logs")
|
|
group_subtask_project = fields.Boolean("Sub-tasks", implied_group="project.group_subtask_project")
|
|
group_project_rating = fields.Boolean("Customer Ratings", implied_group='project.group_project_rating')
|
|
group_project_stages = fields.Boolean("Project Stages", implied_group="project.group_project_stages")
|
|
group_project_recurring_tasks = fields.Boolean("Recurring Tasks", implied_group="project.group_project_recurring_tasks")
|
|
group_project_task_dependencies = fields.Boolean("Task Dependencies", implied_group="project.group_project_task_dependencies")
|
|
rating_status = fields.Selection(
|
|
[('stage', 'Rating when changing stage'),
|
|
('periodic', 'Periodic rating')
|
|
], 'Customer Ratings Status', default="stage", required=True, config_parameter='project.rating_status')
|
|
rating_status_period = fields.Selection([
|
|
('daily', 'Daily'),
|
|
('weekly', 'Weekly'),
|
|
('bimonthly', 'Twice a Month'),
|
|
('monthly', 'Once a Month'),
|
|
('quarterly', 'Quarterly'),
|
|
('yearly', 'Yearly')], 'Rating Frequency', required=True, default='monthly', config_parameter='project.rating_status_period')
|
|
|
|
|
|
@api.model
|
|
def _get_basic_project_domain(self):
|
|
return []
|
|
|
|
def set_values(self):
|
|
# Ensure that settings on existing projects match the above fields
|
|
projects = self.env["project.project"].search([])
|
|
global_features = { # key: config_flag, value: project_flag
|
|
"group_project_rating": "rating_active",
|
|
"group_project_recurring_tasks": "allow_recurring_tasks",
|
|
}
|
|
basic_project_features = {
|
|
"group_subtask_project": "allow_subtasks",
|
|
"group_project_task_dependencies": "allow_task_dependencies",
|
|
}
|
|
config_feature_vals = {config_flag: self[config_flag]
|
|
for config_flag in global_features.keys() | basic_project_features.keys()}
|
|
|
|
def update_projects(projects, features):
|
|
for (config_flag, project_flag) in features.items():
|
|
config_flag_global = "project." + config_flag
|
|
config_feature_enabled = config_feature_vals[config_flag]
|
|
if self.user_has_groups(config_flag_global) != config_feature_enabled:
|
|
projects[project_flag] = config_feature_enabled
|
|
|
|
# update for all projects
|
|
update_projects(projects, global_features)
|
|
# update for basic projects
|
|
update_projects(projects.filtered_domain(self._get_basic_project_domain()), basic_project_features)
|
|
|
|
# Hide the task dependency changes subtype when the dependency setting is disabled
|
|
task_dep_change_subtype_id = self.env.ref('project.mt_task_dependency_change')
|
|
project_task_dep_change_subtype_id = self.env.ref('project.mt_project_task_dependency_change')
|
|
if task_dep_change_subtype_id.hidden != (not self['group_project_task_dependencies']):
|
|
task_dep_change_subtype_id.hidden = not self['group_project_task_dependencies']
|
|
project_task_dep_change_subtype_id.hidden = not self['group_project_task_dependencies']
|
|
# Hide Project Stage Changed mail subtype according to the settings
|
|
project_stage_change_mail_type = self.env.ref('project.mt_project_stage_change')
|
|
if project_stage_change_mail_type.hidden == self['group_project_stages']:
|
|
project_stage_change_mail_type.hidden = not self['group_project_stages']
|
|
|
|
super().set_values()
|