sync_manager.py aktualisiert
This commit is contained in:
@@ -64,25 +64,45 @@ class SyncManager:
|
|||||||
try:
|
try:
|
||||||
# Lade alle Daten als String, um Formatierungsfehler (besonders bei GUIDs) zu vermeiden
|
# 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('')
|
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)
|
# Finde den D365-Spaltennamen für unsere 'CRM ID'
|
||||||
if d365_guid_col and d365_guid_col in self.d365_df.columns:
|
d365_guid_col_name = next((k for k, v in self.d365_to_gsheet_map.items() if v == "CRM ID"), None)
|
||||||
self.d365_df.rename(columns={d365_guid_col: "CRM ID"}, inplace=True)
|
|
||||||
|
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:
|
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()
|
self.d365_df['CRM ID'] = self.d365_df['CRM ID'].str.strip()
|
||||||
|
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
self.logger.critical(f"FEHLER: D365-Exportdatei nicht gefunden unter: {self.d365_export_path}")
|
self.logger.critical(f"FEHLER: D365-Exportdatei nicht gefunden unter: {self.d365_export_path}")
|
||||||
return False
|
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.logger.info("Lade bestehende Daten aus dem Google Sheet...")
|
||||||
self.gsheet_df = self.sheet_handler.get_all_data_as_dataframe()
|
# KORREKTUR: Verwende die existierende Methode und erstelle den DataFrame manuell
|
||||||
if self.gsheet_df is None:
|
all_gsheet_data = self.sheet_handler.get_all_data_with_headers()
|
||||||
self.logger.error("Konnte keine Daten aus dem Google Sheet laden.")
|
|
||||||
return False
|
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.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.")
|
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