qdp (OpenERP) has proposed merging 
lp:~openerp-dev/openobject-server/trunk-yml-onchange-fix-qdp into 
lp:openobject-server.

Requested reviews:
  OpenERP Core Team (openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-yml-onchange-fix-qdp/+merge/127294
-- 
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-yml-onchange-fix-qdp/+merge/127294
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-server/trunk-yml-onchange-fix-qdp.
=== modified file 'openerp/tools/yaml_import.py'
--- openerp/tools/yaml_import.py	2012-09-11 15:07:24 +0000
+++ openerp/tools/yaml_import.py	2012-10-01 14:30:40 +0000
@@ -313,13 +313,14 @@
             #context = self.get_context(record, self.eval_context)
             #TOFIX: record.context like {'withoutemployee':True} should pass from self.eval_context. example: test_project.yml in project module
             context = record.context
+            fields_view_get_result = False
             if view_id:
                 varg = view_id
                 if view_id is True: varg = False
-                view = model.fields_view_get(self.cr, SUPERUSER_ID, varg, 'form', context)
-                view_id = etree.fromstring(view['arch'].encode('utf-8'))
+                fields_view_get_result = model.fields_view_get(self.cr, SUPERUSER_ID, varg, 'form', context)
+                view_id = etree.fromstring(fields_view_get_result['arch'].encode('utf-8'))
 
-            record_dict = self._create_record(model, fields, view_id, default=default)
+            record_dict = self._create_record(model, fields, view_id, default=default, fields_view_get=fields_view_get_result)
             _logger.debug("RECORD_DICT %s" % record_dict)
             id = self.pool.get('ir.model.data')._update(self.cr, SUPERUSER_ID, record.model, \
                     self.module, record_dict, record.id, noupdate=self.isnoupdate(record), mode=self.mode, context=context)
@@ -327,7 +328,7 @@
             if config.get('import_partial'):
                 self.cr.commit()
 
-    def _create_record(self, model, fields, view=False, parent={}, default=True):
+    def _create_record(self, model, fields, view=False, parent={}, default=True, fields_view_get=None):
         if view is not False:
             defaults = default and model._add_missing_default_values(self.cr, SUPERUSER_ID, {}, context=self.context) or {}
             fg = model.fields_get(self.cr, SUPERUSER_ID, context=self.context)
@@ -359,12 +360,14 @@
                     view2 = None
                     # if the form view is not inline, we call fields_view_get
                     if (view is not False) and (fg[field_name]['type']=='one2many'):
-                        view2 = view.find("field[@name='%s']/form"%(field_name,))
+                        tmp = fields_view_get['fields'][field_name]['views']
+                        if tmp.has_key('form'):
+                            view2 = tmp.get('form')
                         if not view2:
                             view2 = self.pool.get(fg[field_name]['relation']).fields_view_get(self.cr, SUPERUSER_ID, False, 'form', self.context)
-                            view2 = etree.fromstring(view2['arch'].encode('utf-8'))
+                        view2 = etree.fromstring(view2['arch'].encode('utf-8'))
 
-                    field_value = self._eval_field(model, field_name, fields[field_name], view2, parent=record_dict, default=default)
+                    field_value = self._eval_field(model, field_name, fields[field_name], view2, parent=record_dict, default=default, fields_view_get=fields_view_get)
                     record_dict[field_name] = field_value
                     #if (field_name in defaults) and defaults[field_name] == field_value:
                     #    print '*** You can remove these lines:', field_name, field_value
@@ -409,7 +412,7 @@
         for field_name, expression in fields.items():
             if field_name in record_dict:
                 continue
-            field_value = self._eval_field(model, field_name, expression, default=False)
+            field_value = self._eval_field(model, field_name, expression, default=False, fields_view_get=fields_view_get)
             record_dict[field_name] = field_value
 
         return record_dict
@@ -440,7 +443,7 @@
     def process_eval(self, node):
         return eval(node.expression, self.eval_context)
 
-    def _eval_field(self, model, field_name, expression, view=False, parent={}, default=True):
+    def _eval_field(self, model, field_name, expression, view=False, parent={}, default=True, fields_view_get=None):
         # TODO this should be refactored as something like model.get_field() in bin/osv
         if field_name in model._columns:
             column = model._columns[field_name]
@@ -461,7 +464,7 @@
             value = self.get_id(expression)
         elif column._type == "one2many":
             other_model = self.get_model(column._obj)
-            value = [(0, 0, self._create_record(other_model, fields, view, parent, default=default)) for fields in expression]
+            value = [(0, 0, self._create_record(other_model, fields, view, parent, default=default, fields_view_get=fields_view_get)) for fields in expression]
         elif column._type == "many2many":
             ids = [self.get_id(xml_id) for xml_id in expression]
             value = [(6, 0, ids)]

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to