Resumen Ejecutivo
Se ha implementado una integración completa entre el sistema Miglop.es y Odoo para la gestión automatizada de facturas. Esta integración permite:
- Creación automática de facturas en Odoo cuando se procesan pagos en Stripe
- Sincronización de datos entre ambos sistemas
- Descarga de facturas PDF directamente desde Odoo
- Priorización de facturas de Odoo sobre las de Stripe en la interfaz de usuario
Arquitectura de la Integración
1. Librería Principal: app/Api/Odoo/
OdooClient (app/Api/Odoo/OdooClient.php)
Cliente principal que maneja la conexión con Odoo mediante XML-RPC y HTTP.
Características principales:
- Autenticación dual (XML-RPC y HTTP con cookies)
- Gestión de sesiones y cookies
- Métodos para ejecutar operaciones en Odoo
- Manejo de errores y excepciones
Métodos clave:
authenticate(): Autenticación XML-RPCauthenticateWithHttp(): Autenticación HTTP con cookiesexecute(): Ejecutar operaciones en OdoogetInvoicesByEmail(): Obtener facturas por email del clientedownloadInvoicePdf(): Descargar PDF de facturas
Servicios Especializados
InvoiceService (app/Api/Odoo/Services/InvoiceService.php)
- Gestión completa de facturas en Odoo
- Creación, actualización, consulta y eliminación
- Generación de PDFs
- Integración con datos de Stripe
PartnerService (app/Api/Odoo/Services/PartnerService.php)
- Gestión de clientes/proveedores
- Búsqueda por email, CIF, nombre
- Creación automática de clientes
ProductService (app/Api/Odoo/Services/ProductService.php)
- Gestión de productos
- Búsqueda y creación automática
- Mapeo con productos de Stripe
Modelo de Datos
Invoice (app/Api/Odoo/Models/Invoice.php)
- Modelo auxiliar para construir facturas
- Métodos fluidos para configuración
- Soporte para diferentes tipos de factura
2. Configuración
Archivo de Configuración (config/odoo.php)
return [
'odoo_url' => env('ODOO_URL'),
'odoo_database' => env('ODOO_DATABASE'),
'odoo_username' => env('ODOO_USERNAME'),
'odoo_apikey' => env('ODOO_APIKEY'),
'odoo_apipassword' => env('ODOO_APIPASSWORD'),
'odoo_id_tax' => 51
];
Variables de entorno requeridas:
ODOO_URL: URL de la instancia OdooODOO_DATABASE: Nombre de la base de datosODOO_USERNAME: Email del usuarioODOO_APIKEY: Clave API del usuarioODOO_APIPASSWORD: Contraseña del usuario
Funcionalidades Implementadas
1. Creación Automática de Facturas
Webhook de Stripe (StripeWebhookController::handlePushInvoiceToOdoo)
Flujo de trabajo:
- Trigger: Se ejecuta cuando Stripe procesa un pago exitoso
- Validación: Verifica que el sitio tenga un pagador con datos fiscales
- Gestión de Cliente: Busca o crea el cliente en Odoo usando el CIF
- Creación de Factura: Convierte los datos de Stripe a formato Odoo
- Publicación: La factura se crea y publica automáticamente
Datos procesados:
- Información del cliente (CIF, nombre, dirección)
- Detalles de la factura (fecha, importe, moneda)
- Líneas de factura (productos, cantidades, precios)
- Impuestos aplicables
Logging completo para auditoría y debugging.
2. Consulta de Facturas
Endpoint: getInvoicesByPagador
Funcionalidad:
- Obtiene facturas tanto de Stripe como de Odoo
- Prioriza las facturas de Odoo sobre las de Stripe
- Filtra facturas duplicadas (las de Odoo tienen prioridad)
- Genera enlaces de descarga para PDFs de Odoo
Lógica de priorización:
// Filtrar facturas de Stripe que ya existen en Odoo
$invoices = $invoices->whereNotIn('id', $odoo_invoices->pluck('stripe_id')->filter());
// Combinar ambas fuentes, priorizando Odoo
$invoices = $invoices->merge($odoo_invoices);
3. Descarga de Facturas PDF
Endpoint: /api/v1/glop/sitios/invoices/odoo/{id}
Funcionalidad:
- Descarga directa de PDFs desde Odoo
- Autenticación HTTP con cookies
- Headers apropiados para descarga de archivos
- Manejo de errores robusto
Implementación:
public function getInvoicesOdooPdf($invoiceid, OdooClient $odoo_client) {
$contentPdf = $odoo_client->downloadInvoicePdf($invoiceid, false);
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="invoice_' . $invoiceid . '.pdf"');
header('Content-Length: ' . strlen($contentPdf));
echo $contentPdf;
exit();
}
Flujo de Datos
1. Proceso de Creación de Factura

2. Proceso de Consulta de Facturas

Características Técnicas
1. Autenticación Dual
- XML-RPC: Para operaciones de datos
- HTTP con cookies: Para descarga de PDFs
2. Manejo de Errores
- Logging detallado en canal ‘dev’
- Excepciones específicas para cada tipo de error
- Rollback automático en caso de fallos
3. Codificación de Caracteres
- Conversión UTF-8 a ISO-8859-1 para compatibilidad
- Manejo correcto de caracteres especiales
4. Mapeo de Datos
- Conversión automática de formatos Stripe a Odoo
- Preservación de referencias entre sistemas
- Gestión de impuestos y monedas
Endpoints de la API
1. Consulta de Facturas
- URL:
GET /api/v1/glop/sitios/invoices - Parámetros:
start_date,end_date,descargar,tipo - Funcionalidad: Obtiene facturas combinadas de Stripe y Odoo
2. Descarga de PDF
- URL:
GET /api/v1/glop/sitios/invoices/odoo/{id} - Funcionalidad: Descarga PDF de factura específica de Odoo
Configuración Requerida
1. Variables de Entorno
ODOO_URL=https://tu-instancia.odoo.com ODOO_DATABASE=tu_base_datos ODOO_USERNAME=tu_email@empresa.com ODOO_APIKEY=tu_api_key ODOO_APIPASSWORD=tu_password
2. Permisos en Odoo
- Acceso a módulo de facturación
- Permisos de lectura/escritura en
account.move - Permisos de lectura/escritura en
res.partner - Permisos de lectura/escritura en
product.product
3. Configuración de Impuestos
- ID del impuesto configurado en
config/odoo.php - Impuestos activos en Odoo para el tipo de factura
Beneficios de la Integración
1. Automatización
- Eliminación de procesos manuales de facturación
- Sincronización automática entre sistemas
- Reducción de errores humanos
2. Consistencia de Datos
- Una sola fuente de verdad para facturas
- Sincronización en tiempo real
- Historial completo de transacciones
3. Mejora de la Experiencia de Usuario
- Acceso unificado a todas las facturas
- Descarga directa de PDFs
- Interfaz simplificada
4. Cumplimiento Fiscal
- Facturas oficiales generadas en Odoo
- Cumplimiento de normativas españolas
- Trazabilidad completa
No mostrar facturas en portal cliente Stripe

Desactivar Odoo
- Para desactivar odoo: comentar la función
StripeWebhookController::handlePushInvoiceToOdoo - Desactivar la búsqueda de Odoo
