import logging from django.db.models import Q from GestionInscriptions.models import FicheInscription, Profil, Eleve 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): eleve = None ficheInscriptions_List=getAllObjects(FicheInscription) for fi in ficheInscriptions_List: if fi.codeLienInscription == _codeFI: eleve = fi.eleve return eleve 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, _excludeState=None): """ Recherche générique sur les objets avec possibilité d'exclure certains états _objectName: Classe du modèle _searchTerm: Terme de recherche _excludeState: État à exclure de la recherche (optionnel) """ try: query = _objectName.objects.all() # Si on a un état à exclure if _excludeState is not None: query = query.filter(etat__lt=_excludeState) # 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(eleve__nom__icontains=term) | Q(eleve__prenom__icontains=term) ) return query.order_by('eleve__nom', 'eleve__prenom') except _objectName.DoesNotExist: logger.error(f"Aucun résultat n'a été trouvé - {_objectName.__name__} (recherche: {_searchTerm})") return None