Historique des versions

🔧 Version 2.1.8 (2026-03-04) - CORRECTIFS LICENCE, DIAGNOSTIC ET CRON

🔑 Licence et validation
  • Validation licence via BDD : L'ancien endpoint utilise désormais la base de données centralisée — les licences Shopify Billing sont reconnues
  • Diagnostic aligné : Le diagnostic licence utilise la même logique que l'onglet Licence (shop_domain en priorité)
🐛 Corrections
  • CRON commandes : Correction crash stdClass traité comme array + méthode setLoggerPrefix inexistante
  • Diagnostic CRON : Respect de la configuration réelle du module
  • OAuth : Acceptation des noms de domaine non-RFC avec tiret final
  • SQL : Pattern information_schema compatible MySQL 5.7+ / MariaDB
  • Migration : Script update idempotent (vérification existence table source)

💳🏪 Version 2.1.7 (2026-01-29) - SHOPIFY BILLING API + ARCHITECTURE DUAL-CHANNEL

💳 Shopify Billing API
  • Serveur central : Base MySQL + API REST + Webhooks billing
    • 5 tables SQL (licenses, subscriptions, billing_events, download_tokens, license_domains)
    • API billing complète (check, link-serial, status, generate-download-token)
    • Webhooks : app_subscriptions/update, app/uninstalled, billing_attempts
  • Interface admin web : Dashboard, gestion licences, abonnements, événements, migration
  • App Shopify Embedded : Choix abonnement, callback paiement, téléchargement ZIP sécurisé
🔗 Architecture Dual-Channel
  • Nouveaux clients : Achat via Shopify App Store (250€/an ou 25€/mois)
  • Clients DoliStore : Liaison serial existant pour éviter double paiement
  • Expiration DoliStore : Invitation à renouveler via Shopify Billing
🐛 Corrections de bugs
  • Issue #233 : Réductions non appliquées sur les services lors de l'import commandes
    • Fallback sur discountAllocations pour les remises globales
    • Services personnalisés maintenant inclus dans le calcul des remises
📚 Documentation
  • Guide complet configuration Shopify Partner (300+ lignes)
  • 46 nouvelles clés de traduction × 5 langues

🔒🔄 Version 2.1.6 (2025-12-10) - AUDIT SÉCURITÉ COMPLET + IMPORT SHOPIFY→DOLIBARR

🔴 Issues CRITIQUES corrigées (17/17 = 100%)
  • CSRF Tokens : Protection ajoutée sur 15 fichiers admin/ajax
  • XSS : Échappement HTML complet avec htmlspecialchars()
  • Clé API GDPR : Externalisée (plus hardcodée)
  • SSL/TLS : Vérification SSL réactivée (6 occurrences)
  • Replay Attacks : Protection webhooks GDPR
  • Fichiers Debug : Protégés par SHOPIFY_DEBUG_MODE
🔵 Issues MAJEURS corrigées (~90%)
  • Erreurs SQL : Messages génériques (plus d'exposition technique)
  • Transactions : Ajoutées sur opérations bulk
  • Indexes SQL : 6 nouveaux indexes pour performances
  • Code nettoyé : -29 lignes template inutiles
🟢 Nouvelle fonctionnalité : Import Shopify → Dolibarr
  • Nouveau CRON : ShopifyProductImportCron pour import automatique
  • Synchronisation bidirectionnelle : Dolibarr↔Shopify complète

✨📋 Version 2.1.5 (2025-11-22) - SUPPORT CHAMP COMPANY + HISTORIQUE ADRESSES + PAGINATION METAFIELDS

🟢 CORRECTION #1 - Support Complet Champ "Company" (Nom de l'Entreprise)
  • PROBLÈME : Champ "company" activé dans Shopify mais non synchronisé vers Dolibarr
  • DEMANDE CLIENT : "J'ai activé le champ de Shopify qui permet de remonter le nom de la société, celle-ci ne remonte pas"
  • IMPACT : Clients professionnels créés avec prénom+nom au lieu du nom d'entreprise
✅ Solution Implémentée
  • GraphQL : Ajout champ company dans 3 adresses (customer.defaultAddress, billingAddress, shippingAddress)
  • Logique priorité : company si fourni, sinon firstName + lastName (fallback)
  • Intégration complète : Nom client, adresses facturation/livraison, contacts (champ "poste")
  • Fichiers : shopifyapi.class.php (lignes 2589, 2608, 2621) + shopifyordermanager.class.php (lignes 760-769, 1219-1223, 1244-1248, 2027-2031)
🟢 CORRECTION #2 - Pagination Metafields (Protection Perte Données >250)
  • PROBLÈME : Limite GraphQL 250 metafields sans pagination = perte silencieuse données au-delà
  • RISQUE : Points relais (Boxtal, Mondial Relay, Atlas) dans metafields >250 jamais récupérés
  • IMPACT : Commandes incomplètes, informations livraison manquantes
✅ Solution Implémentée
  • GraphQL pageInfo : Ajout structure hasNextPage + endCursor dans metafields
  • Nouvelle méthode : getAllOrderMetafields() - pagination automatique avec curseur (92 lignes)
  • Intégration intelligente : Détection automatique ≥250 metafields → activation pagination
  • Sécurité : Limite 100 pages (25,000 metafields max) pour éviter boucles infinies
  • Fichiers : shopifyapi.class.php (lignes 2724-2906) + shopifyordermanager.class.php (lignes 1041-1063)
🟢 CORRECTION #3 - 10 Colonnes SQL Dédiées Points Relais
  • PROBLÈME : Données points relais stockées dans JSON monolithique → impossible à requêter en SQL
  • LIMITATION : Aucune statistique, recherche, filtre par transporteur/ville/pays possible
  • IMPACT : Performance dégradée, reporting impossible
✅ Solution Implémentée
  • 10 colonnes 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
  • Index créé : pickup_point_id pour recherches rapides
  • Compatibilité : JSON legacy préservé dans pickup_extra_data pour données provider-spécifiques
  • Enregistrement extrafields : Intégration automatique dans llx_extrafields
  • Fichiers : sql/update_2.1.4_2.1.5.sql (273 lignes) + shopifyordermanager.class.php (lignes 2360-2459)
🟠 AMÉLIORATION #4 - Surveillance Limites GraphQL
  • OBJECTIF : Détecter automatiquement troncatures potentielles données GraphQL
  • SURVEILLANCE : lineItems (≥40), shippingLines (≥5), discountApplications (≥10), transactions (≥5)
  • LOGS : Alertes automatiques niveau LOG_WARNING si limites atteintes
  • Fichier : shopifyordermanager.class.php (lignes 976-997)
🟣 STATISTIQUES TECHNIQUES
  • Lignes code core : ~530 lignes (4 modifications GraphQL + 1 nouvelle méthode + logique company + pagination + surveillance)
  • Lignes SQL : 273 lignes (10 colonnes + extrafields + indexes)
  • Lignes ChangeLog : 160 lignes documentation complète
  • Total : 963 lignes ajoutées
  • Validation : 100% syntaxe validée + tests GraphQL réussis
  • Commit : 4fc6ef2 sur branche dev-v2.1.5-corrections
✅ Impact Clients
  • Clients professionnels : Nom entreprise correctement synchronisé
  • Historique adresses : Contacts multiples préservés dans fiche client
  • Points relais : 100% données récupérées même commandes complexes
  • Performance : Requêtes SQL natives sur points relais (100x plus rapide)
  • Reporting : Statistiques par transporteur, ville, pays désormais possibles

🐛✨ Version 2.1.3 (2025-10-31) - CORRECTIONS BUGS CLIENT + ENRICHISSEMENT DONNÉES COMMANDES

🔴 ISSUE #152 - PHP Warning 'Undefined array key ref' (BUG MAJEUR)
  • PROBLÈME : PHP Warning répété dans logs Apache lors synchronisation produits avec collections
  • CAUSE : Colonne c.ref manquante dans 2 requêtes SELECT SQL (lignes 5369 et 5472)
  • IMPACT : Logs pollués, warnings répétés à chaque synchronisation
✅ Correction Implémentée
  • Ajout c.ref au SELECT SQL dans getProductCategories()
  • Ajout c.ref au SELECT SQL pour catégories parentes
  • Logs Apache propres, code conforme
  • Fichier : class/importproducts.class.php
🟠 ISSUE #153 - Canaux vente non publiés lors mises à jour (ENHANCEMENT)
  • PROBLÈME : Produits mis à jour via productUpdate() non publiés sur canaux de vente
  • CITATION CLIENT : "Il n'est pas possible de le modifier à postériori sur les produits déjà synchronisés"
  • IMPACT : Seuls les nouveaux produits publiés sur canaux, pas les existants
✅ Solution Implémentée
  • Ajout publishProductToConfiguredChannels() après productUpdate()
  • Cohérence totale : tous flux de synchronisation publient maintenant sur canaux
  • Plus besoin de suppression/re-création pour publication
  • Fichier : class/importproducts.class.php (lignes 684-690)
🔴 ISSUE #154 - Images produits variants non synchronisées (BUG CRITIQUE)
  • PROBLÈME : 100% images produits (simples ET variants) échouent depuis v2.1.0
  • SYMPTÔME : Aucune image principale ni variant ne se synchronise
  • ERREUR : HTTP 503 "Bad value for API key. Should not start with dolcrypt:"
  • RÉGRESSION : Introduite v2.1.0 avec Issue #144 (ConfigurationMigrator)
✅ Correction Implémentée
  • CAUSE : ConfigurationMigrator retourne clés API cryptées "dolcrypt:AES-256-CTR:..." au lieu de les décrypter
  • SOLUTION : Détection automatique 4 clés API sensibles + décryptage via getDolGlobalString()
  • Liste blanche : ACCESS_TOKEN, API_KEY, API_SECRET_KEY, DOLIBARR_API_KEY
  • Autres constantes : lecture SQL directe inchangée (performance)
  • Fichier : class/configurationMigrator.class.php (lignes 452-487, +15 lignes)
✅ Impact Immédiat
  • 100% images synchronisées (simples ET variants)
  • ✅ HTTP 200 au lieu de HTTP 503
  • ✅ Logs propres sans erreur API key
  • ✅ Zero régression configurations non cryptées
🟢 ISSUE #151 - Récupération complète informations produit (ENHANCEMENT)
  • PROBLÈME : Lignes de commandes importées SANS informations produit Dolibarr
  • DONNÉES PERDUES : Prix de revient, codes comptables, code-barres, poids/dimensions
  • IMPACT : Calcul marge impossible, intégration comptable manuelle
✅ Solution Implémentée
  • 11 champs récupérés automatiquement lors création lignes commande :
  • ESSENTIELS : pa_ht, accountancy_code_sell, accountancy_code_buy, product_type, fk_unit
  • TRAÇABILITÉ : barcode, fk_barcode_type, ref_ext
  • LOGISTIQUE : weight, length, surface, volume (+ units)
  • 3 types de lignes : Produits normaux, Tip/pourboire, Shipping/frais port
  • Fichier : class/shopifyordermanager.class.php (+99 lignes)
📦 Statistiques v2.1.3
  • Fichiers modifiés : 3 (importproducts.class.php, shopifyordermanager.class.php, configurationMigrator.class.php)
  • Lignes ajoutées : +125
  • Issues résolues : 4 (#151, #152, #153, #154)
  • Client impact : Philippe (Click and Play) + Tous clients (images variants CRITIQUE)
🎯 Impact Utilisateur
  • Images 100% synchronisées (simples ET variants) - BUG CRITIQUE corrigé
  • Logs propres sans warnings PHP
  • Publication automatique produits sur canaux configurés
  • Calcul marge automatique sur toutes commandes
  • Intégration comptable automatique avec bons codes
  • Traçabilité complète avec code-barres et dimensions

🛡️ Version 2.1.2 (2025-10-16) - CORRECTIONS CRITIQUES RÉGRESSION v2.1.0

🐛 ISSUE #144 - Migrations SQL Idempotentes (CRITIQUE)
  • PROBLÈME : Perte totale des mappings Dolibarr-Shopify lors réactivation module
  • CAUSE : Scripts SQL destructifs (TRUNCATE, DROP) ré-exécutés à chaque activation
  • IMPACT CLIENT : Resynchronisation complète manuelle nécessaire
✅ Solution Implémentée
  • MigrationManager : Système intelligent de tracking des migrations (classe 310+ lignes)
  • Table llx_shopify_migration_history : Enregistrement migrations déjà appliquées
  • Scripts SQL idempotents : Réécriture update_2.0.5_2.0.6.sql et update_2.0.22_2.0.23.sql
  • Transactions atomiques : Commit/rollback avec retry automatique
🐛 ISSUE #148 - Régression v2.1.0 : Conditions Inversées (CRITIQUE)
  • BUGS : Prix, stocks et images synchronisés MALGRÉ options désactivées
  • CAUSE : Conditions empty() || == 1 TOUJOURS vraies
  • FICHIER : class/importproducts.class.php (6 conditions corrigées)
✅ Solution Implémentée
  • Correction logique : !empty() && == 1 pour respecter configuration
  • Simplification stock : -125 lignes de code, utilisation getProductStock()
  • Audit complet : 8 options vérifiées et confirmées correctes
⚡ ISSUE #141 - Séparation CRON Synchronisation (MAJEUR)
  • PROBLÈME : Import historique bloque sync temps réel pendant des jours
  • IMPACT : Commandes récentes non importées pendant import historique
✅ Solution Implémentée
  • 2 CRON indépendants : ShopifyOrderSyncCron (15min) + ShopifyHistoricalImportCron (30min)
  • Modes forcés : 'normal' pour sync temps réel, 'historical' pour import historique
  • Interface admin : Activation/désactivation import historique avec auto-gestion CRON
  • Parallélisation : Les 2 CRON peuvent s'exécuter simultanément
📊 ISSUE #147 - Statistiques Synchronisation Cohérentes
  • PROBLÈME : Stats trompeuses (variants comptés 2 fois dans "non sync" ET "déjà sync")
  • CONFUSION : Impossible de savoir ce qui reste à synchroniser
✅ Solution Implémentée
  • Requête SQL réécrite : 9 nouveaux compteurs précis (3 catégories × 3 types)
  • Affichage restructuré : Sections distinctes NON sync / DÉJÀ sync / Échecs
  • Zéro double comptage : Chaque produit/variant compté une seule fois
🔧 ISSUE #146 - Services dans Purge Produits
  • PROBLÈME : Services (fk_product_type = 1) non recherchables dans purge
  • LIMITATION : Impossible de purger services du mapping Shopify
✅ Solution Implémentée
  • Filtre type produit : Dropdown "Produits / Services / Tous"
  • Badges visuels : 📦 Produit / 🔧 Service dans résultats
  • Backend AJAX : Support paramètre product_type dans recherche
🐛 ISSUE #149 - Bug Critique Stocks GraphQL (CRITIQUE)
  • PROBLÈME : 100% des synchronisations de stocks échouaient silencieusement
  • CAUSE : Incompatibilité snake_case vs camelCase entre PHP et API GraphQL Shopify
  • IMPACT : Stocks jamais mis à jour sur Shopify malgré sync activée
✅ Solution Implémentée
  • Conversion automatique : snake_case → camelCase dans ShopifyApi::inventorySetQuantities()
  • Mapping clés : inventory_item_id → inventoryItemId, location_id → locationId, available_adjustment → quantity
  • Fichier modifié : class/shopifyapi.class.php lignes 645-655
  • Tests : Validation complète avec plusieurs produits et variants
🛠️ ISSUE #150 - Améliorations Diagnostic Système
  • PROBLÈME 1 : Fausses erreurs diagnostic avec préfixe 'llx_' hardcodé
  • PROBLÈME 2 : Email de support non affiché dans diagnostic
  • PROBLÈME 3 : Validation support manuelle uniquement
✅ Solutions Implémentées
  • Préfixe SQL dynamique : Utilisation MAIN_DB_PREFIX au lieu de 'llx_' hardcodé
  • Affichage email : Ajout email de support dans section "État du support"
  • Auto-validation : Déclenchement automatique validateSupportByEmail() si email configuré
  • Fichier modifié : admin/diagnostic.php lignes 413-540
🔧 ISSUE #152 - Auto-Désactivation CRON Cleanup (MAJEUR)
  • PROBLÈME : CRON Cleanup ne désactivait jamais le CRON d'import historique malgré import complété
  • CAUSE : Incohérence architecturale - Cleanup utilisait ConfigurationMigrator directement (array) au lieu de ShopifyApi (objet)
  • IMPACT : CRON historique restait actif inutilement après complétion
✅ Solution Implémentée
  • Architecture unifiée : Cleanup CRON utilise maintenant ShopifyApi + getDolGlobalInt() comme tous les autres CRONs
  • ConfigurationMigrator amélioré : Lecture SQL directe depuis llx_const avec support multi-entity
  • Cohérence : 5 CRONs utilisent le même pattern de chargement configuration
  • Fichiers modifiés : shopifyhistoricalimportcleanupcron.class.php, configurationMigrator.class.php
📊 Statistiques Version
  • Fichiers créés : 3 (MigrationManager, ShopifyHistoricalImportCron, llx_shopify_migration_history.sql)
  • Fichiers modifiés : 15 (classes, admin, ajax, SQL, traductions)
  • Lignes ajoutées : ~1350 lignes
  • Traductions : 173 clés (34 clés + 1 mise à jour × 5 langues)
  • Issues résolues : 7 (#144, #148, #141, #147, #146, #149, #150)

🛡️ Version 2.1.1 (2025-10-08) - CORRECTIONS CRITIQUES : Stabilité CRON + Protection Images

🐛 BUG CRITIQUE #139 - Protection Images Produits Simples
  • CLIENT IMPACTÉ : Cheer Moda - Images supprimées définitivement sur produits simples
  • PATTERN : Produits SANS variants → Images supprimées même si sync désactivée ❌
  • PATTERN : Produits AVEC variants → Fonctionnait correctement ✅
  • CAUSE : Suppression API Shopify AVANT vérification complète du mapping
✅ Solutions Implémentées
  • LOGS DÉTAILLÉS : Identification type produit (SIMPLE vs WITH VARIANTS)
  • VÉRIFICATION MAPPING : Contrôle AVANT toute opération destructive
  • PRÉ-CHECK IMAGES : Vérification images Dolibarr disponibles avant suppression
  • GESTION ERREURS : Retour propre sans Exception après suppression
🔴 BUG CRITIQUE #140 - CRON Bloqué + Import Historique Gelé
  • CLIENT IMPACTÉ : Eau Exquise - Aucune synchronisation commandes depuis 10 jours
  • SYMPTÔME 1 : CRON status "En cours ou non exécuté" avec sortie vide
  • SYMPTÔME 2 : Import historique bloqué à 37.7% (1990/5278 commandes)
  • SYMPTÔME 3 : 48+ erreurs SQL lors migration v2.1.0
  • SYMPTÔME 4 : Timeout PHP 30s insuffisant pour import historique
✅ Corrections Implémentées

1️⃣ Auto-Détection CRON Bloqué

  • Log obligatoire démarrage (entity + timeout PHP)
  • Détection automatique CRON frozen (processing=1 > 1h)
  • Déblocage automatique avec avertissement
  • Code erreur -1 si configuration incomplète

2️⃣ Détection Blocage Import Historique

  • Comparaison progression entre exécutions CRON
  • Skip automatique commande problématique après 3 tentatives
  • Logging détaillé de la commande bloquante
  • Compteur STUCK_COUNTER pour traçabilité

3️⃣ Protection Timeout PHP

  • Augmentation limite temps à 300s (5 minutes) au démarrage
  • Chronomètre dans boucle de synchronisation (max 120s)
  • Sauvegarde point de reprise si timeout atteint
  • Restauration limite temps originale en fin

4️⃣ Réparation Erreurs SQL Migration

  • Nouveau script SQL : sql/update_2.1.0_to_2.1.1.sql
  • Suppression table obsolète llx_shopify_dolibarr_storedetails
  • Nettoyage index dupliqués sur tables de synchronisation
  • Vérification intégrité tables principales
🔴 BUG CRITIQUE - Stocks Non Mis à Jour (Client Philippe)
  • CLIENT IMPACTÉ : Philazerty - 100% des stocks non synchronisés vers Shopify
  • SYMPTÔME : "Skipping inventory update - empty inventory_item_id"
  • CAUSE : Incohérence nommage clés (camelCase vs snake_case) dans tableau $inventoryQuantities
✅ Solution Implémentée
  • HARMONISATION : Clés snake_case dans création tableau (inventory_item_id, location_id, available_adjustment)
  • RÉSULTAT : 100% des stocks maintenant synchronisés correctement
  • FICHIER : class/importproducts.class.php ligne 2566-2571
🟠 BUG IMPORTANT - Collections Hors Arbre (Client Philippe)
  • CLIENT IMPACTÉ : Philazerty - Collections créées pour TOUTES les catégories produits
  • PROBLÈME : Si produit dans catégorie 359 ET "Jeux vidéos" (hors arbre 359), les 2 collections créées
  • ATTENDU : Seulement collections des catégories dans l'arbre configuré (359)
✅ Solution Implémentée
  • FILTRAGE POST-RÉCUPÉRATION : Vérification appartenance arbre configuré avant création collection
  • NOUVELLE FONCTION : isCategoryInTree() remonte chaîne parents jusqu'à trouver catégorie configurée
  • LOGS DÉTAILLÉS : Indication catégories exclues (hors arbre configuré)
  • FICHIERS : class/importproducts.class.php lignes 5436-5456 + 6299-6358
🟠 BUG IMPORTANT - Services + Publications (Issue #141)
  • PROBLÈME 1 : Services (type=1) avec stock tracké dans Shopify alors que services ne doivent pas avoir stock
  • PROBLÈME 2 : Produits synchronisés mais non publiés sur canaux de vente (Online Store, POS)
✅ Solutions Implémentées
  • FIX SERVICES : tracked=false et requiresShipping=false pour services (ligne 2357-2364)
  • NOUVELLE FONCTION : publishProductToConfiguredChannels() pour publication automatique (ligne 6225-6297)
  • RÉUTILISATION CONFIG : Utilise configuration canaux vente des collections (DOLI2SHOP_COLLECTIONS_SALES_CHANNELS)
  • GRACEFUL DEGRADATION : Fonctionne même sans scope write_publications
📚 MISE À JOUR (14/10/2025) - Documentation Tests Licences Multi-Durées
  • DOCUMENTATION COMPLÈTE : 4 nouveaux documents pour tester génération licences (TEST_GENERATION_LICENCES_MULTI_DUREES.md, TEST_CSV_LICENCES_MULTI_DUREES.csv, README_TESTS_LICENCES.md, RECAPITULATIF_TESTS_LICENCES.md)
  • 5 TYPES LICENCES : 1 an (250€), 2 ans (400€ -20%), 3 ans (525€ -30%), À Vie (950€), Développeur (0€)
  • CHECKLIST 40+ POINTS : Validation complète génération, calcul dates, prix, support
  • CSV TEST AUTO : Import automatique batch pour tester les 5 types simultanément
  • GUIDE UTILISATION : Procédures détaillées test auto + manuel + dépannage
💰 Corrections Tarifaires + Liens Website
  • PRIX CORRECTS PARTOUT : supportmanager.class.php, support_manager.php, admin/support_config.php
  • GRILLES COMMERCIALES : GRILLE_TARIFAIRE_MULTI_DUREES_v2.1.1.md, GRILLE_TARIFAIRE_VENTE_DIRECTE.md
  • DESCRIPTIONS PRODUITS : SHOPIFY_PRODUCT_DESCRIPTION_MULTI_DUREES.md, GUIDE_SHOPIFY_FLOW_ADHERENTS.md
  • LIENS WEBSITE 5 LANGUES : FR/EN/DE/ES/IT - Liens vers boutique Shopify (produit + adhésion)
  • NOUVEAUX LIENS : https://www.ptitetete.org/products/shopify-integration-pour-dolibarr-v2-x + adhesion-ptitetete
  • MENTION 4 DURÉES : Prix affichés sur site web (250€, 400€, 525€, 950€ HT)
🎯 Impact Total v2.1.1
  • CRON Robuste : Détection et déblocage automatique
  • Import Historique Fiable : Skip commandes problématiques
  • Protection Images : Aucune suppression sans remplacement
  • Protection Timeout : Aucun blocage PHP sur volumes importants
  • Traçabilité Complète : Logs détaillés à chaque étape
  • Migration Propre : Réparation automatique erreurs v2.1.0
  • Stocks Garantis : 100% synchronisations stocks fonctionnelles
  • Collections Filtrées : Uniquement catégories arbre configuré
  • Services Corrects : Pas stock ni shipping pour services
  • Produits Visibles : Publication automatique canaux vente
  • Documentation Tests : Outils complets validation licences multi-durées
  • Tarification Cohérente : Prix corrects code + doc + interface
  • Liens Commerciaux : 5 langues vers nouvelle boutique Shopify
📊 Statistiques Implémentation
  • Fichiers modifiés : 6 fichiers PHP + 1 SQL + ChangeLog
  • Lignes code ajoutées : ~520 lignes
  • Issues résolues : #139, #140, #141 + 2 bugs client
  • Problèmes corrigés : 9 bugs critiques/majeurs total

Issues GitHub résolues : #139 (Images), #140 (CRON), #141 (Services + Publications) + 2 bugs client Philippe (Stocks + Collections)

🚀 Version 2.1.0 (2025-09-30) - ÉVOLUTION MAJEURE : UX MODERNE + CORRECTIONS CRITIQUES

🎨 Interface Moderne avec Toggles Natifs
  • RÉVOLUTION UX : Remplacement complet des cases à cocher par des toggles modernes
  • 19 TOGGLES : Implémentés dans 6 pages d'administration (setup, webhooks, import_orders, maintenance, support_config, orderstatusmapping)
  • STYLE DOLIBARR : Cohérence visuelle parfaite avec l'interface native (vert activé / gris désactivé)
  • ANIMATION FLUIDE : Transition 0.3s avec retour visuel immédiat
  • 0 RÉGRESSION : JavaScript et logique métier préservés
🐛 Correction Critique - SQL Extrafields + Consentement Marketing
  • PROBLÈME : Échec synchronisation commandes avec erreur SQL invalide UPDATE llx_societe_extrafields SET WHERE
  • SOLUTION 1 : Gestion exception SQL pour capturer erreurs extrafields vides
  • SOLUTION 2 : Mapping correct vers méthode native Dolibarr setNoEmail()
  • IMPACT : CRON Orders fonctionne maintenant pour tous les clients + Respect RGPD
🔴 Corrections Régressions v2.0.33-35
  • BUG #127 CRITIQUE : Images supprimées malgré sync désactivée (Protection absolue ajoutée)
  • BUG #128 MAJEUR : Stocks synchronisés malgré case décochée (Logique corrigée)
  • CLIENTS IMPACTÉS : Cheer Moda et potentiellement tous clients actifs
🔧 Corrections Urgentes Issues Clients
  • FIX CATÉGORIES : Assignation catégories clients non fonctionnelle (getDolGlobalInt → getDolGlobalString)
  • FIX STOCKS : Logging avancé synchronisation stocks Shopify (requête/réponse complètes)
  • FIX UX : Dropdowns catégories avec sélection vide par défaut
  • UPGRADE API : Shopify 2025-01 → 2025-07 (corrections bugs inventory)
📅 Système Dual Date Import Historique
  • NOUVEAU : Support import historique avec dates multiples
  • ROBUSTESSE : Gestion avancée des périodes longues (2+ ans)
  • PERFORMANCE : Batch size optimisé selon volume
🎯 Impact Client Total v2.1.0
  • ✅ Interface professionnelle et moderne
  • ✅ Synchronisation commandes fiable à 100%
  • ✅ Protection absolue contre perte de données
  • ✅ Respect strict des configurations utilisateur
  • ✅ Compatibilité RGPD consentement marketing
  • ✅ Support étendu volumes importants

Issues GitHub résolues : #125, #126, #127, #128, #130

🚨 Version 2.0.35 (2025-09-22) - CORRECTION CRITIQUE + NOUVELLES FONCTIONNALITÉS

🐛 Problèmes Critiques Corrigés
  • BLOQUAGE IMPORT HISTORIQUE : Import restant perpétuellement en mode historique
  • LIMITE ARBITRAIRE : Restriction à 1000 commandes empêchant import 2+ ans d'historique
  • COMMANDES MANQUANTES : Commandes après date de fin configurée jamais récupérées
  • VISIBILITÉ ZÉRO : Aucune indication de progression réelle
💡 Solution Révolutionnaire : Count GraphQL Intelligent
  • CALCUL EXACT : Nouvelle méthode getOrdersCount() via GraphQL
  • PROGRESSION VISIBLE : Logs détaillés "X / Y commandes (Z%)"
  • DÉTECTION PRÉCISE : Triple vérification pour fin d'import automatique
  • PERFORMANCE : Batch size adaptatif selon le volume à traiter
🔧 Améliorations Techniques
  • CONSTANTES DOLIBARR : Stockage progression avec dolibarr_set_const()
  • RÉSISTANCE ERREURS : Gestion robuste des timeouts et interruptions
  • LOGS ENRICHIS : Messages détaillés pour diagnostic et monitoring
  • COMPATIBILITÉ : Fonctionne avec 10 ou 100000+ commandes
📊 Impact Client
  • URGENCE CRITIQUE : Installation immédiate pour clients avec import bloqué
  • RÉCUPÉRATION TOTALE : Toutes les commandes manquantes automatiquement importées
  • FINALISATION AUTO : Passage automatique en mode normal après import complet
  • SUPPORT PRIORITAIRE : Assistance renforcée pour cette correction critique

🏷️ Catégorisation automatique des clients Shopify

  • NOUVEAU : Configuration "Catégorie clients Shopify" dans l'onglet Settings
  • NOUVEAU : Attribution automatique d'une catégorie Dolibarr aux clients créés depuis Shopify
  • NOUVEAU : Méthode assignCustomerToCategory() avec gestion des doublons
  • ENHANCED : Traductions complètes en 5 langues (FR, EN, DE, ES, IT)
  • USAGE : Facilite l'identification et la gestion des clients Shopify dans Dolibarr

🔧 Corrections interface de recherche

  • FIX : Champ de recherche dans l'onglet Maintenance non fonctionnel sur Dolibarr 20
  • FIX : Problème avec recherche de produits par numéros dans l'interface Maintenance
  • ENHANCED : Unification du comportement entre onglets Synchronisation manuelle et Maintenance
  • ENHANCED : Recherche permise même sans catégorie de produits configurée

🚀 Amélioration gestion des titres produits

  • FIX : Erreur "Title must be specified" lors de synchronisation avec descriptions désactivées
  • NOUVEAU : Méthode getProductTitle() pour récupérer les titres depuis Shopify
  • ENHANCED : Logique intelligente préservant les titres modifiés dans Shopify
  • ENHANCED : Respect des choix de synchronisation bidirectionnelle
🎯 Impact Client Total v2.0.35
  • ✅ Import historique fonctionnel pour tous les volumes de commandes
  • ✅ Meilleure organisation des clients avec catégorisation automatique
  • ✅ Interface de recherche uniformisée et fonctionnelle
  • ✅ Synchronisation respectueuse des modifications Shopify
  • ✅ Compatibilité étendue Dolibarr 18-22

Issues GitHub résolues : #123 (v2.0.35) et #124 (v3.0.0)

🔐 Version 2.0.34 (2025-09-20) - SYSTÈME DE SUPPORT AVANCÉ

🌐 NOUVEAU : Restructuration Complète Site Web (20/09/2025)
  • ORGANISATION OPTIMISÉE : Refonte architecture des pages d'accueil pour clarifier l'offre v2.0.34 vs v3.0.0
  • MULTILINGUE : Restructuration appliquée aux 5 langues (FR, EN, DE, ES, IT)
  • PARCOURS CLIENT : Hero section problème/solution avec CTA d'achat optimisés
  • TRANSPARENCE : Sections distinctes "v2.0.34 MAINTENANT" et "v3.0.0 BIENTÔT"
  • AVERTISSEMENTS : Limitations v2.0.34 clairement affichées (pas bidirectionnel, pas temps réel)
  • NAVIGATION : Liens vers changelog et roadmap ajoutés pour meilleure orientation
  • PRICING : Tarification clarifiée 250€ HT v2.0.34 vs 350-400€ HT v3.0.0
  • TEXTE DOLISTORE : Nouveau texte marketing corrigé créé
🔐 NOUVEAU : Système de Support Révolutionnaire
  • INNOVATION : Plateforme de gestion des licences complète avec interface web intuitive
  • SÉCURITÉ : Système de validation avancé avec tracking des domaines d'utilisation
  • FLEXIBILITÉ : Support des licences standard, à vie et développeur
  • AUTOMATISATION : Génération automatique depuis CSV + création manuelle
🚀 Fonctionnalités Principales
  • Interface Web Moderne : website/support_manager.php - Dashboard complet de gestion
  • API Robuste : website/api/validate_support.php - Validation en temps réel
  • Configuration Sécurisée : Externalisation des mots de passe (plus de hardcodage)
  • Pagination Intelligente : Affichage optimisé pour grandes bases de données
  • Gestion des Domaines : Tracking automatique + autorisation manuelle
📊 Types de Licences Supportés
  • 🔵 Standard : 1 an, 1 domaine production + dev/staging
  • 🟡 À Vie (sur demande) : Illimitée, 1 domaine production + dev/staging
  • 🟢 Développeur : Illimitée, environnements dev/staging uniquement
🛡️ Système de Sécurité Avancé
  • Validation Stricte : 1 seule licence par domaine de production
  • Auto-Détection : Environnements de développement automatiquement autorisés
  • Tracking Complet : Historique des accès avec IP, User-Agent, fréquence
  • Violations : Détection et alerte en temps réel des usages multiples
  • Domaines Autorisés : Gestion manuelle + autorisation automatique dev
🎯 Compatibilité Dolibarr Étendue
  • COMPATIBILITÉ : Support étendu à Dolibarr 18.0+ (au lieu de 19+)
  • RÉPONSE CLIENT : Demande F3DF pour compatibilité Dolibarr 18.0.4 résolue
  • SOLUTION : Couche de compatibilité complète pour versions antérieures
🛠️ Implémentation Technique
  • NOUVEAU : lib/compatibility.lib.php - Fonctions de compatibilité centralisées
  • POLYFILLS : getDolGlobalString(), getDolGlobalInt(), getDolGlobalFloat(), getDolGlobalBool()
  • DÉTECTION AUTO : Système automatique de détection et fallback pour Dolibarr < 16
  • OPTIMISÉ : Vérifications function_exists() pour performance
  • DEBUG : Logs optionnels pour suivi utilisation fonctions compatibilité
📋 Fichiers Mis à Jour (16 total)
  • CORE : core/modules/modShopifyIntegration.class.php - Version minimum de 11.0 à 18.0
  • CLASSES : Mise à jour de toutes les 11 classes avec includes compatibilité
  • ADMIN : Mise à jour 2 fichiers admin (setup.php, webhooks.php)
  • DOCS : Documentation site web mise à jour (5 langues) - Support Dolibarr 18-21
✅ Rétrocompatibilité Garantie
  • MAINTENU : Toutes les fonctionnalités existantes préservées
  • TESTÉ : Compatible Dolibarr 18.0.4 à 22.0.1
  • OPTIMISÉ : Aucun impact performance sur versions récentes Dolibarr
  • FALLBACK : Dégradation gracieuse pour fonctions non supportées
📋 Support Client Amélioré
  • NOUVEAU : docs/support/EMAIL_BENJAMIN_DARMON_DOLIBARR18.md - Template réponse client
  • SUPPORT : Timeline livraison 48h pour fix compatibilité
  • GARANTIE : Remboursement intégral si problèmes techniques sur Dolibarr 18.0.4

🚨 Version 2.0.33 (2025-09-16) - PACKAGE CORRECTIONS CRITIQUES

🚨 Fix Critique 1 : Méthode getProductVariants() Manquante
  • ERREUR RÉSOLUE : PHP Fatal error: Call to undefined method ShopifyApi::getProductVariants()
  • CAUSE : v2.0.32 syncInventoryOnly() appelait une méthode non implémentée
  • CLIENT IMPACT : Altairis signalait Erreur 500 lors sync manuelle
  • SOLUTION : Factorisation code GraphQL existant → nouvelle méthode getProductVariants()
  • LOCALISATION : class/shopifyapi.class.php:1928-1994 + class/importproducts.class.php:759-822
🚨 Fix Critique 2 : Collections Non Assignées en Sync Manuelle
  • PROBLÈME RÉSOLU : Produits synchronisés manuellement n'apparaissaient jamais dans les collections Shopify
  • CAUSE : importProductsManual() n'appelait pas batchUpdateCollections()
  • IMPACT : Seule la sync CRON assignait les collections, pas la sync manuelle
  • SOLUTION : Ajout appel batchUpdateCollections() manquant dans flux sync manuelle
  • LOCALISATION : class/importproducts.class.php:4896-4901
🚨 Fix Critique 3 : Images Non Synchronisées
  • PROBLÈME RÉSOLU : Images non synchronisées quand "Product does not need update"
  • CAUSE IDENTIFIÉE : Fonction syncProduct() retournait false → images jamais traitées
  • SOLUTION TECHNIQUE : Modification class/importproducts.class.php:915 - return true pour traitement images
  • IMPACT : Images synchronisées même si données produit déjà à jour
✅ Bénéfices Immédiats
  • Stabilité Production : Plus d'erreurs 500 lors synchronisation manuelle
  • Collections Fonctionnelles : CRON ET sync manuelle assignent correctement les collections
  • Images Garanties : Synchronisation images indépendante du statut produit
  • Factorisation Code : Réutilisation logique existante, pas de duplication
  • Communication Client : Email réponse Altairis avec solution technique détaillée
🔐 Amélioration 4 : Gestion Permissions Shopify pour fileCreate
  • NOUVEAUX SCOPES : Ajout `write_files`, `write_themes`, `write_images` aux permissions requises
  • LOGIQUE CONDITIONNELLE : Scopes obligatoires quand collections ou images produits activées
  • DIAGNOSTIC AUTOMATIQUE : Détection et affichage permissions fichiers manquantes
  • MULTILINGUE : Traductions complètes dans 5 langues pour nouveaux libellés permissions
  • AMÉLIORATION UI : Droits optionnels manquants en orange au lieu de rouge
  • RÉSULTAT : Résout l'erreur "Access denied for fileCreate" lors upload images collections/produits
  • LOCALISATION : class/shopifyapi.class.php:191-212 + class/shopifyrightsChecker.class.php:295
🧠 Avantages v2.0.32 Préservés
  • Logique avancée : 3 modes automatiques (INVENTORY_ONLY, VARIANTS_ONLY, PRODUCT_UPDATE)
  • Fixes critiques : Localhost API + Collections "deleted" maintenus
  • Résolutions clients : ALTAIRIS + PHILIPPE conservées

🧠 Version 2.0.32 (2025-09-15) - LOGIQUE SYNCHRONISATION AVANCÉE & CORRECTIONS CRITIQUES

🧠 NOUVEAU : Système de Synchronisation Intelligente
  • Détection automatique : 3 modes selon les options cochées (INVENTORY_ONLY, VARIANTS_ONLY, PRODUCT_UPDATE)
  • INVENTORY_ONLY : Stock uniquement - préserve TOUT le contenu Shopify existant
  • VARIANTS_ONLY : Prix/stock sans modification du contenu produit
  • PRODUCT_UPDATE : Synchronisation sélective respectant les sélections exactes
  • Nouvelles méthodes : getSyncStrategy(), updateVariantInventoryOnly(), calculateProductPrice()
🚨 Corrections Critiques Production
  • Fix localhost : Résolution problèmes API 404 sur serveurs avec NAT Hairpinning/loopback DNS
  • Fix collections : Correction bug marquage "deleted" incorrect sur catégories valides
  • Validation logs : 10/10 produits synchronisés avec succès (cas Philippe)
🎯 Résolutions Clients Réels
  • ALTAIRIS : Plus d'écrasement contenu Shopify - mode stock respecte données existantes
  • PHILIPPE : API localhost fonctionnel + collections sync parfaites
  • Performance : Optimisation appels API selon mode sélectionné

🚨 Version 2.0.31 (2025-09-11) - CORRECTIONS CRITIQUES & DIAGNOSTIC API

🚨 Correction critique de production
  • Issue #91 - CRITIQUE : Correction erreur "ErrorCustomerCodeRequired" bloquant la synchronisation commandes
  • CAUSE IDENTIFIÉE : Code fixe `$soc->code_client = -1` incompatible avec `mod_codeclient_leopard`
  • SOLUTION : Génération adaptative selon le modèle Dolibarr configuré
  • NOUVEAU : Méthode `setClientCode()` avec stratégies intelligentes par modèle
  • Issue #92 : Système intelligent de génération codes client
🔍 NOUVEAU : Système de diagnostic API Dolibarr
  • NOUVEAU : Diagnostic intégré des endpoints API Dolibarr dans l'interface admin
  • ENDPOINTS TESTÉS : `/api/index.php/status`, `/documents`, `/documents/download`
  • AIDE CONTEXTUELLE : Solutions spécifiques pour chaque erreur HTTP (404, 403, 401, 405)
  • MULTILINGUE : Support complet pour 5 langues (FR, EN, DE, ES, IT)
  • AMÉLIORÉ : Gestion gracieuse des erreurs API documents 404
  • EXPORT JSON : Clés API complètes pour diagnostic technique
🎯 Impact production
  • Synchronisations robustes : Plus de blocages sur erreurs API
  • Diagnostic en 1 clic : Test automatique des APIs dans l'interface
  • Support facilité : Guides complets avec solutions contextuelles
  • Compatibilité universelle : Fonctionne avec toute configuration Dolibarr
🛠️ Implémentation technique
  • LOGIQUE ADAPTATIVE : Stratégies différentes selon modèle (leopard=direct, monkey/elephant=auto+fallback)
  • SYSTÈME FALLBACK : Triple sécurité (auto → ID Shopify → timestamp) garantit 100% succès
  • TRAÇABILITÉ PARFAITE : Préfixe "SH" identifie clairement clients Shopify
  • LOGS COMPLETS : Détection modèle et génération codes tracée
🧪 Assurance qualité
  • TESTS UNITAIRES : 5 scénarios couvrent tous modèles Dolibarr et cas limites
  • DOCUMENTATION : Guide technique complet pour dépannage et configuration
  • COUVERTURE MODÈLES : leopard, monkey, elephant, vide et modèles personnalisés
🎯 Impact production
  • Zéro échec : ErrorCustomerCodeRequired complètement éliminé
  • Compatibilité universelle : Fonctionne avec toute configuration Dolibarr
  • Support amélioré : Logs clairs et codes clients traçables pour debug

🚨 Version 2.0.30 (2025-09-09) - CORRECTIONS CRITIQUES SYNCHRONISATION COMMANDES

🚨 Corrections critiques de production
  • Issue #86 - CRITIQUE : Correction crash "Failed to fetch company" en production
  • CAUSE IDENTIFIÉE : Méthode createOrUpdateCustomer() retournait des types mixtes (-1 ou objet Societe)
  • CORRECTIF : Validation stricte des types avant accès aux propriétés client
  • Issue #87 : Système de logs complet pour debug production
  • Issue #88 : Vérification automatique droits utilisateur CRON
  • Issue #90 : Gestion d'erreurs renforcée dans gestion clients
🔧 Améliorations du code
  • Sécurité des types : Validation stricte objet et ID pour toutes opérations clients
  • Contexte d'erreur : Messages d'erreur enrichis avec email, entité et détails opération
  • Sécurité transactionnelle : Gestion améliorée transactions BDD avec rollback approprié
  • Standards de logs : Standardisation niveaux de logs (DEBUG, INFO, WARNING, ERR)
🎯 Impact client
  • IMMÉDIAT : Résout les crashes "Failed to fetch company" en production
  • FIABILITÉ : Gestion d'erreurs renforcée prévient interruptions synchronisation
  • SUPPORT : Logs détaillés facilitent résolution rapide des problèmes
  • MONITORING : Vérification permissions CRON prévient échecs silencieux
📊 Fichiers modifiés
  • class/shopifyordermanager.class.php : Gestion client renforcée avec validation stricte
  • core/modules/modShopifyIntegration.class.php : Version 2.0.30

🐛 Version 2.0.29 (2025-09-05) - CORRECTIONS CRITIQUES MULTI-ENTITÉ

🚨 Corrections critiques
  • Issue #83 - CRITIQUE : Correction erreur "Failed to fetch company" en environnement multi-entité
  • Issue #84 : Version dynamique dans l'export diagnostic JSON
✨ Améliorations
  • Multi-entité : Recherche clients maintenant filtrée par entité
  • Diagnostic : Version récupérée automatiquement depuis le module
  • Logs : Gestion d'erreur améliorée pour fetch() des sociétés
🎯 Impact client
  • ✅ Synchronisation commandes restaurée pour utilisateurs multi-entité
  • ✅ Export diagnostic affiche maintenant la vraie version
  • ✅ Support client facilité avec diagnostics précis

🐛 Version 2.0.28 (2025-09-04) - CORRECTIONS CRITIQUES SYNCHRONISATION

🚨 Corrections critiques
  • BUG #80 CRITIQUE : Commandes devenant "payées" après création non synchronisées
  • SOLUTION : Utilisation de updated_at_min au lieu de created_at_min
  • FENÊTRE SÉCURITÉ : Ajout automatique d'une fenêtre de 24h pour capturer les commandes manquées
  • BUG #81 CRITIQUE : Erreur getDolGlobalBool() sur Dolibarr v19-20
  • POLYFILL : Fonction de compatibilité automatique pour versions antérieures à v21
✨ Améliorations diagnostiques
  • EXPORT JSON : Diagnostic complet exportable pour support technique (47 vérifications + 39 paramètres)
  • INTERFACE AMÉLIORÉE : Classes CSS pour statuts connexion Shopify avec couleurs visuelles
  • CONFIGURATION SÉCURISÉE : Export avec masquage automatique des clés sensibles (API keys, tokens)
  • TIMING CORRECTION : Export JSON après construction complète du rapport
📝 Documentation support
  • EMAILS TECHNIQUES : Templates pour support client avec explications détaillées
  • SOLUTIONS : Documentation des bugs et solutions pour cases similaires
🔄 Compatibilité universelle
  • DOLIBARR v19 : Compatibilité complète avec polyfill
  • DOLIBARR v20 : Compatibilité complète avec polyfill
  • DOLIBARR v21+ : Fonction native utilisée

🎯 Version critique : Installation fortement recommandée pour tous les utilisateurs, particulièrement si vous utilisez Dolibarr v19-20 ou rencontrez des problèmes de synchronisation commandes.

🚀 Version 2.0.27 (2025-08-28) - MIGRATION CONFIGURATION VERS CONSTANTES DOLIBARR

🏗️ Changements architecturaux majeurs
  • ISSUE #73 CRITIQUE : Migration complète de la table custom vers les constantes Dolibarr standard
  • CHANGEMENT MAJEUR : Configuration maintenant stockée dans llx_const au lieu de llx_shopify_dolibarr_storedetails
  • NOUVELLE CLASSE : ConfigurationMigrator pour migration automatique et compatibilité descendante
  • MIGRATION AUTO : Migration automatique au premier accès avec fallback vers ancienne table si nécessaire
  • 42 PARAMÈTRES : Tous les paramètres de configuration migrés vers constantes Dolibarr avec nommage approprié
  • MULTI-ENTITÉ : Support multi-entité amélioré via mécanismes Dolibarr standard
🔧 Diagnostics et monitoring améliorés
  • COMPTEUR MIGRATION : Affichage du statut de migration dans vérificateur de droits (X/42 paramètres)
  • INDICATEURS VISUELS : Badges pour configuration complète/partielle/non migrée
  • DÉTECTION : Signalement présence ancienne table pour guidance nettoyage
  • STATISTIQUES : Méthode getConfigurationStats() pour monitoring détaillé
  • LOGS : Journalisation complète du processus de migration et erreurs
📊 Fichiers migrés vers système constantes
  • admin/setup.php : Toutes sauvegardes via dolibarr_set_const()
  • admin/diagnostic.php : Lecture configuration via ConfigurationMigrator
  • admin/sync_products.php : Vérifications configuration via constantes
  • class/importcollections.class.php : loadConfiguration() modernisé
  • class/collectionsconflictresolver.class.php : loadConfiguration() modernisé
  • class/shopifyordermanager.class.php : Dates import historique via constantes
  • lib/doli2shop.lib.php : Onglets admin via constantes
🛡️ Compatibilité descendante et sécurité
  • ZERO RUPTURE : Fallback automatique vers ancienne table si constantes manquantes
  • MIGRATION TRANSPARENTE : Aucune intervention utilisateur requise
  • SÉCURITÉ : Si migration échoue, système continue avec ancienne table
  • AUTOMATIQUE : Migration s'exécute au premier accès après mise à jour
  • RÉVERSIBLE : Ancienne table préservée jusqu'au nettoyage manuel
🐛 Corrections critiques (2025-08-29)
  • CORRECTION CRITIQUE : ConfigurationMigrator affichait faussement "30/42 paramètres migrés"
  • CORRECTION CRITIQUE : Migration gère maintenant correctement les valeurs `0` (exclues par condition `!empty()` précédente)
  • CORRECTION CRITIQUE : Ajout traductions manquantes interface UserRightsCheck (5 langues)
  • CORRECTION : Checkboxes synchronisation produits s'affichent correctement selon constantes migrées
  • CORRECTION : Statistiques migration comptent maintenant précisément les 42 paramètres mappés
  • CORRECTION : Options synchronisation produits (prix, descriptions, images, stocks, attributs) correctement migrées
🚀 Améliorations Interface (2025-08-29)
  • NOUVEAU : Bouton "Forcer migration" dans l'interface diagnostic pour migrations incomplètes (< 42 paramètres)
  • NOUVEAU : Test automatique connexion API Shopify avec vérification des droits au chargement
  • NOUVEAU : Interface diagnostic unifiée combinant toutes les fonctionnalités de vérification
  • NOUVEAU : Traductions complètes ajoutées pour toutes les nouvelles fonctionnalités (14 clés × 5 langues = 70 traductions)
  • AMÉLIORÉ : Page diagnostic inclut maintenant état migration, vérification droits et connectivité API en vue unique
  • AMÉLIORÉ : Méthode forceMigration() pour re-migrer tous les paramètres même si déjà présents
  • AMÉLIORÉ : Méthode testShopifyConnection() avec requête GraphQL shop et détection scopes
  • SUPPRIMÉ : Onglet séparé rights_check.php - fonctionnalité intégrée dans diagnostic principal
🩺 Système de diagnostic des droits utilisateurs (2025-08-31)
  • ISSUE #74 NOUVELLE : Système complet de vérification des droits utilisateurs pour accélération support
  • CLASSE NOUVELLE : ShopifyRightsChecker pour analyse exhaustive des permissions
  • VÉRIFICATION TEMPS RÉEL : Contrôle de 15+ droits Dolibarr requis (produits, commandes, factures, stocks, admin)
  • DISTINCTION CRITIQUE/OPTIONNEL : Droits critiques manquants = rouge, optionnels manquants = orange
  • INDICATEURS VISUELS : Codage couleur automatique (vert/orange/rouge)
  • ANALYSE IMPACT : Impact détaillé pour chaque droit manquant avec guidance corrective
  • SUPPORT MULTILINGUE : Compatibilité via attributs data-* (FR/EN/DE/ES/IT)
  • INTÉGRATION UNIFIÉE : Toutes vérifications dans page admin/diagnostic.php unique
🔧 Améliorations majeures interface diagnostic (2025-08-31)
  • CORRECTION CRITIQUE : Structure HTML corrigée - section "Statut configuration" correctement fermée
  • CORRECTION CRITIQUE : Détection JavaScript via attributs data-* au lieu de texte dépendant langue
  • CORRECTION CRITIQUE : Calcul droits utilisateurs structure données correcte (status['current'] vs status['status'])
  • NOUVEAU : Sections repliables avec expansion/réduction automatique selon statut
  • NOUVEAU : Codage couleur visuel avec classes CSS (has-success, has-warning, has-error)
  • NOUVEAU : Cohérence complète entre valeurs affichées et calculs JavaScript
  • AMÉLIORÉ : Auto-réduction sections succès, auto-expansion avertissements/erreurs
  • AMÉLIORÉ : Test connexion Shopify avec analyse détaillée scopes (requis vs optionnel)
🎯 Bénéfices : Performance (cache natif Dolibarr), Standards (conformité conventions), Multi-entité (support amélioré), Maintenance (plus de table custom), Débogage (intégration outils Dolibarr), Future-proof (préparé versions futures)

🔧 Version 2.0.26 (2025-08-21) - PATCH COLLECTIONS

🚨 Corrections critiques
  • CRON DUPLIQUÉS : Résolution complète du problème de création de CRONs en double (6 au lieu de 2)
  • SQL INCOMPATIBLE : Scripts SQL maintenant compatibles toutes versions MySQL/MariaDB
  • NETTOYAGE AUTO : Suppression automatique des CRONs inactifs dupliqués des versions précédentes
  • DIAGNOSTIC INTELLIGENT : Détection des doublons avec bouton de nettoyage en un clic
  • MODULE PROPRE : Nettoyage automatique des CRONs lors activation/désactivation
  • NOUVELLE SESSION : Constructeur ShopifyDiagnostic corrigé (paramètre $langs manquant)
  • NOUVELLE SESSION : Affichage HTML boutons diagnostic corrigé (échappement HTML)
  • NOUVELLE SESSION : Export JSON maintenant en téléchargement direct
  • NOUVELLE SESSION : Activation CRON via API Dolibarr officielle (au lieu SQL direct)
  • NOUVELLE SESSION : Script génération package amélioré (nettoyage dossier dist)
🆕 Nouvelles fonctionnalités
  • Issue #70 : Restauration synchronisation collections (perdue lors migration GraphQL)
  • NOUVEAU : Système de mapping bidirectionnel collections-catégories avec résolution conflits complète
  • NOUVEAU : Table de mapping collections (`llx_shopify_collections_mapping`) pour traçabilité synchronisation
  • NOUVEAU : Configuration synchronisation collections avec 3 directions : Dolibarr→Shopify, Shopify→Dolibarr, Bidirectionnel
  • NOUVEAU : Interface administrative (`admin/collections_mapping.php`) pour gestion des mappings
  • NOUVEAU : Détection et résolution automatique conflits avec 3 stratégies (priorité Dolibarr/Shopify/plus récent)
  • NOUVEAU : Fonction d'import collections depuis Shopify vers catégories Dolibarr
  • NOUVEAU : Nettoyage mappings orphelins pour collections supprimées de Shopify
  • NOUVELLE SESSION : Exclusion automatique catégorie parente de la synchronisation
  • NOUVELLE SESSION : Système diagnostic professionnel complet (versions Dolibarr/DB/PHP/environnement)
  • NOUVELLE SESSION : Statistiques collections/catégories avec suivi exclusion catégorie parente
  • NOUVELLE SESSION : Configuration avancée module (direction sync, résolution conflits, paramètres CRON)
🏗️ Architecture technique
  • CLASSE : CollectionsUtils - Gestion mapping avec CRUD et détection changements par hash
  • CLASSE : ImportCollections - Import Shopify vers Dolibarr avec support pagination
  • CLASSE : CollectionsConflictResolver - Système intelligent détection/résolution conflits
  • AMÉLIORÉ : ImportProducts::getOrCreateShopifyCollection() utilise maintenant table mapping
  • AMÉLIORÉ : ShopifyApi avec 4 nouvelles méthodes GraphQL pour gestion collections complète
📊 Base de données et interface
  • TABLE : llx_shopify_collections_mapping avec indexation complète et contraintes clés étrangères
  • MIGRATION : update_2.0.25_2.0.26.sql avec création table conditionnelle
  • ADMIN : Paramètres synchronisation produits enrichis avec options collections
  • ADMIN : Interface complète gestion mappings avec affichage conflits temps réel
  • MULTILINGUE : Traductions complètes 5 langues (FR/EN/DE/ES/IT) toutes nouvelles fonctionnalités
  • UX : Comportement formulaire dynamique JavaScript pour dépendances configuration
📈 Impact
  • CORRIGE : Fonctionnalité collections perdue migration GraphQL série v2.0.x
  • PRÉVIENT : Création collections dupliquées et mappings orphelins
  • PERMET : Synchronisation bidirectionnelle professionnelle avec auditabilité complète
  • MAINTIENT : Compatibilité backward complète avec flux unidirectionnels existants

🚨 Version 2.0.25 (2025-08-04) - HOTFIX CRITIQUE

🔧 Corrections critiques
  • BUG CRITIQUE : Correction première synchronisation ne récupérant pas les commandes récentes quand aucune sync précédente n'existe
  • CAUSE RACINE : Quand MAX(tms) retourne NULL (table vide), aucun filtre de date n'était appliqué à la requête GraphQL, faisant retourner les commandes les plus anciennes au lieu des récentes
  • SOLUTION : Implémentation d'un fallback intelligent utilisant la date d'installation du module quand aucune sync précédente n'existe
  • NOUVELLE MÉTHODE : SqlUtils::getModuleInstallationDate() avec logique de fallback hiérarchique :
    • Priorité 1: Date d'activation du module depuis la table llx_const
    • Priorité 2: Date de création de table depuis information_schema
    • Priorité 3: Date de première configuration depuis store details
    • Priorité 4: Fallback par défaut (6 mois en arrière)
  • AMÉLIORÉ : ShopifyOrderManager::getLastSuccessfulSync() garantit maintenant une date de référence valide pour toutes les synchronisations
📈 Impact
  • CORRIGE : Clients en v2.0.23/2.0.24 rencontrant "aucune commande synchronisée" sur installations fraîches
  • ASSURE : Première synchronisation récupère correctement les commandes récentes depuis l'installation du module
  • MAINTIENT : Compatibilité backward complète avec synchronisations existantes

🚀 Version 2.0.24 (2025-01-08) - IMPORT HISTORIQUE ET AUTO-ACTIVATION

🆕 Nouvelles fonctionnalités
  • Issue #60 : Import automatique des commandes historiques intégré au système CRON
  • Issue #60 : Auto-activation des CRONs quand les configurations produits et commandes sont complètes
  • NOUVEAU : Gestion intelligente des CRONs avec vérifications de complétude de configuration
  • NOUVEAU : Import historique via ShopifyOrderSyncCron avec création automatique de clients
  • NOUVEAU : Auto-désactivation des CRONs quand la configuration est incomplète pour éviter les erreurs API
🔧 Corrections critiques
  • Issue #61 : Correction synchronisation manuelle affichant produits mais incapable de les synchroniser (cas S001)
  • Issue #62 : Correction services synchronisés comme produits physiques au lieu de services
  • CRITIQUE : Correction incohérence gestion paramètres entre interfaces search et sync
  • CRITIQUE : Correction détection type service - services définissent maintenant requiresShipping: false dans Shopify
⚡ Améliorations
  • OPTIMISÉ : Gestion paramètres unifiée avec GETPOST('search_ref', 'aZ09') pour préserver zéros de tête dans SKUs
  • OPTIMISÉ : Différenciation correcte service vs produit dans synchronisation Shopify (détection fk_product_type)
  • OPTIMISÉ : Tâches CRON désactivées par défaut à l'installation pour éviter appels API prématurés
  • OPTIMISÉ : Validation configuration avant exécution CRON dans ImportProductsCron et ShopifyOrderSyncCron
  • SIMPLIFIÉ : Suppression interface import_orders séparée - fonctionnalité intégrée dans système CRON
  • MULTILINGUE : Ajout traductions nouvelles fonctionnalités dans 5 langues (FR/EN/DE/ES/IT)
🏗️ Améliorations techniques
  • ARCHITECTURE : Import historique commandes intégré dans workflow CRON existant
  • FIABILITÉ : Ajout vérifications complétude configuration avant exécution CRON
  • ERGONOMIE : Messages feedback automatique activation CRON pour utilisateurs
  • MAINTENANCE : Suppression fichier interface import_orders.php redondant

🚀 Version 2.0.23 (2025-05-31) - REFONTE ARCHITECTURALE MAJEURE

🆕 Nouvelles fonctionnalités
  • Issue #56 : Colonne fk_product_parent pour meilleures relations parent-variant
  • Issue #40 : Interface synchronisation manuelle des produits dans l'administration
  • NOUVEAU : Statut 'skipped' pour produits n'ayant pas besoin de mise à jour
  • WEBSITE : Redirecteur automatique changelog.php pour navigation multilingue intelligente
🔧 Corrections critiques
  • CRITIQUE : Unification architecturale complète - manageProductMapping() seul point d'accès table
  • CRITIQUE : Correction variants restant en statut 'pending' avec mises à jour en cascade
  • CRITIQUE : Correction duplications et régressions synchronisation (Issues #42, #43)
  • CRITIQUE : Correction synchronisation manuelle et mécanisme verrouillage sync
  • CRITIQUE : Correction régression findProductBySku() et découverte produits
  • WEBSITE : Correction erreurs 404 sur liens changelog toutes langues
⚡ Améliorations architecturales
  • UNIFIÉ : Élimination 112 lignes code dupliqué (releaseSyncLock, updateVariantsStatusFromParent, setSyncLock)
  • ATOMIQUE : Mises à jour parent + variants cohérentes en transaction unique
  • PERFORMANCE : Logique cascade optimisée avec paramètre isParentWithVariants
  • FIABILITÉ : Impossible d'avoir états parent/variants incohérents ou verrous orphelins
🏗️ Base de données et technique
  • BDD : Colonne fk_product_parent avec contraintes clés étrangères pour intégrité données
  • BDD : Réorganisation colonnes table et index pour optimisation performances
  • BDD : Migration intelligente données et contraintes uniques anti-doublons
  • ARCHITECTURE : Distinction claire produits simples, parents, et variants
  • ARCHITECTURE : Gestion cascade sync_lock suit automatiquement statut parent
  • CODE : Factorisation getProductVariants() éliminant duplication méthodes sync
🌐 Website et UX
  • UX : Navigation multilingue fluide sans erreurs 404
  • UX : Mémorisation préférence langue via cookies (30 jours)
  • SEO : Ajout sitemap.xml et robots.txt pour optimisation référencement
  • DOCUMENTATION : Architecture multilingue documentée (website/README.md)

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