def noteEleve(request,id_eleve,id_classe,colle=None): """Renvoie la vue de la page de notation de l'élève dont l'id est id_eleve et dont la classe a pour id id_classe""" # on renseigne aussi la classe dans l'éventualité d'un élève fictif(None) qui n'a pas de classe try: eleve=Eleve.objects.get(pk=id_eleve) except Exception: eleve=None colleur=request.user.colleur matiere=get_object_or_404(Matiere,pk=request.session['matiere'],colleur=colleur) if eleve is not None and eleve.classe not in colleur.classes.all(): raise Http404 try: classe=eleve.classe except Exception: classe=Classe.objects.get(pk=id_classe) if matiere.pk not in classe.matierespk(): raise Http404 note=Note(matiere=matiere,colleur=colleur,eleve=eleve,classe=classe) if colle: note.semaine=colle.semaine note.jour=colle.creneau.jour note.heure=colle.creneau.heure form=NoteForm(request.POST or None,instance=note) if form.is_valid(): form.save() return redirect('note_colleur',classe.pk) return render(request,"colleur/noteEleve.html",{'eleve':eleve,'form':form,'classe':classe,'matiere':matiere, 'info': matiere.temps == 60})
def save(self): """sauvegarde en base de données les notes dont la valeur n'est pas None""" eleves = list(self.groupe.groupeeleve.all()) eleves += [None] * (3 - len(eleves)) notes=[Note(colleur=self.colleur,matiere=self.matiere,semaine=self.cleaned_data['semaine'],date_colle=self.cleaned_data['date_colle'],rattrapee=self.cleaned_data['rattrapee']\ ,jour=self.cleaned_data['jour'],note=self.cleaned_data['note{}'.format(i)],eleve=eleve,classe=self.groupe.classe,heure=self.cleaned_data['heure']\ ,commentaire=self.cleaned_data['commentaire{}'.format(i)] if eleve is not None else None) for i,eleve in enumerate(eleves) if self.cleaned_data['note{}'.format(i)]] Note.objects.bulk_create( notes) # on sauvegarde toutes les notes en une seule requête
def colleNoteEleve(request, id_colle): """Récupère la colle dont l'id est id_colle puis redirige vers la page de notation de l'élève sur la colle concernée""" colle = get_object_or_404(Colle, pk=id_colle, colleur=request.user.colleur, matiere__in=request.user.colleur.matieres.all()) request.session[ 'matiere'] = colle.matiere.pk # on met à jour la matière courante note = Note(semaine=colle.semaine, jour=colle.creneau.jour, heure=colle.creneau.heure) return noteEleves(request, colle.creneau.classe.pk, "0" if not colle.eleve else str(colle.eleve.pk), note)
def colleNote(request, id_colle): """Récupère la colle dont l'id est id_colle puis redirige vers la page de notation des groupes sur la colle concernée""" colle = get_object_or_404(Colle, pk=id_colle, colleur=request.user.colleur, matiere__in=request.user.colleur.matieres.all() ) # on récupère la colle request.session[ 'matiere'] = colle.matiere.pk # on met à jour la matière courante eleves = Eleve.objects.filter(groupe=colle.groupe) if colle.matiere.lv == 1: eleves = eleves.filter(lv1=colle.matiere) elif colle.matiere.lv == 2: eleves = eleves.filter(lv2=colle.matiere) eleves_str = "-".join([str(x.pk) for x in eleves] + ["0"] * (3 - eleves.count())) note = Note(semaine=colle.semaine, jour=colle.creneau.jour, heure=colle.creneau.heure) return noteEleves(request, colle.creneau.classe.pk, eleves_str, note)
def adddraftgrades(request): """ajoute les brouillons de notes dans la base de donnée en insérant / mettant à jour""" user = request.user if not checkcolleur(user): return HttpResponseForbidden("not authenticated") if request.method != 'POST' or 'draftCount' not in request.POST: raise Http404 listeNotesRow = [] # rowid des brouillons sucessifs listeNotesId = [ ] # id des brouillons une fois sauvegardés (si ils le sont, sinon 0) try: nbNotes = int(request.POST['draftCount']) for i in range(nbNotes): rowid = int(request.POST['row{}'.format(i)]) listeNotesRow.append(rowid) draft_id = int(request.POST['draft{}'.format(i)]) if draft_id in listeNotesId: # si on a déjà enregistré un brouillon pour cette note, on n'enregistre pas le suivant listeNotesId.append(0) else: # sinon on essaie d'enregistrer la note if draft_id != 0: try: note = Note.objects.get(pk=draft_id) except Exception: note = Note() else: note = Note() try: note.semaine = Semaine.objects.get( numero=int(request.POST['week{}'.format(i)])) note.matiere = Matiere.objects.get( pk=int(request.POST['subject{}'.format(i)])) note.classe = Classe.objects.get( pk=int(request.POST['classe{}'.format(i)])) note.jour = int(request.POST['day{}'.format(i)]) note.heure = int(request.POST['hour{}'.format(i)]) note.note = int(request.POST['grade{}'.format(i)]) note.rattrapee = False if request.POST['catchup{}'.format( i)] == "false" else True eleve_id = int(request.POST['student{}'.format(i)]) note.eleve = None if eleve_id == 0 else Eleve.objects.get( pk=eleve_id) date_colle = int(request.POST['date{}'.format(i)]) except Exception: listeNotesId.append(0) continue note.colleur = user.colleur if note.classe not in user.colleur.classes.all( ) or note.matiere not in user.colleur.matieres.all(): listeNotesId.append(0) continue if not note.rattrapee: note.date_colle = note.semaine.lundi + timedelta( days=note.jour) else: note.date_colle = datetime.utcfromtimestamp(date_colle) nbNotesColleur = Note.objects.filter( date_colle=note.date_colle, colleur=note.colleur, heure=note.heure) if note.pk: nbNotesColleur = nbNotesColleur.exclude(pk=note.pk) nbNotesColleur = nbNotesColleur.count() if nbNotesColleur >= 3: listeNotesId.append(0) continue nbNotesEleve = Note.objects.filter(semaine=note.semaine, matiere=note.matiere, colleur=user.colleur, eleve=note.eleve).count() if nbNotesEleve != 0 and note.eleve is not None and not note.pk: listeNotesId.append(0) continue try: note.commentaire = request.POST['comment{}'.format(i)] except Exception: listeNotesId.append(0) continue note.save() listeNotesId.append(note.pk) except Exception: raise Http404 return HttpResponse(json.dumps([listeNotesRow, listeNotesId]))
def addgroupgrades(request): """ajoute les notes d'un groupe dans la base de donnée""" user = request.user if not checkcolleur(user): return HttpResponseForbidden("not authenticated") if request.method != 'POST' or 'week' not in request.POST or 'day' not in request.POST or 'hour' not in request.POST \ or 'catchup' not in request.POST or 'date' not in request.POST or 'grade1' not in request.POST \ or 'comment1' not in request.POST or 'grade2' not in request.POST or 'grade3' not in request.POST or 'subject' not in request.POST\ or 'comment2' not in request.POST or 'comment3' not in request.POST or 'classe' not in request.POST\ or 'student1' not in request.POST or 'student2' not in request.POST or 'student3' not in request.POST: raise Http404 note1, note2, note3 = Note(), Note(), Note() note1.semaine = note2.semaine = note3.semaine = get_object_or_404( Semaine, numero=int(request.POST['week'])) note1.matiere = note2.matiere = note3.matiere = get_object_or_404( Matiere, pk=int(request.POST['subject'])) note1.classe = note2.classe = note3.classe = get_object_or_404( Classe, pk=int(request.POST['classe'])) if note1.classe not in user.colleur.classes.all(): return HttpResponse("vous ne collez pas dans cette classe") if note1.matiere not in user.colleur.matieres.all(): return HttpResponse("vous ne collez pas dans cette matière") note1.jour = note2.jour = note3.jour = int(request.POST['day']) note1.heure = note2.heure = note3.heure = int(request.POST['hour']) note1.colleur = note2.colleur = note3.colleur = user.colleur note1.rattrapee = note2.rattrapee = note3.rattrapee = False if request.POST[ 'catchup'] == "false" else True if not note1.rattrapee: note1.date_colle = note2.date_colle = note3.date_colle = note1.semaine.lundi + timedelta( days=note1.jour) else: note1.date_colle = note2.date_colle = note3.date_colle = datetime.utcfromtimestamp( int(request.POST['date'])) note1.note = int(request.POST['grade1']) note2.note = int(request.POST['grade2']) note3.note = int(request.POST['grade3']) note1.eleve = None if request.POST[ 'student1'] == "0" else get_object_or_404(Eleve, pk=request.POST['student1']) note2.eleve = None if request.POST[ 'student2'] == "0" else get_object_or_404(Eleve, pk=request.POST['student2']) note3.eleve = None if request.POST[ 'student3'] == "0" else get_object_or_404(Eleve, pk=request.POST['student3']) if note1.eleve is None and note1.note != -1: note1.note = 21 if note2.eleve is None and note2.note != -1: note2.note = 21 if note3.eleve is None and note3.note != -1: note3.note = 21 nbNotesColleur = Note.objects.filter(date_colle=note1.date_colle, colleur=note1.colleur, heure=note1.heure).count() if nbNotesColleur >= 1: return HttpResponse("Vous avez déjà des notes sur ce créneau") if note1.note != -1: nbNotesEleve1 = Note.objects.filter(semaine=note1.semaine, matiere=note1.matiere, colleur=user.colleur, eleve=note1.eleve).count() if nbNotesEleve1 != 0 and note1.eleve is not None: return HttpResponse( "Vous avez déjà collé {} dans cette matière cette semaine". format(note1.eleve)) if note2.note != -1: nbNotesEleve2 = Note.objects.filter(semaine=note2.semaine, matiere=note2.matiere, colleur=user.colleur, eleve=note2.eleve).count() if nbNotesEleve2 != 0 and note2.eleve is not None: return HttpResponse( "Vous avez déjà collé {} dans cette matière cette semaine". format(note2.eleve)) if note3.note != -1: nbNotesEleve3 = Note.objects.filter(semaine=note3.semaine, matiere=note3.matiere, colleur=user.colleur, eleve=note3.eleve).count() if nbNotesEleve3 != 0 and note3.eleve is not None: return HttpResponse( "Vous avez déjà collé {} dans cette matière cette semaine". format(note3.eleve)) if note1.note != -1: note1.commentaire = request.POST['comment1'] note1.save() if note2.note != -1: note2.commentaire = request.POST['comment2'] note2.save() if note3.note != -1: note3.commentaire = request.POST['comment3'] note3.save() try: program = Programme.objects.get(classe=note1.classe, semaine=note1.semaine, matiere=note1.matiere).titre except Exception: program = "" date_colle = int( datetime.combine(note1.date_colle, time(note1.heure // 60, note1.heure % 60)).replace(tzinfo=timezone.utc).timestamp()) return HttpResponse( json.dumps( { 'pk1': note1.pk, 'pk2': note2.pk, 'pk3': note3.pk, 'program': program, 'date': date_colle }, default=date_serial))
def addsinglegrade(request): """ajoute une note dans la base de donnée""" user = request.user if not checkcolleur(user): return HttpResponseForbidden("not authenticated") if request.method != 'POST' or 'week' not in request.POST or 'day' not in request.POST or 'hour' not in request.POST \ or 'student' not in request.POST or 'catchup' not in request.POST or 'date' not in request.POST or 'grade' not in request.POST \ or 'comment' not in request.POST or 'subject' not in request.POST or 'classe' not in request.POST or 'pk' not in request.POST \ or 'draft_id' not in request.POST: raise Http404 if request.POST['pk'] != "0": note = get_object_or_404(Note, pk=int(request.POST['pk'])) elif request.POST['draft_id'] != "0": try: note = Note.objects.get(pk=int(request.POST['draft_id'])) except Exception: note = Note() else: note = Note() note.semaine = get_object_or_404(Semaine, numero=int(request.POST['week'])) note.matiere = get_object_or_404(Matiere, pk=int(request.POST['subject'])) note.classe = get_object_or_404(Classe, pk=int(request.POST['classe'])) if note.classe not in user.colleur.classes.all(): return HttpResponse("vous ne collez pas dans cette classe") if note.matiere not in user.colleur.matieres.all(): return HttpResponse("vous ne collez pas dans cette matière") note.jour = int(request.POST['day']) note.heure = int(request.POST['hour']) note.colleur = user.colleur note.note = request.POST['grade'] if request.POST['student'] == "0": note.eleve = None note.note = 21 else: note.eleve = get_object_or_404(Eleve, pk=request.POST['student']) note.rattrapee = False if request.POST['catchup'] == "false" else True if not note.rattrapee: note.date_colle = note.semaine.lundi + timedelta(days=note.jour) else: note.date_colle = datetime.utcfromtimestamp(int(request.POST['date'])) note.commentaire = request.POST['comment'] nbNotesColleur = Note.objects.filter(date_colle=note.date_colle, colleur=note.colleur, heure=note.heure) if note.pk: nbNotesColleur = nbNotesColleur.exclude(pk=note.pk) nbNotesColleur = nbNotesColleur.count() if nbNotesColleur >= 3: return HttpResponse("Vous avez plus de 3 notes sur ce créneau") nbNotesEleve = Note.objects.filter(semaine=note.semaine, matiere=note.matiere, colleur=user.colleur, eleve=note.eleve).count() if nbNotesEleve != 0 and note.eleve is not None and not note.pk: return HttpResponse( 'Vous avez déjà collé cet élève dans cette matière cette semaine') note.save() try: program = Programme.objects.get(classe=note.classe, semaine=note.semaine, matiere=note.matiere).titre except Exception: program = "" date_colle = int( datetime.combine(note.date_colle, time(note.heure // 60, note.heure % 60)).replace(tzinfo=timezone.utc).timestamp()) return HttpResponse( json.dumps({ 'pk': note.pk, 'program': program, 'date': date_colle }, default=date_serial))
def adddraftgrades(request): """ajoute les brouillons de notes dans la base de donnée en insérant / mettant à jour""" user = request.user if not checkcolleur(user): return HttpResponseForbidden("not authenticated") if request.method != 'POST' or 'draftCount' not in request.POST: raise Http404 listeNotesRow = [] # rowid des brouillons sucessifs listeNotesId = [] # id des brouillons une fois sauvegardés (si ils le sont, sinon 0) try: nbNotes = int(request.POST['draftCount']) for i in range(nbNotes): rowid = int(request.POST['row{}'.format(i)]) listeNotesRow.append(rowid) draft_id = int(request.POST['draft{}'.format(i)]) if draft_id in listeNotesId: # si on a déjà enregistré un brouillon pour cette note, on n'enregistre pas le suivant listeNotesId.append(0) else: # sinon on essaie d'enregistrer la note if draft_id != 0: try: note = Note.objects.get(pk=draft_id) except DoesNotExist: note = Note() else: note = Note() try: note.semaine = Semaine.objects.get(numero = int(request.POST['week{}'.format(i)])) note.matiere = Matiere.objects.get(pk = int(request.POST['subject{}'.format(i)])) note.classe = Classe.objects.get(pk = int(request.POST['classe{}'.format(i)])) note.jour = int(request.POST['day{}'.format(i)]) note.heure = int(request.POST['hour{}'.format(i)]) note.note = int(request.POST['grade{}'.format(i)]) note.rattrapee = False if request.POST['catchup{}'.format(i)] == "false" else True eleve_id = int(request.POST['student{}'.format(i)]) note.eleve = None if eleve_id == 0 else Eleve.objects.get(pk = eleve_id) date_colle = int(request.POST['date{}'.format(i)]) except Exception: listeNotesId.append(0) continue note.colleur = user.colleur if note.classe not in user.colleur.classes.all() or note.matiere not in user.colleur.matieres.all(): listeNotesId.append(0) continue if not note.rattrapee: note.date_colle = note.semaine.lundi + timedelta(days = note.jour) else: note.date_colle = datetime.utcfromtimestamp(date_colle) nbNotesColleur=Note.objects.filter(date_colle=note.date_colle,colleur=note.colleur,heure=note.heure) if note.pk: nbNotesColleur = nbNotesColleur.exclude(pk=note.pk) nbNotesColleur = nbNotesColleur.count() if nbNotesColleur >= 3: listeNotesId.append(0) continue nbNotesEleve=Note.objects.filter(semaine=note.semaine,matiere=note.matiere,colleur=user.colleur,eleve=note.eleve).count() if nbNotesEleve !=0 and note.eleve is not None and not note.pk: listeNotesId.append(0) continue try: note.commentaire = request.POST['comment{}'.format(i)] except Exception: listeNotesId.append(0) continue note.save() listeNotesId.append(note.pk) except Exception : raise Http404 return HttpResponse(json.dumps([listeNotesRow,listeNotesId]))
def addgroupgrades(request): """ajoute les notes d'un groupe dans la base de donnée""" user = request.user if not checkcolleur(user): return HttpResponseForbidden("not authenticated") if request.method != 'POST' or 'week' not in request.POST or 'day' not in request.POST or 'hour' not in request.POST \ or 'catchup' not in request.POST or 'date' not in request.POST or 'grade1' not in request.POST \ or 'comment1' not in request.POST or 'grade2' not in request.POST or 'grade3' not in request.POST or 'subject' not in request.POST\ or 'comment2' not in request.POST or 'comment3' not in request.POST or 'classe' not in request.POST\ or 'student1' not in request.POST or 'student2' not in request.POST or 'student3' not in request.POST: raise Http404 note1, note2, note3 = Note(), Note(), Note() note1.semaine = note2.semaine = note3.semaine = get_object_or_404(Semaine, numero = int(request.POST['week'])) note1.matiere = note2.matiere = note3.matiere = get_object_or_404(Matiere, pk = int(request.POST['subject'])) note1.classe = note2.classe = note3.classe = get_object_or_404(Classe, pk = int(request.POST['classe'])) if note1.classe not in user.colleur.classes.all(): return HttpResponse("vous ne collez pas dans cette classe") if note1.matiere not in user.colleur.matieres.all(): return HttpResponse("vous ne collez pas dans cette matière") note1.jour = note2.jour = note3.jour = int(request.POST['day']) note1.heure = note2.heure = note3.heure = int(request.POST['hour']) note1.colleur = note2.colleur = note3.colleur = user.colleur note1.rattrapee = note2.rattrapee = note3.rattrapee = False if request.POST['catchup'] == "false" else True if not note1.rattrapee: note1.date_colle = note2.date_colle = note3.date_colle = note1.semaine.lundi + timedelta(days = note1.jour) else: note1.date_colle = note2.date_colle = note3.date_colle = datetime.utcfromtimestamp(int(request.POST['date'])) note1.note = int(request.POST['grade1']) note2.note = int(request.POST['grade2']) note3.note = int(request.POST['grade3']) note1.eleve = None if request.POST['student1'] == "0" else get_object_or_404(Eleve, pk=request.POST['student1']) note2.eleve = None if request.POST['student2'] == "0" else get_object_or_404(Eleve, pk=request.POST['student2']) note3.eleve = None if request.POST['student3'] == "0" else get_object_or_404(Eleve, pk=request.POST['student3']) if note1.eleve is None and note1.note != -1: note1.note = 21 if note2.eleve is None and note2.note != -1: note2.note = 21 if note3.eleve is None and note3.note != -1: note3.note = 21 nbNotesColleur=Note.objects.filter(date_colle=note1.date_colle,colleur=note1.colleur,heure=note1.heure).count() if nbNotesColleur >= 1: return HttpResponse("Vous avez déjà des notes sur ce créneau") if note1.note != -1: nbNotesEleve1=Note.objects.filter(semaine=note1.semaine,matiere=note1.matiere,colleur=user.colleur,eleve=note1.eleve).count() if nbNotesEleve1 !=0 and note1.eleve is not None: return HttpResponse("Vous avez déjà collé {} dans cette matière cette semaine".format(note1.eleve)) if note2.note != -1: nbNotesEleve2=Note.objects.filter(semaine=note2.semaine,matiere=note2.matiere,colleur=user.colleur,eleve=note2.eleve).count() if nbNotesEleve2 !=0 and note2.eleve is not None: return HttpResponse("Vous avez déjà collé {} dans cette matière cette semaine".format(note2.eleve)) if note3.note != -1: nbNotesEleve3=Note.objects.filter(semaine=note3.semaine,matiere=note3.matiere,colleur=user.colleur,eleve=note3.eleve).count() if nbNotesEleve3 !=0 and note3.eleve is not None: return HttpResponse("Vous avez déjà collé {} dans cette matière cette semaine".format(note3.eleve)) if note1.note != -1: note1.commentaire = request.POST['comment1'] note1.save() if note2.note != -1: note2.commentaire = request.POST['comment2'] note2.save() if note3.note != -1: note3.commentaire = request.POST['comment3'] note3.save() try: program = Programme.objects.get(classe = note1.classe, semaine = note1.semaine, matiere = note1.matiere).titre except Exception: program = "" date_colle = int(datetime.combine(note1.date_colle, time(note1.heure // 4, 15 * (note1.heure % 4))).replace(tzinfo=timezone.utc).timestamp()) return HttpResponse(json.dumps({'pk1': note1.pk, 'pk2': note2.pk, 'pk3': note3.pk, 'program': program, 'date': date_colle}, default=date_serial))
def addsinglegrade(request): """ajoute une note dans la base de donnée""" user = request.user if not checkcolleur(user): return HttpResponseForbidden("not authenticated") if request.method != 'POST' or 'week' not in request.POST or 'day' not in request.POST or 'hour' not in request.POST \ or 'student' not in request.POST or 'catchup' not in request.POST or 'date' not in request.POST or 'grade' not in request.POST \ or 'comment' not in request.POST or 'subject' not in request.POST or 'classe' not in request.POST or 'pk' not in request.POST \ or 'draft_id' not in request.POST: raise Http404 if request.POST['pk'] != "0": note = get_object_or_404(Note, pk=int(request.POST['pk'])) elif request.POST['draft_id'] != "0": try: note = Note.objects.get(pk=int(request.POST['draft_id'])) except Exception: note = Note() else: note = Note() note.semaine = get_object_or_404(Semaine, numero = int(request.POST['week'])) note.matiere = get_object_or_404(Matiere, pk = int(request.POST['subject'])) note.classe = get_object_or_404(Classe, pk = int(request.POST['classe'])) if note.classe not in user.colleur.classes.all(): return HttpResponse("vous ne collez pas dans cette classe") if note.matiere not in user.colleur.matieres.all(): return HttpResponse("vous ne collez pas dans cette matière") note.jour = int(request.POST['day']) note.heure = int(request.POST['hour']) note.colleur = user.colleur note.note = request.POST['grade'] if request.POST['student'] == "0": note.eleve = None note.note = 21 else: note.eleve = get_object_or_404(Eleve, pk=request.POST['student']) note.rattrapee = False if request.POST['catchup'] == "false" else True if not note.rattrapee: note.date_colle = note.semaine.lundi + timedelta(days = note.jour) else: note.date_colle = datetime.utcfromtimestamp(int(request.POST['date'])) note.commentaire = request.POST['comment'] nbNotesColleur=Note.objects.filter(date_colle=note.date_colle,colleur=note.colleur,heure=note.heure) if note.pk: nbNotesColleur = nbNotesColleur.exclude(pk=note.pk) nbNotesColleur = nbNotesColleur.count() if nbNotesColleur >= 3: return HttpResponse("Vous avez plus de 3 notes sur ce créneau") nbNotesEleve=Note.objects.filter(semaine=note.semaine,matiere=note.matiere,colleur=user.colleur,eleve=note.eleve).count() if nbNotesEleve !=0 and note.eleve is not None and not note.pk: return HttpResponse('Vous avez déjà collé cet élève dans cette matière cette semaine') note.save() try: program = Programme.objects.get(classe = note.classe, semaine = note.semaine, matiere = note.matiere).titre except Exception: program = "" date_colle = int(datetime.combine(note.date_colle, time(note.heure // 4, 15 * (note.heure % 4))).replace(tzinfo=timezone.utc).timestamp()) return HttpResponse(json.dumps({'pk': note.pk, 'program': program, 'date': date_colle}, default=date_serial))