> */ public static function alle(bool $nurOffene = false): array { $sql = 'SELECT * FROM erinnerungen WHERE benutzer_id = ?'; if ($nurOffene) { $sql .= ' AND erledigt = 0'; } return Database::fetchAll($sql . ' ORDER BY erledigt, faellig_am, id', [Mandant::id()]); } /** @return list> */ public static function faellige(?string $bis = null): array { return Database::fetchAll( 'SELECT * FROM erinnerungen WHERE benutzer_id = ? AND erledigt = 0 AND faellig_am <= ? ORDER BY faellig_am, id', [Mandant::id(), $bis ?? date('Y-m-d')] ); } public static function find(int $id): ?array { $zeile = Database::fetchOne( 'SELECT * FROM erinnerungen WHERE id = ? AND benutzer_id = ?', [$id, Mandant::id()] ); return $zeile === false ? null : $zeile; } public static function anlegen(string $text, string $faelligAm, string $notiz = ''): int { $text = trim($text); if ($text === '') { throw new \InvalidArgumentException('Die Erinnerung braucht einen Text.'); } if (!Buchung::istDatum($faelligAm)) { throw new \InvalidArgumentException('Das Datum muss als JJJJ-MM-TT vorliegen.'); } Database::execute( 'INSERT INTO erinnerungen (benutzer_id, text, faellig_am, notiz) VALUES (?, ?, ?, ?)', [Mandant::id(), mb_substr($text, 0, 255), $faelligAm, trim($notiz)] ); return Database::lastInsertId(); } public static function erledigen(int $id, bool $erledigt = true): void { Database::execute( 'UPDATE erinnerungen SET erledigt = ?, erledigt_am = ? WHERE id = ? AND benutzer_id = ?', [$erledigt ? 1 : 0, $erledigt ? date('Y-m-d H:i:s') : null, $id, Mandant::id()] ); } public static function loeschen(int $id): void { Database::execute('DELETE FROM erinnerungen WHERE id = ? AND benutzer_id = ?', [$id, Mandant::id()]); } public static function anzahlOffen(): int { return (int)Database::fetchValue( 'SELECT COUNT(*) FROM erinnerungen WHERE benutzer_id = ? AND erledigt = 0', [Mandant::id()], 0 ); } }