Historial de Versiones

🔧 Versión 2.1.8 (04-03-2026) - CORRECCIONES DE LICENCIA, DIAGNÓSTICO Y CRON

🔑 Licencia y validación
  • Validación de licencia por BDD: El endpoint antiguo ahora utiliza la base de datos centralizada — las licencias Shopify Billing son reconocidas correctamente
  • Diagnóstico alineado: El diagnóstico de licencia usa la misma lógica que la pestaña Licencia (prioridad shop_domain)
🐛 Correcciones
  • CRON de pedidos: Corregido crash con stdClass tratado como array + método setLoggerPrefix inexistente
  • Diagnóstico CRON: Ahora respeta la configuración real del módulo
  • OAuth: Aceptar nombres de dominio no-RFC con guión final
  • SQL: Patrón information_schema compatible con MySQL 5.7+ / MariaDB
  • Migración: Script de actualización idempotente (verifica existencia de tabla origen)

💳🏪 Versión 2.1.7 (29-01-2026) - SHOPIFY BILLING API + ARQUITECTURA DUAL-CHANNEL

💳 Shopify Billing API
  • Servidor central: Base de datos MySQL + API REST + Webhooks billing
    • 5 tablas SQL (licenses, subscriptions, billing_events, download_tokens, license_domains)
    • API billing completa (check, link-serial, status, generate-download-token)
    • Webhooks: app_subscriptions/update, app/uninstalled, billing_attempts
  • Interfaz admin web: Dashboard, gestión licencias, suscripciones, eventos, migración
  • App Shopify Embedded: Elección suscripción, callback pago, descarga ZIP segura
🔗 Arquitectura Dual-Channel
  • Nuevos clientes: Compra vía Shopify App Store (250€/año o 25€/mes)
  • Clientes DoliStore: Vincular serial existente para evitar doble pago
  • Expiración DoliStore: Invitación a renovar vía Shopify Billing
🐛 Correcciones de errores
  • Issue #233: Descuentos no aplicados a servicios durante importación pedidos
    • Fallback en discountAllocations para descuentos globales
    • Servicios personalizados ahora incluidos en cálculo de descuentos
📚 Documentación
  • Guía completa configuración Shopify Partner (300+ líneas)
  • 46 nuevas claves traducción × 5 idiomas

🔒🔄 Versión 2.1.6 (10-12-2025) - AUDITORÍA DE SEGURIDAD COMPLETA + IMPORTACIÓN SHOPIFY→DOLIBARR

🔴 Problemas CRÍTICOS corregidos (17/17 = 100%)
  • Tokens CSRF: Protección añadida en 15 archivos admin/ajax
  • XSS: Escape HTML completo con htmlspecialchars()
  • Clave API GDPR: Externalizada (ya no hardcoded)
  • SSL/TLS: Verificación SSL reactivada (6 ocurrencias)
  • Ataques Replay: Protección webhooks GDPR
  • Archivos Debug: Protegidos por SHOPIFY_DEBUG_MODE
🔵 Problemas IMPORTANTES corregidos (~90%)
  • Errores SQL: Mensajes genéricos (sin exposición técnica)
  • Transacciones: Añadidas en operaciones masivas
  • Índices SQL: 6 nuevos índices para rendimiento
  • Limpieza de código: -29 líneas de template no usadas
🟢 Nueva funcionalidad: Importación Shopify → Dolibarr
  • Nuevo CRON: ShopifyProductImportCron para importación automática
  • Sincronización bidireccional: Dolibarr↔Shopify completa

✨📋 Versión 2.1.5 (22-11-2025) - SOPORTE CAMPO EMPRESA + HISTORIAL DIRECCIONES + PAGINACIÓN METAFIELDS

🟢 CORRECCIÓN #1 - Soporte Completo del Campo "Empresa" (Nombre de la Empresa)
  • PROBLEMA: Campo "empresa" activado en Shopify pero no sincronizado con Dolibarr
  • SOLICITUD DEL CLIENTE: "He activado el campo de Shopify que permite obtener el nombre de la empresa, pero no se transmite"
  • IMPACTO: Clientes profesionales creados con nombre + apellido en lugar del nombre de empresa
✅ Solución Implementada
  • GraphQL: Campo company añadido en 3 direcciones (customer.defaultAddress, billingAddress, shippingAddress)
  • Lógica de prioridad: company si se proporciona, sino firstName + lastName (fallback)
  • Integración completa: Nombre del cliente, direcciones de facturación/envío, contactos (campo "cargo")
  • Archivos: shopifyapi.class.php (líneas 2589, 2608, 2621) + shopifyordermanager.class.php (líneas 760-769, 1219-1223, 1244-1248, 2027-2031)
🟢 CORRECCIÓN #2 - Paginación Metafields (Protección Pérdida Datos >250)
  • PROBLEMA: Límite GraphQL de 250 metafields sin paginación = pérdida silenciosa de datos más allá
  • RIESGO: Puntos de recogida (Boxtal, Mondial Relay, Atlas) en metafields >250 nunca recuperados
  • IMPACTO: Pedidos incompletos, información de envío faltante
✅ Solución Implementada
  • GraphQL pageInfo: Estructura hasNextPage + endCursor añadida en metafields
  • Nuevo método: getAllOrderMetafields() - paginación automática con cursor (92 líneas)
  • Integración inteligente: Detección automática ≥250 metafields → activación paginación
  • Seguridad: Límite de 100 páginas (máx. 25.000 metafields) para evitar bucles infinitos
  • Archivos: shopifyapi.class.php (líneas 2724-2906) + shopifyordermanager.class.php (líneas 1041-1063)
🟢 CORRECCIÓN #3 - 10 Columnas SQL Dedicadas para Puntos de Recogida
  • PROBLEMA: Datos de puntos de recogida almacenados en JSON monolítico → imposible consultar en SQL
  • LIMITACIÓN: No hay estadísticas, búsqueda o filtrado por transportista/ciudad/país posible
  • IMPACTO: Rendimiento degradado, reporting imposible
✅ Solución Implementada
  • 10 columnas SQL: pickup_provider, pickup_point_id, pickup_point_name, pickup_address_line1, pickup_address_line2, pickup_city, pickup_zip, pickup_country, pickup_phone, pickup_extra_data
  • Índice creado: pickup_point_id para búsquedas rápidas
  • Compatibilidad: JSON legacy preservado en pickup_extra_data para datos específicos del proveedor
  • Registro extrafields: Integración automática en llx_extrafields
  • Archivos: sql/update_2.1.4_2.1.5.sql (273 líneas) + shopifyordermanager.class.php (líneas 2360-2459)
🟠 MEJORA #4 - Monitoreo Límites GraphQL
  • OBJETIVO: Detectar automáticamente posibles truncamientos de datos GraphQL
  • MONITOREO: lineItems (≥40), shippingLines (≥5), discountApplications (≥10), transactions (≥5)
  • LOGS: Alertas automáticas a nivel LOG_WARNING si se alcanzan los límites
  • Archivo: shopifyordermanager.class.php (líneas 976-997)
🟣 ESTADÍSTICAS TÉCNICAS
  • Líneas código core: ~530 líneas (4 modificaciones GraphQL + 1 nuevo método + lógica company + paginación + monitoreo)
  • Líneas SQL: 273 líneas (10 columnas + extrafields + índices)
  • Líneas ChangeLog: 160 líneas documentación completa
  • Total: 963 líneas añadidas
  • Validación: 100% sintaxis validada + tests GraphQL superados
  • Commit: 4fc6ef2 en rama dev-v2.1.5-corrections
✅ Impacto en Clientes
  • Clientes profesionales: Nombre de empresa correctamente sincronizado
  • Historial de direcciones: Múltiples contactos preservados en ficha de cliente
  • Puntos de recogida: 100% datos recuperados incluso en pedidos complejos
  • Rendimiento: Consultas SQL nativas en puntos de recogida (100x más rápido)
  • Reporting: Estadísticas por transportista, ciudad, país ahora posibles

🛡️ Versión 2.1.2 (19-10-2025) - CORRECCIONES CRÍTICAS REGRESIÓN v2.1.0

🐛 ISSUE #144 - Migraciones SQL Idempotentes (CRÍTICO)
  • PROBLEMA: Pérdida total de mapeos Dolibarr-Shopify al reactivar el módulo
  • CAUSA: Scripts SQL destructivos (TRUNCATE, DROP) re-ejecutados en cada activación
  • IMPACTO CLIENTE: Resincronización manual completa requerida
✅ Solución Implementada
  • MigrationManager: Sistema inteligente de seguimiento de migraciones (clase de 310+ líneas)
  • Tabla llx_shopify_migration_history: Registro de migraciones ya aplicadas
  • Scripts SQL idempotentes: Reescritura de update_2.0.5_2.0.6.sql y update_2.0.22_2.0.23.sql
  • Transacciones atómicas: Commit/rollback con reintento automático
🐛 ISSUE #148 - Regresión v2.1.0: Condiciones Invertidas (CRÍTICO)
  • ERRORES: Precios, stocks e imágenes sincronizados A PESAR de opciones desactivadas
  • CAUSA: Condiciones empty() || == 1 SIEMPRE verdaderas
  • ARCHIVO: class/importproducts.class.php (6 condiciones corregidas)
✅ Solución Implementada
  • Corrección lógica: !empty() && == 1 para respetar configuración
  • Simplificación stock: -125 líneas de código, usando getProductStock()
  • Auditoría completa: 8 opciones verificadas y confirmadas correctas
⚡ ISSUE #141 - Sincronización CRON Separada (IMPORTANTE)
  • PROBLEMA: Importación histórica bloquea sincronización en tiempo real por días
  • IMPACTO: Pedidos recientes no importados durante importación histórica
✅ Solución Implementada
  • 2 CRONs independientes: ShopifyOrderSyncCron (15min) + ShopifyHistoricalImportCron (30min)
  • Modos forzados: 'normal' para sincronización en tiempo real, 'historical' para importación histórica
  • Interfaz admin: Activación/desactivación importación histórica con gestión automática de CRON
  • Paralelización: Ambos CRONs pueden ejecutarse simultáneamente
📊 ISSUE #147 - Estadísticas de Sincronización Coherentes
  • PROBLEMA: Estadísticas engañosas (variantes contadas dos veces en "no sincronizado" Y "ya sincronizado")
  • CONFUSIÓN: Imposible saber qué queda por sincronizar
✅ Solución Implementada
  • Consulta SQL reescrita: 9 nuevos contadores precisos (3 categorías × 3 tipos)
  • Vista reestructurada: Secciones separadas NO sincronizados / YA sincronizados / Fallos
  • Cero doble conteo: Cada producto/variante contado una sola vez
🔧 ISSUE #146 - Servicios en Purga de Productos
  • PROBLEMA: Servicios (fk_product_type = 1) no buscables en purga
  • LIMITACIÓN: Imposible purgar servicios del mapeo de Shopify
✅ Solución Implementada
  • Filtro tipo de producto: Desplegable "Productos / Servicios / Todos"
  • Insignias visuales: 📦 Producto / 🔧 Servicio en resultados
  • Backend AJAX: Soporte para parámetro product_type en búsqueda
🐛 ISSUE #149 - Bug Crítico Stocks GraphQL (CRÍTICO)
  • PROBLEMA: 100% de las sincronizaciones de stock fallaban silenciosamente
  • CAUSA: Incompatibilidad snake_case vs camelCase entre PHP y API GraphQL de Shopify
  • IMPACTO: Stocks nunca actualizados en Shopify a pesar de sincronización activada
✅ Solución Implementada
  • Conversión automática: snake_case → camelCase en ShopifyApi::inventorySetQuantities()
  • Mapeo de claves: inventory_item_id → inventoryItemId, location_id → locationId, available_adjustment → quantity
  • Archivo modificado: class/shopifyapi.class.php líneas 645-655
  • Tests: Validación completa con múltiples productos y variantes
🛠️ ISSUE #150 - Mejoras Diagnóstico del Sistema
  • PROBLEMA 1: Errores de diagnóstico falsos con prefijo 'llx_' hardcodeado
  • PROBLEMA 2: Email de soporte no mostrado en diagnóstico
  • PROBLEMA 3: Validación de soporte solo manual
✅ Soluciones Implementadas
  • Prefijo SQL dinámico: Uso de MAIN_DB_PREFIX en lugar de 'llx_' hardcodeado
  • Visualización de email: Email de soporte añadido en sección "Estado del soporte"
  • Auto-validación: Activación automática de validateSupportByEmail() si email configurado
  • Archivo modificado: admin/diagnostic.php líneas 413-540
🔧 ISSUE #152 - Auto-Desactivación CRON Cleanup (MAYOR)
  • PROBLEMA: CRON Cleanup nunca desactivaba el CRON de importación histórica a pesar de completarse
  • CAUSA: Inconsistencia arquitectónica - Cleanup usaba ConfigurationMigrator directamente (array) en lugar de ShopifyApi (objeto)
  • IMPACTO: CRON histórico permanecía activo innecesariamente después de completarse
✅ Solución Implementada
  • Arquitectura unificada: CRON Cleanup ahora usa ShopifyApi + getDolGlobalInt() como todos los demás CRONs
  • Consistencia arquitectónica: 5 CRONs siguen el mismo patrón
  • Archivos modificados: 2 (shopifyhistoricalimportcleanupcron.class.php, configurationMigrator.class.php)
📊 Estadísticas de Versión
  • Archivos creados: 3 (MigrationManager, ShopifyHistoricalImportCron, llx_shopify_migration_history.sql)
  • Archivos modificados: 15 (clases, admin, ajax, SQL, traducciones)
  • Líneas añadidas: ~1350 líneas
  • Traducciones: 173 claves (34 claves + 1 actualización × 5 idiomas)
  • Issues resueltos: 8 (#144, #148, #141, #147, #146, #149, #150, #152)

🛡️ Versión 2.1.1 (2025-10-08) - CORRECCIONES CRÍTICAS: Estabilidad CRON + Protección Imágenes

🐛 ERROR CRÍTICO #139 - Protección Imágenes Productos Simples
  • CLIENTE AFECTADO: Cheer Moda - Imágenes eliminadas permanentemente en productos simples
  • PATRÓN: Productos SIN variantes → Imágenes eliminadas aunque sync desactivado ❌
  • PATRÓN: Productos CON variantes → Funcionó correctamente ✅
  • CAUSA: Eliminación API Shopify ANTES de verificación completa del mapeo
✅ Soluciones Implementadas
  • LOGS DETALLADOS: Identificación tipo producto (SIMPLE vs CON VARIANTES)
  • VERIFICACIÓN MAPEO: Control ANTES de cualquier operación destructiva
  • PRE-CHECK IMÁGENES: Verificar imágenes Dolibarr disponibles antes de eliminar
  • MANEJO ERRORES: Retorno limpio sin Exception después de eliminación
🔴 ERROR CRÍTICO #140 - CRON Congelado + Importación Histórica Bloqueada
  • CLIENTE AFECTADO: Eau Exquise - Sin sincronización pedidos durante 10 días
  • SÍNTOMA 1: Estado CRON "En curso o no ejecutado" con salida vacía
  • SÍNTOMA 2: Importación histórica bloqueada al 37.7% (1990/5278 pedidos)
  • SÍNTOMA 3: 48+ errores SQL durante migración v2.1.0
  • SÍNTOMA 4: Timeout PHP 30s insuficiente para importación histórica
✅ Correcciones Implementadas

1️⃣ Auto-Detección CRON Congelado

  • Log obligatorio al inicio (entity + timeout PHP)
  • Detección automática CRON congelado (processing=1 > 1h)
  • Desbloqueo automático con advertencia
  • Código error -1 si configuración incompleta

2️⃣ Detección Bloqueo Importación Histórica

  • Comparación progreso entre ejecuciones CRON
  • Salto automático pedido problemático después de 3 intentos
  • Registro detallado del pedido bloqueante
  • STUCK_COUNTER para trazabilidad

3️⃣ Protección Timeout PHP

  • Aumento límite tiempo a 300s (5 minutos) al inicio
  • Cronómetro en bucle sincronización (max 120s)
  • Guardar punto reanudación si se alcanza timeout
  • Restauración límite tiempo original al final

4️⃣ Reparación Errores SQL Migración

  • Nuevo script SQL: sql/update_2.1.0_to_2.1.1.sql
  • Eliminación tabla obsoleta llx_shopify_dolibarr_storedetails
  • Limpieza índices duplicados en tablas sincronización
  • Verificación integridad tablas principales
🔴 ERROR CRÍTICO - Stock No Actualizado (Cliente Philippe)
  • CLIENTE AFECTADO: Philazerty - 100% de stocks no sincronizados con Shopify
  • SÍNTOMA: "Skipping inventory update - empty inventory_item_id"
  • CAUSA: Inconsistencia nomenclatura claves (camelCase vs snake_case) en array $inventoryQuantities
✅ Solución Implementada
  • ARMONIZACIÓN: Claves snake_case en creación array (inventory_item_id, location_id, available_adjustment)
  • RESULTADO: 100% de stocks ahora sincronizados correctamente
  • ARCHIVO: class/importproducts.class.php línea 2566-2571
🟠 ERROR IMPORTANTE - Colecciones Fuera del Árbol (Cliente Philippe)
  • CLIENTE AFECTADO: Philazerty - Colecciones creadas para TODAS las categorías productos
  • PROBLEMA: Si producto en categoría 359 Y "Videojuegos" (fuera árbol 359), se crean ambas colecciones
  • ESPERADO: Solo colecciones para categorías en árbol configurado (359)
✅ Solución Implementada
  • FILTRADO POST-RECUPERACIÓN: Verificar pertenencia árbol configurado antes de crear colección
  • NUEVA FUNCIÓN: isCategoryInTree() sube cadena padres hasta encontrar categoría configurada
  • LOGS DETALLADOS: Indicación categorías excluidas (fuera árbol configurado)
  • ARCHIVOS: class/importproducts.class.php líneas 5436-5456 + 6299-6358
🟠 ERROR IMPORTANTE - Servicios + Publicaciones (Issue #141)
  • PROBLEMA 1: Servicios (type=1) con stock rastreado en Shopify mientras servicios no deben tener stock
  • PROBLEMA 2: Productos sincronizados pero no publicados en canales de venta (Tienda Online, POS)
✅ Soluciones Implementadas
  • FIX SERVICIOS: tracked=false y requiresShipping=false para servicios (línea 2357-2364)
  • NUEVA FUNCIÓN: publishProductToConfiguredChannels() para publicación automática (línea 6225-6297)
  • REUTILIZACIÓN CONFIG: Usa configuración canales venta colecciones (DOLI2SHOP_COLLECTIONS_SALES_CHANNELS)
  • DEGRADACIÓN ELEGANTE: Funciona incluso sin scope write_publications
🎯 Impacto Total v2.1.1
  • CRON Robusto: Detección y desbloqueo automático
  • Importación Histórica Fiable: Saltar pedidos problemáticos
  • Protección Imágenes: Sin eliminación sin reemplazo
  • Protección Timeout: Sin bloqueo PHP en grandes volúmenes
  • Trazabilidad Completa: Logs detallados en cada paso
  • Migración Limpia: Reparación automática errores v2.1.0
  • Stocks Garantizados: 100% sincronizaciones stock funcionales
  • Colecciones Filtradas: Solo categorías árbol configurado
  • Servicios Correctos: Sin stock ni envío para servicios
  • Productos Visibles: Publicación automática canales venta
📊 Estadísticas Implementación
  • Archivos modificados: 6 archivos PHP + 1 SQL + ChangeLog
  • Líneas código añadidas: ~520 líneas
  • Issues resueltas: #139, #140, #141 + 2 errores cliente
  • Problemas corregidos: 9 errores críticos/mayores total

Issues GitHub resueltas: #139 (Imágenes), #140 (CRON), #141 (Servicios + Publicaciones) + 2 errores cliente Philippe (Stocks + Colecciones)

🚀 Versión 2.1.0 (2025-09-30) - EVOLUCIÓN MAYOR: UX MODERNA + CORRECCIONES CRÍTICAS

🎨 Interfaz Moderna con Toggles Nativos
  • REVOLUCIÓN UX: Reemplazo completo de casillas de verificación por toggles modernos
  • 19 TOGGLES: Implementados en 6 páginas de administración (setup, webhooks, import_orders, maintenance, support_config, orderstatusmapping)
  • ESTILO DOLIBARR: Consistencia visual perfecta con interfaz nativa (verde activado / gris desactivado)
  • ANIMACIÓN FLUIDA: Transición 0.3s con retroalimentación visual inmediata
  • 0 REGRESIÓN: JavaScript y lógica de negocio preservados
🐛 Corrección Crítica - SQL Extrafields + Consentimiento Marketing
  • PROBLEMA: Fallo sincronización pedidos con error SQL inválido UPDATE llx_societe_extrafields SET WHERE
  • SOLUCIÓN 1: Manejo de excepciones SQL para capturar errores de extrafields vacíos
  • SOLUCIÓN 2: Mapeo correcto al método nativo Dolibarr setNoEmail()
  • IMPACTO: CRON Orders ahora funciona para todos los clientes + Cumplimiento RGPD
🔴 Correcciones Regresiones v2.0.33-35
  • BUG #127 CRÍTICO: Imágenes eliminadas a pesar de sincronización desactivada (Protección absoluta añadida)
  • BUG #128 MAYOR: Stocks sincronizados a pesar de casilla desmarcada (Lógica corregida)
  • CLIENTES IMPACTADOS: Cheer Moda y potencialmente todos los clientes activos
🔧 Correcciones Urgentes Problemas Clientes
  • FIX CATEGORÍAS: Asignación categorías clientes no funcional (getDolGlobalInt → getDolGlobalString)
  • FIX STOCKS: Registro avanzado para sincronización stocks Shopify (solicitud/respuesta completas)
  • FIX UX: Menús desplegables categorías con selección vacía por defecto
  • ACTUALIZACIÓN API: Shopify 2025-01 → 2025-07 (correcciones errores inventario)
📅 Sistema Importación Histórica Fecha Dual
  • NUEVO: Soporte para importación histórica con fechas múltiples
  • ROBUSTEZ: Manejo avanzado de períodos largos (2+ años)
  • RENDIMIENTO: Tamaño de lote optimizado según volumen
🎯 Impacto Total Cliente v2.1.0
  • ✅ Interfaz profesional y moderna
  • ✅ Sincronización pedidos 100% confiable
  • ✅ Protección absoluta contra pérdida de datos
  • ✅ Respeto estricto de configuraciones usuario
  • ✅ Compatibilidad RGPD consentimiento marketing
  • ✅ Soporte extendido para grandes volúmenes

Issues GitHub resueltos: #125, #126, #127, #128, #130

🚨 Versión 2.0.35 (2025-09-22) - CORRECCIÓN CRÍTICA + NUEVAS FUNCIONALIDADES

🐛 Problemas Críticos Corregidos
  • BLOQUEO IMPORTACIÓN HISTÓRICA: Importación permaneciendo perpetuamente en modo histórico
  • LÍMITE ARBITRARIO: Restricción de 1000 pedidos impidiendo importar 2+ años de historial
  • PEDIDOS FALTANTES: Pedidos después de fecha final configurada nunca recuperados
  • VISIBILIDAD CERO: Ninguna indicación del progreso real
💡 Solución Revolucionaria: Conteo GraphQL Inteligente
  • CÁLCULO EXACTO: Nuevo método getOrdersCount() vía GraphQL
  • PROGRESO VISIBLE: Logs detallados "X / Y pedidos (Z%)"
  • DETECCIÓN PRECISA: Triple verificación para finalización automática de importación
  • RENDIMIENTO: Tamaño de lote adaptativo según volumen a procesar
🔧 Mejoras Técnicas
  • CONSTANTES DOLIBARR: Almacenamiento de progreso con dolibarr_set_const()
  • RESISTENCIA A ERRORES: Manejo robusto de timeouts e interrupciones
  • LOGS ENRIQUECIDOS: Mensajes detallados para diagnóstico y monitoreo
  • COMPATIBILIDAD: Funciona con 10 o 100000+ pedidos
📊 Impacto Cliente
  • URGENCIA CRÍTICA: Instalación inmediata para clientes con importación bloqueada
  • RECUPERACIÓN TOTAL: Todos los pedidos faltantes importados automáticamente
  • FINALIZACIÓN AUTO: Cambio automático a modo normal después de importación completa
  • SOPORTE PRIORITARIO: Asistencia reforzada para esta corrección crítica

🏷️ Categorización Automática de Clientes Shopify

  • NUEVO: Configuración "Categoría de Clientes Shopify" en la pestaña Settings
  • NUEVO: Asignación automática de categoría Dolibarr a clientes creados desde Shopify
  • NUEVO: Método assignCustomerToCategory() con gestión de duplicados
  • MEJORADO: Traducciones completas en 5 idiomas (FR, EN, DE, ES, IT)
  • USO: Facilita identificación y gestión de clientes Shopify en Dolibarr

🔧 Correcciones de Interfaz de Búsqueda

  • CORREGIDO: Campo de búsqueda en pestaña Mantenimiento no funcionaba en Dolibarr 20
  • CORREGIDO: Problema con búsqueda de productos por números en interfaz Mantenimiento
  • MEJORADO: Comportamiento unificado entre pestañas Sincronización Manual y Mantenimiento
  • MEJORADO: Búsqueda permitida incluso sin categoría de productos configurada

🚀 Mejoras en Gestión de Títulos de Productos

  • CORREGIDO: Error "Title must be specified" durante sync con descripciones deshabilitadas
  • NUEVO: Método getProductTitle() para recuperar títulos desde Shopify
  • MEJORADO: Lógica inteligente preservando títulos modificados en Shopify
  • MEJORADO: Respeto por elecciones de sincronización bidireccional
🎯 Impacto Total del Cliente v2.0.35
  • ✅ Importación histórica funcional para todos los volúmenes de pedidos
  • ✅ Mejor organización de clientes con categorización automática
  • ✅ Interfaz de búsqueda unificada y funcional
  • ✅ Sincronización respetando modificaciones de Shopify
  • ✅ Compatibilidad extendida Dolibarr 18-22

Issues GitHub resueltas: #123 (v2.0.35) y #124 (v3.0.0)

🔐 Versión 2.0.34 (2025-09-20) - SISTEMA DE SOPORTE AVANZADO

🌐 NUEVO: Reestructuración Completa del Sitio Web (20/09/2025)
  • ORGANIZACIÓN OPTIMIZADA: Rediseño de la arquitectura de la página principal para clarificar la oferta v2.0.34 vs v3.0.0
  • MULTILINGÜE: Reestructuración aplicada a los 5 idiomas (FR, EN, DE, ES, IT)
  • EXPERIENCIA DEL CLIENTE: Sección hero problema/solución con CTAs de compra optimizados
  • TRANSPARENCIA: Secciones distintas "v2.0.34 AHORA" y "v3.0.0 PRONTO"
  • ADVERTENCIAS: Limitaciones v2.0.34 claramente mostradas (no bidireccional, no tiempo real)
  • NAVEGACIÓN: Enlaces a changelog y roadmap añadidos para mejor orientación
  • PRECIOS: Precios clarificados 250€ HT v2.0.34 vs 350-400€ HT v3.0.0
  • TEXTO DOLISTORE: Nuevo texto de marketing corregido creado
🔐 NUEVO: Sistema de Soporte Revolucionario
  • INNOVACIÓN: Plataforma completa de gestión de licencias con interfaz web intuitiva
  • SEGURIDAD: Sistema de validación avanzado con seguimiento de uso de dominios
  • FLEXIBILIDAD: Soporte para licencias estándar, de por vida y de desarrollador
  • AUTOMATIZACIÓN: Generación automática desde CSV + creación manual
🚀 Características Principales
  • Interfaz Web Moderna: website/support_manager.php - Dashboard completo de gestión
  • API Robusta: website/api/validate_support.php - Validación en tiempo real
  • Configuración Segura: Externalización de contraseñas (no más hardcoding)
  • Paginación Inteligente: Visualización optimizada para grandes bases de datos
  • Gestión de Dominios: Seguimiento automático + autorización manual
📊 Tipos de Licencias Soportados
  • 🔵 Estándar: 1 año, 1 dominio de producción + dev/staging
  • 🟡 De por Vida (bajo petición): Ilimitada, 1 dominio de producción + dev/staging
  • 🟢 Desarrollador: Ilimitada, solo entornos dev/staging
🛡️ Sistema de Seguridad Avanzado
  • Validación Estricta: Solo 1 licencia por dominio de producción
  • Auto-Detección: Entornos de desarrollo autorizados automáticamente
  • Seguimiento Completo: Historial de accesos con IP, User-Agent, frecuencia
  • Violaciones: Detección y alertas en tiempo real de uso múltiple
  • Dominios Autorizados: Gestión manual + autorización automática dev
🎯 Compatibilidad Extendida Dolibarr
  • COMPATIBILIDAD: Soporte extendido a Dolibarr 18.0+ (anteriormente 19+)
  • SOLICITUD CLIENTE: Solicitud F3DF para compatibilidad Dolibarr 18.0.4 resuelta
  • SOLUCIÓN: Capa de compatibilidad integral para versiones anteriores Dolibarr

🚨 Versión 2.0.33 (2025-09-16) - CORRECCIÓN CRÍTICA SINCRONIZACIÓN IMÁGENES

🚨 Corrección Crítica: Imágenes Sincronizadas
  • PROBLEMA RESUELTO: Imágenes no sincronizadas cuando "El producto no necesita actualización"
  • CAUSA IDENTIFICADA: Función syncProduct() devolvía false → imágenes nunca procesadas
  • SOLUCIÓN TÉCNICA: Modificación class/importproducts.class.php:915 - return true para procesamiento imágenes
  • IMPACTO: Imágenes sincronizadas incluso si datos producto ya actualizados
✅ Beneficios Inmediatos
  • Sincronización garantizada: Imágenes siempre procesadas si sync_product_images activado
  • Compatibilidad total: Sync manual Y automática corregidas
  • Flujo preservado: Sin cambios en comportamiento usuario
  • Rendimiento mantenido: Imágenes procesadas solo si configurado
🔐 Mejora 2: Gestión de Permisos Shopify para fileCreate
  • NUEVOS SCOPES: Agregados `write_files`, `write_themes`, `write_images` a permisos requeridos
  • LÓGICA CONDICIONAL: Scopes se vuelven obligatorios cuando colecciones o imágenes de productos están activadas
  • DIAGNÓSTICO AUTOMÁTICO: Detección y visualización de permisos de archivos faltantes
  • MULTILINGÜE: Traducciones completas en 5 idiomas para nuevas etiquetas de permisos
  • MEJORA UI: Derechos opcionales faltantes ahora se muestran en naranja en lugar de rojo
  • RESULTADO: Resuelve error "Access denied for fileCreate" al subir imágenes de colecciones/productos
  • UBICACIÓN: class/shopifyapi.class.php:191-212 + class/shopifyrightsChecker.class.php:295
🧠 Ventajas v2.0.32 Preservadas
  • Lógica avanzada: 3 modos automáticos (INVENTORY_ONLY, VARIANTS_ONLY, PRODUCT_UPDATE)
  • Correcciones críticas: API localhost + Colecciones "deleted" mantenidas
  • Resoluciones clientes: ALTAIRIS + PHILIPPE conservadas

🧠 Version 2.0.32 (2025-09-15) - LÓGICA AVANZADA CORRECCIONES

🧠 NUEVO: Sistema inteligente de sincronización
  • 3 modos automáticos: INVENTORY_ONLY, VARIANTS_ONLY, PRODUCT_UPDATE
  • Fix localhost: Problemas API 404 resueltos
  • Fix colecciones: Bug "deleted" corregido

🚨 Versión 2.0.31 (2025-09-09) - CORRECCIÓN CRÍTICA GENERACIÓN CÓDIGOS CLIENTE

🚨 Corrección Crítica de Producción
  • Issue #91 - CRÍTICO: Corregido error "ErrorCustomerCodeRequired" que bloqueaba sincronización de pedidos
  • CAUSA RAÍZ IDENTIFICADA: Código fijo `$soc->code_client = -1` incompatible con `mod_codeclient_leopard`
  • SOLUCIÓN: Implementada generación adaptativa de códigos cliente basada en detección modelo Dolibarr
  • NUEVO: Método `setClientCode()` con estrategias inteligentes específicas por modelo
  • Issue #92: Sistema inteligente de generación de códigos cliente
🛠️ Implementación Técnica
  • LÓGICA ADAPTATIVA: Estrategias diferentes por modelo (leopard=directo, monkey/elephant=auto+fallback)
  • SISTEMA FALLBACK: Triple seguridad (auto → ID Shopify → timestamp) garantiza 100% éxito
  • TRAZABILIDAD PERFECTA: Prefijo "SH" identifica claramente clientes Shopify
  • LOGGING COMPLETO: Detección modelo y generación códigos completamente trazada
🧪 Aseguramiento de Calidad
  • PRUEBAS UNITARIAS: 5 escenarios cubren todos modelos Dolibarr y casos límite
  • DOCUMENTACIÓN: Guía técnica completa para resolución problemas y configuración
  • COBERTURA MODELOS: leopard, monkey, elephant, vacío y modelos personalizados soportados
🎯 Impacto en Producción
  • Cero fallos: ErrorCustomerCodeRequired completamente eliminado
  • Compatibilidad universal: Funciona con cualquier configuración Dolibarr
  • Soporte mejorado: Logs claros y códigos cliente trazables para debugging

🚨 Versión 2.0.30 (2025-09-09) - CORRECCIONES CRÍTICAS SINCRONIZACIÓN PEDIDOS

🚨 Correcciones Críticas de Producción
  • Issue #86 - CRÍTICO: Corregido crash "Failed to fetch company" en entornos de producción
  • CAUSA RAÍZ: Método createOrUpdateCustomer() devolvía tipos mixtos (-1 o objeto Societe)
  • CORRECCIÓN: Añadida validación estricta de tipos antes de acceder a propiedades del cliente
  • Issue #87: Sistema de logs completo para depuración en producción
  • Issue #88: Verificación automática de permisos de usuario CRON
  • Issue #90: Manejo de errores mejorado en gestión de clientes
🔧 Mejoras del Código
  • Seguridad de Tipos: Validación estricta de objeto e ID para todas las operaciones de cliente
  • Contexto de Error: Mensajes de error mejorados con email, entidad y detalles de operación
  • Seguridad Transaccional: Manejo mejorado de transacciones de base de datos con rollback adecuado
  • Estándares de Logs: Niveles de log estandarizados (DEBUG, INFO, WARNING, ERR)
🎯 Impacto al Cliente
  • INMEDIATO: Resuelve crashes "Failed to fetch company" en producción
  • FIABILIDAD: Manejo de errores mejorado previene interrupciones de sincronización
  • SOPORTE: Logs detallados facilitan resolución rápida de problemas
  • MONITOREO: Verificación de permisos CRON previene fallos de autorización silenciosos

🐛 Versión 2.0.29 (2025-09-05) - CORRECCIONES CRÍTICAS MULTI-ENTIDAD

🚨 Correcciones Críticas
  • Issue #83 - CRÍTICO: Corregido error "Failed to fetch company" en entornos multi-entidad
  • Issue #84: Versión dinámica en exportación de diagnósticos JSON
✨ Mejoras
  • Multi-Entidad: Búsqueda de clientes ahora filtrada correctamente por entidad
  • Diagnósticos: Versión recuperada automáticamente del módulo

🐛 Versión 2.0.28 (2025-09-04) - CORRECCIONES CRÍTICAS SINCRONIZACIÓN

🚨 Correcciones críticas
  • BUG CRÍTICO #80: Pedidos que se vuelven "pagados" después de la creación no sincronizados
  • SOLUCIÓN: Uso de updated_at_min en lugar de created_at_min
  • VENTANA DE SEGURIDAD: Adición automática de ventana de 24h para capturar pedidos perdidos
  • BUG CRÍTICO #81: Error getDolGlobalBool() en Dolibarr v19-20
  • POLYFILL: Función de compatibilidad automática para versiones anteriores a v21
✨ Mejoras diagnósticas
  • EXPORTACIÓN JSON: Diagnóstico completo exportable para soporte técnico (47 verificaciones + 39 parámetros)
  • INTERFAZ MEJORADA: Clases CSS para estado conexión Shopify con colores visuales
  • CONFIGURACIÓN SEGURA: Exportación con enmascaramiento automático de claves sensibles (claves API, tokens)
  • CORRECCIÓN TIMING: Exportación JSON después de construcción completa del informe
📝 Documentación soporte
  • EMAILS TÉCNICOS: Plantillas para soporte cliente con explicaciones detalladas
  • SOLUCIONES: Documentación de bugs y soluciones para casos similares
🔄 Compatibilidad universal
  • DOLIBARR v19: Compatibilidad completa con polyfill
  • DOLIBARR v20: Compatibilidad completa con polyfill
  • DOLIBARR v21+: Función nativa utilizada

🎯 Versión crítica: Instalación fuertemente recomendada para todos los usuarios, particularmente si usa Dolibarr v19-20 o encuentra problemas de sincronización de pedidos.

🔧 Versión 2.0.27 (2024-12-26) - MIGRACIÓN CONFIGURACIÓN

🔧 Migración Configuración (Issue #73)
  • NUEVO: Migración automática de tabla personalizada a constantes Dolibarr estándar
  • NUEVO: Clase ConfigurationMigrator para 42 parámetros de configuración
  • NUEVO: Compatibilidad con entidades múltiples Dolibarr
  • MEJORADO: Sistema de respaldo automático si falla migración
🐛 Correcciones Críticas
  • CORREGIDO: Issue #72 - Errores API silenciosos en sincronización imágenes
  • CORREGIDO: Logs HTTP detallados para mejor diagnóstico problemas API
  • CORREGIDO: Issue #74 - Verificador permisos con 15 comprobaciones Dolibarr
⚙️ Técnico
  • NUEVO: Sistema diagnóstico permisos usuarios Dolibarr
  • NUEVO: Contador configuración migrada (X/42 parámetros)
  • MEJORADO: Script SQL migración 2.0.26 → 2.0.27

🐛 Correcciones Críticas (2025-08-29)

🐛 Correcciones Críticas (2025-08-29)
  • CORRECCIÓN CRÍTICA: ConfigurationMigrator mostraba falsamente "30/42 parámetros migrados"
  • CORRECCIÓN CRÍTICA: La migración ahora maneja correctamente los valores `0` (excluidos por la condición `!empty()` anterior)
  • CORRECCIÓN CRÍTICA: Agregadas traducciones faltantes para la interfaz UserRightsCheck (5 idiomas)
  • CORRECCIÓN: Las casillas de sincronización de productos ahora se muestran correctamente basadas en constantes migradas
  • CORRECCIÓN: Las estadísticas de migración ahora cuentan con precisión solo los 42 parámetros mapeados
  • CORRECCIÓN: Opciones de sincronización de productos (precios, descripciones, imágenes, stocks, atributos) correctamente migradas
🚀 Mejoras Interfaz (2025-08-29)
🔍 Diagnóstico de Permisos de Usuario (2025-08-29)
🚀 Mejoras de la Interfaz de Diagnóstico (2025-08-29)

🚨 Versión 2.0.25 (2025-08-04) - HOTFIX CRÍTICO

🔧 Correcciones críticas
  • BUG CRÍTICO: Corrección primera sincronización que no recupera pedidos recientes cuando no existe sync previa
  • CAUSA RAÍZ: Cuando MAX(tms) devuelve NULL (tabla vacía), no se aplicaba filtro de fecha a consulta GraphQL, haciendo que Shopify devuelva pedidos más antiguos en lugar de recientes
  • SOLUCIÓN: Implementación de fallback inteligente usando fecha de instalación del módulo cuando no existe sync previa
  • NUEVO MÉTODO: SqlUtils::getModuleInstallationDate() con lógica de fallback jerárquica:
    • Prioridad 1: Fecha de activación de módulo desde tabla llx_const
    • Prioridad 2: Fecha de creación de tabla desde information_schema
    • Prioridad 3: Fecha de primera configuración desde detalles de tienda
    • Prioridad 4: Fallback por defecto (6 meses atrás)
  • MEJORADO: ShopifyOrderManager::getLastSuccessfulSync() ahora garantiza fecha de referencia válida para todas las sincronizaciones
📈 Impacto
  • CORRIGE: Clientes en v2.0.23/2.0.24 experimentando "ningún pedido sincronizado" en instalaciones nuevas
  • ASEGURA: Primera sincronización recupera correctamente pedidos recientes desde instalación del módulo
  • MANTIENE: Compatibilidad completa hacia atrás con sincronizaciones existentes

🚀 Versión 2.0.24 (2025-01-08) - IMPORTACIÓN HISTÓRICA Y AUTO-ACTIVACIÓN

🆕 Nuevas funcionalidades
  • Issue #60: Funcionalidad de importación histórica de pedidos integrada en sistema CRON
  • Issue #60: Activación automática de CRON cuando las configuraciones de productos y pedidos están completas
  • NUEVO: Gestión inteligente de CRON con verificaciones de completitud de configuración
  • NUEVO: Importación histórica de pedidos vía ShopifyOrderSyncCron con creación automática de clientes
  • NUEVO: Auto-desactivación de CRONs cuando la configuración está incompleta para prevenir errores de API
🔧 Correcciones críticas
  • Issue #61: Corregida sincronización manual mostrando productos pero incapaz de sincronizarlos (caso S001)
  • Issue #62: Corregidos servicios siendo sincronizados como productos físicos en lugar de servicios
  • CRÍTICO: Corregida inconsistencia en manejo de parámetros entre interfaces search y sync
  • CRÍTICO: Corregida detección de tipo de servicio - servicios ahora establecen correctamente requiresShipping: false en Shopify
⚡ Mejoras
  • MEJORADO: Manejo unificado de parámetros usando GETPOST('search_ref', 'aZ09') para preservar ceros iniciales en SKUs
  • MEJORADO: Diferenciación adecuada servicio vs producto en sincronización Shopify (detección fk_product_type)
  • MEJORADO: Tareas CRON deshabilitadas por defecto en instalación para prevenir llamadas API prematuras
  • MEJORADO: Validación de configuración antes de ejecución CRON en ImportProductsCron y ShopifyOrderSyncCron
  • SIMPLIFICADO: Eliminada interfaz import_orders separada - funcionalidad integrada en sistema CRON
  • MULTILINGÜE: Agregadas traducciones para nuevas características en 5 idiomas (FR/EN/DE/ES/IT)
🏗️ Mejoras técnicas
  • ARQUITECTURA: Importación histórica de pedidos integrada en flujo CRON existente
  • CONFIABILIDAD: Agregadas verificaciones de completitud de configuración antes de ejecución CRON
  • USABILIDAD: Mensajes automáticos de retroalimentación de activación CRON para usuarios
  • MANTENIMIENTO: Eliminado archivo de interfaz import_orders.php redundante

🏗️ Versión 2.0.23 - Sesión 15 (2025-05-31) - UNIFICACIÓN GESTIÓN TABLA SINCRONIZACIÓN

🔧 Refactorización Crítica
  • CRÍTICO: Unificación de funciones de gestión de tabla para llx_dolibarr_shopify_products_save
  • CRÍTICO: Creación de función única manageProductMapping() reemplazando tres funciones separadas (releaseSyncLock, saveProductMapping, updateProductTimestamp)
  • CRÍTICO: Corrección de lógica TMS timestamp - ahora solo actualiza en estado 'success' como solicitado
  • CRÍTICO: Resolución de comportamiento inconsistente entre modos de sincronización manual y automático
✨ Mejoras
  • MEJORADO: Lógica única y consistente para todas las operaciones de tabla elimina diferencias comportamentales
  • MEJORADO: Inicialización TMS adecuada para nuevos registros - usa valor por defecto de tabla (CURRENT_TIMESTAMP) salvo si estado es 'success'
  • MEJORADO: Manejo de errores y logging mejorados en función unificada
  • MEJORADO: Mejor mantenibilidad del código con reducción de duplicación y enfoque unificado
🏗️ Arquitectura Técnica
  • ARQUITECTURA: manageProductMapping() maneja creación, actualizaciones, gestión de estados y lógica TMS
  • ARQUITECTURA: releaseSyncLock() ahora usa función unificada con parámetro releaseLock=true
  • ARQUITECTURA: saveProductMapping() ahora usa función unificada con estado 'pending'
  • ARQUITECTURA: updateProductTimestamp() ahora usa función unificada con estado 'success'
  • RENDIMIENTO: Operaciones de base de datos optimizadas con lógica UPDATE/INSERT inteligente
🐛 Correcciones
  • CRÍTICO: Corrección de problemas potenciales de TMS NULL durante creación de registros
  • CRÍTICO: Eliminación de gestión inconsistente de tabla causando diferencias de comportamiento de sync
  • CRÍTICO: Corrección de lógica de actualización TMS para activarse solo en sincronizaciones exitosas

🚨 Versión 2.0.23 - Sesión 14 (2025-05-31) - CORRECCIÓN ESTADO PRODUCTOS SIMPLES

🐛 Correcciones críticas
  • CRÍTICO: Corrección de productos simples que permanecían en estado 'pending' después de sincronización exitosa
  • CRÍTICO: Corrección de lógica de salida temprana en checkProductNeedsUpdate() para marcar estado como 'skipped' cuando productos no necesitan actualizaciones pero sync fue exitoso
  • CRÍTICO: Resolución del problema donde productos como "PullColMontantTorsade202004" permanecían en estado pending indefinidamente
🆕 Nuevas funcionalidades
  • NUEVO: Añadido estado 'skipped' al enum last_sync_status para productos que no necesitan actualizaciones
  • NUEVO: Distinción mejorada de estados: 'success' (actualizado), 'skipped' (no necesita actualización), 'failed' (error), 'pending' (en progreso)
✨ Mejoras
  • MEJORADO: Gestión mejorada de estados de sincronización - productos que no necesitan actualizaciones ahora se marcan correctamente como 'skipped' en lugar de preservar 'pending'
  • MEJORADO: Mejor distinción entre productos que fallaron sync vs productos que fueron procesados exitosamente pero no necesitaban cambios
  • MEJORADO: Esquema de base de datos actualizado para soportar estado 'skipped' en enum

🚨 Versión 2.0.23 - Sesión 13 (2025-05-31) - CORRECCIÓN CRÍTICA FK_PRODUCT_PARENT

🐛 Correcciones críticas
  • CRÍTICO: Corrección problema fk_product_parent NULL durante sincronización manual de variantes
  • CRÍTICO: Corrección llamadas saveProductMapping() para variantes para incluir ID producto padre
  • CRÍTICO: Resolución variantes creadas con fk_product_parent=NULL en lugar de ID padre correcto
  • CRÍTICO: Mejora método mapVariantsToShopify() para manejar correctamente relaciones padre-variante

🏗️ Versión 2.0.23 - Sesión 12 (2025-05-31) - ISSUE #56 ARQUITECTURA PADRE-VARIANTE

🚀 Nuevas funcionalidades
  • ISSUE #56: Añadida columna fk_product_parent para mejorar relaciones padre-variante
  • NUEVO: Esquema de base de datos mejorado con seguimiento de relaciones padre-variante
  • NUEVO: Restricciones de clave foránea para integridad de datos entre productos padre y variante
  • NUEVO: Migración automática de datos para poblar relaciones padre-variante existentes
✨ Mejoras
  • MEJORADO: Método saveProductMapping() ahora soporta parámetro fk_product_parent para variantes
  • MEJORADO: Método releaseSyncLock() actualizado para trabajar con nueva arquitectura padre-variante
  • MEJORADO: Consultas de base de datos optimizadas para distinguir entre productos padre y variantes
  • MEJORADO: Script de creación de tabla SQL actualizado con nueva columna y restricciones

🔄 Version 2.0.23 - Session 7 (2025-05-30) - CORRECCIONES DE RETRY Y ESTADÍSTICAS

🐛 Correcciones críticas
  • CRÍTICO: Corregidos IDs TEMP_LOCK tratados incorrectamente como actualizaciones de Shopify causando fallos de retry
  • CRÍTICO: Armonización de estados de sincronización entre 'failed' y 'error' para visualización consistente de estadísticas
  • Corregida interfaz de estadísticas que no contaba fallos de sincronización debido a inconsistencia de estados
  • Mejorada lógica de mapeo de productos para filtrar IDs de bloqueo temporales
✨ Mejoras
  • NUEVO: Filtrado inteligente de IDs de bloqueo temporales para evitar llamadas API de Shopify inválidas
  • NUEVO: Terminología armonizada de estados de sincronización en toda la base de código e interfaz
  • Mejorada precisión de reportes de error en el panel de administración
  • Mejor distinción entre productos nuevos y actualizaciones reales

🚨 Version 2.0.23 - Session 6 (2025-05-30) - CORRECCIONES DE SINCRONIZACIÓN

🐛 Correcciones críticas
  • CRÍTICO: Corrección del mecanismo de bloqueo de sincronización para evitar violaciones de restricción NOT NULL
  • CRÍTICO: Corrección de la protección contra sincronizaciones concurrentes con IDs de bloqueo temporales
  • CRÍTICO: Corrección de consultas UPDATE imprecisas que afectaban múltiples registros de variantes
  • Corrección del fallo de sincronización para productos nuevos debido a IDs de Shopify vacíos
  • Mejora de la precisión de updateProductTimestamp() agregando shopifyVariantId a la cláusula WHERE
⚡ Mejoras
  • NUEVO: Sistema de bloqueo temporal inteligente usando formato único TEMP_LOCK_[timestamp]_[productId]
  • NUEVO: Protección mejorada contra sincronizaciones concurrentes para sincronizaciones manuales y automáticas (cron)
  • NUEVO: Precisión mejorada del mapeo de variantes para evitar contaminación cruzada entre variantes
  • Mejor manejo de errores y registro para operaciones de bloqueo de sincronización
  • Análisis completo y corrección del manejo de relaciones producto-variante

🚨 Version 2.0.23 - Session 5 (2025-05-30) - CORRECCIONES CRÍTICAS

🐛 Correcciones críticas
  • CRÍTICO: Corregida sincronización manual que no funcionaba - parámetro isManualSync=true faltante
  • CRÍTICO: Corregido setSyncLock() que creaba IDs de cadena vacía en lugar de valores NULL en base de datos
  • Error: Corregido mensaje "No hay productos para sincronizar" que bloqueaba la sincronización manual
  • Error: Eliminada contaminación de base de datos con IDs de Shopify inválidos
⚡ Nuevas funcionalidades
  • NUEVO: Seguimiento de fallos de sincronización con campos last_sync_status y last_sync_error
  • NUEVO: Visualización de estadísticas de fallos en interfaz de administración con alertas visuales
  • NUEVO: Gestión mejorada de bloqueos de sincronización con seguimiento de estado ('success', 'error', 'skipped', 'pending')
  • Mejora: Esquema de base de datos con limpieza automática de registros inválidos
  • Mejora: Mensajes de error completos para sincronizaciones fallidas

🔧 Version 2.0.23 - Session 4 (2025-05-30) - OPTIMIZACIÓN DEL CÓDIGO

⚡ Mejoras principales
  • Factorización del código: Creación del método getProductVariants() para eliminar la duplicación de código entre importProducts() e importProductsManual()
  • Manejo de transacciones: Gestión transaccional completa añadida con begin...commit/rollback en importProductsManual()
  • Mantenibilidad: Unificación de la lógica de procesamiento de variantes entre sincronización automática y manual
  • Logs mejorados: Logs detallados añadidos para seguimiento de transacciones y monitoreo de errores
🔧 Correcciones críticas
  • Variable indefinida: Corregido bug crítico donde $product estaba indefinido en importProductsManual()
  • Contador de sincronización: Corregida lógica faltante para incrementar $numSynced
  • Manejo de errores: Mejorado el manejo de errores con rollback automático
Impacto técnico: Esta actualización mejora significativamente la robustez y mantenibilidad del código de sincronización, con una reducción de más de 30 líneas de código duplicado.

✅ Version 2.0.23 - Session 3 (2025-05-27) - FINALIZACIÓN

🔧 Correcciones finales
  • SKUs numéricos: Corregida búsqueda de SKUs puramente numéricos (ej. 00667) en interfaz manual (Issue #51)
  • Sincronización no deseada: Corregida sincronización de productos sin tags/categorías (Issue #52)
  • Corregido GETPOST('term', 'alphanohtml') corrompiendo SKUs numéricos en ajax/search_products.php
  • Añadida lógica de búsqueda especializada para SKUs numéricos con múltiples enfoques
  • Implementado filtrado obligatorio por categorías en la sincronización
🆕 Nueva funcionalidad principal
  • Interfaz de vista previa de categorías: Vista previa completa antes de sincronización manual (Issue #50)
  • Sistema completo de análisis de categorías y vista previa de sincronización
  • Interfaz mejorada con detalles de categorías, barras de progreso y estadísticas de resumen
  • Análisis en tiempo real vía endpoint AJAX ajax/preview_sync.php
  • Soporte completo para traducciones francesas de la funcionalidad de vista previa

Version 2.0.23 - Mayo 2025

🔧 Refactorización
  • Limpieza de código: Eliminados métodos de sincronización obsoletos después de la unificación
  • Eliminado método deprecado synchronizeProductsToShopify() (239 líneas)
  • Eliminados métodos no utilizados syncProductWithVariants() y syncProductAsVariant()
  • Eliminado método helper redundante getShopifyProductId()
  • Simplificación del código base eliminando lógica de sincronización duplicada
  • Unificación de toda la sincronización para usar el método probado importProductsManual()
🐛 Correcciones críticas
  • CRITIQUE: Correction de la duplication infinie des produits et variants lors de la synchronisation (Issue #42)
  • Correction du double nettoyage des IDs dans la méthode updateProductTimestamp() causant l'échec de recherche dans la table de mapping
  • Suppression des transactions imbriquées dans updateProductTimestamp() empêchant la mise à jour correcte des enregistrements
  • Correction de la cohérence du format des IDs entre les IDs Shopify et le stockage en base de données
  • Amélioration des logs de débogage pour les opérations de mapping et mise à jour des timestamps
  • Résolution de la régression introduite dans la v2.0.22 lors du merge des commits v2.0.21
💡 Améliorations techniques
  • Refactorisation de updateProductTimestamp() pour utiliser la transaction parent au lieu de transactions imbriquées
  • Standardisation de la gestion du format des IDs Shopify dans toutes les méthodes de synchronisation
  • Ajout de logs détaillés pour déboguer les échecs de recherche dans la table de mapping
  • Amélioration de la gestion d'erreur pour la création de mapping quand les enregistrements sont manquants

Version 2.0.22 - Mai 2025

✨ Nouvelles fonctionnalités
  • Interface de synchronisation manuelle des produits dans l'administration (Issue #40)
  • Recherche en temps réel de produits Dolibarr avec autocomplétion
  • Synchronisation individuelle ou par lot directement depuis l'interface
  • Feedback visuel immédiat du statut de synchronisation
  • Support multilingue complet (FR, EN, DE, ES, IT)
🐛 Corrections de bugs
  • CRITIQUE: Correction des erreurs d'arrondi des prix (.95€ devenant .96€) affectant 13 références produits (Issue #38)
  • Les prix privilégient maintenant les prix TTC stockés au lieu de recalculer HT + TVA
  • CRITIQUE: Correction de la duplication des produits lors des synchronisations (Issue #37)
  • Mécanisme de verrou temporel (5 minutes) pour empêcher les synchronisations concurrentes
  • Protection par session pour éviter les doublons dans une même requête
  • Libération automatique des verrous même en cas d'erreur
💡 Améliorations techniques
  • Standardisation des en-têtes PHP et déclarations de licence dans tout le projet
  • Amélioration de la détection des modes d'exécution (CLI/web) pour les crons
  • Nouvelle option de configuration pour la priorité des prix TTC en mode multi-prix
  • Amélioration des logs de calcul de prix pour un meilleur débogage
  • Optimisation de l'organisation des requêtes SQL
  • Guide de configuration: Amélioration de la hiérarchie visuelle des options du chapitre 6
  • Sections hiérarchiques avec icônes : Configuration Prix, Contenu, Stocks
  • Indentation visuelle pour les options dépendantes avec indicateurs conditionnels
  • Interface plus claire avec en-têtes colorés et mise en page structurée
  • Filtrage des catégories: Correction pour utiliser uniquement la catégorie configurée et ses enfants
  • Récupération corrigée de la configuration des catégories depuis la base de données
  • Calcul amélioré des statistiques produits pour les catégories configurées uniquement
  • Interface de synchronisation manuelle avec structure hiérarchique des catégories basée sur la configuration
  • Mode debug: Ajout mode debug complet (?debug=1) pour diagnostiquer les problèmes de filtrage
  • Correction SQL critique: Correction des références de colonnes dans l'interface de synchronisation manuelle
  • - Changement de `p.fk_product_parent` vers `p.fk_parent` pour le filtrage des produits parents
  • - Changement de `dsp.dolibarr_product_id` vers `dsp.fk_product` pour les jointures de la table de synchronisation
  • Amélioration variants: Ajout support des produits parents de variants dans l'interface de synchronisation
  • - Inclusion des produits sans variants (fk_parent IS NULL OR fk_parent = 0)
  • - Inclusion des produits parents de variants (sous-requête EXISTS p2.fk_parent = p.rowid)
  • Simplification des requêtes SQL pour de meilleures performances et fiabilité
  • Validation du schéma de base de données et logs détaillés des requêtes SQL pour le dépannage
  • Correction des statistiques retournant 0 produit par correction des requêtes complexes

Version 2.0.21 - Mai 2025

🐛 Corrections de bugs
  • Correction de la logique de synchronisation des images qui se lançait même quand désactivée
  • Correction de la logique empty() vs isset() pour le paramètre sync_product_images
  • Suppression des vérifications redondantes de configuration dans syncProductAllImages()
  • La synchronisation d'images respecte maintenant correctement le paramètre "sync_product_images" (0=désactivé, 1=activé)
💡 Améliorations techniques
  • Simplification de la logique de synchronisation d'images en supprimant les vérifications de configuration dupliquées
  • Amélioration de la validation des paramètres pour la configuration de synchronisation d'images
  • Amélioration de la maintenabilité du code en centralisant les vérifications de synchronisation

Version 2.0.20 - Mai 2025

🐛 Corrections de bugs
  • Correction du problème de stocks négatifs lors de la synchronisation avec Shopify
  • Amélioration de la gestion des caractères spéciaux dans les noms de fichiers d'images
  • Correction de la recherche de produits dans la fonction de purge pour les produits dans les catégories et sous-catégories
  • Ajout du dossier ajax dans la configuration de construction du module
  • Correction des erreurs PHP fatales dans le script de recherche AJAX
  • Correction de la vérification du token CSRF dans search_products.php
  • Implémentation correcte du système de logs dans les endpoints AJAX
  • Amélioration de la gestion et des logs des stocks dans importproducts.class.php
  • Correction du problème de synchronisation des stocks quand la propriété stock est vide
💡 Améliorations techniques
  • Ajout d'un mécanisme de fallback pour les erreurs 404 avec encodage alternatif
  • Amélioration des logs pour faciliter le débogage des problèmes d'images
  • Restructuration de la recherche AJAX de produits en classe OOP avec LoggerTrait
  • Amélioration de l'interface utilisateur pour la recherche avec indicateur de chargement et messages d'erreur
  • Meilleure gestion des erreurs dans la recherche de produits
  • Ajout d'un mécanisme de fallback pour la récupération des sous-catégories (get_all_ways/get_all_childs)
  • Standardisation des logs dans l'ensemble du module avec LoggerTrait
  • Ajout du chargement préventif du stock avant calcul dans la mise à jour des inventaires de variantes
  • Amélioration des logs de stock avec une différenciation claire entre les types de stock

Version 2.0.19 - Mai 2025

🐛 Corrections de bugs
  • Correction complète pour sauvegarder le champ "dolibarr_hosturl" dans les paramètres du module
  • Résolution des erreurs SQL dans la gestion de la correspondance des méthodes d'expédition
💡 Améliorations techniques
  • Mise en place d'un système LoggerTrait centralisé pour tous les messages de log du module
  • Amélioration du format des logs avec ajout automatique du nom de la classe et de la méthode
  • Amélioration du debugging de configuration avec masquage sécurisé des tokens

Version 2.0.18 - Mai 2025

🐛 Corrections de bugs
  • Corrigé l'erreur "Unable to parse URI: https:///" dans le contexte des crons
  • Amélioration du chargement de configuration dans les contextes cron
  • Gestion robuste de l'entity avec fallback automatique à l'entity 1
💡 Améliorations techniques
  • Centralisation de la gestion de configuration dans ShopifyApi
  • Amélioration du logging pour le débogage des contextes cron
  • Refactorisation de toutes les classes pour utiliser la configuration centralisée
  • Les crons passent maintenant explicitement l'entity aux classes métier

Version 2.0.17 - Mai 2025

✨ Nouvelles fonctionnalités
  • Options de synchronisation des produits configurables dans l'interface d'administration
  • Support complet des niveaux de prix multiples de Dolibarr avec sélection configurable
  • Déplacement de l'option stock virtuel vers l'onglet produits pour une meilleure organisation
  • Activation/désactivation automatique des options dépendantes dans l'interface
  • Nouveau système de purge de la table de synchronisation avec réinitialisation auto_increment
🐛 Corrections de bugs
  • Correction de la synchronisation des variantes de produits (utilisation correcte de Product::id)
  • Résolution des problèmes de synchronisation lorsque le prix est zéro ou null
  • Amélioration de la gestion des erreurs pour le téléchargement d'images
  • Résolution des problèmes de validation des variantes avec métachamps Shopify
  • Support amélioré des métachamps spécifiques comme 'shopify.color-pattern'
💡 Améliorations
  • Interface utilisateur plus intuitive avec options contextuelles
  • Journalisation détaillée des niveaux de prix multiples
  • Système de validation extensible pour les options et métachamps
  • Guide de configuration mis à jour avec toutes les nouvelles fonctionnalités

Version 2.0.16 - Novembre 2024

✨ Nouvelles fonctionnalités
  • Support du stock virtuel pour la synchronisation des stocks
  • Intégration des pourboires Shopify dans les commandes
  • Amélioration de la gestion des remises sur les commandes
🐛 Corrections de bugs
  • Correction du calcul des prix TTC à partir des prix HT
  • Amélioration de la gestion des erreurs SQL
  • Résolution des problèmes de synchronisation multi-entités

Version 2.0.15 - Octobre 2024

✨ Nouvelles fonctionnalités
  • Gestion des variantes marquées "Hors ventes"
  • Import sélectif par référence de produit
  • Option pour garder les titres et descriptions existants
🐛 Corrections de bugs
  • Correction de la gestion des erreurs de connexion API
  • Amélioration de la stabilité du cron
Retour à la page principale