New events.tasks.send_deadline_reminders (daily beat schedule, registered in features.jobs.JOB_REGISTRY for the control panel's Jobs tab), the gap notify_new_event's own docstring flagged: a recurring series' occurrences never go through that on-creation path (they're bulk-generated by extend_event_series, and notifying per-occurrence there would flood everyone), so they never got any "you need to answer this" nudge at all. This sweeps every upcoming event once, one week before whichever cutoff matters -- the event's own answer deadline, or its start when none is set -- and notifies whoever's still NO_RESPONSE, using the same notify_members() -> Notification -> push chain notify_new_event already uses. New Event.deadline_reminder_sent_at makes it idempotent: each event's window opens once, is marked processed regardless of whether anyone needed notifying, and a missed run still catches anything whose window hasn't fully closed by the time the job next runs. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ECGMEwrc2k4D8VQuwjstj9
19 lines
651 B
Python
19 lines
651 B
Python
# Generated by Django 6.0.6 on 2026-08-21 15:28
|
|
|
|
from django.db import migrations, models
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('events', '0022_event_club_wide_event_groups_eventseries_club_wide_and_more'),
|
|
]
|
|
|
|
operations = [
|
|
migrations.AddField(
|
|
model_name='event',
|
|
name='deadline_reminder_sent_at',
|
|
field=models.DateTimeField(blank=True, help_text="Set once events.tasks.send_deadline_reminders has nudged whoever still hasn't answered -- keeps that job from reminding the same event twice.", null=True, verbose_name='deadline reminder sent at'),
|
|
),
|
|
]
|