summaryrefslogtreecommitdiff
path: root/addons/base_import/models
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-10-17 15:14:47 +0200
committerChristophe Simonis <chs@odoo.com>2017-10-17 15:14:47 +0200
commit868e718e09e03dcc09b992f02ffee6feee7a026c (patch)
tree692bd428409d83bd881fe4f757c67c40fbbccea3 /addons/base_import/models
parent3993528bacf2231010ab65fef70dd17f93b26466 (diff)
parent8d0942380b5743145bee624411a15d71d225b246 (diff)
[MERGE] forward port branch saas-15 up to 8d0942380b5
Diffstat (limited to 'addons/base_import/models')
-rw-r--r--addons/base_import/models/base_import.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/addons/base_import/models/base_import.py b/addons/base_import/models/base_import.py
index 94dcde8bb23..5757f68155f 100644
--- a/addons/base_import/models/base_import.py
+++ b/addons/base_import/models/base_import.py
@@ -605,9 +605,18 @@ class Import(models.TransientModel):
@api.multi
def _parse_import_data(self, data, import_fields, options):
+ """ Lauch first call to _parse_import_data_recursive with an
+ empty prefix. _parse_import_data_recursive will be run
+ recursively for each relational field.
+ """
+ return self._parse_import_data_recursive(self.res_model, '', data, import_fields, options)
+
+ @api.multi
+ def _parse_import_data_recursive(self, model, prefix, data, import_fields, options):
# Get fields of type date/datetime
- all_fields = self.env[self.res_model].fields_get()
+ all_fields = self.env[model].fields_get()
for name, field in all_fields.iteritems():
+ name = prefix + name
if field['type'] in ('date', 'datetime') and name in import_fields:
# Parse date
index = import_fields.index(name)
@@ -624,7 +633,11 @@ class Import(models.TransientModel):
raise ValueError(_("Column %s contains incorrect values. Error in line %d: %s") % (name, num + 1, ustr(e.message)))
except Exception as e:
raise ValueError(_("Error Parsing Date [%s:L%d]: %s") % (name, num + 1, ustr(e.message)))
-
+ # Check if the field is in import_field and is a relational (followed by /)
+ # Also verify that the field name exactly match the import_field at the correct level.
+ elif any(name + '/' in import_field and name == import_field.split('/')[prefix.count('/')] for import_field in import_fields):
+ # Recursive call with the relational as new model and add the field name to the prefix
+ self._parse_import_data_recursive(field['relation'], name + '/', data, import_fields, options)
elif field['type'] in ('float', 'monetary') and name in import_fields:
# Parse float, sometimes float values from file have currency symbol or () to denote a negative value
# We should be able to manage both case