[FIX] crm: prevent crash due to invalid system parameter
Right now, if someone changes the `crm.pls_start_date` system parameter to something that is not valid, opening a settings gives you traceback. This commit improves the behavior by making sure that the compute field on settings page `predictive_lead_scoring_start_date` always contains a valid date. For doing so, if the system parameter is not a valid date(or not set or deleted), we set the above field to the date 8 days prior to current date, and thus, when saving the settings, the system parameter is again set with a valid date. closes odoo/odoo#66988 Taskid: 2448248 X-original-commit: 19577c40f8f2878286ef63da5d30b341d7ab5cbf Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
committed by
Dharmraj Jhala
parent
daeab8929e
commit
f56205f85a
@@ -1,6 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from datetime import timedelta
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from odoo import api, exceptions, fields, models, _
|
||||
@@ -102,7 +103,16 @@ class ResConfigSettings(models.TransientModel):
|
||||
""" As config_parameters does not accept Date field,
|
||||
we get the date back from the Char config field, to ease the configuration in config panel """
|
||||
for setting in self:
|
||||
setting.predictive_lead_scoring_start_date = fields.Date.to_date(setting.predictive_lead_scoring_start_date_str)
|
||||
lead_scoring_start_date = setting.predictive_lead_scoring_start_date_str
|
||||
# if config param is deleted / empty, set the date 8 days prior to current date
|
||||
if not lead_scoring_start_date:
|
||||
setting.predictive_lead_scoring_start_date = fields.Date.to_date(fields.Date.today() - timedelta(days=8))
|
||||
else:
|
||||
try:
|
||||
setting.predictive_lead_scoring_start_date = fields.Date.to_date(lead_scoring_start_date)
|
||||
except ValueError:
|
||||
# the config parameter is malformed, so set the date 8 days prior to current date
|
||||
setting.predictive_lead_scoring_start_date = fields.Date.to_date(fields.Date.today() - timedelta(days=8))
|
||||
|
||||
def _inverse_pls_start_date_str(self):
|
||||
""" As config_parameters does not accept Date field,
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from datetime import timedelta
|
||||
|
||||
from odoo.tests.common import TransactionCase
|
||||
from odoo.tests import Form
|
||||
from odoo import tools
|
||||
@@ -425,3 +427,24 @@ class TestCRMPLS(TransactionCase):
|
||||
self.assertEqual(tools.float_compare(lead_tag_1.automated_probability, 28.6, 2), 0)
|
||||
self.assertEqual(tools.float_compare(lead_tag_2.automated_probability, 28.6, 2), 0)
|
||||
self.assertEqual(tools.float_compare(lead_tag_1_2.automated_probability, 28.6, 2), 0)
|
||||
|
||||
def test_settings_pls_start_date(self):
|
||||
# We test here that settings never crash due to ill-configured config param 'crm.pls_start_date'
|
||||
set_param = self.env['ir.config_parameter'].sudo().set_param
|
||||
str_date_8_days_ago = Date.to_string(Date.today() - timedelta(days=8))
|
||||
resConfig = self.env['res.config.settings']
|
||||
|
||||
set_param("crm.pls_start_date", "2021-10-10")
|
||||
res_config_new = resConfig.new()
|
||||
self.assertEqual(Date.to_string(res_config_new.predictive_lead_scoring_start_date),
|
||||
"2021-10-10", "If config param is a valid date, date in settings should match with config param")
|
||||
|
||||
set_param("crm.pls_start_date", "")
|
||||
res_config_new = resConfig.new()
|
||||
self.assertEqual(Date.to_string(res_config_new.predictive_lead_scoring_start_date),
|
||||
str_date_8_days_ago, "If config param is empty, date in settings should be set to 8 days before today")
|
||||
|
||||
set_param("crm.pls_start_date", "One does not simply walk into system parameters to corrupt them")
|
||||
res_config_new = resConfig.new()
|
||||
self.assertEqual(Date.to_string(res_config_new.predictive_lead_scoring_start_date),
|
||||
str_date_8_days_ago, "If config param is not a valid date, date in settings should be set to 8 days before today")
|
||||
|
||||
Reference in New Issue
Block a user