diff --git a/data_processor.py b/data_processor.py index 1501b830..067a573f 100644 --- a/data_processor.py +++ b/data_processor.py @@ -1064,27 +1064,34 @@ class DataProcessor: self.logger.info(f"{len(tasks)} Zeilen für FSM-Pitch-Generierung identifiziert. Starte Verarbeitung...") - all_sheet_updates = [] +all_sheet_updates = [] processed_count = 0 + update_batch_size = getattr(Config, 'UPDATE_BATCH_ROW_LIMIT', 50) now_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - - for task in tasks: + + for idx, task in enumerate(tasks): row_num = task['row_num'] row_data = task['data'] self.logger.debug(f"Verarbeite FSM-Pitch für Zeile {row_num}...") try: - # ... (Logik zur Extraktion der Daten für den Pitch bleibt gleich) ... + # Extrahiere alle notwendigen Daten für den Pitch company_name = self._get_cell_value_safe(row_data, "CRM Name") branche = self._get_cell_value_safe(row_data, "Chat Vorschlag Branche") or self._get_cell_value_safe(row_data, "CRM Branche") website_summary = self._get_cell_value_safe(row_data, "Website Zusammenfassung") wiki_absatz = self._get_cell_value_safe(row_data, "Wiki Absatz") - final_ma_val = self._get_cell_value_safe(row_data, "Finaler Mitarbeiter (Wiki>CRM)") - crm_techniker_val = self._get_cell_value_safe(row_data, "CRM Anzahl Techniker") - + + final_ma_val_str = self._get_cell_value_safe(row_data, "Finaler Mitarbeiter (Wiki>CRM)") + crm_techniker_val_str = self._get_cell_value_safe(row_data, "CRM Anzahl Techniker") + fsm_pitch_text = generate_fsm_argument( - company_name, branche, website_summary, wiki_absatz, final_ma_val, crm_techniker_val + company_name, + branche, + website_summary, + wiki_absatz, + final_ma_val_str, + crm_techniker_val_str ) # Update für den Pitch @@ -1107,10 +1114,16 @@ class DataProcessor: 'values': [[now_timestamp]] }) processed_count += 1 - - if all_sheet_updates: - self.logger.info(f"Sende Batch-Update für {processed_count} generierte FSM-Pitches und Timestamps...") - self.sheet_handler.batch_update_cells(all_sheet_updates) + + # NEU: Batch-Update, wenn die Größe erreicht ist oder es der letzte Task ist + if (idx + 1) % update_batch_size == 0 or (idx + 1) == len(tasks): + if all_sheet_updates: + # Die Anzahl der bearbeiteten Zeilen in diesem Batch ist len(all_sheet_updates) / 2 + num_rows_in_batch = len(all_sheet_updates) // 2 + self.logger.info(f"Sende Batch-Update für {num_rows_in_batch} FSM-Pitches (Verarbeitet bisher: {processed_count}/{len(tasks)})...") + self.sheet_handler.batch_update_cells(all_sheet_updates) + all_sheet_updates = [] # Liste für den nächsten Batch leeren + time.sleep(1) # Kurze Pause nach jedem Schreibvorgang self.logger.info(f"FSM-Pitch-Generierung abgeschlossen. {processed_count} Zeilen bearbeitet.")