[IMP] connector_opencart: Add option on backend to require all SO products to not have checkpoints before importing order.

Additionally, allow users to re-bind product templates (understandably risky).
This commit is contained in:
Jared Kipe
2020-07-14 14:01:23 -07:00
parent ac29c1ed07
commit 3d2de4e80a
5 changed files with 37 additions and 3 deletions

View File

@@ -88,7 +88,8 @@ class OpencartImporter(AbstractComponent):
if not external_id: if not external_id:
return return
binder = self.binder_for(binding_model) 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: if importer is None:
importer = self.component(usage='record.importer', importer = self.component(usage='record.importer',
model_name=binding_model) model_name=binding_model)
@@ -99,6 +100,13 @@ class OpencartImporter(AbstractComponent):
'Dependency import of %s(%s) has been ignored.', 'Dependency import of %s(%s) has been ignored.',
binding_model._name, external_id 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): def _import_dependencies(self):
""" Import the dependencies for the record """ Import the dependencies for the record

View File

@@ -73,6 +73,9 @@ class OpencartBackend(models.Model):
string='Import sale orders after id', 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 @contextmanager
@api.multi @api.multi
def work_on(self, model_name, **kwargs): def work_on(self, model_name, **kwargs):
@@ -89,6 +92,20 @@ class OpencartBackend(models.Model):
return add_checkpoint(self.env, record._name, record.id, return add_checkpoint(self.env, record._name, record.id,
self._name, self.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 @api.multi
def synchronize_metadata(self): def synchronize_metadata(self):
try: try:

View File

@@ -8,6 +8,7 @@ from odoo import fields, _
from odoo.addons.component.core import Component from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import mapping from odoo.addons.connector.components.mapper import mapping
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
from odoo.addons.queue_job.exception import RetryableJobError
class SaleOrderBatchImporter(Component): class SaleOrderBatchImporter(Component):
@@ -363,9 +364,16 @@ class SaleOrderImporter(Component):
def _import_dependencies(self): def _import_dependencies(self):
record = self.opencart_record record = self.opencart_record
self._import_addresses() self._import_addresses()
products_need_setup = []
for product in record.get('products', []): for product in record.get('products', []):
if 'product_id' in product and product['product_id']: 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): class SaleOrderLineImportMapper(Component):

View File

@@ -38,6 +38,7 @@
<group name="product_configuration" string="Product Defaults"> <group name="product_configuration" string="Product Defaults">
<field name="product_categ_id"/> <field name="product_categ_id"/>
<field name="coupon_product_id"/> <field name="coupon_product_id"/>
<field name="so_require_product_setup"/>
</group> </group>
</group> </group>
<notebook name="import_config"> <notebook name="import_config">

View File

@@ -9,7 +9,7 @@
<header/> <header/>
<sheet> <sheet>
<group> <group>
<field name="odoo_id" readonly="1"/> <field name="odoo_id"/>
<field name="opencart_attribute_value_ids" options="{'no_create': True}"> <field name="opencart_attribute_value_ids" options="{'no_create': True}">
<tree editable="top" decoration-warning="not odoo_id"> <tree editable="top" decoration-warning="not odoo_id">
<field name="external_id" readonly="1"/> <field name="external_id" readonly="1"/>