diff --git a/loko/interventions/tests/test_calendar.py b/loko/interventions/tests/test_calendar.py index 2e4e488..2aa3606 100644 --- a/loko/interventions/tests/test_calendar.py +++ b/loko/interventions/tests/test_calendar.py @@ -223,6 +223,45 @@ class CalendarEventsTests(TestCase): itv_ids_in_team_b = [i['id'] for i in member_in_team_b['interventions']] self.assertNotIn(itv.id, itv_ids_in_team_b) + def test_calendar_events_view_mode_members_past_planned_time_visible(self): + # Create an intervention planned earlier today (e.g. 2 hours ago) assigned to team only + itv_team = Intervention.objects.create( + title='Team A Task Earlier Today', + status='to_be_processed', + assigned_team=self.team_a, + planned_begin_time=timezone.now() - timedelta(hours=2), + planned_end_time=timezone.now() + timedelta(hours=1), + ) + # Create another intervention planned earlier today assigned to a member + itv_member = Intervention.objects.create( + title='Member Task Earlier Today', + status='to_be_processed', + assigned_member=self.member, + assigned_team=self.team_a, + planned_begin_time=timezone.now() - timedelta(hours=3), + planned_end_time=timezone.now() - timedelta(hours=1), + ) + + url = reverse('interventions:interventions_events') + '?view_mode=members' + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + data = response.json() + + teams = data.get('teams', []) + team_a_data = next((t for t in teams if t['id'] == self.team_a.id), None) + self.assertIsNotNone(team_a_data) + + # Team-only intervention must be present in team_interventions + team_itv_ids = [i['id'] for i in team_a_data.get('team_interventions', [])] + self.assertIn(itv_team.id, team_itv_ids) + + # Member intervention must be present in member interventions + member_in_team_a = next((m for m in team_a_data['members'] if m['id'] == self.member.id), None) + self.assertIsNotNone(member_in_team_a) + member_itv_ids = [i['id'] for i in member_in_team_a['interventions']] + self.assertIn(itv_member.id, member_itv_ids) + + def test_schedule_update_coerces_ids(self): itv = Intervention.objects.create( title='Test Coercion', diff --git a/loko/interventions/views/calendar.py b/loko/interventions/views/calendar.py index 672915c..e47634b 100644 --- a/loko/interventions/views/calendar.py +++ b/loko/interventions/views/calendar.py @@ -652,11 +652,9 @@ def _interventions_events_by_members( team_filter = None if allowed_team_ids is None else set(allowed_team_ids) def has_schedule(itv) -> bool: - """Return True when intervention already started or has a future planned begin.""" - if getattr(itv, 'begin_time', None): - return True - planned_begin = getattr(itv, 'planned_begin_time', None) - return bool(planned_begin and planned_begin > timezone.now()) + """Return True when intervention has a scheduled or actual start time.""" + return bool(getattr(itv, 'begin_time', None) or getattr(itv, 'planned_begin_time', None)) + backlog_allowed_statuses = {'in_preparation', 'to_be_approved', 'to_be_planned', 'to_be_processed', 'assigned'} PRE_PROCESSING_STATUSES = {'in_preparation', 'to_be_approved', 'to_be_planned'}