70 lines
2.4 KiB
Python
70 lines
2.4 KiB
Python
import os
|
|
from django.template.loader import get_template
|
|
from django.template.exceptions import TemplateDoesNotExist
|
|
|
|
|
|
def get_inspection_partial_template(model_or_name):
|
|
"""
|
|
Retourne le chemin relatif du partial template d'inspection pour un type d'asset donné
|
|
si ce fichier existe (ex: 'inspections/components/asset_fields/_parkingspot.html').
|
|
Sinon retourne None.
|
|
"""
|
|
if not model_or_name:
|
|
return None
|
|
|
|
if hasattr(model_or_name, '_meta'):
|
|
model_name = model_or_name._meta.model_name.lower()
|
|
else:
|
|
model_name = str(model_or_name).lower()
|
|
|
|
if model_name in ('naturerwiz', 'naturerwiasset'):
|
|
model_name = 'naturerwiz'
|
|
|
|
template_path = f"inspections/components/asset_fields/_{model_name}.html"
|
|
try:
|
|
get_template(template_path)
|
|
return template_path
|
|
except TemplateDoesNotExist:
|
|
return None
|
|
|
|
|
|
def get_inspection_detail_partial_template(insp_or_model_or_name):
|
|
"""
|
|
Retourne le chemin relatif du partial template d'affichage du détail d'inspection
|
|
pour un type d'asset ou une sous-classe d'inspection donnée
|
|
(ex: 'inspections/components/asset_details/_parkingspot.html' ou '_naturerwiz.html').
|
|
Sinon retourne None.
|
|
"""
|
|
if not insp_or_model_or_name:
|
|
return None
|
|
|
|
if hasattr(insp_or_model_or_name, 'asset') and insp_or_model_or_name.asset:
|
|
model_name = insp_or_model_or_name.asset._meta.model_name.lower()
|
|
elif hasattr(insp_or_model_or_name, '_meta'):
|
|
model_name = insp_or_model_or_name._meta.model_name.lower()
|
|
else:
|
|
model_name = str(insp_or_model_or_name).lower()
|
|
|
|
if model_name in ('naturerwiz', 'naturerwiasset', 'giepinspection'):
|
|
model_name = 'naturerwiz'
|
|
elif model_name == 'parkingspotinspection':
|
|
model_name = 'parkingspot'
|
|
|
|
template_path = f"inspections/components/asset_details/_{model_name}.html"
|
|
try:
|
|
get_template(template_path)
|
|
return template_path
|
|
except TemplateDoesNotExist:
|
|
return None
|
|
|
|
|
|
# Registre des processeurs / formulaires d'inspection spécialisés par modèle
|
|
INSPECTION_FORM_REGISTRY = {}
|
|
|
|
|
|
def register_inspection_handler(model_name):
|
|
"""Décorateur pour enregistrer une classe/fonction de traitement d'inspection spécialisée."""
|
|
def decorator(cls_or_func):
|
|
INSPECTION_FORM_REGISTRY[model_name.lower()] = cls_or_func
|
|
return cls_or_func
|
|
return decorator
|