[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:
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user