[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:
Thibault Delavallée
2017-06-19 17:37:38 +02:00
committed by Yannick Tivisse
parent fdace36840
commit 71e5c8b0b5
6 changed files with 95 additions and 73 deletions
+1 -1
View File
@@ -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
+27 -26
View File
@@ -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:
+58 -38
View File
@@ -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>