Reviewers: ,


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

Affected files:
  M trytond/model/modelsql.py
  M trytond/model/modelstorage.py


Index: trytond/model/modelsql.py
===================================================================

--- a/trytond/model/modelsql.py
+++ b/trytond/model/modelsql.py
@@ -299,7 +299,8 @@

         for inherits in tocreate:
             inherits_obj = pool.get(inherits)
-            inherits_id = inherits_obj.create(tocreate[inherits])
+            with Transaction().set_user(0, set_context=True):
+                inherits_id = inherits_obj.create(tocreate[inherits])
             values[self._inherits[inherits]] = inherits_id

         # Insert record
@@ -947,7 +948,8 @@
             for val in updend:
                 if self._inherit_fields[val][0] == table:
                     values2[val] = values[val]
-            pool.get(table).write(nids, values2)
+            with Transaction().set_user(0, set_context=True):
+                pool.get(table).write(nids, values2)

         self._validate(ids)


Index: trytond/model/modelstorage.py
===================================================================

--- a/trytond/model/modelstorage.py
+++ b/trytond/model/modelstorage.py
@@ -78,6 +78,17 @@
                             if field_name in cache[model_name][model_id]:
                                 del cache[model_name][model_id][field_name]

+    def __fields_by_model(self, values):
+ "Return a dictionary with list of fields from values grouped by model"
+        fields_by_model = {}
+        for field in values:
+            if field in self._columns:
+                model = self._name
+            else:
+                model = self._inherit_fields[field][0]
+            fields_by_model.setdefault(model, []).append(field)
+        return fields_by_model
+
     def create(self, values):
         '''
         Create records.
@@ -91,8 +102,8 @@
         model_field_access_obj = pool.get('ir.model.field.access')

         model_access_obj.check(self._name, 'create')
-        model_field_access_obj.check(self._name,
-                [x for x in values if x in self._columns], 'write')
+        for model, fields in self.__fields_by_model(values).iteritems():
+            model_field_access_obj.check(model, fields, 'write')
         self.__clean_xxx2many_cache()
         return False

@@ -147,8 +158,8 @@
         model_field_access_obj = pool.get('ir.model.field.access')

         model_access_obj.check(self._name, 'write')
-        model_field_access_obj.check(self._name,
-                [x for x in values if x in self._columns], 'write')
+        for model, fields in self.__fields_by_model(values).iteritems():
+            model_field_access_obj.check(model, fields, 'write')
         if not self.check_xml_record(ids, values):
             self.raise_user_error('write_xml_record',
                     error_description='xml_record_desc')



--
[email protected] mailing list

Reply via email to