diff --git a/addons/sale/models/sale_config_settings.py b/addons/sale/models/sale_config_settings.py
index 5164ba7bcbd..16d67ef5056 100644
--- a/addons/sale/models/sale_config_settings.py
+++ b/addons/sale/models/sale_config_settings.py
@@ -69,8 +69,8 @@ class SaleConfiguration(models.TransientModel):
], "Addresses", implied_group='sale.group_delivery_invoice_address')
sale_pricelist_setting = fields.Selection([
('fixed', 'A single sale price per product'),
- ('percentage', 'Different prices per customer segment'),
- ('formula', 'Advanced pricing based on formula')
+ ('percentage', 'Specific prices per customer segment, currency, etc.'),
+ ('formula', 'Advanced pricing based on formulas (discounts, margins, rounding)')
], required=True,
default='fixed',
help='Fix Price: all price manage from products sale price.\n'
diff --git a/addons/website/models/res_config.py b/addons/website/models/res_config.py
index 65ee2578782..d744314ba55 100644
--- a/addons/website/models/res_config.py
+++ b/addons/website/models/res_config.py
@@ -30,8 +30,15 @@ class WebsiteConfigSettings(models.TransientModel):
cdn_activated = fields.Boolean('Use a Content Delivery Network (CDN)', related='website_id.cdn_activated')
cdn_url = fields.Char(related='website_id.cdn_url')
cdn_filters = fields.Text(related='website_id.cdn_filters')
- module_website_form_editor = fields.Boolean("Form builde = create and customize forms")
- module_website_version = fields.Boolean("A/B testing and versioning")
+ module_website_form_editor = fields.Boolean("Form builder")
+ module_website_form_editor = fields.Selection([
+ (0, 'Use standard forms'),
+ (1, 'Create and customize forms to generate emails, leads, issues and extra information in the checkout process (new snippet available)')
+ ], "Form Builder")
+ module_website_version = fields.Selection([
+ (0, 'No version management and A/B testing (easy)'),
+ (1, 'Allow multiple versions of the same page (advanced)')
+ ], "A/B Testing")
favicon = fields.Binary('Favicon', related='website_id.favicon')
# Set as global config parameter since methods using it are not website-aware. To be changed
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index 453596ad76b..e48fa69136c 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -164,7 +164,7 @@ class Website(models.Model):
domain = fields.Char('Website Domain')
company_id = fields.Many2one('res.company', string="Company", default=lambda self: self.env.ref('base.main_company').id)
language_ids = fields.Many2many('res.lang', 'website_lang_rel', 'website_id', 'lang_id', 'Languages', default=_active_languages)
- default_lang_id = fields.Many2one('res.lang', string="Default language", default=_default_language)
+ default_lang_id = fields.Many2one('res.lang', string="Default Language", default=_default_language)
default_lang_code = fields.Char(related='default_lang_id.code', string="Default language code", store=True)
social_twitter = fields.Char('Twitter Account')
diff --git a/addons/website/views/res_config_views.xml b/addons/website/views/res_config_views.xml
index bec3af12dd4..1624769b790 100644
--- a/addons/website/views/res_config_views.xml
+++ b/addons/website/views/res_config_views.xml
@@ -107,17 +107,11 @@
-
+
+
+
diff --git a/addons/website_quote/data/website_quotation_data.xml b/addons/website_quote/data/website_quotation_data.xml
index 8e0c4a73e6f..fc5004600ac 100644
--- a/addons/website_quote/data/website_quotation_data.xml
+++ b/addons/website_quote/data/website_quotation_data.xml
@@ -93,7 +93,7 @@
- Website Quote: confirmation e-mail
+ Online Quote: confirmation e-mail
${(object.user_id.email or object.company_id.email or 'noreply@localhost')|safe}
Your order ${object.name} is confirmed
${ctx.get('email_to') or object.partner_id.email}
diff --git a/addons/website_sale/models/res_config.py b/addons/website_sale/models/res_config.py
index ed9a3b6c016..f1b743b2bf0 100644
--- a/addons/website_sale/models/res_config.py
+++ b/addons/website_sale/models/res_config.py
@@ -1,14 +1,28 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import models, fields
+
+from odoo import api, models, fields
class WebsiteConfigSettings(models.TransientModel):
_inherit = 'website.config.settings'
+ def _default_order_mail_template(self):
+ if self.env['ir.module.module'].search([('name', '=', 'website_quote')]).state in ('installed', 'to upgrade'):
+ return self.env.ref('website_quote.confirmation_mail').id
+ else:
+ return self.env.ref('sale.email_template_edi_sale').id
+
salesperson_id = fields.Many2one('res.users', related='website_id.salesperson_id', string='Salesperson')
salesteam_id = fields.Many2one('crm.team', related='website_id.salesteam_id', string='Sales Team')
+ module_delivery = fields.Boolean("Manage shipping internally")
module_website_sale_delivery = fields.Boolean("Add Delivery Costs to Online Sales")
+ # field used to have a nice radio in form view, resuming the 2 fields above
+ sale_delivery_settings = fields.Selection([
+ ('none', 'No shipping management on website'),
+ ('internal', 'Shipping methods not selectable in the customer checkout but managed internally'),
+ ('website', 'Shipping methods available in the customer checkout (adds shipping costs to orders)'),
+ ], string="Shipping Management")
module_delivery_dhl = fields.Boolean("DHL integration")
module_delivery_fedex = fields.Boolean("Fedex integration")
module_delivery_temando = fields.Boolean("Temando integration")
@@ -16,3 +30,96 @@ class WebsiteConfigSettings(models.TransientModel):
module_delivery_usps = fields.Boolean("USPS integration")
module_sale_ebay = fields.Boolean("eBay connector")
group_website_multiimage = fields.Boolean('Multi Image', implied_group='website_sale.group_website_multi_image', group='base.group_portal,base.group_user,base.group_public')
+ module_website_sale_options = fields.Selection([
+ (0, 'One-step "add to cart"'),
+ (1, 'Suggest optional products when adding to cart (e.g. for a computer: warranty, software, etc.)')
+ ], "Optional Products", help='Install the module website_sale_options')
+ module_portal = fields.Boolean("Activate the customer portal", help="""Give your customers access to their documents.""")
+ # 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.Selection([
+ (0, 'A single sales price per product'),
+ (1, 'Several prices selectable through a drop-down list or applied automatically via Geo-IP'),
+ ], default=0, string="Pricing Strategy",
+ help='Fix Price: all price manage from products sale price.\n'
+ 'Different prices per Customer: you can assign price on buying of minimum quantity in products sale tab.\n'
+ 'Advanced pricing based on formula: You can have all the rights on pricelist')
+ sale_pricelist_setting_split_2 = fields.Selection([
+ (0, 'Specific prices per customer segment, currency, etc.'),
+ (1, 'Advanced pricing based on formulas (discounts, margins, rounding)')
+ ], default=0, string="Sales Price",
+ help='Fix Price: all price manage from products sale price.\n'
+ 'Different prices per Customer: you can assign price on buying of minimum quantity in products sale tab.\n'
+ 'Advanced pricing based on formula: You can have all the rights on pricelist')
+ group_sale_pricelist = fields.Boolean("Use pricelists to adapt your price per customers",
+ 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.""")
+ group_pricelist_item = fields.Boolean("Show pricelists to customers",
+ implied_group='product.group_pricelist_item')
+ group_product_pricelist = fields.Boolean("Show pricelists On Products",
+ implied_group='product.group_product_pricelist')
+ order_mail_template = fields.Many2one('mail.template', string='Order Confirmation Mail', readonly=True, default=_default_order_mail_template)
+
+ @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}
+
+ @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)
+
+ @api.onchange('sale_delivery_settings')
+ def _onchange_sale_delivery_settings(self):
+ if self.sale_delivery_settings == 'none':
+ self.update({
+ 'module_delivery': False,
+ 'module_website_sale_delivery': False,
+ })
+ elif self.sale_delivery_settings == 'internal':
+ self.update({
+ 'module_delivery': True,
+ 'module_website_sale_delivery': False,
+ })
+ else:
+ self.update({
+ 'module_delivery': True,
+ 'module_website_sale_delivery': 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,
+ })
diff --git a/addons/website_sale/views/res_config_view.xml b/addons/website_sale/views/res_config_view.xml
index c8848dd3f82..90df1f9d8da 100644
--- a/addons/website_sale/views/res_config_view.xml
+++ b/addons/website_sale/views/res_config_view.xml
@@ -7,10 +7,12 @@
-
-
-
-
+
+
+
+
+
+