Files
N3WT DE COMPET f2ad1de5a4 feat: Utilisation de l'établissement en variable de session / gestion de
la page des inscriptions en fonction de l'établissement / mise à jour du
mock_data à l'init
2025-03-06 20:08:16 +01:00

108 lines
3.9 KiB
Python

import logging
from django.db.models import Q
from django.http import JsonResponse
from django.core.exceptions import ObjectDoesNotExist
from Subscriptions.models import RegistrationForm, Student
from Auth.models import Profile
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)