[FIX] account, auth_signup, sale, website_sale: settings robustness

- Delete the tax corresponding to the default 'Sales Tax'
- Access the Accounting settings

Error since record could not be found.

In the case of an `ir.config_parameter` referring to a record ID
(i.e. Many2one), the deletion of this record is not propagated to the
associated `ir.config_parameter`. Therefore, the system tries to access
a deleted record without fallback.

It's not really possible to solve it globally in a stable version, but
we can manually handle these cases by providing a fallback (usually
return `False`).

opw-781864
This commit is contained in:
Nicolas Martinelli
2017-11-13 13:19:53 +01:00
parent 75b0393454
commit 7606878a78
4 changed files with 25 additions and 6 deletions
+11 -2
View File
@@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from ast import literal_eval
from odoo import api, fields, models, _
@@ -64,9 +66,16 @@ class ResConfigSettings(models.TransientModel):
def get_values(self):
res = super(ResConfigSettings, self).get_values()
params = self.env['ir.config_parameter'].sudo()
tax = self.env['account.tax'].sudo()
default_purchase_tax_id = literal_eval(params.get_param('account.default_purchase_tax_id', default='False'))
default_sale_tax_id = literal_eval(params.get_param('account.default_sale_tax_id', default='False'))
if default_purchase_tax_id and not tax.browse(default_purchase_tax_id).exists():
default_purchase_tax_id = False
if default_sale_tax_id and not tax.browse(default_sale_tax_id).exists():
default_sale_tax_id = False
res.update(
default_purchase_tax_id=int(params.get_param('account.default_purchase_tax_id', default=False)) or False,
default_sale_tax_id=int(params.get_param('account.default_sale_tax_id', default=False)) or False
default_purchase_tax_id=default_purchase_tax_id,
default_sale_tax_id=default_sale_tax_id,
)
return res
@@ -20,11 +20,14 @@ class ResConfigSettings(models.TransientModel):
def get_values(self):
res = super(ResConfigSettings, self).get_values()
get_param = self.env['ir.config_parameter'].sudo().get_param
auth_signup_template_user_id = literal_eval(get_param('auth_signup.template_user_id', default='False'))
if auth_signup_template_user_id and not self.env['res.users'].sudo().browse(auth_signup_template_user_id).exists():
auth_signup_template_user_id = False
# the value of the parameter is a nonempty string
res.update(
auth_signup_reset_password=get_param('auth_signup.reset_password', 'False').lower() == 'true',
auth_signup_uninvited='b2c' if get_param('auth_signup.allow_uninvited', 'False').lower() == 'true' else 'b2b',
auth_signup_template_user_id=literal_eval(get_param('auth_signup.template_user_id', 'False')),
auth_signup_template_user_id=auth_signup_template_user_id,
)
return res
+6 -1
View File
@@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from ast import literal_eval
from odoo import api, fields, models
@@ -136,11 +138,14 @@ class ResConfigSettings(models.TransientModel):
ICPSudo = self.env['ir.config_parameter'].sudo()
sale_pricelist_setting = ICPSudo.get_param('sale.sale_pricelist_setting')
sale_portal_confirmation_options = ICPSudo.get_param('sale.sale_portal_confirmation_options', default='none')
default_deposit_product_id = literal_eval(ICPSudo.get_param('sale.default_deposit_product_id', default='False'))
if default_deposit_product_id and not self.env['product.product'].browse(default_deposit_product_id).exists():
default_deposit_product_id = False
res.update(
auth_signup_uninvited='b2c' if ICPSudo.get_param('auth_signup.allow_uninvited', 'False').lower() == 'true' else 'b2b',
use_sale_note=ICPSudo.get_param('sale.use_sale_note', default=False),
auto_done_setting=ICPSudo.get_param('sale.auto_done_setting'),
default_deposit_product_id=int(ICPSudo.get_param('sale.default_deposit_product_id')),
default_deposit_product_id=default_deposit_product_id,
sale_show_tax=ICPSudo.get_param('sale.sale_show_tax', default='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,
@@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from ast import literal_eval
from odoo import api, models, fields
class ResConfigSettings(models.TransientModel):
@@ -62,8 +64,8 @@ class ResConfigSettings(models.TransientModel):
if self.env['ir.module.module'].search([('name', '=', 'website_sale_delivery')], limit=1).state in ('installed', 'to install', 'to upgrade'):
sale_delivery_settings = 'website'
cart_recovery_mail_template = int(params.get_param('website_sale.cart_recovery_mail_template_id'))
if not cart_recovery_mail_template:
cart_recovery_mail_template = literal_eval(params.get_param('website_sale.cart_recovery_mail_template_id', default='False'))
if cart_recovery_mail_template and not self.env['mail.template'].browse(cart_recovery_mail_template).exists():
cart_recovery_mail_template = self._default_recovery_mail_template()
res.update(