Optische Änderungen: Ausnutzen des Platzes u.a. durch Weglassen der Navileiste; Korrekturraster

This commit is contained in:
2025-09-07 18:06:24 +02:00
parent bb299fd83b
commit 522cee5d58
13 changed files with 4290 additions and 6944 deletions

View File

@@ -11,12 +11,12 @@ Beim vorliegenden Projekt handelt es sich um ein Python-Skript, das für beliebi
eine gemeinsame PDF-Datei generiert, die für jede Lerngruppe
- eine (Noten)-Übersicht für die Lerngruppe,
- eine Geburtstagsliste,
- für jede Lernerfolgskontrolle eine Punkte- und Notentabelle,
- für jedes Quartal eine Tabelle zur Erfassung von SoMi-Notizen,
- eine Tabelle zur HA-Kontrolle,
- eine oder mehrere Checklisten-Tabelle(n) zum Abhaken und
- ein Blatt zur Planung des Halbjahres.
- eine oder mehrere Checklisten-Tabelle(n) zum Abhaken,
- eine Geburtstagsliste und
- ein Blatt zur Planung des Halbjahres
für ein Halbjahr umfasst. Zusätzlich kann optional als Startseite der Stundenplan eingebunden werden.

View File

@@ -36,7 +36,7 @@ checkliste_seiten = 2
Die Parameter sind zwar selbsterklärend, werden hier aber dennoch einmal kurz erläutert:
- Die Bezeichnung der Lerngruppe wird als Überschrift überall dort verwendet, wo genügend Platz zur Verfügung steht.
- Ist nur wenig Platz vorhanden (z.B. im Stundenplan oder in der Navigationsleiste), kommt die Kurzbeschreibung der Lerngruppe zum Einsatz.
- Ist nur wenig Platz vorhanden (z.B. im Stundenplan), kommt die Kurzbeschreibung der Lerngruppe zum Einsatz.
- Die Anzahl der schriftlichen Lernerfolgskontrollen gibt an, wie viele Korrekturbögen erzeugt werden. Die Anzahl 0 sorgt dafür, dass diese automatisch weggelassen werden.
- Die Bezeichnung der Lernerfolgskontrolle passt sich dem Sprachgebrauch an, z.B. Arbeit oder Kursarbeit oder Klausur.
- Bei der Erfassung von Notizen zur Sonstigen Mitarbeit (SoMi) wird angegeben, ob eine durchlaufende Liste für beide Quartale oder zwei getrennte Listen für die beiden Quartale generiert werden sollen.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -11,7 +11,7 @@ anzahl_aufgaben = 6
[SoMiNoten]
# Anzahl der SoMi-Noten-Spalten
anzahl_noten = 14
anzahl_noten = 16
[Hausaufgaben]

View File

@@ -69,15 +69,15 @@ table.headline td.nr {
width: 5.5%;
}
td.left {
width: 47.5%;
padding-top: 2pt;
width: 42.5%;
padding-top: 4pt;
text-align: left;
}
td.right {
width: 48.0%;
width: 52.0%;
padding-top: 0pt;
padding-right: 0pt;
text-align: right;
text-align: left;
}
table.headline a {
color: black;
@@ -131,8 +131,10 @@ table, tr, td {
border: 0.3px solid black;
}
th, td {
padding-top: 4pt;
padding-top: 3pt;
padding-bottom: -1pt;
padding-left: 2pt;
vertical-align: middle;
text-align: left;
}
th.nr, td.nr {
@@ -155,57 +157,6 @@ th.luecke, td.luecke {
border: none;
}
/* Halbjahresübersicht */
table.halbjahr {
border: none;
}
table.halbjahr tr {
border: none;
}
th.kw, th.kwsmall, th.kw_sessions, th.kw_content {
border: 0.3px solid black;
border-bottom: 1px solid black;
}
th.kw, td.kw {
width: 5.5%;
text-align: right;
padding-right: 2pt;
vertical-align: middle;
}
th.kw {
text-align: center;
}
th.kwsmall, td.kwsmall {
font-size: 8.5pt;
}
th.kw_sessions, td.kw_sessions {
width: 19%;
text-align: center;
padding-left: 0pt;
border-left: 1px solid black;
border-right: 1px solid black;
}
th.kw_content, td.kw_content {
width: 70%;
}
/* Geburtstagstabelle */
td.geb, th.geb {
width: 15%;
padding-left: 0pt;
text-align: center;
}
td.age {
width: 7.5%;
padding-left: 0pt;
text-align: center;
}
td.eightteen {
background: lightgrey;
}
td.home {
width: 42.5%;
}
/* Übersichtstabelle */
table.overview th.nr, th.name, th.endnote {
@@ -266,6 +217,22 @@ tr.muster {
border-top: 1px solid black;
border-bottom: 1px solid black;
}
table.raster {
-pdf-keep-with-next: true;
}
table.raster td.first {
width: 8%;
}
table.raster td {
text-align: center;
padding-right: 1pt;
}
table.raster tr.line {
border-bottom: 1px solid black;
}
table.raster tr {
height: 25pt;
}
/* SoMi-Tabelle */
table.somi th {
@@ -281,12 +248,12 @@ table.somi tr.secretheader {
height: 30pt;
}
th.somi, td.somi, th.schr, td.schr {
width: 4.5%;
width: 4.25%;
text-align: center;
padding-left: 0pt;
}
th.sominote, td.sominote {
width: 10%;
width: 7.5%;
text-align: center;
padding-left: 0pt;
}
@@ -315,3 +282,54 @@ th.ha {
border-right: none;
}
/* Geburtstagstabelle */
td.geb, th.geb {
width: 15%;
padding-left: 0pt;
text-align: center;
}
td.age {
width: 7.5%;
padding-left: 0pt;
text-align: center;
}
td.eightteen {
background: lightgrey;
}
td.home {
width: 42.5%;
}
/* Halbjahresübersicht */
table.halbjahr {
border: none;
}
table.halbjahr tr {
border: none;
}
th.kw, th.kwsmall, th.kw_sessions, th.kw_content {
border: 0.3px solid black;
border-bottom: 1px solid black;
}
th.kw, td.kw {
width: 5.5%;
text-align: right;
padding-right: 2pt;
vertical-align: middle;
}
th.kw {
text-align: center;
}
th.kwsmall, td.kwsmall {
font-size: 8.5pt;
}
th.kw_sessions, td.kw_sessions {
width: 19%;
text-align: center;
padding-left: 0pt;
border-left: 1px solid black;
border-right: 1px solid black;
}
th.kw_content, td.kw_content {
width: 70%;
}

View File

@@ -1,7 +1,7 @@
[Navigation]
# Lerngruppenbezeichnung in der Navileiste (Zeilenumbruch vermeiden): kurz, normal
bezeichnung = normal
bezeichnung = kurz
[Korrekturbogen]
@@ -11,7 +11,7 @@ anzahl_aufgaben = 5
[SoMiNoten]
# Anzahl der SoMi-Noten-Spalten
anzahl_noten = 12
anzahl_noten = 15
[Hausaufgaben]

View File

@@ -11,7 +11,7 @@ anzahl_aufgaben = 5
[SoMiNoten]
# Anzahl der SoMi-Noten-Spalten
anzahl_noten = 12
anzahl_noten = 14
[Hausaufgaben]

View File

@@ -172,12 +172,6 @@ for datei in dateien:
# Übersichtsseite Noten zusammenbauen
body = body + uebersicht.erstelleUebersicht(klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)
# Geburtstagsseite zusammenbauen
if (len(gebdaten)==0):
print(' - Geburtstagsliste wird weggelassen.')
else:
body = body + birthday.erstelleGeburtstagsBogen(klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)
# optional: Korrekturbögen zusammenbauen
try:
schr_anzahl = int(kurs_inputs["schriftlich_anzahl"])
@@ -202,6 +196,12 @@ for datei in dateien:
# Checkliste(n) zusammenbauen
body = body + checkliste.erstelleCheckliste(klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)
# Geburtstagsseite zusammenbauen
if (len(gebdaten)==0):
print(' - Geburtstagsliste wird weggelassen.')
else:
body = body + birthday.erstelleGeburtstagsBogen(klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)
# Planungsseite für das Halbjahr zusammenbauen
body = body + halbjahr.erstelleHalbjahresuebersicht(klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)

View File

@@ -27,7 +27,7 @@ def erstelleHABogen(klassekurs_name, dateien, path, namen, gebdaten, config, inp
table += '<a name="'+klassekurs_name+'HA"></a>'
table += header.erstelleHeader('Hausaufgaben', klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs)
table += header.erstelleHeader('HA', klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs)
table += '<table class="'+css+'" repeat="1">'

View File

@@ -19,12 +19,6 @@ def erstelleNavigation(klassekurs_name, lerngruppen, path, config, inputs):
print('Der Bereichsschlüssel "'+kursid+'" (zur entsprechenden Datei) existiert nicht in der Input-Datei (3).')
exit(0)
try:
device = inputs["Allgemein"]["device"]
except KeyError:
print('Der Schlüssel Allgemein oder "device" existiert nicht in der Input-Datei!')
exit(0)
try:
bezeichnung = config["Navigation"]["bezeichnung"]
except KeyError:
@@ -55,10 +49,11 @@ def erstelleNavigation(klassekurs_name, lerngruppen, path, config, inputs):
def erstelleHeader(line, klassekurs_name, gebdaten, lerngruppen, path, config, inputs, kurs_inputs):
# Part 1: Navigation für alle Lerngruppen
header = erstelleNavigation(klassekurs_name, lerngruppen, path, config, inputs)
# vorerst abgeschaltet: Navigation für alle Lerngruppen
# header = erstelleNavigation(klassekurs_name, lerngruppen, path, config, inputs)
# Part2: Icons für die aktuelle Lerngruppe
# Icons für die aktuelle Lerngruppe
header = ''
header += '<table class="headline"><tr class="headline">'
# Icon
@@ -82,13 +77,12 @@ def erstelleHeader(line, klassekurs_name, gebdaten, lerngruppen, path, config, i
# Iconleiste rechts
header += '<td class="right headline">'
# Link zur Startseite
header += '<a href="#Home">&nbsp;<img class="icon" src="img/home-2.svg"/></a>'
# Notenübersicht
header += '<a href="#'+klassekurs_name+'Overview">&nbsp;<img class="icon" src="img/user-multiple-4.svg"/></a>'
# Geburtstagsseite
if (len(gebdaten)>0):
header += '<a href="#'+klassekurs_name+'Birthday">&nbsp;<img class="icon" src="img/bell-1.svg"/></a>'
# Arbeiten/Klausuren
schr_anzahl = int(kurs_inputs["schriftlich_anzahl"])
schr_bez = kurs_inputs["schriftlich_bez"]
@@ -116,6 +110,10 @@ def erstelleHeader(line, klassekurs_name, gebdaten, lerngruppen, path, config, i
# Checklisten
header += '<a href="#'+klassekurs_name+'Check">&nbsp;<img class="icon" src="img/check-circle-1.svg"/></a>'
# Geburtstagsseite
if (len(gebdaten)>0):
header += '<a href="#'+klassekurs_name+'Birthday">&nbsp;<img class="icon" src="img/bell-1.svg"/></a>'
# Halbjahresseite
header += '<a href="#'+klassekurs_name+'Halbjahr">&nbsp;<img class="icon" src="img/calendar-days.svg"/></a>'

View File

@@ -19,6 +19,12 @@ def erstelleKorrekturbogen(klassekurs_name, dateien, path, namen, gebdaten, conf
print('Ein Parameter "schriftlich_XYZ" fehlt für die Lerngruppe in der Input-Datei!')
exit(0)
try:
device = inputs["Allgemein"]["device"]
except KeyError:
print('Der Schlüssel Allgemein oder "device" existiert nicht in der Input-Datei!')
exit(0)
aufgaben_anzahl = int(config["Korrekturbogen"]["anzahl_aufgaben"])
offset = 0
@@ -58,6 +64,14 @@ def erstelleKorrekturbogen(klassekurs_name, dateien, path, namen, gebdaten, conf
table += '</table>'
table += '<p/>'
table += '<table class="raster">'
table += '<tr><td class="first">Note</td><td class="cs" colspan="3">1</td><td class="cs" colspan="3">2</td><td class="cs" colspan="3">3</td><td class="cs" colspan="3">4</td><td class="cs" colspan="3">5</td><td>6</td></tr>'
table += '<tr class="line"><td class="first">&nbsp;</td><td>1+</td><td>1</td><td>1-</td><td>2+</td><td>2</td><td>2-</td><td>3+</td><td>3</td><td>4-</td><td>4+</td><td>4</td><td>4-</td><td>5+</td><td>5</td><td>5-</td><td>6</td></tr>'
table += '<tr class="line"><td class="first">Pt.</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>'
table += '</table>'
table += '<pdf:nextpage />'
return table