Files
chfoit-ipa/util/arbeits-journale.typ
2026-09-18 16:36:52 +02:00

112 lines
2.6 KiB
Typst

#let timetable = state("6467cc7b-cfda-4f4d-a2fe-2e5e696dff91", (:))
#let format_int(x) = (
if x == 0 [0] else if x > 0 [$+$#str(x)] else [#str(x)]
)
#let addTimetable(times) = {
timetable.update(tt => {
for (date, tasks) in times.pairs() {
tt.insert(date, tasks.filter(t => t.name != "Total"))
}
return tt
})
}
#let dayNr = state("345de571-1c11-4fba-9ebf-61c2088e286a", 0)
#let entry(
day: datetime,
defaultPerson: str,
supplementaryPersons: (:),
tagesablauf,
hilfestellungen,
gut,
schlecht,
erkenntnisse,
) = {
dayNr.update(i => i + 1)
context {
if dayNr.get() > 1 { pagebreak(weak: true) }
heading(level: 2, [Tag #dayNr.get() | #day.display("[day].[month].[year]")])
show heading.where(level: 3): set heading(numbering: none, outlined: false)
show heading.where(level: 3): set heading(numbering: none, outlined: false)
let taetigkeiten = timetable.get().at(day.display("[day padding:none]-[month padding:none]-[year]"))
let total_soll = (
taetigkeiten.fold(
0,
(acc, t) => if t.keys().contains("should") { acc + t.should } else { acc },
)
/ 60
) // total should hours
let total_ist = (
taetigkeiten.fold(
0,
(acc, t) => if t.keys().contains("is") { acc + t.is } else { acc },
)
/ 60
) // total should hours
figure(
table(
columns: (3fr, 1fr, 1fr, 1fr, 1fr),
align: (left, center, center, center, center),
table.header([Tätigkeiten], [Beteiligte Personen], [Aufwand SOLL [h]], [Aufwand IST [h]], [Differenz [h]]),
..taetigkeiten
.map(t => (
t.at("name"),
if supplementaryPersons.keys().contains(t.at("name")) {
(defaultPerson, ..supplementaryPersons.at(t.at("name"))).join(", ")
} else {
defaultPerson
},
str(t.at("should", default: "") / 60),
str(t.at("is", default: "") / 60),
if t.keys().contains("is") and t.keys().contains("should") {
format_int((t.is / 60) - (t.should / 60))
} else { "" },
))
.flatten(),
[*Totaler Zeitaufwand*],
[],
str(total_soll),
str(total_ist),
format_int(total_ist - total_soll),
),
caption: [Tätigkeiten Tag #dayNr.get()],
)
[
=== Tagesablauf
#tagesablauf
=== Hilfestellungen
#hilfestellungen
=== Reflexion
_Was lief gut?_
#gut
_Was lief weniger gut?_
#schlecht
_Erkenntnisse_
#erkenntnisse
]
}
}