From 9fee872fc6510e2844868b00a304f845d6ba9512 Mon Sep 17 00:00:00 2001 From: Floke Date: Thu, 28 Aug 2025 07:01:52 +0000 Subject: [PATCH] sync_manager.py aktualisiert --- sync_manager.py | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/sync_manager.py b/sync_manager.py index 9dd85e16..e9ce9927 100644 --- a/sync_manager.py +++ b/sync_manager.py @@ -186,4 +186,51 @@ class SyncManager: if not rows_to_append and not updates_to_batch: self.logger.info("Keine Änderungen festgestellt. Das Google Sheet ist bereits auf dem neuesten Stand.") - self.logger.info("Synchronisation erfolgreich abgeschlossen.") \ No newline at end of file + self.logger.info("Synchronisation erfolgreich abgeschlossen.") + + def debug_sync(self): + """ + Führt eine reine Analyse des Sync-Prozesses durch, ohne Daten zu schreiben. + Gibt detaillierte Debug-Informationen im Log aus. + """ + self.logger.info("========== START SYNC-DEBUG-MODUS ==========") + + if not self._load_data(): + self.logger.error("Debug abgebrochen, da das Laden der Daten fehlschlug.") + return + + # 1. Analyse des D365 DataFrames + self.logger.info("\n--- D365 DataFrame Analyse ---") + d365_ids_series = self.d365_df['CRM ID'].dropna() + d365_ids = set(d365_ids_series) + self.logger.info(f"Anzahl Zeilen im D365 DataFrame: {len(self.d365_df)}") + self.logger.info(f"Anzahl nicht-leerer GUIDs in D365: {len(d365_ids)}") + self.logger.info(f"Erste 5 D365 GUIDs:\n{d365_ids_series.head().to_string()}") + self.logger.info(f"Letzte 5 D365 GUIDs:\n{d365_ids_series.tail().to_string()}") + + # 2. Analyse des Google Sheet DataFrames + self.logger.info("\n--- Google Sheet DataFrame Analyse ---") + gsheet_ids_series = self.gsheet_df[self.gsheet_df['CRM ID'] != '']['CRM ID'].dropna() + gsheet_ids = set(gsheet_ids_series) + self.logger.info(f"Anzahl Zeilen im GSheet DataFrame: {len(self.gsheet_df)}") + self.logger.info(f"Anzahl nicht-leerer GUIDs im GSheet: {len(gsheet_ids)}") + self.logger.info(f"Erste 5 GSheet GUIDs:\n{gsheet_ids_series.head().to_string()}") + self.logger.info(f"Letzte 5 GSheet GUIDs:\n{gsheet_ids_series.tail().to_string()}") + + # 3. Analyse der Set-Operationen + self.logger.info("\n--- Set-Analyse (Vergleich) ---") + new_ids = d365_ids - gsheet_ids + deleted_ids = gsheet_ids - d365_ids + existing_ids = d365_ids.intersection(gsheet_ids) + + self.logger.info(f"Anzahl neuer IDs (in D365, nicht in GSheet): {len(new_ids)}") + self.logger.info(f"Anzahl zu archivierender IDs (in GSheet, nicht in D365): {len(deleted_ids)}") + self.logger.info(f"Größe der Schnittmenge (in beiden vorhanden): {len(existing_ids)}") + + if len(existing_ids) < 90 and len(d365_ids) > 90: + self.logger.warning("WARNUNG: Die Schnittmenge ist unerwartet klein. Dies bestätigt den Verdacht eines Matching-Problems!") + # Zeige ein paar IDs, die hätten übereinstimmen sollen + if gsheet_ids: + self.logger.info(f"Beispiel-GUID aus GSheet, die nicht gefunden wurde: {next(iter(gsheet_ids))}") + + self.logger.info("========== ENDE SYNC-DEBUG-MODUS ==========") \ No newline at end of file