Fix: NameError, IndentationError, UnboundLocalError & Parent-Wiki Logik
- Korrektur eines NameError in `_process_single_row` durch Verwendung der korrekten Log-Variablen `grund_message_wiki_str`.
- Behebung eines IndentationError in `process_reevaluation_rows` bei der Initialisierung von `processed_count_actual`.
- Korrektur eines UnboundLocalError in `serp_wikipedia_lookup` durch korrekte Initialisierung der `bonus`-Variable.
- Anpassung der Logik in `_process_single_row` zur Priorisierung der Parent-Wiki-Suche (aus Spalte D, dann O), wenn Spalte R (Tochter-Wiki) leer ist, bevor die allgemeine Tochter-Wiki-Verarbeitung (inkl. `force_reeval`) greift.
- Korrektur von `KeyError`s in `_process_single_row` durch Verwendung der korrekten Schreibweise (ohne Umlaute) für Spaltennamen-Schlüssel aus `COLUMN_MAP` ("Chat Begruendung Wiki Inkonsistenz", "Begruendung bei Abweichung").
- Korrektur der Limit-Prüfung in `process_reevaluation_rows`, um das Limit vor dem Aufruf von `_process_single_row` anzuwenden.
- Entfernung eines fehlerhaften Code-Blocks in `run_plausibility_checks_batch`, der einen `NameError` (Variable `updates`) verursachte. Batch-Update-Logik für `all_sheet_updates` präzisiert.
- Hinzufügen einer Debug-Logausgabe für `current_wiki_url_r` in `_process_single_row` zur besseren Analyse des Inhalts von Spalte R.
This commit is contained in:
@@ -8079,169 +8079,149 @@ class DataProcessor:
|
||||
return results
|
||||
|
||||
|
||||
|
||||
def run_plausibility_checks_batch(self, start_sheet_row=None, end_sheet_row=None, limit=None):
|
||||
"""
|
||||
Führt Konsolidierung und Plausibilitäts-Checks für einen Bereich von Zeilen durch.
|
||||
- Konsolidiert Umsatz/MA (BD/BE) basierend auf CRM/Wiki und Parent-Account (D).
|
||||
- Ruft _check_financial_plausibility für jede Zeile auf.
|
||||
- Schreibt konsolidierte Werte und Plausi-Ergebnisse (BG-BM) ins Sheet.
|
||||
- Setzt den Plausibilität Prüfdatum (BM).
|
||||
self.logger.info(f"Starte Modus 'plausi_check_data' (Konsolidierung & Plausi-Checks). Bereich: {start_sheet_row if start_sheet_row is not None else 'Start'}-{end_sheet_row if end_sheet_row else 'Ende'}, Limit: {limit if limit is not None else 'Unbegrenzt'}")
|
||||
|
||||
Args:
|
||||
start_sheet_row (int, optional): Die 1-basierte Startzeile. Default: Ab erster Datenzeile.
|
||||
end_sheet_row (int, optional): Die 1-basierte Endzeile. Default: Bis Ende des Sheets.
|
||||
limit (int, optional): Maximale Anzahl zu verarbeitender Zeilen. Default: Unbegrenzt.
|
||||
"""
|
||||
self.logger.info(f"Starte Modus 'plausi_check_data' (Konsolidierung & Plausi-Checks). Bereich: {start_sheet_row if start_sheet_row is not None else 'Start'}-{end_sheet_row if end_sheet_row else 'Ende'}, Limit: {limit if limit is not None else 'Unbegrenzt'}")
|
||||
if not self.sheet_handler.load_data():
|
||||
self.logger.error("Konnte Sheet-Daten nicht laden für Plausi-Checks. Abbruch.")
|
||||
return
|
||||
|
||||
# --- Daten laden und Start/Ende bestimmen ---
|
||||
if not self.sheet_handler.load_data():
|
||||
self.logger.error("Konnte Sheet-Daten nicht laden für Plausi-Checks. Abbruch.")
|
||||
return
|
||||
all_data = self.sheet_handler.get_all_data_with_headers()
|
||||
header_offset = self.sheet_handler._header_rows
|
||||
total_sheet_rows = len(all_data)
|
||||
|
||||
all_data = self.sheet_handler.get_all_data_with_headers()
|
||||
header_offset = self.sheet_handler._header_rows
|
||||
total_sheet_rows = len(all_data)
|
||||
effective_start_row = start_sheet_row if start_sheet_row is not None else header_offset + 1
|
||||
effective_end_row = end_sheet_row if end_sheet_row is not None else total_sheet_rows
|
||||
|
||||
effective_start_row = start_sheet_row if start_sheet_row is not None else header_offset + 1
|
||||
effective_end_row = end_sheet_row if end_sheet_row is not None else total_sheet_rows
|
||||
|
||||
if effective_start_row > effective_end_row or effective_start_row > total_sheet_rows:
|
||||
self.logger.info("Start liegt nach Ende oder außerhalb des Sheets. Keine Zeilen zu verarbeiten.")
|
||||
return
|
||||
|
||||
self.logger.info(f"Verarbeite Zeilen {effective_start_row} bis {effective_end_row} für Konsolidierung und Plausi-Checks.")
|
||||
|
||||
# --- Notwendige Spalten prüfen ---
|
||||
required_keys_for_plausi_mode = [
|
||||
"CRM Umsatz", "Wiki Umsatz", "CRM Anzahl Mitarbeiter", "Wiki Mitarbeiter", "Parent Account Name",
|
||||
"Finaler Umsatz (Wiki>CRM)", "Finaler Mitarbeiter (Wiki>CRM)",
|
||||
"Plausibilität Umsatz", "Plausibilität Mitarbeiter", "Plausibilität Umsatz/MA Ratio",
|
||||
"Abweichung Umsatz CRM/Wiki", "Abweichung MA CRM/Wiki", "Plausibilität Begründung",
|
||||
"Plausibilität Prüfdatum"
|
||||
]
|
||||
if not all(key in COLUMN_MAP for key in required_keys_for_plausi_mode):
|
||||
missing_k = [k for k in required_keys_for_plausi_mode if k not in COLUMN_MAP]
|
||||
self.logger.error(f"Nicht alle benötigten Spalten ({missing_k}) für Modus 'plausi_check_data' in COLUMN_MAP. Abbruch.")
|
||||
return
|
||||
|
||||
# --- Verarbeitung ---
|
||||
all_sheet_updates = []
|
||||
processed_rows_count = 0
|
||||
now_timestamp_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
update_batch_limit_config = getattr(Config, 'UPDATE_BATCH_ROW_LIMIT', 50)
|
||||
# Jede Zeile generiert ca. 9 Updates (BD, BE, BG-BL, BM)
|
||||
# Daher ist die Anzahl der Operationen ca. 9 * Anzahl Zeilen
|
||||
# Wir lösen den Batch-Update aus, wenn die Anzahl der Operationen das Limit erreicht.
|
||||
# update_batch_operations_trigger = update_batch_limit_config * 9
|
||||
# Sicherer: nach jeder `update_batch_limit_config`-ten Zeile updaten
|
||||
|
||||
for row_num_sheet in range(effective_start_row, effective_end_row + 1):
|
||||
if limit is not None and processed_rows_count >= limit:
|
||||
self.logger.info(f"Verarbeitungslimit von {limit} Zeilen erreicht.")
|
||||
break
|
||||
if effective_start_row > effective_end_row or effective_start_row > total_sheet_rows:
|
||||
self.logger.info("Start liegt nach Ende oder außerhalb des Sheets. Keine Zeilen zu verarbeiten.")
|
||||
return
|
||||
|
||||
row_list_idx = row_num_sheet - 1
|
||||
if row_list_idx >= total_sheet_rows: break # Ende der Daten erreicht
|
||||
row_data = all_data[row_list_idx] # Rohdaten der aktuellen Zeile
|
||||
self.logger.info(f"Verarbeite Zeilen {effective_start_row} bis {effective_end_row} für Konsolidierung und Plausi-Checks.")
|
||||
|
||||
# Überspringe leere Zeilen oder Zeilen ohne Firmennamen
|
||||
crm_name_check = self._get_cell_value_safe(row_data, "CRM Name").strip()
|
||||
if not crm_name_check:
|
||||
# self.logger.debug(f"Zeile {row_num_sheet}: Übersprungen (kein Firmenname).")
|
||||
continue
|
||||
required_keys_for_plausi_mode = [ # Schlüssel wie gehabt
|
||||
"CRM Umsatz", "Wiki Umsatz", "CRM Anzahl Mitarbeiter", "Wiki Mitarbeiter", "Parent Account Name",
|
||||
"Finaler Umsatz (Wiki>CRM)", "Finaler Mitarbeiter (Wiki>CRM)",
|
||||
"Plausibilität Umsatz", "Plausibilität Mitarbeiter", "Plausibilität Umsatz/MA Ratio",
|
||||
"Abweichung Umsatz CRM/Wiki", "Abweichung MA CRM/Wiki", "Plausibilität Begründung",
|
||||
"Plausibilität Prüfdatum", "CRM Name" # CRM Name für Logging hinzugefügt
|
||||
]
|
||||
if not all(key in COLUMN_MAP for key in required_keys_for_plausi_mode):
|
||||
missing_k = [k for k in required_keys_for_plausi_mode if k not in COLUMN_MAP]
|
||||
self.logger.error(f"Nicht alle benötigten Spalten ({missing_k}) für Modus 'plausi_check_data' in COLUMN_MAP. Abbruch.")
|
||||
return
|
||||
|
||||
all_sheet_updates = []
|
||||
processed_rows_count = 0
|
||||
now_timestamp_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
update_batch_limit_config = getattr(Config, 'UPDATE_BATCH_ROW_LIMIT', 50)
|
||||
|
||||
self.logger.debug(f"Zeile {row_num_sheet} ({crm_name_check[:30]}...): Starte Konsolidierung und Plausi-Check.")
|
||||
current_row_updates = []
|
||||
|
||||
# 1. Konsolidierung (BD, BE)
|
||||
final_umsatz_str_konsolidiert = "k.A."
|
||||
final_ma_str_konsolidiert = "k.A."
|
||||
parent_account_name_d_val = self._get_cell_value_safe(row_data, "Parent Account Name").strip()
|
||||
|
||||
try:
|
||||
crm_umsatz_val_str = self._get_cell_value_safe(row_data, "CRM Umsatz")
|
||||
wiki_umsatz_val_str = self._get_cell_value_safe(row_data, "Wiki Umsatz")
|
||||
crm_ma_val_str = self._get_cell_value_safe(row_data, "CRM Anzahl Mitarbeiter")
|
||||
wiki_ma_val_str = self._get_cell_value_safe(row_data, "Wiki Mitarbeiter")
|
||||
for row_num_sheet in range(effective_start_row, effective_end_row + 1):
|
||||
if limit is not None and processed_rows_count >= limit:
|
||||
self.logger.info(f"Verarbeitungslimit von {limit} Zeilen erreicht.")
|
||||
break
|
||||
|
||||
num_crm_umsatz = get_numeric_filter_value(crm_umsatz_val_str, is_umsatz=True)
|
||||
num_wiki_umsatz = get_numeric_filter_value(wiki_umsatz_val_str, is_umsatz=True)
|
||||
num_crm_ma = get_numeric_filter_value(crm_ma_val_str, is_umsatz=False)
|
||||
num_wiki_ma = get_numeric_filter_value(wiki_ma_val_str, is_umsatz=False)
|
||||
row_list_idx = row_num_sheet - 1
|
||||
if row_list_idx >= total_sheet_rows: break
|
||||
row_data = all_data[row_list_idx]
|
||||
|
||||
if parent_account_name_d_val and parent_account_name_d_val.lower() != 'k.a.':
|
||||
self.logger.debug(f" -> Parent D ('{parent_account_name_d_val}') ist gesetzt. Konsolidiere primär mit CRM-Daten der Tochter.")
|
||||
final_num_umsatz = num_crm_umsatz if num_crm_umsatz > 0 else num_wiki_umsatz
|
||||
final_num_ma = num_crm_ma if num_crm_ma > 0 else num_wiki_ma
|
||||
else:
|
||||
final_num_umsatz = num_wiki_umsatz if num_wiki_umsatz > 0 else num_crm_umsatz
|
||||
final_num_ma = num_wiki_ma if num_wiki_ma > 0 else num_crm_ma
|
||||
crm_name_check = self._get_cell_value_safe(row_data, "CRM Name").strip()
|
||||
if not crm_name_check:
|
||||
continue
|
||||
|
||||
final_umsatz_str_konsolidiert = str(int(round(final_num_umsatz))) if final_num_umsatz > 0 else 'k.A.'
|
||||
final_ma_str_konsolidiert = str(int(round(final_num_ma))) if final_num_ma > 0 else 'k.A.'
|
||||
except Exception as e_conso_batch:
|
||||
self.logger.error(f"Fehler bei Konsolidierung in Plausi-Batch für Zeile {row_num_sheet}: {e_conso_batch}")
|
||||
final_umsatz_str_konsolidiert = "FEHLER_KONSO_PLAUSI"
|
||||
final_ma_str_konsolidiert = "FEHLER_KONSO_PLAUSI"
|
||||
self.logger.debug(f"Zeile {row_num_sheet} ({crm_name_check[:30]}...): Starte Konsolidierung und Plausi-Check.")
|
||||
current_row_updates = []
|
||||
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Finaler Umsatz (Wiki>CRM)"] + 1)}{row_num_sheet}', 'values': [[final_umsatz_str_konsolidiert]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Finaler Mitarbeiter (Wiki>CRM)"] + 1)}{row_num_sheet}', 'values': [[final_ma_str_konsolidiert]]})
|
||||
# 1. Konsolidierung (BD, BE)
|
||||
# ... (Ihre bestehende Logik für Konsolidierung hier) ...
|
||||
# Beispiel:
|
||||
final_umsatz_str_konsolidiert = "k.A."
|
||||
final_ma_str_konsolidiert = "k.A."
|
||||
parent_account_name_d_val = self._get_cell_value_safe(row_data, "Parent Account Name").strip()
|
||||
|
||||
# 2. Plausibilitäts-Checks (BG-BM)
|
||||
if not final_umsatz_str_konsolidiert.startswith("FEHLER") and not final_ma_str_konsolidiert.startswith("FEHLER"):
|
||||
try:
|
||||
plausi_input_data = {
|
||||
"Finaler Umsatz (Wiki>CRM)": final_umsatz_str_konsolidiert,
|
||||
"Finaler Mitarbeiter (Wiki>CRM)": final_ma_str_konsolidiert,
|
||||
"CRM Umsatz": self._get_cell_value_safe(row_data, "CRM Umsatz"),
|
||||
"Wiki Umsatz": self._get_cell_value_safe(row_data, "Wiki Umsatz"), # Direkter Wert aus Sheet
|
||||
"CRM Anzahl Mitarbeiter": self._get_cell_value_safe(row_data, "CRM Anzahl Mitarbeiter"),
|
||||
"Wiki Mitarbeiter": self._get_cell_value_safe(row_data, "Wiki Mitarbeiter"), # Direkter Wert aus Sheet
|
||||
"Parent Account Name": parent_account_name_d_val
|
||||
}
|
||||
plausi_results = self._check_financial_plausibility(plausi_input_data)
|
||||
crm_umsatz_val_str = self._get_cell_value_safe(row_data, "CRM Umsatz")
|
||||
wiki_umsatz_val_str = self._get_cell_value_safe(row_data, "Wiki Umsatz") # Nimmt den Wert direkt aus dem Sheet
|
||||
crm_ma_val_str = self._get_cell_value_safe(row_data, "CRM Anzahl Mitarbeiter")
|
||||
wiki_ma_val_str = self._get_cell_value_safe(row_data, "Wiki Mitarbeiter") # Nimmt den Wert direkt aus dem Sheet
|
||||
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Umsatz"] + 1)}{row_num_sheet}', 'values': [[plausi_results.get("plaus_umsatz_flag", "ERR_FLAG")]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Mitarbeiter"] + 1)}{row_num_sheet}', 'values': [[plausi_results.get("plaus_ma_flag", "ERR_FLAG")]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Umsatz/MA Ratio"] + 1)}{row_num_sheet}', 'values': [[plausi_results.get("plaus_ratio_flag", "ERR_FLAG")]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Abweichung Umsatz CRM/Wiki"] + 1)}{row_num_sheet}', 'values': [[plausi_results.get("abweichung_umsatz_flag", "ERR_FLAG")]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Abweichung MA CRM/Wiki"] + 1)}{row_num_sheet}', 'values': [[plausi_results.get("abweichung_ma_flag", "ERR_FLAG")]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Begründung"] + 1)}{row_num_sheet}', 'values': [[plausi_results.get("plausi_begruendung_final", "Fehler Begr.")]]})
|
||||
|
||||
except Exception as e_plausi_run_batch:
|
||||
self.logger.error(f"Fehler im Plausi-Check Aufruf (Batch-Modus) für Zeile {row_num_sheet}: {e_plausi_run_batch}")
|
||||
# Fehler-Flags für Plausi-Spalten setzen
|
||||
num_crm_umsatz = get_numeric_filter_value(crm_umsatz_val_str, is_umsatz=True)
|
||||
num_wiki_umsatz = get_numeric_filter_value(wiki_umsatz_val_str, is_umsatz=True)
|
||||
num_crm_ma = get_numeric_filter_value(crm_ma_val_str, is_umsatz=False)
|
||||
num_wiki_ma = get_numeric_filter_value(wiki_ma_val_str, is_umsatz=False)
|
||||
|
||||
if parent_account_name_d_val and parent_account_name_d_val.lower() != 'k.a.':
|
||||
self.logger.debug(f" -> Parent D ('{parent_account_name_d_val}') ist gesetzt. Konsolidiere primär mit CRM-Daten der Tochter.")
|
||||
final_num_umsatz = num_crm_umsatz if num_crm_umsatz > 0 else num_wiki_umsatz
|
||||
final_num_ma = num_crm_ma if num_crm_ma > 0 else num_wiki_ma
|
||||
else:
|
||||
final_num_umsatz = num_wiki_umsatz if num_wiki_umsatz > 0 else num_crm_umsatz
|
||||
final_num_ma = num_wiki_ma if num_wiki_ma > 0 else num_crm_ma
|
||||
|
||||
final_umsatz_str_konsolidiert = str(int(round(final_num_umsatz))) if final_num_umsatz > 0 else 'k.A.'
|
||||
final_ma_str_konsolidiert = str(int(round(final_num_ma))) if final_num_ma > 0 else 'k.A.'
|
||||
except Exception as e_conso_batch:
|
||||
self.logger.error(f"Fehler bei Konsolidierung in Plausi-Batch für Zeile {row_num_sheet}: {e_conso_batch}")
|
||||
final_umsatz_str_konsolidiert = "FEHLER_KONSO_PLAUSI"
|
||||
final_ma_str_konsolidiert = "FEHLER_KONSO_PLAUSI"
|
||||
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Finaler Umsatz (Wiki>CRM)"] + 1)}{row_num_sheet}', 'values': [[final_umsatz_str_konsolidiert]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Finaler Mitarbeiter (Wiki>CRM)"] + 1)}{row_num_sheet}', 'values': [[final_ma_str_konsolidiert]]})
|
||||
|
||||
# 2. Plausibilitäts-Checks (BG-BM)
|
||||
# ... (Ihre bestehende Logik für _check_financial_plausibility hier, die current_row_updates füllt) ...
|
||||
if not final_umsatz_str_konsolidiert.startswith("FEHLER") and not final_ma_str_konsolidiert.startswith("FEHLER"):
|
||||
try:
|
||||
plausi_input_data = {
|
||||
"Finaler Umsatz (Wiki>CRM)": final_umsatz_str_konsolidiert,
|
||||
"Finaler Mitarbeiter (Wiki>CRM)": final_ma_str_konsolidiert,
|
||||
"CRM Umsatz": self._get_cell_value_safe(row_data, "CRM Umsatz"),
|
||||
"Wiki Umsatz": self._get_cell_value_safe(row_data, "Wiki Umsatz"),
|
||||
"CRM Anzahl Mitarbeiter": self._get_cell_value_safe(row_data, "CRM Anzahl Mitarbeiter"),
|
||||
"Wiki Mitarbeiter": self._get_cell_value_safe(row_data, "Wiki Mitarbeiter"),
|
||||
"Parent Account Name": parent_account_name_d_val
|
||||
}
|
||||
plausi_results = self._check_financial_plausibility(plausi_input_data)
|
||||
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Umsatz"] + 1)}{row_num_sheet}', 'values': [[plausi_results.get("plaus_umsatz_flag", "ERR_FLAG")]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Mitarbeiter"] + 1)}{row_num_sheet}', 'values': [[plausi_results.get("plaus_ma_flag", "ERR_FLAG")]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Umsatz/MA Ratio"] + 1)}{row_num_sheet}', 'values': [[plausi_results.get("plaus_ratio_flag", "ERR_FLAG")]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Abweichung Umsatz CRM/Wiki"] + 1)}{row_num_sheet}', 'values': [[plausi_results.get("abweichung_umsatz_flag", "ERR_FLAG")]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Abweichung MA CRM/Wiki"] + 1)}{row_num_sheet}', 'values': [[plausi_results.get("abweichung_ma_flag", "ERR_FLAG")]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Begründung"] + 1)}{row_num_sheet}', 'values': [[plausi_results.get("plausi_begruendung_final", "Fehler Begr.")]]})
|
||||
|
||||
except Exception as e_plausi_run_batch:
|
||||
self.logger.error(f"Fehler im Plausi-Check Aufruf (Batch-Modus) für Zeile {row_num_sheet}: {e_plausi_run_batch}")
|
||||
for key_flag in ["Plausibilität Umsatz", "Plausibilität Mitarbeiter", "Plausibilität Umsatz/MA Ratio", "Abweichung Umsatz CRM/Wiki", "Abweichung MA CRM/Wiki"]:
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP[key_flag] + 1)}{row_num_sheet}', 'values': [['FEHLER_CALL']]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Begründung"] + 1)}{row_num_sheet}', 'values': [[f"Systemfehler: {str(e_plausi_run_batch)[:100]}"]]})
|
||||
else: # Fehler bei Konsolidierung
|
||||
self.logger.warning(f"Zeile {row_num_sheet}: Überspringe Plausi-Checks wegen Fehler bei Konsolidierung.")
|
||||
for key_flag in ["Plausibilität Umsatz", "Plausibilität Mitarbeiter", "Plausibilität Umsatz/MA Ratio", "Abweichung Umsatz CRM/Wiki", "Abweichung MA CRM/Wiki"]:
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP[key_flag] + 1)}{row_num_sheet}', 'values': [['FEHLER_CALL']]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Begründung"] + 1)}{row_num_sheet}', 'values': [[f"Systemfehler: {str(e_plausi_run_batch)[:100]}"]]})
|
||||
else:
|
||||
self.logger.warn(f"Zeile {row_num_sheet}: Überspringe Plausi-Checks wegen Fehler bei Konsolidierung.")
|
||||
for key_flag in ["Plausibilität Umsatz", "Plausibilität Mitarbeiter", "Plausibilität Umsatz/MA Ratio", "Abweichung Umsatz CRM/Wiki", "Abweichung MA CRM/Wiki"]:
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP[key_flag] + 1)}{row_num_sheet}', 'values': [['INPUT_FEHLER_KONSO']]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Begründung"] + 1)}{row_num_sheet}', 'values': [["Konsolidierung fehlgeschlagen"]]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP[key_flag] + 1)}{row_num_sheet}', 'values': [['INPUT_FEHLER_KONSO']]})
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Begründung"] + 1)}{row_num_sheet}', 'values': [["Konsolidierung fehlgeschlagen"]]})
|
||||
|
||||
# Plausibilität Prüfdatum (BM) setzen
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Prüfdatum"] + 1)}{row_num_sheet}', 'values': [[now_timestamp_str]]})
|
||||
|
||||
all_sheet_updates.extend(current_row_updates)
|
||||
processed_rows_count += 1
|
||||
current_row_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Prüfdatum"] + 1)}{row_num_sheet}', 'values': [[now_timestamp_str]]})
|
||||
|
||||
all_sheet_updates.extend(current_row_updates)
|
||||
processed_rows_count += 1
|
||||
|
||||
# Batch-Update auslösen, wenn Limit erreicht
|
||||
# --- 6. Batch Update fuer diese EINE Zeile ---
|
||||
if updates: # 'updates' ist die Liste, die innerhalb von _process_single_row für die aktuelle Zeile gefüllt wurde
|
||||
self.logger.info(f"Zeile {row_num_in_sheet}: Sende Batch-Update mit {len(updates)} Operationen für diese Zeile...")
|
||||
success = self.sheet_handler.batch_update_cells(updates)
|
||||
if not success:
|
||||
self.logger.error(f"Zeile {row_num_in_sheet}: ENDGUELTIGER FEHLER beim Batch-Update nach Retries.")
|
||||
else:
|
||||
if not any_processing_done: # any_processing_done wurde am Anfang auf False gesetzt und bei jeder Aktion auf True
|
||||
self.logger.debug(f"Zeile {row_num_in_sheet}: Keine Updates zum Schreiben (alle relevanten Schritte übersprungen oder nicht angefordert).")
|
||||
# Batch-Update auslösen, wenn Limit erreicht
|
||||
if processed_rows_count % update_batch_limit_config == 0 and processed_rows_count > 0:
|
||||
if all_sheet_updates:
|
||||
self.logger.info(f"Plausi-Batch: Sende {len(all_sheet_updates)} Operationen für {update_batch_limit_config} Zeilen...")
|
||||
self.sheet_handler.batch_update_cells(all_sheet_updates)
|
||||
all_sheet_updates = [] # Liste leeren nach dem Senden
|
||||
time.sleep(0.5) # Kurze Pause nach Batch-Update
|
||||
|
||||
pause_duration = max(0.05, getattr(Config, 'RETRY_DELAY', 5) / 20.0)
|
||||
time.sleep(pause_duration)
|
||||
self.logger.info(f"--- Verarbeitung fuer Zeile {row_num_in_sheet} abgeschlossen ---")
|
||||
# Ende der for-Schleife über die Zeilen
|
||||
|
||||
# Sende verbleibende Updates
|
||||
if all_sheet_updates:
|
||||
self.logger.info(f"Plausi-Batch: Sende verbleibende {len(all_sheet_updates)} Operationen...")
|
||||
self.sheet_handler.batch_update_cells(all_sheet_updates)
|
||||
|
||||
self.logger.info(f"Modus 'plausi_check_data' abgeschlossen. {processed_rows_count} Zeilen verarbeitet.")
|
||||
|
||||
# ==========================================================================
|
||||
# === Batch Processing Methods (Parent Account Suggestion) ==============
|
||||
|
||||
Reference in New Issue
Block a user