diff --git a/list_generator.py b/list_generator.py index 7f04d9f0..7ae88a80 100644 --- a/list_generator.py +++ b/list_generator.py @@ -39,7 +39,10 @@ def get_services_with_service_account(): return docs_service, drive_service def generate_group_data_for_doc(docs_service, document_id_to_fill): - """Befüllt ein existierendes Dokument mit Kinderlisten und Anzahl pro Gruppe.""" + """ + Befüllt ein existierendes Dokument mit: + - Pro Gruppe: Tabellenüberschrift, Kinderliste, Anzahl Kinder, Erinnerungstext, Stand. + """ kinder_nach_gruppen = collections.defaultdict(list) try: @@ -55,6 +58,9 @@ def generate_group_data_for_doc(docs_service, document_id_to_fill): for gk_key in kinder_nach_gruppen: kinder_nach_gruppen[gk_key].sort(key=lambda x: (x['Nachname'].lower(), x['Vorname'].lower())) sorted_gruppen_namen = sorted(kinder_nach_gruppen.keys()) + + # Das Stand-Datum wird einmalig ermittelt und für alle Gruppen verwendet + stand_zeit = datetime.now().strftime("%d.%m.%Y %H:%M Uhr") requests = [] col_width_nachname = 25 @@ -62,7 +68,7 @@ def generate_group_data_for_doc(docs_service, document_id_to_fill): for i, gruppe_original in enumerate(sorted_gruppen_namen): kinder_liste = kinder_nach_gruppen[gruppe_original] - anzahl_kinder = len(kinder_liste) + anzahl_kinder = len(kinder_liste) # Anzahl Kinder für die aktuelle Gruppe gruppe_display_name = gruppe_original + GRUPPENNAME_SUFFIX group_block_lines = [] @@ -70,39 +76,50 @@ def generate_group_data_for_doc(docs_service, document_id_to_fill): # "Tabellen"-Daten für die aktuelle Gruppe kopf_nachname = "Nachname".ljust(col_width_nachname) kopf_vorname = "Vorname".ljust(col_width_vorname) - group_block_lines.append(f"{kopf_nachname}\t{kopf_vorname}\tGruppe") # Überschriften (nicht fett per API) + group_block_lines.append(f"{kopf_nachname}\t{kopf_vorname}\tGruppe") # Überschriften for kind in kinder_liste: nachname_gepadded = kind['Nachname'].ljust(col_width_nachname) vorname_gepadded = kind['Vorname'].ljust(col_width_vorname) group_block_lines.append(f"{nachname_gepadded}\t{vorname_gepadded}\t{gruppe_display_name}") group_block_lines.append("") # Leerzeile nach der Kinderliste - group_block_lines.append(f"{anzahl_kinder} angemeldete Kinder") # Anzahl Kinder unter der Liste + + # --- HIER DIE GEWÜNSCHTEN INFOS WIEDER HINZUFÜGEN --- + group_block_lines.append(f"{anzahl_kinder} angemeldete Kinder") + group_block_lines.append("") # Leerzeile + group_block_lines.append("Dies ist die Liste der bereits angemeldeten Kinder. Bitte die Eltern der noch fehlenden") + group_block_lines.append("Kinder an die Anmeldung erinnern.") + group_block_lines.append("") # Leerzeile + group_block_lines.append(f"Stand {stand_zeit}") # Verwendet das einmalig ermittelte Stand-Datum group_block_lines.append("") # Weitere Leerzeile für Abstand + # --- ENDE HINZUGEFÜGTE INFOS --- full_group_block_text = "\n".join(group_block_lines) + "\n" - # Einfügen des Textblocks für die Gruppe - # Alle Blöcke werden nach der einmaligen Info (die in main eingefügt wurde) angehängt - requests.append({'insertText': {'endOfSegmentLocation': {}, 'text': full_group_block_text}}) + if i == 0: # Erster Block nach der einmaligen Info (die in main eingefügt wurde) + requests.append({'insertText': {'endOfSegmentLocation': {}, 'text': full_group_block_text}}) + else: + requests.append({'insertText': {'endOfSegmentLocation': {}, 'text': full_group_block_text}}) if i < len(sorted_gruppen_namen) - 1: requests.append({'insertPageBreak': {'endOfSegmentLocation': {}}}) + # ... (Rest der Funktion: Batch-Update ausführen, bleibt gleich) ... if requests: if not docs_service: print("FEHLER: Docs Service nicht da für Befüllung."); return False try: - print(f"Sende Batch Update (nur Gruppenlisten + Anzahl) für Doc ID '{document_id_to_fill}'...") + print(f"Sende Batch Update (Gruppenlisten, Anzahl, Stand) für Doc ID '{document_id_to_fill}'...") docs_service.documents().batchUpdate(documentId=document_id_to_fill, body={'requests': requests}).execute() - print("Dokument erfolgreich mit Gruppenlisten + Anzahl befüllt.") + print("Dokument erfolgreich mit Gruppenlisten, Anzahl und Stand befüllt.") return True except HttpError as err: - print(f"Fehler beim Befüllen (Gruppenlisten + Anzahl) Doc ID '{document_id_to_fill}': {err}") + print(f"Fehler beim Befüllen (Gruppenlisten, Anzahl, Stand) Doc ID '{document_id_to_fill}': {err}") # ... (Fehlerdetails) ... return False - return True + return True # --- Main execution block --- +# (Der Main Block bleibt exakt so wie in der letzten Version, die die einmalige Info eingefügt hat) if __name__ == "__main__": print(f"Info: Ordner-ID für Dokument: '{TARGET_FOLDER_ID}'") docs_api_service, drive_api_service = get_services_with_service_account() @@ -132,11 +149,11 @@ if __name__ == "__main__": # 2. Einmalige Info (Kita, Datum) GANZ AM ANFANG des Dokuments einfügen initial_info_lines = [ "Info zum Kopieren für Ihre manuelle Kopfzeile:", - EINRICHTUNG_INFO, - FOTODATUM_INFO, - "\n" + "="*70 + "\n" # Deutlicher Trenner + EINRICHTUNG_INFO, # Verwendet die Konstanten + FOTODATUM_INFO, # Verwendet die Konstanten + "\n" + "="*70 + "\n" ] - initial_text = "\n".join(initial_info_lines) + "\n" # Extra Newline für Abstand zum ersten Gruppenblock + initial_text = "\n".join(initial_info_lines) + "\n" initial_requests = [{'insertText': {'location': {'index': 1}, 'text': initial_text}}] try: @@ -146,7 +163,7 @@ if __name__ == "__main__": print(f"Fehler beim Einfügen der einmaligen Info: {err}") # 3. Dokument mit gruppenspezifischen Daten befüllen - success_filling = generate_group_data_for_doc(docs_api_service, document_id) + success_filling = generate_group_data_for_doc(docs_api_service, document_id) # Funktionsname angepasst if success_filling: print(f"\n--- SKRIPT BEENDET ---")