ODOO 8 – Exemple de module d’interface à Magento 2

Je vais reprendre l'exemple précédent pour proposer une solution "maquette" d'échange direct entre Magento 2 et ODOO 8.

Nous appellerons Magento avec les Api de type REST et nous en profiterons pour utiliser les actions planifiées et les nouvelles API apparues en Odoo v8.

Objet

Nous scruterons Magento toutes les 30 minutes pour en extraire les produits "actifs" et ensuite les insérer dans ODOO (s'ils n'existent pas déjà).

Bien entendu, ceci sera fait  dans un contexte très simplifié ( pas d'authentification Magento, pas de gestion des erreurs, attribut "name" seul renseigné ...).

Environnement

  • Magento 2.0.2 installé sur un serveur mutualisé O2switch
  • Odoo 8 installé sur un serveur VPS Debian 8.3 (cet exemple fonctionne aussi avec Odoo 9 CE)
    • sous /home/odoo/
    • modules spécifiques sous /home/odoo/extra-addons

Description

- nous allons créer le module (ie répertoire) x_schedul_magento avec les fichiers suivants :

Capture du 2016-04-18 09:09:55

- Voici le contenu de ces fichiers :

__init__.py

# -*- coding: utf-8 -*-
import schedul_magento

__openerp__.py

{
    "name" : "Test Magento",
    "version" : "1.0",
    "category" : "Generic Modules",
    'depends' : ['sale',],
    "data" : ['schedul_magento.xml',],
    "installable": True,
    "active": True
}

schedul_magento.py

# -*- coding: utf-8 -*-
from openerp import models, fields, api
import logging
import urllib2, json

_logger = logging.getLogger(__name__)

class schedul_magento(models.Model):
    _inherit = 'product.product'
    _name = 'product.product'

    @api.model
    def process_schedul_magento(self):
         _logger.info('trace 1 - declenchement action')
         self.do_operation()

    def do_operation(self):
        url = 'http://xxxxxxxxx.fr/magento2/rest/V1/products?searchCriteria[filter_groups][0][filters][0][field]=status&searchCriteria[filter_groups][0][filters][0][value]=1&searchCriteria[filter_groups][0][filters][0][condition_type]=eq'
        response = urllib2.urlopen(url)
        j_obj = json.load(response)
        for record in j_obj['items']:
            if self.search_count([('name','=',record['name'])]) == 0 :
               _logger.info('trace 2 - creation produit : ' + record['name'])
               self.create({'name': record['name']})

schedul_magento.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data noupdate="1">
        <record id="ir_cron_scheduler_magento" model="ir.cron">
            <field name="name">Magento scheduler</field>
            <field name="user_id" ref="base.user_root"/>
            <field name="interval_number">30</field>
            <field name="interval_type">minutes</field>
            <field name="numbercall">-1</field>
            <field eval="False" name="doall"/>
            <field eval="'product.product'" name="model"/>
            <field eval="'process_schedul_magento'" name="function"/>
        </record>
   </data>
</openerp>

- il faut ensuite installer le module x_schedul_magento puis lancer odoo

/home/odoo/odoo/odoo.py --addons-path=/home/odoo/odoo/addons,/home/odoo/extra-addons

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *