diff --git a/connector_opencart/components/importer.py b/connector_opencart/components/importer.py index a2c7f973..6a1ef5db 100644 --- a/connector_opencart/components/importer.py +++ b/connector_opencart/components/importer.py @@ -88,7 +88,8 @@ class OpencartImporter(AbstractComponent): if not external_id: return binder = self.binder_for(binding_model) - if always or not binder.to_internal(external_id): + record = binder.to_internal(external_id) + if always or not record: if importer is None: importer = self.component(usage='record.importer', model_name=binding_model) @@ -99,6 +100,13 @@ class OpencartImporter(AbstractComponent): 'Dependency import of %s(%s) has been ignored.', binding_model._name, external_id ) + return True + if binding_model == 'opencart.product.template' and record.backend_id.so_require_product_setup: + # Though this is not the "right" place to do this, + # we need to return True if there is a checkpoint for a product. + if record.backend_id.find_checkpoint(record): + return True + return False def _import_dependencies(self): """ Import the dependencies for the record diff --git a/connector_opencart/models/opencart/backend.py b/connector_opencart/models/opencart/backend.py index 46620a87..42cd62ad 100644 --- a/connector_opencart/models/opencart/backend.py +++ b/connector_opencart/models/opencart/backend.py @@ -73,6 +73,9 @@ class OpencartBackend(models.Model): string='Import sale orders after id', ) + so_require_product_setup = fields.Boolean(string='SO Require Product Setup', + help='Prevents SO from being confirmed (failed queue job), if one or more products has an open checkpoint.') + @contextmanager @api.multi def work_on(self, model_name, **kwargs): @@ -89,6 +92,20 @@ class OpencartBackend(models.Model): return add_checkpoint(self.env, record._name, record.id, self._name, self.id) + @api.multi + def find_checkpoint(self, record): + self.ensure_one() + record.ensure_one() + checkpoint_model = self.env['connector.checkpoint'] + model_model = self.env['ir.model'] + model = model_model.search([('model', '=', record._name)], limit=1) + return checkpoint_model.search([ + ('backend_id', '=', '%s,%s' % (self._name, self.id)), + ('model_id', '=', model.id), + ('record_id', '=', record.id), + ('state', '=', 'need_review'), + ], limit=1) + @api.multi def synchronize_metadata(self): try: diff --git a/connector_opencart/models/sale_order/importer.py b/connector_opencart/models/sale_order/importer.py index b33f4f5f..79e19595 100644 --- a/connector_opencart/models/sale_order/importer.py +++ b/connector_opencart/models/sale_order/importer.py @@ -8,6 +8,7 @@ from odoo import fields, _ from odoo.addons.component.core import Component from odoo.addons.connector.components.mapper import mapping from odoo.exceptions import ValidationError +from odoo.addons.queue_job.exception import RetryableJobError class SaleOrderBatchImporter(Component): @@ -363,9 +364,16 @@ class SaleOrderImporter(Component): def _import_dependencies(self): record = self.opencart_record self._import_addresses() + products_need_setup = [] for product in record.get('products', []): if 'product_id' in product and product['product_id']: - self._import_dependency(product['product_id'], 'opencart.product.template') + needs_product_setup = self._import_dependency(product['product_id'], 'opencart.product.template') + if needs_product_setup: + products_need_setup.append(product['product_id']) + + if products_need_setup and self.backend_record.so_require_product_setup: + # There are products that were either just imported, or + raise RetryableJobError('Products need setup. OpenCart Product IDs:' + str(products_need_setup), seconds=3600) class SaleOrderLineImportMapper(Component): diff --git a/connector_opencart/views/opencart_backend_views.xml b/connector_opencart/views/opencart_backend_views.xml index 716dcc63..d60fda7b 100644 --- a/connector_opencart/views/opencart_backend_views.xml +++ b/connector_opencart/views/opencart_backend_views.xml @@ -38,6 +38,7 @@ + diff --git a/connector_opencart/views/opencart_product_views.xml b/connector_opencart/views/opencart_product_views.xml index fec97208..4cec551f 100644 --- a/connector_opencart/views/opencart_product_views.xml +++ b/connector_opencart/views/opencart_product_views.xml @@ -9,7 +9,7 @@
- +