diff --git a/streetup/assets/templates/assets/components/asset_interventions.html b/streetup/assets/templates/assets/components/asset_interventions.html new file mode 100644 index 0000000..06e6fdf --- /dev/null +++ b/streetup/assets/templates/assets/components/asset_interventions.html @@ -0,0 +1,89 @@ +{% load i18n %} + +{# Interventions liées à l'asset #} +
+
+
+ {% translate "Interventions liées" %} + {% if interventions %} + {{ interventions|length }} + {% endif %} +
+
+
+ {% if interventions %} +
+ + + + + + + + + + + + + + {% for intervention in interventions %} + + + + + + + + + + {% endfor %} + +
{% translate "Code" %}{% translate "Titre" %}{% translate "Symptôme" %}{% translate "Statut" %}{% translate "Priorité" %}{% translate "Attribué à" %}{% translate "Date" %}
+ + {{ intervention.code }} + + + + {{ intervention.title }} + + + {% if intervention.symptom %} + {{ intervention.symptom.get_name }} + {% else %} + - + {% endif %} + + + {{ intervention.get_status_display }} + + + {% if intervention.priority == '1' %} + {{ intervention.get_priority_display }} + {% elif intervention.priority == '2' %} + {{ intervention.get_priority_display }} + {% elif intervention.priority == '3' %} + {{ intervention.get_priority_display }} + {% elif intervention.priority == '4' %} + {{ intervention.get_priority_display }} + {% else %} + {{ intervention.get_priority_display|default:"-" }} + {% endif %} + + {% if intervention.assigned_team %} + {{ intervention.assigned_team.name }} + {% elif intervention.assigned_provider %} + {{ intervention.assigned_provider.name }} + {% else %} + - + {% endif %} + + {{ intervention.creation_time|date:"d/m/Y" }} +
+
+ {% else %} +
+ {% translate "Aucune intervention liée à cet asset." %} +
+ {% endif %} +
+
diff --git a/streetup/assets/templates/assets/detail_generic.html b/streetup/assets/templates/assets/detail_generic.html index bc608dc..1157e60 100644 --- a/streetup/assets/templates/assets/detail_generic.html +++ b/streetup/assets/templates/assets/detail_generic.html @@ -726,6 +726,13 @@ + +
+
+ {% asset_interventions asset %} +
+
+
diff --git a/streetup/assets/templatetags/asset_tags.py b/streetup/assets/templatetags/asset_tags.py index a42bafb..5064a06 100644 --- a/streetup/assets/templatetags/asset_tags.py +++ b/streetup/assets/templatetags/asset_tags.py @@ -436,3 +436,38 @@ def warranty_remaining_months(asset): remaining = (warranty_end.year - now.year) * 12 + (warranty_end.month - now.month) return remaining + + +@register.inclusion_tag('assets/components/asset_interventions.html') +def asset_interventions(asset): + """ + Display all interventions associated with an asset. + """ + if asset is None or not hasattr(asset, 'pk') or asset.pk is None: + return { + 'asset': asset, + 'interventions': [], + } + + from django.contrib.contenttypes.models import ContentType + from interventions.models import Intervention, InterventionAsset, STATUS_COLORS, STATUS_COLORS_DARK_TEXT + + asset_ct = ContentType.objects.get_for_model(asset) + intervention_ids = InterventionAsset.objects.filter( + content_type=asset_ct, + object_id=asset.pk + ).values_list('intervention_id', flat=True) + + interventions = list(Intervention.objects.filter( + pk__in=intervention_ids + ).select_related( + 'symptom', 'contract', 'assigned_provider', 'assigned_team', 'created_by' + ).order_by('-creation_time')) + + return { + 'asset': asset, + 'interventions': interventions, + 'status_colors': STATUS_COLORS, + 'status_colors_dark_text': STATUS_COLORS_DARK_TEXT, + } +