sync_manager.py aktualisiert
This commit is contained in:
@@ -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.")
|
||||
|
||||
Reference in New Issue
Block a user