Skip to main content

Una librería de Python completa para gestionar conexiones y operaciones con Odoo

Project description

Manager Odoo API

Una librería de Python completa y fácil de usar para gestionar conexiones y operaciones con Odoo a través de XML-RPC.

🚀 Características Principales

  • Conexión sencilla: Conecta a cualquier instancia de Odoo con credenciales simples
  • Operaciones CRUD completas: Create, Read, Update, Delete en cualquier modelo
  • Soporte multi-compañía: Trabaja con múltiples compañías en la misma instancia
  • Integración con pandas: Crea registros masivos desde DataFrames
  • Upsert inteligente: Crea o actualiza registros basado en IDs externos
  • Validación robusta: Manejo de errores y validación de datos
  • Type hints: Código completamente tipado para mejor desarrollo

📦 Instalación

pip install managerodooapi

🔧 Uso Básico

Configuración inicial

from managerodooapi import OdooConnector, Credentials

# Configurar credenciales
creds = Credentials(
    url="http://localhost:8069",
    db="mi_base_de_datos",
    username="admin",
    password="admin"
)

# Crear conector (se conecta automáticamente)
odoo = OdooConnector(creds)

Operaciones básicas

# Buscar registros
partner_ids = odoo.search('res.partner', [('is_company', '=', True)], limit=10)

# Leer registros
partners = odoo.read('res.partner', domain=[('is_company', '=', True)], 
                    fields=['name', 'email', 'phone'])

# Crear registro
new_partner_id = odoo.create('res.partner', {
    'name': 'Nuevo Cliente',
    'email': 'cliente@ejemplo.com',
    'is_company': True
})

# Actualizar registros
odoo.update('res.partner', [new_partner_id], {'phone': '+1234567890'})

# Eliminar registros
odoo.delete('res.partner', [new_partner_id])

Operaciones avanzadas

import pandas as pd

# Crear registros desde DataFrame
df = pd.DataFrame({
    'name': ['Cliente 1', 'Cliente 2', 'Cliente 3'],
    'email': ['c1@ejemplo.com', 'c2@ejemplo.com', 'c3@ejemplo.com']
})

field_map = {
    'name': 'name',
    'email': 'email'
}

result = odoo.create_from_df('res.partner', df, field_map, 
                            static_values={'is_company': True})
print(f"Creados {result['total_created']} registros")

# Upsert (crear o actualizar)
partner_id, was_created = odoo.upsert_by_external_id(
    'res.partner', 'ref', 'CLI001',
    {'name': 'Cliente Actualizado', 'email': 'nuevo@ejemplo.com'}
)

Soporte multi-compañía

# Trabajar con una compañía específica
company_id = 1

# Buscar solo en esa compañía
partners = odoo.read('res.partner', company_id=company_id)

# Crear registro en esa compañía
new_id = odoo.create('res.partner', {'name': 'Partner'}, company_id=company_id)

Operaciones específicas de Odoo

# Confirmar órdenes de venta
order_ids = [1, 2, 3]
odoo.confirm_sale_order(order_ids)

# Ejecutar cualquier método de Odoo
result = odoo.execute_kw(
    odoo.creds.db, odoo.uid, odoo.creds.password,
    'sale.order', 'action_confirm', [order_ids]
)

📚 Ejemplos Completos

Gestión de Productos

from managerodooapi import OdooConnector, Credentials

# Conectar
creds = Credentials("http://localhost:8069", "mi_db", "admin", "admin")
odoo = OdooConnector(creds)

# Crear categoría de producto
category_id = odoo.create('product.category', {'name': 'Electrónicos'})

# Crear productos
products_data = [
    {
        'name': 'Laptop Gaming',
        'list_price': 1299.99,
        'categ_id': category_id,
        'type': 'product'
    },
    {
        'name': 'Mouse Inalámbrico', 
        'list_price': 29.99,
        'categ_id': category_id,
        'type': 'product'
    }
]

created_ids = odoo.create('product.product', products_data)
print(f"Productos creados: {created_ids}")

# Actualizar precios con descuento del 10%
for product_id in created_ids:
    product_data = odoo.read('product.product', 
                           domain=[('id', '=', product_id)], 
                           fields=['list_price'])[0]
    new_price = product_data['list_price'] * 0.9
    odoo.update('product.product', [product_id], {'list_price': new_price})

Importación masiva desde Excel

import pandas as pd

# Leer archivo Excel
df = pd.read_excel('clientes.xlsx')

# Mapear columnas
field_map = {
    'Nombre': 'name',
    'Email': 'email', 
    'Teléfono': 'phone',
    'Ciudad': 'city'
}

# Valores estáticos para todos los registros
static_values = {
    'is_company': True,
    'customer_rank': 1
}

# Importar en lotes
result = odoo.create_from_df('res.partner', df, field_map, 
                            static_values=static_values, batch_size=100)

print(f"Procesados: {result['total_processed']}")
print(f"Creados: {result['total_created']}")
print(f"Errores: {len(result['errors'])}")

# Mostrar errores si los hay
for error in result['errors']:
    print(f"Error: {error}")

🛠️ API Reference

OdooConnector

La clase principal para todas las operaciones con Odoo.

Métodos principales:

  • search(model, domain, limit, company_id): Buscar IDs de registros
  • read(model, fields, domain, limit, company_id): Leer datos de registros
  • create(model, values, company_id): Crear uno o múltiples registros
  • update(model, ids, values, company_id): Actualizar registros existentes
  • delete(model, ids, company_id): Eliminar registros
  • create_from_df(model, df, field_map, ...): Crear registros desde DataFrame
  • upsert_by_external_id(...): Crear o actualizar por ID externo
  • execute_kw(...): Ejecutar cualquier método de Odoo

Credentials

Clase para almacenar credenciales de conexión.

@dataclass
class Credentials:
    url: str      # URL del servidor Odoo
    db: str       # Nombre de la base de datos
    username: str # Usuario
    password: str # Contraseña

🤝 Contribuir

Las contribuciones son bienvenidas. Por favor:

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

📄 Licencia

Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.

🐛 Reportar Issues

Si encuentras algún bug o tienes una sugerencia, por favor crea un issue en GitHub.

📞 Soporte

Para soporte técnico o preguntas, puedes:

  • Crear un issue en GitHub
  • Revisar la documentación
  • Consultar los ejemplos incluidos

Desarrollado con ❤️ para la comunidad Odoo

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

managerodooapi-0.1.0.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

managerodooapi-0.1.0-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file managerodooapi-0.1.0.tar.gz.

File metadata

  • Download URL: managerodooapi-0.1.0.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.5

File hashes

Hashes for managerodooapi-0.1.0.tar.gz
Algorithm Hash digest
SHA256 22bdfc118d5f25dedd0e927d5359f49362557dbff373fe061c7119d2f4b45822
MD5 ac8060883672090d77dee1b870b55711
BLAKE2b-256 9c6b41dc29b9011b3a68132e03a68b665053e65e342967cfb28cb843e8a6474f

See more details on using hashes here.

File details

Details for the file managerodooapi-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: managerodooapi-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.5

File hashes

Hashes for managerodooapi-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c0deae3204657a8e44b7e0d2657b0fa919196923e25856b29999823f7adbde3c
MD5 8d846da8d6826652e6997d9306986d6e
BLAKE2b-256 990763599699f7ec97c58f5727a4a5d08dba64683504e544cffe6332fa30e138

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page