From 52fcbba9df168f852e1c1f04b1a482c3be27ded4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 21 Apr 2016 17:15:08 +0200 Subject: [PATCH] Fix readonly tests when user has only create access The screen should not be read-only if the user is allowed to create record even if he is not allowed to modify it. And it is the same for the save button. issue5479 review20151002 --- tryton/gui/window/form.py | 8 +++++--- tryton/gui/window/view_form/model/group.py | 3 ++- tryton/gui/window/view_form/screen/screen.py | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/tryton/gui/window/form.py b/tryton/gui/window/form.py index b426622ab6..5bceecb38c 100644 --- a/tryton/gui/window/form.py +++ b/tryton/gui/window/form.py @@ -332,8 +332,9 @@ class Form(SignalEvent, TabContent): def set_buttons_sensitive(self, revision=None): if not revision: access = common.MODELACCESS[self.model] - for button, access_type in [('new', 'create'), ('save', 'write')]: - self.buttons[button].props.sensitive = access[access_type] + self.buttons['new'].props.sensitive = access['create'] + self.buttons['save'].props.sensitive = ( + access['create'] or access['write']) else: for button in ['new', 'save']: self.buttons[button].props.sensitive = False @@ -384,7 +385,8 @@ class Form(SignalEvent, TabContent): if widget: # Called from button so we must save the tree state self.screen.save_tree_state() - if not common.MODELACCESS[self.model]['write']: + if not (common.MODELACCESS[self.model]['write'] + or common.MODELACCESS[self.model]['create']): return if self.screen.save_current(): self.message_info(_('Record saved.'), gtk.MESSAGE_INFO) diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py index d755d6355f..0724c67e45 100644 --- a/tryton/gui/window/view_form/model/group.py +++ b/tryton/gui/window/view_form/model/group.py @@ -44,7 +44,8 @@ class Group(SignalEvent, list): def readonly(self): # Must skip res.user for Preference windows if (self._context.get('_datetime') - or (not MODELACCESS[self.model_name]['write'] + or (not (MODELACCESS[self.model_name]['write'] + or MODELACCESS[self.model_name]['create']) and not self.skip_model_access)): return True return self.__readonly diff --git a/tryton/gui/window/view_form/screen/screen.py b/tryton/gui/window/view_form/screen/screen.py index bcba5bceb1..ab32725e00 100644 --- a/tryton/gui/window/view_form/screen/screen.py +++ b/tryton/gui/window/view_form/screen/screen.py @@ -59,7 +59,8 @@ class Screen(SignalEvent): super(Screen, self).__init__() self.readonly = readonly - if not MODELACCESS[model_name]['write']: + if not (MODELACCESS[model_name]['write'] + or MODELACCESS[model_name]['create']): self.readonly = True self.search_count = 0 if not row_activate: