diff --git a/sync_manager.py b/sync_manager.py index 6cdddfd3..d63606c3 100644 --- a/sync_manager.py +++ b/sync_manager.py @@ -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.")