You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.6 KiB
40 lines
1.6 KiB
# Copyright 2016 Pedro M. Baeza <pedro.baeza@tecnativa.com>
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
|
|
|
from odoo import api, fields, models
|
|
from lxml import etree
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
_inherit = 'sale.order'
|
|
|
|
default_sale_discount = fields.Float(
|
|
related="partner_id.commercial_partner_id.default_sale_discount",
|
|
string="Default sales discount (%)",
|
|
)
|
|
|
|
@api.model
|
|
def fields_view_get(self, view_id=None, view_type='form', toolbar=False,
|
|
submenu=False):
|
|
"""Inject the default in the context of the line this way for
|
|
making it inheritable.
|
|
"""
|
|
res = super(SaleOrder, self).fields_view_get(
|
|
view_id=view_id, view_type=view_type, toolbar=toolbar,
|
|
submenu=submenu
|
|
)
|
|
if view_type != 'form': # pragma: no cover
|
|
return res
|
|
eview = etree.fromstring(res['arch'])
|
|
xml_order_line = eview.xpath("//field[@name='order_line']")
|
|
xml_discount = eview.xpath("//field[@name='default_sale_discount']")
|
|
if xml_order_line and xml_discount:
|
|
# This should be handled in "string" mode, as the context can
|
|
# contain a expression that can only be evaled on execution time
|
|
# on the JS web client
|
|
node_val = xml_order_line[0].get('context', '{}').strip()[1:-1]
|
|
elems = node_val.split(',') if node_val else []
|
|
to_add = ["'default_discount': default_sale_discount"]
|
|
xml_order_line[0].set('context', '{' + ', '.join(elems + to_add) + '}')
|
|
res['arch'] = etree.tostring(eview)
|
|
return res
|