sync_manager.py aktualisiert

This commit is contained in:
2025-08-27 14:55:06 +00:00
parent f87981b4d7
commit b0253b2cce

View File

@@ -64,25 +64,45 @@ class SyncManager:
try:
# Lade alle Daten als String, um Formatierungsfehler (besonders bei GUIDs) zu vermeiden
self.d365_df = pd.read_excel(self.d365_export_path, dtype=str).fillna('')
# Umbenennen der GUID-Spalte basierend auf dem Mapping
d365_guid_col = next((k for k, v in self.d365_to_gsheet_map.items() if v == "CRM ID"), None)
if d365_guid_col and d365_guid_col in self.d365_df.columns:
self.d365_df.rename(columns={d365_guid_col: "CRM ID"}, inplace=True)
# Finde den D365-Spaltennamen für unsere 'CRM ID'
d365_guid_col_name = next((k for k, v in self.d365_to_gsheet_map.items() if v == "CRM ID"), None)
if d365_guid_col_name and d365_guid_col_name in self.d365_df.columns:
# Umbenennen der Spalte für die interne Verarbeitung
self.d365_df.rename(columns={d365_guid_col_name: "CRM ID"}, inplace=True)
else:
raise ValueError("GUID-Spalte ('Account' oder entsprechend) nicht in der D365-Exportdatei gefunden.")
self.logger.critical(f"Die erwartete GUID-Spalte '{d365_guid_col_name}' wurde nicht in der D365-Exportdatei gefunden.")
raise ValueError("GUID-Spalte nicht in der D365-Exportdatei gefunden.")
self.d365_df['CRM ID'] = self.d365_df['CRM ID'].str.strip()
except FileNotFoundError:
self.logger.critical(f"FEHLER: D365-Exportdatei nicht gefunden unter: {self.d365_export_path}")
return False
except Exception as e:
self.logger.critical(f"FEHLER beim Lesen der Excel-Datei: {e}", exc_info=True)
return False
self.logger.info("Lade bestehende Daten aus dem Google Sheet...")
self.gsheet_df = self.sheet_handler.get_all_data_as_dataframe()
if self.gsheet_df is None:
self.logger.error("Konnte keine Daten aus dem Google Sheet laden.")
return False
# KORREKTUR: Verwende die existierende Methode und erstelle den DataFrame manuell
all_gsheet_data = self.sheet_handler.get_all_data_with_headers()
if not all_gsheet_data or len(all_gsheet_data) < 2:
self.logger.warning("Google Sheet ist leer oder enthält nur eine Header-Zeile. Erstelle leeren DataFrame.")
self.gsheet_df = pd.DataFrame(columns=COLUMN_ORDER)
else:
header = all_gsheet_data[0]
# Stelle sicher, dass die Spaltenanzahl konsistent ist
max_cols = len(header)
data_rows = [row[:max_cols] for row in all_gsheet_data[1:]]
self.gsheet_df = pd.DataFrame(data_rows, columns=header)
self.gsheet_df.fillna('', inplace=True)
if 'CRM ID' not in self.gsheet_df.columns:
self.logger.critical("Spalte 'CRM ID' nicht im Google Sheet gefunden. Abgleich nicht möglich.")
return False
self.gsheet_df['CRM ID'] = self.gsheet_df['CRM ID'].str.strip()
self.logger.info(f"{len(self.d365_df)} Datensätze aus D365 geladen, {len(self.gsheet_df)} im Google Sheet vorhanden.")