XML-RPC en Odoo
XML-RPC (Remote Procedure Call), según la wikipedia, es un protocolo de llamada a procedimiento remoto que usa XML para codificar los datos y HTTP como protocolo de transmisión de mensajes.
Es un protocolo muy simple ya que solo define unos cuantos tipos de datos y comandos útiles, además de una descripción completa de corta extensión. La simplicidad del XML-RPC contrasta con la mayoría de protocolos RPC que tiene una documentación extensa y requiere considerable soporte de software para su uso.
#import xmlrpclib
import xmlrpc.client as xmlrpc # esta libreria ya viene por defecto instalada en Odoo 13
Ejemplo: Servidores funcionando con SSL
Ejemplo: Contar clientes
Ejemplo: Crear un partner y su dirección
import xmlrpc.client as xmlrpc # esta libreria ya viene por defecto instalada en Odoo 13
Ejemplo: Crear un contacto al anterior Partner
args = [('vat', '=', 'ZZZZZZ')] #query clause
ids = sock.execute(dbname, uid, pwd, 'res.partner', 'search', args)
Ejemplo: Leer datos del Partner
fields = ['name', 'active', 'vat', 'ref'] #fields to read
data = sock.execute(dbname, uid, pwd, 'res.partner', 'read', ids, fields) #ids is a list of id
Ejemplo: Actualizar datos del partner
values = {'vat': 'ZZ1ZZZ'} #data to update
result = sock.execute(dbname, uid, pwd, 'res.partner', 'write', ids, values)
Ejemplo: Borrar Partner
# ids : list of id
result = sock.execute(dbname, uid, pwd, 'res.partner', 'unlink', ids)
Adjuntar un fichero a un res.partner
fichero = open("maria.jpg",'rb')
file_name = "maria.jpg"
attachment_data = base64.b64encode(fichero.read()).decode('ascii')
vals_attachment = {
'res_model': 'account.invoice',
'res_id': 10,
'type': 'binary',
'mimetype': 'application/octet-stream',
'company_id': 1, #company ID
'datas': attachment_data,
'name': file_name,
'datas_fname': file_name,
'res_name': file_name,
'indext_content': 'application',
}
attachment_id = sock.execute(dbname,uid,pwd,'ir.attachment','create',vals_attachment)
fichero.close()
Crear contacto vinculado a una empresa con acceso al Portal
miemail = 'contacto16@gmail.com'
miparent_id = 43 # ID del partner (empresa que tiene esos contactos)
contacto = {
'name': 'Contacto 16',
'lang': 'es_ES',
'parent_id': miparent_id,
'tz':'Europe/Brussels',
'email':miemail,
'active':'true',
'phone':33333,
'type':'contact',
'customer_rank':1,
}
contact_id = sock.execute(dbname, uid, pwd, 'res.partner', 'create', contacto)
#Creamos el usuario
usuario = {
'partner_id': contact_id,
'email': miemail,
'company_id':1,
'login': miemail,
'groups_id':[(6, 0, [8])],
'share':'true',
}
user_id = sock.execute(dbname, uid, pwd, 'res.users', 'create', usuario)
Cambiar la clave del administrador
args = [('login', '=', 'admin')] #query clause
partner_id = sock.execute(dbname, uid, pwd, 'res.users', 'search', args) values = {'password': '1234'} #data to update
result = sock.execute(dbname, uid, pwd, 'res.users', 'write', partner_id, values)
'type': 'product', # consu
Establecer stock
stock_change_product_qty_id = sock.execute_kw(dbname,uid,pwd, 'stock.change.product.qty', 'create', [{'product_id': 4,'product_tmpl_id': 4,'new_quantity': 11,}])
res = sock.execute_kw(dbname,uid,pwd, 'stock.change.product.qty', 'change_product_qty', [stock_change_product_qty_id])
Crear articulos con imagen
import base64
image_path = '/home/pepe/Public/rueda.jpg'
with open(image_path, 'rb') as image_file:
encoded_image = image_file.read()
# Codificación de la imagen en base64
image_base64 = base64.b64encode(encoded_image).decode('ascii')
producto = {
'name': 'rueda',
'active': True,
'is_published': True,
'default_code': 111111,
'image_1920': image_base64,
'type': 'product', # consu
'taxes_id': [(6, 0, [37])], # 4% IVA por defecto es 21%
'supplier_taxes_id': [(6, 0, [28])], # 4% IVA
}
product_id = sock.execute(dbname, uid, pwd, 'product.product', 'create', producto)
Crear apuntes contables
Enviar un email
oMail = {
mail_id = sock.execute(database, uid, pwd, 'mail.mail', 'create', oMail)
Nota:
- asegurate de tener configurado el servidor de correo saliente
- Da un error al no estar permitido los None. Por eso lo capturamos con el Try/except pero el mail sale.
Importar de Excel
- Necesitamos tener la libreria xlrd
import xlrd