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)
Example #5
0
 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))
         )
Example #6
0
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,
            )
Example #7
0
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)
Example #9
0
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)
Example #11
0
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
                    })
Example #12
0
 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)
Example #13
0
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
            )
Example #14
0
 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)
Example #15
0
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)