diff --git a/addons/account/__manifest__.py b/addons/account/__manifest__.py
index fd56de27e03..d2860d183d0 100644
--- a/addons/account/__manifest__.py
+++ b/addons/account/__manifest__.py
@@ -56,7 +56,7 @@ Core mechanisms for the accounting modules. To display the menuitems, install th
'views/report_agedpartnerbalance.xml',
'views/tax_adjustments.xml',
'wizard/wizard_tax_adjustments_view.xml',
- 'views/res_config_view.xml',
+ 'views/account_config_settings_views.xml',
'views/web_planner_data.xml',
'views/account_journal_dashboard_view.xml',
'report/account_report_payment_receipt_templates.xml',
diff --git a/addons/account/models/__init__.py b/addons/account/models/__init__.py
index b96da81cb4b..440f89134bf 100644
--- a/addons/account/models/__init__.py
+++ b/addons/account/models/__init__.py
@@ -11,5 +11,5 @@ from . import account_analytic_line
from . import account_journal_dashboard
from . import product
from . import company
-from . import res_config
+from . import account_config_settings
from . import web_planner
diff --git a/addons/account/models/res_config.py b/addons/account/models/account_config_settings.py
similarity index 92%
rename from addons/account/models/res_config.py
rename to addons/account/models/account_config_settings.py
index 5f8f83826ef..21f1b10eeb7 100644
--- a/addons/account/models/res_config.py
+++ b/addons/account/models/account_config_settings.py
@@ -60,34 +60,28 @@ class AccountConfigSettings(models.TransientModel):
module_l10n_eu_service = fields.Boolean(string="EU Digital Goods VAT")
@api.model
- def get_default_tax_fields(self, fields):
- default_purchase_tax_id = self.env['ir.config_parameter'].sudo().get_param('account.default_purchase_tax_id', default=False)
- default_sale_tax_id = self.env['ir.config_parameter'].sudo().get_param('account.default_sale_tax_id', default=False)
- return dict(default_purchase_tax_id=int(default_purchase_tax_id), default_sale_tax_id=int(default_sale_tax_id))
+ def get_values(self):
+ res = super(AccountConfigSettings, self).get_values()
+ params = self.env['ir.config_parameter'].sudo()
+ res.update(
+ default_purchase_tax_id=params.get_param('account.default_purchase_tax_id', default=False),
+ default_sale_tax_id=params.get_param('account.default_sale_tax_id', default=False)
+ )
+ return res
@api.multi
- def set_default_tax_fields(self):
+ def set_values(self):
+ super(AccountConfigSettings, self).set_values()
self.env['ir.config_parameter'].sudo().set_param("account.default_purchase_tax_id", self.default_purchase_tax_id.id)
self.env['ir.config_parameter'].sudo().set_param("account.default_sale_tax_id", self.default_sale_tax_id.id)
-
- @api.depends('company_id')
- def _compute_has_chart_of_accounts(self):
- self.has_chart_of_accounts = bool(self.company_id.chart_template_id)
-
- def set_group_multi_currency(self):
if self.group_multi_currency:
self.env.ref('base.group_user').write({'implied_ids': [(4, self.env.ref('product.group_sale_pricelist').id)]})
- return True
-
- def set_default_product_taxes(self):
""" Set the product taxes if they have changed """
ir_values_obj = self.env['ir.values']
if self.default_sale_tax_id:
ir_values_obj.sudo().set_default('product.template', "taxes_id", [self.default_sale_tax_id.id], for_all_users=True, company_id=self.company_id.id)
if self.default_purchase_tax_id:
ir_values_obj.sudo().set_default('product.template', "supplier_taxes_id", [self.default_purchase_tax_id.id], for_all_users=True, company_id=self.company_id.id)
-
- def set_chart_of_accounts(self):
""" install a chart of accounts for the given company (if required) """
if self.chart_template_id and not self.has_chart_of_accounts and self.company_id.expects_chart_of_accounts:
if self.company_id.chart_template_id and self.chart_template_id != self.company_id.chart_template_id:
@@ -108,6 +102,10 @@ class AccountConfigSettings(models.TransientModel):
})
wizard.execute()
+ @api.depends('company_id')
+ def _compute_has_chart_of_accounts(self):
+ self.has_chart_of_accounts = bool(self.company_id.chart_template_id)
+
@api.onchange('group_analytic_accounting')
def onchange_analytic_accounting(self):
if self.group_analytic_accounting:
diff --git a/addons/account/models/chart_template.py b/addons/account/models/chart_template.py
index 6e6eb70c22b..a7db0c251fe 100644
--- a/addons/account/models/chart_template.py
+++ b/addons/account/models/chart_template.py
@@ -147,7 +147,7 @@ class AccountChartTemplate(models.Model):
todo = self.env['ir.actions.todo']
action_rec = self.env['ir.model.data'].xmlid_to_object('account.action_wizard_multi_chart')
if action_rec:
- todo.create({'action_id': action_rec.id, 'name': _('Choose Accounting Template'), 'type': 'automatic'})
+ todo.create({'action_id': action_rec.id, 'name': _('Choose Accounting Template')})
return True
@api.model
diff --git a/addons/account/views/res_config_view.xml b/addons/account/views/account_config_settings_views.xml
similarity index 100%
rename from addons/account/views/res_config_view.xml
rename to addons/account/views/account_config_settings_views.xml
diff --git a/addons/account_accountant/__manifest__.py b/addons/account_accountant/__manifest__.py
index d9f442828b4..79d4f92dacb 100644
--- a/addons/account_accountant/__manifest__.py
+++ b/addons/account_accountant/__manifest__.py
@@ -19,7 +19,7 @@ It assigns manager and user access rights to the Administrator for the accountin
'data/account_accountant_data.xml',
'security/account_accountant_security.xml',
'views/account_accountant_templates.xml',
- 'views/res_config_view.xml',
+ 'views/account_config_settings_views.xml',
'views/product_views.xml',
],
'demo': ['data/account_accountant_demo.xml'],
diff --git a/addons/account_accountant/models/__init__.py b/addons/account_accountant/models/__init__.py
index c9d3ea6ad49..cdb5588b96c 100644
--- a/addons/account_accountant/models/__init__.py
+++ b/addons/account_accountant/models/__init__.py
@@ -1,4 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from . import res_config
+from . import account_config_settings
diff --git a/addons/account_accountant/models/res_config.py b/addons/account_accountant/models/account_config_settings.py
similarity index 100%
rename from addons/account_accountant/models/res_config.py
rename to addons/account_accountant/models/account_config_settings.py
diff --git a/addons/account_accountant/views/res_config_view.xml b/addons/account_accountant/views/account_config_settings_views.xml
similarity index 100%
rename from addons/account_accountant/views/res_config_view.xml
rename to addons/account_accountant/views/account_config_settings_views.xml
diff --git a/addons/account_analytic_default/__manifest__.py b/addons/account_analytic_default/__manifest__.py
index f16196f24e5..e41e554f1ea 100644
--- a/addons/account_analytic_default/__manifest__.py
+++ b/addons/account_analytic_default/__manifest__.py
@@ -24,7 +24,7 @@ Allows to automatically select analytic accounts based on criterions:
'security/account_analytic_default_security.xml',
'views/account_analytic_default_view.xml',
'views/product_views.xml',
- 'views/res_config_view.xml',
+ 'views/account_config_settings_views.xml',
],
'installable': True,
}
diff --git a/addons/account_analytic_default/views/res_config_view.xml b/addons/account_analytic_default/views/account_config_settings_views.xml
similarity index 100%
rename from addons/account_analytic_default/views/res_config_view.xml
rename to addons/account_analytic_default/views/account_config_settings_views.xml
diff --git a/addons/account_asset/__manifest__.py b/addons/account_asset/__manifest__.py
index f59459d9a92..bc9aa5f13c3 100644
--- a/addons/account_asset/__manifest__.py
+++ b/addons/account_asset/__manifest__.py
@@ -26,7 +26,7 @@ Keeps track of depreciations, and creates corresponding journal entries.
'views/account_invoice_views.xml',
'views/account_asset_templates.xml',
'views/product_views.xml',
- 'views/res_config_view.xml',
+ 'views/account_config_settings_views.xml',
'report/account_asset_report_views.xml',
'data/account_asset_data.xml',
],
diff --git a/addons/account_asset/views/res_config_view.xml b/addons/account_asset/views/account_config_settings_views.xml
similarity index 100%
rename from addons/account_asset/views/res_config_view.xml
rename to addons/account_asset/views/account_config_settings_views.xml
diff --git a/addons/account_budget/__manifest__.py b/addons/account_budget/__manifest__.py
index 343f900d066..fd839a6dfd9 100644
--- a/addons/account_budget/__manifest__.py
+++ b/addons/account_budget/__manifest__.py
@@ -34,7 +34,7 @@ Three reports are available:
'security/account_budget_security.xml',
'views/account_analytic_account_views.xml',
'views/account_budget_views.xml',
- 'views/res_config_view.xml',
+ 'views/account_config_settings_views.xml',
],
'demo': ['data/account_budget_demo.xml'],
}
diff --git a/addons/account_budget/views/res_config_view.xml b/addons/account_budget/views/account_config_settings_views.xml
similarity index 100%
rename from addons/account_budget/views/res_config_view.xml
rename to addons/account_budget/views/account_config_settings_views.xml
diff --git a/addons/auth_oauth/__manifest__.py b/addons/auth_oauth/__manifest__.py
index b6f8805dedc..d6ab043d07e 100644
--- a/addons/auth_oauth/__manifest__.py
+++ b/addons/auth_oauth/__manifest__.py
@@ -15,7 +15,7 @@ Allow users to login through OAuth2 Provider.
'data/auth_oauth_data.yml',
'views/auth_oauth_views.xml',
'views/res_users_views.xml',
- 'views/res_config_views.xml',
+ 'views/base_config_settings_views.xml',
'views/auth_oauth_templates.xml',
'security/ir.model.access.csv',
],
diff --git a/addons/auth_oauth/models/__init__.py b/addons/auth_oauth/models/__init__.py
index 64bbaa4e3d4..9b02f6dc910 100644
--- a/addons/auth_oauth/models/__init__.py
+++ b/addons/auth_oauth/models/__init__.py
@@ -2,6 +2,6 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import auth_oauth
+from . import base_config_settings
from . import ir_config_parameter
-from . import res_config
from . import res_users
diff --git a/addons/auth_oauth/models/res_config.py b/addons/auth_oauth/models/base_config_settings.py
similarity index 51%
rename from addons/auth_oauth/models/res_config.py
rename to addons/auth_oauth/models/base_config_settings.py
index 20784bd9d18..86bbcdc14c0 100644
--- a/addons/auth_oauth/models/res_config.py
+++ b/addons/auth_oauth/models/base_config_settings.py
@@ -15,36 +15,25 @@ class BaseConfigSettings(models.TransientModel):
def get_uri(self):
return "%s/auth_oauth/signin" % (self.env['ir.config_parameter'].get_param('web.base.url'))
- def _compute_server_uri(self):
- uri = self.get_uri()
- for setting in self:
- setting.server_uri_google = uri
-
auth_oauth_google_enabled = fields.Boolean(string='Allow users to sign in with Google')
auth_oauth_google_client_id = fields.Char(string='Client ID')
- server_uri_google = fields.Char(compute='_compute_server_uri', string='Server uri')
+ server_uri_google = fields.Char(string='Server uri')
@api.model
- def default_get(self, fields):
- settings = super(BaseConfigSettings, self).default_get(fields)
- settings.update(self.get_oauth_providers(fields))
- return settings
-
- @api.model
- def get_oauth_providers(self, fields):
+ def get_values(self):
+ res = super(BaseConfigSettings, self).get_values()
google_provider = self.env.ref('auth_oauth.provider_google', False)
- return {
- 'auth_oauth_google_enabled': google_provider.enabled,
- 'auth_oauth_google_client_id': google_provider.client_id,
- 'server_uri_google': self.get_uri()
- }
+ res.update(
+ auth_oauth_google_enabled=google_provider.enabled,
+ auth_oauth_google_client_id=google_provider.client_id,
+ server_uri_google=self.get_uri(),
+ )
+ return res
- @api.multi
- def set_oauth_providers(self):
- self.ensure_one()
+ def set_values(self):
+ super(BaseConfigSettings, self).set_values()
google_provider = self.env.ref('auth_oauth.provider_google', False)
- rg = {
+ google_provider.write({
'enabled': self.auth_oauth_google_enabled,
'client_id': self.auth_oauth_google_client_id,
- }
- google_provider.write(rg)
+ })
diff --git a/addons/auth_oauth/views/res_config_views.xml b/addons/auth_oauth/views/base_config_settings_views.xml
similarity index 100%
rename from addons/auth_oauth/views/res_config_views.xml
rename to addons/auth_oauth/views/base_config_settings_views.xml
diff --git a/addons/auth_signup/__manifest__.py b/addons/auth_signup/__manifest__.py
index 9b59ad0ad63..d2cd094be1a 100644
--- a/addons/auth_signup/__manifest__.py
+++ b/addons/auth_signup/__manifest__.py
@@ -17,7 +17,7 @@ Allow users to sign up and reset their password
],
'data': [
'data/auth_signup_data.xml',
- 'views/res_config_views.xml',
+ 'views/base_config_settings_views.xml',
'views/res_users_views.xml',
'views/auth_signup_login_templates.xml',
],
diff --git a/addons/auth_signup/models/__init__.py b/addons/auth_signup/models/__init__.py
index 1c34c9b408b..fb8aab1c50d 100644
--- a/addons/auth_signup/models/__init__.py
+++ b/addons/auth_signup/models/__init__.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-from . import res_config
-from . import res_users
+from . import base_config_settings
from . import res_partner
+from . import res_users
diff --git a/addons/auth_signup/models/res_config.py b/addons/auth_signup/models/base_config_settings.py
similarity index 67%
rename from addons/auth_signup/models/res_config.py
rename to addons/auth_signup/models/base_config_settings.py
index c8b4342443c..eb830c24e37 100644
--- a/addons/auth_signup/models/res_config.py
+++ b/addons/auth_signup/models/base_config_settings.py
@@ -12,18 +12,21 @@ class BaseConfigSettings(models.TransientModel):
auth_signup_template_user_id = fields.Many2one('res.users', string='Template user for new users created through signup')
@api.model
- def get_default_auth_signup_template_user_id(self, fields):
- get_param = self.env['ir.config_parameter'].get_param
+ def get_values(self):
+ res = super(BaseConfigSettings, self).get_values()
+ get_param = self.env['ir.config_parameter'].sudo().get_param
# we use safe_eval on the result, since the value of the parameter is a nonempty string
- return {
- 'auth_signup_reset_password': safe_eval(get_param('auth_signup.reset_password', 'False')),
- 'auth_signup_uninvited': safe_eval(get_param('auth_signup.allow_uninvited', 'False')),
- 'auth_signup_template_user_id': safe_eval(get_param('auth_signup.template_user_id', 'False')),
- }
+ res.update(
+ auth_signup_reset_password=safe_eval(get_param('auth_signup.reset_password', 'False')),
+ auth_signup_uninvited=safe_eval(get_param('auth_signup.allow_uninvited', 'False')),
+ auth_signup_template_user_id=safe_eval(get_param('auth_signup.template_user_id', 'False')),
+ )
+ return res
+
@api.multi
- def set_auth_signup_template_user_id(self):
- self.ensure_one()
- set_param = self.env['ir.config_parameter'].set_param
+ def set_values(self):
+ super(BaseConfigSettings, self).set_values()
+ set_param = self.env['ir.config_parameter'].sudo().set_param
# we store the repr of the values, since the value of the parameter is a required string
set_param('auth_signup.reset_password', repr(self.auth_signup_reset_password))
set_param('auth_signup.allow_uninvited', repr(self.auth_signup_uninvited))
diff --git a/addons/auth_signup/views/res_config_views.xml b/addons/auth_signup/views/base_config_settings_views.xml
similarity index 100%
rename from addons/auth_signup/views/res_config_views.xml
rename to addons/auth_signup/views/base_config_settings_views.xml
diff --git a/addons/base_gengo/__manifest__.py b/addons/base_gengo/__manifest__.py
index b741dc5b76e..688be3ecaff 100644
--- a/addons/base_gengo/__manifest__.py
+++ b/addons/base_gengo/__manifest__.py
@@ -18,7 +18,7 @@ This wizard will activate the CRON job and the Scheduler and will start the auto
'data': [
'data/ir_cron_data.xml',
'views/ir_translation_views.xml',
- 'views/res_config_views.xml',
+ 'views/base_config_settings_views.xml',
'wizard/base_gengo_translations_view.xml',
],
'demo': ['data/res_company_demo.xml'],
diff --git a/addons/base_gengo/models/__init__.py b/addons/base_gengo/models/__init__.py
index 7005fe4f9df..a3afdeaac10 100644
--- a/addons/base_gengo/models/__init__.py
+++ b/addons/base_gengo/models/__init__.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import base_config_settings
from . import ir_translation
from . import res_company
-from . import res_config
diff --git a/addons/base_gengo/models/res_config.py b/addons/base_gengo/models/base_config_settings.py
similarity index 100%
rename from addons/base_gengo/models/res_config.py
rename to addons/base_gengo/models/base_config_settings.py
diff --git a/addons/base_gengo/views/res_config_views.xml b/addons/base_gengo/views/base_config_settings_views.xml
similarity index 100%
rename from addons/base_gengo/views/res_config_views.xml
rename to addons/base_gengo/views/base_config_settings_views.xml
diff --git a/addons/base_setup/__manifest__.py b/addons/base_setup/__manifest__.py
index 74310b9625f..b6b900ad03a 100644
--- a/addons/base_setup/__manifest__.py
+++ b/addons/base_setup/__manifest__.py
@@ -13,7 +13,7 @@ Shows you a list of applications features to install from.
""",
'depends': ['base', 'web'],
'data': [
- 'views/res_config_views.xml',
+ 'views/base_config_settings_views.xml',
'views/res_partner_views.xml',
],
'demo': [],
diff --git a/addons/base_setup/models/__init__.py b/addons/base_setup/models/__init__.py
index 45cc40bf798..d43ed2fd84b 100644
--- a/addons/base_setup/models/__init__.py
+++ b/addons/base_setup/models/__init__.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from . import res_config
+from . import base_config_settings
diff --git a/addons/base_setup/models/res_config.py b/addons/base_setup/models/base_config_settings.py
similarity index 79%
rename from addons/base_setup/models/res_config.py
rename to addons/base_setup/models/base_config_settings.py
index c1a0076957c..b00902163cf 100644
--- a/addons/base_setup/models/res_config.py
+++ b/addons/base_setup/models/base_config_settings.py
@@ -37,21 +37,27 @@ class BaseConfigSettings(models.TransientModel):
external_report_layout = fields.Selection(related="company_id.external_report_layout")
@api.model
- def get_default_fields(self, 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 {
- 'default_external_email_server': default_external_email_server,
- 'default_user_rights': default_user_rights,
- 'default_custom_report_footer': default_custom_report_footer,
- }
+ def get_values(self):
+ res = super(BaseConfigSettings, self).get_values()
+ params = self.env['ir.config_parameter'].sudo()
+ default_external_email_server = params.get_param('base_setup.default_external_email_server', default=False)
+ default_user_rights = params.get_param('base_setup.default_user_rights', default=False)
+ default_custom_report_footer = params.get_param('base_setup.default_custom_report_footer', default=False)
+ res.update(
+ default_external_email_server=default_external_email_server,
+ default_user_rights=default_user_rights,
+ default_custom_report_footer=default_custom_report_footer,
+ company_share_partner=not self.env.ref('base.res_partner_rule').active,
+ )
+ return res
@api.multi
- def set_default_fields(self):
+ def set_values(self):
+ super(BaseConfigSettings, self).set_values()
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)
+ self.env.ref('base.res_partner_rule').write({'active': not self.company_share_partner})
@api.multi
def open_company(self):
@@ -71,18 +77,6 @@ class BaseConfigSettings(models.TransientModel):
action['views'] = [[self.env.ref('base.view_users_form').id, 'form']]
return action
- @api.model
- def get_default_company_share_partner(self, fields):
- return {
- 'company_share_partner': not self.env.ref('base.res_partner_rule').active
- }
-
- @api.multi
- def set_default_company_share_partner(self):
- partner_rule = self.env.ref('base.res_partner_rule')
- for config in self:
- partner_rule.write({'active': not config.company_share_partner})
-
@api.model
def _prepare_report_view_action(self, template):
template_id = self.env.ref(template)
diff --git a/addons/base_setup/views/res_config_views.xml b/addons/base_setup/views/base_config_settings_views.xml
similarity index 100%
rename from addons/base_setup/views/res_config_views.xml
rename to addons/base_setup/views/base_config_settings_views.xml
diff --git a/addons/base_vat/__manifest__.py b/addons/base_vat/__manifest__.py
index 1137585b4b9..858ebecac2b 100644
--- a/addons/base_vat/__manifest__.py
+++ b/addons/base_vat/__manifest__.py
@@ -39,6 +39,6 @@ only the country code will be validated.
'data': [
'views/res_partner_views.xml',
'views/res_company_views.xml',
- 'views/res_config_view.xml',
+ 'views/account_config_settings_views.xml',
],
}
diff --git a/addons/base_vat/models/__init__.py b/addons/base_vat/models/__init__.py
index cd202586594..ec161810deb 100644
--- a/addons/base_vat/models/__init__.py
+++ b/addons/base_vat/models/__init__.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import account_config_settings
from . import res_company
from . import res_partner
-from . import res_config
diff --git a/addons/base_vat/models/res_config.py b/addons/base_vat/models/account_config_settings.py
similarity index 100%
rename from addons/base_vat/models/res_config.py
rename to addons/base_vat/models/account_config_settings.py
diff --git a/addons/base_vat/views/res_config_view.xml b/addons/base_vat/views/account_config_settings_views.xml
similarity index 100%
rename from addons/base_vat/views/res_config_view.xml
rename to addons/base_vat/views/account_config_settings_views.xml
diff --git a/addons/crm/__manifest__.py b/addons/crm/__manifest__.py
index 7781e15184b..03347c312ed 100644
--- a/addons/crm/__manifest__.py
+++ b/addons/crm/__manifest__.py
@@ -45,7 +45,6 @@ Dashboard for CRM will include:
'data/crm_data.xml',
'data/crm_stage_data.xml',
- 'data/sales_config_settings_data.xml',
'data/crm_lead_data.xml',
'data/web_planner_data.xml',
'data/mail_template_data.xml',
@@ -65,7 +64,7 @@ Dashboard for CRM will include:
'views/crm_lead_views.xml',
'views/calendar_views.xml',
'views/res_partner_views.xml',
- 'views/res_config_views.xml',
+ 'views/sale_config_settings_views.xml',
'views/crm_team_views.xml',
],
'demo': [
diff --git a/addons/crm/data/sales_config_settings_data.xml b/addons/crm/data/sales_config_settings_data.xml
deleted file mode 100644
index be269cafec9..00000000000
--- a/addons/crm/data/sales_config_settings_data.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
diff --git a/addons/crm/models/__init__.py b/addons/crm/models/__init__.py
index ded1cea026e..8059e38d8b8 100644
--- a/addons/crm/models/__init__.py
+++ b/addons/crm/models/__init__.py
@@ -6,6 +6,6 @@ from . import calendar
from . import crm_lead
from . import crm_stage
from . import crm_team
-from . import res_config
+from . import sale_config_settings
from . import res_partner
from . import web_planner
diff --git a/addons/crm/models/crm_team.py b/addons/crm/models/crm_team.py
index ca9421be935..3fe31131944 100644
--- a/addons/crm/models/crm_team.py
+++ b/addons/crm/models/crm_team.py
@@ -120,13 +120,6 @@ class Team(models.Model):
if not self.use_opportunities and self.dashboard_graph_model == 'crm.opportunity.report':
raise ValidationError(_("Dashboard graph content cannot be Pipeline if the sales channel doesn't use it. (Pipeline is unchecked.)"))
- @api.model
- def create(self, vals):
- generate_alias_name = self.env['ir.values'].get_default('sale.config.settings', 'generate_sales_team_alias')
- if generate_alias_name and not vals.get('alias_name'):
- vals['alias_name'] = vals.get('name')
- return super(Team, self).create(vals)
-
@api.multi
def write(self, vals):
result = super(Team, self).write(vals)
diff --git a/addons/crm/models/res_config.py b/addons/crm/models/res_config.py
deleted file mode 100644
index 0af455f6bdc..00000000000
--- a/addons/crm/models/res_config.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from odoo import api, fields, models
-
-
-class CRMSettings(models.TransientModel):
- _inherit = 'sale.config.settings'
-
- generate_sales_team_alias = fields.Boolean("Automatically generate an email alias at the sales channel creation",
- help="Odoo will generate an email alias based on the sales channel name")
- alias_prefix = fields.Char('Default Alias Name for Leads')
- alias_domain = fields.Char('Alias Domain', default=lambda self: self.env["ir.config_parameter"].sudo().get_param("mail.catchall.domain"))
- # TDE TODO: as it is not linked to ir.values anymore, it should be renamed, but not in stable
- default_generate_lead_from_alias = fields.Boolean('Manual Assignation of Emails')
- group_use_lead = fields.Boolean(string="Leads", implied_group='crm.group_use_lead')
- module_crm_phone_validation = fields.Boolean("Phone Validation")
- module_crm_voip = fields.Boolean("Asterisk (VoIP)")
-
- def _find_default_lead_alias_id(self):
- alias = self.env.ref('crm.mail_alias_lead_info', False)
- if not alias:
- alias = self.env['mail.alias'].search([
- ('alias_model_id.model', '=', 'crm.lead'),
- ('alias_force_thread_id', '=', False),
- ('alias_parent_model_id.model', '=', 'crm.team'),
- ('alias_parent_thread_id', '=', False),
- ('alias_defaults', '=', '{}')
- ], limit=1)
- return alias
-
- @api.model
- def get_default_generate_sales_team_alias(self, fields):
- return {
- 'generate_sales_team_alias': self.env['ir.values'].get_default('sale.config.settings', 'generate_sales_team_alias')
- }
-
- @api.multi
- def set_default_generate_sales_team_alias(self):
- IrValues = self.env['ir.values']
- if self.env['res.users'].has_group('base.group_erp_manager'):
- IrValues = IrValues.sudo()
- IrValues.set_default('sale.config.settings', 'generate_sales_team_alias', self.generate_sales_team_alias)
-
- @api.model
- def get_default_default_generate_lead_from_alias(self, fields):
- return {
- 'default_generate_lead_from_alias': self.env['ir.config_parameter'].sudo().get_param('sale_config_settings.default_generate_lead_from_alias')
- }
-
- @api.multi
- def set_default_default_generate_lead_from_alias(self):
- self.env['ir.config_parameter'].sudo().set_param('sale_config_settings.default_generate_lead_from_alias', self.default_generate_lead_from_alias)
-
- @api.onchange('group_use_lead')
- def _onchange_group_use_lead(self):
- """ Reset alias / leads configuration if leads are not used """
- if not self.group_use_lead:
- self.default_generate_lead_from_alias = False
-
- @api.onchange('default_generate_lead_from_alias')
- def _onchange_default_generate_lead_from_alias(self):
- if self.default_generate_lead_from_alias:
- self.alias_prefix = self.alias_prefix or 'info'
- else:
- self.alias_prefix = False
-
- @api.model
- def get_default_alias_prefix(self, fields):
- alias = self._find_default_lead_alias_id()
- return {'alias_prefix': alias.alias_name if alias else False}
-
- @api.multi
- def set_default_alias_prefix(self):
- for record in self:
- alias = self._find_default_lead_alias_id()
- if alias:
- alias.write({'alias_name': record.alias_prefix})
- else:
- self.env['mail.alias'].with_context(alias_model_name='crm.lead', alias_parent_model_name='crm.team').create({'alias_name': record.alias_prefix})
-
- return True
diff --git a/addons/crm/models/sale_config_settings.py b/addons/crm/models/sale_config_settings.py
new file mode 100644
index 00000000000..729d3c16817
--- /dev/null
+++ b/addons/crm/models/sale_config_settings.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+
+
+class SaleConfigSettings(models.TransientModel):
+ _inherit = 'sale.config.settings'
+
+ alias_prefix = fields.Char('Default Alias Name for Leads')
+ alias_domain = fields.Char('Alias Domain', default=lambda self: self.env["ir.config_parameter"].sudo().get_param("mail.catchall.domain"))
+ generate_lead_from_alias = fields.Boolean('Manual Assignation of Emails')
+ group_use_lead = fields.Boolean(string="Leads", implied_group='crm.group_use_lead')
+ module_crm_phone_validation = fields.Boolean("Phone Validation")
+ module_crm_voip = fields.Boolean("Asterisk (VoIP)")
+
+ def _find_default_lead_alias_id(self):
+ alias = self.env.ref('crm.mail_alias_lead_info', False)
+ if not alias:
+ alias = self.env['mail.alias'].search([
+ ('alias_model_id.model', '=', 'crm.lead'),
+ ('alias_force_thread_id', '=', False),
+ ('alias_parent_model_id.model', '=', 'crm.team'),
+ ('alias_parent_thread_id', '=', False),
+ ('alias_defaults', '=', '{}')
+ ], limit=1)
+ return alias
+
+ @api.onchange('group_use_lead')
+ def _onchange_group_use_lead(self):
+ """ Reset alias / leads configuration if leads are not used """
+ if not self.group_use_lead:
+ self.generate_lead_from_alias = False
+
+ @api.onchange('generate_lead_from_alias')
+ def _onchange_generate_lead_from_alias(self):
+ self.alias_prefix = 'info' if self.generate_lead_from_alias else False
+
+ @api.model
+ def get_values(self):
+ res = super(SaleConfigSettings, self).get_values()
+ alias = self._find_default_lead_alias_id()
+ res.update(
+ alias_prefix=alias.alias_name if alias else False,
+ generate_lead_from_alias=self.env['ir.config_parameter'].sudo().get_param('crm.generate_lead_from_alias')
+ )
+ return res
+
+ @api.multi
+ def set_values(self):
+ super(SaleConfigSettings, self).set_values()
+ self.env['ir.config_parameter'].sudo().set_param('crm.generate_lead_from_alias', self.generate_lead_from_alias)
+ alias = self._find_default_lead_alias_id()
+ if alias:
+ alias.write({'alias_name': self.alias_prefix})
+ else:
+ self.env['mail.alias'].with_context(
+ alias_model_name='crm.lead',
+ alias_parent_model_name='crm.team').create({'alias_name': self.alias_prefix})
diff --git a/addons/crm/views/res_config_views.xml b/addons/crm/views/sale_config_settings_views.xml
similarity index 95%
rename from addons/crm/views/res_config_views.xml
rename to addons/crm/views/sale_config_settings_views.xml
index 0a60a0e6dbf..d6ed8df62df 100644
--- a/addons/crm/views/res_config_views.xml
+++ b/addons/crm/views/sale_config_settings_views.xml
@@ -25,7 +25,7 @@
title="Emails received to that address generate new leads not assigned to any sales channel yet. This can be made when converting them into opportunities. Incoming emails can be automatically assigned to specific sales channels. To do so, set an email alias on the sales channel."
groups="base.group_no_one">
-
+
@@ -33,11 +33,11 @@
Generate unassigned leads from incoming emails. Leads coming from
that email will be assigned manually.
-
+
+ attrs="{'required': [('generate_lead_from_alias', '=', True)]}"/>
@
diff --git a/addons/google_calendar/__manifest__.py b/addons/google_calendar/__manifest__.py
index 3a722b9d923..b933743351d 100644
--- a/addons/google_calendar/__manifest__.py
+++ b/addons/google_calendar/__manifest__.py
@@ -16,7 +16,7 @@ The module adds the possibility to synchronize Google Calendar with Odoo
'data/google_calendar_data.xml',
'data/google_calendar_data.xml',
'security/ir.model.access.csv',
- 'views/res_config_views.xml',
+ 'views/base_config_settings_views.xml',
'views/res_users_views.xml',
'views/google_calendar_templates.xml',
],
diff --git a/addons/google_calendar/models/__init__.py b/addons/google_calendar/models/__init__.py
index 23cba3b99b3..28d5732446b 100644
--- a/addons/google_calendar/models/__init__.py
+++ b/addons/google_calendar/models/__init__.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import base_config_settings
from . import calendar
-from . import res_users
from . import google_calendar
-from . import res_config
+from . import res_users
diff --git a/addons/google_calendar/models/base_config_settings.py b/addons/google_calendar/models/base_config_settings.py
new file mode 100644
index 00000000000..e4a1ae52022
--- /dev/null
+++ b/addons/google_calendar/models/base_config_settings.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+
+
+class BaseConfigSettings(models.TransientModel):
+ _inherit = 'base.config.settings'
+
+ cal_client_id = fields.Char("Client_id")
+ cal_client_secret = fields.Char("Client_key")
+ server_uri = fields.Char('URI for tuto')
+
+ def set_values(self):
+ super(BaseConfigSettings, self).set_values()
+ set_param = self.env['ir.config_parameter'].set_param
+ set_param('google_calendar_client_id', (self.cal_client_id or '').strip())
+ set_param('google_calendar_client_secret', (self.cal_client_secret or '').strip())
+
+ @api.model
+ def get_values(self):
+ res = super(BaseConfigSettings, self).get_values()
+ get_param = self.env['ir.config_parameter'].sudo().get_param
+ res.update(
+ cal_client_id=get_param('google_calendar_client_id', default=''),
+ cal_client_secret=get_param('google_calendar_client_secret', default=''),
+ server_uri="%s/google_account/authentication" % get_param('web.base.url', default="http://yourcompany.odoo.com"),
+ )
+ return res
diff --git a/addons/google_calendar/models/res_config.py b/addons/google_calendar/models/res_config.py
deleted file mode 100644
index 3c4f0a686bf..00000000000
--- a/addons/google_calendar/models/res_config.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from odoo import fields, models
-
-
-class CalendarSettings(models.TransientModel):
-
- _inherit = 'base.config.settings'
-
- cal_client_id = fields.Char("Client_id")
- cal_client_secret = fields.Char("Client_key")
- server_uri = fields.Char('URI for tuto')
-
- def set_calset(self):
- set_param = self.env['ir.config_parameter'].set_param
- set_param('google_calendar_client_id', (self.cal_client_id or '').strip())
- set_param('google_calendar_client_secret', (self.cal_client_secret or '').strip())
-
- def get_default_all(self, fields):
- get_param = self.env['ir.config_parameter'].get_param
- cal_client_id = get_param('google_calendar_client_id', default='')
- cal_client_secret = get_param('google_calendar_client_secret', default='')
- server_uri = "%s/google_account/authentication" % get_param('web.base.url', default="http://yourcompany.odoo.com")
- return dict(cal_client_id=cal_client_id, cal_client_secret=cal_client_secret, server_uri=server_uri)
diff --git a/addons/google_calendar/views/res_config_views.xml b/addons/google_calendar/views/base_config_settings_views.xml
similarity index 100%
rename from addons/google_calendar/views/res_config_views.xml
rename to addons/google_calendar/views/base_config_settings_views.xml
diff --git a/addons/google_drive/__manifest__.py b/addons/google_drive/__manifest__.py
index c41ed3a4f7b..296b46c317c 100644
--- a/addons/google_drive/__manifest__.py
+++ b/addons/google_drive/__manifest__.py
@@ -12,7 +12,7 @@
'data/google_drive_data.xml',
'views/google_drive_views.xml',
'views/google_drive_templates.xml',
- 'views/res_config_views.xml',
+ 'views/base_config_settings_views.xml',
],
'demo': [
'data/google_drive_demo.xml'
diff --git a/addons/google_drive/models/__init__.py b/addons/google_drive/models/__init__.py
index e0a4cc5dc12..288b7b7fbac 100644
--- a/addons/google_drive/models/__init__.py
+++ b/addons/google_drive/models/__init__.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import base_config_settings
from . import google_drive
-from . import res_config
diff --git a/addons/google_drive/models/res_config.py b/addons/google_drive/models/base_config_settings.py
similarity index 59%
rename from addons/google_drive/models/res_config.py
rename to addons/google_drive/models/base_config_settings.py
index fba3f8ec9f1..37c78a218fd 100644
--- a/addons/google_drive/models/res_config.py
+++ b/addons/google_drive/models/base_config_settings.py
@@ -7,11 +7,7 @@ from odoo import api, fields, models
class BaseConfigSettings(models.TransientModel):
_inherit = "base.config.settings"
- @api.model
- def _default_google_drive_authorization_code(self):
- return self.env['ir.config_parameter'].sudo().get_param('google_drive_authorization_code')
-
- google_drive_authorization_code = fields.Char(string='Authorization Code', default=_default_google_drive_authorization_code)
+ google_drive_authorization_code = fields.Char(string='Authorization Code')
google_drive_uri = fields.Char(compute='_compute_drive_uri', string='URI', help="The URL to generate the authorization code from Google")
@api.depends('google_drive_authorization_code')
@@ -20,14 +16,20 @@ class BaseConfigSettings(models.TransientModel):
for config in self:
config.google_drive_uri = google_drive_uri
- @api.multi
- def set_google_authorization_code(self):
- self.ensure_one()
- ICP = self.env['ir.config_parameter']
+ @api.model
+ def get_values(self):
+ res = super(BaseConfigSettings, self).get_values()
+ res.update(
+ google_drive_authorization_code=self.env['ir.config_parameter'].sudo().get_param('google_drive_authorization_code'),
+ )
+ return res
+
+ def set_values(self):
+ super(BaseConfigSettings, self).set_values()
+ params = self.env['ir.config_parameter'].sudo()
authorization_code = self.google_drive_authorization_code
refresh_token = False
- if authorization_code and authorization_code != ICP.get_param('google_drive_authorization_code'):
+ if authorization_code and authorization_code != params.get_param('google_drive_authorization_code'):
refresh_token = self.env['google.service'].generate_refresh_token('drive', authorization_code)
-
- ICP.set_param('google_drive_authorization_code', authorization_code)
- ICP.set_param('google_drive_refresh_token', refresh_token)
+ params.set_param('google_drive_authorization_code', authorization_code)
+ params.set_param('google_drive_refresh_token', refresh_token)
diff --git a/addons/google_drive/views/res_config_views.xml b/addons/google_drive/views/base_config_settings_views.xml
similarity index 100%
rename from addons/google_drive/views/res_config_views.xml
rename to addons/google_drive/views/base_config_settings_views.xml
diff --git a/addons/hr_attendance/__manifest__.py b/addons/hr_attendance/__manifest__.py
index cf373096622..bc36a7d4f5d 100644
--- a/addons/hr_attendance/__manifest__.py
+++ b/addons/hr_attendance/__manifest__.py
@@ -25,7 +25,7 @@ actions(Check in/Check out) performed by them.
'report/hr_employee_badge.xml',
'views/hr_department_view.xml',
'views/hr_employee_view.xml',
- 'views/res_config_view.xml',
+ 'views/attendance_config_settings_views.xml',
],
'demo': [
'data/hr_attendance_demo.xml'
diff --git a/addons/hr_attendance/models/__init__.py b/addons/hr_attendance/models/__init__.py
index a94d4f20a38..94f3e8714a7 100644
--- a/addons/hr_attendance/models/__init__.py
+++ b/addons/hr_attendance/models/__init__.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
+from . import attendance_config_settings
from . import hr_attendance
from . import hr_employee
-from . import res_config
diff --git a/addons/hr_attendance/models/res_config.py b/addons/hr_attendance/models/attendance_config_settings.py
similarity index 100%
rename from addons/hr_attendance/models/res_config.py
rename to addons/hr_attendance/models/attendance_config_settings.py
diff --git a/addons/hr_attendance/views/res_config_view.xml b/addons/hr_attendance/views/attendance_config_settings_views.xml
similarity index 100%
rename from addons/hr_attendance/views/res_config_view.xml
rename to addons/hr_attendance/views/attendance_config_settings_views.xml
diff --git a/addons/hr_expense/__manifest__.py b/addons/hr_expense/__manifest__.py
index 114200460a1..17932b55a18 100644
--- a/addons/hr_expense/__manifest__.py
+++ b/addons/hr_expense/__manifest__.py
@@ -39,7 +39,7 @@ This module also uses analytic accounting and is compatible with the invoice on
'report/report_expense_sheet.xml',
'views/hr_dashboard.xml',
'views/hr_expense.xml',
- 'views/res_config_views.xml',
+ 'views/hr_expense_config_settings_views.xml',
'data/web_planner_data.xml',
],
'demo': ['data/hr_expense_demo.xml'],
diff --git a/addons/hr_expense/models/__init__.py b/addons/hr_expense/models/__init__.py
index 103a41b283d..aa63806bf9d 100644
--- a/addons/hr_expense/models/__init__.py
+++ b/addons/hr_expense/models/__init__.py
@@ -4,5 +4,5 @@ from . import account_move_line
from . import hr_department
from . import hr_expense
from . import product_template
-from . import res_config
+from . import hr_expense_config_settings
from . import web_planner
diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py
index 858c8da8348..bc34395bf75 100644
--- a/addons/hr_expense/models/hr_expense.py
+++ b/addons/hr_expense/models/hr_expense.py
@@ -309,7 +309,8 @@ class HrExpense(models.Model):
@api.model
def get_empty_list_help(self, help_message):
if help_message:
- alias_record = self.env.ref('hr_expense.mail_alias_expense')
+ use_mailgateway = self.env['ir.config_parameter'].sudo().get_param('hr_expense.use_mailgateway')
+ alias_record = use_mailgateway and self.env.ref('hr_expense.mail_alias_expense') or False
if alias_record and alias_record.alias_domain and alias_record.alias_name:
link = "
%(email)s " % {
'email': '%s@%s' % (alias_record.alias_name, alias_record.alias_domain)
diff --git a/addons/hr_expense/models/hr_expense_config_settings.py b/addons/hr_expense/models/hr_expense_config_settings.py
new file mode 100644
index 00000000000..ee7e8b49478
--- /dev/null
+++ b/addons/hr_expense/models/hr_expense_config_settings.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+
+from odoo import api, fields, models
+
+
+class HrExpenseConfigSettings(models.TransientModel):
+ _name = 'hr.expense.config.settings'
+ _inherit = 'res.config.settings'
+
+ alias_prefix = fields.Char('Default Alias Name for Expenses')
+ alias_domain = fields.Char('Alias Domain', default=lambda self: self.env["ir.config_parameter"].sudo().get_param("mail.catchall.domain"))
+ group_analytic_accounting = fields.Boolean(
+ string='Analytic Accounting',
+ implied_group='analytic.group_analytic_accounting')
+ group_uom = fields.Boolean(
+ string="Units of Measure",
+ implied_group='product.group_uom')
+ use_mailgateway = fields.Boolean(string='Let your employees record expenses by email')
+ module_project = fields.Boolean(string="Project")
+ module_sale = fields.Boolean(string="Customer Billing")
+
+ @api.model
+ def get_values(self):
+ res = super(HrExpenseConfigSettings, self).get_values()
+ res.update(
+ 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_values(self):
+ super(HrExpenseConfigSettings, self).set_values()
+ 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)
+
+ @api.onchange('use_mailgateway')
+ def _onchange_use_mailgateway(self):
+ if not self.use_mailgateway:
+ self.alias_prefix = False
diff --git a/addons/hr_expense/models/res_config.py b/addons/hr_expense/models/res_config.py
deleted file mode 100644
index dad3deec031..00000000000
--- a/addons/hr_expense/models/res_config.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from odoo import api, fields, models
-
-class HrExpenseConfigSettings(models.TransientModel):
- _name = 'hr.expense.config.settings'
- _inherit = 'res.config.settings'
-
- alias_prefix = fields.Char('Default Alias Name for Expenses')
- alias_domain = fields.Char('Alias Domain', default=lambda self: self.env["ir.config_parameter"].sudo().get_param("mail.catchall.domain"))
- group_analytic_accounting = fields.Boolean(string='Analytic Accounting',
- implied_group='analytic.group_analytic_accounting')
- group_uom = fields.Boolean("Units of Measure",
- implied_group='product.group_uom')
- default_alias_email = fields.Boolean(string='Let your employees record expenses by email', default_model='hr.expense.config.settings')
- module_project = fields.Boolean(string="Project")
- module_sale = fields.Boolean(string="Customer Billing")
-
- @api.model
- def get_default_alias_prefix(self, fields):
- alias_name = self.env.ref('hr_expense.mail_alias_expense').alias_name
- return {'alias_prefix': alias_name}
-
- @api.multi
- def set_default_alias_prefix(self):
- for record in self:
- self.env.ref('hr_expense.mail_alias_expense').write({'alias_name': record.alias_prefix})
diff --git a/addons/hr_expense/views/res_config_views.xml b/addons/hr_expense/views/hr_expense_config_settings_views.xml
similarity index 95%
rename from addons/hr_expense/views/res_config_views.xml
rename to addons/hr_expense/views/hr_expense_config_settings_views.xml
index bb550bd7caf..19078d6071c 100644
--- a/addons/hr_expense/views/res_config_views.xml
+++ b/addons/hr_expense/views/hr_expense_config_settings_views.xml
@@ -16,14 +16,14 @@
-
+
-
+
Let your employees record expenses by email
-
+
-
+
diff --git a/addons/hr_timesheet/__manifest__.py b/addons/hr_timesheet/__manifest__.py
index e10aaad1c90..51eb66b03ae 100644
--- a/addons/hr_timesheet/__manifest__.py
+++ b/addons/hr_timesheet/__manifest__.py
@@ -25,7 +25,7 @@ up a management by affair.
'security/hr_timesheet_security.xml',
'security/ir.model.access.csv',
'views/hr_timesheet_views.xml',
- 'views/res_config_views.xml',
+ 'views/hr_timesheet_config_settings_views.xml',
'views/project_views.xml',
'report/hr_timesheet_report_view.xml',
'report/report_timesheet_templates.xml',
diff --git a/addons/hr_timesheet/models/__init__.py b/addons/hr_timesheet/models/__init__.py
index 5dd4c7fb37d..a07ab14a3dc 100644
--- a/addons/hr_timesheet/models/__init__.py
+++ b/addons/hr_timesheet/models/__init__.py
@@ -2,5 +2,5 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import hr_timesheet
-from . import res_config
+from . import hr_timesheet_config_settings
from . import project
diff --git a/addons/hr_timesheet/models/res_config.py b/addons/hr_timesheet/models/hr_timesheet_config_settings.py
similarity index 100%
rename from addons/hr_timesheet/models/res_config.py
rename to addons/hr_timesheet/models/hr_timesheet_config_settings.py
diff --git a/addons/hr_timesheet/views/res_config_views.xml b/addons/hr_timesheet/views/hr_timesheet_config_settings_views.xml
similarity index 100%
rename from addons/hr_timesheet/views/res_config_views.xml
rename to addons/hr_timesheet/views/hr_timesheet_config_settings_views.xml
diff --git a/addons/l10n_be_hr_payroll_fleet/models/fleet_config_settings.py b/addons/l10n_be_hr_payroll_fleet/models/fleet_config_settings.py
index de331e9a611..8596b28c251 100644
--- a/addons/l10n_be_hr_payroll_fleet/models/fleet_config_settings.py
+++ b/addons/l10n_be_hr_payroll_fleet/models/fleet_config_settings.py
@@ -10,13 +10,14 @@ class FleetConfigSettings(models.TransientModel):
max_unused_cars = fields.Integer(string='Maximum unused cars')
- @api.multi
- def set_default_max_unused_cars(self):
+ def set_values(self):
+ super(FleetConfigSettings, self).set_values()
Param = self.env['ir.config_parameter'].sudo()
Param.set_param("l10n_be_hr_payroll_fleet.max_unused_cars", self.max_unused_cars)
@api.model
- def get_default_max_unused_cars(self, fields):
+ def get_values(self):
+ res = super(FleetConfigSettings, self).get_values()
params = self.env['ir.config_parameter'].sudo()
- max_unused_cars = params.get_param('l10n_be_hr_payroll_fleet.max_unused_cars', default=3)
- return dict(max_unused_cars=int(max_unused_cars))
+ res.update(max_unused_cars=params.get_param('l10n_be_hr_payroll_fleet.max_unused_cars', default=3))
+ return res
diff --git a/addons/l10n_ch/__manifest__.py b/addons/l10n_ch/__manifest__.py
index f2d4b5c0b32..fc73908ddc5 100644
--- a/addons/l10n_ch/__manifest__.py
+++ b/addons/l10n_ch/__manifest__.py
@@ -39,7 +39,7 @@ Here is how it works:
'report/isr_report.xml',
'views/res_bank_view.xml',
'views/account_invoice_view.xml',
- 'views/res_config_view.xml',
+ 'views/account_config_settings_views.xml',
],
'demo': [
diff --git a/addons/l10n_ch/models/__init__.py b/addons/l10n_ch/models/__init__.py
index ee8bc390589..0926f969484 100644
--- a/addons/l10n_ch/models/__init__.py
+++ b/addons/l10n_ch/models/__init__.py
@@ -1,9 +1,9 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import account_config_settings
from . import account_invoice
from . import mail_compose_message
from . import mail_template
from . import res_bank
from . import res_company
-from . import res_config
\ No newline at end of file
diff --git a/addons/l10n_ch/models/res_config.py b/addons/l10n_ch/models/account_config_settings.py
similarity index 100%
rename from addons/l10n_ch/models/res_config.py
rename to addons/l10n_ch/models/account_config_settings.py
diff --git a/addons/l10n_ch/views/res_config_view.xml b/addons/l10n_ch/views/account_config_settings_views.xml
similarity index 100%
rename from addons/l10n_ch/views/res_config_view.xml
rename to addons/l10n_ch/views/account_config_settings_views.xml
diff --git a/addons/l10n_eu_service/wizard/wizard.xml b/addons/l10n_eu_service/wizard/wizard.xml
index 4a5afe0e54a..917ad1df67a 100644
--- a/addons/l10n_eu_service/wizard/wizard.xml
+++ b/addons/l10n_eu_service/wizard/wizard.xml
@@ -52,6 +52,5 @@
- automatic
diff --git a/addons/l10n_mx/__manifest__.py b/addons/l10n_mx/__manifest__.py
index bceba50d3cf..49baf7a72ad 100644
--- a/addons/l10n_mx/__manifest__.py
+++ b/addons/l10n_mx/__manifest__.py
@@ -40,6 +40,6 @@ With this module you will have:
"data/account_tax_data.xml",
"data/fiscal_position_data.xml",
"data/account_chart_template_data.yml",
- "views/res_config_view.xml",
+ "views/account_config_settings_views.xml",
],
}
diff --git a/addons/l10n_mx/models/__init__.py b/addons/l10n_mx/models/__init__.py
index f2b298f3cb9..2e34a1305b9 100644
--- a/addons/l10n_mx/models/__init__.py
+++ b/addons/l10n_mx/models/__init__.py
@@ -2,6 +2,6 @@
# Copyright 2016 Vauxoo (https://www.vauxoo.com)
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
-from . import chart_template
from . import account
-from . import res_config
+from . import account_config_settings
+from . import chart_template
diff --git a/addons/l10n_mx/models/res_config.py b/addons/l10n_mx/models/account_config_settings.py
similarity index 81%
rename from addons/l10n_mx/models/res_config.py
rename to addons/l10n_mx/models/account_config_settings.py
index 913a422cf4b..aa24e02a747 100644
--- a/addons/l10n_mx/models/res_config.py
+++ b/addons/l10n_mx/models/account_config_settings.py
@@ -4,6 +4,6 @@ from odoo import fields, models
class AccountConfigSettings(models.TransientModel):
- _inherit = 'res.config.settings'
+ _inherit = 'account.config.settings'
module_l10n_mx_edi = fields.Boolean('Mexican Electronic Invoicing')
diff --git a/addons/l10n_mx/views/res_config_view.xml b/addons/l10n_mx/views/account_config_settings_views.xml
similarity index 100%
rename from addons/l10n_mx/views/res_config_view.xml
rename to addons/l10n_mx/views/account_config_settings_views.xml
diff --git a/addons/mail/__manifest__.py b/addons/mail/__manifest__.py
index c68b3ee7e16..fc1ceb6dedc 100644
--- a/addons/mail/__manifest__.py
+++ b/addons/mail/__manifest__.py
@@ -37,7 +37,7 @@ Main Features
'views/mail_channel_views.xml',
'views/mail_shortcode_views.xml',
'views/mail_activity_views.xml',
- 'views/res_config_views.xml',
+ 'views/base_config_settings_views.xml',
'data/mail_data.xml',
'data/mail_channel_data.xml',
'data/mail_shortcode_data.xml',
diff --git a/addons/mail/models/__init__.py b/addons/mail/models/__init__.py
index f0fbe714fbf..1005d2527e0 100644
--- a/addons/mail/models/__init__.py
+++ b/addons/mail/models/__init__.py
@@ -14,7 +14,7 @@ from . import mail_template
from . import mail_shortcode
from . import res_partner
from . import res_users
-from . import res_config
+from . import base_config_settings
from . import update
from . import ir_actions
from . import ir_autovacuum
diff --git a/addons/mail/models/res_config.py b/addons/mail/models/base_config_settings.py
similarity index 62%
rename from addons/mail/models/res_config.py
rename to addons/mail/models/base_config_settings.py
index c0e4f6bab62..4a18bae515f 100644
--- a/addons/mail/models/res_config.py
+++ b/addons/mail/models/base_config_settings.py
@@ -8,7 +8,7 @@ from werkzeug import urls
from odoo import api, fields, models, tools
-class BaseConfiguration(models.TransientModel):
+class BaseConfigSettings(models.TransientModel):
""" Inherit the base settings to add a counter of failed email + configure
the alias domain. """
_inherit = 'base.config.settings'
@@ -18,14 +18,11 @@ class BaseConfiguration(models.TransientModel):
"the Odoo server, enter the domain name here.")
@api.model
- def get_default_fail_counter(self, fields):
- previous_date = datetime.datetime.now() - datetime.timedelta(days=30)
- return {
- 'fail_counter': self.env['mail.mail'].sudo().search_count([('date', '>=', previous_date.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)), ('state', '=', 'exception')]),
- }
+ def get_values(self):
+ res = super(BaseConfigSettings, self).get_values()
+
+ previous_date = datetime.datetime.now() - datetime.timedelta(days=30)
- @api.model
- def get_default_alias_domain(self, fields):
alias_domain = self.env["ir.config_parameter"].get_param("mail.catchall.domain", default=None)
if alias_domain is None:
domain = self.env["ir.config_parameter"].get_param("web.base.url")
@@ -33,9 +30,16 @@ class BaseConfiguration(models.TransientModel):
alias_domain = urls.url_parse(domain).host
except Exception:
pass
- return {'alias_domain': alias_domain or False}
- @api.multi
- def set_alias_domain(self):
- for record in self:
- self.env['ir.config_parameter'].set_param("mail.catchall.domain", record.alias_domain or '')
+ res.update(
+ fail_counter=self.env['mail.mail'].sudo().search_count([
+ ('date', '>=', previous_date.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)),
+ ('state', '=', 'exception')]),
+ alias_domain=alias_domain or False,
+ )
+
+ return res
+
+ def set_values(self):
+ super(BaseConfigSettings, self).set_values()
+ self.env['ir.config_parameter'].set_param("mail.catchall.domain", self.alias_domain or '')
diff --git a/addons/mail/views/res_config_views.xml b/addons/mail/views/base_config_settings_views.xml
similarity index 100%
rename from addons/mail/views/res_config_views.xml
rename to addons/mail/views/base_config_settings_views.xml
diff --git a/addons/mass_mailing/__manifest__.py b/addons/mass_mailing/__manifest__.py
index c391a611fb0..3ba6b0811b6 100644
--- a/addons/mass_mailing/__manifest__.py
+++ b/addons/mass_mailing/__manifest__.py
@@ -30,7 +30,7 @@ professional emails and reuse templates in a few clicks.
'views/link_tracker_views.xml',
'views/mass_mailing_template.xml',
'views/mass_mailing_views.xml',
- 'views/res_config_views.xml',
+ 'views/mass_mailing_config_settings_views.xml',
'security/ir.model.access.csv',
'views/editor_field_html.xml',
'views/themes_templates.xml',
diff --git a/addons/mass_mailing/models/__init__.py b/addons/mass_mailing/models/__init__.py
index 06f5f05cff3..a04c0c665f6 100644
--- a/addons/mass_mailing/models/__init__.py
+++ b/addons/mass_mailing/models/__init__.py
@@ -5,6 +5,6 @@ from . import mass_mailing
from . import mass_mailing_stats
from . import mail_mail
from . import mail_thread
-from . import res_config
+from . import mass_mailing_config_settings
from . import mass_mailing_report
from . import link_tracker
diff --git a/addons/mass_mailing/models/res_config.py b/addons/mass_mailing/models/mass_mailing_config_settings.py
similarity index 100%
rename from addons/mass_mailing/models/res_config.py
rename to addons/mass_mailing/models/mass_mailing_config_settings.py
diff --git a/addons/mass_mailing/views/res_config_views.xml b/addons/mass_mailing/views/mass_mailing_config_settings_views.xml
similarity index 100%
rename from addons/mass_mailing/views/res_config_views.xml
rename to addons/mass_mailing/views/mass_mailing_config_settings_views.xml
diff --git a/addons/mrp/models/mrp_config_settings.py b/addons/mrp/models/mrp_config_settings.py
index 53411d9fd35..4bc95b9c333 100644
--- a/addons/mrp/models/mrp_config_settings.py
+++ b/addons/mrp/models/mrp_config_settings.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import fields, models
+from odoo import api, fields, models
class MrpConfigSettings(models.TransientModel):
@@ -11,7 +11,7 @@ class MrpConfigSettings(models.TransientModel):
company_id = fields.Many2one('res.company', string='Company', required=True,
default=lambda self: self.env.user.company_id)
manufacturing_lead = fields.Float(related='company_id.manufacturing_lead', string="Manufacturing Lead Time")
- default_use_manufacturing_lead = fields.Boolean(string="Default Manufacturing Lead Time", default_model='mrp.config.settings')
+ use_manufacturing_lead = fields.Boolean(string="Default Manufacturing Lead Time", oldname='default_use_manufacturing_lead')
group_product_variant = fields.Boolean("Attributes & Variants",
implied_group='product.group_product_variant')
module_mrp_byproduct = fields.Boolean("By-Products")
@@ -22,3 +22,21 @@ class MrpConfigSettings(models.TransientModel):
group_mrp_routings = fields.Boolean("Work Orders",
implied_group='mrp.group_mrp_routings')
module_mrp_repair = fields.Boolean("Repair")
+
+ @api.model
+ def get_values(self):
+ res = super(MrpConfigSettings, self).get_values()
+ res.update(
+ use_manufacturing_lead=self.env['ir.config_parameter'].sudo().get_param('mrp.use_manufacturing_lead')
+ )
+ return res
+
+ @api.multi
+ def set_values(self):
+ super(MrpConfigSettings, self).set_values()
+ self.env['ir.config_parameter'].sudo().set_param('mrp.use_manufacturing_lead', self.use_manufacturing_lead)
+
+ @api.onchange('use_manufacturing_lead')
+ def _onchange_use_manufacturing_lead(self):
+ if not self.use_manufacturing_lead:
+ self.manufacturing_lead = 0.0
\ No newline at end of file
diff --git a/addons/mrp/views/mrp_config_settings_views.xml b/addons/mrp/views/mrp_config_settings_views.xml
index c645f1362b4..df407343714 100644
--- a/addons/mrp/views/mrp_config_settings_views.xml
+++ b/addons/mrp/views/mrp_config_settings_views.xml
@@ -130,15 +130,15 @@
-
+
-
+
Schedule manufacturing orders earlier to avoid delays
-
+
Move forward deadline start dates by
days
diff --git a/addons/pad/__manifest__.py b/addons/pad/__manifest__.py
index 3d68dcb2233..7781f56c562 100644
--- a/addons/pad/__manifest__.py
+++ b/addons/pad/__manifest__.py
@@ -16,7 +16,7 @@ pads (by default, http://etherpad.com/).
'depends': ['web', 'base_setup'],
'data': [
'views/pad.xml',
- 'views/res_config_view.xml',
+ 'views/base_config_settings_views.xml',
],
'demo': ['data/pad_demo.xml'],
'web': True,
diff --git a/addons/pad/models/__init__.py b/addons/pad/models/__init__.py
index 8d32f68a656..91cef398de7 100644
--- a/addons/pad/models/__init__.py
+++ b/addons/pad/models/__init__.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import base_config_settings
from . import pad
from . import res_company
-from . import res_config
diff --git a/addons/pad/models/res_config.py b/addons/pad/models/base_config_settings.py
similarity index 100%
rename from addons/pad/models/res_config.py
rename to addons/pad/models/base_config_settings.py
diff --git a/addons/pad/views/res_config_view.xml b/addons/pad/views/base_config_settings_views.xml
similarity index 100%
rename from addons/pad/views/res_config_view.xml
rename to addons/pad/views/base_config_settings_views.xml
diff --git a/addons/point_of_sale/__manifest__.py b/addons/point_of_sale/__manifest__.py
index 2ff4b266761..27d8303c6b1 100644
--- a/addons/point_of_sale/__manifest__.py
+++ b/addons/point_of_sale/__manifest__.py
@@ -56,7 +56,7 @@ Main Features
'views/account_statement_report.xml',
'views/res_users_view.xml',
'views/res_partner_view.xml',
- 'views/res_config_view.xml',
+ 'views/pos_config_settings_views.xml',
'views/report_statement.xml',
'views/report_userlabel.xml',
'views/report_saledetails.xml',
diff --git a/addons/point_of_sale/models/__init__.py b/addons/point_of_sale/models/__init__.py
index 4d04c0f9981..9df58f2c5fe 100644
--- a/addons/point_of_sale/models/__init__.py
+++ b/addons/point_of_sale/models/__init__.py
@@ -6,9 +6,9 @@ from . import account_journal
from . import barcode_rule
from . import pos_category
from . import pos_config
+from . import pos_config_settings
from . import pos_order
from . import pos_session
from . import product
-from . import res_config
from . import res_partner
from . import res_users
diff --git a/addons/point_of_sale/models/res_config.py b/addons/point_of_sale/models/pos_config_settings.py
similarity index 62%
rename from addons/point_of_sale/models/res_config.py
rename to addons/point_of_sale/models/pos_config_settings.py
index 89539d6156c..db36ef0ddd6 100644
--- a/addons/point_of_sale/models/res_config.py
+++ b/addons/point_of_sale/models/pos_config_settings.py
@@ -3,7 +3,7 @@
from odoo import api, fields, models
-class PosConfiguration(models.TransientModel):
+class PosConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
_name = 'pos.config.settings'
@@ -17,11 +17,12 @@ class PosConfiguration(models.TransientModel):
implied_group='product.group_sale_pricelist',
help="""Allows to manage different prices based on rules per category of customers.
Example: 10% for retailers, promotion of 5 EUR on this product, etc.""")
- default_sale_price = fields.Boolean("A single sale price per product", default_model='pos.config.settings')
- default_pricelist_setting = fields.Selection([
+ use_pos_sale_price = fields.Boolean("A single sale price per product", oldname='default_sale_price')
+ pos_pricelist_setting = fields.Selection([
('percentage', 'Multiple prices per product (e.g. quantity, shop-specific)'),
('formula', 'Price computed from formulas (discounts, margins, rounding)')
- ], string="Multiple Prices per Products", default_model='pos.config.settings')
+ ], string="Multiple Prices per Products",
+ oldname='default_pricelist_setting')
module_pos_restaurant = fields.Boolean(string="Restaurant")
module_pos_loyalty = fields.Boolean(string="Loyalty Program")
module_pos_discount = fields.Boolean(string="Global Discounts")
@@ -29,22 +30,22 @@ class PosConfiguration(models.TransientModel):
module_pos_reprint = fields.Boolean(string="Reprint Receipt")
module_pos_data_drinks = fields.Boolean(string="Import common drinks data")
- @api.onchange('default_sale_price')
+ @api.onchange('use_pos_sale_price')
def _onchange_fix_sale_price(self):
- if not self.default_sale_price:
- self.default_pricelist_setting = False
- if self.default_sale_price and not self.default_pricelist_setting:
- self.default_pricelist_setting = 'percentage'
+ if not self.use_pos_sale_price:
+ self.pos_pricelist_setting = False
+ if self.use_pos_sale_price and not self.pos_pricelist_setting:
+ self.pos_pricelist_setting = 'percentage'
- @api.onchange('default_pricelist_setting')
+ @api.onchange('pos_pricelist_setting')
def _onchange_sale_price(self):
- if self.default_pricelist_setting == 'percentage':
+ if self.pos_pricelist_setting == 'percentage':
self.update({
'group_product_pricelist': True,
'group_sale_pricelist': True,
'group_pricelist_item': False,
})
- elif self.default_pricelist_setting == 'formula':
+ elif self.pos_pricelist_setting == 'formula':
self.update({
'group_product_pricelist': False,
'group_sale_pricelist': True,
@@ -56,3 +57,16 @@ class PosConfiguration(models.TransientModel):
'group_sale_pricelist': False,
'group_pricelist_item': False,
})
+
+ def get_values(self):
+ res = super(PosConfigSettings, self).get_values()
+ res.update(
+ 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_values(self):
+ super(PosConfigSettings, self).set_values()
+ 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)
diff --git a/addons/point_of_sale/views/res_config_view.xml b/addons/point_of_sale/views/pos_config_settings_views.xml
similarity index 96%
rename from addons/point_of_sale/views/res_config_view.xml
rename to addons/point_of_sale/views/pos_config_settings_views.xml
index 1a16886e973..71b79b54ad1 100644
--- a/addons/point_of_sale/views/res_config_view.xml
+++ b/addons/point_of_sale/views/pos_config_settings_views.xml
@@ -55,23 +55,23 @@
-
+
-
+
Set shop-specific prices, seasonal discounts, etc.
-
+
-
+
+ string="Pricelists" attrs="{'invisible': [('pos_pricelist_setting', '=', False)]}" class="btn-link"/>
diff --git a/addons/product/models/base_config_settings.py b/addons/product/models/base_config_settings.py
index 3a11991586b..9ff5d283794 100644
--- a/addons/product/models/base_config_settings.py
+++ b/addons/product/models/base_config_settings.py
@@ -14,14 +14,15 @@ class BaseConfigSettings(models.TransientModel):
" * Unchecked : Each company can see only its product (product where company is defined). Product not related to a company are visible for all companies.")
@api.model
- def get_default_company_share_product(self, fields):
+ def get_values(self):
+ res = super(BaseConfigSettings, self).get_values()
product_rule = self.env.ref('product.product_comp_rule')
- return {
- 'company_share_product': not bool(product_rule.active)
- }
+ res.update(
+ company_share_product=not bool(product_rule.active),
+ )
+ return res
- @api.multi
- def set_auth_company_share_product(self):
- self.ensure_one()
+ def set_values(self):
+ super(BaseConfigSettings, self).set_values()
product_rule = self.env.ref('product.product_comp_rule')
product_rule.write({'active': not bool(self.company_share_product)})
diff --git a/addons/project/__manifest__.py b/addons/project/__manifest__.py
index df6cbb01f0f..08f2d23e57c 100644
--- a/addons/project/__manifest__.py
+++ b/addons/project/__manifest__.py
@@ -40,7 +40,7 @@ Dashboard / Reports for Project Management will include:
'report/project_report_views.xml',
'views/project_views.xml',
'views/res_partner_views.xml',
- 'views/res_config_views.xml',
+ 'views/project_config_settings_views.xml',
'views/project_templates.xml',
'data/web_planner_data.xml',
'data/project_mail_template_data.xml',
diff --git a/addons/project/data/project_data.xml b/addons/project/data/project_data.xml
index fe047401c22..40568f36c2d 100644
--- a/addons/project/data/project_data.xml
+++ b/addons/project/data/project_data.xml
@@ -18,10 +18,6 @@
project.task
-
-
-
-
diff --git a/addons/project/models/__init__.py b/addons/project/models/__init__.py
index a8a24d472c2..0b24938aa3e 100644
--- a/addons/project/models/__init__.py
+++ b/addons/project/models/__init__.py
@@ -2,7 +2,7 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import project
+from . import project_config_settings
from . import res_company
from . import res_partner
-from . import res_config
from . import web_planner
diff --git a/addons/project/models/project.py b/addons/project/models/project.py
index e182cfe9459..cfe3f91aff5 100644
--- a/addons/project/models/project.py
+++ b/addons/project/models/project.py
@@ -252,9 +252,6 @@ class Project(models.Model):
@api.model
def create(self, vals):
- ir_values = self.env['ir.values'].get_default('project.config.settings', 'generate_project_alias')
- if ir_values:
- vals['alias_name'] = vals.get('alias_name') or vals.get('name')
# Prevent double project creation when 'use_tasks' is checked
self = self.with_context(project_creation_in_progress=True, mail_create_nosubscribe=True)
project = super(Project, self).create(vals)
diff --git a/addons/project/models/res_config.py b/addons/project/models/project_config_settings.py
similarity index 62%
rename from addons/project/models/res_config.py
rename to addons/project/models/project_config_settings.py
index a06d3bf2190..4f6b6f2f491 100644
--- a/addons/project/models/res_config.py
+++ b/addons/project/models/project_config_settings.py
@@ -14,11 +14,6 @@ class ProjectConfiguration(models.TransientModel):
module_hr_timesheet = fields.Boolean("Timesheets")
module_project_timesheet_synchro = fields.Boolean("Awesome Timesheet")
module_rating_project = fields.Boolean(string="Rating on Tasks")
- generate_project_alias = fields.Selection([
- (0, "Do not create an email alias automatically"),
- (1, "Automatically generate an email alias at the project creation")
- ], string="Project Alias",
- help="Odoo will generate an email alias at the project creation from project name.")
module_project_forecast = fields.Boolean(string="Forecasts")
module_hr_holidays = fields.Boolean("Leave Management")
module_hr_timesheet_attendance = fields.Boolean("Attendances")
@@ -26,10 +21,3 @@ class ProjectConfiguration(models.TransientModel):
module_hr_expense = fields.Boolean("Expenses")
module_project_issue = fields.Boolean("Issue Tracking")
group_subtask_project = fields.Boolean("Sub-tasks", implied_group="project.group_subtask_project")
-
- @api.multi
- def set_default_generate_project_alias(self):
- check = self.env.user.has_group('base.group_system')
- Values = check and self.env['ir.values'].sudo() or self.env['ir.values']
- for config in self:
- Values.set_default('project.config.settings', 'generate_project_alias', config.generate_project_alias)
diff --git a/addons/project/views/res_config_views.xml b/addons/project/views/project_config_settings_views.xml
similarity index 100%
rename from addons/project/views/res_config_views.xml
rename to addons/project/views/project_config_settings_views.xml
diff --git a/addons/project_timesheet_holidays/__manifest__.py b/addons/project_timesheet_holidays/__manifest__.py
index 73f0ac35342..600bad8b681 100644
--- a/addons/project_timesheet_holidays/__manifest__.py
+++ b/addons/project_timesheet_holidays/__manifest__.py
@@ -15,7 +15,7 @@ on leaves. Project and task can be configured company-wide.
""",
'depends': ['hr_timesheet', 'hr_holidays'],
'data': [
- 'views/res_config_views.xml',
+ 'views/hr_timesheet_config_settings_views.xml',
'views/hr_holidays_views.xml',
],
'demo': [],
diff --git a/addons/project_timesheet_holidays/models/__init__.py b/addons/project_timesheet_holidays/models/__init__.py
index 59576c427c4..26656f63db2 100644
--- a/addons/project_timesheet_holidays/models/__init__.py
+++ b/addons/project_timesheet_holidays/models/__init__.py
@@ -3,5 +3,5 @@
from . import account_analytic
from . import hr_holidays
+from . import hr_timesheet_config_settings
from . import res_company
-from . import res_config
diff --git a/addons/project_timesheet_holidays/models/res_config.py b/addons/project_timesheet_holidays/models/hr_timesheet_config_settings.py
similarity index 100%
rename from addons/project_timesheet_holidays/models/res_config.py
rename to addons/project_timesheet_holidays/models/hr_timesheet_config_settings.py
diff --git a/addons/project_timesheet_holidays/views/res_config_views.xml b/addons/project_timesheet_holidays/views/hr_timesheet_config_settings_views.xml
similarity index 100%
rename from addons/project_timesheet_holidays/views/res_config_views.xml
rename to addons/project_timesheet_holidays/views/hr_timesheet_config_settings_views.xml
diff --git a/addons/purchase/__manifest__.py b/addons/purchase/__manifest__.py
index 1b68f43f35f..3e3888ca1c5 100644
--- a/addons/purchase/__manifest__.py
+++ b/addons/purchase/__manifest__.py
@@ -40,7 +40,7 @@ Dashboard / Reports for Purchase Management will include:
'views/res_partner_views.xml',
'report/purchase_report_views.xml',
'data/mail_template_data.xml',
- 'views/res_config_views.xml',
+ 'views/purchase_config_settings_views.xml',
'views/account_config_settings_views.xml',
'report/purchase_order_templates.xml',
'report/purchase_quotation_templates.xml',
diff --git a/addons/purchase/models/__init__.py b/addons/purchase/models/__init__.py
index 91e0b0ba492..7de7d10071f 100644
--- a/addons/purchase/models/__init__.py
+++ b/addons/purchase/models/__init__.py
@@ -3,8 +3,8 @@
from . import account_invoice
from . import purchase
-from . import stock_config_settings
+from . import purchase_config_settings
from . import res_company
-from . import res_config
from . import res_partner
from . import stock
+from . import stock_config_settings
diff --git a/addons/purchase/models/res_config.py b/addons/purchase/models/purchase_config_settings.py
similarity index 88%
rename from addons/purchase/models/res_config.py
rename to addons/purchase/models/purchase_config_settings.py
index d5c8708725e..893670750c4 100644
--- a/addons/purchase/models/res_config.py
+++ b/addons/purchase/models/purchase_config_settings.py
@@ -37,17 +37,16 @@ class PurchaseConfigSettings(models.TransientModel):
is_installed_sale = fields.Boolean()
@api.multi
- def get_default_is_installed_sale(self, fields):
- return {
- 'is_installed_sale': self.env['ir.module.module'].search([('name', '=', 'sale'), ('state', '=', 'installed')]).id
- }
+ def get_values(self):
+ res = super(PurchaseConfigSettings, self).get_values()
+ res.update(
+ is_installed_sale=self.env['ir.module.module'].search([('name', '=', 'sale'), ('state', '=', 'installed')]).id
+ )
+ return res
- @api.multi
- def set_lock_confirmed_po(self):
+ def set_values(self):
+ super(PurchaseConfigSettings, self).set_values()
self.po_lock = 'lock' if self.lock_confirmed_po else 'edit'
-
- @api.multi
- def set_po_order_approval(self):
self.po_double_validation = 'two_step' if self.po_order_approval else 'one_step'
diff --git a/addons/purchase/models/stock_config_settings.py b/addons/purchase/models/stock_config_settings.py
index d69b07bc8bb..d1adcc4a1ec 100644
--- a/addons/purchase/models/stock_config_settings.py
+++ b/addons/purchase/models/stock_config_settings.py
@@ -7,5 +7,24 @@ from odoo import api, fields, models
class StockConfigSettings(models.TransientModel):
_inherit = 'stock.config.settings'
- po_lead = fields.Float(related='company_id.po_lead', default=lambda self: self.env.user.company_id.po_lead)
- default_new_po_lead = fields.Boolean(string="Security Lead Time for Purchase", default_model="stock.config.settings", help="Margin of error for vendor lead times. When the system generates Purchase Orders for reordering products,they will be scheduled that many days earlier to cope with unexpected vendor delays.")
+ po_lead = fields.Float(related='company_id.po_lead')
+ use_po_lead = fields.Boolean(
+ string="Security Lead Time for Purchase",
+ oldname='default_new_po_lead',
+ help="Margin of error for vendor lead times. When the system generates Purchase Orders for reordering products,they will be scheduled that many days earlier to cope with unexpected vendor delays.")
+
+ @api.onchange('use_po_lead')
+ def _onchange_use_po_lead(self):
+ if not self.use_po_lead:
+ self.po_lead = 0.0
+
+ def get_values(self):
+ res = super(StockConfigSettings, self).get_values()
+ res.update(
+ use_po_lead=self.env['ir.config_parameter'].sudo().get_param('purchase.use_po_lead')
+ )
+ return res
+
+ def set_values(self):
+ super(StockConfigSettings, self).set_values()
+ self.env['ir.config_parameter'].sudo().set_param('purchase.use_po_lead', self.use_po_lead)
diff --git a/addons/purchase/views/res_config_views.xml b/addons/purchase/views/purchase_config_settings_views.xml
similarity index 100%
rename from addons/purchase/views/res_config_views.xml
rename to addons/purchase/views/purchase_config_settings_views.xml
diff --git a/addons/purchase/views/stock_config_settings_views.xml b/addons/purchase/views/stock_config_settings_views.xml
index 1c29d7f314c..e5fc8d412da 100644
--- a/addons/purchase/views/stock_config_settings_views.xml
+++ b/addons/purchase/views/stock_config_settings_views.xml
@@ -9,16 +9,16 @@
-
+
-
+
Schedule receivings earlier to avoid delays
-
+
Move forward expected delivery dates by days
diff --git a/addons/sale/models/account_invoice.py b/addons/sale/models/account_invoice.py
index 616bfa78f1a..5163f4baa6c 100644
--- a/addons/sale/models/account_invoice.py
+++ b/addons/sale/models/account_invoice.py
@@ -15,7 +15,7 @@ class AccountInvoice(models.Model):
def _default_comment(self):
invoice_type = self.env.context.get('type', 'out_invoice')
- if invoice_type == 'out_invoice':
+ if invoice_type == 'out_invoice' and self.env['ir.config_parameter'].sudo().get_param('sale.use_sale_note'):
return self.env.user.company_id.sale_note
team_id = fields.Many2one('crm.team', string='Sales Channel', default=_get_default_team, oldname='section_id')
diff --git a/addons/sale/models/res_company.py b/addons/sale/models/res_company.py
index 91c226bf709..54a389d315e 100644
--- a/addons/sale/models/res_company.py
+++ b/addons/sale/models/res_company.py
@@ -6,4 +6,5 @@ from odoo import fields, models
class ResCompany(models.Model):
_inherit = "res.company"
+
sale_note = fields.Text(string='Default Terms and Conditions', translate=True)
diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py
index 453430b5e48..d1f283062ee 100644
--- a/addons/sale/models/sale.py
+++ b/addons/sale/models/sale.py
@@ -95,7 +95,7 @@ class SaleOrder(models.Model):
@api.model
def _default_note(self):
- return self.env.user.company_id.sale_note
+ return self.env['ir.config_parameter'].sudo().get_param('sale.use_sale_note') and self.env.user.company_id.sale_note or ''
@api.model
def _get_default_team(self):
@@ -225,7 +225,7 @@ class SaleOrder(models.Model):
'partner_invoice_id': addr['invoice'],
'partner_shipping_id': addr['delivery'],
}
- if self.env.user.company_id.sale_note:
+ if self.env['ir.config_parameter'].sudo().get_param('sale.use_sale_note') and self.env.user.company_id.sale_note:
values['note'] = self.with_context(lang=self.partner_id.lang).env.user.company_id.sale_note
if self.partner_id.user_id:
@@ -492,7 +492,7 @@ class SaleOrder(models.Model):
if self.env.context.get('send_email'):
self.force_quotation_send()
order.order_line._action_procurement_create()
- if self.env['ir.values'].get_default('sale.config.settings', 'auto_done_setting'):
+ if self.env['ir.config_parameter'].get_param('sale.auto_done_setting'):
self.action_done()
return True
diff --git a/addons/sale/models/sale_config_settings.py b/addons/sale/models/sale_config_settings.py
index 30e2d09702f..f84973e5226 100644
--- a/addons/sale/models/sale_config_settings.py
+++ b/addons/sale/models/sale_config_settings.py
@@ -4,11 +4,13 @@
from odoo import api, fields, models
-class SaleConfiguration(models.TransientModel):
+class SaleConfigSettings(models.TransientModel):
_inherit = 'sale.config.settings'
sale_note = fields.Text(related='company_id.sale_note', string="Terms & Conditions")
- default_use_sale_note = fields.Boolean(string='Default Terms & Conditions')
+ use_sale_note = fields.Boolean(
+ string='Default Terms & Conditions',
+ oldname='default_use_sale_note')
group_product_variant = fields.Boolean("Attributes & Variants",
implied_group='product.group_product_variant')
group_sale_pricelist = fields.Boolean("Use pricelists to adapt your price per customers",
@@ -30,7 +32,7 @@ class SaleConfiguration(models.TransientModel):
group_warning_sale = fields.Boolean("Warnings", implied_group='sale.group_warning_sale')
module_website_quote = fields.Boolean("Online Quotations & Templates")
group_sale_delivery_address = fields.Boolean("Customer Addresses", implied_group='sale.group_delivery_invoice_address')
- multi_sales_price = fields.Boolean("Multiple sales price per product", default_model='sale.config.settings')
+ multi_sales_price = fields.Boolean("Multiple sales price per product")
multi_sales_price_method = fields.Selection([
('percentage', 'Multiple prices per product (e.g. customer segments, currencies)'),
('formula', 'Price computed from formulas (discounts, margins, roundings)')
@@ -52,8 +54,7 @@ class SaleConfiguration(models.TransientModel):
help="Allows you to send pro-forma.")
sale_show_tax = fields.Selection([
('subtotal', 'Tax-Excluded Prices'),
- ('total', 'Tax-Included Prices')], "Tax Display",
- default='subtotal',
+ ('total', 'Tax-Included Prices')], string="Tax Display",
required=True)
default_invoice_policy = fields.Selection([
('order', 'Ordered quantities'),
@@ -61,10 +62,11 @@ class SaleConfiguration(models.TransientModel):
], 'Invoicing Policy',
default='order',
default_model='product.template')
- deposit_product_id_setting = fields.Many2one(
+ default_deposit_product_id = fields.Many2one(
'product.product',
'Deposit Product',
domain="[('type', '=', 'service')]",
+ oldname='deposit_product_id_setting',
help='Default product used for payment advances')
auto_done_setting = fields.Boolean("Lock Confirmed Orders")
module_sale_contract = fields.Boolean("Subscriptions")
@@ -86,25 +88,6 @@ class SaleConfiguration(models.TransientModel):
module_product_email_template = fields.Boolean("Specific Email")
module_sale_coupon = fields.Boolean("Coupons & Promotions")
- @api.model
- def get_default_use_sale_note(self, fields):
- default_use_sale_note = self.env['ir.config_parameter'].sudo().get_param('sale.default_use_sale_note', default=False)
- return dict(default_use_sale_note=default_use_sale_note)
-
- @api.multi
- def set_default_use_sale_note(self):
- self.env['ir.config_parameter'].sudo().set_param("sale.default_use_sale_note", self.default_use_sale_note)
-
- @api.model
- def get_default_sale_pricelist_setting(self, fields):
- sale_pricelist_setting = self.env['ir.values'].get_default('sale.config.settings', 'sale_pricelist_setting')
- multi_sales_price = sale_pricelist_setting in ['percentage', 'formula']
- return {
- 'sale_pricelist_setting': sale_pricelist_setting,
- 'multi_sales_price': multi_sales_price,
- 'multi_sales_price_method': multi_sales_price and sale_pricelist_setting or False
- }
-
@api.onchange('multi_sales_price', 'multi_sales_price_method')
def _onchange_sale_price(self):
if self.multi_sales_price and not self.multi_sales_price_method:
@@ -112,6 +95,9 @@ class SaleConfiguration(models.TransientModel):
'multi_sales_price_method': 'percentage',
})
self.sale_pricelist_setting = self.multi_sales_price and self.multi_sales_price_method or 'fixed'
+
+ @api.onchange('sale_pricelist_setting')
+ def _onchange_sale_pricelist_setting(self):
if self.sale_pricelist_setting == 'percentage':
self.update({
'group_product_pricelist': True,
@@ -131,18 +117,6 @@ class SaleConfiguration(models.TransientModel):
'group_pricelist_item': False,
})
- def set_default_sale_pricelist_setting(self):
- return self.env['ir.values'].sudo().set_default('sale.config.settings', 'sale_pricelist_setting', self.sale_pricelist_setting)
-
- def set_deposit_product_id_defaults(self):
- return self.env['ir.values'].sudo().set_default('sale.config.settings', 'deposit_product_id_setting', self.deposit_product_id_setting.id)
-
- def set_auto_done_defaults(self):
- return self.env['ir.values'].sudo().set_default('sale.config.settings', 'auto_done_setting', self.auto_done_setting)
-
- def set_sale_tax_defaults(self):
- return self.env['ir.values'].sudo().set_default('sale.config.settings', 'sale_show_tax', self.sale_show_tax)
-
@api.onchange('sale_show_tax')
def _onchange_sale_tax(self):
if self.sale_show_tax == "subtotal":
@@ -155,3 +129,26 @@ class SaleConfiguration(models.TransientModel):
'group_show_price_total': True,
'group_show_price_subtotal': False,
})
+
+ @api.model
+ def get_values(self):
+ res = super(SaleConfigSettings, self).get_values()
+ sale_pricelist_setting = self.env['ir.config_parameter'].sudo().get_param('sale.sale_pricelist_setting')
+ res.update(
+ 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'),
+ sale_show_tax=self.group_show_price_total and 'total' or 'subtotal',
+ multi_sales_price=sale_pricelist_setting in ['percentage', 'formula'],
+ multi_sales_price_method=sale_pricelist_setting in ['percentage', 'formula'] and sale_pricelist_setting or False,
+ sale_pricelist_setting=sale_pricelist_setting,
+ )
+ return res
+
+ @api.multi
+ def set_values(self):
+ super(SaleConfigSettings, self).set_values()
+ 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)
+ self.env['ir.config_parameter'].sudo().set_param('sale.sale_pricelist_setting', self.sale_pricelist_setting)
diff --git a/addons/sale/views/sale_config_settings_views.xml b/addons/sale/views/sale_config_settings_views.xml
index 0faf12227a2..fd8c087deaf 100644
--- a/addons/sale/views/sale_config_settings_views.xml
+++ b/addons/sale/views/sale_config_settings_views.xml
@@ -175,15 +175,15 @@
-
+
-
+
Show standard terms & conditions on orders
-
+
@@ -278,7 +278,7 @@
Product used for down payments
-
+
diff --git a/addons/sale/wizard/sale_make_invoice_advance.py b/addons/sale/wizard/sale_make_invoice_advance.py
index 976b6ae2dfe..0e146fd7c72 100644
--- a/addons/sale/wizard/sale_make_invoice_advance.py
+++ b/addons/sale/wizard/sale_make_invoice_advance.py
@@ -27,7 +27,7 @@ class SaleAdvancePaymentInv(models.TransientModel):
@api.model
def _default_product_id(self):
- product_id = self.env['ir.values'].get_default('sale.config.settings', 'deposit_product_id_setting')
+ product_id = self.env['ir.config_parameter'].get_param('sale.default_deposit_product_id')
return self.env['product.product'].browse(product_id)
@api.model
@@ -134,7 +134,7 @@ class SaleAdvancePaymentInv(models.TransientModel):
if not self.product_id:
vals = self._prepare_deposit_product()
self.product_id = self.env['product.product'].create(vals)
- self.env['ir.values'].sudo().set_default('sale.config.settings', 'deposit_product_id_setting', self.product_id.id)
+ self.env['ir.config_parameter'].sudo().set_param('sale.default_deposit_product_id', self.product_id.id)
sale_line_obj = self.env['sale.order.line']
for order in sale_orders:
diff --git a/addons/sale_stock/models/stock_config_settings.py b/addons/sale_stock/models/stock_config_settings.py
index d4590166076..7d9227725db 100644
--- a/addons/sale_stock/models/stock_config_settings.py
+++ b/addons/sale_stock/models/stock_config_settings.py
@@ -1,15 +1,34 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import fields, models
+from odoo import api, fields, models
class StockConfigSettings(models.TransientModel):
_inherit = 'stock.config.settings'
security_lead = fields.Float(related='company_id.security_lead')
- default_new_security_lead = fields.Boolean(string="Security Lead Time for Sales", default_model="stock.config.settings", help="Margin of error for dates promised to customers. Products will be scheduled for procurement and delivery that many days earlier than the actual promised date, to cope with unexpected delays in the supply chain.")
+ use_security_lead = fields.Boolean(
+ string="Security Lead Time for Sales",
+ oldname='default_new_security_lead',
+ help="Margin of error for dates promised to customers. Products will be scheduled for procurement and delivery that many days earlier than the actual promised date, to cope with unexpected delays in the supply chain.")
default_picking_policy = fields.Selection([
('direct', 'Ship products as soon as available, with back orders'),
('one', 'Ship all products at once')
], "Shipping Management", default='direct', default_model="sale.order", required=True)
+
+ @api.onchange('use_security_lead')
+ def _onchange_use_security_lead(self):
+ if not self.use_security_lead:
+ self.security_lead = 0.0
+
+ def get_values(self):
+ res = super(StockConfigSettings, self).get_values()
+ res.update(
+ use_security_lead=self.env['ir.config_parameter'].sudo().get_param('sale_stock.use_security_lead')
+ )
+ return res
+
+ def set_values(self):
+ super(StockConfigSettings, self).set_values()
+ self.env['ir.config_parameter'].sudo().set_param('sale_stock.use_security_lead', self.use_security_lead)
diff --git a/addons/sale_stock/views/stock_config_settings_views.xml b/addons/sale_stock/views/stock_config_settings_views.xml
index bc019ab07a4..96d8c9ef1da 100644
--- a/addons/sale_stock/views/stock_config_settings_views.xml
+++ b/addons/sale_stock/views/stock_config_settings_views.xml
@@ -37,16 +37,16 @@
-
+
-
+
Schedule deliveries earlier to avoid delays
-
+
Move forward expected delivery dates by days
diff --git a/addons/sales_team/__manifest__.py b/addons/sales_team/__manifest__.py
index f3d02eb8352..bda707e7d53 100644
--- a/addons/sales_team/__manifest__.py
+++ b/addons/sales_team/__manifest__.py
@@ -14,7 +14,7 @@ Using this application you can manage Sales Channels with CRM and/or Sales
'data': ['security/sales_team_security.xml',
'security/ir.model.access.csv',
'data/sales_team_data.xml',
- 'views/res_config_view.xml',
+ 'views/sale_config_settings_views.xml',
'views/crm_team_views.xml',
'views/sales_team_dashboard.xml',
],
diff --git a/addons/sales_team/models/__init__.py b/addons/sales_team/models/__init__.py
index 57f64bcc3e4..858af63daf3 100644
--- a/addons/sales_team/models/__init__.py
+++ b/addons/sales_team/models/__init__.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
from . import crm_team
from . import res_partner
from . import res_users
-from . import res_config
+from . import sale_config_settings
diff --git a/addons/sales_team/models/res_config.py b/addons/sales_team/models/sale_config_settings.py
similarity index 100%
rename from addons/sales_team/models/res_config.py
rename to addons/sales_team/models/sale_config_settings.py
diff --git a/addons/sales_team/views/res_config_view.xml b/addons/sales_team/views/sale_config_settings_views.xml
similarity index 100%
rename from addons/sales_team/views/res_config_view.xml
rename to addons/sales_team/views/sale_config_settings_views.xml
diff --git a/addons/stock/models/stock_config_settings.py b/addons/stock/models/stock_config_settings.py
index dc3f228d593..531047ec3ec 100644
--- a/addons/stock/models/stock_config_settings.py
+++ b/addons/stock/models/stock_config_settings.py
@@ -31,7 +31,10 @@ class StockConfigSettings(models.TransientModel):
help="Add and customize route operations to process product moves in your warehouse(s): e.g. unload > quality control > stock for incoming products, pick > pack > ship for outgoing products. \n You can also set putaway strategies on warehouse locations in order to send incoming products into specific child locations straight away (e.g. specific bins, racks).")
group_warning_stock = fields.Boolean("Warnings", implied_group='stock.group_warning_stock')
propagation_minimum_delta = fields.Integer(related='company_id.propagation_minimum_delta', string="No Rescheduling Propagation")
- default_new_propagation_minimum_delta = fields.Boolean(string="No Rescheduling Propagation", default_model="stock.config.settings", help="Rescheduling applies to any chain of operations (e.g. Make To Order, Pick Pack Ship). In the case of MTO sales, a vendor delay (updated incoming date) impacts the expected delivery date to the customer. \n This option allows to not propagate the rescheduling if the change is not critical.")
+ use_propagation_minimum_delta = fields.Boolean(
+ string="No Rescheduling Propagation",
+ oldname='default_new_propagation_minimum_delta',
+ help="Rescheduling applies to any chain of operations (e.g. Make To Order, Pick Pack Ship). In the case of MTO sales, a vendor delay (updated incoming date) impacts the expected delivery date to the customer. \n This option allows to not propagate the rescheduling if the change is not critical.")
module_stock_picking_wave = fields.Boolean("Picking Waves")
module_stock_calendar = fields.Boolean("Vendor Calendar for Reordering",
help='Scheduled dates of requests for quotation generated from reordering rules are based on vendor lead times (defined on products).\nBy default, such a scheduling is made on calendar days. This option allow to adapt the scheduling with vendor calendars to set on reordering rules.')
@@ -51,6 +54,11 @@ class StockConfigSettings(models.TransientModel):
module_sale = fields.Boolean(string="Sales")
module_purchase = fields.Boolean(string="Purchase")
+ @api.onchange('use_propagation_minimum_delta')
+ def _onchange_use_propagation_minimum_delta(self):
+ if not self.use_propagation_minimum_delta:
+ self.propagation_minimum_delta = 1
+
@api.onchange('group_stock_multi_locations')
def _onchange_group_stock_multi_locations(self):
if not self.group_stock_multi_locations:
@@ -67,21 +75,28 @@ class StockConfigSettings(models.TransientModel):
if self.group_stock_adv_location and not self.group_stock_multi_locations:
self.group_stock_multi_locations = True
+ @api.model
+ def get_values(self):
+ res = super(StockConfigSettings, self).get_values()
+ res.update(
+ use_propagation_minimum_delta=self.env['ir.config_parameter'].sudo().get_param('stock.use_propagation_minimum_delta')
+ )
+ return res
+
@api.multi
- def set_group_stock_multi_locations(self):
+ def set_values(self):
+ super(StockConfigSettings, self).set_values()
+ self.env['ir.config_parameter'].sudo().set_param('stock.use_propagation_minimum_delta', self.use_propagation_minimum_delta)
""" If we are not in multiple locations, we can deactivate the internal
operation types of the warehouses, so they won't appear in the dashboard.
Otherwise, activate them.
"""
- for config in self:
- if config.group_stock_multi_locations:
- active = True
- domain = []
- else:
- active = False
- domain = [('reception_steps', '=', 'one_step'), ('delivery_steps', '=', 'ship_only')]
-
- warehouses = self.env['stock.warehouse'].search(domain)
- warehouses.mapped('int_type_id').write({'active': active})
-
- return True
+ if self.group_stock_multi_locations:
+ warehouses = self.env['stock.warehouse'].search([])
+ active = True
+ else:
+ warehouses = self.env['stock.warehouse'].search([
+ ('reception_steps', '=', 'one_step'),
+ ('delivery_steps', '=', 'ship_only')])
+ active = False
+ warehouses.mapped('int_type_id').write({'active': active})
diff --git a/addons/stock/views/stock_config_settings_views.xml b/addons/stock/views/stock_config_settings_views.xml
index 9be8dd98ab7..c86a9d08394 100644
--- a/addons/stock/views/stock_config_settings_views.xml
+++ b/addons/stock/views/stock_config_settings_views.xml
@@ -292,15 +292,15 @@
-
+
-
+
Don’t propagate scheduling changes through chains of operations
-
+
Change must be higher than days to be propagated
diff --git a/addons/website/__manifest__.py b/addons/website/__manifest__.py
index 5e62bf95162..caf23f76bc4 100644
--- a/addons/website/__manifest__.py
+++ b/addons/website/__manifest__.py
@@ -23,7 +23,7 @@ Odoo Website CMS
'views/website_navbar_templates.xml',
'views/snippets.xml',
'views/website_views.xml',
- 'views/res_config_views.xml',
+ 'views/website_config_settings_views.xml',
'views/ir_actions_views.xml',
'wizard/base_language_install_views.xml',
'data/web_planner_data.xml',
diff --git a/addons/website/controllers/backend.py b/addons/website/controllers/backend.py
index 3c9323c6823..3af688a6346 100644
--- a/addons/website/controllers/backend.py
+++ b/addons/website/controllers/backend.py
@@ -9,8 +9,8 @@ class WebsiteBackend(http.Controller):
@http.route('/website/fetch_dashboard_data', type="json", auth='user')
def fetch_dashboard_data(self, date_from, date_to):
- has_group_system = request.env['res.users'].has_group('base.group_system')
- has_group_designer = request.env['res.users'].has_group('website.group_website_designer')
+ has_group_system = request.env.user.has_group('base.group_system')
+ has_group_designer = request.env.user.has_group('website.group_website_designer')
if has_group_system:
apps_data = dict((app['name'], app) for app in request.env['ir.module.module'].sudo().search_read(
['|', ('name', 'ilike', 'website'), ('application', '=', True)],
@@ -30,8 +30,34 @@ class WebsiteBackend(http.Controller):
}
}
if has_group_designer:
- ga_dashboard = request.env['ir.values'].sudo().get_default('website.config.settings', 'has_google_analytics_dashboard')
- if ga_dashboard:
- ga_client_id = request.env['ir.config_parameter'].sudo().get_param('google_management_client_id', default='')
- dashboard_data['dashboards']['visits']['ga_client_id'] = ga_client_id
+ config = request.env['website.config.settings'].sudo().create({})
+ if config.has_google_analytics_dashboard:
+ dashboard_data['dashboards']['visits'] = dict(
+ ga_client_id=config.google_management_client_id or '', # void string instead of stringified False
+ ga_analytics_key=config.google_analytics_key or '', # void string instead of stringified False
+ )
return dashboard_data
+
+ @http.route('/website/dashboard/set_ga_data', type='json', auth='user')
+ def website_set_ga_data(self, ga_client_id, ga_analytics_key):
+ if not request.env.user.has_group('base.group_system'):
+ return {
+ 'error': {
+ 'title': 'Access Error',
+ 'message': 'You do not have sufficient rights to perform that action.',
+ }
+ }
+ if not ga_analytics_key or not ga_client_id.endswith('.apps.googleusercontent.com'):
+ return {
+ 'error': {
+ 'title': 'Incorrect Client ID / Key',
+ 'message': 'The Google Analytics Client ID or Key you entered seems incorrect.',
+ }
+ }
+ request.env['website.config.settings'].create({
+ 'has_google_analytics': True,
+ 'has_google_analytics_dashboard': True,
+ 'google_management_client_id': ga_client_id,
+ 'google_analytics_key': ga_analytics_key,
+ }).execute()
+ return True
diff --git a/addons/website/models/__init__.py b/addons/website/models/__init__.py
index 1b00dcf0510..aa289415d5d 100644
--- a/addons/website/models/__init__.py
+++ b/addons/website/models/__init__.py
@@ -2,12 +2,12 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import ir_actions
-from . import ir_ui_view
-from . import ir_qweb
-from . import ir_http
from . import ir_attachment
+from . import ir_http
+from . import ir_qweb
+from . import ir_ui_view
from . import res_company
from . import res_partner
-from . import res_config
-from . import website
from . import web_planner
+from . import website
+from . import website_config_settings
diff --git a/addons/website/models/res_config.py b/addons/website/models/website_config_settings.py
similarity index 71%
rename from addons/website/models/res_config.py
rename to addons/website/models/website_config_settings.py
index 31607f75d31..bc5901cdc47 100644
--- a/addons/website/models/res_config.py
+++ b/addons/website/models/website_config_settings.py
@@ -6,7 +6,6 @@ from odoo.exceptions import AccessDenied
class WebsiteConfigSettings(models.TransientModel):
-
_name = 'website.config.settings'
_inherit = 'res.config.settings'
@@ -55,36 +54,43 @@ class WebsiteConfigSettings(models.TransientModel):
has_google_analytics_dashboard = fields.Boolean("Google Analytics in Dashboard")
has_google_maps = fields.Boolean("Google Maps")
- def get_default_google_maps_api_key(self, fields):
- if not self.user_has_groups('website.group_website_designer'):
- raise AccessDenied()
- google_maps_api_key = self.env['ir.config_parameter'].sudo().get_param('google_maps_api_key', default='')
- return dict(google_maps_api_key=google_maps_api_key)
+ @api.onchange('has_google_analytics')
+ def onchange_has_google_analytics(self):
+ if not self.has_google_analytics:
+ self.has_google_analytics_dashboard = False
+ if not self.has_google_analytics:
+ self.google_analytics_key = False
- def set_google_maps_api_key(self):
- if not self.user_has_groups('website.group_website_designer'):
- raise AccessDenied()
- self.env['ir.config_parameter'].sudo().set_param('google_maps_api_key', (self.google_maps_api_key or '').strip())
+ @api.onchange('has_google_analytics_dashboard')
+ def onchange_has_google_analytics_dashboard(self):
+ if not self.has_google_analytics_dashboard:
+ self.google_management_client_id = False
+ self.google_management_client_secret = False
@api.depends('language_ids')
def _compute_language_count(self):
for config in self:
config.language_count = len(self.language_ids)
- def set_has_google_analytics(self):
+ @api.model
+ def get_values(self):
if not self.user_has_groups('website.group_website_designer'):
raise AccessDenied()
- return self.env['ir.values'].sudo().set_default(
- 'website.config.settings', 'has_google_analytics', self.has_google_analytics)
+ res = super(WebsiteConfigSettings, self).get_values()
+ params = self.env['ir.config_parameter'].sudo()
+ res.update(
+ has_google_analytics=params.get_param('website.has_google_analytics'),
+ has_google_analytics_dashboard=params.get_param('website.has_google_analytics_dashboard'),
+ has_google_maps=params.get_param('website.has_google_maps'),
+ google_maps_api_key=params.get_param('google_maps_api_key', default=''),
+ )
+ return res
- def set_has_google_analytics_dashboard(self):
+ def set_values(self):
if not self.user_has_groups('website.group_website_designer'):
raise AccessDenied()
- return self.env['ir.values'].sudo().set_default(
- 'website.config.settings', 'has_google_analytics_dashboard', self.has_google_analytics_dashboard)
-
- def set_has_google_maps(self):
- if not self.user_has_groups('website.group_website_designer'):
- raise AccessDenied()
- return self.env['ir.values'].sudo().set_default(
- 'website.config.settings', 'has_google_maps', self.has_google_maps)
+ super(WebsiteConfigSettings, self).set_values()
+ 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)
+ self.env['ir.config_parameter'].sudo().set_param('google_maps_api_key', (self.google_maps_api_key or '').strip())
diff --git a/addons/website/static/src/js/website.backendDashboard.js b/addons/website/static/src/js/website.backendDashboard.js
index 9c6416da4ac..f1dcdf6a6ec 100644
--- a/addons/website/static/src/js/website.backendDashboard.js
+++ b/addons/website/static/src/js/website.backendDashboard.js
@@ -76,7 +76,10 @@ var Dashboard = Widget.extend(ControlPanelMixin, {
var dialog = new Dialog(this, {
size: 'medium',
title: _t('Google Analytics'),
- $content: QWeb.render('website.ga_dialog_content', {ga_key: this.dashboards_data.visits.ga_client_id}),
+ $content: QWeb.render('website.ga_dialog_content', {
+ ga_key: this.dashboards_data.visits.ga_client_id,
+ ga_analytics_key: this.dashboards_data.visits.ga_analytics_key,
+ }),
buttons: [
{
text: _t("Save"),
@@ -84,7 +87,8 @@ var Dashboard = Widget.extend(ControlPanelMixin, {
close: true,
click: function() {
var ga_client_id = dialog.$el.find('input[name="ga_client_id"]').val();
- self.on_save_ga_client_id(ga_client_id);
+ var ga_analytics_key = dialog.$el.find('input[name="ga_analytics_key"]').val();
+ self.on_save_ga_client_id(ga_client_id, ga_analytics_key);
},
},
{
@@ -95,22 +99,21 @@ var Dashboard = Widget.extend(ControlPanelMixin, {
}).open();
},
- on_save_ga_client_id: function(ga_client_id) {
-
- if (!ga_client_id.endsWith(".apps.googleusercontent.com") || ga_client_id.startsWith(" ")) {
- this.do_warn(_t('Incorrect Client ID'), _t('The Google Analytics Client ID you have entered seems incorrect.'));
- return;
- }
-
+ on_save_ga_client_id: function(ga_client_id, ga_analytics_key) {
var self = this;
- this._rpc({
- model: 'ir.config_parameter',
- method: 'set_param',
- args: ['google_management_client_id', ga_client_id],
- })
- .then(function(){
- self.on_date_range_button('week');
- });
+ return this._rpc({
+ route: '/website/dashboard/set_ga_data',
+ params: {
+ 'ga_client_id': ga_client_id,
+ 'ga_analytics_key': ga_analytics_key,
+ },
+ }).then(function (result) {
+ if (result.error) {
+ self.do_warn(result.error.title, result.error.message);
+ return;
+ }
+ self.on_date_range_button('week');
+ });
},
render_dashboards: function() {
diff --git a/addons/website/static/src/xml/website.backend.xml b/addons/website/static/src/xml/website.backend.xml
index a30267af9a8..9abb82e0e49 100644
--- a/addons/website/static/src/xml/website.backend.xml
+++ b/addons/website/static/src/xml/website.backend.xml
@@ -92,8 +92,15 @@
diff --git a/addons/website/views/res_config_views.xml b/addons/website/views/website_config_settings_views.xml
similarity index 96%
rename from addons/website/views/res_config_views.xml
rename to addons/website/views/website_config_settings_views.xml
index a98cfd92a5b..32f0a61e2d9 100644
--- a/addons/website/views/res_config_views.xml
+++ b/addons/website/views/website_config_settings_views.xml
@@ -71,18 +71,25 @@
+
-
+
-
+
See Google Analytics data on your Website Dashboard
@@ -98,9 +105,9 @@
diff --git a/addons/website_livechat/__manifest__.py b/addons/website_livechat/__manifest__.py
index 9caf3260d36..cb789e6b5f3 100644
--- a/addons/website_livechat/__manifest__.py
+++ b/addons/website_livechat/__manifest__.py
@@ -15,10 +15,10 @@ It also will include the feedback tool for the livechat, and web pages to displa
'auto_install': True,
'data': [
'views/website_livechat.xml',
- 'views/res_config.xml',
+ 'views/website_config_settings_views.xml',
'views/website_livechat_view.xml',
'security/ir.model.access.csv',
'security/website_livechat.xml',
- 'website_livechat_data.xml',
+ 'data/website_livechat_data.xml',
],
}
diff --git a/addons/website_livechat/website_livechat_data.xml b/addons/website_livechat/data/website_livechat_data.xml
similarity index 100%
rename from addons/website_livechat/website_livechat_data.xml
rename to addons/website_livechat/data/website_livechat_data.xml
diff --git a/addons/website_livechat/models/__init__.py b/addons/website_livechat/models/__init__.py
index 20b496ebf18..f90e6c892b0 100644
--- a/addons/website_livechat/models/__init__.py
+++ b/addons/website_livechat/models/__init__.py
@@ -1,3 +1,5 @@
# -*- coding: utf-8 -*-
+
from . import im_livechat
from . import website
+from . import website_config_settings
\ No newline at end of file
diff --git a/addons/website_livechat/models/website.py b/addons/website_livechat/models/website.py
index 84980a84c93..e207482416a 100644
--- a/addons/website_livechat/models/website.py
+++ b/addons/website_livechat/models/website.py
@@ -9,10 +9,3 @@ class Website(models.Model):
_inherit = "website"
channel_id = fields.Many2one('im_livechat.channel', string='Website Live Chat Channel')
-
-
-class WebsiteConfigSettings(models.TransientModel):
-
- _inherit = 'website.config.settings'
-
- channel_id = fields.Many2one('im_livechat.channel', string='Website Live Channel', related='website_id.channel_id')
diff --git a/addons/website_livechat/models/website_config_settings.py b/addons/website_livechat/models/website_config_settings.py
new file mode 100644
index 00000000000..7f241b49263
--- /dev/null
+++ b/addons/website_livechat/models/website_config_settings.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models
+
+
+class WebsiteConfigSettings(models.TransientModel):
+ _inherit = 'website.config.settings'
+
+ channel_id = fields.Many2one('im_livechat.channel', string='Website Live Channel', related='website_id.channel_id')
diff --git a/addons/website_livechat/views/res_config.xml b/addons/website_livechat/views/website_config_settings_views.xml
similarity index 100%
rename from addons/website_livechat/views/res_config.xml
rename to addons/website_livechat/views/website_config_settings_views.xml
diff --git a/addons/website_mass_mailing/__manifest__.py b/addons/website_mass_mailing/__manifest__.py
index ec9fa4278dc..f2253996f94 100644
--- a/addons/website_mass_mailing/__manifest__.py
+++ b/addons/website_mass_mailing/__manifest__.py
@@ -15,7 +15,7 @@ Add a snippet in the website builder to subscribe a mass_mailing list
'views/unsubscribe_templates.xml',
'views/snippets_templates.xml',
'views/mass_mailing_view.xml',
- 'views/res_config_view.xml',
+ 'views/mass_mailing_config_settings_views.xml',
],
'auto_install': True,
}
diff --git a/addons/website_mass_mailing/models/__init__.py b/addons/website_mass_mailing/models/__init__.py
index 5e5b7affad2..18a7a1b26b2 100644
--- a/addons/website_mass_mailing/models/__init__.py
+++ b/addons/website_mass_mailing/models/__init__.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import mass_mailing_config_settings
from . import mass_mailing_list
-from . import res_config
diff --git a/addons/website_mass_mailing/models/res_config.py b/addons/website_mass_mailing/models/mass_mailing_config_settings.py
similarity index 100%
rename from addons/website_mass_mailing/models/res_config.py
rename to addons/website_mass_mailing/models/mass_mailing_config_settings.py
diff --git a/addons/website_mass_mailing/views/res_config_view.xml b/addons/website_mass_mailing/views/mass_mailing_config_settings_views.xml
similarity index 100%
rename from addons/website_mass_mailing/views/res_config_view.xml
rename to addons/website_mass_mailing/views/mass_mailing_config_settings_views.xml
diff --git a/addons/website_sale/__manifest__.py b/addons/website_sale/__manifest__.py
index d0851c60968..102ed5b4160 100644
--- a/addons/website_sale/__manifest__.py
+++ b/addons/website_sale/__manifest__.py
@@ -25,7 +25,7 @@ Odoo E-Commerce
'views/payment_views.xml',
'views/snippets.xml',
'views/report_shop_saleorder.xml',
- 'views/res_config_view.xml',
+ 'views/website_config_settings_views.xml',
],
'demo': [
'data/demo.xml',
diff --git a/addons/website_sale/models/__init__.py b/addons/website_sale/models/__init__.py
index 9bd76239ea3..7eca4d5c21a 100644
--- a/addons/website_sale/models/__init__.py
+++ b/addons/website_sale/models/__init__.py
@@ -1,7 +1,10 @@
-from . import ir_http
-from . import rating
-from . import product
-from . import sale_order
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
from . import crm_team
-from . import res_config
+from . import ir_http
+from . import product
+from . import rating
+from . import sale_order
from . import website
+from . import website_config_settings
diff --git a/addons/website_sale/models/res_config.py b/addons/website_sale/models/website_config_settings.py
similarity index 71%
rename from addons/website_sale/models/res_config.py
rename to addons/website_sale/models/website_config_settings.py
index 528c120e6dc..cf014f18ca2 100644
--- a/addons/website_sale/models/res_config.py
+++ b/addons/website_sale/models/website_config_settings.py
@@ -43,12 +43,20 @@ class WebsiteConfigSettings(models.TransientModel):
module_account_invoicing = fields.Boolean("Invoicing")
module_sale_stock = fields.Boolean("Delivery Orders")
- # the next 2 fields represent sale_pricelist_setting from sale.config.settings, they are split here for the form view, to improve usability
- sale_pricelist_setting_split_1 = fields.Boolean(default=0, string="Multiple Prices per Product")
- sale_pricelist_setting_split_2 = fields.Selection([
+ # sale_pricelist_settings splitted in several entries for usability purpose
+ multi_sales_price = fields.Boolean(
+ string="Multiple sales price per product",
+ oldname='sale_pricelist_setting_split_1')
+ multi_sales_price_method = fields.Selection([
(0, 'Multiple prices per product (e.g. customer segments, currencies)'),
- (1, 'Prices computed from formulas (discounts, margins, roundings)')
- ], default=0, string="Sales Price")
+ (1, 'Prices computed from formulas (discounts, margins, roundings)')],
+ string="Sales Price", default=0,
+ oldname='sale_pricelist_setting_split_2')
+ sale_pricelist_setting = fields.Selection([
+ ('fixed', 'A single sales price per product'),
+ ('percentage', 'Multiple prices per product (e.g. customer segments, currencies)'),
+ ('formula', 'Price computed from formulas (discounts, margins, roundings)')
+ ], string="Pricelists")
group_sale_pricelist = fields.Boolean("Use pricelists to adapt your price per customers",
implied_group='product.group_sale_pricelist')
@@ -83,44 +91,67 @@ class WebsiteConfigSettings(models.TransientModel):
('subtotal', 'Tax-Excluded Prices')],
"Product Prices", default='total')
- @api.multi
- def set_automatic_invoice(self):
- value = self.module_account_invoicing and self.default_invoice_policy == 'order' and self.automatic_invoice
- self.env['ir.config_parameter'].sudo().set_param('website_sale.automatic_invoice', value)
-
@api.model
- def get_default_automatic_invoice(self, fields):
- value = self.env['ir.config_parameter'].sudo().get_param('website_sale.automatic_invoice', default=False)
- return {'automatic_invoice': value}
+ def get_values(self):
+ res = super(WebsiteConfigSettings, self).get_values()
+ params = self.env['ir.config_parameter'].sudo()
- @api.model
- def get_default_sale_delivery_settings(self, fields):
sale_delivery_settings = 'none'
if self.env['ir.module.module'].search([('name', '=', 'delivery')], limit=1).state in ('installed', 'to install', 'to upgrade'):
sale_delivery_settings = 'internal'
if self.env['ir.module.module'].search([('name', '=', 'website_sale_delivery')], limit=1).state in ('installed', 'to install', 'to upgrade'):
sale_delivery_settings = 'website'
- return {'sale_delivery_settings': sale_delivery_settings}
- @api.model
- def get_default_sale_pricelist_setting(self, fields):
- return {'sale_pricelist_setting_split_1': 0 if self.env['ir.values'].get_defaults_dict('sale.config.settings').get('sale_pricelist_setting', 'fixed') == 'fixed' else 1,
- 'sale_pricelist_setting_split_2': 0 if self.env['ir.values'].get_defaults_dict('sale.config.settings').get('sale_pricelist_setting', 'fixed') != 'formula' else 1}
+ sale_pricelist_setting = self.env['ir.config_parameter'].sudo().get_param('sale.sale_pricelist_setting')
- @api.model
- def set_sale_pricelist_settings(self):
- sale_pricelist_setting = 'formula'
- if self.sale_pricelist_setting_split_1 == 0:
- sale_pricelist_setting = 'fixed'
- elif self.sale_pricelist_setting_split_2 == 0:
- sale_pricelist_setting = 'percentage'
- return self.env['ir.values'].sudo().set_default(
- 'sale.config.settings', 'sale_pricelist_setting', sale_pricelist_setting)
+ res.update(
+ automatic_invoice=params.get_param('website_sale.automatic_invoice', default=False),
+ sale_delivery_settings=sale_delivery_settings,
+ multi_sales_price=sale_pricelist_setting in ['percentage', 'formula'],
+ multi_sales_price_method=sale_pricelist_setting in ['formula'] and 1 or False,
+ sale_pricelist_setting=sale_pricelist_setting,
+ sale_show_tax=self.env['ir.config_parameter'].sudo().get_param('website.sale_show_tax')
+ )
+ return res
+
+ def set_values(self):
+ super(WebsiteConfigSettings, self).set_values()
+ value = self.module_account_invoicing and self.default_invoice_policy == 'order' and self.automatic_invoice
+ self.env['ir.config_parameter'].sudo().set_param('website_sale.automatic_invoice', value)
+ self.env['ir.config_parameter'].sudo().set_param('sale.sale_pricelist_setting', self.sale_pricelist_setting)
+ self.env['ir.config_parameter'].sudo().set_param('website.sale_show_tax', self.sale_show_tax)
+
+ @api.onchange('multi_sales_price', 'multi_sales_price_method')
+ def _onchange_sale_price(self):
+ if self.multi_sales_price:
+ if self.multi_sales_price_method:
+ self.sale_pricelist_setting = 'formula'
+ else:
+ self.sale_pricelist_setting = 'percentage'
+ else:
+ self.sale_pricelist_setting = 'fixed'
+
+ @api.onchange('sale_pricelist_setting')
+ def _onchange_sale_pricelist_setting(self):
+ if self.sale_pricelist_setting == 'percentage':
+ self.update({
+ 'group_product_pricelist': True,
+ 'group_sale_pricelist': True,
+ 'group_pricelist_item': False,
+ })
+ elif self.sale_pricelist_setting == 'formula':
+ self.update({
+ 'group_product_pricelist': False,
+ 'group_sale_pricelist': True,
+ 'group_pricelist_item': True,
+ })
+ else:
+ self.update({
+ 'group_product_pricelist': False,
+ 'group_sale_pricelist': False,
+ 'group_pricelist_item': False,
+ })
- @api.multi
- def set_sale_tax_defaults(self):
- return self.env['ir.values'].sudo().set_default(
- 'website.config.settings', 'sale_show_tax', self.sale_show_tax)
@api.onchange('sale_delivery_settings')
def _onchange_sale_delivery_settings(self):
@@ -147,28 +178,6 @@ class WebsiteConfigSettings(models.TransientModel):
'sale_pricelist_setting_split_1': True,
})
- @api.onchange('sale_pricelist_setting_split_1', 'sale_pricelist_setting_split_2')
- def _onchange_sale_pricelist_setting(self):
- if self.sale_pricelist_setting_split_1 == 0:
- self.update({
- 'group_product_pricelist': False,
- 'group_sale_pricelist': False,
- 'group_pricelist_item': False,
- })
- else:
- if self.sale_pricelist_setting_split_2 == 0:
- self.update({
- 'group_product_pricelist': True,
- 'group_sale_pricelist': True,
- 'group_pricelist_item': False,
- })
- else:
- self.update({
- 'group_product_pricelist': False,
- 'group_sale_pricelist': True,
- 'group_pricelist_item': True,
- })
-
@api.onchange('sale_show_tax')
def _onchange_sale_tax(self):
if self.sale_show_tax == "subtotal":
diff --git a/addons/website_sale/views/res_config_view.xml b/addons/website_sale/views/website_config_settings_views.xml
similarity index 97%
rename from addons/website_sale/views/res_config_view.xml
rename to addons/website_sale/views/website_config_settings_views.xml
index 2b3fe0bf604..49379c710be 100644
--- a/addons/website_sale/views/res_config_view.xml
+++ b/addons/website_sale/views/website_config_settings_views.xml
@@ -45,20 +45,21 @@
Multiple prices per product: must be set in the Sales tab of the product detail form.
Price computed from formulas: must be set in the pricelist form.">
-
+
-
+
+
Apply specific prices per country, discounts, etc.
-
+
-
+
-
diff --git a/addons/website_slides/__manifest__.py b/addons/website_slides/__manifest__.py
index a18082c54f1..f0755ab62b4 100644
--- a/addons/website_slides/__manifest__.py
+++ b/addons/website_slides/__manifest__.py
@@ -18,10 +18,10 @@ Share and Publish Videos, Presentations and Documents'
""",
'depends': ['website', 'website_mail'],
'data': [
- 'view/res_config.xml',
- 'view/website_slides.xml',
- 'view/website_slides_embed.xml',
- 'view/website_slides_backend.xml',
+ 'views/website_config_settings_views.xml',
+ 'views/website_slides.xml',
+ 'views/website_slides_embed.xml',
+ 'views/website_slides_backend.xml',
'data/website_slides_data.xml',
'security/ir.model.access.csv',
'security/website_slides_security.xml'
diff --git a/addons/website_slides/data/website_slides_data.xml b/addons/website_slides/data/website_slides_data.xml
index c559e07d10d..1b174481796 100644
--- a/addons/website_slides/data/website_slides_data.xml
+++ b/addons/website_slides/data/website_slides_data.xml
@@ -100,7 +100,6 @@
diff --git a/addons/website_slides/models/__init__.py b/addons/website_slides/models/__init__.py
index c34d07ffbd7..2644fb217ef 100644
--- a/addons/website_slides/models/__init__.py
+++ b/addons/website_slides/models/__init__.py
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
-from . import res_config
+
from . import slides
+from . import website_config_settings
diff --git a/addons/website_slides/models/res_config.py b/addons/website_slides/models/res_config.py
deleted file mode 100644
index 68138e90e3f..00000000000
--- a/addons/website_slides/models/res_config.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from odoo import api, fields, models
-
-
-class website_config_settings(models.TransientModel):
-
- _inherit = "website.config.settings"
-
- website_slide_google_app_key = fields.Char(string='Google Doc Key')
-
- @api.model
- def get_default_website_slide_google_app_key(self, fields):
- website_slide_google_app_key = False
- if 'website_slide_google_app_key' in fields:
- website_slide_google_app_key = self.env['ir.config_parameter'].sudo().get_param('website_slides.google_app_key')
- return {
- 'website_slide_google_app_key': website_slide_google_app_key
- }
-
- @api.multi
- def set_website_slide_google_app_key(self):
- for wizard in self:
- self.env['ir.config_parameter'].sudo().set_param('website_slides.google_app_key', wizard.website_slide_google_app_key)
diff --git a/addons/website_slides/models/website_config_settings.py b/addons/website_slides/models/website_config_settings.py
new file mode 100644
index 00000000000..43c56db1f16
--- /dev/null
+++ b/addons/website_slides/models/website_config_settings.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+
+
+class WebsiteConfigSettings(models.TransientModel):
+ _inherit = "website.config.settings"
+
+ website_slide_google_app_key = fields.Char(string='Google Doc Key')
+
+ @api.model
+ def get_values(self):
+ res = super(WebsiteConfigSettings, self).get_values()
+ res.update(
+ website_slide_google_app_key=self.env['ir.config_parameter'].sudo().get_param('website_slides.google_app_key'),
+ )
+ return res
+
+ @api.multi
+ def set_values(self):
+ super(WebsiteConfigSettings, self).set_values()
+ self.env['ir.config_parameter'].sudo().set_param('website_slides.google_app_key', self.website_slide_google_app_key)
diff --git a/addons/website_slides/view/res_config.xml b/addons/website_slides/views/website_config_settings_views.xml
similarity index 100%
rename from addons/website_slides/view/res_config.xml
rename to addons/website_slides/views/website_config_settings_views.xml
diff --git a/addons/website_slides/view/website_slides.xml b/addons/website_slides/views/website_slides.xml
similarity index 100%
rename from addons/website_slides/view/website_slides.xml
rename to addons/website_slides/views/website_slides.xml
diff --git a/addons/website_slides/view/website_slides_backend.xml b/addons/website_slides/views/website_slides_backend.xml
similarity index 100%
rename from addons/website_slides/view/website_slides_backend.xml
rename to addons/website_slides/views/website_slides_backend.xml
diff --git a/addons/website_slides/view/website_slides_embed.xml b/addons/website_slides/views/website_slides_embed.xml
similarity index 100%
rename from addons/website_slides/view/website_slides_embed.xml
rename to addons/website_slides/views/website_slides_embed.xml
diff --git a/addons/website_theme_install/views/views.xml b/addons/website_theme_install/views/views.xml
index 6113ecbcf84..4a9662cb8fd 100644
--- a/addons/website_theme_install/views/views.xml
+++ b/addons/website_theme_install/views/views.xml
@@ -68,7 +68,6 @@ action = {
- automatic
diff --git a/odoo/addons/base/__manifest__.py b/odoo/addons/base/__manifest__.py
index a34c2804356..8f8f585473c 100644
--- a/odoo/addons/base/__manifest__.py
+++ b/odoo/addons/base/__manifest__.py
@@ -46,7 +46,6 @@ The kernel of Odoo, needed for all installation.
'module/wizard/base_language_install_view.xml',
'module/wizard/base_import_language_view.xml',
'module/wizard/base_module_upgrade_view.xml',
- 'module/wizard/base_module_configuration_view.xml',
'module/wizard/base_export_language_view.xml',
'module/wizard/base_update_translations_view.xml',
'module/wizard/base_module_immediate_install.xml',
diff --git a/odoo/addons/base/base_menu.xml b/odoo/addons/base/base_menu.xml
index 4b57bf79288..f5f61b7e876 100644
--- a/odoo/addons/base/base_menu.xml
+++ b/odoo/addons/base/base_menu.xml
@@ -39,7 +39,6 @@
diff --git a/odoo/addons/base/ir/ir_actions.py b/odoo/addons/base/ir/ir_actions.py
index 4979c898e08..91a0cd96350 100644
--- a/odoo/addons/base/ir/ir_actions.py
+++ b/odoo/addons/base/ir/ir_actions.py
@@ -571,14 +571,25 @@ class IrActionsTodo(models.Model):
sequence = fields.Integer(default=10)
state = fields.Selection([('open', 'To Do'), ('done', 'Done')], string='Status', default='open', required=True)
name = fields.Char()
- type = fields.Selection([('manual', 'Launch Manually'),
- ('once', 'Launch Manually Once'),
- ('automatic', 'Launch Automatically')], default='manual', required=True,
- help="""Manual: Launched manually.
- Automatic: Runs whenever the system is reconfigured.
- Launch Manually Once: after having been launched manually, it sets automatically to Done.""")
- groups_id = fields.Many2many('res.groups', 'res_groups_action_rel', 'uid', 'gid', string='Groups')
- note = fields.Text(string='Text', translate=True)
+
+ @api.model
+ def create(self, vals):
+ todo = super(IrActionsTodo, self).create(vals)
+ if todo.state == "open":
+ todo.ensure_one_open_todo()
+ return todo
+
+ def write(self, vals):
+ res = super(IrActionsTodo, self).write(vals)
+ if vals.get('state', '') == 'open':
+ for todo in self:
+ todo.ensure_one_open_todo()
+ return res
+
+ def ensure_one_open_todo(self):
+ open_todo = self.search(['&', ('state', '=', 'open'), ('id', '!=', self.id)])
+ if open_todo:
+ open_todo.write({'state': 'done'})
@api.multi
def name_get(self):
@@ -610,8 +621,8 @@ class IrActionsTodo(models.Model):
def action_launch(self, context=None):
""" Launch Action of Wizard"""
self.ensure_one()
- if self.type in ('automatic', 'once'):
- self.write({'state': 'done'})
+
+ self.write({'state': 'done'})
# Load action
action = self.env[self.action_id.type].browse(self.action_id.id)
@@ -627,8 +638,8 @@ class IrActionsTodo(models.Model):
result['res_id'] = ctx.pop('res_id')
# disable log for automatic wizards
- if self.type == 'automatic':
- ctx['disable_log'] = True
+ ctx['disable_log'] = True
+
result['context'] = ctx
return result
@@ -638,33 +649,6 @@ class IrActionsTodo(models.Model):
""" Sets configuration wizard in TODO state"""
return self.write({'state': 'open'})
- @api.multi
- def progress(self):
- """ Returns a dict with 3 keys {todo, done, total}.
-
- These keys all map to integers and provide the number of todos
- marked as open, the total number of todos and the number of
- todos not open (which is basically a shortcut to total-todo)
-
- :rtype: dict
- """
- user_groups = self.env.user.groups_id
-
- done_count = self.search_count([
- ('state', '!=', open),
- '|', ('groups_id', '=', False),
- ('groups_id', 'in', user_groups.ids),
- ])
- total_count = self.search_count([
- '|', ('groups_id', '=', False),
- ('groups_id', 'in', user_groups.ids),
- ])
- return {
- 'done': done_count,
- 'total': total_count,
- 'todo': total_count - done_count,
- }
-
class IrActionsActClient(models.Model):
_name = 'ir.actions.client'
diff --git a/odoo/addons/base/ir/ir_actions.xml b/odoo/addons/base/ir/ir_actions.xml
index fda81ef402e..1fe709dc00d 100644
--- a/odoo/addons/base/ir/ir_actions.xml
+++ b/odoo/addons/base/ir/ir_actions.xml
@@ -390,7 +390,6 @@ env["res.partner"].create({"name": partner_name})
-
-
-
-
-
diff --git a/odoo/addons/base/module/module.py b/odoo/addons/base/module/module.py
index fd5ba44c9d1..bfc018f247f 100644
--- a/odoo/addons/base/module/module.py
+++ b/odoo/addons/base/module/module.py
@@ -479,6 +479,23 @@ class Module(models.Model):
known_deps |= missing_mods.upstream_dependencies(known_deps, exclude_states)
return known_deps
+ def next(self):
+ """
+ Return the action linked to an ir.actions.todo is there exists one that
+ should be executed. Otherwise, redirect to /web
+ """
+ Todos = self.env['ir.actions.todo']
+ _logger.info('getting next %s', Todos)
+ active_todo = Todos.search([('state', '=', 'open')], limit=1)
+ if active_todo:
+ _logger.info('next action is %s', active_todo)
+ return active_todo.action_launch()
+ return {
+ 'type': 'ir.actions.act_url',
+ 'target': 'self',
+ 'url': '/web',
+ }
+
@api.multi
def _button_immediate_function(self, function):
function(self)
@@ -489,7 +506,7 @@ class Module(models.Model):
self._cr.commit()
env = api.Environment(self._cr, self._uid, self._context)
- config = env['res.config'].next() or {}
+ config = self.next() or {}
if config.get('type') not in ('ir.actions.act_window_close',):
return config
diff --git a/odoo/addons/base/module/wizard/__init__.py b/odoo/addons/base/module/wizard/__init__.py
index a0d693f948d..72162359952 100644
--- a/odoo/addons/base/module/wizard/__init__.py
+++ b/odoo/addons/base/module/wizard/__init__.py
@@ -5,6 +5,5 @@ from . import base_module_update
from . import base_language_install
from . import base_import_language
from . import base_module_upgrade
-from . import base_module_configuration
from . import base_export_language
from . import base_update_translations
diff --git a/odoo/addons/base/module/wizard/base_module_configuration.py b/odoo/addons/base/module/wizard/base_module_configuration.py
deleted file mode 100644
index 1e889cade42..00000000000
--- a/odoo/addons/base/module/wizard/base_module_configuration.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from odoo import api, models, _
-
-
-class BaseModuleConfiguration(models.TransientModel):
- _name = "base.module.configuration"
-
- @api.multi
- def start(self):
- todos_domain = ['|', ('type','=','recurring'), ('state', '=', 'open')]
- if self.env['ir.actions.todo'].search_count(todos_domain):
- # Run the config wizards
- return self.env['res.config'].start()
- else:
- # When there is no wizard todo it will display message
- view = self.env.ref('base.view_base_module_configuration_form')
- return {
- 'name': _('System Configuration done'),
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'base.mdule.configuration',
- 'view_id': [view.id],
- 'type': 'ir.actions.act_window',
- 'target': 'new',
- }
diff --git a/odoo/addons/base/module/wizard/base_module_configuration_view.xml b/odoo/addons/base/module/wizard/base_module_configuration_view.xml
deleted file mode 100644
index 4f304b7c5d6..00000000000
--- a/odoo/addons/base/module/wizard/base_module_configuration_view.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
- Module Configuration
- base.module.configuration
-
-
-
-
-
-
-
diff --git a/odoo/addons/base/res/res_config.py b/odoo/addons/base/res/res_config.py
index a19c6406dcb..d5c1ac59717 100644
--- a/odoo/addons/base/res/res_config.py
+++ b/odoo/addons/base/res/res_config.py
@@ -53,29 +53,6 @@ class ResConfigConfigurable(models.TransientModel):
'''
_name = 'res.config'
- def _next_action(self):
- Todos = self.env['ir.actions.todo']
- _logger.info('getting next %s', Todos)
-
- active_todos = Todos.search(['&', ('type', '=', 'automatic'), ('state', '=', 'open')])
- user_groups = self.env.user.groups_id
-
- for todo in active_todos:
- if not todo.groups_id or (todo.groups_id & user_groups):
- return todo
-
- def _next(self):
- _logger.info('getting next operation')
- next = self._next_action()
- _logger.info('next action is %s', next)
- if next:
- return next.action_launch()
-
- return {
- 'type': 'ir.actions.act_url',
- 'target': 'self',
- 'url': '/web',
- }
@api.multi
def start(self):
@@ -83,10 +60,13 @@ class ResConfigConfigurable(models.TransientModel):
@api.multi
def next(self):
- """ Returns the next todo action to execute (using the default
- sort order)
"""
- return self._next()
+ Reload the settings page
+ """
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'reload',
+ }
@api.multi
def execute(self):
@@ -478,6 +458,12 @@ class ResConfigSettings(models.TransientModel, ResConfigModuleInstallationMixin)
return {'default': defaults, 'group': groups, 'module': modules, 'other': others}
+ def get_values(self):
+ """
+ Return values for the fields other that `default`, `group` and `module`
+ """
+ return {}
+
@api.model
def default_get(self, fields):
IrValues = self.env['ir.values']
@@ -503,13 +489,21 @@ class ResConfigSettings(models.TransientModel, ResConfigModuleInstallationMixin)
if self._fields[name].type == 'selection':
res[name] = int(res[name])
- # other fields: call all methods that start with 'get_default_'
+ # other fields: call the method 'get_values'
+ # The other methods that start with `get_default_` are deprecated
for method in dir(self):
if method.startswith('get_default_'):
- res.update(getattr(self, method)(fields))
+ _logger.warning(_('Methods that start with `get_default_` are deprecated. Override `get_values` instead(Method %s)') % method)
+ res.update(self.get_values())
return res
+ def set_values(self):
+ """
+ Set values for the fields other that `default`, `group` and `module`
+ """
+ pass
+
@api.multi
def execute(self):
self.ensure_one()
@@ -523,7 +517,10 @@ class ResConfigSettings(models.TransientModel, ResConfigModuleInstallationMixin)
IrValues = self.env['ir.values'].sudo()
for name, model, field in classified['default']:
if isinstance(self[name], models.BaseModel):
- value = self[name].ids
+ if self._fields[name].type == 'many2one':
+ value = self[name].id
+ else:
+ value = self[name].ids
else:
value = self[name]
IrValues.set_default(model, field, value)
@@ -536,10 +533,12 @@ class ResConfigSettings(models.TransientModel, ResConfigModuleInstallationMixin)
groups.write({'implied_ids': [(3, implied_group.id)]})
implied_group.write({'users': [(3, user.id) for user in groups.mapped('users')]})
- # other fields: execute all methods that start with 'set_'
+ # other fields: execute method 'set_values'
+ # Methods that start with `set_` are now deprecated
for method in dir(self):
- if method.startswith('set_'):
- getattr(self, method)()
+ if method.startswith('set_') and method is not 'set_values':
+ _logger.warning(_('Methods that start with `set_` are deprecated. Override `set_values` instead (Method %s)') % method)
+ self.set_values()
# module fields: install/uninstall the selected modules
to_install = []
@@ -555,9 +554,7 @@ class ResConfigSettings(models.TransientModel, ResConfigModuleInstallationMixin)
if to_uninstall_modules:
to_uninstall_modules.button_immediate_uninstall()
- action = self._install_modules(to_install)
- if action:
- return action
+ self._install_modules(to_install)
if to_install or to_uninstall_modules:
# After the uninstall/install calls, the registry and environments
diff --git a/odoo/addons/base/tests/test_res_config.py b/odoo/addons/base/tests/test_res_config.py
index 89300bf43a5..0be7dcc7c8d 100644
--- a/odoo/addons/base/tests/test_res_config.py
+++ b/odoo/addons/base/tests/test_res_config.py
@@ -1,10 +1,14 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+import logging
+
from odoo import exceptions
from odoo.tests.common import TransactionCase
from odoo.tools import pycompat
+_logger = logging.getLogger(__name__)
+
class TestResConfig(TransactionCase):
@@ -79,3 +83,19 @@ class TestResConfig(TransactionCase):
# Check returned value
self.assertEqual(res.args[0], self.expected_final_error_msg_wo_menu)
+
+
+class TestResConfigExecute(TransactionCase):
+ at_install = False
+ post_install = True
+
+ def test_01_execute_res_config(self):
+ """
+ Try to create and execute all res_config models. Target settings that can't be
+ loaded or saved and avoid remaining methods `get_default_foo` or `set_foo` that
+ won't be executed is foo != `fields`
+ """
+ all_config_settings = self.env['ir.model'].search([('name', 'like', 'config.settings')])
+ for config_settings in all_config_settings:
+ _logger.info("Testing %s" % (config_settings.name))
+ self.env[config_settings.name].create({}).execute()