from django.shortcuts import render,get_object_or_404,get_list_or_404 from .models import FicheInscription, Eleve, Responsable, Frere import time from datetime import date, datetime, timedelta from zoneinfo import ZoneInfo from django.conf import settings from N3wtSchool import renderers from N3wtSchool import bdd from io import BytesIO from django.core.files import File from pathlib import Path import os from enum import Enum import random import string from rest_framework.parsers import JSONParser def recupereListeFichesInscription(): context = { "ficheInscriptions_list": bdd.getAllObjects(FicheInscription), } return context def recupereListeFichesInscriptionEnAttenteSEPA(): ficheInscriptionsSEPA_list = FicheInscription.objects.filter(modePaiement="Prélèvement SEPA").filter(etat=FicheInscription.EtatDossierInscription['SEPA_ENVOYE']) return ficheInscriptionsSEPA_list def updateEleve(eleve, inputs, erase=False): eleve.nom = inputs["nomEleve"] eleve.prenom = inputs["prenomEleve"] eleve.ambiance = inputs["ambiance"] eleve.genre = inputs["genre"] eleve.adresse = inputs["adresseEleve"] eleve.dateNaissance = inputs["dateNaissanceEleve"] eleve.lieuNaissance = inputs["lieuNaissanceEleve"] eleve.codePostalNaissance = inputs["codePostalNaissanceEleve"] eleve.nationalite = inputs["nationaliteEleve"] eleve.medecinTraitant = inputs["medecinTraitantEleve"] responsable=eleve.getResponsablePrincipal() responsable.adresse = inputs["adresseResponsable1"] responsable.dateNaissance = inputs["dateNaissanceResponsable1"] responsable.profession = inputs["professionResponsable1"] responsable.save() # Création du 2ème responsable if inputs["nomResponsable2"] != "" and inputs["prenomResponsable2"] != "": responsable2 = Responsable.objects.create(nom=inputs["nomResponsable2"], prenom=inputs["prenomResponsable2"], dateNaissance=inputs["dateNaissanceResponsable2"], adresse=inputs["adresseResponsable2"], mail=inputs["mailResponsable2"], telephone=inputs["telephoneResponsable2"], profession=inputs["professionResponsable2"]) responsable2.save() eleve.responsables.add(responsable2) # Création du 1er frère if inputs["nomFrere1"] != "" and inputs["prenomFrere1"] != "": frere1 = Frere.objects.create(nom=inputs["nomFrere1"], prenom=inputs["prenomFrere1"], dateNaissance=inputs["dateNaissanceFrere1"]) frere1.save() eleve.freres.add(frere1) # Création du 2ème frère if inputs["nomFrere2"] != "" and inputs["prenomFrere2"] != "": frere2 = Frere.objects.create(nom=inputs["nomFrere2"], prenom=inputs["prenomFrere2"], dateNaissance=inputs["dateNaissanceFrere2"]) frere2.save() eleve.freres.add(frere2) eleve.save() def _now(): return datetime.now(ZoneInfo(settings.TZ_APPLI)) def convertToStr(dateValue, dateFormat): return dateValue.strftime(dateFormat) def convertToDate(date_time): format = '%d-%m-%Y %H:%M' datetime_str = datetime.strptime(date_time, format) return datetime_str def convertTelephone(telephoneValue, separator='-'): return f"{telephoneValue[:2]}{separator}{telephoneValue[2:4]}{separator}{telephoneValue[4:6]}{separator}{telephoneValue[6:8]}{separator}{telephoneValue[8:10]}" def generePDF(ficheEleve): data = { 'pdf_title': "Dossier d'inscription de %s"%ficheEleve.eleve.prenom, 'dateSignature': convertToStr(_now(), '%d-%m-%Y'), 'heureSignature': convertToStr(_now(), '%H:%M'), 'eleve':ficheEleve.eleve, } pdf = renderers.render_to_pdf('pdfs/dossier_inscription.html', data) nomFichierPDF = "Dossier_Inscription_%s_%s.pdf"%(ficheEleve.eleve.nom, ficheEleve.eleve.prenom) pathFichier = Path(settings.DOCUMENT_DIR + "/" + nomFichierPDF) if os.path.exists(str(pathFichier)): os.remove(str(pathFichier)) receipt_file = BytesIO(pdf.content) # fichier = Fichier.objects.create(fiche_inscription=ficheEleve) # fichier.document = File(receipt_file, nomFichierPDF) # fichier.save() def genereRandomCode(length): return ''.join(random.choice(string.ascii_letters) for i in range(length)) def calculeDatePeremption(_start, nbDays): return convertToStr(_start + timedelta(days=nbDays), settings.DATE_FORMAT) # Fonction permettant de retourner la valeur du QueryDict # QueryDict [ index ] -> Dernière valeur d'une liste # dict (QueryDict [ index ]) -> Toutes les valeurs de la liste def _(liste): return liste[0] def toNewEleveJSONRequest(jsonOrigin): etat=FicheInscription.EtatDossierInscription.DI_CREE telephone = convertTelephone(_(jsonOrigin['telephoneResponsable'])) finalJSON = { "eleve": { "nom" : _(jsonOrigin['nomEleve']), "prenom" : _(jsonOrigin['prenomEleve']), "responsables" : [ { "nom" : _(jsonOrigin['nomResponsable']), "prenom" : _(jsonOrigin['prenomResponsable']), "mail" : _(jsonOrigin['mailResponsable']), "telephone" : telephone } ], "profils" : [ ], }, "etat": str(etat), "dateMAJ": str(convertToStr(_now(), '%d-%m-%Y %H:%M')), } print(finalJSON) return finalJSON def toEditEleveJSONRequest(jsonOrigin): telephone = convertTelephone(_(jsonOrigin['telephoneResponsable']), '.') finalJSON = { "eleve": { "id" : _(jsonOrigin['fiche_id']), "nom" : _(jsonOrigin['nomEleve']), "prenom" : _(jsonOrigin['prenomEleve']), "responsables" : [ { "id" : _(jsonOrigin['responsable_id']), "nom" : _(jsonOrigin['nomResponsable']), "prenom" : _(jsonOrigin['prenomResponsable']), "mail" : _(jsonOrigin['mailResponsable']), "telephone" : telephone } ], "profils" : [ ], }, "dateMAJ": str(convertToStr(_now(), '%d-%m-%Y %H:%M')), } print(finalJSON) return finalJSON def getArgFromRequest(_argument, _request): resultat = None data=JSONParser().parse(_request) resultat = data[_argument] return resultat def diToPDF(ficheEleve): # Ajout du fichier d'inscriptions data = { 'pdf_title': "Dossier d'inscription de %s"%ficheEleve.eleve.prenom, 'dateSignature': convertToStr(_now(), '%d-%m-%Y'), 'heureSignature': convertToStr(_now(), '%H:%M'), 'eleve':ficheEleve.eleve, } pdf = renderers.render_to_pdf('pdfs/dossier_inscription.html', data) nomFichierPDF = "Dossier_Inscription_%s_%s.pdf"%(ficheEleve.eleve.nom, ficheEleve.eleve.prenom) pathFichier = Path(settings.DOCUMENT_DIR + "/" + nomFichierPDF) if os.path.exists(str(pathFichier)): print(f'File exists : {str(pathFichier)}') os.remove(str(pathFichier)) receipt_file = BytesIO(pdf.content) ficheEleve.fichierInscription = File(receipt_file, nomFichierPDF)