def prestashop_attribute_option_written(session, model_name, record_id, fields=None): if session.context.get('connector_no_export'): return export_record.delay(session, model_name, record_id, priority=20)
def product_product_write(session, model_name, record_id, fields): if session.context.get('connector_no_export'): return for field in EXCLUDE_FIELDS: fields.pop(field, None) model = session.env[model_name] record = model.browse(record_id) if not record.is_product_variant: return if 'active' in fields and not fields['active']: prestashop_product_combination_unlink(session, record_id) return if fields: # If user modify any variant we delay template export but before # check if the template have a queued job template = record.mapped('prestashop_bind_ids.product_tmpl_id') for binding in template.prestashop_bind_ids: # check if there is other queued job func = "openerp.addons.connector_prestashop.unit.exporter." \ "export_record('prestashop.product.template', %s," \ % binding.id jobs = session.env['queue.job'].sudo().search([ ('func_string', 'like', "%s%%" % func), ('state', '!=', 'done') ]) if not jobs: export_record.delay( session, 'prestashop.product.template', binding.id, fields, )
def prestashop_product_atrribute_value_created(session, model_name, record_id, fields=None): if session.context.get('connector_no_export'): return export_record.delay(session, model_name, record_id, priority=20)
def prestashop_product_combination_create(session, model_name, record_id, fields=None): if session.context.get('connector_no_export'): return export_record.delay(session, model_name, record_id, priority=20)
def export_variants(self): combination_obj = self.session.env['prestashop.product.combination'] for index, product in enumerate( self.erp_record.product_variant_ids.sorted( key=lambda r: r.default_on)): if not product.attribute_value_ids: continue combination_ext_id = combination_obj.search([ ('backend_id', '=', self.backend_record.id), ('odoo_id', '=', product.id), ]) if not combination_ext_id: combination_ext_id = combination_obj.with_context( connector_no_export=True).create({ 'backend_id': self.backend_record.id, 'odoo_id': product.id, 'main_template_id': self.binding_id, }) # If a template has been modified then always update PrestaShop # combinations export_record.delay( self.session, 'prestashop.product.combination', combination_ext_id.id, priority=50, eta=timedelta(seconds=10 + (index * 2)) )
def product_product_write(session, model_name, record_id, fields): if session.context.get('connector_no_export'): return for field in EXCLUDE_FIELDS: fields.pop(field, None) model = session.env[model_name] record = model.browse(record_id) if not record.is_product_variant: return if 'active' in fields and not fields['active']: prestashop_product_combination_unlink(session, record_id) return if fields: for binding in record.prestashop_bind_ids: priority = 20 if 'default_on' in fields and fields['default_on']: # PS has to uncheck actual default combination first priority = 99 export_record.delay( session, 'prestashop.product.combination', binding.id, fields, priority=priority, )
def product_image_write(session, model_name, record_id, fields): if session.context.get('connector_no_export'): return model = session.env[model_name] record = model.browse(record_id) for binding in record.prestashop_bind_ids: export_record.delay(session, 'prestashop.product.image', binding.id, record.file_db_store, priority=20)
def prestashop_product_combination_write(session, model_name, record_id, fields): if session.context.get('connector_no_export'): return fields = list(set(fields).difference(set(INVENTORY_FIELDS))) if fields: export_record.delay(session, model_name, record_id, fields, priority=20)
def product_category_write(session, model_name, record_id, fields): if session.context.get('connector_no_export'): return if set(fields.keys()) <= set(CATEGORY_EXPORT_FIELDS): model = session.env[model_name] record = model.browse(record_id) for binding in record.prestashop_bind_ids: export_record.delay(session, binding._model._name, binding.id, fields=fields, priority=20)
def attribute_option_written(session, model_name, record_id, fields=None): if session.context.get('connector_no_export'): return model = session.pool.get(model_name) record = model.browse(session.cr, session.uid, record_id, context=session.context) for binding in record.prestashop_bind_ids: export_record.delay(session, 'prestashop.product.combination.option.value', binding.id, fields, priority=20)
def prestashop_product_template_write(session, model_name, record_id, fields): if session.context.get('connector_no_export'): return fields = list(set(fields).difference(set(INVENTORY_FIELDS))) if fields: export_record.delay( session, model_name, record_id, fields, priority=20) # Propagate minimal_quantity from template to variants if 'minimal_quantity' in fields: ps_template = session.env[model_name].browse(record_id) for binding in ps_template.prestashop_bind_ids: binding.odoo_id.mapped( 'product_variant_ids.prestashop_bind_ids').write({ 'minimal_quantity': binding.minimal_quantity })
def check_images(self): if self.erp_record.image_ids: image_binder = self.binder_for('prestashop.product.image') for image in self.erp_record.image_ids: image_ext_id = image_binder.to_backend(image.id, wrap=True) if not image_ext_id: image_ext_id = self.session.env[ 'prestashop.product.image'].with_context( connector_no_export=True).create({ 'backend_id': self.backend_record.id, 'odoo_id': image.id, }) export_record.delay( self.session, 'prestashop.product.image', image_ext_id.id, priority=15)
def product_template_write(session, model_name, record_id, fields): if session.context.get('connector_no_export'): return model = session.env[model_name] record = model.browse(record_id) for binding in record.prestashop_bind_ids: func = "openerp.addons.connector_prestashop.unit.exporter." \ "export_record('prestashop.product.template', %s," \ % binding.id jobs = session.env['queue.job'].sudo().search( [('func_string', 'like', "%s%%" % func), ('state', 'not in', ['done', 'failed'])] ) if not jobs: export_record.delay( session, 'prestashop.product.template', binding.id, fields )
def check_images(self): if self.binding.image_ids: image_binder = self.binder_for('prestashop.product.image') for image in self.binding.image_ids: image_ext_id = image_binder.to_backend(image.id, wrap=True) # `image_ext_id` is ZERO as long as the image is not exported. # Here we delay the export so, # if we don't check this we create 2 records to be sync'ed # and this leads to: # ValueError: # Expected singleton: prestashop.product.image(x, y) if image_ext_id is None: image_ext_id = self.session.env[ 'prestashop.product.image'].with_context( connector_no_export=True).create({ 'backend_id': self.backend_record.id, 'odoo_id': image.id, }) export_record.delay( self.session, 'prestashop.product.image', image_ext_id.id, priority=15)
def prestashop_product_category_write(session, model_name, record_id, fields): if session.context.get('connector_no_export'): return if set(fields.keys()) <= set(CATEGORY_EXPORT_FIELDS): export_record.delay(session, model_name, record_id, fields)