feat: expand restricted price fields visibility and apply to purchase order lines

This commit is contained in:
Suherdy Yacob 2026-05-29 21:06:36 +07:00
parent 9e284bdcfb
commit 2db9ad7d44
2 changed files with 89 additions and 29 deletions

View File

@ -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,7 +67,12 @@ class ProductTemplate(models.Model):
continue continue
modified = False modified = False
for field in doc.xpath("//field[@name='standard_price']"): price_fields = {
'standard_price', 'price', 'discount', 'currency_id',
'variation_percent', 'previous_price', 'price_discounted'
}
for field in doc.xpath("//field"):
if field.get('name') in price_fields:
is_column = False is_column = False
p = field.getparent() p = field.getparent()
while p is not None: while p is not None:
@ -104,7 +112,12 @@ class ProductProduct(models.Model):
continue continue
modified = False modified = False
for field in doc.xpath("//field[@name='standard_price']"): price_fields = {
'standard_price', 'price', 'discount', 'currency_id',
'variation_percent', 'previous_price', 'price_discounted'
}
for field in doc.xpath("//field"):
if field.get('name') in price_fields:
is_column = False is_column = False
p = field.getparent() p = field.getparent()
while p is not None: while p is not None:

View File

@ -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