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 @@
-
+