diff --git a/base_import_odoo/README.rst b/base_import_odoo/README.rst index 3ff3d68b6..96ebe8538 100644 --- a/base_import_odoo/README.rst +++ b/base_import_odoo/README.rst @@ -56,7 +56,6 @@ Known issues / Roadmap * Yes of course this duplicates a lot of connector functionality. Rewrite this with the connector framework, probably collaborate with https://github.com/OCA/connector-odoo2odoo * Do something with workflows * Support reference fields, while being at it refactor _run_import_map_values to call a function per field type -* Probably it's safer and faster to disable recomputation during import, and recompute all fields afterwards Bug Tracker =========== diff --git a/base_import_odoo/models/import_odoo_database.py b/base_import_odoo/models/import_odoo_database.py index 684bf0fbc..0ffda50b1 100644 --- a/base_import_odoo/models/import_odoo_database.py +++ b/base_import_odoo/models/import_odoo_database.py @@ -160,6 +160,7 @@ class ImportOdooDatabase(models.Model): """Import records of a configured model""" model = self.env[context.model_line.model_id.model] fields = self._run_import_model_get_fields(context) + recompute_ids = [] for data in context.remote.execute( model._name, 'read', context.ids, fields.keys() ): @@ -170,9 +171,16 @@ class ImportOdooDatabase(models.Model): data = self._run_import_map_values(context, data) _id = data['id'] record = self._create_record(context, model, data) + recompute_ids.append(record.id) self._run_import_model_cleanup_dummies( context, model, _id, record.id, ) + to_recompute = model.browse(recompute_ids) + for field in model._fields.values(): + if not field.compute: + continue + to_recompute._recompute_todo(field) + to_recompute.recompute() @api.multi def _create_record(self, context, model, record): @@ -183,13 +191,15 @@ class ImportOdooDatabase(models.Model): ) if self.env.ref('base_import_odoo.%s' % xmlid, False): new = self.env.ref('base_import_odoo.%s' % xmlid) - new.with_context( - **self._create_record_context(model, record) - ).write(record) + with self.env.norecompute(): + new.with_context( + **self._create_record_context(model, record) + ).write(record) else: - new = model.with_context( - **self._create_record_context(model, record) - ).create(record) + with self.env.norecompute(): + new = model.with_context( + **self._create_record_context(model, record) + ).create(record) self.env['ir.model.data'].create({ 'name': xmlid, 'model': model._name,