bugfix
This commit is contained in:
@@ -158,26 +158,112 @@ 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 = []
|
||||
col_w_vn = 20; col_w_nn = 20; col_w_zeit = 7; col_w_kinder = 10; col_w_pub = 5; col_w_erl = 8
|
||||
# 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"},
|
||||
]
|
||||
|
||||
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 = [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
|
||||
|
||||
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
|
||||
|
||||
for termin_idx, termin in enumerate(tages_termine):
|
||||
if letzte_endzeit_obj and termin['StartzeitObj'] > letzte_endzeit_obj:
|
||||
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}")
|
||||
# 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))
|
||||
|
||||
_, _, 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:
|
||||
|
||||
Reference in New Issue
Block a user