Cronologia delle Versioni

🔧 Versione 2.1.8 (04/03/2026) - CORREZIONI LICENZA, DIAGNOSTICA E CRON

🔑 Licenza e validazione
  • Validazione licenza via DB: Il vecchio endpoint ora utilizza il database centralizzato — le licenze Shopify Billing vengono riconosciute correttamente
  • Diagnostica allineata: La diagnostica licenza usa la stessa logica della scheda Licenza (priorità shop_domain)
🐛 Correzioni
  • CRON ordini: Corretto crash con stdClass trattato come array + metodo setLoggerPrefix inesistente
  • Diagnostica CRON: Ora rispetta la configurazione reale del modulo
  • OAuth: Accettare nomi di dominio non-RFC con trattino finale
  • SQL: Pattern information_schema compatibile con MySQL 5.7+ / MariaDB
  • Migrazione: Script di aggiornamento idempotente (verifica esistenza tabella sorgente)

💳🏪 Versione 2.1.7 (29/01/2026) - SHOPIFY BILLING API + ARCHITETTURA DUAL-CHANNEL

💳 Shopify Billing API
  • Server centrale: Database MySQL + API REST + Webhooks billing
    • 5 tabelle 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
  • Interfaccia admin web: Dashboard, gestione licenze, abbonamenti, eventi, migrazione
  • App Shopify Embedded: Scelta abbonamento, callback pagamento, download ZIP sicuro
🔗 Architettura Dual-Channel
  • Nuovi clienti: Acquisto via Shopify App Store (250€/anno o 25€/mese)
  • Clienti DoliStore: Collegare seriale esistente per evitare doppio pagamento
  • Scadenza DoliStore: Invito a rinnovare via Shopify Billing
🐛 Correzioni bug
  • Issue #233: Sconti non applicati ai servizi durante importazione ordini
    • Fallback su discountAllocations per sconti globali
    • Servizi personalizzati ora inclusi nel calcolo sconti
📚 Documentazione
  • Guida completa configurazione Shopify Partner (300+ righe)
  • 46 nuove chiavi traduzione × 5 lingue

🔒🔄 Versione 2.1.6 (10/12/2025) - AUDIT SICUREZZA COMPLETO + IMPORTAZIONE SHOPIFY→DOLIBARR

🔴 Problemi CRITICI risolti (17/17 = 100%)
  • Token CSRF: Protezione aggiunta su 15 file admin/ajax
  • XSS: Escape HTML completo con htmlspecialchars()
  • Chiave API GDPR: Esternalizzata (non più hardcoded)
  • SSL/TLS: Verifica SSL riattivata (6 occorrenze)
  • Attacchi Replay: Protezione webhooks GDPR
  • File Debug: Protetti da SHOPIFY_DEBUG_MODE
🔵 Problemi IMPORTANTI risolti (~90%)
  • Errori SQL: Messaggi generici (nessuna esposizione tecnica)
  • Transazioni: Aggiunte su operazioni bulk
  • Indici SQL: 6 nuovi indici per prestazioni
  • Pulizia codice: -29 righe template non utilizzate
🟢 Nuova funzionalità: Importazione Shopify → Dolibarr
  • Nuovo CRON: ShopifyProductImportCron per importazione automatica
  • Sincronizzazione bidirezionale: Dolibarr↔Shopify completa

✨📋 Versione 2.1.5 (22/11/2025) - SUPPORTO CAMPO AZIENDA + STORICO INDIRIZZI + PAGINAZIONE METAFIELDS

🟢 CORREZIONE #1 - Supporto Completo del Campo "Azienda" (Nome dell'Azienda)
  • PROBLEMA: Campo "azienda" attivato in Shopify ma non sincronizzato con Dolibarr
  • RICHIESTA DEL CLIENTE: "Ho attivato il campo di Shopify che permette di recuperare il nome dell'azienda, ma non viene trasmesso"
  • IMPATTO: Clienti professionali creati con nome + cognome invece del nome azienda
✅ Soluzione Implementata
  • GraphQL: Campo company aggiunto in 3 indirizzi (customer.defaultAddress, billingAddress, shippingAddress)
  • Logica di priorità: company se fornito, altrimenti firstName + lastName (fallback)
  • Integrazione completa: Nome cliente, indirizzi fatturazione/spedizione, contatti (campo "posizione")
  • File: shopifyapi.class.php (righe 2589, 2608, 2621) + shopifyordermanager.class.php (righe 760-769, 1219-1223, 1244-1248, 2027-2031)
🟢 CORREZIONE #2 - Paginazione Metafields (Protezione Perdita Dati >250)
  • PROBLEMA: Limite GraphQL di 250 metafields senza paginazione = perdita silenziosa di dati oltre il limite
  • RISCHIO: Punti di ritiro (Boxtal, Mondial Relay, Atlas) in metafields >250 mai recuperati
  • IMPATTO: Ordini incompleti, informazioni di spedizione mancanti
✅ Soluzione Implementata
  • GraphQL pageInfo: Struttura hasNextPage + endCursor aggiunta nei metafields
  • Nuovo metodo: getAllOrderMetafields() - paginazione automatica con cursore (92 righe)
  • Integrazione intelligente: Rilevamento automatico ≥250 metafields → attivazione paginazione
  • Sicurezza: Limite di 100 pagine (max 25.000 metafields) per prevenire loop infiniti
  • File: shopifyapi.class.php (righe 2724-2906) + shopifyordermanager.class.php (righe 1041-1063)
🟢 CORREZIONE #3 - 10 Colonne SQL Dedicate per Punti di Ritiro
  • PROBLEMA: Dati punti di ritiro memorizzati in JSON monolitico → impossibile interrogare in SQL
  • LIMITAZIONE: Nessuna statistica, ricerca o filtro per corriere/città/paese possibile
  • IMPATTO: Performance degradate, reporting impossibile
✅ Soluzione Implementata
  • 10 colonne 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
  • Indice creato: pickup_point_id per ricerche veloci
  • Compatibilità: JSON legacy preservato in pickup_extra_data per dati specifici del provider
  • Registrazione extrafields: Integrazione automatica in llx_extrafields
  • File: sql/update_2.1.4_2.1.5.sql (273 righe) + shopifyordermanager.class.php (righe 2360-2459)
🟠 MIGLIORAMENTO #4 - Monitoraggio Limiti GraphQL
  • OBIETTIVO: Rilevare automaticamente potenziali troncamenti di dati GraphQL
  • MONITORAGGIO: lineItems (≥40), shippingLines (≥5), discountApplications (≥10), transactions (≥5)
  • LOGS: Avvisi automatici a livello LOG_WARNING se i limiti vengono raggiunti
  • File: shopifyordermanager.class.php (righe 976-997)
🟣 STATISTICHE TECNICHE
  • Righe codice core: ~530 righe (4 modifiche GraphQL + 1 nuovo metodo + logica company + paginazione + monitoraggio)
  • Righe SQL: 273 righe (10 colonne + extrafields + indici)
  • Righe ChangeLog: 160 righe documentazione completa
  • Totale: 963 righe aggiunte
  • Validazione: 100% sintassi validata + test GraphQL superati
  • Commit: 4fc6ef2 sul branch dev-v2.1.5-corrections
✅ Impatto sui Clienti
  • Clienti professionali: Nome azienda correttamente sincronizzato
  • Storico indirizzi: Contatti multipli preservati nella scheda cliente
  • Punti di ritiro: 100% dati recuperati anche per ordini complessi
  • Performance: Query SQL native sui punti di ritiro (100x più veloci)
  • Reporting: Statistiche per corriere, città, paese ora possibili

🛡️ Versione 2.1.2 (19/10/2025) - CORREZIONI CRITICHE REGRESSIONE v2.1.0

🐛 ISSUE #144 - Migrazioni SQL Idempotenti (CRITICO)
  • PROBLEMA: Perdita totale dei mappaggi Dolibarr-Shopify alla riattivazione del modulo
  • CAUSA: Script SQL distruttivi (TRUNCATE, DROP) rieseguiti ad ogni attivazione
  • IMPATTO CLIENTE: Risincronizzazione manuale completa richiesta
✅ Soluzione Implementata
  • MigrationManager: Sistema intelligente di tracciamento migrazioni (classe 310+ righe)
  • Tabella llx_shopify_migration_history: Registrazione delle migrazioni già applicate
  • Script SQL idempotenti: Riscrittura di update_2.0.5_2.0.6.sql e update_2.0.22_2.0.23.sql
  • Transazioni atomiche: Commit/rollback con retry automatico
🐛 ISSUE #148 - Regressione v2.1.0: Condizioni Invertite (CRITICO)
  • ERRORI: Prezzi, scorte e immagini sincronizzati NONOSTANTE opzioni disattivate
  • CAUSA: Condizioni empty() || == 1 SEMPRE vere
  • FILE: class/importproducts.class.php (6 condizioni corrette)
✅ Soluzione Implementata
  • Correzione logica: !empty() && == 1 per rispettare la configurazione
  • Semplificazione scorte: -125 righe di codice, usando getProductStock()
  • Audit completo: 8 opzioni verificate e confermate corrette
⚡ ISSUE #141 - Sincronizzazione CRON Separata (IMPORTANTE)
  • PROBLEMA: Importazione storica blocca sincronizzazione in tempo reale per giorni
  • IMPATTO: Ordini recenti non importati durante importazione storica
✅ Soluzione Implementata
  • 2 CRON indipendenti: ShopifyOrderSyncCron (15min) + ShopifyHistoricalImportCron (30min)
  • Modalità forzate: 'normal' per sincronizzazione in tempo reale, 'historical' per importazione storica
  • Interfaccia admin: Attivazione/disattivazione importazione storica con gestione automatica CRON
  • Parallelizzazione: Entrambi i CRON possono essere eseguiti simultaneamente
📊 ISSUE #147 - Statistiche di Sincronizzazione Coerenti
  • PROBLEMA: Statistiche fuorvianti (varianti contate due volte in "non sincronizzato" E "già sincronizzato")
  • CONFUSIONE: Impossibile sapere cosa resta da sincronizzare
✅ Soluzione Implementata
  • Query SQL riscritta: 9 nuovi contatori precisi (3 categorie × 3 tipi)
  • Visualizzazione ristrutturata: Sezioni separate NON sincronizzati / GIÀ sincronizzati / Errori
  • Zero doppio conteggio: Ogni prodotto/variante contato una sola volta
🔧 ISSUE #146 - Servizi in Pulizia Prodotti
  • PROBLEMA: Servizi (fk_product_type = 1) non ricercabili nella pulizia
  • LIMITAZIONE: Impossibile pulire i servizi dal mapping Shopify
✅ Soluzione Implementata
  • Filtro tipo prodotto: Menu a tendina "Prodotti / Servizi / Tutti"
  • Badge visuali: 📦 Prodotto / 🔧 Servizio nei risultati
  • Backend AJAX: Supporto per parametro product_type nella ricerca
🐛 ISSUE #149 - Bug Critico Scorte GraphQL (CRITICO)
  • PROBLEMA: 100% delle sincronizzazioni di scorte fallivano silenziosamente
  • CAUSA: Incompatibilità snake_case vs camelCase tra PHP e API GraphQL di Shopify
  • IMPATTO: Scorte mai aggiornate su Shopify nonostante sincronizzazione attiva
✅ Soluzione Implementata
  • Conversione automatica: snake_case → camelCase in ShopifyApi::inventorySetQuantities()
  • Mappatura chiavi: inventory_item_id → inventoryItemId, location_id → locationId, available_adjustment → quantity
  • File modificato: class/shopifyapi.class.php righe 645-655
  • Test: Validazione completa con più prodotti e varianti
🛠️ ISSUE #150 - Miglioramenti Diagnostica Sistema
  • PROBLEMA 1: Errori diagnostici falsi con prefisso 'llx_' hardcodato
  • PROBLEMA 2: Email supporto non visualizzata in diagnostica
  • PROBLEMA 3: Validazione supporto solo manuale
✅ Soluzioni Implementate
  • Prefisso SQL dinamico: Uso di MAIN_DB_PREFIX invece di 'llx_' hardcodato
  • Visualizzazione email: Email supporto aggiunta nella sezione "Stato del supporto"
  • Auto-validazione: Attivazione automatica di validateSupportByEmail() se email configurata
  • File modificato: admin/diagnostic.php righe 413-540
🔧 ISSUE #152 - Auto-Disattivazione CRON Cleanup (MAGGIORE)
  • PROBLEMA: CRON Cleanup non disattivava mai il CRON di importazione storica nonostante il completamento
  • CAUSA: Incoerenza architetturale - Cleanup utilizzava ConfigurationMigrator direttamente (array) invece di ShopifyApi (oggetto)
  • IMPATTO: CRON storico rimaneva attivo inutilmente dopo il completamento
✅ Soluzione Implementata
  • Architettura unificata: CRON Cleanup ora usa ShopifyApi + getDolGlobalInt() come tutti gli altri CRON
  • Coerenza architetturale: 5 CRON seguono lo stesso schema
  • File modificati: 2 (shopifyhistoricalimportcleanupcron.class.php, configurationMigrator.class.php)
📊 Statistiche Versione
  • File creati: 3 (MigrationManager, ShopifyHistoricalImportCron, llx_shopify_migration_history.sql)
  • File modificati: 15 (classi, admin, ajax, SQL, traduzioni)
  • Righe aggiunte: ~1350 righe
  • Traduzioni: 173 chiavi (34 chiavi + 1 aggiornamento × 5 lingue)
  • Issue risolti: 8 (#144, #148, #141, #147, #146, #149, #150, #152)

🛡️ Versione 2.1.1 (2025-10-08) - CORREZIONI CRITICHE: Stabilità CRON + Protezione Immagini

🐛 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)

🚀 Versione 2.1.0 (2025-09-30) - EVOLUZIONE MAGGIORE: UX MODERNA + CORREZIONI CRITICHE

🎨 Interfaccia Moderna con Toggle Nativi
  • RIVOLUZIONE UX: Sostituzione completa delle caselle di controllo con toggle moderni
  • 19 TOGGLE: Implementati in 6 pagine di amministrazione (setup, webhooks, import_orders, maintenance, support_config, orderstatusmapping)
  • STILE DOLIBARR: Consistenza visiva perfetta con interfaccia nativa (verde attivo / grigio disattivo)
  • ANIMAZIONE FLUIDA: Transizione 0.3s con feedback visivo immediato
  • 0 REGRESSIONE: JavaScript e logica di business preservati
🐛 Correzione Critica - SQL Extrafields + Consenso Marketing
  • PROBLEMA: Fallimento sincronizzazione ordini con errore SQL invalido UPDATE llx_societe_extrafields SET WHERE
  • SOLUZIONE 1: Gestione eccezioni SQL per catturare errori extrafields vuoti
  • SOLUZIONE 2: Mappatura corretta al metodo nativo Dolibarr setNoEmail()
  • IMPATTO: CRON Orders ora funziona per tutti i clienti + Conformità GDPR
🔴 Correzioni Regressioni v2.0.33-35
  • BUG #127 CRITICO: Immagini eliminate nonostante sincronizzazione disattivata (Protezione assoluta aggiunta)
  • BUG #128 MAGGIORE: Stock sincronizzati nonostante casella deselezionata (Logica corretta)
  • CLIENTI IMPATTATI: Cheer Moda e potenzialmente tutti i clienti attivi
🔧 Correzioni Urgenti Problemi Clienti
  • FIX CATEGORIE: Assegnazione categorie clienti non funzionante (getDolGlobalInt → getDolGlobalString)
  • FIX STOCK: Registrazione avanzata per sincronizzazione stock Shopify (richiesta/risposta complete)
  • FIX UX: Menu a tendina categorie con selezione vuota per impostazione predefinita
  • AGGIORNAMENTO API: Shopify 2025-01 → 2025-07 (correzioni errori inventario)
📅 Sistema Importazione Storica Data Doppia
  • NUOVO: Supporto per importazione storica con date multiple
  • ROBUSTEZZA: Gestione avanzata di periodi lunghi (2+ anni)
  • PRESTAZIONI: Dimensione batch ottimizzata in base al volume
🎯 Impatto Totale Cliente v2.1.0
  • ✅ Interfaccia professionale e moderna
  • ✅ Sincronizzazione ordini 100% affidabile
  • ✅ Protezione assoluta contro perdita dati
  • ✅ Rispetto rigoroso delle configurazioni utente
  • ✅ Compatibilità GDPR consenso marketing
  • ✅ Supporto esteso per grandi volumi

Issue GitHub risolti: #125, #126, #127, #128, #130

🚨 Versione 2.0.35 (2025-09-22) - CORREZIONE CRITICA + NUOVE FUNZIONALITÀ

🐛 Problemi Critici Risolti
  • BLOCCO IMPORTAZIONE STORICA: Importazione rimasta perpetuamente in modalità storica
  • LIMITE ARBITRARIO: Restrizione di 1000 ordini impedendo importazione di 2+ anni di storico
  • ORDINI MANCANTI: Ordini dopo data finale configurata mai recuperati
  • VISIBILITÀ ZERO: Nessuna indicazione del progresso reale
💡 Soluzione Rivoluzionaria: Conteggio GraphQL Intelligente
  • CALCOLO ESATTO: Nuovo metodo getOrdersCount() tramite GraphQL
  • PROGRESSO VISIBILE: Log dettagliati "X / Y ordini (Z%)"
  • RILEVAMENTO PRECISO: Tripla verifica per completamento automatico importazione
  • PRESTAZIONI: Dimensione batch adattiva basata sul volume da processare
🔧 Miglioramenti Tecnici
  • COSTANTI DOLIBARR: Memorizzazione progresso con dolibarr_set_const()
  • RESISTENZA ERRORI: Gestione robusta di timeout e interruzioni
  • LOG ARRICCHITI: Messaggi dettagliati per diagnosi e monitoraggio
  • COMPATIBILITÀ: Funziona con 10 o 100000+ ordini
📊 Impatto Cliente
  • URGENZA CRITICA: Installazione immediata per clienti con importazione bloccata
  • RECUPERO TOTALE: Tutti gli ordini mancanti importati automaticamente
  • COMPLETAMENTO AUTO: Passaggio automatico in modalità normale dopo importazione completa
  • SUPPORTO PRIORITARIO: Assistenza potenziata per questa correzione critica

🏷️ Categorizzazione Automatica Clienti Shopify

  • NUOVO: Configurazione "Categoria Clienti Shopify" nella scheda Impostazioni
  • NUOVO: Assegnazione automatica di categoria Dolibarr ai clienti creati da Shopify
  • NUOVO: Metodo assignCustomerToCategory() con gestione duplicati
  • MIGLIORATO: Traduzioni complete in 5 lingue (FR, EN, DE, ES, IT)
  • USO: Facilita identificazione e gestione dei clienti Shopify in Dolibarr

🔧 Correzioni Interfaccia di Ricerca

  • CORRETTO: Campo ricerca nella scheda Manutenzione non funzionava su Dolibarr 20
  • CORRETTO: Problema con ricerca prodotti per numeri nell'interfaccia Manutenzione
  • MIGLIORATO: Comportamento unificato tra schede Sincronizzazione Manuale e Manutenzione
  • MIGLIORATO: Ricerca consentita anche senza categoria prodotti configurata

🚀 Miglioramenti Gestione Titoli Prodotti

  • CORRETTO: Errore "Title must be specified" durante sync con descrizioni disabilitate
  • NUOVO: Metodo getProductTitle() per recuperare titoli da Shopify
  • MIGLIORATO: Logica intelligente preservando titoli modificati in Shopify
  • MIGLIORATO: Rispetto per scelte di sincronizzazione bidirezionale
🎯 Impatto Totale Cliente v2.0.35
  • ✅ Importazione storica funzionale per tutti i volumi di ordini
  • ✅ Migliore organizzazione clienti con categorizzazione automatica
  • ✅ Interfaccia di ricerca unificata e funzionale
  • ✅ Sincronizzazione rispettosa delle modifiche Shopify
  • ✅ Compatibilità estesa Dolibarr 18-22

Issue GitHub risolte: #123 (v2.0.35) e #124 (v3.0.0)

🔐 Versione 2.0.34 (2025-09-20) - SISTEMA DI SUPPORTO AVANZATO

🌐 NUOVO: Ristrutturazione Completa Sito Web (20/09/2025)
  • ORGANIZZAZIONE OTTIMIZZATA: Riprogettazione dell'architettura homepage per chiarire l'offerta v2.0.34 vs v3.0.0
  • MULTILINGUE: Ristrutturazione applicata a tutte le 5 lingue (FR, EN, DE, ES, IT)
  • PERCORSO CLIENTE: Sezione hero problema/soluzione con CTA di acquisto ottimizzati
  • TRASPARENZA: Sezioni distinte "v2.0.34 ORA" e "v3.0.0 PRESTO"
  • AVVERTENZE: Limitazioni v2.0.34 chiaramente visualizzate (non bidirezionale, non tempo reale)
  • NAVIGAZIONE: Link a changelog e roadmap aggiunti per migliore orientamento
  • PREZZI: Prezzi chiariti 250€ HT v2.0.34 vs 350-400€ HT v3.0.0
  • TESTO DOLISTORE: Nuovo testo marketing corretto creato
🔐 NUOVO: Sistema di Supporto Rivoluzionario
  • INNOVAZIONE: Piattaforma completa di gestione licenze con interfaccia web intuitiva
  • SICUREZZA: Sistema di validazione avanzato con tracciamento uso domini
  • FLESSIBILITÀ: Supporto per licenze standard, a vita e sviluppatore
  • AUTOMAZIONE: Generazione automatica da CSV + creazione manuale
🚀 Funzionalità Principali
  • Interfaccia Web Moderna: website/support_manager.php - Dashboard completa di gestione
  • API Robusta: website/api/validate_support.php - Validazione in tempo reale
  • Configurazione Sicura: Esternalizzazione password (niente più hardcoding)
  • Paginazione Intelligente: Visualizzazione ottimizzata per grandi database
  • Gestione Domini: Tracciamento automatico + autorizzazione manuale
📊 Tipi di Licenze Supportati
  • 🔵 Standard: 1 anno, 1 dominio produzione + dev/staging
  • 🟡 A Vita (su richiesta): Illimitata, 1 dominio produzione + dev/staging
  • 🟢 Sviluppatore: Illimitata, solo ambienti dev/staging
🛡️ Sistema di Sicurezza Avanzato
  • Validazione Rigorosa: Solo 1 licenza per dominio di produzione
  • Auto-Rilevamento: Ambienti di sviluppo autorizzati automaticamente
  • Tracciamento Completo: Cronologia accessi con IP, User-Agent, frequenza
  • Violazioni: Rilevamento e avvisi in tempo reale per uso multiplo
  • Domini Autorizzati: Gestione manuale + autorizzazione automatica dev
🎯 Compatibilità Estesa Dolibarr
  • COMPATIBILITÀ: Supporto esteso a Dolibarr 18.0+ (precedentemente 19+)
  • RICHIESTA CLIENTE: Richiesta F3DF per compatibilità Dolibarr 18.0.4 risolta
  • SOLUZIONE: Livello di compatibilità completo per versioni precedenti Dolibarr

🚨 Versione 2.0.33 (2025-09-16) - CORREZIONE CRITICA SINCRONIZZAZIONE IMMAGINI

🚨 Correzione Critica: Immagini Sincronizzate
  • PROBLEMA RISOLTO: Immagini non sincronizzate quando "Il prodotto non necessita aggiornamento"
  • CAUSA IDENTIFICATA: Funzione syncProduct() restituiva false → immagini mai elaborate
  • SOLUZIONE TECNICA: Modifica class/importproducts.class.php:915 - return true per elaborazione immagini
  • IMPATTO: Immagini sincronizzate anche se dati prodotto già aggiornati
✅ Benefici Immediati
  • Sincronizzazione garantita: Immagini sempre elaborate se sync_product_images attivato
  • Compatibilità totale: Sync manuale E automatica corrette
  • Flusso preservato: Nessun cambiamento comportamento utente
  • Prestazioni mantenute: Immagini elaborate solo se configurato
🔐 Miglioramento 2: Gestione Permessi Shopify per fileCreate
  • NUOVI SCOPES: Aggiunti `write_files`, `write_themes`, `write_images` ai permessi richiesti
  • LOGICA CONDIZIONALE: Scopes diventano obbligatori quando collezioni o immagini prodotti sono attivate
  • DIAGNOSTICA AUTOMATICA: Rilevamento e visualizzazione permessi file mancanti
  • MULTILINGUE: Traduzioni complete in 5 lingue per nuove etichette permessi
  • MIGLIORAMENTO UI: Diritti opzionali mancanti ora visualizzati in arancione invece di rosso
  • RISULTATO: Risolve errore "Access denied for fileCreate" durante upload immagini collezioni/prodotti
  • POSIZIONE: class/shopifyapi.class.php:191-212 + class/shopifyrightsChecker.class.php:295
🧠 Vantaggi v2.0.32 Preservati
  • Logica avanzata: 3 modalità automatiche (INVENTORY_ONLY, VARIANTS_ONLY, PRODUCT_UPDATE)
  • Correzioni critiche: API localhost + Collezioni "deleted" mantenute
  • Risoluzioni clienti: ALTAIRIS + PHILIPPE conservate

🚀 Versione 2.0.32 (2025-01-15) - OTTIMIZZAZIONE SINCRONIZZAZIONE E CORREZIONE API

🆕 Nuove funzionalità
  • NUOVO: Sistema strategico di sincronizzazione intelligente con 3 modalità adattive
    • INVENTORY_ONLY: Sincronizzazione esclusiva stock senza toccare contenuto prodotto
    • VARIANTS_ONLY: Aggiornamento variants senza modificare prodotto principale
    • PRODUCT_UPDATE: Sincronizzazione completa prodotto secondo opzioni selezionate
  • NUOVO: Metodo getSyncStrategy() per rilevamento automatico della modalità appropriata
  • NUOVO: Metodo updateVariantInventoryOnly() per aggiornamenti stock granulari
  • NUOVO: Metodi utility: calculateProductPrice(), getProductStock(), getDefaultLocationId()
🔧 Correzioni critiche
  • CRITICO: Risolto problema loopback DNS/NAT Hairpinning in installazioni server
    • PROBLEMA: Server non può raggiungersi via URL esterno per chiamate API interne
    • SOLUZIONE: Forza utilizzo localhost per tutte le chiamate API interne
    • IMPATTO: Risoluzione definitive errori 404 in ambienti server particolari
  • CRITICO: Corretto bug collezioni marcate erroneamente come "eliminate"
    • CAUSA: Condizione if ($existing && !empty($existing->data->collection)) errata
    • CORREZIONE: Cambio a if ($existing && !empty($existing->title))
    • IMPATTO: Sincronizzazione collezioni ora funziona correttamente
  • CRITICO: Risolto problema sovrascrittura contenuto Shopify non desiderata
    • PROBLEMA: Prodotti sovrascrivevano tutto il contenuto Shopify anche quando solo stock selezionato
    • SOLUZIONE: Logica di sincronizzazione che rispetta esattamente le opzioni selezionate
    • BENEFICIO: Controllo preciso su cosa viene sincronizzato, nessuna sovrascrittura indesiderata
⚡ Miglioramenti
  • MIGLIORATO: initDolibarrClient() ora forza localhost per chiamate API interne
  • MIGLIORATO: Logica di sincronizzazione rispetta precisamente le opzioni di configurazione
  • MIGLIORATO: Quando "descrizioni" è selezionato, include automaticamente anche label/titolo
  • MIGLIORATO: Gestione errori più robusta per ambienti di produzione
  • MIGLIORATO: Performance ottimizzate per sincronizzazioni grandi

🚨 Versione 2.0.31 (2025-09-09) - CORREZIONE CRITICA GENERAZIONE CODICI CLIENTE

🚨 Correzione Critica di Produzione
  • Issue #91 - CRITICO: Corretto errore "ErrorCustomerCodeRequired" che bloccava sincronizzazione ordini
  • CAUSA PRINCIPALE IDENTIFICATA: Codice fisso `$soc->code_client = -1` incompatibile con `mod_codeclient_leopard`
  • SOLUZIONE: Implementata generazione adattiva codici cliente basata su rilevamento modello Dolibarr
  • NUOVO: Metodo `setClientCode()` con strategie intelligenti specifiche per modello
  • Issue #92: Sistema intelligente generazione codici cliente
🛠️ Implementazione Tecnica
  • LOGICA ADATTIVA: Strategie diverse per modello (leopard=diretto, monkey/elephant=auto+fallback)
  • SISTEMA FALLBACK: Tripla sicurezza (auto → ID Shopify → timestamp) garantisce 100% successo
  • TRACCIABILITÀ PERFETTA: Prefisso "SH" identifica chiaramente clienti Shopify
  • LOGGING COMPLETO: Rilevamento modello e generazione codici completamente tracciata
🧪 Garanzia di Qualità
  • TEST UNITARI: 5 scenari coprono tutti modelli Dolibarr e casi limite
  • DOCUMENTAZIONE: Guida tecnica completa per risoluzione problemi e configurazione
  • COPERTURA MODELLI: leopard, monkey, elephant, vuoto e modelli personalizzati supportati
🎯 Impatto Produzione
  • Zero fallimenti: ErrorCustomerCodeRequired completamente eliminato
  • Compatibilità universale: Funziona con qualsiasi configurazione Dolibarr
  • Supporto migliorato: Log chiari e codici cliente tracciabili per debugging

🚨 Versione 2.0.30 (2025-09-09) - CORREZIONI CRITICHE SINCRONIZZAZIONE ORDINI

🚨 Correzioni Critiche di Produzione
  • Issue #86 - CRITICO: Risolto crash "Failed to fetch company" in ambienti di produzione
  • CAUSA PRINCIPALE: Il metodo createOrUpdateCustomer() restituiva tipi misti (-1 o oggetto Societe)
  • CORREZIONE: Aggiunta validazione rigorosa dei tipi prima dell'accesso alle proprietà del cliente
  • Issue #87: Sistema di logging completo per debug di produzione
  • Issue #88: Verifica automatica dei permessi utente CRON
  • Issue #90: Gestione degli errori migliorata nella gestione clienti
🔧 Miglioramenti del Codice
  • Sicurezza dei Tipi: Validazione rigorosa di oggetto e ID per tutte le operazioni cliente
  • Contesto di Errore: Messaggi di errore migliorati con email, entità e dettagli operazione
  • Sicurezza Transazionale: Gestione migliorata delle transazioni database con rollback appropriato
  • Standard di Logging: Livelli di log standardizzati (DEBUG, INFO, WARNING, ERR)
🎯 Impatto Cliente
  • IMMEDIATO: Risolve i crash "Failed to fetch company" in produzione
  • AFFIDABILITÀ: Gestione errori migliorata previene interruzioni sincronizzazione
  • SUPPORTO: Log dettagliati facilitano risoluzione rapida dei problemi
  • MONITORAGGIO: Verifica permessi CRON previene fallimenti di autorizzazione silenziosi

🐛 Versione 2.0.29 (2025-09-05) - CORREZIONI CRITICHE MULTI-ENTITÀ

🚨 Correzioni Critiche
  • Issue #83 - CRITICO: Corretto errore "Failed to fetch company" negli ambienti multi-entità
  • Issue #84: Versione dinamica nell'esportazione diagnostica JSON
✨ Miglioramenti
  • Multi-Entità: Ricerca clienti ora filtrata correttamente per entità
  • Diagnostica: Versione recuperata automaticamente dal modulo

🐛 Versione 2.0.28 (2025-09-04) - CORREZIONI CRITICHE SINCRONIZZAZIONE

🚨 Correzioni critiche
  • BUG CRITICO #80: Ordini che diventano "pagati" dopo la creazione non sincronizzati
  • SOLUZIONE: Uso di updated_at_min invece di created_at_min
  • FINESTRA SICUREZZA: Aggiunta automatica di finestra 24h per catturare ordini mancati
  • BUG CRITICO #81: Errore getDolGlobalBool() su Dolibarr v19-20
  • POLYFILL: Funzione di compatibilità automatica per versioni precedenti a v21
✨ Miglioramenti diagnostica
  • ESPORTAZIONE JSON: Diagnostica completa esportabile per supporto tecnico (47 verifiche + 39 parametri)
  • INTERFACCIA MIGLIORATA: Classi CSS per stato connessione Shopify con colori visuali
  • CONFIGURAZIONE SICURA: Esportazione con mascheramento automatico delle chiavi sensibili (chiavi API, token)
  • CORREZIONE TIMING: Esportazione JSON dopo costruzione completa del report
📝 Documentazione supporto
  • EMAIL TECNICHE: Template per supporto clienti con spiegazioni dettagliate
  • SOLUZIONI: Documentazione bug e soluzioni per casi simili
🔄 Compatibilità universale
  • DOLIBARR v19: Compatibilità completa con polyfill
  • DOLIBARR v20: Compatibilità completa con polyfill
  • DOLIBARR v21+: Funzione nativa utilizzata

🎯 Versione critica: Installazione fortemente raccomandata per tutti gli utenti, specialmente se utilizzate Dolibarr v19-20 o riscontrate problemi di sincronizzazione ordini.

🔧 Versione 2.0.27 (2024-12-26) - MIGRAZIONE CONFIGURAZIONE

🔧 Migrazione Configurazione (Issue #73)
  • NUOVO: Migrazione automatica da tabella personalizzata a costanti Dolibarr standard
  • NUOVO: Classe ConfigurationMigrator per 42 parametri di configurazione
  • NUOVO: Compatibilità con entità multiple Dolibarr
  • MIGLIORATO: Sistema di fallback automatico se la migrazione fallisce
🐛 Correzioni Critiche
  • CORRETTO: Issue #72 - Errori API silenziosi nella sincronizzazione immagini
  • CORRETTO: Log HTTP dettagliati per migliore diagnosi problemi API
  • CORRETTO: Issue #74 - Verificatore permessi con 15 controlli Dolibarr
⚙️ Tecnico
  • NUOVO: Sistema diagnostico permessi utenti Dolibarr
  • NUOVO: Contatore configurazione migrata (X/42 parametri)
  • MIGLIORATO: Script SQL migrazione 2.0.26 → 2.0.27

🐛 Correzioni Critiche (2025-08-29)

🐛 Correzioni Critiche (2025-08-29)
  • CORREZIONE CRITICA: ConfigurationMigrator mostrava falsamente "30/42 parametri migrati"
  • CORREZIONE CRITICA: La migrazione ora gestisce correttamente i valori `0` (esclusi dalla condizione `!empty()` precedente)
  • CORREZIONE CRITICA: Aggiunte traduzioni mancanti per l'interfaccia UserRightsCheck (5 lingue)
  • CORREZIONE: Le caselle di sincronizzazione prodotti ora si visualizzano correttamente basate sulle costanti migrate
  • CORREZIONE: Le statistiche di migrazione ora contano con precisione solo i 42 parametri mappati
  • CORREZIONE: Opzioni sincronizzazione prodotti (prezzi, descrizioni, immagini, scorte, attributi) correttamente migrate
🚀 Miglioramenti Interfaccia (2025-08-29)
🔍 Diagnostica Permessi Utente (2025-08-29)
🚀 Miglioramenti Interfaccia Diagnostica (2025-08-29)

🚨 Versione 2.0.25 (2025-08-04) - HOTFIX CRITICO

🔧 Correzioni critiche
  • BUG CRITICO: Correzione prima sincronizzazione che non recupera ordini recenti quando non esiste sync precedente
  • CAUSA PRINCIPALE: Quando MAX(tms) restituisce NULL (tabella vuota), nessun filtro data veniva applicato alla query GraphQL, causando il ritorno degli ordini più vecchi invece di quelli recenti da Shopify
  • SOLUZIONE: Implementazione di fallback intelligente usando data di installazione modulo quando non esiste sync precedente
  • NUOVO METODO: SqlUtils::getModuleInstallationDate() con logica di fallback gerarchica:
    • Priorità 1: Data di attivazione modulo dalla tabella llx_const
    • Priorità 2: Data di creazione tabella da information_schema
    • Priorità 3: Data di prima configurazione dai dettagli store
    • Priorità 4: Fallback predefinito (6 mesi fa)
  • MIGLIORATO: ShopifyOrderManager::getLastSuccessfulSync() ora garantisce data di riferimento valida per tutte le sincronizzazioni
📈 Impatto
  • CORREGGE: Clienti su v2.0.23/2.0.24 che sperimentano "nessun ordine sincronizzato" su installazioni fresche
  • ASSICURA: Prima sincronizzazione recupera correttamente ordini recenti dall'installazione del modulo
  • MANTIENE: Piena compatibilità all'indietro con sincronizzazioni esistenti

🚀 Versione 2.0.24 (2025-01-08) - IMPORTAZIONE STORICA E AUTO-ATTIVAZIONE

🆕 Nuove funzionalità
  • Issue #60: Funzionalità di importazione ordini storici integrata nel sistema CRON
  • Issue #60: Attivazione automatica CRON quando le configurazioni prodotti e ordini sono complete
  • NUOVO: Gestione intelligente CRON con controlli di completezza configurazione
  • NUOVO: Importazione ordini storici via ShopifyOrderSyncCron con creazione automatica clienti
  • NUOVO: Auto-disattivazione CRON quando configurazione incompleta per prevenire errori API
🔧 Correzioni critiche
  • Issue #61: Corretta sincronizzazione manuale mostra prodotti ma incapace di sincronizzarli (caso S001)
  • Issue #62: Corretti servizi sincronizzati come prodotti fisici invece di servizi
  • CRITICO: Corretta inconsistenza gestione parametri tra interfacce search e sync
  • CRITICO: Corretta rilevazione tipo servizio - servizi ora impostano correttamente requiresShipping: false in Shopify
⚡ Miglioramenti
  • MIGLIORATO: Gestione parametri unificata usando GETPOST('search_ref', 'aZ09') per preservare zeri iniziali negli SKU
  • MIGLIORATO: Differenziazione corretta servizio vs prodotto nella sincronizzazione Shopify (rilevazione fk_product_type)
  • MIGLIORATO: Attività CRON disabilitate per default all'installazione per prevenire chiamate API premature
  • MIGLIORATO: Validazione configurazione prima esecuzione CRON in ImportProductsCron e ShopifyOrderSyncCron
  • SEMPLIFICATO: Rimossa interfaccia import_orders separata - funzionalità integrata nel sistema CRON
  • MULTILINGUE: Aggiunte traduzioni per nuove funzionalità in 5 lingue (FR/EN/DE/ES/IT)
🏗️ Miglioramenti tecnici
  • ARCHITETTURA: Importazione ordini storici integrata nel flusso CRON esistente
  • AFFIDABILITÀ: Aggiunti controlli completezza configurazione prima esecuzione CRON
  • USABILITÀ: Messaggi automatici feedback attivazione CRON per utenti
  • MANUTENZIONE: Rimosso file interfaccia import_orders.php ridondante

🏗️ Versione 2.0.23 - Sessione 15 (2025-05-31) - UNIFICAZIONE GESTIONE TABELLA SINCRONIZZAZIONE

🔧 Refactoring Critico
  • CRITICO: Unificazione delle funzioni di gestione tabella per llx_dolibarr_shopify_products_save
  • CRITICO: Creazione di funzione unica manageProductMapping() che sostituisce tre funzioni separate (releaseSyncLock, saveProductMapping, updateProductTimestamp)
  • CRITICO: Correzione logica timestamp TMS - ora aggiorna solo su stato 'success' come richiesto
  • CRITICO: Risoluzione comportamento inconsistente tra modalità di sincronizzazione manuale e automatica
✨ Miglioramenti
  • MIGLIORATO: Logica unica e coerente per tutte le operazioni della tabella elimina differenze comportamentali
  • MIGLIORATO: Inizializzazione TMS corretta per nuovi record - usa valore predefinito tabella (CURRENT_TIMESTAMP) tranne se stato è 'success'
  • MIGLIORATO: Gestione errori e logging migliorati nella funzione unificata
  • MIGLIORATO: Migliore manutenibilità del codice con riduzione duplicazione e approccio unificato
🏗️ Architettura Tecnica
  • ARCHITETTURA: manageProductMapping() gestisce creazione, aggiornamenti, gestione stati e logica TMS
  • ARCHITETTURA: releaseSyncLock() ora usa funzione unificata con parametro releaseLock=true
  • ARCHITETTURA: saveProductMapping() ora usa funzione unificata con stato 'pending'
  • ARCHITETTURA: updateProductTimestamp() ora usa funzione unificata con stato 'success'
  • PRESTAZIONI: Operazioni database ottimizzate con logica UPDATE/INSERT intelligente
🐛 Correzioni
  • CRITICO: Correzione problemi potenziali TMS NULL durante creazione record
  • CRITICO: Eliminazione gestione inconsistente tabella causante differenze comportamentali sync
  • CRITICO: Correzione logica aggiornamento TMS per attivarsi solo su sincronizzazioni riuscite

🚨 Versione 2.0.23 - Sessione 14 (2025-05-31) - CORREZIONE STATO PRODOTTI SEMPLICI

🐛 Correzioni critiche
  • CRITICO: Correzione prodotti semplici che rimanevano in stato 'pending' dopo sincronizzazione riuscita
  • CRITICO: Correzione logica di uscita anticipata in checkProductNeedsUpdate() per marcare stato come 'skipped' quando prodotti non necessitano aggiornamenti ma sync è riuscito
  • CRITICO: Risoluzione problema dove prodotti come "PullColMontantTorsade202004" rimanevano in stato pending indefinitamente
🆕 Nuove funzionalità
  • NUOVO: Aggiunto stato 'skipped' all'enum last_sync_status per prodotti che non necessitano aggiornamenti
  • NUOVO: Distinzione migliorata degli stati: 'success' (aggiornato), 'skipped' (nessun aggiornamento necessario), 'failed' (errore), 'pending' (in corso)
✨ Miglioramenti
  • MIGLIORATO: Gestione migliorata degli stati di sincronizzazione - prodotti che non necessitano aggiornamenti ora sono correttamente marcati come 'skipped' invece di preservare 'pending'
  • MIGLIORATO: Migliore distinzione tra prodotti che hanno fallito sync vs prodotti che sono stati processati con successo ma non necessitavano cambiamenti
  • MIGLIORATO: Schema database aggiornato per supportare stato 'skipped' nell'enum

🚨 Versione 2.0.23 - Sessione 13 (2025-05-31) - CORREZIONE CRITICA FK_PRODUCT_PARENT

🐛 Correzioni critiche
  • CRITICO: Correzione problema fk_product_parent NULL durante sincronizzazione manuale varianti
  • CRITICO: Correzione chiamate saveProductMapping() per varianti per includere ID prodotto padre
  • CRITICO: Risoluzione varianti create con fk_product_parent=NULL invece di ID padre corretto
  • CRITICO: Miglioramento metodo mapVariantsToShopify() per gestire correttamente relazioni padre-variante

🏗️ Versione 2.0.23 - Sessione 12 (2025-05-31) - ISSUE #56 ARCHITETTURA PADRE-VARIANTE

🚀 Nuove funzionalità
  • ISSUE #56: Aggiunta colonna fk_product_parent per migliorare relazioni padre-variante
  • NUOVO: Schema di database migliorato con tracciamento relazioni padre-variante
  • NUOVO: Vincoli di chiave esterna per integrità dati tra prodotti padre e variante
  • NUOVO: Migrazione automatica dati per popolare relazioni padre-variante esistenti
✨ Miglioramenti
  • MIGLIORATO: Metodo saveProductMapping() ora supporta parametro fk_product_parent per varianti
  • MIGLIORATO: Metodo releaseSyncLock() aggiornato per lavorare con nuova architettura padre-variante
  • MIGLIORATO: Query database ottimizzate per distinguere tra prodotti padre e varianti
  • MIGLIORATO: Script creazione tabella SQL aggiornato con nuova colonna e vincoli

🔄 Version 2.0.23 - Session 7 (2025-05-30) - CORREZIONI RETRY E STATISTICHE

🐛 Correzioni critiche
  • CRITICO: Corretti ID TEMP_LOCK trattati erroneamente come aggiornamenti Shopify causando fallimenti di retry
  • CRITICO: Armonizzazione degli stati di sincronizzazione tra 'failed' e 'error' per visualizzazione coerente delle statistiche
  • Corretta interfaccia statistiche che non contava i fallimenti di sincronizzazione a causa di inconsistenza di stato
  • Migliorata logica di mappatura prodotti per filtrare ID di blocco temporanei
✨ Miglioramenti
  • NUOVO: Filtraggio intelligente degli ID di blocco temporanei per evitare chiamate API Shopify non valide
  • NUOVO: Terminologia armonizzata degli stati di sincronizzazione in tutta la base di codice e interfaccia
  • Migliorata precisione dei report di errore nel dashboard amministrativo
  • Migliore distinzione tra nuovi prodotti e aggiornamenti effettivi

🚨 Version 2.0.23 - Session 6 (2025-05-30) - CORREZIONI SINCRONIZZAZIONE

🐛 Correzioni critiche
  • CRITICO: Correzione del meccanismo di blocco della sincronizzazione per evitare violazioni di vincolo NOT NULL
  • CRITICO: Correzione della protezione contro sincronizzazioni concorrenti con ID di blocco temporanei
  • CRITICO: Correzione di query UPDATE imprecise che interessavano più record di varianti
  • Correzione del fallimento di sincronizzazione per nuovi prodotti a causa di ID Shopify vuoti
  • Miglioramento della precisione di updateProductTimestamp() aggiungendo shopifyVariantId alla clausola WHERE
⚡ Miglioramenti
  • NUOVO: Sistema di blocco temporaneo intelligente usando formato unico TEMP_LOCK_[timestamp]_[productId]
  • NUOVO: Protezione migliorata contro sincronizzazioni concorrenti per sincronizzazioni manuali e automatiche (cron)
  • NUOVO: Precisione migliorata del mapping delle varianti per evitare contaminazione incrociata tra varianti
  • Migliore gestione degli errori e registrazione per operazioni di blocco della sincronizzazione
  • Analisi completa e correzione della gestione delle relazioni prodotto-variante

🚨 Version 2.0.23 - Session 5 (2025-05-30) - CORREZIONI CRITICHE

🐛 Correzioni critiche
  • CRITICO: Corretta sincronizzazione manuale che non funzionava - parametro isManualSync=true mancante
  • CRITICO: Corretto setSyncLock() che creava ID stringa vuoti invece di valori NULL nel database
  • Bug: Corretto messaggio "Nessun prodotto da sincronizzare" che bloccava la sincronizzazione manuale
  • Bug: Rimossa inquinamento del database con ID Shopify non validi
⚡ Nuove funzionalità
  • NUOVO: Tracciamento dei fallimenti di sincronizzazione con campi last_sync_status e last_sync_error
  • NUOVO: Visualizzazione delle statistiche di fallimento nell'interfaccia di amministrazione con avvisi visivi
  • NUOVO: Gestione migliorata dei blocchi di sincronizzazione con tracciamento dello stato ('success', 'error', 'skipped', 'pending')
  • Miglioramento: Schema del database con pulizia automatica dei record non validi
  • Miglioramento: Messaggi di errore completi per sincronizzazioni fallite

🔧 Version 2.0.23 - Session 4 (2025-05-30) - OTTIMIZZAZIONE DEL CODICE

⚡ Miglioramenti principali
  • Fattorizzazione del codice: Creazione del metodo getProductVariants() per eliminare la duplicazione di codice tra importProducts() e importProductsManual()
  • Gestione delle transazioni: Aggiunta gestione transazionale completa con begin...commit/rollback in importProductsManual()
  • Manutenibilità: Unificazione della logica di elaborazione delle varianti tra sincronizzazione automatica e manuale
  • Log migliorati: Aggiunti log dettagliati per il tracking delle transazioni e il monitoraggio degli errori
🔧 Correzioni critiche
  • Variabile indefinita: Corretto bug critico dove $product era indefinito in importProductsManual()
  • Contatore di sincronizzazione: Corretta logica mancante per l'incremento di $numSynced
  • Gestione errori: Migliorata gestione degli errori con rollback automatico
Impatto tecnico: Questo aggiornamento migliora significativamente la robustezza e la manutenibilità del codice di sincronizzazione, con una riduzione di più di 30 righe di codice duplicato.

✅ Version 2.0.23 - Session 3 (2025-05-27) - FINALIZZAZIONE

🔧 Correzioni finali
  • SKU numerici: Corretta ricerca di SKU puramente numerici (es. 00667) nell'interfaccia manuale (Issue #51)
  • Sincronizzazione indesiderata: Corretta sincronizzazione di prodotti senza tag/categorie (Issue #52)
  • Corretto GETPOST('term', 'alphanohtml') che corrompeva SKU numerici in ajax/search_products.php
  • Aggiunta logica di ricerca specializzata per SKU numerici con approcci multipli
  • Implementato filtraggio obbligatorio per categorie nella sincronizzazione
🆕 Nuova funzionalità principale
  • Interfaccia di anteprima categorie: Anteprima completa prima della sincronizzazione manuale (Issue #50)
  • Sistema completo di analisi categorie e anteprima sincronizzazione
  • Interfaccia migliorata con dettagli categorie, barre di progresso e statistiche di riepilogo
  • Analisi in tempo reale tramite endpoint AJAX ajax/preview_sync.php
  • Supporto completo per traduzioni francesi della funzionalità di anteprima

Version 2.0.23 - Maggio 2025

🔧 Refactoring
  • Pulizia del codice: Rimossi metodi di sincronizzazione obsoleti dopo l'unificazione
  • Rimosso metodo deprecato synchronizeProductsToShopify() (239 righe)
  • Rimossi metodi inutilizzati syncProductWithVariants() e syncProductAsVariant()
  • Rimosso metodo helper ridondante getShopifyProductId()
  • Semplificazione della codebase eliminando logica di sincronizzazione duplicata
  • Unificazione di tutta la sincronizzazione per usare il metodo testato importProductsManual()
🐛 Correzioni critiche
  • 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