From c14794dcddbdf04edb83da9713e8b40d21b1b4be Mon Sep 17 00:00:00 2001 From: Floke Date: Wed, 28 May 2025 12:07:31 +0000 Subject: [PATCH] reset --- list_generator.py | 114 ++++++---------------------------------------- 1 file changed, 14 insertions(+), 100 deletions(-) diff --git a/list_generator.py b/list_generator.py index f32aca8c..e05a18da 100644 --- a/list_generator.py +++ b/list_generator.py @@ -158,112 +158,26 @@ def generate_familien_content(docs_service, document_id_to_fill): sorted_tage = sorted(termine_nach_tagen.keys(), key=lambda d: datetime.strptime(d, "%d.%m.%Y")) requests = [] - # Definieren Sie die Startpositionen (Anzahl Zeichen vom Zeilenanfang) - # und die maximale Breite für jede Spalte. - # Diese Werte müssen Sie ggf. experimentell anpassen! - # Format: (Startposition, Maximale Inhaltsbreite vor Padding/Abschneiden) - # Die tatsächliche Breite der "Zelle" ist dann Start_nächste_Spalte - Start_aktuelle_Spalte - - # Ziel-Spalten-Layout (Beispielwerte, müssen angepasst werden!) - # Spalte | Start | Max Inhalt | Sichtbare Breite der Spalte - # ------------------------------------------------------------- - # Vorname | 0 | 18 | 20 (bis Start Nachname) - # Nachname | 20 | 18 | 20 (bis Start Uhrzeit) - # Uhrzeit | 40 | 6 | 8 (bis Start # Kinder) - # # Kinder | 48 | 8 | 10 (bis Start Pub) - # Pub | 58 | 3 | 5 (bis Start Erledigt) - # Erledigt | 63 | 8 | - (Rest der Zeile) - - col_configs = [ - {"name": "Vorname", "start": 0, "max_content": 18, "header": "Vorname"}, - {"name": "Nachname", "start": 20, "max_content": 18, "header": "Nachname"}, - {"name": "Uhrzeit", "start": 40, "max_content": 6, "header": "Uhrzeit"}, - {"name": "Kinder", "start": 48, "max_content": 8, "header": "# Kinder"}, - {"name": "Pub", "start": 58, "max_content": 3, "header": "Pub"}, - {"name": "Erledigt", "start": 63, "max_content": 8, "header": "Erledigt"}, - ] + col_w_vn = 20; col_w_nn = 20; col_w_zeit = 7; col_w_kinder = 10; col_w_pub = 5; col_w_erl = 8 for tag_idx, tag_datum_str in enumerate(sorted_tage): tages_termine = sorted(termine_nach_tagen[tag_datum_str], key=lambda t: t['StartzeitObj']) - - if tag_idx > 0: - requests.append({'insertPageBreak': {'endOfSegmentLocation': {}}}) - - tages_block_lines = [] - tages_block_lines.append(f"Termine am {tag_datum_str}") - tages_block_lines.append("") - - # Tabellenkopfzeile generieren - header_parts = [] - current_pos = 0 - for col_cfg in col_configs: - padding_needed = col_cfg["start"] - current_pos - if padding_needed > 0: - header_parts.append(" " * padding_needed) - - # Text ggf. abschneiden, wenn er zu lang für max_content ist - header_text = col_cfg["header"] - if len(header_text) > col_cfg["max_content"]: - header_text = header_text[:col_cfg["max_content"]] - else: - header_text = header_text.ljust(col_cfg["max_content"]) # Mit Leerzeichen auffüllen - header_parts.append(header_text) - current_pos = col_cfg["start"] + col_cfg["max_content"] - tages_block_lines.append("".join(header_parts)) - - - letzte_endzeit_obj = None - + if tag_idx > 0: requests.append({'insertPageBreak': {'endOfSegmentLocation': {}}}) + tages_block_lines = [f"Termine am {tag_datum_str}", ""] + kopf_vn="Vorname".ljust(col_w_vn); kopf_nn="Nachname".ljust(col_w_nn); kopf_zeit="Uhrzeit".ljust(col_w_zeit) + kopf_kinder="# Kinder".ljust(col_w_kinder); kopf_pub="Pub".ljust(col_w_pub); kopf_erl="Erledigt".ljust(col_w_erl) + tages_block_lines.append(f"{kopf_vn}\t{kopf_nn}\t{kopf_zeit}\t{kopf_kinder}\t{kopf_pub}\t{kopf_erl}") + letzte_endzeit_obj = None for termin_idx, termin in enumerate(tages_termine): if letzte_endzeit_obj and termin['StartzeitObj'] > letzte_endzeit_obj: - # Leerzeile: Besteht nur aus Leerzeichen bis zur Gesamtbreite oder einer festen Anzahl - # Um die Spaltenstruktur beizubehalten, könnten wir hier eine Zeile mit - # gepaddeten leeren Strings oder Trennzeichen einfügen. - # Für Einfachheit lassen wir die Leerzeile jetzt wirklich "leer" im Sinne von nur Zeilenumbruch, - # oder wir generieren eine Zeile mit gepaddeten Leerstrings für jede Spalte. - empty_row_parts = [] - current_pos_empty = 0 - for col_cfg in col_configs: - padding_needed_empty = col_cfg["start"] - current_pos_empty - if padding_needed_empty > 0: - empty_row_parts.append(" " * padding_needed_empty) - # Fülle die "Zelle" mit Leerzeichen bis zur max_content Breite - empty_row_parts.append(" " * col_cfg["max_content"]) - current_pos_empty = col_cfg["start"] + col_cfg["max_content"] - tages_block_lines.append("".join(empty_row_parts)) - - - row_parts = [] - current_pos = 0 - termin_daten_fuer_spalten = { - "Vorname": termin['Vorname'], - "Nachname": termin['Nachname'], - "Uhrzeit": termin['Startzeit'], - "Kinder": termin['Kinder'], - "Pub": termin['Pub'], - "Erledigt": termin['Erledigt'] - } - - for col_cfg in col_configs: - padding_needed = col_cfg["start"] - current_pos - if padding_needed > 0: - row_parts.append(" " * padding_needed) - - cell_text = str(termin_daten_fuer_spalten.get(col_cfg["name"], "")) # str() für alle Fälle - if len(cell_text) > col_cfg["max_content"]: - cell_text = cell_text[:col_cfg["max_content"]] # Abschneiden - else: - cell_text = cell_text.ljust(col_cfg["max_content"]) # Auffüllen - - row_parts.append(cell_text) - current_pos = col_cfg["start"] + col_cfg["max_content"] - tages_block_lines.append("".join(row_parts)) - + leere_zeile = "\t".join([" ".ljust(w) for w in [col_w_vn,col_w_nn,col_w_zeit,col_w_kinder,col_w_pub,col_w_erl]]) + tages_block_lines.append(leere_zeile) + vn_pad=termin['Vorname'].ljust(col_w_vn); nn_pad=termin['Nachname'].ljust(col_w_nn); zeit_pad=termin['Startzeit'].ljust(col_w_zeit) + kind_pad=termin['Kinder'].ljust(col_w_kinder); pub_pad=termin['Pub'].ljust(col_w_pub); erl_pad=termin['Erledigt'].ljust(col_w_erl) + tages_block_lines.append(f"{vn_pad}\t{nn_pad}\t{zeit_pad}\t{kind_pad}\t{pub_pad}\t{erl_pad}") _, _, termin_endzeit_str_val = parse_datetime_string(f"{tag_datum_str} {termin['Endzeit']}") - if termin_endzeit_str_val: - letzte_endzeit_obj = datetime.strptime(f"{tag_datum_str} {termin['Endzeit']}", "%d.%m.%Y %H:%M") - - full_tages_block_text = "\n".join(tages_block_lines) + "\n\n" + if termin_endzeit_str_val: letzte_endzeit_obj = datetime.strptime(f"{tag_datum_str} {termin['Endzeit']}", "%d.%m.%Y %H:%M") + full_tages_block_text = "\n".join(tages_block_lines) + "\n\n" requests.append({'insertText': {'endOfSegmentLocation': {}, 'text': full_tages_block_text}}) if requests: try: