changeset a518b393ae7a in tryton:default
details: https://hg.tryton.org/tryton?cmd=changeset&node=a518b393ae7a
description:
        Support create/delete attribute in view

        issue10840
        review377341002
diffstat:

 tryton/gui/window/view_form/view/form_gtk/dictionary.py |   2 +-
 tryton/gui/window/view_form/view/form_gtk/many2many.py  |  21 +++++-
 tryton/gui/window/view_form/view/form_gtk/many2one.py   |   5 +-
 tryton/gui/window/view_form/view/form_gtk/one2many.py   |  59 ++++++++++------
 tryton/gui/window/view_form/view/list_gtk/widget.py     |   7 +-
 5 files changed, 63 insertions(+), 31 deletions(-)

diffs (246 lines):

diff -r 81f7ed3823ca -r a518b393ae7a 
tryton/gui/window/view_form/view/form_gtk/dictionary.py
--- a/tryton/gui/window/view_form/view/form_gtk/dictionary.py   Fri Oct 08 
19:12:56 2021 +0200
+++ b/tryton/gui/window/view_form/view/form_gtk/dictionary.py   Mon Oct 11 
22:53:02 2021 +0200
@@ -517,7 +517,7 @@
     def _set_button_sensitive(self):
         self.but_add.set_sensitive(bool(
                 not self._readonly
-                and self.attrs.get('create', True)))
+                and int(self.attrs.get('create', 1))))
         for button in self.buttons.values():
             button.set_sensitive(bool(
                     not self._readonly
diff -r 81f7ed3823ca -r a518b393ae7a 
tryton/gui/window/view_form/view/form_gtk/many2many.py
--- a/tryton/gui/window/view_form/view/form_gtk/many2many.py    Fri Oct 08 
19:12:56 2021 +0200
+++ b/tryton/gui/window/view_form/view/form_gtk/many2many.py    Mon Oct 11 
22:53:02 2021 +0200
@@ -52,8 +52,8 @@
 
         if int(self.attrs.get('completion', 1)):
             self.wid_completion = get_completion(
-                create=self.attrs.get('create', True)
-                and common.MODELACCESS[self.attrs['relation']]['create'])
+                search=self.read_access,
+                create=self.create_access)
             self.wid_completion.connect('match-selected',
                 self._completion_match_selected)
             self.wid_completion.connect('action-activated',
@@ -135,6 +135,21 @@
         self.wid_text.disconnect_by_func(self._focus_out)
         self.screen.destroy()
 
+    def get_access(self, type_):
+        model = self.attrs['relation']
+        if model:
+            return common.MODELACCESS[model][type_]
+        else:
+            return True
+
+    @property
+    def read_access(self):
+        return self.get_access('read')
+
+    @property
+    def create_access(self):
+        return int(self.attrs.get('create', 1)) and self.get_access('create')
+
     def _sig_add(self, *args):
         if not self.focus_out:
             return
@@ -160,7 +175,7 @@
             context=context, domain=domain, order=order,
             view_ids=self.attrs.get('view_ids', '').split(','),
             views_preload=self.attrs.get('views', {}),
-            new=self.attrs.get('create', True),
+            new=self.create_access,
             title=self.attrs.get('string'))
         win.screen.search_filter(quote(value))
         if len(win.screen.group) == 1:
diff -r 81f7ed3823ca -r a518b393ae7a 
tryton/gui/window/view_form/view/form_gtk/many2one.py
--- a/tryton/gui/window/view_form/view/form_gtk/many2one.py     Fri Oct 08 
19:12:56 2021 +0200
+++ b/tryton/gui/window/view_form/view/form_gtk/many2one.py     Mon Oct 11 
22:53:02 2021 +0200
@@ -74,7 +74,7 @@
 
     @property
     def create_access(self):
-        return self.attrs.get('create', True) and self.get_access('create')
+        return int(self.attrs.get('create', 1)) and self.get_access('create')
 
     @property
     def modified(self):
@@ -163,8 +163,7 @@
             breadcrumb=breadcrumb)
 
     def sig_new(self, *args):
-        model = self.get_model()
-        if not model or not common.MODELACCESS[model]['create']:
+        if not self.create_access:
             return
         self.focus_out = False
         screen = self.get_screen(search=True)
diff -r 81f7ed3823ca -r a518b393ae7a 
tryton/gui/window/view_form/view/form_gtk/one2many.py
--- a/tryton/gui/window/view_form/view/form_gtk/one2many.py     Fri Oct 08 
19:12:56 2021 +0200
+++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py     Mon Oct 11 
22:53:02 2021 +0200
@@ -85,10 +85,9 @@
             hbox.pack_start(self.wid_text, expand=True, fill=True, padding=0)
 
             if int(self.attrs.get('completion', 1)):
-                access = common.MODELACCESS[attrs['relation']]
                 self.wid_completion = get_completion(
-                    search=access['read'] and access['write'],
-                    create=attrs.get('create', True) and access['create'])
+                    search=self.read_access,
+                    create=self.create_access)
                 self.wid_completion.connect('match-selected',
                     self._completion_match_selected)
                 self.wid_completion.connect('action-activated',
@@ -183,6 +182,29 @@
 
         but_switch.props.sensitive = self.screen.number_of_views > 1
 
+    def get_access(self, type_):
+        model = self.attrs['relation']
+        if model:
+            return common.MODELACCESS[model][type_]
+        else:
+            return True
+
+    @property
+    def read_access(self):
+        return self.get_access('read')
+
+    @property
+    def create_access(self):
+        return int(self.attrs.get('create', 1)) and self.get_access('create')
+
+    @property
+    def write_access(self):
+        return self.get_access('write')
+
+    @property
+    def delete_access(self):
+        return int(self.attrs.get('delete', 1)) and self.get_access('delete')
+
     def on_keypress(self, widget, event):
         if ((event.keyval == Gdk.KEY_F3)
                 and self.but_new.get_property('sensitive')):
@@ -259,7 +281,6 @@
             self.title, self._readonly, self._required)
 
     def _set_button_sensitive(self):
-        access = common.MODELACCESS[self.screen.model_name]
         if self.record and self.field:
             field_size = self.record.expr_eval(self.attrs.get('size'))
             o2m_size = len(self.field.get_eval(self.record))
@@ -277,22 +298,20 @@
 
         self.but_new.set_sensitive(bool(
                 not self._readonly
-                and self.attrs.get('create', True)
-                and not size_limit
-                and access['create']))
+                and self.create_access
+                and not size_limit))
         self.but_del.set_sensitive(bool(
                 not self._readonly
-                and self.attrs.get('delete', True)
+                and self.delete_access
                 and deletable
-                and self._position
-                and access['delete']))
+                and self._position))
         self.but_undel.set_sensitive(bool(
                 not self._readonly
                 and not size_limit
                 and self._position))
         self.but_open.set_sensitive(bool(
                 self._position
-                and access['read']))
+                and self.read_access))
         self.but_next.set_sensitive(bool(
                 self._position
                 and not last))
@@ -303,13 +322,13 @@
             self.but_add.set_sensitive(bool(
                     not self._readonly
                     and not size_limit
-                    and access['write']
-                    and access['read']))
+                    and self.write_access
+                    and self.read_access))
             self.but_remove.set_sensitive(bool(
                     not self._readonly
                     and self._position
-                    and access['write']
-                    and access['read']))
+                    and self.write_access
+                    and self.read_access))
             self.wid_text.set_sensitive(self.but_add.get_sensitive())
             self.wid_text.set_editable(self.but_add.get_sensitive())
 
@@ -333,7 +352,7 @@
                     return sequence
 
     def _sig_new(self, *args):
-        if not common.MODELACCESS[self.screen.model_name]['create']:
+        if not self.create_access:
             return
         if not self._validate():
             return
@@ -434,14 +453,13 @@
         self.screen.display_prev()
 
     def _sig_remove(self, widget, remove=False):
-        access = common.MODELACCESS[self.screen.model_name]
         writable = not self.screen.readonly
         deletable = self.screen.deletable
         if remove:
-            if not access['write'] or not writable or not access['read']:
+            if not self.write_access or not writable or not self.read_access:
                 return
         else:
-            if not access['delete'] or not deletable:
+            if not self.delete_access or not deletable:
                 return
         self.screen.remove(remove=remove)
 
@@ -451,8 +469,7 @@
     def _sig_add(self, *args):
         if not self.focus_out:
             return
-        access = common.MODELACCESS[self.screen.model_name]
-        if not access['write'] or not access['read']:
+        if not self.write_access or not self.read_access:
             return
         self.view.set_value()
         domain = self.field.domain_get(self.record)
diff -r 81f7ed3823ca -r a518b393ae7a 
tryton/gui/window/view_form/view/list_gtk/widget.py
--- a/tryton/gui/window/view_form/view/list_gtk/widget.py       Fri Oct 08 
19:12:56 2021 +0200
+++ b/tryton/gui/window/view_form/view/list_gtk/widget.py       Mon Oct 11 
22:53:02 2021 +0200
@@ -835,7 +835,8 @@
 
         access = common.MODELACCESS[model]
         if (create
-                and not (self.attrs.get('create', True) and access['create'])):
+                and not (int(self.attrs.get('create', 1))
+                    and access['create'])):
             return
         elif not access['read']:
             return
@@ -877,7 +878,7 @@
         context = field.get_search_context(record)
         order = field.get_search_order(record)
         access = common.MODELACCESS[model]
-        create_access = self.attrs.get('create', True) and access['create']
+        create_access = int(self.attrs.get('create', 1)) and access['create']
 
         def search_callback(found):
             value = None
@@ -903,7 +904,7 @@
         access = common.MODELACCESS[model]
         completion = get_completion(
             search=access['read'],
-            create=self.attrs.get('create', True) and access['create'])
+            create=int(self.attrs.get('create', 1)) and access['create'])
         completion.connect('match-selected', self._completion_match_selected,
             record, field, model)
         completion.connect('action-activated',

Reply via email to