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 :
- 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
Bonjour,
Peut on faire le même import avec Odoo 9
merci de votre aide
Yves
Je n’ai pas fait le test en v9 mais cela devrait fonctionner aussi.
bonjour
j ai creer une api pour l’ecole qui creer un client ensuite le rajoute dans odoo
mnt je doit afficher ses factures et les lignes de facture quelqu un sait comment on fait j’utilise python