fix: include past planned interventions in calendar view by updating schedule visibility logic
This commit is contained in:
parent
d9f1970ca6
commit
d5f4d8a765
2 changed files with 42 additions and 5 deletions
|
|
@ -223,6 +223,45 @@ class CalendarEventsTests(TestCase):
|
||||||
itv_ids_in_team_b = [i['id'] for i in member_in_team_b['interventions']]
|
itv_ids_in_team_b = [i['id'] for i in member_in_team_b['interventions']]
|
||||||
self.assertNotIn(itv.id, itv_ids_in_team_b)
|
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):
|
def test_schedule_update_coerces_ids(self):
|
||||||
itv = Intervention.objects.create(
|
itv = Intervention.objects.create(
|
||||||
title='Test Coercion',
|
title='Test Coercion',
|
||||||
|
|
|
||||||
|
|
@ -652,11 +652,9 @@ def _interventions_events_by_members(
|
||||||
team_filter = None if allowed_team_ids is None else set(allowed_team_ids)
|
team_filter = None if allowed_team_ids is None else set(allowed_team_ids)
|
||||||
|
|
||||||
def has_schedule(itv) -> bool:
|
def has_schedule(itv) -> bool:
|
||||||
"""Return True when intervention already started or has a future planned begin."""
|
"""Return True when intervention has a scheduled or actual start time."""
|
||||||
if getattr(itv, 'begin_time', None):
|
return bool(getattr(itv, 'begin_time', None) or getattr(itv, 'planned_begin_time', None))
|
||||||
return True
|
|
||||||
planned_begin = getattr(itv, 'planned_begin_time', None)
|
|
||||||
return bool(planned_begin and planned_begin > timezone.now())
|
|
||||||
|
|
||||||
backlog_allowed_statuses = {'in_preparation', 'to_be_approved', 'to_be_planned', 'to_be_processed', 'assigned'}
|
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'}
|
PRE_PROCESSING_STATUSES = {'in_preparation', 'to_be_approved', 'to_be_planned'}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue