summaryrefslogtreecommitdiff
path: root/muendliche-nachpruefung/lib.typ
blob: 900cfc098514606f7ba2a85112fa3bffe9863e57 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// SPDX-FileCopyrightText: 2025 Gero Beckmann <orangerot@orangerot.dev>
//
// SPDX-License-Identifier: MIT

#let oral-post-exam(
  lecture: "",                               // Fach
  date: datetime(year: 0, month: 1, day: 1), // Prüfungsdatum
  examiner: "",                              // PrüferIn (Prof)
  assistant: "",                             // BeisitzerIn
  did_pass: none,                            // Bestanden? true || false
  exam_duration: duration(minutes: 0),       // Prüfungsdauer
  attendance: (:
  /* Veranstaltung, Jahr, regelmäßig besucht? */
    "Vorlesung": (year: "", did_attend: ""),
    "Übung":     (year: "", did_attend: ""),
    "Tutorium":  (year: "", did_attend: ""),
  ),
  preparation_time: [
    // Wie lange und wie hast alleine bzw. mit anderen vorbereitet?
  ],
  agreements: [
    // Fanden vor der Prüfung Absprachen zu Form oder Inhalt statt? Wurden sie eingehalten?
  ],
  preparations: [
    // Welche Tips zur Vorbereitung kannst Du geben?
  ],
  examiner_behavior: [
    // Wie war der Prüfungsstil des Prüfers / der Prüferin?
  ],
  examinee_behavior: [
    // Kannst Du Ratschläge Verhalten in der Prüfung geben?
  ],
  doc
) = [
  #let checkbox(checked: false) = if (checked) {$times.square$} else {$square$}

  #let events = (
    "Vorlesung": (year: "", did_attend: ""),
    "Übung":     (year: "", did_attend: ""),
    "Tutorium":  (year: "", did_attend: ""),
    ..attendance
  )

  #show <date>: if date.year() > 0 {date.display("[day].[month].[year]")}
  #show <examiner>: examiner
  #show <assistant>: assistant
  #show <exam_duration>: if exam_duration.minutes() > 0 [#exam_duration.minutes()]
  #show <preparation_time>: preparation_time
  #show <agreements>: agreements
  #show <preparations>: preparations
  #show <examinee_behavior>: examinee_behavior
  #show <examiner_behavior>: examiner_behavior
  #show <did_pass>: [
    *Bestanden?
    #checkbox(checked: did_pass == true) Ja /
    #checkbox(checked: did_pass == false) Nein*
  ]
  #show <lecture>: it => if lecture.len() > 0 {
    box[#checkbox(checked: true) #lecture]
  } else {it}
  #show <attendance>: it => {
    let g = it.fields()
    let _ = g.remove("children")
    let _ = g.remove("label")
    table(..g,
      ..it.fields().children.at(0).children,
      ..events.pairs().map(((location, (year, did_attend))) =>
      (box(height: 1.2em)[*#location*], [#year], [#did_attend])).flatten()
    )
  }

  #include "muendliche-nachpruefung.typ"

  #doc
]