diff --git a/loko/interventions/permissions.py b/loko/interventions/permissions.py
index fddff32..5c2f421 100644
--- a/loko/interventions/permissions.py
+++ b/loko/interventions/permissions.py
@@ -17,7 +17,7 @@ from common.models import (
UserThematicStatusPermission, UserContractStatusPermission,
)
from interventions.models import Intervention, InterventionTimeLine, STATUS_ORDERS, STATUS_CHOICES
-from contracts.models import CompanyMember
+from contracts.models import CompanyMember, CompanyTeam
# Ordered list of all status keys (used by get_allowed_statuses_for_user and admin UI)
ALL_STATUS_KEYS = list(STATUS_CHOICES.keys())
@@ -199,13 +199,15 @@ def get_today_intervention_visibility_q(today):
Condition Q pour filtrer les interventions actives le jour 'today' :
1. Planifiée pour aujourd'hui (date exacte ou comprise dans la période planifiée [planned_begin, planned_end])
2. Démarrée aujourd'hui (begin_time__date == today)
- 3. Travail en cours ou en pause (status in ['in_progress', 'on_pause'])
- 4. Créée aujourd'hui sans planification préalable (urgences du jour)
+ 3. Terminée aujourd'hui (end_time__date == today)
+ 4. Travail en cours ou en pause (status in ['in_progress', 'on_pause'])
+ 5. Créée aujourd'hui sans planification préalable (urgences du jour)
"""
return (
Q(planned_begin_time__date=today) |
Q(planned_begin_time__date__lte=today, planned_end_time__date__gte=today) |
Q(begin_time__date=today) |
+ Q(end_time__date=today) |
Q(status__in=['in_progress', 'on_pause']) |
Q(planned_begin_time__isnull=True, begin_time__isnull=True, expected_begin_time__date=today) |
Q(planned_begin_time__isnull=True, begin_time__isnull=True, expected_begin_time__isnull=True, creation_time__date=today)
@@ -218,7 +220,8 @@ def is_intervention_active_for_today(intervention, today):
1. Travail en cours ou en pause
2. Planifiée pour aujourd'hui (date exacte ou comprise dans la période planifiée)
3. Démarrée aujourd'hui
- 4. Créée aujourd'hui sans planification ni démarrage préalable (urgences du jour)
+ 4. Terminée aujourd'hui
+ 5. Créée aujourd'hui sans planification ni démarrage préalable (urgences du jour)
"""
if intervention.status in ('in_progress', 'on_pause'):
return True
@@ -237,6 +240,11 @@ def is_intervention_active_for_today(intervention, today):
if b_date == today:
return True
+ if intervention.end_time:
+ e_date = timezone.localtime(intervention.end_time).date() if timezone.is_aware(intervention.end_time) else intervention.end_time.date()
+ if e_date == today:
+ return True
+
if not intervention.planned_begin_time and not intervention.begin_time:
if intervention.expected_begin_time:
e_date = timezone.localtime(intervention.expected_begin_time).date() if timezone.is_aware(intervention.expected_begin_time) else intervention.expected_begin_time.date()
@@ -250,6 +258,35 @@ def is_intervention_active_for_today(intervention, today):
return False
+def is_technician_with_daily_team_restriction(user, user_config=None) -> bool:
+ """
+ Vérifie si l'utilisateur est un technicien (possède le rôle 'technician' et aucun
+ rôle privilégié de gestion/admin) appartenant à au moins une équipe ayant
+ la visibilité restreinte aux interventions du jour ('restrict_today_interventions_visibility'=True).
+ """
+ if not user or not getattr(user, 'is_authenticated', False):
+ return False
+
+ if user_config is None:
+ try:
+ user_config = UserConfig.objects.prefetch_related('roles').get(user=user)
+ except UserConfig.DoesNotExist:
+ return False
+
+ user_roles = set(user_config.roles.values_list('name', flat=True))
+ privileged_roles = {'admin', 'top_manager', 'manager', 'controller', 'operator', 'external_manager'}
+ if 'technician' not in user_roles or bool(user_roles & privileged_roles):
+ return False
+
+ company_member = CompanyMember.objects.filter(user=user).first()
+ if company_member:
+ from contracts.services_teams import sync_member_current_teams
+ sync_member_current_teams(company_member)
+ return company_member.teams.filter(restrict_today_interventions_visibility=True).exists()
+
+ return CompanyTeam.objects.filter(members__user=user, restrict_today_interventions_visibility=True).exists()
+
+
def can_view_intervention(user, intervention):
"""
diff --git a/loko/interventions/templates/interventions/interventions_index_mobile.html b/loko/interventions/templates/interventions/interventions_index_mobile.html
index 64a8277..71744f1 100644
--- a/loko/interventions/templates/interventions/interventions_index_mobile.html
+++ b/loko/interventions/templates/interventions/interventions_index_mobile.html
@@ -120,7 +120,9 @@