🔴 CORRECCIONES URGENTES - Esta versión resuelve 2 errores críticos que afectan la sincronización de pedidos y la protección de imágenes de productos.
🐛 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)