feat: allow unassigning interventions to revert status to backlog and clear schedule dates
This commit is contained in:
parent
093457ce8d
commit
8590ddb17c
2 changed files with 42 additions and 10 deletions
|
|
@ -290,6 +290,32 @@ class CalendarEventsTests(TestCase):
|
||||||
self.assertTrue(len(data['team_history']) >= 1)
|
self.assertTrue(len(data['team_history']) >= 1)
|
||||||
self.assertEqual(data['team_history'][0]['team_name'], self.team_a.name)
|
self.assertEqual(data['team_history'][0]['team_name'], self.team_a.name)
|
||||||
|
|
||||||
|
def test_unassign_sans_equipe_reverts_status_to_backlog(self):
|
||||||
|
itv = Intervention.objects.create(
|
||||||
|
title='Unassigned Test',
|
||||||
|
status='to_be_processed',
|
||||||
|
maintain_type='corrective',
|
||||||
|
priority='2',
|
||||||
|
planned_begin_time=timezone.now(),
|
||||||
|
planned_end_time=timezone.now() + timedelta(hours=2),
|
||||||
|
)
|
||||||
|
url = reverse('interventions:interventions_schedule_update')
|
||||||
|
payload = {
|
||||||
|
'intervention_id': itv.id,
|
||||||
|
'member_id': None,
|
||||||
|
'team_id': None,
|
||||||
|
'unassign': True,
|
||||||
|
}
|
||||||
|
response = self.client.post(url, json.dumps(payload), content_type='application/json')
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
itv.refresh_from_db()
|
||||||
|
self.assertEqual(itv.status, 'to_be_planned')
|
||||||
|
self.assertIsNone(itv.planned_begin_time)
|
||||||
|
self.assertIsNone(itv.planned_end_time)
|
||||||
|
self.assertIsNone(itv.assigned_team)
|
||||||
|
self.assertIsNone(itv.assigned_member)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1213,6 +1213,9 @@ def interventions_schedule_update(request):
|
||||||
if planned_end and is_naive(planned_end):
|
if planned_end and is_naive(planned_end):
|
||||||
planned_end = make_aware(planned_end, tz)
|
planned_end = make_aware(planned_end, tz)
|
||||||
|
|
||||||
|
unassign = payload.get('unassign', False) or payload.get('to_backlog', False) or (member_key_present and team_key_present and not member_id and not team_id)
|
||||||
|
|
||||||
|
if not unassign:
|
||||||
if not planned_begin:
|
if not planned_begin:
|
||||||
return JsonResponse({'error': _('La date de début planifiée est obligatoire.')}, status=400)
|
return JsonResponse({'error': _('La date de début planifiée est obligatoire.')}, status=400)
|
||||||
if planned_begin.date() < timezone.now().date():
|
if planned_begin.date() < timezone.now().date():
|
||||||
|
|
@ -1221,6 +1224,9 @@ def interventions_schedule_update(request):
|
||||||
planned_end = planned_begin + timedelta(hours=2)
|
planned_end = planned_begin + timedelta(hours=2)
|
||||||
if planned_end <= planned_begin:
|
if planned_end <= planned_begin:
|
||||||
return JsonResponse({'error': _('La fin planifiée doit être postérieure au début planifié.')}, status=400)
|
return JsonResponse({'error': _('La fin planifiée doit être postérieure au début planifié.')}, status=400)
|
||||||
|
else:
|
||||||
|
planned_begin = None
|
||||||
|
planned_end = None
|
||||||
|
|
||||||
prev_begin = intervention.planned_begin_time
|
prev_begin = intervention.planned_begin_time
|
||||||
prev_end = intervention.planned_end_time
|
prev_end = intervention.planned_end_time
|
||||||
|
|
@ -1256,13 +1262,13 @@ def interventions_schedule_update(request):
|
||||||
|
|
||||||
# Check if intervention is being assigned (to member or team)
|
# Check if intervention is being assigned (to member or team)
|
||||||
is_now_assigned = intervention.assigned_member_id is not None or intervention.assigned_team_id is not None
|
is_now_assigned = intervention.assigned_member_id is not None or intervention.assigned_team_id is not None
|
||||||
was_assigned = prev_member_id is not None or prev_team_id is not None
|
is_unassigning = unassign or (not is_now_assigned)
|
||||||
|
|
||||||
# If intervention was "to_be_planned" and is now assigned -> change to "to_be_processed"
|
# If intervention was "to_be_planned" and is now assigned -> change to "to_be_processed"
|
||||||
if prev_status == 'to_be_planned' and is_now_assigned:
|
if prev_status == 'to_be_planned' and is_now_assigned:
|
||||||
new_status = 'to_be_processed'
|
new_status = 'to_be_processed'
|
||||||
# If intervention is being unassigned (back to backlog) -> change to "to_be_planned"
|
# If intervention is being unassigned (back to backlog) -> change to "to_be_planned"
|
||||||
elif was_assigned and not is_now_assigned and prev_status in ('to_be_processed', 'assigned'):
|
elif is_unassigning and prev_status in ('to_be_processed', 'assigned'):
|
||||||
new_status = 'to_be_planned'
|
new_status = 'to_be_planned'
|
||||||
|
|
||||||
if new_status != prev_status:
|
if new_status != prev_status:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue