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 :
- 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