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.">
- +
-