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 == 'naturerwiz': 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', '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