diff --git a/modules/purchase_trade/coffee.py b/modules/purchase_trade/coffee.py
index a26373e..e6e61c1 100644
--- a/modules/purchase_trade/coffee.py
+++ b/modules/purchase_trade/coffee.py
@@ -3,6 +3,8 @@
import datetime
from decimal import Decimal
+from lxml import etree
+
from trytond.model import ModelSQL, ModelView, Workflow, fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval
@@ -1072,11 +1074,23 @@ class CoffeeLabAnalysis(Workflow, ModelSQL, ModelView):
class CoffeeLineMixin:
+ _coffee_view_fields = {
+ 'coffee_quality_status',
+ 'coffee_origin',
+ 'coffee_type',
+ 'coffee_process',
+ 'coffee_variety',
+ 'coffee_crop_year',
+ 'coffee_screen_size',
+ 'coffee_moisture_max',
+ 'coffee_defect_max',
+ 'coffee_cup_score_min',
+ 'coffee_samples',
+ }
+
active_coffee_compatibility = fields.Function(
fields.Boolean('Active coffee compatibility'),
'get_active_coffee_compatibility')
- coffee_samples = fields.One2Many(
- 'coffee.sample', None, 'Coffee samples')
coffee_quality_status = fields.Function(fields.Selection([
(None, ''),
('none', 'No sample'),
@@ -1107,14 +1121,24 @@ class CoffeeLineMixin:
return self.get_active_coffee_compatibility(name)
@classmethod
- def view_attributes(cls):
- attributes = super().view_attributes()
- if not coffee_compatibility_active():
- attributes += [
- ('//page[@id="coffee_quality"]', 'states',
- {'invisible': True}),
- ]
- return attributes
+ def fields_view_get(cls, view_id=None, view_type='form', level=None):
+ result = super().fields_view_get(
+ view_id=view_id, view_type=view_type, level=level)
+ if view_type == 'form' and not coffee_compatibility_active():
+ cls._remove_coffee_quality_page(result)
+ return result
+
+ @classmethod
+ def _remove_coffee_quality_page(cls, view):
+ parser = etree.XMLParser(remove_blank_text=True, resolve_entities=False)
+ tree = etree.fromstring(view['arch'], parser)
+ for page in tree.xpath('//page[@id="coffee_quality"]'):
+ parent = page.getparent()
+ if parent is not None:
+ parent.remove(page)
+ view['arch'] = etree.tostring(tree, encoding='unicode')
+ for field_name in cls._coffee_view_fields:
+ view.get('fields', {}).pop(field_name, None)
def get_coffee_quality_status(self, name=None):
samples = self._coffee_samples()
diff --git a/modules/purchase_trade/view/purchase_line_form.xml b/modules/purchase_trade/view/purchase_line_form.xml
index 45abd6a..d265d51 100755
--- a/modules/purchase_trade/view/purchase_line_form.xml
+++ b/modules/purchase_trade/view/purchase_line_form.xml
@@ -5,7 +5,6 @@ this repository contains the full copyright notices and license terms. -->
-
@@ -136,8 +135,7 @@ this repository contains the full copyright notices and license terms. -->
+ col_widths="1fr,1fr,1fr,1fr,1fr,1fr,1fr,1fr,1fr,1fr,1fr,1fr">
diff --git a/modules/purchase_trade/view/sale_line_form.xml b/modules/purchase_trade/view/sale_line_form.xml
index c47eb4d..77a4b9d 100755
--- a/modules/purchase_trade/view/sale_line_form.xml
+++ b/modules/purchase_trade/view/sale_line_form.xml
@@ -5,7 +5,6 @@ this repository contains the full copyright notices and license terms. -->
-
@@ -129,8 +128,7 @@ this repository contains the full copyright notices and license terms. -->
+ col_widths="1fr,1fr,1fr,1fr,1fr,1fr,1fr,1fr,1fr,1fr,1fr,1fr">