Files
n3wt-school/Back-End/N3wtSchool/bdd.py
2024-12-16 10:20:17 +01:00

89 lines
3.0 KiB
Python

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=None, _excludeStates=None):
"""
Recherche générique sur les objets avec possibilité d'exclure certains états
_objectName: Classe 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(etat__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(eleve__nom__icontains=term) |
Q(eleve__prenom__icontains=term)
)
return query.order_by('eleve__nom', 'eleve__prenom')
except _objectName.DoesNotExist:
logging.error(f"Aucun résultat n'a été trouvé - {_objectName.__name__} (recherche: {_searchTerm})")
return None