o
    Dj
                    @   s  d dl mZmZmZ d dlmZmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN d dlOmPZP d dlQmRZR d dlSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ d d	l[m\Z\ d d
l]m^Z^ d dl_m`Z`maZambZbmcZc d dldmeZe d dlfmgZgmhZhmiZimjZjmkZk d dllZld dlmZmd dlnZnd dlompZp d dlqmrZrmsZsmtZt d dlumvZv dZwdd Zxdd Zydd Zzdd Z{dd Z|dd Z}dd d!Z~d"d# ZeRexd$d%d&d' ZeRexd$d%d(d) ZeRexd$d%d*d+ ZeRexd$d%d,d- ZeRexd$d%dd.d/ZeRexd$d%d0d1 ZeRexd$d%d2d3 ZeRexd$d%d4d5 ZeRexd$d%d6d7 ZeRexd$d%d8d9 ZeRexd$d%d:d; ZeRexd$d%d<d= ZeRexd$d%d>d? ZeRexd$d%d@dA ZeRexd$d%dBdC ZeRexd$d%dDdE ZeRexd$d%dFdG ZeRexd$d%dHdI ZeRexd$d%dJdK ZeRexd$d%dLdM ZeRexd$d%dNdO ZeRexd$d%dPdQ ZeRexd$d%ddRdSZeRexd$d%dTdU ZeRexd$d%dVdW ZeRexd$d%dXdY ZeRexd$d%dZd[ ZeRexd$d%d\d] ZeRexd$d%d^d_ ZeRexd$d%d`da ZeRexd$d%dbdc ZeRexd$d%ddde ZeRexd$d%dfdg ZeRexd$d%dhdi ZeRexd$d%djdk ZeRexd$d%dldm ZeRexd$d%dndo ZeRexd$d%dpdq ZeRexd$d%drds ZeRexd$d%dtdu ZeRexd$d%dvdw ZeRexd$d%dxdy ZeRexd$d%dzd{ ZeRezd$d%d|d} ZeRezd$d%d~d ZeRezd$d%dd ZeReyd$d%dd ZeReyd$d%dd ZeReyd$d%dd ZeRezd$d%dddZeRezd$d%dd ZeRezd$d%dd ZeRezd$d%dd ZeRezd$d%dd ZeRezd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d% dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%dd ZeRexd$d%ddÄ ZdS )    )renderredirectget_object_or_404)authenticatelogin)ColleurConnexionFormProgrammeFormSemaineForm	EleveFormMatiereECTSFormSelectEleveFormNoteEleveFormNoteGlobaleEleveFormNoteEleveFormSetNoteGlobaleEleveFormSetECTSFormSelectEleveNoteFormNoteElevesHeadFormNoteElevesTailFormNoteElevesFormset
DevoirForm	CopieForm
CopiesFormTDForm	CoursFormDocumentFormPlancheFormMultiPlancheFormSelectPlancheFormPlancheProfForm)ConfigColleurMatiereProfClasseNoteEleveSemaine	ProgrammeGroupeCreneauColleMatiereECTSNoteECTSNoteGlobaleECTSDevoirDevoirCorrigeDevoirRendu	RamassageDecompteTDCoursDocumentPlanche)mixtegroupemixtegroupesupprmixtegroupemodifmixtecolloscopemixtecolloscopemodifmixtecreneauduplimixtecreneausupprmixteajaxcompatmixteajaxcolloscopemixteajaxcolloscopeelevemixteajaxmajcolleurmixteajaxcolloscopeeffacermixteajaxcolloscopemultimixteajaxcolloscopemulticonfirmmixteRamassagePdfParColleurmixteCSVmixtegroupeSwapmixtegroupeCreermixtegroupecsvmixteColloscopeImport)messages)user_passes_test)AvgMinMaxStdDevSumCountF)Lower)date)Http404HttpResponseHttpResponseForbiddenFileResponse)formset_factory)PdfcreditsectsattestationectstrombinoscopePdfpublipostageN)ZipFile)
MEDIA_ROOT	MEDIA_URLIMAGEMAGICK)BytesIO   c                 C   s   | j r| jrt| jS dS )uM   Renvoie True si l'utilisateur est authentifié et est un colleur, False sinonF)is_authenticated	is_activeboolcolleuruser rm   '/home/reyt/e-colle-new/colleur/views.py
is_colleur   s   
ro   c                 C   s   t otj jS )ua   Renvoie True si l'utilisateur est authentifié et est un colleur et ECTS est activé, False sinon)ro   r    objects
get_configectsrk   rm   rm   rn   is_colleur_ects   s   rs   c                 C   s   t | otj jt@ dkS )u   Renvoie True si l'utilisateur est authentifié et est un colleur et ECTS est activé et si les professeurs principaux ont le droit de modifier les matières ECTS, False sinonr   )rs   r    rp   rq   
ects_modifPROFrk   rm   rm   rn   is_colleur_modif_ects!   s   rv   c                 C   s6   |dkrt jj|| jd S t jj||| jd S )u   Renvoie True si l'utilisateur est un prof de la classe classe et dans la matière matière et eut modifier les matières/coefficients ECTS, False sinonN)classerj   )rw   matiererj   )r#   rp   filterrj   exists)rl   rx   rw   rm   rm   rn   is_prof%   s   r{   c                 C   *   t j jo|j| kp| tjj|ddv S )zbRenvoie True si colleur a les drois en modification des groupes dans la classe classe, False sinonT)colleurprof__classecolleurprof__modifgroupe)r    rp   rq   modif_prof_groupeprofprincipalr!   ry   rj   rw   rm   rm   rn   modifgroupe,      *r   c                 C   r|   )zdRenvoie True si colleur a les drois en modification du colloscope dans la classe classe, False sinonT)r}   colleurprof__modifcolloscope)r    rp   rq   modif_prof_colr   r!   ry   r   rm   rm   rn   modifcolloscope0   r   r   Fc                 C   s    |r|j | jkS t| jj S )zNRenvoie True si user est professeur principal de la classe classe, False sinon)r   rj   ri   classeprofprincipalall)rl   rw   rm   rm   rn   is_profprincipal4   s   r   c                 C   s   t | jr	tdS d}t| jpd}| rIt|jd |jd d}|durG|jrG|j	rG|j	j
 rGt| | |j	j
 d j| jd< tdS d	}t| d
||dS )u   Renvoie la vue de la page de connexion des colleurs. Si le colleur est déjà connecté, redirige vers la page d'accueil des colleursaction_colleurFNusernamepassword)r   r   r   rx   Tzcolleur/home.html)formerror)ro   rl   r   r   POSTis_validr   cleaned_datarh   rj   matieresr   r   pksessionr   )requestr   r   rl   rm   rm   rn   connec;   s   
 
r   accueil)	login_urlc                 C   s8   t t|| jjd}|j| jd< d| jv r| jd= tdS )u{   La matière courante du colleur devient la matière dont l'id est id_mat, puis redirige vers la page d'accueil des colleursr   rj   rx   rj   r   )r   r"   rl   rj   r   r   r   )r   id_matrx   rm   rm   rn   	changematK   s
   
r   c                 C   s
   t | dS )z0Renvoie la vue de la page d'accueil des colleurszcolleur/action.html)r   )r   rm   rm   rn   actionT   s   
r   c              	   C   sf   t t|d}| jj}t t| jd |d}||j vs"|j|	 vr$t
t| d|tj|||dS )uZ   Renvoie la vue de la page avec le récapitulaitf des notes données + des liens pour noterr   rx   r   zcolleur/note.html)rw   notes)r   r$   rl   rj   r"   r   classesr   r   
matierespkrW   r   r%   rp   
listeNotes)r   	id_classerw   rj   rx   rm   rm   rn   noteY   s   r   c                 C   s   t t|d}t|}| jj}t t| jd |d}||j vs&|j	|
 vr(tt||| jp/d}| rFtd|ddd |jd	 D S t| d
|||dS )ut   Renvoie la vue de sélection du ou des élèves à coller en fonction de groupe / élève et de l'éventuel semestrer   rx   r   Nnoteeleves_colleur-c                 S   s   g | ]}t tt|d qS )r   )strmaxint.0eleverm   rm   rn   
<listcomp>n   s    znotation.<locals>.<listcomp>r   zcolleur/notation.html)r   rw   groupeeleve)r   r$   r   rl   rj   r"   r   r   r   r   r   rW   r   r   r   r   joinr   r   )r   r   r   rw   rj   rx   r   rm   rm   rn   notationc   s   "r   c                 C   s  t t| jd | jjd}t t||d}|| jjj vrtdd |	dD }|
d}tjj||d}|
 | }	t|| jj|| jpEd |d	}
|	d
kru|d uru|jruttdd
td}||
t|d g|  | jpjd |j|jdgd}n_|d u rt }d| jv r| jd |d< d| jv r| jd |d< d| jv r| jd |d< ||
_tt|	dtd}||
t|d g|  | jpd }ntt|	dtd}||
t|d g|  | jpd }| jdkr| r|  |
jd j| jd< |
jd | jd< |
jd | jd< td|S t| d|
||j|dS )Nrx   r   r   r   c                 S      g | ]}t |qS rm   r   r   xrm   rm   rn   r   x       znoteEleves.<locals>.<listcomp>r   r   pk__inrw   instancerf   extramax_numformset)r   commentaireinitialsemainejourheure   r   note_colleurzcolleur/noteEleves.html)r   r   rw   rx   ) r   r"   r   rl   rj   r$   r   r   rW   splitcountr&   rp   ry   r   r   r   r[   r   r   listr   r   dictr   methodr   saver   r   r   nom)r   r   
eleves_str	noteCollerx   rw   ids	nbFictifselevestotalr   NoteElevesformsetr   r   rm   rm   rn   
noteElevesr   sB   
2


" 

r   c                 C   s   t t|d}| jj}|j|krt| d tdS |jj| j	d kr,t| d tdS |j
| jjj vr@t| d tdS t| |j
j|jdu rNd|S t|jj|S )	zIRenvoie la vue de la page de modifcation de la note dont l'id est id_noter   *   Vous n'êtes pas le colleur de cette coller   rx      Ce n'est pas la bonne matièrezCe n'est pas la bonne classeN0)r   r%   rl   rj   rL   r   r   rx   r   r   rw   r   r   r   r   r   )r   id_noter   rj   rm   rm   rn   	noteModif   s   
,r   c                 C   sj   t t|d}|j| jjkrt| d tdS |jj| j	d kr*t| d tdS |
  td|jjS )zaEssaie de supprimer la note dont l'id est id_note puis redirige vers la page de gestion des notesr   r   r   rx   r   r   )r   r%   rj   rl   rL   r   r   rx   r   r   deleterw   )r   r   r   rm   rm   rn   	noteSuppr   s   r   c                 C   s   t |S N)r_   )r   r   rm   rm   rn   trombinoscope   s   r   c                 C   sd   t j }z|d }W n	 ty   tw z
|| d  }W n	 ty(   tw td||j|jS )uM   Renvoie la vue de la page des résultats de la classe dont l'id est id_classer   rf   resultat2_colleur)r'   rp   r   	ExceptionrW   r   r   r   )r   r   semainesseminsemaxrm   rm   rn   resultat   s   
r   c                    sR  t t|d}t t|d}t t|d}|| jjj vrtt| j	p"d||dd}|
 r<td||jd j|jd jS t t| jd d}tj||||}	tj||||}
t|	}t| j||}|rtjj|||j|jfd	jd
dd ddjtdtdtdt ddnd |rtjj|||j|jfd	dddddjt!ddj|j"t#d dnd}|rtjj|||j|jfd	jd
dj$tdtdtdt ddnd}|rtjj|||j|jfd	j$t!ddd |j" nd} durdd  D   fdd|D  t%| ddd|
  |||||	||||r" nd||dS )u   Renvoie la vue de la page des résultats de la classe dont l'id est id_classe, entre les semaine dont l'id est id_semin et id_semaxr   Nr   r   r   r   r   r   rx   )rw   rx   semaine__lundi__range   note__gtrj   colleur__user__last_namecolleur__user__first_namer   )moyminimummaximum	ecarttypeFr   )nbr   )heuresc              
   S   s:   i | ]}|d  d |d |d |d d |d fqS )rj   z{:.1f}r   r   r   r   )formatr   rm   rm   rn   
<dictcomp>   s   : zresultat2.<locals>.<dictcomp>c                    sB   g | ]}|d  |d f|d  vrdn |d   |d f qS )r   r   rj   )r   r   r   r   r   rm   r   stat_colleursrm   rn   r      s   B zresultat2.<locals>.<listcomp>zcolleur/resultat.htmli  )   )largeurr   rw   r   rx   r   isprofr   r   statsstat_globalheures_global)&r   r$   r'   rl   rj   r   r   rW   r	   r   r   r   r   r   r"   r   r%   rp   classe2resultat
nbSemainesnextr{   ry   lundiexcludevaluesdistinctorder_byannotaterN   rO   rP   rQ   rS   tempsrT   	aggregater   )r   r   id_seminid_semaxrw   r   r   r   rx   
generateurr   r   r   heures_colleursr   r   rm   r   rn   	resultat2   s*   ZRH8
8r
  c                    s"  t t|d}|| jjj vrtt t|d}t t|d}t t| j	d d}t
j||||}t|}	tdd}
d|j|j|j|j|
d< t|
}|g ddd	 |	D   d
d tdD  d d< d d< |D ]"}||d jj|d jj|d |d g fdd	|d D   ql|
S )u   Renvoie le fichier csv des résultats de la classe dont l'id est id_classe, entre les semaine dont l'id est id_semin et id_semaxr   rx   ztext/csv)content_typez2attachment; filename="resultats_{}_{}_s{}-s{}.csv"zContent-Disposition)Nomu   Prénomrangmoyennec                 S   s   g | ]}d  |jqS )zS{})r   numero)r   r   rm   rm   rn   r          zresultatcsv.<locals>.<listcomp>c                 S   s   i | ]}|t |qS rm   )r   r   irm   rm   rn   r          zresultatcsv.<locals>.<dictcomp>   zn.n.abs   r   r  r  c                    s$   g | ]}d   fdd|D qS )|c                    s   g | ]} |d   qS )r   rm   )r   r   r   rm   rn   r      r  z*resultatcsv.<locals>.<listcomp>.<listcomp>)r   )r   valuer  rm   rn   r      s   $ r   )r   r$   rl   rj   r   r   rW   r'   r"   r   r%   rp   r   r   rX   r   r   r  csvwriterwriterowrange	last_name
first_name)r   r   r  r  rw   r   r   rx   r  r   responser  r   rm   r  rn   resultatcsv   s$   

Br!  c           	   
   C   s   t t|d}| jj}t t| jd |d}|| jjj vs$|j|	 vr&t
tjj||ddjtddd}d	}t| j||rid
}t||d}t||| jpRd| jpVd|d}| rh|  td|jS nd	}t| d|||||tdS )zXRenvoie la vue de la page de gestion des programmes de la classe dont l'id est id_classer   rx   r   rw   rx   r   semaine__numero)smaxz-smaxFT)rx   rw   Nr   programme_colleurzcolleur/programme.html)
programmesrw   rx   r   r   jpeg)r   r$   rl   rj   r"   r   r   r   r   r   rW   r(   rp   ry   prefetch_relatedr  rP   r  r{   r   r   FILESr   r   r   r   rd   )	r   r   rw   rj   rx   r&  r   	programmer   rm   rm   rn   r*     s"    (r*  c                 C   8   t t|d}t| j|j|jst|  td|jj	S )zmEssaie de supprimer le programme dont l'id est id_classe puis redirige vers la page de gestion des programmesr   r%  )
r   r(   r{   rl   rx   rw   rW   r   r   r   )r   id_programmer*  rm   rm   rn   programmeSuppr
  
   r-  c                 C   s   t t|d}t| j|j|jstt|j|j| jpd| j	pd|d}|j
r.tjt|j
jnd}| rd| j	rY|rYtj|rDt| |dddd}tj|rYt| |  td	|jjS t| d
||dS )zQRenvoie la vue de la page de modification du programme dont l'id est id_programmer   Nr   Fr*  imagepdfjpgr%  zcolleur/programmeModif.html)r*  r   )r   r(   r{   rl   rx   rw   rW   r   r   r)  fichierospathr   rb   namer   isfileremovereplacer   r   r   r   )r   r,  r*  r   oldfilenomimagerm   rm   rn   programmeModif  s   "


r;  c                 C   sB   t t|d}t| jj|stdS tjj|d	d}t
| ||S )zURenvoie la vue de la page de gestion des groupes de la classe dont l'id est id_classer      Accès non autorisérw   groupeeleve__user)r   r$   r   rl   rj   rY   r)   rp   ry   r(  r8   )r   r   rw   groupesrm   rm   rn   groupe&  s
   r@  c                 C   ,   t t|d}t| jj|stdS t| |S )uW   Renvoie la vue de la page de création d'un groupe de la classe dont l'id est id_classer   r<  )r   r$   r   rl   rj   rY   rI   r   r   rw   rm   rm   rn   groupeCreer/     
rC  c                 C   .   t t|d}t| jj|jstdS t| |S )zhEssaie de supprimer la groupe dont l'id est id_groupe, puis redirige vers la page de gestion des groupesr   r<  )r   r)   r   rl   rj   rw   rY   r9   r   	id_grouper@  rm   rm   rn   groupeSuppr7     
rH  c                 C   rE  )zKRenvoie la vue de la page de modification du groupe dont l'id est id_grouper   r<  )r   r)   r   rl   rj   rw   rY   r:   rF  rm   rm   rn   groupeModif?  rI  rJ  c                 C   rA  u   change pour la classe dont l'id est id_classe la propriété de groupes différents ou égaux chaque semestres et renvoie la page des groupesr   r<  )r   r$   r   rl   rj   rY   rH   rB  rm   rm   rn   
groupeSwapG  rD  rL  c                 C   rA  rK  )r   r$   r   rl   rj   rY   rJ   rB  rm   rm   rn   	groupecsvO  rD  rM  c                 C   sp   t tj }z|d |d }}W n	 ty   tw |dkr.d| jv r.| jd du r.d}t| |||j|jS )zWRenvoie la vue de la page de gestion du colloscope de la classe dont l'id est id_classer   r   	transposeT1)	r   r'   rp   r   r   rW   r   colloscope2r   )r   rO  r   r   r   r   rm   rm   rn   
colloscopeW  s    rR  c           	      C   s^   t t|d}t t|d}t t|d}t| jj|}|| jjj vr$tt	| ||||t
|S )zRenvoie la vue de la page de gestion du colloscope de la classe dont l'id est id_classe,
    dont les semaines sont entre la semaine d'id id_semin et celle d'id id_semaxr   )r   r$   r'   r   rl   rj   r   r   rW   r;   r   )	r   rO  r   r  r  rw   r   r   r   rm   rm   rn   rQ  d  s   rQ  c                 C   sJ   t t|d}t t|d}t t|d}t| jj|stdS t| ||||S )zRenvoie la vue de la page de modification du colloscope de la classe dont l'id est id_classe,
    dont les semaines sont entre la semaine d'id id_semin et celle d'id id_semaxr   r<  )r   r$   r'   r   rl   rj   rY   r<   )r   r   r  r  creneaumodifrw   r   r   rm   rm   rn   colloscopeModifp  s   rT  c                 C   rA  )zVRenvoie la vue de la page d'import' du colloscope de la classe dont l'id est id_classer   r<  )r   r$   r   rl   rj   rY   rK   rB  rm   rm   rn   colloscopeImport{  rD  rU  c                 C   s2   t t|d}t| jj|jstdS t| |||S )u   Essaie de supprimer le créneau dont l'id est id_creneau puis redirige vers la page de modification du colloscope
    dont les semaines sont entre la semaine d'id id_semin et celle d'id id_semaxr   r<  )r   r*   r   rl   rj   rw   rY   r>   r   
id_creneaur  r  creneaurm   rm   rn   creneauSuppr  s   rY  c                 C   s:   t t|d}t| jj|jstdS t| |jj|||dS )zMRenvoie la vue de la page de modification du creneau dont l'id est id_creneaur   r<  )rS  )	r   r*   r   rl   rj   rw   rY   rT  r   rV  rm   rm   rn   creneauModif  s   rZ  c                 C   s4   t t|d}t| jj|jstdS t| j|||S )zLRenvoie la vue de la page de duplication du creneau dont l'id est id_creneaur   r<  )r   r*   r   rl   rj   rw   rY   r=   rV  rm   rm   rn   creneauDupli  s   r[  c                 C   s   t t|d}t|S )uy   Renvoie une chaîne de caractères récapitulant les incompatibilités du colloscope de la classe dont l'id est id_classer   )r   r$   r?   rB  rm   rm   rn   
ajaxcompat  s   r\  c                 C   s8   t t|d}t t|d}t| jj|stdS t||S )u}   Renvoie la liste des colleurs de la classe dont l'id est id_classe et de la matière dont l'id est id_matiere, au format jsonr   r<  )r   r$   r"   r   rl   rj   rY   rB   )r   
id_matierer   rw   rx   rm   rm   rn   ajaxmajcolleur  s
   
r^  c                 C   s   t t|d}t t|d}t t|d}t t|d}	t t|d}
t| jj|
j	r5||j
 vs5||
j	j
 vr9tdS t||||	|
S )u   Ajoute la colle propre au quintuplet (matière,colleur,groupe,semaine,créneau) et renvoie le username du colleur
    en effaçant au préalable toute colle déjà existante sur ce couple créneau/semainer   r  r<  )r   r"   r!   r)   r'   r*   r   rl   rj   rw   r   r   rY   r@   )r   r]  
id_colleurrG  numero_semainerW  rx   rj   r@  r   rX  rm   rm   rn   ajaxcolloscope  s   .rb  c                 C   sx   t t|d}t t|d}t t|d}	t t|d}
t| jj|
jr/||j	
 vs/||
jj	
 vr3tdS t||||	|
|S )u   Ajoute la colle propre au quintuplet (matière,colleur,eleve,semaine,créneau) et renvoie le login du colleur
    en effaçant au préalable toute colle déjà existante sur ce couple créneau/semainer   r_  r<  )r   r"   r!   r'   r*   r   rl   rj   rw   r   r   rY   rA   )r   r]  r`  id_elevera  rW  r   rx   rj   r   rX  rm   rm   rn   ajaxcolloscopeeleve  s   .rd  c                 C   s:   t t|d}t t|d}t| jj|jstdS t||S )u   Efface la colle sur le créneau dont l'id est id_creneau et la semaine dont le numéro est numero_semaine
    puis renvoie la chaine de caractères "efface" r_  r   r<  )	r   r'   r*   r   rl   rj   rw   rY   rC   )r   ra  rW  r   rX  rm   rm   rn   ajaxcolloscopeeffacer  s
   
re  c
              
   C      |dkrt t|d}
t t|d}nd}
d}t t|d}t t|d}t| jj|jr<|
dkr@|
|j	
 vs<|
|jj	
 vr@tdS t|
||||||||		S )uE  Compte le nombre de colles présente sur les couples créneau/semaine sur le créneau dont l'id est id_creneau
    et les semaines dont le numéro est compris entre celui de la semaine d'id id_semaine et ce dernier + duree
    et dont le numéro est congru à celui de la semaine d'id id_semaine modulo frequence
    S'il n'y en a aucune, ajoute les colles sur les couples créneau/semaine précédents, avec le colleur dont l'id est id_colleur
    le groupe démarre au groupe dont l'id est id_groupe puis va de permutation en permutation, et la matière dont l'id est id_matière-1r   rN  r   r_  r<  )r   r"   r!   r'   r*   r   rl   rj   rw   r   r   rY   rD   r   r]  r`  rG  rc  ra  rW  duree	frequencepermutationrx   rj   r   rX  rm   rm   rn   ajaxcolloscopemulti  s   6rl  c
              
   C   rf  )u  ajoute les colles sur les couples créneau/semaine sur le créneau dont l'id est id_creneau
    et les semaines dont le numéro est compris entre celui de la semaine d'id id_semaine et ce dernier + duree
    et dont le numéro est congru à celui de la semaine d'id id_semaine modulo frequence, avec le colleur dont l'id est id_colleur
    le groupe démarre au groupe dont l'id est id_groupe puis va de permutation en permutation, et la matière dont l'id est id_matièrerg  r   rN  r   r_  r<  )r   r"   r!   r'   r*   r   rl   rj   rw   r   r   rY   rE   rh  rm   rm   rn   ajaxcolloscopemulticonfirm  s   6rm  c                 C   s,   t  }tj| jj}t| d|t|dS )z%Renvoie la vue de la page de l'agendazcolleur/agenda.html)colles	media_urlr   )	rV   todayr+   rp   agendarl   rj   r   rc   )r   r   rn  rm   rm   rn   rq    s   rq  c                 C   s^  t tjj|d| jj| jjj d}|st	dd |D }|d }|d j
j| jd< tj j}|jj}|jj}|jrJ||krJtjj|d}ntjj|d}|jri||kri|j
|j|jfv ri|j|j
d	}n|d j
jd
kry|j|j
d}n|d j
jdkr|j|j
d}ddd |D dgd|    }	t|j|jj|jjd}
t| |j|	|
S )uu   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,)r   rj   matiere__inc                 S      g | ]}|j qS rm   )r@  )r   collerm   rm   rn   r          zcolleNote.<locals>.<listcomp>r   rx   )groupe2__in)
groupe__in)optionrf   )lv1   )lv2r   c                 S      g | ]}t |jqS rm   r   r   r   rm   rm   rn   r     r  r   r   r   r   r   )r   r+   rp   ry   r   rl   rj   r   r   rW   rx   r   r   r    rq   	semestre2r   r  rX  rw   	semestresr&   option1option2lvr   r   r%   r   r   r   )r   	id_collesrn  r?  ru  r  r   rw   r   r   r   rm   rm   rn   	colleNote  s*   * &r  c                 C   s\   t t|| jj| jjj d}|jj| jd< t	|j
|j|jd}t| |jjjt|jj|S )u|   Récupère la planche dont l'id est id_planche puis redirige vers la page de notation de l'élève sur la planche concernéer   rj   rs  rx   r  )r   r7   rl   rj   r   r   rx   r   r   r%   r   r   r   r   r   rw   r   )r   
id_plancheplancher   rm   rm   rn   plancheNote  s   r  c                 C   sn   t t|| jj| jjj d}|jj| jd< t	|j
|jj|jjd}t| |jjj|js/d|S t|jj|S )uv   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éer  rx   r  r   )r   r+   rl   rj   r   r   rx   r   r   r%   r   rX  r   r   r   rw   r   r   )r   id_colleru  r   rm   rm   rn   colleNoteEleve  s   *r  c                 C   s  | j j}|jjtdddjddd }|j	 }g }t
jjtddd }|d	u r/d
}|D ]}tjj||ddd }g }|D ]d}	g }
|D ]5}|
tjj|||	|j|jdjtddd tjj||||	|jd |j d djtddd f qKtjj|||	djtdd}tjj||||	djtdd}||	|
||f qE||||f |jdd d q1t
jdd}t| d||dS )u1   Renvoie la vue de la page du décompte des collesr   )inomr  T)flatr   )pkmaxr  Nr   )rj   matiere__nom__iexact
date_collemonth)rj   r  rw   date_colle__monthdate_colle__yearmatiere__temps)r  r     rf   )	ramassagerj   r  rw   mois)rj   r  rw   )r  rj   r  rw   c                 S   s   | d S )Nr   rm   )r   rm   rm   rn   <lambda>:  s    zdecompte.<locals>.<lambda>)keymoisFinzcolleur/decompte.html)listematieres
ramassages)rl   rj   r   r  rU   r  values_listr  r   r   r2   rp   r  rP   r%   ry   datesappendr  yearrR   r3   sortr   r   )r   rj   r   r   r  lastpkramassagerx   	listemoislisteclassesrw   nbcollesr  r   totalramassager  rm   rm   rn   decompte$  s.   &
,4 r  c                 C   s    t t|d}t|dd| jjdS )Nr   Frj   )r   r2   rF   rl   rj   )r   id_ramassager  rm   rm   rn   r  >  s   r  c                 C   sF   t t|d}t t|d}t t|d}|| jjj vrtt|||S )zwRenvoie le fichier PDF du colloscope de la classe dont l'id est id_classe, entre les semaines d'id id_semin et id_semaxr   )	r   r$   r'   rl   rj   r   r   rW   r\   r   r   r  r  rw   r   r   rm   rm   rn   colloscopePdfC  s   r  c                 C   sH   t t|d}t t|d}t t|d}|| jjj vrtt| |||S )zwRenvoie le fichier CSV du colloscope de la classe dont l'id est id_classe, entre les semaines d'id id_semin et id_semaxr   )	r   r$   r'   rl   rj   r   r   rW   rG   r  rm   rm   rn   colloscopeCsvM  s   r  c                 C   s  t t|d}t| j|stdS ztjj| jd d}W n t	y'   d}Y nw zt
jj| jd d}t
jj| jd d}W n) t	yg   ztt
j }|d |d }}W n t	yd   d }}Y nw Y nw | jd	krd
| jv rt| j}t|d|id}| r|jd j| jd< |jd j| jd< td|jS n7d| jv rt||dd}t|| j}| r|jd j| jd< td|jS nt|d|id}t||dd}|rj|rj|rjtjj||j|jfddd d}|j d}	g }
|	D ]k}tjj||j|jf|djddjtdd}|d rBtjjddj|d||j|jfddtdj|d d d  d }nd}g }|D ]}tjj|||d d !d!}|"| qH|
"||||f qnd }}
t#| d"||||||
|d#S )$u1   Renvoie la vue de la page de gestion des élèvesr   r<  r   Nr   r   r   rN  r   r   r   eleves_colleureleveselectr   )r   r   r   r#  semaine__lundir   )r   r   rx   r   r   r   )r   r   F)rw   eleve__isnullrx   r   gMbP?)note__avg__gtrf    )r   rx   semaine__pkcolleur__userzcolleur/eleves.html)r   r   r   r   form2matierenoter   )$r   r$   r   rl   rY   r&   rp   getr   r   r'   r   r   r   r   r	   r
   r   r   r   r   r%   ry   r   r   r  r  r   r   r  rN   r  r   select_relatedr  r   )r   r   rw   r   r   r   r   r  r   r   r  rx   r  r  r   r   r   rm   rm   rn   r   W  sn   



*.
Nr   c                 C   s   t t|d}t| j|std|jS tjj|d	d
dd}t|d}t| jp*d|d}tjj||d	
d
d|jd _| rL|  td|jS t| d|||dS )uD   Renvoie la vue de la page de gestion des matières ects de la classer   
ects_notesr=  profsr   	precisionNr   r   r}   user__last_nameuser__first_nameects_matiereszmixte/ectsmatieres.html)rw   matieresECTSr   )r   r$   r   rl   r   r   r,   rp   ry   r(  r  r   r   r!   fieldsquerysetr   r   r   )r   r   rw   r  
newMatierer   rm   rm   rn   ectsmatieres  s   
 r  c                 C   s   t t|d}t| j|jstdS t| jpd|d}tj	j
|j|jddd|jd _| r;|  td	|jjS t| d
||dS )uI   Renvoie la vue de la page de modification des matières ects de la classer   r<  Nr   r  r  r  r  r  zmixte/ectsmatieremodif.html)rx   r   )r   r,   r   rl   rw   rY   r   r   r!   rp   ry   r  r  r  r   r   r   r   r   )r   r]  rx   r   rm   rm   rn   ectsmatieremodif  s   $r  c                 C   sr   t t|d}t| j|jstdS t| j|jstdS z|  W n ty1   t	| d Y nw t
d|jjS )uZ   Supprime la matière ects dont l'id est id_matiere puis renvoie la page des matières ECTSr   r<  u6   Impossible de l'effacer (des élèves y ont des notes)r  )r   r,   r   rl   rw   rY   r   r   rL   r   r   r   )r   r]  rx   rm   rm   rn   ectsmatieresuppr  s   r  c                 C   s  t t|d}t| j|}tjj|| jjddd}|	 s$|s$t
dS td}tj||\}}t|| jp7d}| rd| jv rVtd	|j|jd
dd |jd D S d| jv rntd	|jdd
dd |jd D S d| jv rtd	|jdd
dd |jd D S |D ]}	t|	j| jv rtd|	jd
dd |jd D   S qg }
|D ]}	|
t|	jdut|	jdu  qt| dt| j|jdk||||||||
d
S )z@Renvoie la vue de la page de gestion des notes ects de la classer   )rw   r  r   r  uV   Vous n'êtes pas habilité à attribuer des crédits ECTS aux élèves de cette classeABCDEFNglobalects_noteglobale_modifr   c                 S   r}  rm   r~  r   rm   rm   rn   r     r  zectsnotes.<locals>.<listcomp>r   global2rf   c                 S   r}  rm   r~  r   rm   rm   rn   r     r  global3r   c                 S   r}  rm   r~  r   rm   rm   rn   r     r  ects_notes_modifc                 S   r}  rm   r~  r   rm   rm   rn   r     r  zcolleur/ectsnotes.htmlr{  )
modifannee2nomatpprw   r   r   	listNotesr   nbsemestres)r   r$   r   rl   r,   rp   ry   rj   r  rz   rY   r   r-   r   r   r   r   r   r   anneer   r   r   r  r   	semestre1r  r   rv   )r   r   rw   r  r   r  r  r   r   rx   r  rm   rm   rn   	ectsnotes  s.   
(
&
&($.r  c           	      C   s   t t|| jjd}tjjdd |dD |jd	dd
d}ttd	| td
}| jdkrG|||| j}| rF|  td|jjS ntj||}||||d}dt|jdu t|jdu }t| dt| j|||dS )u   Renvoie la vue de la page de modification des notes ECTS des élèves sélectionnés, dont l'id fait partie de chaine_eleves, dans la matiere dont l"id est id_matiere)r   r  c                 S   r   rm   r   r  rm   rm   rn   r     r   z"ectsnotesmodif.<locals>.<listcomp>r   r   r  r  rl   r   r   r   r  r   rf   Nzcolleur/ectsnotesmodif.html)r  r   rx   r  )r   r,   rl   rj   r&   rp   ry   r   rw   r  r  r[   r   r   r   r   r   r   r   r   r   r-   r   r   r  r  r   rv   )	r   r]  chaine_elevesrx   listeElevesNoteEleveformsetr   r   r  rm   rm   rn   ectsnotesmodif  s   0
 r  c           	      C   s   t t|d}t|}t| j|stdS tjjdd |	dD |d}|dkr.|jdd	}|
d
dd}ttd| td}| jdkr\|||| j}| r[|  td|jS ntj|||}||||d}t| dt| j|||dS )u   Renvoie la vue de la page de modification de la note globale ECTS des élèves sélectionnés, dont l'id fait partie de chaine_eleves, dans la classe indiquée et pour l'année indiquéer   r<  c                 S   r   rm   r   r  rm   rm   rn   r     r   z(ectsnoteglobalemodif.<locals>.<listcomp>r   r   r   T)cuber  r  rl   r   r   r   r  r   z!colleur/ectsnoteglobalemodif.html)r  r   r  rw   )r   r$   r   r   rl   rY   r&   rp   ry   r   r  r  r[   r   r   r   r   r   r   r   r   r   r.   r   r   rv   )	r   r   r  r  rw   r  NoteGlobaleEleveformsetr   r   rm   rm   rn   ectsnoteglobalemodif  s$    
r  c              	   C   s~   t t|d}t| j|stdS tjj|ddd}|d u r't	|| j
p%d }tj|\}}t| d|||||  dS )Nr   r<  r=  r  r  zmixte/ectscredits.html)rw   creditsr   r   nbeleves)r   r$   r   rl   rY   r&   rp   ry   r  r   r   r-   r  r   r   )r   r   r   rw   r   r  r   rm   rm   rn   ectscredits  s    r  c                 C   d   t t|d}t| j|jstdS t|j| j}| jdkr0|	 r(t
|||jS t| |jj|S tNr   r<  r   )r   r&   r   rl   rw   rY   r   r   r   r   r]   r  r   rW   r   rc  r   r   rm   rm   rn   ficheectspdf     
r  c                 C   r  r  )r   r&   r   rl   rw   rY   r   r   r   r   r^   r  r   rW   r  rm   rm   rn   attestationectspdf  r  r  c                 C   \   t t|d}t| j|stdS t|| j}| jdkr,| r%t	|d |S t
| |j|S tr  )r   r$   r   rl   rY   r   r   r   r   r]   r  r   rW   r   r   rw   r   rm   rm   rn   ficheectsclassepdf      
r  c                 C   r  r  )r   r$   r   rl   rY   r   r   r   r   r^   r  r   rW   r  rm   rm   rn   attestationectsclassepdf.  r  r  c                 C   sZ   t t|d}t| j|stdS t|| j}| jdkr+| r$t	||S t
| |j|S tr  )r   r$   r   rl   rY   r   r   r   r   r`   r  r   rW   r  rm   rm   rn   publipostageects<  s   

r  c                 C   s   t t|d}| jj}t t| jd |d}t| j||sttj	j
||ddd}t||d}t||| jp6d| jp:d|d}| rL|  td	|jS t| d
|||dS )ui   renvoie la page des devoirs de la classe dont l'id est id_classe, dans la matière courante du professeurr   rx   r   r"  z-a_rendre_jourz-a_rendre_heureNr   colleur_devoirszcolleur/devoirs.html)rx   r   devoirs)r   r$   rl   rj   r"   r   r{   rW   r/   rp   ry   r  r   r   r)  r   r   r   r   r   )r   r   rw   rj   rx   r  devoirr   rm   rm   rn   r  J  s   r  c                 C   s@   t t|d}t| j|j|jsttj|}t	| d||dS )z\Renvoie la vue de la page du devoir dont l'id est id_devoir, pour consuler/rendre les copiesr   zcolleur/devoir.html)r  copies)
r   r/   r{   rl   rx   rw   rW   rp   devoirsrendusr   )r   	id_devoirr  r  rm   rm   rn   r  Z  s
   r  c                 C     t t|d}t| j|j|jstt|j|j| jpd| j	pd|d}|j
r.tjt|j
jnd}|jr<tjt|jjnd}| r| j	rJd| j	v sQ|jd du r^|r^tj|r^t| | j	rfd| j	v sm|jd du rz|rztj|rzt| |  td|jjS t| d||d	S )
zKRenvoie la vue de la page de modification du devoir dont l'id est id_devoirr   Nr   Fr2  corriger  zcolleur/devoirModif.html)r  r   )r   r/   r{   rl   rx   rw   rW   r   r   r)  r2  r3  r4  r   rb   r5  r  r   r   r6  r7  r   r   r   r   )r   r  r  r   r9  oldfilecorrigerm   rm   rn   devoirModifc      ""
"
r  c                 C   s\   t t|d}t| j|j|jstz|  W n ty&   t	
| d Y nw td|jjS )zgEssaie de supprimer le devoir dont l'id est id_devoir puis redirige vers la page de gestion des devoirsr   uL   impossible d'effacer le devoir car certains élèves ont déposé leur copier  )r   r/   r{   rl   rx   rw   rW   r   r   rL   r   r   r   )r   r  r  rm   rm   rn   devoirSupprx  s   r  c           	      C   s   t t|d}t t|d}tjj||d}d}| r(| }tj	
t|jj}nt||d}t| jp3d| jp7d|d}| r`| jsI|jd du rV|rVtj	|rVt| |  td|jS t| d|||d	S )
u   envoie vers un formulaire pour deposer la copie corrigée de l'élève dont l'id est id_eleve pour le devoir dont l'id est id_devoirr   )r   r  FNr   r2  colleur_devoirzcolleur/renducopie.html)r   r  r   )r   r/   r&   r0   rp   ry   rz   firstr3  r4  r   rb   r2  r5  r   r   r)  r   r   r6  r7  r   r   r   r   )	r   r  rc  r  r   copiecorriger9  copier   rm   rm   rn   
depotCopie  s    
r  c                 C   sR   t t|d}t|| jpd| jpd}| r |  td|jS t	| d||dS )uo   envoie vers un formulaire pour deposer sous forme de zip les copies corrigés de certains élèves (voire tous)r   Nr  zcolleur/renducopies.html)r   r  )
r   r/   r   r   r)  r   r   r   r   r   )r   r  r  r   rm   rm   rn   depotCopies  s   r  c                    s   t t|d t fddjjj D rttjj	 d}|
 r}t }t|d3}|D ](}|jrW|jjdd d}tjjtg|dd R  }||tj| q/W d   n1 sbw   Y  |d	 t|d
d j jj jjdS t)zMrenvoie une achive zip de toutes les copies du devoir dont l'id est id_devoirr   c                 3   s$    | ]}t j j j V  qd S r   )r{   rl   rx   rw   )r   rx   r  r   rm   rn   	<genexpr>  s   " z ramasseCopies.<locals>.<genexpr>)r  wrf   N/r   zapplication/zipzcopies_devoir_{}_{}_{}.zip)r  filename)r   r/   r   rl   rj   r   rW   r1   rp   ry   rz   re   ra   r2  urlr   r3  r4  r   rb   writebasenameseekrZ   r   r  rx   r   rw   )r   r  r  	temp_filemyzipr  
nomfichierrm   r  rn   ramasseCopies  s$   "
"r  c                 C      t t|d}| jj}t t| jd |d}t| j||sttj	j
||d }t||d}t||| jp4d| jp8d|d}| rJ|  td|jS t| d|||d	S )
ue   renvoie la page des tds de la classe dont l'id est id_classe, dans la matière courante du professeurr   rx   r   r"  Nr   
colleur_tdzcolleur/tds.html)rx   r   tds)r   r$   rl   rj   r"   r   r{   rW   r4   rp   ry   r   r   r   r)  r   r   r   r   r   )r   r   rw   rj   rx   r  tdr   rm   rm   rn   r       r  c                 C   r  )
zCRenvoie la vue de la page de modification du td dont l'id est id_tdr   Nr   Fr2  r  r  zcolleur/tdModif.html)r  r   )r   r4   r{   rl   rx   rw   rW   r   r   r)  r2  r3  r4  r   rb   r5  r  r   r   r6  r7  r   r   r   r   )r   id_tdr  r   r9  r  rm   rm   rn   tdModif  r  r  c                 C   r+  )zcEssaie de supprimer le devoir dont l'id est id_devoir puis redirige vers la page de gestion des tdsr   r  )
r   r4   r{   rl   rx   rw   rW   r   r   r   )r   r  r  rm   rm   rn   tdSuppr  r.  r  c                 C   r  )
ug   renvoie la page des cours de la classe dont l'id est id_classe, dans la matière courante du professeurr   rx   r   r"  Nr   colleur_courszcolleur/cours.html)rx   r   cours)r   r$   rl   rj   r"   r   r{   rW   r5   rp   ry   r   r   r   r)  r   r   r   r   r   )r   r   rw   rj   rx   r  courr   rm   rm   rn   r    r  r  c                 C      t t|d}t| j|j|jstt|j|j| jpd| j	pd|d}|j
r.tjt|j
jnd}| r[| j	r<d| j	v sC|jd du rP|rPtj|rPt| |  td|jjS t| d||dS )	zIRenvoie la vue de la page de modification du cours dont l'id est id_coursr   Nr   Fr2  r  zcolleur/coursModif.html)r  r   )r   r5   r{   rl   rx   rw   rW   r   r   r)  r2  r3  r4  r   rb   r5  r   r   r6  r7  r   r   r   r   )r   id_coursr  r   r9  rm   rm   rn   
coursModif     ""
r  c                 C   r+  )zcEssaie de supprimer le cours dont l'id est id_cours puis redirige vers la page de gestion des coursr   r  )
r   r5   r{   rl   rx   rw   rW   r   r   r   )r   r  r  rm   rm   rn   
coursSuppr  r.  r  c                 C   r  )
uk   renvoie la page des documents de la classe dont l'id est id_classe, dans la matière courante du professeurr   rx   r   r"  Nr   colleur_autrezcolleur/autre.html)rx   r   docs)r   r$   rl   rj   r"   r   r{   rW   r6   rp   ry   r   r   r   r)  r   r   r   r   r   )r   r   rw   rj   rx   r  docr   rm   rm   rn   autre  r  r  c                 C   r  )	zJRenvoie la vue de la page de modification du document dont l'id est id_docr   Nr   Fr2  r  zcolleur/autreModif.html)r  r   )r   r6   r{   rl   rx   rw   rW   r   r   r)  r2  r3  r4  r   rb   r5  r   r   r6  r7  r   r   r   r   )r   id_docr  r   r9  rm   rm   rn   
autreModif  r  r!  c                 C   r+  )zhEssaie de supprimer le document dont l'id est id_doc puis redirige vers la page de gestion des documentsr   r  )
r   r6   r{   rl   rx   rw   rW   r   r   r   )r   r   r  rm   rm   rn   
autreSuppr.  r.  r"  c                 C   s   t t| jd d| jjd}tjj| jj|d}t|| jj| j	p d}|
 rqd| j	v r;|jd D ]}|  q0tdS d	| j	v rV|jd D ]}d|_d|_|  qEtdS d
| j	v rq|jd D ]}|jd |_|  q`tdS t| d|g d||dS )uU   renvoie la page récapitulative des planches dans la matière dont l'id st id_matiererx   Tr   r  rj   rj   rx   N	supprimerr  colleur_planchesviderchangesallesallezcolleur/planches.htmlLundiMardiMercrediJeudiVendrediSamedi)rx   joursplanchesr   )r   r"   r   rl   rj   r7   rp   ry   r   r   r   r   r   r   r   r   r   r)  r   )r   rx   r2  r   r  rm   rm   rn   r2  7  s(   





r2  c                 C   sp   t t| jd d| jjd}t| jj|d}t|| jj| jpd|d}| r.|	  t
dS t| d||d	d
S )z1renvoie la page d'ajout de planches individuellesrx   Tr#  r$  Nr   r&  colleur/plancheajout.htmlFr   rx   r  r   r"   r   rl   rj   r7   r   r   r   r   r   r   )r   rx   r  r   rm   rm   rn   plancheAjoutO  s   r6  c                 C   sl   t t| jd d| jjd}t t|d}t|| jj| jpd|d}| r,|	  t
dS t| d||dd	S )
z8renvoie la page de modification de planches individuellerx   Tr#  r   Nr   r&  r3  r4  r5  )r   r  rx   r  r   rm   rm   rn   plancheModif[  s   r7  c                 C   s   t t|d}|  tdS )z,supprime la planche dont l'id est id_plancher   r&  )r   r7   r   r   r   r  r  rm   rm   rn   plancheSuppre  s   r9  c                 C   s(   t t|d}d|_d|_|  tdS )uM   vide la planche dont l'id est id_planche (elève l'élève qui y est inscrit)r   Nr&  )r   r7   r   r   r   r   r8  rm   rm   rn   plancheVidel  s
   r:  c                 C   s   t t| jd d| jjd}tjj| jj|d}t| jj|d}t|| jj| j	p(d|d}|
 r8|  tdS t| d||d	S )
u;   renvoie la page d'ajout de multiples planches consécutivesrx   Tr#  r$  Nr   r&  zcolleur/planchesajout.html)r   rx   )r   r"   r   rl   rj   r7   rp   ry   r   r   r   r   r   r   )r   rx   r2  r  r   rm   rm   rn   planchesAjoutu  s   r;  c              	      sX  t t| jd dtjj| jjdd}d| jv r*t t	| jd d d i}nd ddi} du r<dd	 |D }n
 fd
d	|D }g }|D ]!}t
jj|d} dur^|j d |dddd}|| qJt|| jpsd|d}| r|jd du rd| jv r| jd= tdS |jd j| jd< tdS t| d|g dt||dS )u{   renvoie la page des planches des autres colleurs de la même matières dans la classe où le colleur courant est professeurrx   r   )rx   rj   classe__nomrj   r   Nc                 S   rt  rm   r=  r   profrm   rm   rn   r     rv  z profPlanches.<locals>.<listcomp>c                    s0   g | ]}|j  j v r j v r|j qS rm   )rw   r   r   rx   r=  r$  rm   rn   r     s   0 )r   rx   r  r  r   r   r   prof_plancheszcolleur/profplanches.htmlr*  )r   rx   r1  classesplanches)r   r"   r   r#   rp   ry   rl   rj   r  r!   r7   r  r   r   r   r   r   r   r   zip)r   r  r   r   r2  rw   planchesclassesr   rm   r$  rn   profPlanches  s4   


 rC  c                 C   sv   t t| jd d}|d}dd |D }tjj||d}tjj|ddd	d
	ddd
d	}t
tdd |D S )u<   renvoie un fichier json des élèves des classes concernéesrx   r   r   c                 S   r   rm   r   r   rm   rm   rn   r     r   zmajEleves.<locals>.<listcomp>)r   r   )
classe__inr<  r  r  r   c              	   S   s8   g | ]}|d  d |d  |d  |d dqS )r   z
{} {} ({})r  r  r<  )r   r   )r   titleupperr   rm   rm   rn   r     s   8 )r   r"   r   r   r$   rp   ry   r&   r  r   rX   jsondumps)r   
classes_idrx   r   r   rm   rm   rn   	majEleves  s   
$rJ  )Fr   )django.shortcutsr   r   r   django.contrib.authr   r   colleur.formsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   accueil.modelsr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   mixte.mixter8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   django.contribrL   django.contrib.auth.decoratorsrM   django.db.modelsrN   rO   rP   rQ   rR   rS   rT   django.db.models.functionsrU   datetimerV   django.httprW   rX   rY   rZ   django.forms.formsetsr[   pdf.pdfr\   r]   r^   r_   r`   rG  r3  r  zipfilera   ecolle.settingsrb   rc   rd   iore   ru   ro   rs   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r!  r*  r-  r;  r@  rC  rH  rJ  rL  rM  rR  rQ  rT  rU  rY  rZ  r[  r\  r^  rb  rd  re  rl  rm  rq  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r"  r2  r6  r7  r9  r:  r;  rC  rJ  rm   rm   rm   rn   <module>   st  lhX$







	


$





















































	

















	

	

6



































	

































