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
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": "orange!50!green",
|
|
"specialdays": "red!20!green",
|
|
"freedays": "blue!30!green",
|
|
"holidays": "blue!40!green",
|
|
}
|
|
|
|
dates = {
|
|
"birthdays": [
|
|
{ "date": "18.10", "title": "Theresa Voigt" },
|
|
{ "date": "13.11", "title": "Winfried Voigt"},
|
|
{ "date": "13.11", "title": "Monika Voigt"},
|
|
{ "date": "13.11", "title": "Ursula Donn"},
|
|
{ "date": "14.11", "title": "Philipp Schönberer" },
|
|
{ "date": "13.01", "title": "Astrid Schönberger" },
|
|
{ "date": "26.01", "title": "David Geiser" },
|
|
],
|
|
"birthdays": [
|
|
{ "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()
|