84 lines
2.8 KiB
Python
84 lines
2.8 KiB
Python
#!/usr/bin/env python3
|
|
# Konvertiert den "Dienstplan Clean" aus Excel in das ausgabe.csv-Format
|
|
|
|
import csv
|
|
from datetime import datetime
|
|
import calendar
|
|
|
|
def parse_date(date_str):
|
|
"""Konvertiert 'Monday, August 11, 2025' zu '2025-08-11'"""
|
|
try:
|
|
# Parse das englische Datumsformat
|
|
date_obj = datetime.strptime(date_str, "%A, %B %d, %Y")
|
|
return date_obj.strftime("%Y-%m-%d")
|
|
except:
|
|
return None
|
|
|
|
def get_weekday_german(date_str):
|
|
"""Gibt den deutschen Wochentag zurück"""
|
|
try:
|
|
date_obj = datetime.strptime(date_str, "%A, %B %d, %Y")
|
|
weekdays = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag']
|
|
return weekdays[date_obj.weekday()]
|
|
except:
|
|
return ""
|
|
|
|
# Konvertierung
|
|
with open('imp-ausgabe.csv', 'r', encoding='utf-8') as infile:
|
|
reader = csv.reader(infile)
|
|
header = next(reader)
|
|
|
|
# Mapping der Spalten (imp-ausgabe -> ausgabe)
|
|
# imp: ,Frühstück,Kochen,Elternabend 1,Elternabend 2,Notdienst Essensausgabe,Putznotdienst
|
|
# ziel: Datum,Wochentag,Frühstücksdienst,Putznotdienst,Essensausgabenotdienst,Kochen,Elternabend
|
|
|
|
data = []
|
|
for row in reader:
|
|
if len(row) < 6:
|
|
continue
|
|
|
|
date_str = row[0].strip('"')
|
|
if not date_str or date_str.startswith('Saturday') or date_str.startswith('Sunday'):
|
|
continue # Wochenenden überspringen
|
|
|
|
iso_date = parse_date(date_str)
|
|
if not iso_date:
|
|
continue
|
|
|
|
weekday = get_weekday_german(date_str)
|
|
|
|
# Dienste extrahieren
|
|
fruehstueck = row[1].strip() if len(row) > 1 else ''
|
|
kochen = row[2].strip() if len(row) > 2 else ''
|
|
elternabend1 = row[3].strip() if len(row) > 3 else ''
|
|
elternabend2 = row[4].strip() if len(row) > 4 else ''
|
|
essensausgabe = row[5].strip() if len(row) > 5 else ''
|
|
putz = row[6].strip() if len(row) > 6 else ''
|
|
|
|
# Elternabend kombinieren
|
|
elternabend_kombiniert = ''
|
|
if elternabend1 and elternabend2:
|
|
elternabend_kombiniert = f"{elternabend1} {elternabend2}"
|
|
elif elternabend1:
|
|
elternabend_kombiniert = elternabend1
|
|
elif elternabend2:
|
|
elternabend_kombiniert = elternabend2
|
|
|
|
data.append([iso_date, weekday, fruehstueck, putz, essensausgabe, kochen, elternabend_kombiniert])
|
|
|
|
# Sortieren nach Datum
|
|
data.sort(key=lambda x: x[0])
|
|
|
|
# Schreibe neue ausgabe.csv
|
|
with open('ausgabe.csv', 'w', newline='', encoding='utf-8') as outfile:
|
|
writer = csv.writer(outfile)
|
|
|
|
# Header schreiben
|
|
writer.writerow(['Datum', 'Wochentag', 'Frühstücksdienst', 'Putznotdienst', 'Essensausgabenotdienst', 'Kochen', 'Elternabend'])
|
|
|
|
# Daten schreiben
|
|
for row in data:
|
|
writer.writerow(row)
|
|
|
|
print("Konvertierung abgeschlossen! ausgabe.csv wurde erstellt.")
|