You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

233 lines
7.1 KiB

#!/usr/bin/python3
import math
import json
from datetime import timedelta
from datetime import date
import locale
import os
start_year = 2020
start_date = date(start_year, 1, 1)
end_date = date(start_year, 12, 31)
main_filename = "calender"
main_tex = main_filename + ".tex"
main_aux = main_filename + ".aux"
main_log = main_filename + ".log"
main_pdf = main_filename + ".pdf"
dates_color = {
"birthdays": "green!50!black",
"specialdays": "green!50!white",
"freedays": "red!50!white",
"holidays": "blue!50!green",
}
dates = {
"birthdays": [
{ "date": "13.01", "title": "Astrid Schönberger" },
{ "date": "23.01", "title": "David Geiser" },
{ "date": "27.09", "title": "Monika Voigt"},
{ "date": "18.10", "title": "Theresa Schönberger" },
{ "date": "13.11", "title": "Winfried Voigt"},
{ "date": "14.11", "title": "Philipp Schönberer" },
{ "date": "18.12", "title": "Ursula Donn"},
],
"specialdays": [
{ "date": "05.10", "title": "Obermegaknutztag" },
{ "date": "10.05", "title": "Hochzeitstag" },
],
"holidays": [
{ "date-start": "23.12.2019", "date-end": "04.01.2020", "title": "Weihnachtsferien" },
#Faschingsferien
{ "date-start": "06.04.2020", "date-end": "18.04.2020", "title": "Osterferien" },
{ "date-start": "02.06.2020", "date-end": "13.06.2020", "title": "Pfingstferien"},
{ "date-start": "30.07.2020", "date-end": "12.09.2020", "title": "Sommerferien"},
{ "date-start": "26.10.2020", "date-end": "30.10.2020", "title": "Herbstferien"},
{ "date-start": "23.12.2020", "date-end": "09.01.2021", "title": "Weihnachtsferien"},
],
"freedays": [
{ "date": "01.01", "title": "Neujahr" },
{ "date": "06.01", "title": "Heilige Drei Könige" },
{ "date": "10.04", "title": "Karfreitag" },
{ "date": "13.04", "title": "Ostermontag" },
{ "date": "01.05", "title": "Tag der Arbeit" },
{ "date": "21.05", "title": "Christi Himmelfahrt" },
{ "date": "01.06", "title": "Pfingstmontag" },
{ "date": "11.06", "title": "Fronleichnam" },
{ "date": "03.10", "title": "Tag der Deutschen Einheit"},
{ "date": "01.11", "title": "Allerheiligen" },
{ "date": "24.12", "title": "Weihnachtten" },
{ "date": "25.12", "title": "1. Weihnachtsfeiertag" },
{ "date": "26.12", "title": "2. Weihnachtsfeiertag" },
{ "date": "31.12", "title": "Silvester" },
],
}
def get_special_text(date_to_check, divider):
return_str =""
for b in dates:
print(b)
for d in dates[b]:
if "date" in d:
start_day = d["date"].split(".")
if len(start_day)<3:
s_year = date_to_check.year
else:
s_year = int(start_day[2])
s_month = int(start_day[1])
s_day = int(start_day[0])
start_day = date(s_year, s_month, s_day)
if (start_day == date_to_check):
if return_str != "":
return_str += divider
return_str += "\\textcolor{"+dates_color[b]+"}{" + d["title"] + "}"
if "date-start" in d and "date-end" in d:
start_day = d["date-start"].split(".")
if len(start_day)<3:
s_year = date_to_check.year
else:
s_year = int(start_day[2])
s_month = int(start_day[1])
s_day = int(start_day[0])
start_day = date(s_year, s_month, s_day)
end_day = d["date-end"].split(".")
if len(end_day)<3:
e_year = date_to_check.year
else:
e_year = int(end_day[2])
e_month = int(end_day[1])
e_day = int(end_day[0])
end_day = date(e_year, e_month, e_day)
if date_to_check >= start_day and date_to_check <= end_day:
if return_str != "":
return_str += divider
return_str += "\\textcolor{"+dates_color[b]+"}{" + d["title"] + "}"
return return_str
def main():
# german
locale.setlocale(locale.LC_TIME, "de_DE")
fd = open(main_tex, "w")
tex_write_header(fd)
#tex_write_calender_overview(fd)
tex_write_weekly(fd)
tex_write_footer(fd)
fd.close()
cmd = 'pdflatex ' + main_tex
os.system(cmd)
os.remove(main_aux)
os.remove(main_log)
def tex_write_header(fd):
start_fd = open("./vorlagen/week_2pages_start.tex", "r")
for line in start_fd:
fd.write(line)
fd.write("\\begin{document}\n");
return
def tex_write_footer(fd):
fd.write("\\end{document}\n");
return
def tex_write_calender_overview(fd):
return
def tex_write_weekly(fd):
print_start_date = start_date - timedelta(days=start_date.weekday())
print_end_date = end_date + timedelta(days=6 - end_date.weekday())
print(print_start_date.isoformat())
print(print_end_date.isoformat())
fd.write("%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
fd.write("% begin real calender \n");
curr_date = print_start_date;
print("year : " + str(curr_date.year))
last_year= ""
last_month= ""
while True:
if curr_date.weekday() == 0 or curr_date.weekday() == 3:
# new year to setup
if str(curr_date.year) != str(last_year):
last_year= curr_date.year
fd.write("\n\\renewcommand{\year}{"+ str(curr_date.year) +"}\n")
# new month to setup
if str(curr_date.month) != str(last_month):
last_month= curr_date.month
fd.write("\n\\renewcommand{\month}{" + curr_date.strftime('%B') + "}\n")
# should give
# \printweek{KW10}{1}{}{2}{}{3}{}
weeknumber = curr_date.strftime("%V")
daynumber = curr_date.strftime("%d")
devider = "\\newline \n"
special_text = get_special_text(curr_date, devider)
# check for new week
if curr_date.weekday() == 0: # monday
fd.write("\\printweek")
fd.write("{KW" + weeknumber + "}")
if curr_date.weekday() == 3: # thursday is on second page
fd.write("\n")
fd.write("\\newpage\n")
fd.write("\\printweekend")
fd.write("{KW" + weeknumber + "}")
# done for every day
fd.write("{" + daynumber + "}")
fd.write("{" + special_text + "}")
if curr_date.weekday() == 6: # sunday is end of week so close it
fd.write("\n")
# end of calender
if (print_end_date == curr_date):
break
#go to next day
next_date = curr_date + timedelta(days=1)
# use the new curr date and contiue
curr_date = next_date
# end of for each day
fd.write('''
% end real calender
%%%%%%%%%%%%%%%%%%%%%%%%%%%
''')
return
if __name__ == "__main__":
main()