ODOO 8 – Exemple de module d’interface à Mysql

Voici un exemple de module Odoo qui récupère des informations dans une base Mysql pour ensuite les créer dans ODOO 8 (exemple similaire à celui-ci).

Nous utiliserons les actions planifiées et les nouvelles API apparues en Odoo v8.

Objet

Nous scruterons Mysql toutes les 30 minutes pour en extraire les clients 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é (attribut "name" seul exploité ...).

Environnement

  • Base Mysql v5.5.47 installée sur un VPS Debian 8.3 (base de données d'une instance Dolibarr - table llx_societe)
  • Odoo 8 installé sur un serveur VPS Debian 8.3
    • sous /home/odoo/
    • modules spécifiques sous /home/odoo/extra-addons

Prérequis

- nous allons installer sur le serveur Odoo 8, la librairie python MySQLdb qui permet d'accéder à Mysql

sudo apt-get install python-mysqldb

- ensuite, il faut créer dans Mysql un utilisateur réservé à cet accès par Odoo  (user/password)

- puis autoriser l'accès distant à la base Mysql comme cela est décrit ici

Description

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

Capture du 2016-04-28 13:37:25

- Voici le contenu de ces fichiers :

__init__.py

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

__openerp__.py

{
"name" : "Test action automatisee Mysql",
"version" : "1.0",
"category" : "Generic Modules",
'depends' : ['sale',],
"data" : ['schedul_mysql.xml',],
"installable": True,
"active": True
}

schedul_mysql.py

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

_logger = logging.getLogger(__name__)

class schedul_mysql(models.Model):
    _inherit = 'res.partner'
    _name = 'res.partner'

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

    def do_operation(self):
        db = MySQLdb.connect("serveur","user","password","nom_base", charset='utf8' )
        cursor = db.cursor()
        try:
            cursor.execute("SELECT rowid,nom from llx_societe")
            data = cursor.fetchall()
            for row in data:
                name = row[1]
                if self.search_count([('name','=',name)])==0:
                    _logger.info('trace 2 - creation client ' + name)
                    self.create({'name': name})
                
        except:
            _logger.info('erreur fetch données')

        cursor.close()
        db.close()

 

schedul_mysql.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="ir_cron_scheduler_mysql" model="ir.cron">
<field name="name">Mysql 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="'res.partner'" name="model"/>
<field eval="'process_schedul_mysql'" name="function"/>
</record>
</data>
</openerp>

- il faut ensuite installer le module x_schedul_mysql puis lancer odoo

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

 

2 réflexions au sujet de « ODOO 8 – Exemple de module d’interface à Mysql »

Laisser un commentaire

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