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.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):
|
||||
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:
|
||||
return JsonResponse({'error': _('La date de début planifiée est obligatoire.')}, status=400)
|
||||
if planned_begin.date() < timezone.now().date():
|
||||
|
|
@ -1221,6 +1224,9 @@ def interventions_schedule_update(request):
|
|||
planned_end = planned_begin + timedelta(hours=2)
|
||||
if planned_end <= planned_begin:
|
||||
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_end = intervention.planned_end_time
|
||||
|
|
@ -1256,13 +1262,13 @@ def interventions_schedule_update(request):
|
|||
|
||||
# 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
|
||||
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 prev_status == 'to_be_planned' and is_now_assigned:
|
||||
new_status = 'to_be_processed'
|
||||
# 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'
|
||||
|
||||
if new_status != prev_status:
|
||||
|
|
|
|||
Loading…
Reference in a new issue