TMS - Integracion con Odoo
Lo que conecta
Los datos operativos del TMS (rutas, costes, conductores) se sincronizan con los modulos de Odoo para tener trazabilidad completa.
Datos que fluyen
| Dato TMS | Modulo Odoo | Uso |
|---|---|---|
| Rutas diarias | project.task | Ordenes de trabajo |
| Costes por km | hr.expense | Gastos de flota |
| Horas conductor | hr.attendance | Parte de horas |
| Km vehiculo | fleet.vehicle.log | Mantenimiento flota |
Integracion via XML-RPC
python
import xmlrpc.client
import requests
ODOO_URL = "https://tu-odoo.com"
ODOO_DB = "prod"
ODOO_USER = "admin"
ODOO_PASS = "pass"
TMS_TOKEN = "tu_t...n
common = xmlrpc.client.ServerProxy(f"{ODOO_URL}/xmlrpc/2/common")
uid = common.authenticate(ODOO_DB, ODOO_USER, ODOO_PASS, {})
models = xmlrpc.client.ServerProxy(f"{ODOO_URL}/xmlrpc/2/object")
def crear_parte_ruta(origen, destino, conductor_id):
"""Crea un parte de trabajo en Odoo con datos del TMS."""
ruta = requests.get(
f"https://back.transcend.cargoffer.com/api/route?origin={origen}&destination={destino}",
headers={"Authorization": f"Bearer {TMS_TOKEN}"}
).json()
# Crear tarea en Odoo
task_id = models.execute_kw(ODOO_DB, uid, ODOO_PASS,
"project.task", "create", [{
"name": f"Ruta {origen} - {destino}",
"description": f"Distancia: {ruta.get('distance')} km\nDuracion: {ruta.get('duration')} min",
"user_ids": [(4, conductor_id)],
"planned_hours": ruta.get("duration", 0) / 60
}])
return task_idAutomatizacion nocturna
bash
# Cada noche a las 23:00
0 23 * * * python3 /scripts/tms_to_odoo.py