[IMP] base: Introduce generic methods get_default_field and set_fields

Method `get_default_fields`
===========================

Currently all the methods beginning by `get_default` are used to fetch their default values, usually by looking in the ir.config_parameter table.

As several methods `get_default_fields` have been defined in res_config classes, it better to define it in base and calling to super to avoid side effects like the following example
- 2 classes that override the same class and define the same method. In that case one method will never be called, as it is ovewritten by the other.

Method `set_fields`
===================

Currently all the methods beginning by `set_` are used to set their values, usually in the ir.config_parameter table.

As several methods `set_fields` have been defined in res_config classes, it better to define it in base and calling to super to avoid side effects like the following example
- 2 classes that override the same class and define the same method. In that case one method will never be called, as it is ovewritten by the other.

Methods `get_default_foo` and `set_foo`
=======================================

This commit deprecates the method starting with `get_default_` or `set_` in the res.config models. A warning is raised in that case.
This commit is contained in:
Yannick Tivisse
2017-06-19 17:37:38 +02:00
parent 3eb37589ab
commit 3055b00c44
10 changed files with 59 additions and 22 deletions
@@ -38,17 +38,20 @@ class BaseConfigSettings(models.TransientModel):
@api.model
def get_default_fields(self, fields):
res = super(BaseConfigSettings, self).get_default_fields(fields)
default_external_email_server = self.env['ir.config_parameter'].sudo().get_param('base_setup.default_external_email_server', default=False)
default_user_rights = self.env['ir.config_parameter'].sudo().get_param('base_setup.default_user_rights', default=False)
default_custom_report_footer = self.env['ir.config_parameter'].sudo().get_param('base_setup.default_custom_report_footer', default=False)
return {
res.update({
'default_external_email_server': default_external_email_server,
'default_user_rights': default_user_rights,
'default_custom_report_footer': default_custom_report_footer,
}
})
return res
@api.multi
def set_default_fields(self):
def set_fields(self):
super(BaseConfigSettings, self).set_fields()
self.env['ir.config_parameter'].sudo().set_param("base_setup.default_external_email_server", self.default_external_email_server)
self.env['ir.config_parameter'].sudo().set_param("base_setup.default_user_rights", self.default_user_rights)
self.env['ir.config_parameter'].sudo().set_param("base_setup.default_custom_report_footer", self.default_custom_report_footer)
@@ -21,13 +21,16 @@ class HrExpenseConfigSettings(models.TransientModel):
@api.model
def get_default_fields(self, fields):
return dict(
res = super(HrExpenseConfigSettings, self).get_default_fields(fields)
res.update(dict(
alias_prefix=self.env.ref('hr_expense.mail_alias_expense').alias_name,
use_mailgateway=self.env['ir.config_parameter'].sudo().get_param('hr_expense.use_mailgateway'),
)
))
return res
@api.multi
def set_fields(self):
super(HrExpenseConfigSettings, self).set_fields()
self.env.ref('hr_expense.mail_alias_expense').write({'alias_name': self.alias_prefix})
self.env['ir.config_parameter'].sudo().set_param('hr_expense.use_mailgateway', self.use_mailgateway)
+5 -2
View File
@@ -25,12 +25,15 @@ class MrpConfigSettings(models.TransientModel):
@api.model
def get_default_fields(self, fields):
return dict(
res = super(MrpConfigSettings, self).get_default_fields(fields)
res.update(dict(
use_manufacturing_lead=self.env['ir.config_parameter'].sudo().get_param('mrp.use_manufacturing_lead')
)
))
return res
@api.multi
def set_fields(self):
super(MrpConfigSettings, self).set_fields()
self.env['ir.config_parameter'].sudo().set_param('mrp.use_manufacturing_lead', self.use_manufacturing_lead)
@api.onchange('use_manufacturing_lead')
@@ -59,11 +59,14 @@ class PosConfiguration(models.TransientModel):
})
def get_default_fields(self, fields):
return dict(
res = super(PosConfiguration, self).get_default_fields(fields)
res.update(dict(
use_pos_sale_price=self.env['ir.config_parameter'].sudo().get_param('pos.use_pos_sale_price'),
pos_pricelist_setting=self.env['ir.config_parameter'].sudo().get_param('pos.pos_pricelist_setting'),
)
))
return res
def set_fields(self):
super(PosConfiguration, self).set_fields()
self.env['ir.config_parameter'].sudo().set_param('pos.use_pos_sale_price', self.use_pos_sale_price)
self.env['ir.config_parameter'].sudo().set_param('pos.pos_pricelist_setting', self.pos_pricelist_setting)
@@ -19,9 +19,12 @@ class StockConfigSettings(models.TransientModel):
self.po_lead = 0.0
def get_default_fields(self, fields):
return dict(
res = super(StockConfigSettings, self).get_default_fields(fields)
res.update(dict(
use_po_lead=self.env['ir.config_parameter'].sudo().get_param('purchase.use_po_lead')
)
))
return res
def set_fields(self):
super(StockConfigSettings, self).set_fields()
self.env['ir.config_parameter'].sudo().set_param('purchase.use_po_lead', self.use_po_lead)
+5 -2
View File
@@ -148,14 +148,17 @@ class SaleConfiguration(models.TransientModel):
@api.model
def get_default_fields(self, fields):
return dict(
res = super(SaleConfiguration, self).get_default_fields(fields)
res.update(dict(
use_sale_note=self.env['ir.config_parameter'].sudo().get_param('sale.use_sale_note', default=False),
auto_done_setting=self.env['ir.config_parameter'].sudo().get_param('sale.auto_done_setting'),
default_deposit_product_id=self.env['ir.config_parameter'].sudo().get_param('sale.default_deposit_product_id'),
)
))
return res
@api.multi
def set_fields(self):
super(SaleConfiguration, self).set_fields()
self.env['ir.config_parameter'].sudo().set_param("sale.use_sale_note", self.use_sale_note)
self.env['ir.config_parameter'].sudo().set_param("sale.auto_done_setting", self.auto_done_setting)
self.env['ir.config_parameter'].sudo().set_param("sale.default_deposit_product_id", self.default_deposit_product_id.id)
@@ -23,9 +23,12 @@ class StockConfigSettings(models.TransientModel):
self.security_lead = 0.0
def get_default_fields(self, fields):
return dict(
res = super(StockConfigSettings, self).get_default_fields(fields)
res.update(dict(
use_security_lead=self.env['ir.config_parameter'].sudo().get_param('sale_stock.use_security_lead')
)
))
return res
def set_fields(self):
super(StockConfigSettings, self).set_fields()
self.env['ir.config_parameter'].sudo().set_param('sale_stock.use_security_lead', self.use_security_lead)
+6 -3
View File
@@ -77,12 +77,15 @@ class StockConfigSettings(models.TransientModel):
@api.model
def get_default_fields(self, fields):
return dict(
res = super(StockConfigSettings, self).get_default_fields(fields)
res.update(dict(
use_propagation_minimum_delta=self.env['ir.config_parameter'].sudo().get_param('stock.use_propagation_minimum_delta')
)
))
return res
@api.multi
def set_default_fields(self):
def set_fields(self):
super(StockConfigSettings, self).set_fields()
self.env['ir.config_parameter'].sudo().set_param('stock.use_propagation_minimum_delta', self.use_propagation_minimum_delta)
@api.multi
@@ -87,16 +87,19 @@ class WebsiteConfigSettings(models.TransientModel):
def get_default_fields(self, fields):
if not self.user_has_groups('website.group_website_designer'):
raise AccessDenied()
return dict(
res = super(WebsiteConfigSettings, self).get_default_fields(fields)
res.update(dict(
has_google_analytics=self.env['ir.config_parameter'].sudo().get_param('website.has_google_analytics'),
has_google_analytics_dashboard=self.env['ir.config_parameter'].sudo().get_param('website.has_google_analytics_dashboard'),
has_google_maps=self.env['ir.config_parameter'].sudo().get_param('website.has_google_maps'),
)
))
return res
@api.multi
def set_fields(self):
if not self.user_has_groups('website.group_website_designer'):
raise AccessDenied()
super(WebsiteConfigSettings, self).set_fields()
self.env['ir.config_parameter'].sudo().set_param('website.has_google_analytics', self.has_google_analytics)
self.env['ir.config_parameter'].sudo().set_param('website.has_google_analytics_dashboard', self.has_google_analytics_dashboard)
self.env['ir.config_parameter'].sudo().set_param('website.has_google_maps', self.has_google_maps)
+12 -2
View File
@@ -478,6 +478,9 @@ class ResConfigSettings(models.TransientModel, ResConfigModuleInstallationMixin)
return {'default': defaults, 'group': groups, 'module': modules, 'other': others}
def get_default_fields(self, fields):
return {}
@api.model
def default_get(self, fields):
IrValues = self.env['ir.values']
@@ -504,12 +507,17 @@ class ResConfigSettings(models.TransientModel, ResConfigModuleInstallationMixin)
res[name] = int(res[name])
# other fields: call all methods that start with 'get_default_'
# and call the method 'get_default_fields'
for method in dir(self):
if method.startswith('get_default_'):
if method.startswith('get_default_') and method is not 'get_default_fields':
res.update(getattr(self, method)(fields))
res.update(self.get_default_fields(fields))
return res
def set_fields(self):
pass
@api.multi
def execute(self):
self.ensure_one()
@@ -540,9 +548,11 @@ class ResConfigSettings(models.TransientModel, ResConfigModuleInstallationMixin)
implied_group.write({'users': [(3, user.id) for user in groups.mapped('users')]})
# other fields: execute all methods that start with 'set_'
# and the method 'set_fields'
for method in dir(self):
if method.startswith('set_'):
if method.startswith('set_') and method is not 'set_fields':
getattr(self, method)()
self.set_fields()
# module fields: install/uninstall the selected modules
to_install = []