diff --git a/sync_manager.py b/sync_manager.py index 3abcc4a1..6d1dbf48 100644 --- a/sync_manager.py +++ b/sync_manager.py @@ -256,11 +256,22 @@ class SyncManager: """ self.logger.info("========== START SYNC-DEBUG-MODUS ==========") - if not self._load_data(): - self.logger.error("Debug abgebrochen, da das Laden der Daten fehlschlug.") + # Lade die Rohdaten, aber brich die _load_data Funktion noch nicht ab + self.logger.info("Lade Rohdaten aus Google Sheet für Tiefenanalyse...") + try: + all_data_with_headers = self.sheet_handler.get_all_data_with_headers() + if not all_data_with_headers: + self.logger.error("Debug abgebrochen, Google Sheet ist leer.") + return + except Exception as e: + self.logger.error(f"Debug abgebrochen, Fehler beim Laden der Rohdaten: {e}") return if not debug_id: + # Führe den Rest von _load_data aus für die allgemeine Statistik + if not self._load_data(): + self.logger.error("Debug abgebrochen, da das Laden der Daten fehlschlug.") + return self.logger.info("Keine spezifische ID angegeben. Führe allgemeine Statistik-Analyse durch.") d365_ids = set(self.d365_df['CRM ID']) gsheet_ids = set(self.gsheet_df[self.gsheet_df['CRM ID'] != '']['CRM ID'].dropna()) @@ -273,41 +284,64 @@ class SyncManager: # --- TIEFENANALYSE FÜR EINE SPEZIFISCHE ID --- self.logger.info(f"\n--- Tiefenanalyse für CRM ID: {debug_id} ---") - debug_id = debug_id.lower().strip() + debug_id_lower = debug_id.lower().strip() + + # 1. Finde die Roh-Zeile im Google Sheet + self.logger.info("\n--- Rohdaten-Analyse aus Google Sheet ---") + header = all_data_with_headers[self.sheet_handler._header_rows - 1] + crm_id_index = -1 + try: + # Finde den Index der 'CRM ID' Spalte im Header + crm_id_index = header.index("CRM ID") + except ValueError: + self.logger.error("Spalte 'CRM ID' nicht im Header des Google Sheets gefunden!") - # 1. Daten aus D365 suchen - d365_row = self.d365_df[self.d365_df['CRM ID'] == debug_id] + found_raw_row = None + if crm_id_index != -1: + for i, row in enumerate(all_data_with_headers[self.sheet_handler._header_rows:]): + # Stelle sicher, dass die Zeile lang genug ist + if len(row) > crm_id_index: + if str(row[crm_id_index]).lower().strip() == debug_id_lower: + found_raw_row = row + self.logger.info(f"Roh-Zeile gefunden bei Index {i} (nach Header):") + self.logger.info(found_raw_row) + break + + if not found_raw_row: + self.logger.warning("ID in den Rohdaten des Google Sheets nicht gefunden.") + + # 2. Führe jetzt die normale Datenverarbeitung durch, um das DataFrame zu bekommen + if not self._load_data(): + self.logger.error("Debug abgebrochen, da das Laden der Daten fehlschlug.") + return + + # 3. Analyse der DataFrames (wie gehabt) + d365_row = self.d365_df[self.d365_df['CRM ID'] == debug_id_lower] if d365_row.empty: self.logger.warning("ID in D365-Export nicht gefunden.") else: - self.logger.info("Datensatz aus D365-Export:") - # .to_dict('records')[0] wandelt die Zeile in ein lesbares Dictionary um + self.logger.info("\nDatensatz aus D365-Export (nach Verarbeitung):") self.logger.info(d365_row.to_dict('records')[0]) - # 2. Daten aus GSheet suchen - gsheet_row = self.gsheet_df[self.gsheet_df['CRM ID'] == debug_id] + gsheet_row = self.gsheet_df[self.gsheet_df['CRM ID'] == debug_id_lower] if gsheet_row.empty: - self.logger.warning("ID im Google Sheet nicht gefunden.") + self.logger.warning("ID im Google Sheet DataFrame nicht gefunden (nach Bereinigung).") else: - self.logger.info("\nDatensatz aus Google Sheet:") + self.logger.info("\nDatensatz aus Google Sheet (nach Verarbeitung zu DataFrame):") self.logger.info(gsheet_row.to_dict('records')[0]) - # 3. Direkter Vergleich des kritischen Feldes + # 4. Direkter Vergleich des kritischen Feldes if not d365_row.empty and not gsheet_row.empty: self.logger.info("\n--- Direkter Feld-Vergleich: CRM Anzahl Techniker ---") d365_val = d365_row.iloc[0]['CRM Anzahl Techniker'] gsheet_val = gsheet_row.iloc[0]['CRM Anzahl Techniker'] self.logger.info(f"Wert aus D365: '{d365_val}' (Typ: {type(d365_val)})") - self.logger.info(f"Wert aus GSheet: '{gsheet_val}' (Typ: {type(gsheet_val)})") + self.logger.info(f"Wert aus GSheet DataFrame: '{gsheet_val}' (Typ: {type(gsheet_val)})") - # Simuliere die Vergleichslogik - d365_val_str = str(d365_val).strip() - gsheet_val_str = str(gsheet_val).strip() - - if d365_val_str != gsheet_val_str: - self.logger.info("--> Ergebnis nach String-Konvertierung: Werte sind UNTERSCHIEDLICH.") + if str(d365_val).strip() != str(gsheet_val).strip(): + self.logger.info("--> Ergebnis: Werte sind UNTERSCHIEDLICH.") else: - self.logger.info("--> Ergebnis nach String-Konvertierung: Werte sind IDENTISCH.") + self.logger.info("--> Ergebnis: Werte sind IDENTISCH.") self.logger.info("========== ENDE SYNC-DEBUG-MODUS ==========") \ No newline at end of file