🔴 CORREZIONI URGENTI - Questa versione risolve 2 bug critici che interessano la sincronizzazione ordini e la protezione immagini prodotti.
🐛 BUG CRITICO #139 - Protezione Immagini Prodotti Semplici
- CLIENTE INTERESSATO: Cheer Moda - Immagini eliminate permanentemente su prodotti semplici
- PATTERN: Prodotti SENZA varianti → Immagini eliminate anche se sync disattivato ❌
- PATTERN: Prodotti CON varianti → Ha funzionato correttamente ✅
- CAUSA: Eliminazione API Shopify PRIMA della verifica completa del mapping
✅ Soluzioni Implementate
- LOG DETTAGLIATI: Identificazione tipo prodotto (SEMPLICE vs CON VARIANTI)
- VERIFICA MAPPING: Controllo PRIMA di qualsiasi operazione distruttiva
- PRE-CHECK IMMAGINI: Verifica immagini Dolibarr disponibili prima dell'eliminazione
- GESTIONE ERRORI: Ritorno pulito senza Exception dopo eliminazione
🔴 BUG CRITICO #140 - CRON Congelato + Importazione Storica Bloccata
- CLIENTE INTERESSATO: Eau Exquise - Nessuna sincronizzazione ordini per 10 giorni
- SINTOMO 1: Stato CRON "In corso o non eseguito" con output vuoto
- SINTOMO 2: Importazione storica bloccata al 37.7% (1990/5278 ordini)
- SINTOMO 3: 48+ errori SQL durante migrazione v2.1.0
- SINTOMO 4: Timeout PHP 30s insufficiente per importazione storica
✅ Correzioni Implementate
1️⃣ Rilevamento Automatico CRON Congelato
- Log obbligatorio all'avvio (entity + timeout PHP)
- Rilevamento automatico CRON congelato (processing=1 > 1h)
- Sblocco automatico con avviso
- Codice errore
-1 se configurazione incompleta
2️⃣ Rilevamento Blocco Importazione Storica
- Confronto progresso tra esecuzioni CRON
- Salto automatico ordine problematico dopo 3 tentativi
- Registrazione dettagliata dell'ordine bloccante
STUCK_COUNTER per tracciabilità
3️⃣ Protezione Timeout PHP
- Aumento limite tempo a 300s (5 minuti) all'avvio
- Cronometro in loop sincronizzazione (max 120s)
- Salvataggio punto ripresa se raggiunto timeout
- Ripristino limite tempo originale alla fine
4️⃣ Riparazione Errori SQL Migrazione
- Nuovo script SQL:
sql/update_2.1.0_to_2.1.1.sql
- Rimozione tabella obsoleta
llx_shopify_dolibarr_storedetails
- Pulizia indici duplicati su tabelle sincronizzazione
- Verifica integrità tabelle principali
🔴 BUG CRITICO - Giacenze Non Aggiornate (Cliente Philippe)
- CLIENTE INTERESSATO: Philazerty - 100% delle giacenze non sincronizzate con Shopify
- SINTOMO: "Skipping inventory update - empty inventory_item_id"
- CAUSA: Inconsistenza nomenclatura chiavi (camelCase vs snake_case) nell'array $inventoryQuantities
✅ Soluzione Implementata
- ARMONIZZAZIONE: Chiavi snake_case nella creazione array (inventory_item_id, location_id, available_adjustment)
- RISULTATO: 100% delle giacenze ora sincronizzate correttamente
- FILE: class/importproducts.class.php linea 2566-2571
🟠 BUG IMPORTANTE - Collezioni Fuori Albero (Cliente Philippe)
- CLIENTE INTERESSATO: Philazerty - Collezioni create per TUTTE le categorie prodotti
- PROBLEMA: Se prodotto in categoria 359 E "Videogiochi" (fuori albero 359), vengono create entrambe le collezioni
- ATTESO: Solo collezioni per categorie nell'albero configurato (359)
✅ Soluzione Implementata
- FILTRAGGIO POST-RECUPERO: Verifica appartenenza albero configurato prima creazione collezione
- NUOVA FUNZIONE: isCategoryInTree() risale catena genitori fino a trovare categoria configurata
- LOG DETTAGLIATI: Indicazione categorie escluse (fuori albero configurato)
- FILE: class/importproducts.class.php linee 5436-5456 + 6299-6358
🟠 BUG IMPORTANTE - Servizi + Pubblicazioni (Issue #141)
- PROBLEMA 1: Servizi (type=1) con giacenza tracciata in Shopify mentre i servizi non dovrebbero avere giacenze
- PROBLEMA 2: Prodotti sincronizzati ma non pubblicati sui canali di vendita (Negozio Online, POS)
✅ Soluzioni Implementate
- FIX SERVIZI: tracked=false e requiresShipping=false per servizi (linea 2357-2364)
- NUOVA FUNZIONE: publishProductToConfiguredChannels() per pubblicazione automatica (linea 6225-6297)
- RIUTILIZZO CONFIG: Usa configurazione canali vendita collezioni (DOLI2SHOP_COLLECTIONS_SALES_CHANNELS)
- DEGRADAZIONE ELEGANTE: Funziona anche senza scope write_publications
🎯 Impatto Totale v2.1.1
- ✅ CRON Robusto: Rilevamento e sblocco automatico
- ✅ Importazione Storica Affidabile: Salta ordini problematici
- ✅ Protezione Immagini: Nessuna eliminazione senza sostituzione
- ✅ Protezione Timeout: Nessun blocco PHP su volumi elevati
- ✅ Tracciabilità Completa: Log dettagliati ad ogni passo
- ✅ Migrazione Pulita: Riparazione automatica errori v2.1.0
- ✅ Giacenze Garantite: 100% sincronizzazioni giacenze funzionali
- ✅ Collezioni Filtrate: Solo categorie albero configurato
- ✅ Servizi Corretti: Nessuna giacenza o spedizione per servizi
- ✅ Prodotti Visibili: Pubblicazione automatica canali vendita
📊 Statistiche Implementazione
- File modificati: 6 file PHP + 1 SQL + ChangeLog
- Righe codice aggiunte: ~520 righe
- Issues risolte: #139, #140, #141 + 2 bug cliente
- Problemi corretti: 9 bug critici/maggiori totali
Issues GitHub risolte: #139 (Immagini), #140 (CRON), #141 (Servizi + Pubblicazioni) + 2 bug cliente Philippe (Giacenze + Collezioni)