sync_manager.py aktualisiert
This commit is contained in:
@@ -256,11 +256,22 @@ class SyncManager:
|
|||||||
"""
|
"""
|
||||||
self.logger.info("========== START SYNC-DEBUG-MODUS ==========")
|
self.logger.info("========== START SYNC-DEBUG-MODUS ==========")
|
||||||
|
|
||||||
if not self._load_data():
|
# Lade die Rohdaten, aber brich die _load_data Funktion noch nicht ab
|
||||||
self.logger.error("Debug abgebrochen, da das Laden der Daten fehlschlug.")
|
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
|
return
|
||||||
|
|
||||||
if not debug_id:
|
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.")
|
self.logger.info("Keine spezifische ID angegeben. Führe allgemeine Statistik-Analyse durch.")
|
||||||
d365_ids = set(self.d365_df['CRM ID'])
|
d365_ids = set(self.d365_df['CRM ID'])
|
||||||
gsheet_ids = set(self.gsheet_df[self.gsheet_df['CRM ID'] != '']['CRM ID'].dropna())
|
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 ---
|
# --- TIEFENANALYSE FÜR EINE SPEZIFISCHE ID ---
|
||||||
self.logger.info(f"\n--- Tiefenanalyse für CRM ID: {debug_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. Daten aus D365 suchen
|
# 1. Finde die Roh-Zeile im Google Sheet
|
||||||
d365_row = self.d365_df[self.d365_df['CRM ID'] == debug_id]
|
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!")
|
||||||
|
|
||||||
|
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:
|
if d365_row.empty:
|
||||||
self.logger.warning("ID in D365-Export nicht gefunden.")
|
self.logger.warning("ID in D365-Export nicht gefunden.")
|
||||||
else:
|
else:
|
||||||
self.logger.info("Datensatz aus D365-Export:")
|
self.logger.info("\nDatensatz aus D365-Export (nach Verarbeitung):")
|
||||||
# .to_dict('records')[0] wandelt die Zeile in ein lesbares Dictionary um
|
|
||||||
self.logger.info(d365_row.to_dict('records')[0])
|
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_lower]
|
||||||
gsheet_row = self.gsheet_df[self.gsheet_df['CRM ID'] == debug_id]
|
|
||||||
if gsheet_row.empty:
|
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:
|
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])
|
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:
|
if not d365_row.empty and not gsheet_row.empty:
|
||||||
self.logger.info("\n--- Direkter Feld-Vergleich: CRM Anzahl Techniker ---")
|
self.logger.info("\n--- Direkter Feld-Vergleich: CRM Anzahl Techniker ---")
|
||||||
d365_val = d365_row.iloc[0]['CRM Anzahl Techniker']
|
d365_val = d365_row.iloc[0]['CRM Anzahl Techniker']
|
||||||
gsheet_val = gsheet_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 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
|
if str(d365_val).strip() != str(gsheet_val).strip():
|
||||||
d365_val_str = str(d365_val).strip()
|
self.logger.info("--> Ergebnis: Werte sind UNTERSCHIEDLICH.")
|
||||||
gsheet_val_str = str(gsheet_val).strip()
|
|
||||||
|
|
||||||
if d365_val_str != gsheet_val_str:
|
|
||||||
self.logger.info("--> Ergebnis nach String-Konvertierung: Werte sind UNTERSCHIEDLICH.")
|
|
||||||
else:
|
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 ==========")
|
self.logger.info("========== ENDE SYNC-DEBUG-MODUS ==========")
|
||||||
Reference in New Issue
Block a user