fix: clear overdue when pruned after the scheduled month
Previously only a log in the exact scheduled month cleared overdue. Now any log on or after the start of the scheduled month counts, so pruning late (e.g. in May for a March schedule) correctly shows upcoming. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
36e4570141
commit
eb28f7453b
2 changed files with 16 additions and 6 deletions
|
|
@ -58,6 +58,15 @@ def test_not_overdue_when_past_month_logged():
|
||||||
assert pruning_status(plant, today) == 'upcoming'
|
assert pruning_status(plant, today) == 'upcoming'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_not_overdue_when_logged_after_scheduled_month():
|
||||||
|
# Pruned in May clears a March schedule — the common real-world case
|
||||||
|
today = date(2026, 5, 28)
|
||||||
|
plant = Plant.objects.create(name='Rose', location='Garden', pruning_months=[3])
|
||||||
|
PruningLog.objects.create(plant=plant, pruned_on=date(2026, 5, 28))
|
||||||
|
assert pruning_status(plant, today) == 'upcoming'
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_upcoming_future_month():
|
def test_upcoming_future_month():
|
||||||
today = date(2026, 5, 15)
|
today = date(2026, 5, 15)
|
||||||
|
|
|
||||||
|
|
@ -23,11 +23,10 @@ def pruning_status(plant, today=None):
|
||||||
if not months:
|
if not months:
|
||||||
return 'no_schedule'
|
return 'no_schedule'
|
||||||
|
|
||||||
logs = plant.pruning_logs.all()
|
logs = list(plant.pruning_logs.all())
|
||||||
logged = {(log.pruned_on.year, log.pruned_on.month) for log in logs}
|
|
||||||
|
|
||||||
if today.month in months:
|
if today.month in months:
|
||||||
if (today.year, today.month) not in logged:
|
if not any(l.pruned_on.year == today.year and l.pruned_on.month == today.month for l in logs):
|
||||||
return 'due_this_month'
|
return 'due_this_month'
|
||||||
return 'upcoming'
|
return 'upcoming'
|
||||||
|
|
||||||
|
|
@ -36,8 +35,10 @@ def pruning_status(plant, today=None):
|
||||||
if past.month in months:
|
if past.month in months:
|
||||||
if i >= 6:
|
if i >= 6:
|
||||||
return 'upcoming'
|
return 'upcoming'
|
||||||
if (past.year, past.month) not in logged:
|
# Any log on or after the start of the scheduled month clears overdue
|
||||||
return 'overdue'
|
cutoff = date(past.year, past.month, 1)
|
||||||
|
if any(l.pruned_on >= cutoff for l in logs):
|
||||||
return 'upcoming'
|
return 'upcoming'
|
||||||
|
return 'overdue'
|
||||||
|
|
||||||
return 'upcoming'
|
return 'upcoming'
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue