2.0.23 Historique des versions - Module Shopify Integration pour Dolibarr

Cronologia delle Versioni

🏗️ 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