diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py
index 987f431b3ab..d1f283062ee 100644
--- a/addons/sale/models/sale.py
+++ b/addons/sale/models/sale.py
@@ -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 daa60ddc300..0b6d5df9b9e 100644
--- a/addons/sale/models/sale_config_settings.py
+++ b/addons/sale/models/sale_config_settings.py
@@ -32,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)')
@@ -54,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'),
@@ -63,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")
@@ -88,16 +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_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:
@@ -105,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,
@@ -124,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":
@@ -149,12 +130,32 @@ class SaleConfiguration(models.TransientModel):
'group_show_price_subtotal': False,
})
+ def get_default_sale_show_tax(self, fields):
+ return dict(
+ sale_show_tax=self.group_show_price_total and 'total' or 'subtotal'
+ )
+
+ def get_multi_sales_price(self, fields):
+ sale_pricelist_setting = self.env['ir.config_parameter'].sudo().get_param('sale.sale_pricelist_setting')
+ return dict(
+ 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,
+ )
+
+ def set_multi_sales_price(self):
+ self.env['ir.config_parameter'].sudo().set_param('sale.sale_pricelist_setting', self.sale_pricelist_setting)
+
@api.model
def get_default_fields(self, fields):
return dict(
use_sale_note=self.env['ir.config_parameter'].sudo().get_param('sale.use_sale_note', default=False),
+ auto_done_setting=self.env['ir.config_parameter'].sudo().get_param('sale.auto_done_setting'),
+ default_deposit_product_id=self.env['ir.config_parameter'].sudo().get_param('sale.default_deposit_product_id'),
)
@api.multi
def set_fields(self):
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)
diff --git a/addons/sale/views/sale_config_settings_views.xml b/addons/sale/views/sale_config_settings_views.xml
index 29b44cacbf1..fd8c087deaf 100644
--- a/addons/sale/views/sale_config_settings_views.xml
+++ b/addons/sale/views/sale_config_settings_views.xml
@@ -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/website_sale/models/res_config.py b/addons/website_sale/models/res_config.py
index 528c120e6dc..ed747b7d846 100644
--- a/addons/website_sale/models/res_config.py
+++ b/addons/website_sale/models/res_config.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')
@@ -93,6 +101,37 @@ class WebsiteConfigSettings(models.TransientModel):
value = self.env['ir.config_parameter'].sudo().get_param('website_sale.automatic_invoice', default=False)
return {'automatic_invoice': value}
+ @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.model
def get_default_sale_delivery_settings(self, fields):
sale_delivery_settings = 'none'
@@ -104,18 +143,15 @@ class WebsiteConfigSettings(models.TransientModel):
@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')
+ return dict(
+ 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,
+ )
- @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)
+ def set_multi_sales_price(self):
+ self.env['ir.config_parameter'].sudo().set_param('sale.sale_pricelist_setting', self.sale_pricelist_setting)
@api.multi
def set_sale_tax_defaults(self):
@@ -147,28 +183,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":
@@ -181,3 +195,9 @@ class WebsiteConfigSettings(models.TransientModel):
'group_show_price_total': True,
'group_show_price_subtotal': False,
})
+
+ def get_default_sale_show_tax(self, fields):
+ return dict(sale_show_tax=self.env['ir.config_parameter'].sudo().get_param('website.sale_show_tax'))
+
+ def set_sale_show_tax(self):
+ return self.env['ir.config_parameter'].sudo().set_param('website.sale_show_tax', self.sale_show_tax)
diff --git a/addons/website_sale/views/res_config_view.xml b/addons/website_sale/views/res_config_view.xml
index 2b3fe0bf604..49379c710be 100644
--- a/addons/website_sale/views/res_config_view.xml
+++ b/addons/website_sale/views/res_config_view.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.
-