Reminders

Reminders (/admin/reminders) is the maintainer behind FunctionId REMINDER (23). The page title is Reminders and the breadcrumb is Manage Reminders. The header + Add Reminder control still creates an Active reminder from any admin screen.

Permissions: menu Admin → Reminders (function.url = reminder). View opens the list; Add controls New and the header button; Edit and Delete control row actions and bulk delete.

Screen layout

Reminders list with subject, day, recipients, status, search, and filter

Figure: FoodHub list — New, Search..., Filter, Export, sortable Subject, Day, and Status, Recipients, row ⋮, and pagination.

Default sort: Day descending.

List behavior

  • Search matches Subject or Content when the term is empty or at least 3 characters.
  • Filter options uses From and To on the reminder date (day).
  • Recipients show as email addresses. That column is not sortable.
  • Export covers the current page.
  • Status is Active or Inactive.
  • New Reminder: — Recipients, Subject, Content, and Date are required. Status starts Active.
  • Update Reminder: `{subject}` — same fields. Recipients are replaced on save.
  • An empty subject, date, or recipient list shows This field is required.
  • An empty body shows The body of the reminder cannot be empty.
  • Save toast: The operation was successful. The API writes an ApplicationLog in category Reminder.

The header dialog uses the same required fields without a Status switch (always Active).

Delete

Delete removes the reminder and its recipients. Bulk delete that removes nothing shows The reminders could not be deleted, because they are associated with a invoice. A partial bulk delete shows The operation was successful. But attention, it was not possible to delete all the selected reminders because they are associated with a invoice.

Active reminders are emailed on that date by the HTTP job GET /cron-reminders (calendar date in America/New_York). The job does not mark them sent, so a second run the same day sends again. Inactive rows are skipped.