import logging from django.db.models import Q from django.http import JsonResponse from django.core.exceptions import ObjectDoesNotExist from Subscriptions.models import RegistrationForm, Profile, Student logger = logging.getLogger('N3wtSchool') def getAllObjects(_objectName): result = _objectName.objects.all() if not result: logger.warning("Aucun résultat n'a été trouvé - " + _objectName.__name__) return result def getObject(_objectName, _columnName, _value): result=None try : result = _objectName.objects.get(**{_columnName: _value}) except _objectName.DoesNotExist: logger.error("Aucun résultat n'a été trouvé - " + _objectName.__name__ + " (" + _columnName + "=" + str(_value) + ")") return result def getObjects(_objectName, _columnName, _value, _reverseCondition=False): results=None try : results = _objectName.objects.filter(**{_columnName: _value}) if _reverseCondition == False else _objectName.objects.filter(~Q(**{_columnName: _value})) except _objectName.DoesNotExist: logger.error("Aucun résultat n'a été trouvé - " + _objectName.__name__ + " (" + _columnName + "=" + str(_value) + ")") return results def existsProfilInList(objectList, valueToCheck): result = False for objectInstance in objectList: if objectInstance.email == valueToCheck: result = True return result def getProfile(objectList, valueToCheck): result = None for objectInstance in objectList: if objectInstance.email == valueToCheck: result = objectInstance return result def getEleveByCodeFI(_codeFI): student = None ficheInscriptions_List=getAllObjects(RegistrationForm) for rf in ficheInscriptions_List: if rf.codeLienInscription == _codeFI: student = rf.student return student def getLastId(_object): result = 1 try: result = _object.objects.latest('id').id except: logger.warning("Aucun résultat n'a été trouvé - ") return result def searchObjects(_objectName, _searchTerm=None, _excludeStates=None): """ Recherche générique sur les objets avec possibilité d'exclure certains états _objectName: SchoolClass du modèle _searchTerm: Terme de recherche _excludeStates: Liste d'état à exclure de la recherche (optionnel) """ try: query = _objectName.objects.all() # Si on a un état à exclure if _excludeStates is not None: query = query.exclude(status__in=_excludeStates) # Si on a un terme de recherche if _searchTerm and _searchTerm.strip(): terms = _searchTerm.lower().strip().split() for term in terms: query = query.filter( Q(student__last_name__icontains=term) | Q(student__first_name__icontains=term) ) return query.order_by('student__last_name', 'student__first_name') except _objectName.DoesNotExist: logging.error(f"Aucun résultat n'a été trouvé - {_objectName.__name__} (recherche: {_searchTerm})") return None def delete_object(model_class, object_id, related_field=None): try: obj = model_class.objects.get(id=object_id) if related_field and hasattr(obj, related_field): related_obj = getattr(obj, related_field) if related_obj: related_obj.delete() obj_name = str(obj) # Utiliser la méthode __str__ obj.delete() return JsonResponse({'message': f'La suppression de l\'objet {obj_name} a été effectuée avec succès'}, safe=False) except ObjectDoesNotExist: return JsonResponse({'error': f'L\'objet {model_class.__name__} n\'existe pas avec cet ID'}, status=404, safe=False) except Exception as e: return JsonResponse({'error': f'Une erreur est survenue : {str(e)}'}, status=500, safe=False)