[IMP] website,w_sale: Website Admin settings view

- Add optional products and pricelists to ecommerce section
- add mail template sent when confirming a sale order
- rename and clarify using radio widgets
This commit is contained in:
Denis Vermylen (dve)
2016-08-31 17:17:37 +02:00
parent fbe3608c7e
commit f90290d1c2
7 changed files with 132 additions and 22 deletions
+2 -2
View File
@@ -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'
+9 -2
View File
@@ -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
+1 -1
View File
@@ -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')
+4 -10
View File
@@ -107,17 +107,11 @@
<div>
<field name="favicon" widget="image" class="oe_avatar oe_left"/>
</div>
<label for="id" string="Extra Features"/>
<field name="module_website_form_editor" widget="radio"/>
<field name="module_website_version" widget="radio"/>
<label for="id"/>
<div>
<div>
<field name="module_website_form_editor" widget="upgrade_boolean"/>
<label for="module_website_form_editor"/>
</div>
<div>
<field name="module_website_version" widget="upgrade_boolean"/>
<label for="module_website_version"/>
<a href="https://www.odoo.com/slides/slide/how-a-b-testing-can-help-you-optimize-your-website-341" target="_blank"> More Info</a>
</div>
<a href="https://www.odoo.com/slides/slide/how-a-b-testing-can-help-you-optimize-your-website-341" target="_blank">More Info</a>
</div>
</group>
<group string="Performance Optimization" name="optimization" groups="base.group_no_one">
@@ -93,7 +93,7 @@
</record>
<record id="confirmation_mail" model="mail.template">
<field name="name">Website Quote: confirmation e-mail</field>
<field name="name">Online Quote: confirmation e-mail</field>
<field name="email_from">${(object.user_id.email or object.company_id.email or 'noreply@localhost')|safe}</field>
<field name="subject">Your order ${object.name} is confirmed</field>
<field name="email_to">${ctx.get('email_to') or object.partner_id.email}</field>
+108 -1
View File
@@ -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,
})
@@ -7,10 +7,12 @@
<field name="arch" type="xml">
<group name="social" position="before">
<group name="delivery" string="eCommerce">
<label string="Manage Deliveries" for="module_website_sale_delivery"/>
<div class="oe_inline">
<field name="module_website_sale_delivery"/>
</div>
<field name="module_website_sale_options" widget="radio"/>
<field name="sale_pricelist_setting_split_1" widget="radio"/>
<field name="sale_pricelist_setting_split_2" widget="radio" attrs="{'invisible': [('sale_pricelist_setting_split_1', '=', False)]}"/>
<field name="module_website_sale_delivery" invisible="1"/>
<field name="module_delivery" invisible="1"/>
<field name="sale_delivery_settings" widget="radio"/>
<label for="module_delivery_ups" string="Shipping Connectors"/>
<div>
<div>
@@ -45,7 +47,7 @@
<field name="salesperson_id"/>
</div>
<field name="group_website_multiimage"/>
<field name="order_mail_template"/>
</group>
</group>
</field>