[REF] (website_)sale: use config parameter instead of ir values in settings
Fields like `default_foo` still used ir.values although those are system-wide parameters and should therefore be stored in ir.config_parameter table. When no default_model is set on a field, don't prefix it by `default_`.
This commit is contained in:
committed by
Yannick Tivisse
parent
fdace36840
commit
71e5c8b0b5
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -278,7 +278,7 @@
|
||||
Product used for down payments
|
||||
</div>
|
||||
<div class="text-muted">
|
||||
<field name="deposit_product_id_setting"/>
|
||||
<field name="default_deposit_product_id"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="sale_pricelist_setting_split_1"/>
|
||||
<field name="multi_sales_price"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="sale_pricelist_setting_split_1"/>
|
||||
<field name="sale_pricelist_setting" invisible="1"/>
|
||||
<label for="multi_sales_price"/>
|
||||
<div class="text-muted">
|
||||
Apply specific prices per country, discounts, etc.
|
||||
</div>
|
||||
<div class="mt16" attrs="{'invisible': [('sale_pricelist_setting_split_1', '=', False)]}">
|
||||
<div class="mt16" attrs="{'invisible': [('multi_sales_price', '=', False)]}">
|
||||
<field name="group_sale_pricelist" invisible="1"/>
|
||||
<field name="group_pricelist_item" invisible="1"/>
|
||||
<field name="group_product_pricelist" invisible="1"/>
|
||||
<field name="sale_pricelist_setting_split_2" class="o_light_label" widget="radio"/>
|
||||
<field name="multi_sales_price_method" class="o_light_label" widget="radio"/>
|
||||
</div>
|
||||
<div attrs="{'invisible': [('sale_pricelist_setting_split_1', '=', False)]}">
|
||||
<div attrs="{'invisible': [('multi_sales_price', '=', False)]}">
|
||||
<button type="action" name="%(product.product_pricelist_action2)d" string="Pricelists" class="btn-link" icon="fa-arrow-right"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user