
    X@	g                     &   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 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/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZI d dlJmKZK d dlLmMZM d dlNmOZOmPZPmQZQmRZRmSZSmTZTmUZU d d	lVmWZW d d
lXmYZY d dlZm[Z[m\Z\m]Z]m^Z^ d dl_m`Z` d dlambZbmcZcmdZdmeZe d dlfZfd dlgZgd dlhmiZi d dljmkZkmlZlmmZm d dlnmoZo dZpd Zqd Zrd Zsd Ztd Zud ZvdcdZwd Zx eMeqd          d             Zy eMeqd          d             Zz eMeqd          d              Z{ eMeqd          d!             Z| eMeqd          ddd"            Z} eMeqd          d#             Z~ eMeqd          d$             Z eMeqd          d%             Z eMeqd          d&             Z eMeqd          d'             Z eMeqd          d(             Z eMeqd          d)             Z eMeqd          d*             Z eMeqd          d+             Z eMeqd          d,             Z eMeqd          d-             Z eMeqd          d.             Z eMeqd          d/             Z eMeqd          d0             Z eMeqd          d1             Z eMeqd          d2             Z eMeqd          d3             Z eMeqd          ddd4            Z eMeqd          d5             Z eMeqd          d6             Z eMeqd          d7             Z eMeqd          d8             Z eMeqd          d9             Z eMeqd          d:             Z eMeqd          d;             Z eMeqd          d<             Z eMeqd          d=             Z eMeqd          d>             Z eMeqd          d?             Z eMeqd          d@             Z eMeqd          dA             Z eMeqd          dB             Z eMeqd          dC             Z eMeqd          dD             Z eMeqd          dE             Z eMeqd          dF             Z eMeqd          dG             Z eMesd          dH             Z eMesd          dI             Z eMesd          dJ             Z eMerd          dK             Z eMerd          dL             Z eMerd          dM             Z eMesd          dddN            Z eMesd          dO             Z eMesd          dP             Z eMerd          dQ             Z eMesd          dR             Z eMeqd          dS             Z eMeqd          dT             Z eMeqd          dU             Z eMeqd          dV             Z eMeqd          dW             Z eMeqd          dX             Z eMeqd          dY             Z eMeqd          dZ             Z eMeqd          d[             Z eMeqd          d\             Z eMeqd          d]             Z eMeqd          d^             Z eMeqd          d_             Z eMeqd          d`             Z eMeqd          da             Z eMeqd          db             ZdS )e    )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)ConfigColleurMatiereProfClasseNoteEleveSemaine	ProgrammeGroupeCreneauColleMatiereECTSNoteECTSNoteGlobaleECTSDevoirDevoirCorrigeDevoirRendu	RamassageDecompteTDCoursDocument)mixtegroupemixtegroupesupprmixtegroupemodifmixtecolloscopemixtecolloscopemodifmixtecreneauduplimixtecreneausupprmixteajaxcompatmixteajaxcolloscopemixteajaxcolloscopeelevemixteajaxmajcolleurmixteajaxcolloscopeeffacermixteajaxcolloscopemultimixteajaxcolloscopemulticonfirmmixteRamassagePdfParClasse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trombinoscopePdfN)ZipFile)
MEDIA_ROOT	MEDIA_URLIMAGEMAGICK)BytesIO   c                 J    | 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users    /opt/e-colle/colleur/views.py
is_colleurrj      s+     " "DL!!!5    c                 V    t           o"t          j                                        j        S )ua   Renvoie True si l'utilisateur est authentifié et est un colleur et ECTS est activé, False sinon)rj   r   objects
get_configectsrg   s    ri   is_colleur_ectsrp      s    :&.3355::rk   c                 ~    t          |           o.t          j                                        j        t
          z  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   )rp   r   rm   rn   
ects_modifPROFrg   s    ri   is_colleur_modif_ectsrt       s1    4  SV^%>%>%@%@%KD%PRS%SSrk   c                     |dk    r8t           j                            || j                                                  S t           j                            ||| j                                                  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)classerf   )rv   matiererf   )r    rm   filterrf   exists)rh   rw   rv   s      ri   is_profrz   $   s_    }}|""&"FFMMOOO|""&"VV]]___rk   c                     t           j                                        j        o-|j        | k    p"| t
          j                            |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   rm   rn   modif_prof_groupeprofprincipalr   rx   rf   rv   s     ri   modifgrouper   +   su    >$$&&8  v?SU\?\  @~ahlsl{  mC  mC  X^  x|  mC  m}  m}  b}  rk   c                     t           j                                        j        o-|j        | k    p"| t
          j                            |d          v S )zdRenvoie True si colleur a les drois en modification du colloscope dans la classe classe, False sinonT)r|   colleurprof__modifcolloscope)r   rm   rn   modif_prof_colr   r   rx   r   s     ri   modifcolloscoper   /   sh    >$$&&5  6;OQX;X  <~]dhohwh~h~  TZ  x|h~  i}  i}  ^}  rk   Fc                 |    |r|j         | j        k    S t          | j        j                                                  S )zNRenvoie True si user est professeur principal de la classe classe, False sinon)r   rf   re   classeprofprincipalall)rh   rv   s     ri   is_profprincipalr   3   s9     <#t|33DL488::;;;rk   c                    t          | j                  rt          d          S d}t          | j        pd          }|                                rt          |j        d         |j        d                   }|||j        ru|j	        rn|j	        j
                                        rPt          | |           |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   rw   Tzcolleur/home.html)formerror)rj   rh   r   r   POSTis_validr   cleaned_datard   rf   matieresr   r   pksessionr   )requestr   r   rh   s       ri   connecr   :   s    ', *()))E 455D}} T%6z%BDL]^hLijjj4<DLDYD]D]D_D_'$'+|'<'@'@'B'B1'E'HGOI&,---E'-dE.J.JKKKrk   accueil)	login_urlc                     t          t          || j        j                  }|j        | 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   rf   rw   r   )r   r   rh   rf   r   r   r   )r   id_matrw   s      ri   	changematr   J   s:     g8LMMMG&zGOI$%%%rk   c                 "    t          | d          S )z0Renvoie la vue de la page d'accueil des colleurszcolleur/action.html)r   )r   s    ri   actionr   Q   s     '/000rk   c           
      j   t          t          |          }| j        j        }t          t          | j        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   rw   r   zcolleur/note.html)rv   notes)r   r!   rh   rf   r   r   classesr   r   
matierespkrS   r   r"   rm   
listeNotes)r   	id_classerv   rf   rw   s        ri   noter   V   s     Vy111FL Gg)CGTTTGW_((****gj@Q@Q@S@S.S.S'-H_H_`ghnovHwHw.x.xyyyrk   c           	         t          t          |          }t          |          }| j        j        }t          t
          | j        d         |          }||j                                        vs|j	        |
                                vrt          t          ||| j        pd          }|                                r9t          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   rw   r   Nnoteeleves_colleur-c           	      b    g | ],}t          t          t          |          d                     -S )r   )strmaxint.0eleves     ri   
<listcomp>znotation.<locals>.<listcomp>k   sJ      CC  CC  CC^c3s3u::VWGXGXCYCY  CC  CC  CCrk   r   zcolleur/notation.html)r   rv   groupeeleve)r   r!   r   rh   rf   r   r   r   r   r   r   rS   r   r   r   r   joinr   r   )r   r   r   rv   rf   rw   r   s          ri   notationr   `   s(    Vy111Fk""KL Gg)CGTTTGW_((****gj@Q@Q@S@S.S.Sv{GL4HDIID}} E,i  CC  CCgkgx  zA  hB  CC  CC  CC  :D  :D  E  E  	E'1$]h2i2ijjjrk   c           	         t          t          | j        d         | j        j                  }t          t
          ||          }|| j        j        j                                        vrt          d |	                    d          D             }|
                    d          }t          j                            ||          }|
                                |z   }	t          || j        j        || j        pd |          }
|	d	k    r_|]|j        rVt#          t$          dd	t&          
          } ||
t)          |          d g|z  z   | j        pd |j        |j        dg          }n|t/                      }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&          
          } ||
t)          |          d g|z  z   | j        pd           }nEt#          t$          |	dt&          
          } ||
t)          |          d g|z  z   | j        pd           }| j        dk    r||                                rh|                                 |
j        d         j        | j        d<   |
j        d         | j        d<   |
j        d         | j        d<   t;          d|          S t=          | d|
||j        |d          S )Nrw   r   )r   r   c                 ,    g | ]}t          |          S  r   r   xs     ri   r   znoteEleves.<locals>.<listcomp>u   s    
1
1
1a3q66
1
1
1rk   r   r   pk__inrv   instancera   extramax_numformset)r   commentaireinitialsemainejourheure   r   note_colleurzcolleur/noteEleves.html)r   r   rv   rw   ) r   r   r   rh   rf   r!   r   r   rS   splitcountr#   rm   rx   r   r   r   rW   r   r   listr   r   dictr   methodr   saver   r   r   nom)r   r   
eleves_str	noteCollerw   rv   ids	nbFictifselevestotalr   NoteElevesformsetr   r   s                 ri   
noteElevesr   o   s   g)CGLL`aaaGv)gFFFFW\)1557777
1
1:++C00
1
1
1C		!I]!!3!@@FLLNN9$Egw|';VW\EYUYfopppDzzi+	++,>QqYjkkk##D$v,,$	9I*I7<K_[_r{  sA  QZ  Qf  kg  kg  jh  i  i  i		&&''!(!;GIW_$$%of5GFOgo%%&w7GG+,>UST]nooo##D$v,,$	9I*I7<K_[_``+,>UST]nooo##D$v,,$	9I*I7<K_[_``~ 	6LLNNN'+'8'C'FGOI&$($5f$=GOF#%)%6w%?GOG$N9555'3TW_e_iu|5}5}~~~rk   c                 6   t          t          |          }| j        j        }|j        |k    r$t	          j        | d           t          d          S |j        j        | j	        d         k    r$t	          j        | d           t          d          S |j
        | j        j        j                                        vr$t	          j        | d           t          d          S t          | |j
        j        |j        dn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   rw      Ce n'est pas la bonne matièrezCe n'est pas la bonne classeN0)r   r"   rh   rf   rH   r   r   rw   r   r   rv   r   r   r   r   r   )r   id_noter   rf   s       ri   	noteModifr      s     
47	+	+	+DL G|wwKLLL'''	GOI6	6	6w?@@@'''	GL08<<>>	>	>w=>>>'''gt{~dj6HsscRVR\R_N`N`bfgggrk   c                 z   t          t          |          }|j        | j        j        k    r$t	          j        | d           t          d          S |j        j        | j	        d         k    r$t	          j        | 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   rw   r   r   )r   r"   rf   rh   rH   r   r   rw   r   r   deleterv   )r   r   r   s      ri   	noteSupprr      s     
47	+	+	+D|w|+++wKLLL()))	GOI6	6	6w?@@@()))KKMMMNDKN333rk   c                      t          |          S N)r[   )r   r   s     ri   trombinoscoper      s    I&&&rk   c                    t           j                                        }	 |d         }n# t          $ r t          w xY w	 ||                                dz
           }n# t          $ r t          w xY 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   ra   resultat2_colleur)r$   rm   r   	ExceptionrS   r   r   r   )r   r   semainesseminsemaxs        ri   resultatr      s     _  ""Hqk   x~~'')*   '	%(58DDDs   ) ;A A/c                    t          t          |          }t          t          |          }t          t          |          }|| j        j        j                                        vrt          t          | j	        pd||d          }|
                                r2t          d||j        d         j        |j        d         j                  S t          t          | j        d                   }t           j                            ||||          }	t           j                            ||||          }
t)          |	          }t+          | j        ||          }|rt           j                            |||j        |j        f	                              d
                              d                                                              dd                              t;          d          t=          d          t?          d          tA          d                    nd|rt           j                            |||j        |j        f	                              ddd                              dd                              tC          d                                        |j"        tG          d          z            nd}|rt           j                            |||j        |j        f	                              d
          $                    t;          d          t=          d          t?          d          tA          d                    nd}|r]t           j                            |||j        |j        f	          $                    tC          d                    d         |j"        z  nd}durd D             fd|D             tK          | ddd|
z  z   |||||	||||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   rw   )rv   rw   semaine__lundi__range   note__gtrf   colleur__user__last_namecolleur__user__first_namer   )moyminimummaximum	ecarttypeFr   )nbr   )heuresc           
          i | ]M}|d          d                     |d                   |d         |d         d                     |d                   fNS )rf   z{:.1f}r   r   r   r   )formatr   s     ri   
<dictcomp>zresultat2.<locals>.<dictcomp>   sm      T  T  T  AB9xqx'@'@9aPYl[c[j[jklmxky[z[z&{  T  T  Trk   c                 z    g | ]7}|d          |d         f|d         vrdn|d                  z   |d         fz   8S )r   r   rf   )r   r   r   r   r   r   )r   r   stat_colleurss     ri   r   zresultat2.<locals>.<listcomp>   s      a  a  a  LM!78;U9VWqrs|q}  FS  rS  rS\m\m  Yf  gh  ir  gs  Yt  v  z{  |D  zE  yG  G  a  a  ark   zcolleur/resultat.htmli  )   )largeurr   rv   r   rw   r   isprofr   r   statsstat_globalheures_global)&r   r!   r$   rh   rf   r   r   rS   r
   r   r   r   r   r   r   r   r"   rm   classe2resultat
nbSemainesnextrz   rx   lundiexcludevaluesdistinctorder_byannotaterJ   rK   rL   rM   rO   tempsrP   	aggregater   )r   r   id_seminid_semaxrv   r   r   r   rw   
generateurr  r   r  heures_colleursr  r  r   s                   @ri   	resultat2r     s
    Vy111F
Gx
0
0
0E
Gx
0
0
0EW\)1557777	W\)T52O2O	P	P	PD}} s+Id6G6P6STXTefmTnTqrrr7?9+EFFFG--gfU5IIJ((eDDJJHW\'&11F IO  ZDL''vg]b]hinit\u'vv~~  IK~  L  L  S  S  T]  ^  ^  g  g  i  i  r  r  sM  Ni  j  j  s  s  x{  |B  xC  xC  LO  PV  LW  LW  `c  dj  `k  `k  v|  }C  vD  vD  s  E  E  E  UZM IO  Zdl))_d_jkpkv^w)xx  AJ  Kf  gA  B  B  K  K  Lf  gB  C  C  L  L  PU  VZ  P[  P[  L  \  \  e  e  ov  o|  }~  C  }D  }D  oD  e  E  E  E  UZO jp  {$,%%VG[`[fglgrZs%tt||  GI|  J  J  T  T  Y\  ]c  Yd  Yd  mp  qw  mx  mx  AD  EK  AL  AL  W]  ^d  We  We  T  f  f  f  v{K io  zDL''vg]b]hinit\u'vv  A  A  EJ  KO  EP  EP  A  Q  Q  RV  W  X_  Xe  e  e  uzME!! T  T  FS  T  T  T a  a  a  a  Q`  a  a  a'1c"Z->OW[ekw  KR  [e  ou  ~C  LQ  kq  Z|  Zg  Zg  w|  LW  jw  3y  3y  z  z  zrk   c                 z   t          t          |          }|| j        j        j                                        vrt          t          t          |          }t          t          |          }t          t          | j	        d                   }t          j                            ||||          }t          |          }	t          d          }
d                    |j        |j        |j        |j                  |
d<   t%          j        |
          }|                    g dd |	D             z              d	 t+          d
          D             dd
<   dd<   |D ]\}|                    |d         j        j        |d         j        j        |d         |d         gfd|d         D             z              ]|
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   rw   ztext/csv)content_typez2attachment; filename="resultats_{}_{}_s{}-s{}.csv"zContent-Disposition)Nomu   Prénomrangmoyennec                 B    g | ]}d                      |j                  S )zS{})r   numero)r   r   s     ri   r   zresultatcsv.<locals>.<listcomp>   s'    7m7m7mY`W^8T8T7m7m7mrk   c                 .    i | ]}|t          |          S r   )r   r   is     ri   r   zresultatcsv.<locals>.<dictcomp>   s     ,,,Q#a&&,,,rk      zn.n.abs   r   r  r  c                 R    g | ]#}d                      fd|D                       $S )|c                 ,    g | ]}|d                   S )r   r   )r   r   r   s     ri   r   z*resultatcsv.<locals>.<listcomp>.<listcomp>   sW      }g  }g  }g  Y]  ~F  GK  LR  GS  ~T  }g  }g  }grk   )r   )r   valuer   s     ri   r   zresultatcsv.<locals>.<listcomp>   s      sF  sF  sF  mrsvs{s{  }g  }g  }g  }g  af  }g  }g  }g  th  th  sF  sF  sFrk   r   )r   r!   rh   rf   r   r   rS   r$   r   r   r"   rm   r  r	  rT   r   r   r  csvwriterwriterowrange	last_name
first_name)r   r   r  r  rv   r   r   rw   r  r   responser)  r   r   s                @ri   resultatcsvr/     s    Vy111FW\)1557777
Gx
0
0
0E
Gx
0
0
0E7?9+EFFFG--gfU5IIJJH444H&Z&a&abhblmtmxy~  zF  GL  GS  'T  'TH"#Z!!F
OO6667m7mdl7m7m7mmnnn,,%)),,,HHRLHRL G Gg+5d7m6H6STXY_T`aefoapq  sF  sF  sF  sF  vz  {D  vE  sF  sF  sF  F  	G  	G  	G  	GOrk   c                 V   t          t          |          }| j        j        }t          t          | j        d         |          }|| j        j        j                                        vs|j        |	                                vrt          t          j                            ||                              d                              t!          d                                        d          }t%          |           d	}t'          | j        ||          rqd
}t          ||          }t)          | j        pd| j        pd|          }|                                r)|                                 t3          d|j                  S nd	}t5          | d|||||t6          d          S )zXRenvoie la vue de la page de gestion des programmes de la classe dont l'id est id_classer   rw   r   rv   rw   r   semaine__numero)smaxz-smaxFT)rw   rv   Nr   programme_colleurzcolleur/programme.html)
programmesrv   rw   r   r  jpeg)r   r!   rh   rf   r   r   r   r   r   r   rS   r%   rm   rx   prefetch_relatedr  rL   r  printrz   r	   r   FILESr   r   r   r   r_   )	r   r   rv   rf   rw   r5  r  	programmer   s	            ri   r:  r:     s    Vy111FL Gg)CGTTTGW\)15577777:VM^M^M`M`;`;` ''vg'FFWWXabbkksv  xI  tJ  tJk  K  K  T  T  U\  ]  ]J	*Fw|GF++ G6:::	W\1T'-2G4QZ[[[==?? 	;IIKKK/	:::	; '2U[fmuy  DJ  R]  4^  4^  _  _  _rk   c                     t          t          |          }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   r4  )
r   r%   rz   rh   rw   rv   rS   r   r   r   )r   id_programmer:  s      ri   programmeSupprr=    s`      	\:::I7<	 1)2BCC ')9)<===rk   c                 
   t          t          |          }t          | j        |j        |j                  st          t          | j        pd| j	        pd|          }|j
        r/t          j                            t          |j
        j                  nd}|                                r| j	        r|rt          j                            |          rt          j        |           |                    dd                              dd          }t          j                            |          rt          j        |           |                                 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jpgr4  zcolleur/programmeModif.html)r:  r   )r   r%   rz   rh   rw   rv   rS   r	   r   r9  fichierospathr   r]   namer   isfileremovereplacer   r   r   r   )r   r<  r:  r   oldfilenomimages         ri   programmeModifrK    sS     	\:::I7<	 1)2BCC 	w|+tGM,ATI	V	V	VD?H?P[BGLLI$5$:;;;V[G}} B= 	$W 	$w~~g&& #	'"""__[99AA%NNHw~~h'' $	(###		+Y-=-@AAA'7YVZ8[8[\\\rk   c                    t          t          |          }t          | j        j        |          st          d          S t          j                            |          	                    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érv   groupeeleve__user)r   r!   r   rh   rf   rU   r&   rm   rx   r7  r4   )r   r   rv   groupess       ri   grouperQ  $  su     Vy111Fw|+F33 =$%;<<<n##6#22CCDWXXGwvg...rk   c                     t          t          |          }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   rM  )r   r!   r   rh   rf   rU   rE   r   r   rv   s      ri   groupeCreerrT  -  sL     Vy111Fw|+F33 =$%;<<<GF+++rk   c                     t          t          |          }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   rM  )r   r&   r   rh   rf   rv   rU   r5   r   	id_grouperQ  s      ri   groupeSupprrX  5  N     Vy111Fw|+FM:: =$%;<<<GF+++rk   c                     t          t          |          }t          | j        j        |j                  st          d          S t          | |          S )zKRenvoie la vue de la page de modification du groupe dont l'id est id_grouper   rM  )r   r&   r   rh   rf   rv   rU   r6   rV  s      ri   groupeModifr[  =  rY  rk   c                     t          t          |          }t          | j        j        |          st          d          S t          | |          S 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   rM  )r   r!   r   rh   rf   rU   rD   rS  s      ri   
groupeSwapr^  E  sL     v)444Fw|+F33 =$%;<<<76***rk   c                     t          t          |          }t          | j        j        |          st          d          S t          | |          S r]  )r   r!   r   rh   rf   rU   rF   rS  s      ri   	groupecsvr`  M  sL     v)444Fw|+F33 =$%;<<<'&)))rk   c                     t          t          j                                                  }	 |d         |d         }}n# t          $ r t
          w xY 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$   rm   r   r   rS   r   colloscope2r   )r   rc  r   r   r   r   s         ri   
colloscoperf  U  s     '/%%''((HQKe   CK7?::w{?[_c?c?c	wy58EHEEEs	   > Ac           
      T   t          t          |          }t          t          |          }t          t          |          }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   rh   rf   r   r   rS   r7   r   )	r   rc  r   r  r  rv   r   r   r  s	            ri   re  re  b  s     Vy111F
Gx
0
0
0E
Gx
0
0
0EW\1&99FW\)155777776%fS^^LLLrk   c                     t          t          |          }t          t          |          }t          t          |          }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   rM  )r   r!   r$   r   rh   rf   rU   r8   )r   r   r  r  creneaumodifrv   r   r   s           ri   colloscopeModifrj  n  sv     Vy111F
Gx
0
0
0E
Gx
0
0
0E7</77 =$%;<<<uU<HHHrk   c                     t          t          |          }t          | j        j        |          st          d          S t          | |          S )zVRenvoie la vue de la page d'import' du colloscope de la classe dont l'id est id_classer   rM  )r   r!   r   rh   rf   rU   rG   rS  s      ri   colloscopeImportrl  y  sL     Vy111F7</77 =$%;<<< 000rk   c                     t          t          |          }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   rM  )r   r'   r   rh   rf   rv   rU   r:   r   
id_creneaur  r  creneaus        ri   creneauSupprrq    sR     g444G7</?? =$%;<<<WWXh???rk   c                     t          t          |          }t          | j        j        |j                  st          d          S t          | |j        j        |||          S )zMRenvoie la vue de la page de modification du creneau dont l'id est id_creneaur   rM  )ri  )	r   r'   r   rh   rf   rv   rU   rj  r   rn  s        ri   creneauModifrs    s]     g444G7</?? =$%;<<<77>#4XhT[\\\\rk   c                     t          t          |          }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   rM  )r   r'   r   rh   rf   rv   rU   r9   rn  s        ri   creneauDupliru    sT     g444G7</?? =$%;<<<W\'(8DDDrk   c                 L    t          t          |          }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;   rS  s      ri   
ajaxcompatrw    s$     Vy111F6"""rk   c                     t          t          |          }t          t          |          }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   rM  )r   r!   r   r   rh   rf   rU   r>   )r   
id_matierer   rv   rw   s        ri   ajaxmajcolleurrz    s^     Vy111Fg444G7</77 =$%;<<<wv...rk   c                    t          t          |          }t          t          |          }t          t          |          }t          t          |          }	t          t
          |          }
t          | j        j        |
j	                  r;||j
                                        vs ||
j	        j
                                        vrt          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  rM  )r   r   r   r&   r$   r'   r   rh   rf   rv   r   r   rU   r<   )r   ry  
id_colleurrW  numero_semainero  rw   rf   rQ  r   rp  s              ri   ajaxcolloscoper    s     g444Gg444GVy111Fg^<<<Gg444G7</?? =7RYRbRfRfRhRhChChls  |C  |J  |S  |W  |W  |Y  |Y  mY  mY$%;<<<wwvggFFFrk   c                    t          t          |          }t          t          |          }t          t          |          }	t          t          |          }
t          | j        j        |
j                  r;||j	        
                                vs ||
j        j	        
                                vrt          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|  rM  )r   r   r   r$   r'   r   rh   rf   rv   r   r   rU   r=   )r   ry  r}  id_elever~  ro  r   rw   rf   r   rp  s              ri   ajaxcolloscopeelever    s     g444Gg444Gg^<<<Gg444G7</?? =7RYRbRfRfRhRhChChls  |C  |J  |S  |W  |W  |Y  |Y  mY  mY$%;<<<#GGXggeTTTrk   c                     t          t          |          }t          t          |          }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   rM  )	r   r$   r'   r   rh   rf   rv   rU   r?   )r   r~  ro  r   rp  s        ri   ajaxcolloscopeeffacerr    s`     g^<<<Gg444G7</?? =$%;<<<%gg666rk   c
                    |dk    r-t          t          |          }
t          t          |          }nd}
d}t          t          |          }t          t          |          }t          | j        j        |j                  rA|
dk    rJ|
|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   rb  r   r|  rM  )r   r   r   r$   r'   r   rh   rf   rv   r   r   rU   r@   r   ry  r}  rW  r  r~  ro  duree	frequencepermutationrw   rf   r   rp  s                 ri   ajaxcolloscopemultir    s    T!'Z888!'Z888g^<<<Gg444G7</?? =7R<<U\dkdtdxdxdzdzUzUz  F  NU  N\  Ne  Ni  Ni  Nk  Nk  k  k$%;<<<#GGIhwwW\^gituuurk   c
                    |dk    r-t          t          |          }
t          t          |          }nd}
d}t          t          |          }t          t          |          }t          | j        j        |j                  rA|
dk    rJ|
|j	        
                                vs |
|j        j	        
                                vrt          d          S t          |
||||||||		  	        S )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èrer  r   rb  r   r|  rM  )r   r   r   r$   r'   r   rh   rf   rv   r   r   rU   rA   r  s                 ri   ajaxcolloscopemulticonfirmr    s    T!'Z888!'Z888g^<<<Gg444G7</?? =7b==V]eleueyeye{e{V{V{  @G  OV  O]  Of  Oj  Oj  Ol  Ol  @l  @l$%;<<<*779XgV]^cenp{|||rk   c                     t          j                    }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   )	rR   todayr(   rm   agendarh   rf   r   r^   )r   r   r  s      ri   r  r    sG     
D]!!',"677F'/&Y^b0c0cdddrk   c                    t          t          j                            |                    d          | j        j        | j        j        j                                                            }|st          d |D             }|d         }|d         j
        j        | j        d<   t          j                                        j        }|j        j        }|j        j        }|j        r'||k    r!t*          j                            |          }n t*          j                            |          }|j        r7||k    r1|j
        |j        |j        fv r|                    |j
                  }nc|d         j
        j        d	k    r|                    |j
        
          }n1|d         j
        j        dk    r|                    |j
                  }d                    d |D             dgd|                                z
  z  z             }	t7          |j        |j        j        |j        j                  }
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   rf   matiere__inc                     g | ]	}|j         
S r   )rQ  )r   colles     ri   r   zcolleNote.<locals>.<listcomp>  s    000u|000rk   r   rw   )groupe2__in)
groupe__in)optionra   )lv1   )lv2r   c                 6    g | ]}t          |j                  S r   r   r   r   s     ri   r   zcolleNote.<locals>.<listcomp>  s     5553qt99555rk   r   r   r   r   r   )r   r(   rm   rx   r   rh   rf   r   r   rS   rw   r   r   r   rn   	semestre2r   r  rp  rv   	semestresr#   option1option2lvr   r   r"   r   r   r   )r   	id_collesr  rP  r  r  r   rv   r   r   r   s              ri   	colleNoter    s'    $$IOOC,@,@I]jqjvj~  kH  kL  kL  kN  kN$  O  O  P  PF 00000G1IE%ay03GOI))++5Im"G]!F <Gy00%%G%<<%%7%;; 4Gy00U]v~V\VdFe5e5e66				"	"U]33				"	"U]3355f555q?O8PPQQJ%-0BEML_```Dgfi
4888rk   c                    t          t          || j        j        | j        j        j                                                  }|j        j        | j        d<   t          |j
        |j        j        |j        j                  }t          | |j        j        j        |j        sdn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ée)r   rf   r  rw   r  r   )r   r(   rh   rf   r   r   rw   r   r   r"   r   rp  r   r   r   rv   r   r   )r   id_coller  r   s       ri   colleNoteElever    s     EXgl6JW^WcWkWtWxWxWzWz
{
{
{E$}/GOI%-0BEML_```Dgu}365;8gTWX]XcXfTgTgimnnnrk   c                    | j         j        }|j                            t	          d                                        d                              dd                                          }|j        	                                }g }t          j                            t          d                    d         }|d
}|D ]}t          j                            ||                              dd                                          }g }|D ]p}	g }
|D ]}|
                    t          j                            |||	|j        |j                                      t)          d                    d         t*          j                            ||||	|j        dz  |j        z   dz
                                t)          d                    d         f           t          j                            |||	                              t)          d                    }t*          j                            ||||	                              t)          d                    }|                    |	|
||f           r|                    |||f           |                    d            t          j                            dd          }t1          | d||d          S )u1   Renvoie la vue de la page du décompte des collesr   )inomr  T)flatr   )pkmaxr  Nr   )rf   matiere__nom__iexact
date_collemonth)rf   r  rv   date_colle__monthdate_colle__yearmatiere__temps)r  r     ra   )	ramassagerf   r  rv   mois)rf   r  rv   )r  rf   r  rv   c                     | d         S )Nr   r   )r   s    ri   <lambda>zdecompte.<locals>.<lambda>0  s
    ! rk   )keymoisFinzcolleur/decompte.html)listematieres
ramassages)rh   rf   r   r  rQ   r  values_listr  r   r   r/   rm   r  rL   r"   rx   datesappendr  yearrN   r0   sortr  r   )r   rf   r   r   r  lastpkramassagerw   	listemoislisteclassesrv   nbcollesr  r   totalramassager  s                  ri   decompter    s    L G&&eEll&;;DDVLLXXY_eiXjjssuuHO!!GM'11#d))1DDWMO . .L''W'UU[[\hipqqzz||	 	H 	HFH! V V!4!4WZaio  CG  CM  _c  _h!4  "i  "i  "s  "s  z}  ~N  zO  zO  "s  "P  "P  QX  "Y ''Owmt  @F  OS  OX  Y[  O[  ^b  ^h  Oh  kl  Ol'  m  m  w  w  ~A  BI  ~J  ~J  w  K  K  LS  T!U V V V V,%%g7Z`%aakkru  wG  sH  sHk  I  IE%-44\c  }D  OU4  V  V  `  `  gj  kr  gs  gs  `  t  tN~ FGGGGgl9=>>>}}----"))$y99J'1=_i2j2jkkkrk   c                 j    t          t          |          }t          |ddd| j        j                  S )Nr   FT)rf   )r   r/   rB   rh   rf   )r   id_ramassager  s      ri   r  r  4  s2    !)===I%iew|Ocddddrk   c                     t          t          |          }t          t          |          }t          t          |          }|| 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$   rh   rf   r   r   rS   rX   r   r   r  r  rv   r   r   s          ri   colloscopePdfr  9  sp     Vy111F
Gx
0
0
0E
Gx
0
0
0EW\)1557777veE"""rk   c                    t          t          |          }t          t          |          }t          t          |          }|| 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$   rh   rf   r   r   rS   rC   r  s          ri   colloscopeCsvr  C  sr     Vy111F
Gx
0
0
0E
Gx
0
0
0EW\)1557777GF5///rk   c                 `	   t          t          |          }t          | j        |          st	          d          S 	 t
          j                            | j        d                   }n# t          $ r d}Y nw xY w	 t          j                            | j        d                   }t          j                            | j        d                   }na# t          $ rT 	 t          t          j                                                  }|d         |d         }}n# t          $ r dx}}Y nw xY wY nw xY w| j        d	k    rd
| j        v rt          | j                  }t!          |d|i          }|                                rI|j        d         j        | j        d<   |j        d         j        | j        d<   t)          d|j                  S nd| j        v rkt          ||d          }t!          || j                  }|                                r/|j        d         j        | j        d<   t)          d|j                  S n&t!          |d|i          }t          ||d          }|r(|r%|r"t*          j                            ||j        |j        f                              dd                                                              d          }|j                                                            d          }	g }
|	D ]}t*          j                            ||j        |j        f|                              d                              t=          d                    }|d         rt*          j                            d                              |d||j        |j        f                              d                              t=          d                                        |d         dz                                              dz   }nd}g }|D ]R}t*          j                            |||d                    !                    d!          }|"                    |           S|
"                    ||||f           ndx}}
tG          | d"||||||
|d#          S )$u1   Renvoie la vue de la page de gestion des élèvesr   rM  r   Nr   r   r   rb  r   r   r   eleves_colleureleveselectr   )r   r   r   r2  semaine__lundir   )r   r   rw   r   r   r   )r   r   F)rv   eleve__isnullrw   r   gMbP?)note__avg__gtra    )r   rw   semaine__pkcolleur__userzcolleur/eleves.html)r   r   r   r   form2matierenoter   )$r   r!   r   rh   rU   r#   rm   getr   r   r$   r   r   r   r   r
   r   r   r   r   r   r"   rx   r
  r  r  r  r   r  r  rJ   r  r   select_relatedr  r   )r   r   rv   r   r   r   r   r  r   r   r  rw   r  r  r   r   r   s                    ri   r   r   M  s    v333FGL00 =$%;<<<!!W_W%=!>>   ##ww'?#@@##ww'?#@@   	GO//1122H"1+hrl%EE 	 	 	E%%%		 ~',&&--EV???D~~ <+0+=g+F+I(+0+=g+F+I( 0;;;< w|++5*G*GHHHEVGL11D}} <+/+<W+E+H( 0;;;GE?;;;uU&C&CDDD & &5 &<&&U%+V[VaIb&ccjjkt  vG  H  H  Q  Q  S  S  \  \  ]m  n  n?&&((11%88 
	= 
	=Gl))U[Y^YdLenu)vv~~  IK~  L  L  V  V  [^  _e  [f  [f  V  g  gGu~ \))2)66==VZ_ho  HM  HS  TY  T_  G`=  a  a  h  h  ip  q  q  z  z  {~  E  {F  {F  G  G  N  N  ]d  ej  ]k  lq  ]q  N  r  r  x  x  z  z  {|  |E# # #|**wSZ[dSe*ffuu  wF  G  GT""""U;<<<<
	= "&%;'/uUZbfot  DO  [c  1d  1d  e  e  esH   +A( (A76A7;AC 
D0;DD0D*'D0)D**D0/D0c                    t          t          |          }t          | j        |          st	          d|j                  S t          j                            |          	                    d          
                    dd          }t          |          }t          | j        pd|          }t          j                            ||	          
                    d
d          |j        d         _        |                                r)|                                 t	          d|j                  S t%          | d|||d          S )D   Renvoie la vue de la page de gestion des matières ects de la classer   
ects_notesrN  profsr   	precisionNr   r   r|   user__last_nameuser__first_nameects_matiereszmixte/ectsmatieres.html)rv   matieresECTSr   )r   r!   r   rh   r   r   r)   rm   rx   r7  r  r   r   r   fieldsquerysetr   r   r   )r   r   rv   r  
newMatierer   s         ri   ectsmatieresr    s-    v333FGL00 0VY///&--V-<<MMgVV__`efqrrLF+++J7</4DDDD")/"8"8\b"8"c"c"l"lm~  @R  #S  #SDK!}} 3			222'3fT`hl4m4mnnnrk   c                    t          t          |          }t          | j        |j                  st          d          S t          | j        pd|          }t          j	        
                    |j        |j                                      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   rM  Nr   r  r  r  r  r  zmixte/ectsmatieremodif.html)rw   r   )r   r)   r   rh   rv   rU   r   r   r   rm   rx   r  r  r  r   r   r   r   r   )r   ry  rw   r   s       ri   ectsmatieremodifr    s      z:::GGL88 =$%;<<<7</4AAAD")/"8"8dkdr"8"s"s"|"|  ~O  Pb  #c  #cDK!}} ;		(9:::'77RV8W8WXXXrk   c                 |   t          t          |          }t          | j        |j                  st          d          S t          | j        |j                  st          d          S 	 |                                 n%# t          $ r t          j	        | d           Y nw xY 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   rM  u6   Impossible de l'effacer (des élèves y ont des notes)r  )r   r)   r   rh   rv   rU   r   r   rH   r   r   r   )r   ry  rw   s      ri   ectsmatieresupprr    s      z:::GGL88 =$%;<<<GL88 =$%;<<<Y Y Y YwWXXXXXYOGN$5666s   *A? ?B! B!c                    t          t          |          }t          | j        |          }t          j                            || j        j                                      dd          }|	                                s|st          d          S t          d          }t          j                            ||          \  }}t          || j        pd          }|                                rd| j        v rDt#          d	|j        |j        d
                    d |j        d         D                                 S d| j        v r?t#          d	|j        dd
                    d |j        d         D                                 S |D ]]}	t-          |	j                  | j        v r@t#          d|	j        d
                    d |j        d         D                                 c S ^g }
|D ]B}	|
                    t1          |	j        du          t1          |	j        du          z              Ct7          | dt9          | j                  |j        dk    ||||||||
d
          S )r  r   )rv   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                 6    g | ]}t          |j                  S r   r  r   s     ri   r   zectsnotes.<locals>.<listcomp>  s>      VM  VM  VMhmVYZ_ZbVcVc  VM  VM  VMrk   r   global2ra   c                 6    g | ]}t          |j                  S r   r  r   s     ri   r   zectsnotes.<locals>.<listcomp>  s9      KB  KB  KB]b3ux==  KB  KB  KBrk   ects_notes_modifc                 6    g | ]}t          |j                  S r   r  r   s     ri   r   zectsnotes.<locals>.<listcomp>  s!    G~G~G~Z_EHG~G~G~rk   zcolleur/ectsnotes.htmlr  )
modifannee2nomatpprv   r   r   	listNotesr   nbsemestres)r   r!   r   rh   r)   rm   rx   rf   r  ry   rU   r   r*   r   r   r   r   r   r   anneer   r   r   r  r   	semestre1r  r   rt   )r   r   rv   r  r   r  r  r   r   rw   r  s              ri   	ectsnotesr     s    v333F	',v	.	.B"))gl>R)SS\\]bcnooH?? R $%}~~~XI (--fX>>E:6',"6$77D}} Aw|##4VYv|CHH  VM  VMqu  rC  DK  rL  VM  VM  VM  MN  MN  O  O  O$$4VYq  KB  KBfjfwx  gA  KB  KB  KB  BC  BC  D  D  D 	A 	AG7:',.. 27:chhG~G~cgctu|c}G~G~G~>>  A  A  A  A  A /K b b3w0<==c'BS[_B_>`>``aaaa'2<QRYR^<_<_jpjvz{j{  GL  RT  ^d  px  FP  ]f  nr  AL  4M  4M  N  N  Nrk   c           	      B   t          t          || j        j                  }t          j                            d |                    d          D             |j                  	                    dd          
                    d          }t          t          d|                                t          	          }| j        d
k    rU |||| j                  }|                                r.|                                 t'          d|j        j                  S n.t*          j                            ||          } ||||          }dt/          |j        du          z   t/          |j        du          z   }t5          | dt7          | 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                 ,    g | ]}t          |          S r   r   r  s     ri   r   z"ectsnotesmodif.<locals>.<listcomp>      .X.X.X!s1vv.X.X.Xrk   r   r   r  r  rh   r   r   r   r  r   ra   Nzcolleur/ectsnotesmodif.html)r  r   rw   r  )r   r)   rh   rf   r#   rm   rx   r   rv   r  r  rW   r   r   r   r   r   r   r   r   r   r*   r   r   r  r  r   rt   )	r   ry  chaine_elevesrw   listeElevesNoteEleveformsetr   r   r  s	            ri   ectsnotesmodifr    s     z@TUUUG-&&.X.X}?R?RSV?W?W.X.X.X`g`n&ooxx  zK  L^  _  _  n  n  ou  v  vK&}1[EVEVEXEXaqrrr~"";ww|DD 	<LLNNNL):;;;	< "--gkBB"";wwGGGC)5666s7;LTX;X7Y7YYK'7AVW^WcAdAdov  BI  Xc  9d  9d  e  e  erk   c           	         t          t          |          }t          | j        |          st	          d          S t
          j                            d |                    d          D             |          	                    dd          
                    d          }t          t          d	|                                t          
          }| j        dk    rP |||| j                  }|                                r)|                                 t'          d|j                  S n/t*          j                            |||          } ||||          }t/          | dt1          | j                  |t3          |          |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   rM  c                 ,    g | ]}t          |          S r   r   r  s     ri   r   z(ectsnoteglobalemodif.<locals>.<listcomp>  r  rk   r   r   r  r  rh   r   r   r   r  r   z!colleur/ectsnoteglobalemodif.html)r  r   r  rv   )r   r!   r   rh   rU   r#   rm   rx   r   r  r  rW   r   r   r   r   r   r   r   r   r   r+   r   r   rt   r   )	r   r   r  r  rv   r  NoteGlobaleEleveformsetr   r   s	            ri   ectsnoteglobalemodifr    s    v333FGL00 =$%;<<<-&&.X.X}?R?RSV?W?W.X.X.X`f&ggpp  rC  DV  W  W  f  f  gm  n  nK-.BS^SdSdSfSf  pG  H  H  H~))%GLII 	4LLNNNL333	4 ")44VE+NN))%GLLL'=G\]d]iGjGju|  GJ  KP  GQ  GQ  ]c  ?d  ?d  e  e  erk   c           
         t          t          |          }t          | j        |          st	          d          S t
          j                            |                              dd          }|t          || j
        pd           }t          j                            |          \  }}t          | d|||||                                                                d          S )Nr   rM  rN  r  r  zmixte/ectscredits.html)rv   creditsr   r   nbeleves)r   r!   r   rh   rU   r#   rm   rx   r  r   r   r*   r  r   r   )r   r   r   rv   r   r  r   s          ri   ectscreditsr    s   f	222FGL00 =$%;<<<]!!!0099:KL^__F|fW\1T22$,,V44MGE'2Vg]ajo  |B  |K  |K  |M  |M  |S  |S  |U  |U  4V  4V  W  W  Wrk   c                 b   t          t          |          }t          | j        |j                  st          d          S t          |j        | j                  }| j        dk    rE|	                                rt          |||j                  S t          | |j        j        |          S t          Nr   rM  r   )r   r#   r   rh   rv   rU   r   r   r   r   rY   r  r   rS   r   r  r   r   s       ri   ficheectspdfr    s    ex000EGL66 =$%;<<<EL',//D~v==?? 	=tE%,777wu|t<<<rk   c                 b   t          t          |          }t          | j        |j                  st          d          S t          |j        | j                  }| j        dk    rE|	                                rt          |||j                  S t          | |j        j        |          S t          r  )r   r#   r   rh   rv   rU   r   r   r   r   rZ   r  r   rS   r  s       ri   attestationectspdfr    s    ex000EGL66 =$%;<<<EL',//D~v==?? 	="4el;;;wu|t<<<rk   c                 :   t          t          |          }t          | j        |          st	          d          S t          || j                  }| j        dk    r;|                                rt          |d |          S t          | |j        |          S t          r  )r   r!   r   rh   rU   r   r   r   r   rY   r  r   rS   r   r   rv   r   s       ri   ficheectsclassepdfr    s    v333FGL00 =$%;<<<FGL))D~v==?? 	7tD000wvy666rk   c                 .   t          t          |          }t          | j        |          st	          d          S t          || j                  }| j        dk    r;|                                rt          |d |          S t          | |j        |          S  r  )r   r!   r   rh   rU   r   r   r   r   rZ   r  r   r  s       ri   attestationectsclassepdfr    s    v333FGL00 =$%;<<<FGL))D~v==?? 	7"4V444wvy666rk   c                 8   t          t          |          }| j        j        }t          t          | j        d         |          }t          | j        ||          st          t          j	        
                    ||                              dd          }t          ||          }t          ||| j        pd| j        pd|          }|                                r)|                                 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   rw   r   r1  z-a_rendre_jourz-a_rendre_heureNr   colleur_devoirszcolleur/devoirs.html)rw   r   devoirs)r   r!   rh   rf   r   r   rz   rS   r,   rm   rx   r  r   r   r9  r   r   r   r   r   )r   r   rv   rf   rw   r  devoirr   s           ri   r  r  ,  s	    Vy111FL Gg)CGTTTG7<// N!!!@@IIJZ[lmmG6'222Fgvw|';tGM<QT[abbbD}} 5		)&)444'0Wd^e2f2fgggrk   c                     t          t          |          }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,   rz   rh   rw   rv   rS   rm   devoirsrendusr   )r   	id_devoirr  r   s       ri   r  r  <  se     Vy111F7<v}== ^))&11F'0Vv2V2VWWWrk   c                    t          t          |          }t          | j        |j        |j                  st          t          |j        |j        | j        pd| j	        pd|          }|j
        r/t          j                            t          |j
        j                  nd}|j        r/t          j                            t          |j        j                  nd}|                                r| j	        r	d| j	        v s|j        d         du r5|r3t          j                            |          rt          j        |           | j	        r	d| j	        v s|j        d         du r5|r3t          j                            |          rt          j        |           |                                 t-          d|j        j                  S t1          | d||d	          S )
zKRenvoie la vue de la page de modification du devoir dont l'id est id_devoirr   Nr   FrB  corriger  zcolleur/devoirModif.html)r  r   )r   r,   rz   rh   rw   rv   rS   r   r   r9  rB  rC  rD  r   r]   rE  r$  r   r   rF  rG  r   r   r   r   )r   r"  r  r   rI  oldfilecorriges         ri   devoirModifr&  E  s    Vy111F7<v}== 	FNFM7<3G4H]Y]hn	o	o	oD<BNUBGLLFN$7888PUGCI>\27<<
6>+>???W\N}} =M 	#i7=88D<Mi<X\a<a<agn<aw~~g&& #	'"""M 	*i7=88D<Mi<X\a<a<agu<aw~~n-- *	.)))		)6=+;<<<'4vT5R5RSSSrk   c                 &   t          t          |          }t          | j        |j        |j                  st          	 |                                 n%# t          $ r t          j
        | d           Y nw xY 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,   rz   rh   rw   rv   rS   r   r   rH   r   r   r   )r   r"  r  s      ri   devoirSupprr(  Z  s     Vy111F7<v}== p p p pw nooooop%v}'7888s   A A65A6c                    t          t          |          }t          t          |          }t          j                            ||          }d}|                                rD|                                }t          j	        
                    t          |j        j                  }nt          ||          }t          | j        pd| j        pd|          }|                                rt| j        s|j        d         du r5|r3t          j	                            |          rt          j        |           |                                 t-          d|j                  S t1          | 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   rB  colleur_devoirzcolleur/renducopie.html)r   r  r   )r   r,   r#   r-   rm   rx   ry   firstrC  rD  r   r]   rB  rE  r   r   r9  r   r   rF  rG  r   r   r   r   )	r   r"  r  r  r   copiecorrigerI  copier   s	            ri   
depotCopier.  f  sR    v)444Fe111E (///OOLG >""$$Z(:;;ef===	7<'4(=	N	N	ND}} 5M 	#T.y9UBBBw~~g&& #	'"""		(&)444'4tv_d6e6efffrk   c                    t          t          |          }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   r9  r   r   r   r   r   )r   r"  r  r   s       ri   depotCopiesr0  {  s     v)444F	FGL0D1F$	G	GD}} 5		(&)444'5PV7W7WXXXrk   c           	      ^    t          t          |          t           fd j        j        j                                        D                       rt          t          j        	                              }|
                                rt                      }t          |d          5 }|D ]}|j        r~|j        j        dd                             d          }t!          j        j        t&          g|dd         R  }|                    |t           j                            |                     	 ddd           n# 1 swxY w Y   |                    d           t/          |d	d
                    j        j        j        j        j                            S t          )zMrenvoie une achive zip de toutes les copies du devoir dont l'id est id_devoirr   c              3   Z   K   | ]%}t          j        j        j                   V  &d S r   )rz   rh   rw   rv   )r   rw   r  r   s     ri   	<genexpr>z ramasseCopies.<locals>.<genexpr>  s8      
u
ugww|FN6=AAA
u
u
u
u
u
urk   )r  wra   N/r   zapplication/zipzcopies_devoir_{}_{}_{}.zip)r  filename)r   r,   r   rh   rf   r   rS   r.   rm   rx   ry   r`   r\   rB  urlr   rC  rD  r   r]   writebasenameseekrV   r   r  rw   r   rv   )r   r"  r   	temp_filemyzipr-  
nomfichierr  s   `      @ri   ramasseCopiesr>    s    v333F

u
u
u
u
uQXQ]QeQnQrQrQtQt
u
u
uuu  ''v'66F}} II	Y$$ 	I I I= I!&!2122!6!<!<S!A!AJ!#j!I*QRR.!I!I!IJKK
27+;+;J+G+GHHH	I	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	qI4EPlPsPstz  uB  CI  CQ  CU  V\  Vc  Vg  Qh  Qh  i  i  i  	is   0BEEEc                 4   t          t          |          }| j        j        }t          t          | j        d         |          }t          | j        ||          st          t          j	        
                    ||                                          }t          ||          }t          ||| j        pd| j        pd|          }|                                r)|                                 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   rw   r   r1  Nr   
colleur_tdzcolleur/tds.html)rw   r   tds)r   r!   rh   rf   r   r   rz   rS   r1   rm   rx   r   r   r   r9  r   r   r   r   r   )r   r   rv   rf   rw   rA  tdr   s           ri   rB  rB    s    Vy111FL Gg)CGTTTG7<// 

88<<>>C	6'	*	*	*B'67<#748MWYZZZD}} 0		VY///',$VY.Z.Z[[[rk   c                    t          t          |          }t          | j        |j        |j                  st          t          |j        |j        | j        pd| j	        pd|          }|j
        r/t          j                            t          |j
        j                  nd}|j        r/t          j                            t          |j        j                  nd}|                                r| j	        r	d| j	        v s|j        d         du r5|r3t          j                            |          rt          j        |           | j	        r	d| j	        v s|j        d         du r5|r3t          j                            |          rt          j        |           |                                 t-          d|j        j                  S t1          | d||d	          S )
zCRenvoie la vue de la page de modification du td dont l'id est id_tdr   Nr   FrB  r$  r@  zcolleur/tdModif.html)rB  r   )r   r1   rz   rh   rw   rv   rS   r   r   r9  rB  rC  rD  r   r]   rE  r$  r   r   rF  rG  r   r   r   r   )r   id_tdrB  r   rI  r%  s         ri   tdModifrE    s    u%%%B7<
2955 	
BIw|';tGM<QT\^	_	_	_D8:
MBGLLBJO444G?AzT27<<
2:?;;;uN}} 4M 	#i7=88D<Mi<X\a<a<agn<aw~~g&& #	'"""M 	*i7=88D<Mi<X\a<a<agu<aw~~n-- *	.)))		bil333'0r1F1FGGGrk   c                     t          t          |          }t          | j        |j        |j                  st          |                                 t          d|j        j	                  S )zcEssaie de supprimer le devoir dont l'id est id_devoir puis redirige vers la page de gestion des tdsr   r@  )
r   r1   rz   rh   rw   rv   rS   r   r   r   )r   rD  rB  s      ri   tdSupprrG    sV     u%%%B7<
2955 IIKKKL"),///rk   c                 4   t          t          |          }| j        j        }t          t          | j        d         |          }t          | j        ||          st          t          j	        
                    ||                                          }t          ||          }t          ||| j        pd| j        pd|          }|                                r)|                                 t#          d|j                  S t'          | d|||d	          S )
ug   renvoie la page des cours de la classe dont l'id est id_classe, dans la matière courante du professeurr   rw   r   r1  Nr   colleur_courszcolleur/cours.html)rw   r   cours)r   r!   rh   rf   r   r   rz   rS   r2   rm   rx   r   r   r   r9  r   r   r   r   r   )r   r   rv   rf   rw   rJ  courr   s           ri   rJ  rJ    s    Vy111FL Gg)CGTTTG7<// 
-

fW

=
=
A
A
C
CEw///DWfgl&:d7=;PDZ^___D}} 3			222'.7DZ_0`0`aaark   c                    t          t          |          }t          | j        |j        |j                  st          t          |j        |j        | j        pd| j	        pd|          }|j
        r/t          j                            t          |j
        j                  nd}|                                r| j	        r	d| j	        v s|j        d         du r5|r3t          j                            |          rt          j        |           |                                 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   FrB  rI  zcolleur/coursModif.html)rJ  r   )r   r2   rz   rh   rw   rv   rS   r   r   r9  rB  rC  rD  r   r]   rE  r   r   rF  rG  r   r   r   r   )r   id_coursrJ  r   rI  s        ri   
coursModifrN    s(    EX
.
.
.E7<el;; 	5=%,0DW]EZVZej	k	k	kD;@=SBGLLEM$6777eG}} :M 	#i7=88D<Mi<X\a<a<agn<aw~~g&& #	'"""		999'3U$4O4OPPPrk   c                     t          t          |          }t          | j        |j        |j                  st          |                                 t          d|j        j	                  S )zcEssaie de supprimer le cours dont l'id est id_cours puis redirige vers la page de gestion des coursr   rI  )
r   r2   rz   rh   rw   rv   rS   r   r   r   )r   rM  rJ  s      ri   
coursSupprrP    sV     EX
.
.
.E7<el;; 	LLNNNOU\_555rk   c                 4   t          t          |          }| j        j        }t          t          | j        d         |          }t          | j        ||          st          t          j	        
                    ||                                          }t          ||          }t          ||| j        pd| j        pd|          }|                                r)|                                 t#          d|j                  S t'          | d|||d	          S )
uk   renvoie la page des documents de la classe dont l'id est id_classe, dans la matière courante du professeurr   rw   r   r1  Nr   colleur_autrezcolleur/autre.html)rw   r   docs)r   r!   rh   rf   r   r   rz   rS   r3   rm   rx   r   r   r   r9  r   r   r   r   r   )r   r   rv   rf   rw   rS  docr   s           ri   autrerU    s    Vy111FL Gg)CGTTTG7<// 			 	 w	 	?	?	C	C	E	ED
&
1
1
1C)=gm>St]`aaaD}} 3			222'.7DY]0^0^___rk   c                    t          t          |          }t          | j        |j        |j                  st          t          |j        |j        | j        pd| j	        pd|          }|j
        r/t          j                            t          |j
        j                  nd}|                                r| j	        r	d| j	        v s|j        d         du r5|r3t          j                            |          rt          j        |           |                                 t+          d|j        j                  S t/          | d||d          S )	zJRenvoie la vue de la page de modification du document dont l'id est id_docr   Nr   FrB  rR  zcolleur/autreModif.html)rT  r   )r   r3   rz   rh   rw   rv   rS   r   r   r9  rB  rC  rD  r   r]   rE  r   r   rF  rG  r   r   r   r   )r   id_docrT  r   rI  s        ri   
autreModifrX     s(    	(f---C7<CJ77 	ck3:w|/CtGMDYUYdg	h	h	hD9<OBGLLCK$4555%G}} 8M 	#i7=88D<Mi<X\a<a<agn<aw~~g&& #	'"""		777'33d4K4KLLLrk   c                     t          t          |          }t          | j        |j        |j                  st          |                                 t          d|j        j	                  S )zhEssaie de supprimer le document dont l'id est id_doc puis redirige vers la page de gestion des documentsr   rR  )
r   r3   rz   rh   rw   rv   rS   r   r   r   )r   rW  rT  s      ri   
autreSupprrZ    sV     	(f---C7<CJ77 JJLLLOSZ]333rk   )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   accueil.modelsr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   mixte.mixter4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   django.contribrH   django.contrib.auth.decoratorsrI   django.db.modelsrJ   rK   rL   rM   rN   rO   rP   django.db.models.functionsrQ   datetimerR   django.httprS   rT   rU   rV   django.forms.formsetsrW   pdf.pdfrX   rY   rZ   r[   rC  r(  zipfiler\   ecolle.settingsr]   r^   r_   ior`   rs   rj   rp   rt   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r/  r:  r=  rK  rQ  rT  rX  r[  r^  r`  rf  re  rj  rl  rq  rs  ru  rw  rz  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.  r0  r>  rB  rE  rG  rJ  rN  rP  rU  rX  rZ  r   rk   ri   <module>rk     s   @ @ @ @ @ @ @ @ @ @ 3 3 3 3 3 3 3 3 f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f  f q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q  q # # # # # # ; ; ; ; ; ; A A A A A A A A A A A A A A A A A A , , , , , ,       R R R R R R R R R R R R 1 1 1 1 1 1 G G G G G G G G G G G G 				 



       > > > > > > > > > >        ; ; ;T T T` ` `    < < < <L L L  *	222& & 32& *	2221 1 321 *	222z z 32z *	222k k 32k *	222" " " 32"H *	222h h 32h *	222
4 
4 32
4 *	222' ' 32' *	222E E 32E *	222z z 32z0 *	222  32* *	222_ _ 32_* *	222> > 32> *	222] ] 32]$ *	222/ / 32/ *	222, , 32, *	222, , 32, *	222, , 32, *	222+ + 32+ *	222* * 32* *	222	F 	F 32	F *	222	M 	M 32	M *	222I I I 32I *	2221 1 321 *	222@ @ 32@ *	222] ] 32] *	222E E 32E *	222# # 32#
 *	222/ / 32/ *	222
G 
G 32
G *	222	U 	U 32	U *	2227 7 327 *	222v v 32v$ *	222} } 32}" *	222e e 32e *	2229 9 3292 *	222o o 32o *	222l l 32l2 *	222e e 32e *	222# # 32# *	2220 0 320 *	2224e 4e 324el '9===o o >=o '9===
Y 
Y >=
Y '9===7 7 >=7 /Y777N N 87N. /Y777e e 87e  /Y777e e 87e" '9===W W W >=W '9===  >= '9===  >= /Y777  87 '9===  >= *	222h h 32h *	222X X 32X *	222T T 32T( *	222	9 	9 32	9 *	222g g 32g( *	222Y Y 32Y *	222  32( *	222\ \ 32\ *	222H H 32H& *	2220 0 320 *	222b b 32b *	222Q Q 32Q *	2226 6 326 *	222` ` 32` *	222M M 32M *	2224 4 324 4 4rk   