feat: add calendar view for interventions with user preference persistence
This commit is contained in:
parent
d131fcb0d6
commit
74679289a4
2 changed files with 46 additions and 1 deletions
|
|
@ -387,6 +387,47 @@ class CalendarEventsTests(TestCase):
|
|||
|
||||
self.assertEqual(ids, [itv_urgent_new.id, itv_urgent_old.id, itv_low_old.id])
|
||||
|
||||
def test_calendar_backlog_includes_overdue_interventions_older_than_three_months(self):
|
||||
old_date = timezone.now() - timedelta(days=150)
|
||||
itv_old_unprocessed = Intervention.objects.create(
|
||||
title='Old To Be Processed Intervention',
|
||||
status='to_be_processed',
|
||||
maintain_type='corrective',
|
||||
expected_begin_time=old_date,
|
||||
planned_begin_time=old_date,
|
||||
)
|
||||
Intervention.objects.filter(id=itv_old_unprocessed.id).update(creation_time=old_date)
|
||||
|
||||
itv_old_finished = Intervention.objects.create(
|
||||
title='Old Finished Intervention',
|
||||
status='finished',
|
||||
maintain_type='corrective',
|
||||
end_time=old_date,
|
||||
)
|
||||
Intervention.objects.filter(id=itv_old_finished.id).update(creation_time=old_date)
|
||||
|
||||
# Test in teams_daily view mode
|
||||
url_daily = reverse('interventions:interventions_events') + '?view_mode=teams_daily'
|
||||
response_daily = self.client.get(url_daily)
|
||||
self.assertEqual(response_daily.status_code, 200)
|
||||
data_daily = response_daily.json()
|
||||
backlog_daily = data_daily.get('backlog_groups', {}).get('corrective', [])
|
||||
backlog_daily_ids = [item['id'] for item in backlog_daily]
|
||||
|
||||
self.assertIn(itv_old_unprocessed.id, backlog_daily_ids)
|
||||
self.assertNotIn(itv_old_finished.id, backlog_daily_ids)
|
||||
|
||||
# Test in members view mode
|
||||
url_members = reverse('interventions:interventions_events') + '?view_mode=members'
|
||||
response_members = self.client.get(url_members)
|
||||
self.assertEqual(response_members.status_code, 200)
|
||||
data_members = response_members.json()
|
||||
backlog_members = data_members.get('backlog_groups', {}).get('corrective', [])
|
||||
backlog_members_ids = [item['id'] for item in backlog_members]
|
||||
|
||||
self.assertIn(itv_old_unprocessed.id, backlog_members_ids)
|
||||
self.assertNotIn(itv_old_finished.id, backlog_members_ids)
|
||||
|
||||
def test_member_history_ajax_permissions_and_data(self):
|
||||
from contracts.models import CompanyMember, CompanyMemberHistory
|
||||
from interventions.models import Intervention
|
||||
|
|
|
|||
|
|
@ -126,6 +126,7 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
from interventions.views.helpers import *
|
||||
|
||||
FINISHED_STATUSES = {'finished', 'processed', 'corrected', 'validated', 'invoiced', 'closed', 'canceled'}
|
||||
|
||||
|
||||
def interventions_calendar(request):
|
||||
|
|
@ -372,9 +373,12 @@ def interventions_events(request):
|
|||
end_window_filter = Q(effective_end__gte=start) | Q(effective_end__isnull=True)
|
||||
|
||||
if view_mode in ('members', 'teams_daily'):
|
||||
# Dans les vues par membres et par équipes journalières, le panneau latéral présente le backlog à assigner.
|
||||
# Les interventions non terminées doivent rester visibles dans ce backlog même si leur date dépasse 3 mois.
|
||||
backlog_window_filter = end_window_filter | ~Q(status__in=FINISHED_STATUSES)
|
||||
interventions = (
|
||||
interventions
|
||||
.filter(end_window_filter)
|
||||
.filter(backlog_window_filter)
|
||||
.filter(Q(effective_begin__lte=end) | Q(effective_begin__isnull=True))
|
||||
)
|
||||
else:
|
||||
|
|
|
|||
Loading…
Reference in a new issue