diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index c8df66c55da..0c03c3e3f80 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -77,9 +77,21 @@ module_class_list = {} ROOT_USER_ID = 1 def transfer_field_to_modifiers(field, modifiers): - for a in ('invisible', 'readonly', 'required'): - if field.get(a): - modifiers[a] = bool(field.get(a)) + default_values = {} + state_exceptions = {} + for attr in ('invisible', 'readonly', 'required'): + state_exceptions[attr] = [] + default_values[attr] = bool(field.get(attr)) + for state, modifs in (field.get("states",{})).items(): + for modif in modifs: + if default_values[modif[0]] != modif[1]: + state_exceptions[modif[0]].append(state) + + for attr, default_value in default_values.items(): + if state_exceptions[attr]: + modifiers[attr] = [("state", "not in" if default_value else "in", state_exceptions[attr])] + else: + modifiers[attr] = default_value # Don't deal with groups, it is done by check_group().