feat: expand restricted price fields visibility and apply to purchase order lines
This commit is contained in:
parent
9e284bdcfb
commit
2db9ad7d44
@ -22,7 +22,10 @@ class ProductSupplierinfo(models.Model):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
modified = False
|
modified = False
|
||||||
price_fields = {'price', 'discount'}
|
price_fields = {
|
||||||
|
'price', 'discount', 'currency_id', 'variation_percent',
|
||||||
|
'previous_price', 'price_discounted'
|
||||||
|
}
|
||||||
for field in doc.xpath("//field"):
|
for field in doc.xpath("//field"):
|
||||||
if field.get('name') in price_fields:
|
if field.get('name') in price_fields:
|
||||||
is_column = False
|
is_column = False
|
||||||
@ -64,21 +67,26 @@ class ProductTemplate(models.Model):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
modified = False
|
modified = False
|
||||||
for field in doc.xpath("//field[@name='standard_price']"):
|
price_fields = {
|
||||||
is_column = False
|
'standard_price', 'price', 'discount', 'currency_id',
|
||||||
p = field.getparent()
|
'variation_percent', 'previous_price', 'price_discounted'
|
||||||
while p is not None:
|
}
|
||||||
if p.tag in ('tree', 'list'):
|
for field in doc.xpath("//field"):
|
||||||
is_column = True
|
if field.get('name') in price_fields:
|
||||||
break
|
is_column = False
|
||||||
p = p.getparent()
|
p = field.getparent()
|
||||||
|
while p is not None:
|
||||||
|
if p.tag in ('tree', 'list'):
|
||||||
|
is_column = True
|
||||||
|
break
|
||||||
|
p = p.getparent()
|
||||||
|
|
||||||
|
if is_column:
|
||||||
|
field.set('column_invisible', 'True')
|
||||||
|
else:
|
||||||
|
field.set('invisible', '1')
|
||||||
|
modified = True
|
||||||
|
|
||||||
if is_column:
|
|
||||||
field.set('column_invisible', 'True')
|
|
||||||
else:
|
|
||||||
field.set('invisible', '1')
|
|
||||||
modified = True
|
|
||||||
|
|
||||||
if modified:
|
if modified:
|
||||||
view_data['arch'] = etree.tostring(doc, encoding='utf-8').decode('utf-8')
|
view_data['arch'] = etree.tostring(doc, encoding='utf-8').decode('utf-8')
|
||||||
|
|
||||||
@ -104,21 +112,26 @@ class ProductProduct(models.Model):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
modified = False
|
modified = False
|
||||||
for field in doc.xpath("//field[@name='standard_price']"):
|
price_fields = {
|
||||||
is_column = False
|
'standard_price', 'price', 'discount', 'currency_id',
|
||||||
p = field.getparent()
|
'variation_percent', 'previous_price', 'price_discounted'
|
||||||
while p is not None:
|
}
|
||||||
if p.tag in ('tree', 'list'):
|
for field in doc.xpath("//field"):
|
||||||
is_column = True
|
if field.get('name') in price_fields:
|
||||||
break
|
is_column = False
|
||||||
p = p.getparent()
|
p = field.getparent()
|
||||||
|
while p is not None:
|
||||||
|
if p.tag in ('tree', 'list'):
|
||||||
|
is_column = True
|
||||||
|
break
|
||||||
|
p = p.getparent()
|
||||||
|
|
||||||
|
if is_column:
|
||||||
|
field.set('column_invisible', 'True')
|
||||||
|
else:
|
||||||
|
field.set('invisible', '1')
|
||||||
|
modified = True
|
||||||
|
|
||||||
if is_column:
|
|
||||||
field.set('column_invisible', 'True')
|
|
||||||
else:
|
|
||||||
field.set('invisible', '1')
|
|
||||||
modified = True
|
|
||||||
|
|
||||||
if modified:
|
if modified:
|
||||||
view_data['arch'] = etree.tostring(doc, encoding='utf-8').decode('utf-8')
|
view_data['arch'] = etree.tostring(doc, encoding='utf-8').decode('utf-8')
|
||||||
|
|
||||||
|
|||||||
@ -91,3 +91,50 @@ class PurchaseOrder(models.Model):
|
|||||||
view_data['arch'] = etree.tostring(doc, encoding='utf-8').decode('utf-8')
|
view_data['arch'] = etree.tostring(doc, encoding='utf-8').decode('utf-8')
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
class PurchaseOrderLine(models.Model):
|
||||||
|
_inherit = 'purchase.order.line'
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def get_views(self, views, options=None):
|
||||||
|
res = super().get_views(views, options)
|
||||||
|
if not self.env.user.hide_purchase_prices:
|
||||||
|
return res
|
||||||
|
|
||||||
|
for view_type, view_data in res.get('views', {}).items():
|
||||||
|
arch_str = view_data.get('arch')
|
||||||
|
if not arch_str:
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
doc = etree.fromstring(arch_str.encode('utf-8'))
|
||||||
|
except Exception:
|
||||||
|
continue
|
||||||
|
|
||||||
|
modified = False
|
||||||
|
price_fields = {
|
||||||
|
'price_unit', 'price_unit_product_uom', 'price_subtotal',
|
||||||
|
'price_total', 'price_tax', 'discount', 'taxes_id'
|
||||||
|
}
|
||||||
|
|
||||||
|
for field in doc.xpath("//field"):
|
||||||
|
if field.get('name') in price_fields:
|
||||||
|
is_column = False
|
||||||
|
p = field.getparent()
|
||||||
|
while p is not None:
|
||||||
|
if p.tag in ('tree', 'list'):
|
||||||
|
is_column = True
|
||||||
|
break
|
||||||
|
p = p.getparent()
|
||||||
|
|
||||||
|
if is_column:
|
||||||
|
field.set('column_invisible', 'True')
|
||||||
|
else:
|
||||||
|
field.set('invisible', '1')
|
||||||
|
modified = True
|
||||||
|
|
||||||
|
if modified:
|
||||||
|
view_data['arch'] = etree.tostring(doc, encoding='utf-8').decode('utf-8')
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user