Versionshistorie

🔧 Version 2.1.8 (04.03.2026) - LIZENZ-, DIAGNOSE- UND CRON-KORREKTUREN

🔑 Lizenz und Validierung
  • Datenbank-Lizenzvalidierung: Der alte Endpunkt nutzt jetzt die zentrale Datenbank — Shopify Billing Lizenzen werden korrekt erkannt
  • Diagnose angepasst: Die Lizenzdiagnose nutzt dieselbe Logik wie der Lizenz-Tab (shop_domain Priorität)
🐛 Fehlerbehebungen
  • Bestell-CRON: Absturz behoben bei stdClass als Array + fehlende setLoggerPrefix-Methode
  • CRON-Diagnose: Respektiert jetzt die tatsächliche Modulkonfiguration
  • OAuth: Akzeptiert nicht-RFC-konforme Domainnamen mit abschließendem Bindestrich
  • SQL: information_schema-Pattern kompatibel mit MySQL 5.7+ / MariaDB
  • Migration: Idempotentes Update-Skript (prüft Existenz der Quelltabelle)

💳🏪 Version 2.1.7 (29.01.2026) - SHOPIFY BILLING API + DUAL-CHANNEL ARCHITEKTUR

💳 Shopify Billing API
  • Zentraler Server: MySQL-Datenbank + REST API + Billing Webhooks
    • 5 SQL-Tabellen (licenses, subscriptions, billing_events, download_tokens, license_domains)
    • Vollständige Billing API (check, link-serial, status, generate-download-token)
    • Webhooks: app_subscriptions/update, app/uninstalled, billing_attempts
  • Web-Admin-Interface: Dashboard, Lizenzverwaltung, Abonnements, Events, Migration
  • Shopify Embedded App: Abonnementwahl, Zahlungs-Callback, sicherer ZIP-Download
🔗 Dual-Channel-Architektur
  • Neukunden: Kauf über Shopify App Store (250€/Jahr oder 25€/Monat)
  • DoliStore-Kunden: Bestehende Seriennummer verknüpfen um Doppelzahlung zu vermeiden
  • DoliStore-Ablauf: Einladung zur Verlängerung über Shopify Billing
🐛 Fehlerbehebungen
  • Issue #233: Rabatte nicht auf Dienstleistungen beim Bestellimport angewendet
    • Fallback auf discountAllocations für globale Rabatte
    • Benutzerdefinierte Dienstleistungen jetzt in Rabattberechnung enthalten
📚 Dokumentation
  • Vollständiger Shopify Partner Konfigurationsleitfaden (300+ Zeilen)
  • 46 neue Übersetzungsschlüssel × 5 Sprachen

🔒🔄 Version 2.1.6 (10.12.2025) - VOLLSTÄNDIGES SICHERHEITS-AUDIT + SHOPIFY→DOLIBARR IMPORT

🔴 KRITISCHE Probleme behoben (17/17 = 100%)
  • CSRF-Tokens: Schutz für 15 Admin/Ajax-Dateien hinzugefügt
  • XSS: Vollständiges HTML-Escaping mit htmlspecialchars()
  • GDPR API-Schlüssel: Externalisiert (nicht mehr fest codiert)
  • SSL/TLS: SSL-Verifizierung reaktiviert (6 Vorkommen)
  • Replay-Angriffe: GDPR-Webhooks-Schutz
  • Debug-Dateien: Geschützt durch SHOPIFY_DEBUG_MODE
🔵 WICHTIGE Probleme behoben (~90%)
  • SQL-Fehler: Generische Meldungen (keine technische Offenlegung)
  • Transaktionen: Für Massenoperationen hinzugefügt
  • SQL-Indizes: 6 neue Indizes für Leistung
  • Code-Bereinigung: -29 ungenutzte Template-Zeilen
🟢 Neue Funktion: Shopify → Dolibarr Import
  • Neuer CRON: ShopifyProductImportCron für automatischen Import
  • Bidirektionale Synchronisation: Vollständige Dolibarr↔Shopify Synchronisation

✨📋 Version 2.1.5 (22.11.2025) - FIRMENFELD-UNTERSTÜTZUNG + ADRESSVERLAUF + METAFIELDS-PAGINIERUNG

🟢 KORREKTUR #1 - Vollständige Unterstützung des "Firma"-Felds (Firmenname)
  • PROBLEM: "Firma"-Feld in Shopify aktiviert, aber nicht mit Dolibarr synchronisiert
  • KUNDENANFRAGE: "Ich habe das Shopify-Feld aktiviert, das den Firmennamen abruft, aber es wird nicht übertragen"
  • AUSWIRKUNG: Geschäftskunden mit Vorname + Nachname statt Firmenname erstellt
✅ Implementierte Lösung
  • GraphQL: company-Feld in 3 Adressen hinzugefügt (customer.defaultAddress, billingAddress, shippingAddress)
  • Prioritätslogik: company falls vorhanden, sonst firstName + lastName (Fallback)
  • Vollständige Integration: Kundenname, Rechnungs-/Lieferadressen, Kontakte (Feld "Position")
  • Dateien: shopifyapi.class.php (Zeilen 2589, 2608, 2621) + shopifyordermanager.class.php (Zeilen 760-769, 1219-1223, 1244-1248, 2027-2031)
🟢 KORREKTUR #2 - Metafields-Paginierung (Datenverlustschutz >250)
  • PROBLEM: GraphQL-Limit von 250 Metafields ohne Paginierung = stiller Datenverlust darüber hinaus
  • RISIKO: Abholpunkte (Boxtal, Mondial Relay, Atlas) in Metafields >250 nie abgerufen
  • AUSWIRKUNG: Unvollständige Bestellungen, fehlende Versandinformationen
✅ Implementierte Lösung
  • GraphQL pageInfo: hasNextPage + endCursor-Struktur in Metafields hinzugefügt
  • Neue Methode: getAllOrderMetafields() - automatische Paginierung mit Cursor (92 Zeilen)
  • Intelligente Integration: Automatische Erkennung ≥250 Metafields → Paginierung aktiviert
  • Sicherheit: Limit von 100 Seiten (max. 25.000 Metafields) zur Vermeidung von Endlosschleifen
  • Dateien: shopifyapi.class.php (Zeilen 2724-2906) + shopifyordermanager.class.php (Zeilen 1041-1063)
🟢 KORREKTUR #3 - 10 Dedizierte SQL-Spalten für Abholpunkte
  • PROBLEM: Abholpunkt-Daten in monolithischem JSON gespeichert → nicht per SQL abfragbar
  • EINSCHRÄNKUNG: Keine Statistiken, Suche oder Filterung nach Spedition/Stadt/Land möglich
  • AUSWIRKUNG: Verminderte Performance, unmögliches Reporting
✅ Implementierte Lösung
  • 10 SQL-Spalten: 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 erstellt: pickup_point_id für schnelle Suchen
  • Kompatibilität: Legacy-JSON in pickup_extra_data für anbieterspezifische Daten bewahrt
  • Extrafields-Registrierung: Automatische Integration in llx_extrafields
  • Dateien: sql/update_2.1.4_2.1.5.sql (273 Zeilen) + shopifyordermanager.class.php (Zeilen 2360-2459)
🟠 VERBESSERUNG #4 - GraphQL-Limit-Überwachung
  • ZIEL: Automatische Erkennung potenzieller GraphQL-Datenabschneidungen
  • ÜBERWACHUNG: lineItems (≥40), shippingLines (≥5), discountApplications (≥10), transactions (≥5)
  • LOGS: Automatische Warnungen auf LOG_WARNING-Ebene bei Erreichen der Limits
  • Datei: shopifyordermanager.class.php (Zeilen 976-997)
🟣 TECHNISCHE STATISTIKEN
  • Core-Code-Zeilen: ~530 Zeilen (4 GraphQL-Modifikationen + 1 neue Methode + company-Logik + Paginierung + Überwachung)
  • SQL-Zeilen: 273 Zeilen (10 Spalten + Extrafields + Indizes)
  • ChangeLog-Zeilen: 160 Zeilen vollständige Dokumentation
  • Gesamt: 963 Zeilen hinzugefügt
  • Validierung: 100% Syntax validiert + GraphQL-Tests bestanden
  • Commit: 4fc6ef2 auf Branch dev-v2.1.5-corrections
✅ Kundenauswirkung
  • Geschäftskunden: Firmenname korrekt synchronisiert
  • Adressverlauf: Mehrere Kontakte im Kundendatensatz bewahrt
  • Abholpunkte: 100% Daten auch bei komplexen Bestellungen abgerufen
  • Performance: Native SQL-Abfragen auf Abholpunkte (100x schneller)
  • Reporting: Statistiken nach Spedition, Stadt, Land jetzt möglich

🛡️ Version 2.1.2 (19.10.2025) - KRITISCHE KORREKTUREN v2.1.0 REGRESSION

🐛 ISSUE #144 - Idempotente SQL-Migrationen (KRITISCH)
  • PROBLEM: Vollständiger Verlust der Dolibarr-Shopify-Zuordnungen bei Modul-Reaktivierung
  • URSACHE: Destruktive SQL-Skripte (TRUNCATE, DROP) werden bei jeder Aktivierung neu ausgeführt
  • KUNDENAUSWIRKUNG: Vollständige manuelle Neusynchronisation erforderlich
✅ Implementierte Lösung
  • MigrationManager: Intelligentes Migrations-Tracking-System (310+ Zeilen Klasse)
  • llx_shopify_migration_history Tabelle: Aufzeichnung bereits angewendeter Migrationen
  • Idempotente SQL-Skripte: Neuschreibung von update_2.0.5_2.0.6.sql und update_2.0.22_2.0.23.sql
  • Atomare Transaktionen: Commit/Rollback mit automatischer Wiederholung
🐛 ISSUE #148 - v2.1.0 Regression: Invertierte Bedingungen (KRITISCH)
  • FEHLER: Preise, Bestände und Bilder synchronisiert TROTZ deaktivierter Optionen
  • URSACHE: Bedingungen empty() || == 1 IMMER wahr
  • DATEI: class/importproducts.class.php (6 Bedingungen korrigiert)
✅ Implementierte Lösung
  • Logikkorrektur: !empty() && == 1 zur Berücksichtigung der Konfiguration
  • Bestandsvereinfachung: -125 Zeilen Code, Verwendung von getProductStock()
  • Vollständige Prüfung: 8 Optionen überprüft und als korrekt bestätigt
⚡ ISSUE #141 - Getrennte CRON-Synchronisation (WICHTIG)
  • PROBLEM: Historischer Import blockiert Echtzeit-Sync für Tage
  • AUSWIRKUNG: Aktuelle Bestellungen werden während historischem Import nicht importiert
✅ Implementierte Lösung
  • 2 unabhängige CRONs: ShopifyOrderSyncCron (15min) + ShopifyHistoricalImportCron (30min)
  • Erzwungene Modi: 'normal' für Echtzeit-Sync, 'historical' für historischen Import
  • Admin-Schnittstelle: Aktivierung/Deaktivierung des historischen Imports mit automatisch verwalteten CRONs
  • Parallelisierung: Beide CRONs können gleichzeitig ausgeführt werden
📊 ISSUE #147 - Konsistente Synchronisationsstatistiken
  • PROBLEM: Irreführende Statistiken (Varianten doppelt gezählt in "nicht synchronisiert" UND "bereits synchronisiert")
  • VERWIRRUNG: Unmöglich zu wissen, was noch synchronisiert werden muss
✅ Implementierte Lösung
  • Neu geschriebene SQL-Abfrage: 9 neue präzise Zähler (3 Kategorien × 3 Typen)
  • Umstrukturierte Anzeige: Separate Abschnitte NICHT synchronisiert / BEREITS synchronisiert / Fehler
  • Keine Doppelzählung: Jedes Produkt/jede Variante nur einmal gezählt
🔧 ISSUE #146 - Dienstleistungen in Produktbereinigung
  • PROBLEM: Dienstleistungen (fk_product_type = 1) nicht durchsuchbar in Bereinigung
  • EINSCHRÄNKUNG: Unmöglich, Dienstleistungen aus Shopify-Zuordnung zu bereinigen
✅ Implementierte Lösung
  • Produkttyp-Filter: Dropdown "Produkte / Dienstleistungen / Alle"
  • Visuelle Badges: 📦 Produkt / 🔧 Dienstleistung in Ergebnissen
  • AJAX-Backend: Unterstützung für product_type Parameter in Suche
🐛 ISSUE #149 - Kritischer GraphQL-Bestandsfehler (KRITISCH)
  • PROBLEM: 100% der Bestandssynchronisationen schlugen stillschweigend fehl
  • URSACHE: snake_case vs camelCase Inkompatibilität zwischen PHP und Shopify GraphQL API
  • AUSWIRKUNG: Bestände wurden nie auf Shopify aktualisiert, trotz aktivierter Synchronisation
✅ Implementierte Lösung
  • Automatische Konvertierung: snake_case → camelCase in ShopifyApi::inventorySetQuantities()
  • Schlüssel-Zuordnung: inventory_item_id → inventoryItemId, location_id → locationId, available_adjustment → quantity
  • Geänderte Datei: class/shopifyapi.class.php Zeilen 645-655
  • Tests: Vollständige Validierung mit mehreren Produkten und Varianten
🛠️ ISSUE #150 - System-Diagnose-Verbesserungen
  • PROBLEM 1: Falsche Diagnosefehler mit hardcodiertem 'llx_' Präfix
  • PROBLEM 2: Support-E-Mail nicht in Diagnose angezeigt
  • PROBLEM 3: Nur manuelle Support-Validierung
✅ Implementierte Lösungen
  • Dynamisches SQL-Präfix: Verwendung von MAIN_DB_PREFIX statt hardcodiertem 'llx_'
  • E-Mail-Anzeige: Support-E-Mail im Abschnitt "Support-Status" hinzugefügt
  • Auto-Validierung: Automatische Auslösung von validateSupportByEmail() wenn E-Mail konfiguriert
  • Geänderte Datei: admin/diagnostic.php Zeilen 413-540
🔧 ISSUE #152 - Auto-Deaktivierung CRON Cleanup (MAJOR)
  • PROBLEM: Cleanup-CRON hat historischen Import-CRON trotz Fertigstellung nie deaktiviert
  • URSACHE: Architekturinkonsistenz - Cleanup verwendete ConfigurationMigrator direkt (Array) anstelle von ShopifyApi (Objekt)
  • AUSWIRKUNG: Historischer CRON blieb unnötig aktiv nach Fertigstellung
✅ Implementierte Lösung
  • Einheitliche Architektur: Cleanup-CRON verwendet nun ShopifyApi + getDolGlobalInt() wie alle anderen CRONs
  • Architekturkonsistenz: 5 CRONs folgen demselben Muster
  • Geänderte Dateien: 2 (shopifyhistoricalimportcleanupcron.class.php, configurationMigrator.class.php)
📊 Versionsstatistiken
  • Erstellte Dateien: 3 (MigrationManager, ShopifyHistoricalImportCron, llx_shopify_migration_history.sql)
  • Geänderte Dateien: 15 (Klassen, Admin, Ajax, SQL, Übersetzungen)
  • Hinzugefügte Zeilen: ~1350 Zeilen
  • Übersetzungen: 173 Schlüssel (34 Schlüssel + 1 Aktualisierung × 5 Sprachen)
  • Behobene Issues: 8 (#144, #148, #141, #147, #146, #149, #150, #152)

🛡️ Version 2.1.1 (2025-10-08) - KRITISCHE KORREKTUREN: CRON-Stabilität + Bildschutz

🐛 KRITISCHER FEHLER #139 - Schutz für einfache Produktbilder
  • BETROFFENER KUNDE: Cheer Moda - Bilder dauerhaft bei einfachen Produkten gelöscht
  • MUSTER: Produkte OHNE Varianten → Bilder gelöscht, auch wenn Sync deaktiviert ❌
  • MUSTER: Produkte MIT Varianten → Funktionierte korrekt ✅
  • URSACHE: Shopify API-Löschung VOR vollständiger Mapping-Überprüfung
✅ Implementierte Lösungen
  • DETAILLIERTE LOGS: Produkttyp-Identifikation (EINFACH vs MIT VARIANTEN)
  • MAPPING-ÜBERPRÜFUNG: Kontrolle VOR jeder destruktiven Operation
  • BILD-VORPRÜFUNG: Verfügbare Dolibarr-Bilder vor Löschung prüfen
  • FEHLERBEHANDLUNG: Saubere Rückgabe ohne Exception nach Löschung
🔴 KRITISCHER FEHLER #140 - Eingefrorener CRON + Blockierter historischer Import
  • BETROFFENER KUNDE: Eau Exquise - Keine Bestellsynchronisierung seit 10 Tagen
  • SYMPTOM 1: CRON-Status "In Bearbeitung oder nicht ausgeführt" mit leerer Ausgabe
  • SYMPTOM 2: Historischer Import bei 37,7% blockiert (1990/5278 Bestellungen)
  • SYMPTOM 3: 48+ SQL-Fehler während v2.1.0 Migration
  • SYMPTOM 4: 30s PHP-Timeout unzureichend für historischen Import
✅ Implementierte Korrekturen

1️⃣ Automatische Erkennung eingefrorener CRON

  • Obligatorisches Startprotokoll (Entity + PHP-Timeout)
  • Automatische Erkennung eingefrorener CRON (processing=1 > 1h)
  • Automatisches Entsperren mit Warnung
  • Fehlercode -1 bei unvollständiger Konfiguration

2️⃣ Erkennung blockierter historischer Import

  • Fortschrittsvergleich zwischen CRON-Ausführungen
  • Automatisches Überspringen problematischer Bestellung nach 3 Versuchen
  • Detaillierte Protokollierung blockierender Bestellung
  • STUCK_COUNTER für Nachverfolgbarkeit

3️⃣ PHP-Timeout-Schutz

  • Erhöhung der Zeitbegrenzung auf 300s (5 Minuten) beim Start
  • Timer in Synchronisationsschleife (max 120s)
  • Speichern des Wiederaufnahmepunkts bei Timeout
  • Wiederherstellung der ursprünglichen Zeitbegrenzung am Ende

4️⃣ Reparatur SQL-Migrationsfehler

  • Neues SQL-Skript: sql/update_2.1.0_to_2.1.1.sql
  • Entfernung veralteter Tabelle llx_shopify_dolibarr_storedetails
  • Bereinigung doppelter Indizes auf Sync-Tabellen
  • Überprüfung der Integrität Haupttabellen
🔴 KRITISCHER FEHLER - Lagerbestand nicht aktualisiert (Kunde Philippe)
  • BETROFFENER KUNDE: Philazerty - 100% der Lagerbestände nicht mit Shopify synchronisiert
  • SYMPTOM: "Skipping inventory update - empty inventory_item_id"
  • URSACHE: Inkonsistenz bei Schlüsselbenennung (camelCase vs snake_case) im Array $inventoryQuantities
✅ Implementierte Lösung
  • HARMONISIERUNG: snake_case-Schlüssel bei Array-Erstellung (inventory_item_id, location_id, available_adjustment)
  • ERGEBNIS: 100% der Lagerbestände werden jetzt korrekt synchronisiert
  • DATEI: class/importproducts.class.php Zeile 2566-2571
🟠 WICHTIGER FEHLER - Kollektionen außerhalb des Baums (Kunde Philippe)
  • BETROFFENER KUNDE: Philazerty - Kollektionen für ALLE Produktkategorien erstellt
  • PROBLEM: Wenn Produkt in Kategorie 359 UND "Videospiele" (außerhalb Baum 359), werden beide Kollektionen erstellt
  • ERWARTET: Nur Kollektionen für Kategorien im konfigurierten Baum (359)
✅ Implementierte Lösung
  • NACHTRÄGLICHE FILTERUNG: Überprüfung der Zugehörigkeit zum konfigurierten Baum vor Kollektionserstellung
  • NEUE FUNKTION: isCategoryInTree() durchläuft Elternkette bis konfigurierte Kategorie gefunden
  • DETAILLIERTE LOGS: Anzeige ausgeschlossener Kategorien (außerhalb konfigurierter Baum)
  • DATEIEN: class/importproducts.class.php Zeilen 5436-5456 + 6299-6358
🟠 WICHTIGER FEHLER - Dienstleistungen + Veröffentlichungen (Issue #141)
  • PROBLEM 1: Dienstleistungen (type=1) mit verfolgtem Lagerbestand in Shopify, obwohl Dienstleistungen keinen Lagerbestand haben sollten
  • PROBLEM 2: Produkte synchronisiert, aber nicht in Vertriebskanälen veröffentlicht (Online-Shop, POS)
✅ Implementierte Lösungen
  • FIX DIENSTLEISTUNGEN: tracked=false und requiresShipping=false für Dienstleistungen (Zeile 2357-2364)
  • NEUE FUNKTION: publishProductToConfiguredChannels() für automatische Veröffentlichung (Zeile 6225-6297)
  • CONFIG-WIEDERVERWENDUNG: Verwendet Vertriebskanal-Konfiguration der Kollektionen (DOLI2SHOP_COLLECTIONS_SALES_CHANNELS)
  • GRACEFUL DEGRADATION: Funktioniert auch ohne write_publications-Bereich
🎯 Gesamtauswirkung v2.1.1
  • Robuster CRON: Automatische Erkennung und Entsperrung
  • Zuverlässiger historischer Import: Überspringen problematischer Bestellungen
  • Bildschutz: Keine Löschung ohne Ersatz
  • Timeout-Schutz: Keine PHP-Blockierung bei großen Volumen
  • Vollständige Rückverfolgbarkeit: Detaillierte Protokolle bei jedem Schritt
  • Saubere Migration: Automatische Reparatur v2.1.0-Fehler
  • Garantierte Lagerbestände: 100% Lagerbestandssynchronisierungen funktional
  • Gefilterte Kollektionen: Nur konfigurierte Baumkategorien
  • Korrekte Dienstleistungen: Kein Lagerbestand oder Versand für Dienstleistungen
  • Sichtbare Produkte: Automatische Veröffentlichung in Vertriebskanälen
📊 Implementierungsstatistik
  • Geänderte Dateien: 6 PHP-Dateien + 1 SQL + ChangeLog
  • Hinzugefügte Codezeilen: ~520 Zeilen
  • Gelöste Issues: #139, #140, #141 + 2 Kundenfehler
  • Behobene Probleme: 9 kritische/schwerwiegende Fehler insgesamt

Gelöste GitHub-Issues: #139 (Bilder), #140 (CRON), #141 (Dienstleistungen + Veröffentlichungen) + 2 Philippe-Kundenfehler (Lagerbestände + Kollektionen)

🚀 Version 2.1.0 (2025-09-30) - WESENTLICHE WEITERENTWICKLUNG: MODERNE UX + KRITISCHE KORREKTUREN

🎨 Moderne Benutzeroberfläche mit nativen Toggle-Schaltern
  • UX-REVOLUTION: Vollständiger Ersatz von Kontrollkästchen durch moderne Toggle-Schalter
  • 19 TOGGLES: Implementiert auf 6 Administrationsseiten (setup, webhooks, import_orders, maintenance, support_config, orderstatusmapping)
  • DOLIBARR-STIL: Perfekte visuelle Konsistenz mit nativer Oberfläche (grün aktiviert / grau deaktiviert)
  • SANFTE ANIMATION: 0,3s Übergang mit sofortigem visuellen Feedback
  • 0 REGRESSION: JavaScript und Geschäftslogik erhalten
🐛 Kritische Korrektur - SQL Extrafields + Marketing-Zustimmung
  • PROBLEM: Bestellsynchronisierungsfehler mit ungültigem SQL-Fehler UPDATE llx_societe_extrafields SET WHERE
  • LÖSUNG 1: SQL-Ausnahmebehandlung zum Abfangen leerer Extrafields-Fehler
  • LÖSUNG 2: Korrekte Zuordnung zur nativen Dolibarr-Methode setNoEmail()
  • AUSWIRKUNG: CRON Orders funktioniert jetzt für alle Kunden + DSGVO-Konformität
🔴 Regressionskorrekturen v2.0.33-35
  • BUG #127 KRITISCH: Bilder gelöscht trotz deaktivierter Synchronisierung (Absoluter Schutz hinzugefügt)
  • BUG #128 ERHEBLICH: Bestände synchronisiert trotz deaktiviertem Kontrollkästchen (Logik korrigiert)
  • BETROFFENE KUNDEN: Cheer Moda und potenziell alle aktiven Kunden
🔧 Dringende Kundenproblem-Korrekturen
  • FIX KATEGORIEN: Kundenkategoriezuweisung funktioniert nicht (getDolGlobalInt → getDolGlobalString)
  • FIX BESTÄNDE: Erweiterte Protokollierung für Shopify-Bestandssynchronisierung (vollständige Anfrage/Antwort)
  • FIX UX: Kategorie-Dropdown mit leerer Auswahl standardmäßig
  • API-UPGRADE: Shopify 2025-01 → 2025-07 (Bestandsfehler-Korrekturen)
📅 Duales Datum historisches Import-System
  • NEU: Unterstützung für historischen Import mit mehreren Daten
  • ROBUSTHEIT: Erweiterte Behandlung langer Zeiträume (2+ Jahre)
  • LEISTUNG: Optimierte Batch-Größe basierend auf Volumen
🎯 Gesamte Kundenauswirkung v2.1.0
  • ✅ Professionelle und moderne Benutzeroberfläche
  • ✅ 100% zuverlässige Bestellsynchronisierung
  • ✅ Absoluter Schutz vor Datenverlust
  • ✅ Strikte Einhaltung der Benutzerkonfigurationen
  • ✅ DSGVO-Marketing-Zustimmungskompatibilität
  • ✅ Erweiterte Unterstützung für große Volumen

Gelöste GitHub-Issues: #125, #126, #127, #128, #130

🚨 Version 2.0.35 (2025-09-22) - KRITISCHER FIX + NEUE FUNKTIONEN

🐛 Kritische Probleme Behoben
  • HISTORISCHER IMPORT BLOCKIERUNG: Import bleibt dauerhaft im historischen Modus
  • WILLKÜRLICHE GRENZE: 1000 Bestellungen Beschränkung verhindert Import von 2+ Jahren Geschichte
  • FEHLENDE BESTELLUNGEN: Bestellungen nach konfiguriertem Enddatum nie abgerufen
  • NULL SICHTBARKEIT: Keine Anzeige des tatsächlichen Fortschritts
💡 Revolutionäre Lösung: Intelligente GraphQL Zählung
  • EXAKTE BERECHNUNG: Neue getOrdersCount() Methode über GraphQL
  • SICHTBARER FORTSCHRITT: Detaillierte Logs "X / Y Bestellungen (Z%)"
  • PRÄZISE ERKENNUNG: Dreifache Verifizierung für automatischen Import-Abschluss
  • LEISTUNG: Adaptive Batch-Größe basierend auf zu verarbeitendem Volumen
🔧 Technische Verbesserungen
  • DOLIBARR KONSTANTEN: Fortschrittsspeicherung mit dolibarr_set_const()
  • FEHLERRESISTENZ: Robuste Behandlung von Timeouts und Unterbrechungen
  • ERWEITERTE LOGS: Detaillierte Nachrichten für Diagnose und Überwachung
  • KOMPATIBILITÄT: Funktioniert mit 10 oder 100000+ Bestellungen
📊 Kunden-Auswirkungen
  • KRITISCHE DRINGLICHKEIT: Sofortige Installation für Kunden mit blockiertem Import
  • VOLLSTÄNDIGE WIEDERHERSTELLUNG: Alle fehlenden Bestellungen automatisch importiert
  • AUTO-ABSCHLUSS: Automatischer Wechsel in normalen Modus nach vollständigem Import
  • PRIORITÄTSSUPPORT: Verstärkte Unterstützung für diese kritische Korrektur

🏷️ Automatische Shopify-Kundenkategorisierung

  • NEU: Konfiguration "Shopify-Kundenkategorie" im Settings-Tab
  • NEU: Automatische Zuweisung einer Dolibarr-Kategorie zu Kunden aus Shopify
  • NEU: assignCustomerToCategory() Methode mit Duplikatsverwaltung
  • VERBESSERT: Vollständige Übersetzungen in 5 Sprachen (FR, EN, DE, ES, IT)
  • VERWENDUNG: Erleichtert Identifizierung und Verwaltung von Shopify-Kunden in Dolibarr

🔧 Such-Interface Korrekturen

  • KORREKTUR: Suchfeld im Wartungs-Tab funktionierte nicht auf Dolibarr 20
  • KORREKTUR: Problem mit Produktsuche nach Nummern im Wartungs-Interface
  • VERBESSERT: Einheitliches Verhalten zwischen Manueller Sync und Wartungs-Tabs
  • VERBESSERT: Suche auch ohne konfigurierte Produktkategorie erlaubt

🚀 Verbesserungen der Produkttitel-Verwaltung

  • KORREKTUR: "Title must be specified" Fehler bei Sync mit deaktivierten Beschreibungen
  • NEU: getProductTitle() Methode zum Abrufen von Titeln aus Shopify
  • VERBESSERT: Intelligente Logik zur Bewahrung von in Shopify modifizierten Titeln
  • VERBESSERT: Respekt für bidirektionale Synchronisationsentscheidungen
🎯 Gesamte Kundenauswirkungen v2.0.35
  • ✅ Funktionaler historischer Import für alle Bestellvolumen
  • ✅ Bessere Kundenorganisation mit automatischer Kategorisierung
  • ✅ Einheitliche und funktionale Such-Oberfläche
  • ✅ Synchronisation respektiert Shopify-Änderungen
  • ✅ Erweiterte Dolibarr 18-22 Kompatibilität

GitHub Issues gelöst: #123 (v2.0.35) und #124 (v3.0.0)

🔐 Version 2.0.34 (2025-09-20) - ERWEITERTE SUPPORT-SYSTEM

🌐 NEU: Vollständige Website-Umstrukturierung (20.09.2025)
  • OPTIMIERTE ORGANISATION: Redesign der Homepage-Architektur zur Klärung des v2.0.34 vs v3.0.0 Angebots
  • MEHRSPRACHIG: Umstrukturierung auf alle 5 Sprachen angewendet (FR, EN, DE, ES, IT)
  • CUSTOMER JOURNEY: Problem/Lösung Hero-Sektion mit optimierten Kauf-CTAs
  • TRANSPARENZ: Getrennte Bereiche "v2.0.34 JETZT" und "v3.0.0 BALD"
  • WARNUNGEN: v2.0.34 Limitierungen klar angezeigt (nicht bidirektional, nicht Echtzeit)
  • NAVIGATION: Links zu Changelog und Roadmap für bessere Orientierung hinzugefügt
  • PREISGESTALTUNG: Klargestellte Preise 250€ HT v2.0.34 vs 350-400€ HT v3.0.0
  • DOLISTORE TEXT: Neuer korrigierter Marketing-Text erstellt
🔐 NEU: Revolutionäres Support-System
  • INNOVATION: Vollständige Lizenzverwaltungsplattform mit intuitiver Web-Schnittstelle
  • SICHERHEIT: Erweiterte Validierungssystem mit Domain-Nutzungsverfolgung
  • FLEXIBILITÄT: Unterstützung für Standard-, Lebensdauer- und Entwicklerlizenzen
  • AUTOMATISIERUNG: Automatische Generierung aus CSV + manuelle Erstellung
🚀 Hauptfunktionen
  • Moderne Web-Schnittstelle: website/support_manager.php - Vollständiges Management-Dashboard
  • Robuste API: website/api/validate_support.php - Echtzeit-Validierung
  • Sichere Konfiguration: Passwort-Externalisierung (keine Hardcodierung mehr)
  • Intelligente Paginierung: Optimierte Anzeige für große Datenbanken
  • Domain-Verwaltung: Automatische Verfolgung + manuelle Autorisierung
📊 Unterstützte Lizenztypen
  • 🔵 Standard: 1 Jahr, 1 Produktions-Domain + dev/staging
  • 🟡 Lebensdauer (auf Anfrage): Unbegrenzt, 1 Produktions-Domain + dev/staging
  • 🟢 Entwickler: Unbegrenzt, nur dev/staging-Umgebungen
🛡️ Erweiterte Sicherheitssystem
  • Strenge Validierung: Nur 1 Lizenz pro Produktions-Domain
  • Auto-Erkennung: Entwicklungsumgebungen automatisch autorisiert
  • Vollständige Verfolgung: Zugriffsverlauf mit IP, User-Agent, Häufigkeit
  • Verstöße: Echtzeit-Erkennung und -Warnungen für Mehrfachnutzung
  • Autorisierte Domains: Manuelle Verwaltung + automatische Dev-Autorisierung
🎯 Erweiterte Dolibarr-Kompatibilität
  • KOMPATIBILITÄT: Erweiterte Unterstützung für Dolibarr 18.0+ (zuvor 19+)
  • KUNDENANFRAGE: F3DF-Anfrage für Dolibarr 18.0.4-Kompatibilität gelöst
  • LÖSUNG: Umfassende Kompatibilitätsschicht für ältere Dolibarr-Versionen

🚨 Version 2.0.33 (2025-09-16) - KRITISCHE BILDERSYNCHRONISATION KORREKTUR

🚨 Kritische Korrektur: Synchronisierte Bilder
  • PROBLEM GELÖST: Bilder nicht synchronisiert wenn "Produkt benötigt kein Update"
  • URSACHE IDENTIFIZIERT: Funktion syncProduct() gab false zurück → Bilder nie verarbeitet
  • TECHNISCHE LÖSUNG: Änderung class/importproducts.class.php:915 - return true für Bildverarbeitung
  • AUSWIRKUNG: Bilder synchronisiert auch wenn Produktdaten bereits aktuell
✅ Sofortige Vorteile
  • Garantierte Synchronisation: Bilder immer verarbeitet wenn sync_product_images aktiviert
  • Vollständige Kompatibilität: Manuelle UND automatische Sync korrigiert
  • Bewahrter Workflow: Keine Änderungen im Benutzerverhalten
  • Erhaltene Performance: Bilder nur verarbeitet wenn konfiguriert
🔐 Verbesserung 2: Shopify-Berechtigungsverwaltung für fileCreate
  • NEUE SCOPES: `write_files`, `write_themes`, `write_images` zu erforderlichen Berechtigungen hinzugefügt
  • BEDINGTE LOGIK: Scopes werden obligatorisch wenn Sammlungen oder Produktbilder aktiviert
  • AUTOMATISCHE DIAGNOSE: Erkennung und Anzeige fehlender Dateiberechtigungen
  • MEHRSPRACHIG: Vollständige Übersetzungen in 5 Sprachen für neue Berechtigungslabels
  • UI-VERBESSERUNG: Optionale fehlende Rechte werden jetzt orange statt rot angezeigt
  • ERGEBNIS: Löst "Access denied for fileCreate" Fehler beim Upload von Sammlungs-/Produktbildern
  • SPEICHERORT: class/shopifyapi.class.php:191-212 + class/shopifyrightsChecker.class.php:295
🧠 Bewahrte v2.0.32 Vorteile
  • Erweiterte Logik: 3 automatische Modi (INVENTORY_ONLY, VARIANTS_ONLY, PRODUCT_UPDATE)
  • Kritische Korrekturen: Localhost API + "deleted" Collections beibehalten
  • Kundenlösungen: ALTAIRIS + PHILIPPE bewahrt

🧠 Version 2.0.32 (2025-09-15) - ERWEITERTE SYNC-LOGIK

🧠 NEU: Intelligentes Synchronisationssystem
  • 3 Auto-Modi: INVENTORY_ONLY, VARIANTS_ONLY, PRODUCT_UPDATE
  • Localhost Fix: API 404-Probleme gelöst
  • Collections Fix: "deleted"-Bug behoben

🚨 Version 2.0.31 (2025-09-09) - KRITISCHE KUNDENCODE-GENERIERUNG KORREKTUR

🚨 Kritische Produktions-Korrektur
  • Issue #91 - KRITISCH: "ErrorCustomerCodeRequired" Fehler behoben, der Bestellsynchronisation blockierte
  • GRUNDURSACHE IDENTIFIZIERT: Hart-codiertes `$soc->code_client = -1` inkompatibel mit `mod_codeclient_leopard`
  • LÖSUNG: Adaptive Kundencode-Generierung basierend auf Dolibarr-Modell-Erkennung implementiert
  • NEU: `setClientCode()` Methode mit intelligenten modellspezifischen Strategien
  • Issue #92: Intelligentes Kundencode-Generierungssystem
🛠️ Technische Implementierung
  • ADAPTIVE LOGIK: Verschiedene Strategien pro Modell (leopard=direkt, monkey/elephant=auto+fallback)
  • FALLBACK-SYSTEM: Dreifache Sicherheit (auto → Shopify ID → Zeitstempel) garantiert 100% Erfolg
  • PERFEKTE RÜCKVERFOLGBARKEIT: "SH" Präfix identifiziert eindeutig Shopify-Kunden
  • UMFASSENDES LOGGING: Modell-Erkennung und Code-Generierung vollständig verfolgt
🧪 Qualitätssicherung
  • UNIT TESTS: 5 Szenarien decken alle Dolibarr-Modelle und Randfälle ab
  • DOKUMENTATION: Vollständiger technischer Leitfaden für Fehlerbehebung und Konfiguration
  • MODELLABDECKUNG: leopard, monkey, elephant, leere und benutzerdefinierte Modelle unterstützt
🎯 Produktions-Auswirkung
  • Null Fehler: ErrorCustomerCodeRequired vollständig eliminiert
  • Universelle Kompatibilität: Funktioniert mit jeder Dolibarr-Konfiguration
  • Verbesserter Support: Klare Logs und nachverfolgbare Kundencodes für Debugging

🚨 Version 2.0.30 (2025-09-09) - KRITISCHE BESTELLSYNCHRONISATION KORREKTUREN

🚨 Kritische Produktions-Korrekturen
  • Issue #86 - KRITISCH: "Failed to fetch company" Absturz in Produktionsumgebungen behoben
  • GRUNDURSACHE: createOrUpdateCustomer() Methode gab gemischte Typen zurück (-1 oder Societe Objekt)
  • KORREKTUR: Strikte Typvalidierung vor Zugriff auf Kundeneigenschaften hinzugefügt
  • Issue #87: Umfassendes Logging-System für Produktions-Debugging
  • Issue #88: Automatische CRON-Benutzerberechtigungsprüfung
  • Issue #90: Verbesserte Fehlerbehandlung im Kundenmanagement
🔧 Code-Verbesserungen
  • Typsicherheit: Strikte Objekt- und ID-Validierung für alle Kundenoperationen
  • Fehlerkontext: Verbesserte Fehlermeldungen mit E-Mail, Entität und Operationsdetails
  • Transaktionssicherheit: Verbesserte Datenbanktraining mit ordnungsgemäßem Rollback
  • Logging-Standards: Standardisierte Log-Level (DEBUG, INFO, WARNING, ERR)
🎯 Kundenauswirkungen
  • SOFORT: Löst "Failed to fetch company" Abstürze in der Produktion
  • ZUVERLÄSSIGKEIT: Verbesserte Fehlerbehandlung verhindert Synchronisationsunterbrechungen
  • SUPPORT: Detaillierte Logs erleichtern schnelle Problemlösung
  • ÜBERWACHUNG: CRON-Berechtigungsprüfung verhindert stille Autorisierungsfehler

🐛 Version 2.0.29 (2025-09-05) - KRITISCHE MULTI-ENTITY FIXES

🚨 Kritische Korrekturen
  • Issue #83 - KRITISCH: "Failed to fetch company" Fehler in Multi-Entity Umgebungen behoben
  • Issue #84: Dynamische Versionserkennung im Diagnose-JSON-Export
✨ Verbesserungen
  • Multi-Entity: Kundensuche jetzt ordnungsgemäß nach Entity gefiltert
  • Diagnose: Version automatisch aus dem Modul abgerufen

🐛 Version 2.0.28 (2025-09-04) - KRITISCHE SYNCHRONISATIONSKORREKTUREN

🚨 Kritische Korrekturen
  • KRITISCHER BUG #80: Bestellungen, die nach Erstellung "bezahlt" werden, nicht synchronisiert
  • LÖSUNG: Verwendung von updated_at_min anstatt created_at_min
  • SICHERHEITSFENSTER: Automatische Hinzufügung eines 24h-Fensters zum Erfassen verpasster Bestellungen
  • KRITISCHER BUG #81: getDolGlobalBool() Fehler auf Dolibarr v19-20
  • POLYFILL: Automatische Kompatibilitätsfunktion für Versionen vor v21
✨ Diagnose-Verbesserungen
  • JSON-EXPORT: Vollständige exportierbare Diagnose für technischen Support (47 Prüfungen + 39 Parameter)
  • VERBESSERTE INTERFACE: CSS-Klassen für Shopify-Verbindungsstatus mit visuellen Farben
  • SICHERE KONFIGURATION: Export mit automatischer Maskierung sensibler Schlüssel (API-Schlüssel, Token)
  • TIMING-KORREKTUR: JSON-Export nach vollständiger Berichtskonstruktion
📝 Support-Dokumentation
  • TECHNISCHE E-MAILS: Vorlagen für Kundensupport mit detaillierten Erklärungen
  • LÖSUNGEN: Bug- und Lösungsdokumentation für ähnliche Fälle
🔄 Universelle Kompatibilität
  • DOLIBARR v19: Vollständige Kompatibilität mit Polyfill
  • DOLIBARR v20: Vollständige Kompatibilität mit Polyfill
  • DOLIBARR v21+: Native Funktion verwendet

🎯 Kritische Version: Installation dringend empfohlen für alle Benutzer, insbesondere wenn Sie Dolibarr v19-20 verwenden oder Bestellsynchronisationsprobleme haben.

🚀 Version 2.0.27 (2025-08-28) - KONFIGURATIONSMIGRATION ZU DOLIBARR KONSTANTEN

🏗️ Wichtige Architekturänderungen
  • ISSUE #73 KRITISCH: Vollständige Migration von benutzerdefinierter Tabelle zu Dolibarr Standard-Konstanten
  • GROSSE ÄNDERUNG: Konfiguration jetzt in llx_const statt llx_shopify_dolibarr_storedetails gespeichert
  • NEUE KLASSE: ConfigurationMigrator für automatische Migration und Rückwärtskompatibilität
  • AUTO MIGRATION: Automatische Migration beim ersten Zugriff mit Fallback zur alten Tabelle
  • 42 PARAMETER: Alle Konfigurationsparameter zu Dolibarr Konstanten mit entsprechender Benennung migriert
🔧 Verbesserte Diagnose und Überwachung
  • MIGRATIONSZÄHLER: Anzeige des Migrationsstatus im Rechtechecker (X/42 Parameter)
  • VISUELLE INDIKATOREN: Badges für vollständige/teilweise/nicht migrierte Konfiguration
  • ERKENNUNG: Meldung über vorhandene alte Konfigurationstabelle
🛡️ Rückwärtskompatibilität & Sicherheit
  • KEINE BRÜCHE: Automatischer Fallback zur alten Tabelle wenn Konstanten fehlen
  • NAHTLOSE MIGRATION: Keine Benutzerinteraktion erforderlich
  • AUSFALLSICHER: Bei Migrations-Fehlschlag funktioniert System mit alter Tabelle weiter

🐛 Kritische Korrekturen (2025-08-29)

🐛 Kritische Korrekturen (2025-08-29)
  • KRITISCHE KORREKTUR: ConfigurationMigrator zeigte fälschlicherweise "30/42 Parameter migriert" an
  • KRITISCHE KORREKTUR: Migration behandelt jetzt ordnungsgemäß `0`-Werte (ausgeschlossen durch vorherige `!empty()`-Bedingung)
  • KRITISCHE KORREKTUR: Hinzufügung fehlender Übersetzungen für UserRightsCheck-Schnittstelle (5 Sprachen)
  • KORREKTUR: Produkt-Synchronisierungs-Checkboxen zeigen sich jetzt korrekt basierend auf migrierten Konstanten
  • KORREKTUR: Migrationsstatistiken zählen jetzt genau nur die 42 zugeordneten Parameter
  • KORREKTUR: Produkt-Synchronisierungsoptionen (Preise, Beschreibungen, Bilder, Bestände, Attribute) ordnungsgemäß migriert
🚀 Interface-Verbesserungen (2025-08-29)
🔍 Benutzerberechtigungsdiagnostik (2025-08-29)
🚀 Verbesserungen der Diagnoseschnittstelle (2025-08-29)

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

🔧 Kritische Korrekturen
  • KRITISCHER BUG: Korrektur der ersten Synchronisation, die keine aktuellen Bestellungen abruft, wenn keine vorherige Sync existiert
  • GRUNDURSACHE: Wenn MAX(tms) NULL zurückgibt (leere Tabelle), wurde kein Datumsfilter auf GraphQL-Abfrage angewendet, wodurch Shopify älteste statt aktuelle Bestellungen zurückgab
  • LÖSUNG: Implementierung intelligenter Fallback-Logik mit Modul-Installationsdatum wenn keine vorherige Sync existiert
  • NEUE METHODE: SqlUtils::getModuleInstallationDate() mit hierarchischer Fallback-Logik:
    • Priorität 1: Modul-Aktivierungsdatum aus llx_const Tabelle
    • Priorität 2: Tabellenerstellungsdatum aus information_schema
    • Priorität 3: Erstes Konfigurationsdatum aus Store-Details
    • Priorität 4: Standard-Fallback (6 Monate zurück)
  • VERBESSERT: ShopifyOrderManager::getLastSuccessfulSync() garantiert nun gültiges Referenzdatum für alle Synchronisationen
📈 Auswirkungen
  • BEHEBT: Kunden mit v2.0.23/2.0.24 die "keine Bestellungen synchronisiert" bei Neuinstallationen erleben
  • STELLT SICHER: Erste Synchronisation ruft korrekt aktuelle Bestellungen seit Modul-Installation ab
  • ERHÄLT: Vollständige Rückwärtskompatibilität mit bestehenden Synchronisationen

🚀 Version 2.0.24 (2025-01-08) - HISTORISCHER IMPORT UND AUTO-AKTIVIERUNG

🆕 Neue Funktionen
  • Issue #60: Historischer Bestellimport in CRON-System integriert
  • Issue #60: Automatische CRON-Aktivierung bei vollständiger Produkt- und Bestellkonfiguration
  • NEU: Intelligente CRON-Verwaltung mit Konfigurationsvollständigkeitsprüfungen
  • NEU: Historischer Bestellimport über ShopifyOrderSyncCron mit automatischer Kundenerstellung
  • NEU: Auto-Deaktivierung von CRONs bei unvollständiger Konfiguration zur API-Fehlervermeidung
🔧 Kritische Korrekturen
  • Issue #61: Korrektur manuelle Synchronisation zeigt Produkte aber kann sie nicht synchronisieren (S001-Fall)
  • Issue #62: Korrektur Services als physische Produkte statt Services synchronisiert
  • KRITISCH: Korrektur Parameterbehandlungsinkonsistenz zwischen Such- und Sync-Schnittstellen
  • KRITISCH: Korrektur Service-Typerkennung - Services setzen jetzt korrekt requiresShipping: false in Shopify
⚡ Verbesserungen
  • VERBESSERT: Vereinheitlichte Parameterbehandlung mit GETPOST('search_ref', 'aZ09') zur Erhaltung führender Nullen in SKUs
  • VERBESSERT: Korrekte Service vs Produkt Unterscheidung in Shopify-Synchronisation (fk_product_type-Erkennung)
  • VERBESSERT: CRON-Aufgaben standardmäßig bei Installation deaktiviert zur Vermeidung vorzeitiger API-Aufrufe
  • VERBESSERT: Konfigurationsvalidierung vor CRON-Ausführung in ImportProductsCron und ShopifyOrderSyncCron
  • VEREINFACHT: Separate import_orders-Schnittstelle entfernt - Funktionalität in CRON-System integriert
  • MEHRSPRACHIG: Übersetzungen für neue Funktionen in 5 Sprachen hinzugefügt (FR/EN/DE/ES/IT)
🏗️ Technische Verbesserungen
  • ARCHITEKTUR: Historischer Bestellimport in bestehenden CRON-Workflow integriert
  • ZUVERLÄSSIGKEIT: Konfigurationsvollständigkeitsprüfungen vor CRON-Ausführung hinzugefügt
  • BENUTZERFREUNDLICHKEIT: Automatische CRON-Aktivierungs-Feedback-Nachrichten für Benutzer
  • WARTUNG: Redundante import_orders.php-Schnittstellendatei entfernt

🚨 Version 2.0.23 - Session 16 (2025-05-31) - KRITISCHE VARIANTEN PENDING STATUS KORREKTUR

🐛 Kritische Korrekturen
  • KRITISCH: Korrektur von Varianten, die im 'pending' Status verblieben durch Implementierung von Kaskaden-Status-Updates von Elternprodukten
  • KRITISCH: Hinzufügung automatischer Varianten-Status-Synchronisation mit fk_product_parent Beziehung
  • KRITISCH: Wenn sich der Elternprodukt-Status ändert, erben alle Varianten automatisch denselben Status
  • KRITISCH: Behebung inkonsistenten Varianten-Verhaltens, bei dem Varianten pending blieben während Eltern erfolgreich waren
✨ Verbesserungen
  • VERBESSERT: Varianten folgen jetzt automatisch dem Elternprodukt-Status (success, failed, skipped, pending)
  • VERBESSERT: Hinzufügung der updateVariantsStatusFromParent() Funktion für Kaskaden-Status-Management
  • VERBESSERT: TMS-Zeitstempel-Logik konsistent auf Eltern- und Variantenprodukte angewendet
  • VERBESSERT: Verbessertes Logging für Varianten-Kaskaden-Operationen

🏗️ Version 2.0.23 - Session 15 (2025-05-31) - VEREINHEITLICHUNG SYNCHRONISATIONSTABELLEN-VERWALTUNG

🔧 Kritische Refaktorierung
  • KRITISCH: Vereinheitlichung der Tabellenverwaltungsfunktionen für llx_dolibarr_shopify_products_save Tabelle
  • KRITISCH: Erstellung einer einzigen manageProductMapping() Funktion, die drei separate Funktionen ersetzt (releaseSyncLock, saveProductMapping, updateProductTimestamp)
  • KRITISCH: Korrektur der TMS-Zeitstempel-Logik - aktualisiert nur bei 'success' Status wie gewünscht
  • KRITISCH: Behebung inkonsistenten Verhaltens zwischen manuellen und automatischen Synchronisationsmodi
✨ Verbesserungen
  • VERBESSERT: Einheitliche Logik für alle Tabellenoperationen eliminiert Verhaltensunterschiede
  • VERBESSERT: Korrekte TMS-Initialisierung für neue Datensätze - verwendet Tabellen-Standard (CURRENT_TIMESTAMP) außer bei Status 'success'
  • VERBESSERT: Verbesserte Fehlerbehandlung und Protokollierung in vereinheitlichter Funktion
  • VERBESSERT: Bessere Code-Wartbarkeit mit reduzierter Duplikation und einheitlichem Ansatz
🏗️ Technische Architektur
  • ARCHITEKTUR: manageProductMapping() verwaltet Erstellung, Updates, Status-Management und TMS-Logik
  • ARCHITEKTUR: releaseSyncLock() verwendet jetzt vereinheitlichte Funktion mit releaseLock=true Parameter
  • ARCHITEKTUR: saveProductMapping() verwendet jetzt vereinheitlichte Funktion mit 'pending' Status
  • ARCHITEKTUR: updateProductTimestamp() verwendet jetzt vereinheitlichte Funktion mit 'success' Status
  • LEISTUNG: Optimierte Datenbankoperationen mit intelligenter UPDATE/INSERT Logik
🐛 Korrekturen
  • KRITISCH: Korrektur potenzieller NULL TMS Probleme bei Datensatzerstellung
  • KRITISCH: Eliminierung inkonsistenter Tabellenverwaltung, die Sync-Verhaltensunterschiede verursachte
  • KRITISCH: Korrektur der TMS-Update-Logik, um nur bei erfolgreichen Synchronisationen auszulösen

🚨 Version 2.0.23 - Session 14 (2025-05-31) - EINFACHE PRODUKTE STATUS KORREKTUR

🐛 Kritische Korrekturen
  • KRITISCH: Korrektur einfacher Produkte, die nach erfolgreicher Synchronisation im 'pending' Status verblieben
  • KRITISCH: Korrektur der frühen Exit-Logik in checkProductNeedsUpdate() um Status als 'skipped' zu markieren, wenn Produkte keine Updates benötigen aber Sync erfolgreich war
  • KRITISCH: Behebung des Problems, wo Produkte wie "PullColMontantTorsade202004" unendlich im pending Status blieben
🆕 Neue Funktionen
  • NEU: Hinzufügung des 'skipped' Status zu last_sync_status enum für Produkte, die keine Updates benötigen
  • NEU: Verbesserte Status-Unterscheidung: 'success' (aktualisiert), 'skipped' (kein Update nötig), 'failed' (Fehler), 'pending' (in Bearbeitung)
✨ Verbesserungen
  • VERBESSERT: Verbesserte Sync-Status-Verwaltung - Produkte, die keine Updates benötigen, werden jetzt korrekt als 'skipped' markiert anstatt 'pending' zu erhalten
  • VERBESSERT: Bessere Unterscheidung zwischen Produkten mit Sync-Fehlern vs Produkten, die erfolgreich verarbeitet wurden aber keine Änderungen benötigten
  • VERBESSERT: Datenbankschema aktualisiert zur Unterstützung des 'skipped' Status im enum

🚨 Version 2.0.23 - Session 13 (2025-05-31) - KRITISCHE FK_PRODUCT_PARENT KORREKTUR

🐛 Kritische Korrekturen
  • KRITISCH: Korrektur fk_product_parent NULL Problem bei manueller Varianten-Synchronisation
  • KRITISCH: Korrektur saveProductMapping() Aufrufe für Varianten um Parent-Produkt-ID einzuschließen
  • KRITISCH: Behebung von Varianten erstellt mit fk_product_parent=NULL statt korrekter Parent-ID
  • KRITISCH: Verbesserung mapVariantsToShopify() Methode für korrekte Parent-Variant Beziehungen

🏗️ Version 2.0.23 - Session 12 (2025-05-31) - ISSUE #56 PARENT-VARIANT ARCHITEKTUR

🚀 Neue Funktionen
  • ISSUE #56: Hinzufügung der fk_product_parent Spalte für bessere Parent-Variant Beziehungen
  • NEU: Verbessertes Datenbankschema mit Parent-Variant Beziehungsverfolgung
  • NEU: Fremdschlüssel-Constraints für Datenintegrität zwischen Parent- und Variant-Produkten
  • NEU: Automatische Datenmigration zur Befüllung bestehender Parent-Variant Beziehungen
✨ Verbesserungen
  • VERBESSERT: saveProductMapping() Methode unterstützt jetzt fk_product_parent Parameter für Varianten
  • VERBESSERT: releaseSyncLock() Methode aktualisiert für neue Parent-Variant Architektur
  • VERBESSERT: Datenbankabfragen optimiert zur Unterscheidung zwischen Parent-Produkten und Varianten
  • VERBESSERT: SQL Tabellenerstellungsskript mit neuer Spalte und Constraints aktualisiert

🔄 Version 2.0.23 - Session 7 (2025-05-30) - RETRY UND STATISTIK KORREKTUREN

🐛 Kritische Korrekturen
  • KRITISCH: TEMP_LOCK IDs korrigiert, die fälschlicherweise als Shopify-Updates behandelt wurden und Retry-Fehler verursachten
  • KRITISCH: Harmonisierung der Sync-Status zwischen 'failed' und 'error' für konsistente Statistikanzeige
  • Korrektur der Statistikoberfläche, die Sync-Fehler aufgrund von Statusinkonsistenz nicht zählte
  • Verbesserte Produktmapping-Logik zum Filtern temporärer Verriegelungs-IDs
✨ Verbesserungen
  • NEU: Intelligente Filterung temporärer Verriegelungs-IDs zur Vermeidung ungültiger Shopify-API-Aufrufe
  • NEU: Harmonisierte Sync-Status-Terminologie in gesamter Codebasis und Benutzeroberfläche
  • Verbesserte Genauigkeit der Fehlerberichterstattung im Admin-Dashboard
  • Bessere Unterscheidung zwischen neuen Produkten und tatsächlichen Updates

🚨 Version 2.0.23 - Session 6 (2025-05-30) - SYNCHRONISATIONS-KORREKTUREN

🐛 Kritische Korrekturen
  • KRITISCH: Korrektur des Synchronisations-Verriegelungsmechanismus zur Vermeidung von NOT NULL-Constraint-Verletzungen
  • KRITISCH: Korrektur des Schutzes vor gleichzeitigen Synchronisationen mit temporären Verriegelungs-IDs
  • KRITISCH: Korrektur ungenauer UPDATE-Abfragen, die mehrere Variant-Datensätze betrafen
  • Korrektur von Synchronisationsfehlern für neue Produkte aufgrund leerer Shopify-IDs
  • Verbesserung der Genauigkeit von updateProductTimestamp() durch Hinzufügung von shopifyVariantId zur WHERE-Klausel
⚡ Verbesserungen
  • NEU: Intelligentes temporäres Verriegelungssystem mit einzigartigem Format TEMP_LOCK_[timestamp]_[productId]
  • NEU: Verbesserter Schutz vor gleichzeitigen Synchronisationen für manuelle und automatische (Cron) Synchronisationen
  • NEU: Verbesserte Genauigkeit des Variant-Mappings zur Vermeidung von Cross-Contamination zwischen Varianten
  • Bessere Fehlerbehandlung und Protokollierung für Synchronisations-Verriegelungsoperationen
  • Vollständige Analyse und Korrektur der Produkt-Variant-Beziehungshandhabung

🚨 Version 2.0.23 - Session 5 (2025-05-30) - KRITISCHE KORREKTUREN

🐛 Kritische Korrekturen
  • KRITISCH: Fehler bei manueller Synchronisation behoben - fehlender isManualSync=true Parameter
  • KRITISCH: setSyncLock() korrigiert, die leere String-IDs statt NULL-Werte in Datenbank erstellte
  • Fehler: "Keine Produkte zu synchronisieren" Meldung behoben, die manuelle Synchronisation blockierte
  • Fehler: Datenbankverunreinigung mit ungültigen Shopify-IDs entfernt
⚡ Neue Funktionen
  • NEU: Synchronisations-Fehlerverfolgung mit last_sync_status und last_sync_error Feldern
  • NEU: Anzeige von Fehlerstatistiken in der Administrationsoberfläche mit visuellen Warnungen
  • NEU: Verbesserte Sync-Lock-Verwaltung mit Statusverfolgung ('success', 'error', 'skipped', 'pending')
  • Verbesserung: Datenbankschema mit automatischer Bereinigung ungültiger Datensätze
  • Verbesserung: Umfassende Fehlermeldungen für fehlgeschlagene Synchronisationen

🔧 Version 2.0.23 - Session 4 (2025-05-30) - CODE-OPTIMIERUNG

⚡ Große Verbesserungen
  • Code-Faktorisierung: Erstellung der Methode getProductVariants() zur Eliminierung von Code-Duplikation zwischen importProducts() und importProductsManual()
  • Transaktionsbehandlung: Vollständige Transaktionsverwaltung mit begin...commit/rollback in importProductsManual() hinzugefügt
  • Wartbarkeit: Vereinheitlichung der Variant-Verarbeitungslogik zwischen automatischer und manueller Synchronisation
  • Verbesserte Logs: Detaillierte Logs für Transaktionsverfolgung und Fehlerüberwachung hinzugefügt
🔧 Kritische Korrekturen
  • Undefinierte Variable: Kritischen Bug behoben, wo $product in importProductsManual() undefiniert war
  • Synchronisationszähler: Fehlende Logik für die Inkrementierung von $numSynced behoben
  • Fehlerbehandlung: Verbesserte Fehlerbehandlung mit automatischem Rollback
Technische Auswirkung: Diese Aktualisierung verbessert die Robustheit und Wartbarkeit des Synchronisationscodes erheblich, mit einer Reduzierung von mehr als 30 Zeilen dupliziertem Code.

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

🔧 Abschließende Korrekturen
  • Numerische SKUs: Suche nach rein numerischen SKUs (z.B. 00667) in manueller Oberfläche behoben (Issue #51)
  • Unerwünschte Synchronisation: Synchronisation von Produkten ohne Tags/Kategorien behoben (Issue #52)
  • GETPOST('term', 'alphanohtml') Korruption numerischer SKUs in ajax/search_products.php behoben
  • Spezialisierte Suchlogik für numerische SKUs mit mehreren Ansätzen hinzugefügt
  • Obligatorische Kategoriefilterung in der Synchronisation implementiert
🆕 Neue Hauptfunktion
  • Kategorie-Vorschau-Interface: Vollständige Vorschau vor manueller Synchronisation (Issue #50)
  • Vollständiges Kategorieanalysesystem und Synchronisationsvorschau
  • Erweiterte Oberfläche mit Kategoriedetails, Fortschrittsbalken und Zusammenfassungsstatistiken
  • Echtzeitanalyse über AJAX-Endpunkt ajax/preview_sync.php
  • Vollständige Unterstützung für französische Übersetzungen der Vorschaufunktionalität

Version 2.0.23 - Mai 2025

🔧 Refactoring
  • Code-Bereinigung: Veraltete Synchronisationsmethoden nach Vereinheitlichung entfernt
  • Veraltete synchronizeProductsToShopify() Methode entfernt (239 Zeilen)
  • Unbenutzte syncProductWithVariants() und syncProductAsVariant() Methoden entfernt
  • Redundante getShopifyProductId() Hilfsmethode entfernt
  • Codebasis durch Eliminierung doppelter Synchronisationslogik vereinfacht
  • Gesamte Synchronisation zur bewährten importProductsManual() Methode vereinheitlicht
🐛 Kritische Korrekturen
  • 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