Esempio n. 1
0
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})
Esempio n. 2
0
 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
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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]))
Esempio n. 6
0
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))
Esempio n. 7
0
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))
Esempio n. 8
0
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]))
Esempio n. 9
0
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))
Esempio n. 10
0
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))