Documentación Odoo App Backend

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-RPC
  • authenticateWithHttp(): Autenticación HTTP con cookies
  • execute(): Ejecutar operaciones en Odoo
  • getInvoicesByEmail(): Obtener facturas por email del cliente
  • downloadInvoicePdf(): 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 Odoo
  • ODOO_DATABASE: Nombre de la base de datos
  • ODOO_USERNAME: Email del usuario
  • ODOO_APIKEY: Clave API del usuario
  • ODOO_APIPASSWORD: Contraseña del usuario

Funcionalidades Implementadas

1. Creación Automática de Facturas

Webhook de Stripe (StripeWebhookController::handlePushInvoiceToOdoo)

Flujo de trabajo:

  1. Trigger: Se ejecuta cuando Stripe procesa un pago exitoso
  2. Validación: Verifica que el sitio tenga un pagador con datos fiscales
  3. Gestión de Cliente: Busca o crea el cliente en Odoo usando el CIF
  4. Creación de Factura: Convierte los datos de Stripe a formato Odoo
  5. 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

  1. Para desactivar odoo: comentar la función StripeWebhookController::handlePushInvoiceToOdoo
  2. Desactivar la búsqueda de Odoo
Volver arriba

Acceder a WikiGlop