- tags
- #events
events-days¶
Every day before the event (a cron, declared in Init): unpaid registrations get a reminder; on the day before, every volunteer gets their shifts.
$when events.daily (event: String) {
e = dom.find(cls = "Event", key = event)
daysLeft = (toMillis(e.starts as Date) - toMillis(today())) / 86400000
unpaid = dom.list(cls = "Registration").data filter (r => r.status is "pending")
reminded = unpaid map (r => events.remind(id = r.id))
shifts = if (daysLeft >= 0 and daysLeft <= 1) then dom.list(cls = "Volunteer").data map (v => events.sendShifts(id = v.id)) else []
payload = {daysLeft: daysLeft, reminded: sizeOf(reminded), volunteers: sizeOf(shifts)}
}
$when events.remind (id: String) {
r = dom.find(cls = "Registration", key = id)
a = dom.find(cls = "Attendee", key = r.attendee)
payload = events.notify(to = a.email, text = "${a.name}, your registration isn't paid yet: pay to keep your seat.")
}
$when events.sendShifts (id: String) {
v = dom.find(cls = "Volunteer", key = id)
list = v.shifts map (s => "${s.role} ${s.start}") mkString ", "
payload = events.notify(to = v.email, text = "Your shifts, ${v.name}: ${list}")
}