Reviewers: ,


Please review this at http://codereview.tryton.org/394003/

Affected files:
  M tryton/gui/window/view_form/model/field.py
  M tryton/gui/window/view_form/view/form_gtk/one2many.py


Index: tryton/gui/window/view_form/model/field.py
===================================================================

--- a/tryton/gui/window/view_form/model/field.py
+++ b/tryton/gui/window/view_form/model/field.py
@@ -13,6 +13,7 @@
 from decimal import Decimal
 from tryton.translate import date_format
 from tryton.common import RPCExecute, RPCException
+from tryton.pyson import PYSONDecoder


 class Field(object):
@@ -752,6 +753,13 @@
         screen_domain, attr_domain = self.domains_get(record)
         return localize_domain(inverse_leaf(screen_domain)) + attr_domain

+    def get_size(self, record):
+        size_expr = self.attrs.get('size')
+        if size_expr is None or isinstance(size_expr, int):
+            return size_expr
+        env = EvalEnvironment(record, False)
+        return PYSONDecoder(env).decode(size_expr)
+

 class M2MField(O2MField):


Index: tryton/gui/window/view_form/view/form_gtk/one2many.py
===================================================================

--- a/tryton/gui/window/view_form/view/form_gtk/one2many.py
+++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py
@@ -399,6 +399,14 @@
             self.screen.display()
             return False
         new_group = field.get_client(record)
+
+        field_size = field.get_size(record)
+        o2m_size = len([r for r in new_group if not r.deleted])
+        if field_size is not None and o2m_size >= field_size:
+            self.but_new.set_sensitive(False)
+            if hasattr(self, 'but_add'):
+                self.but_add.set_sensitive(False)
+
         if id(self.screen.group) != id(new_group):
             self.screen.group = new_group
             if (self.screen.current_view.view_type == 'tree') \



--
[email protected] mailing list

Reply via email to