
    X@	gT                     v	   d dl mZmZmZ d dlmZmZ d dlmZ d dl	m
Z
mZ d dlmZmZ d dl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" 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d d	l8m9Z9m:Z:m;Z; d d
l<m=Z=m>Z>m?Z?m@Z@ d dlAmBZBmCZC d dlDmEZE d dlFmGZGmHZH d dlIZIdZJd ZKd ZLd ZMd ZN eeKd          d             ZO eeKd          d             ZP eeKd          d             ZQ eeKd          d             ZR eeKd          d             ZS eeKd          d             ZT eeKd          d             ZU eeKd          d             ZV eeKd          d             ZW eeKd          d             ZX eeKd          d              ZY eeKd!          dEd"            ZZ eeKd!          d#             Z[ eeKd!          d$             Z\ eeKd!          d%             Z] eeKd!          d&             Z^ eeKd!          d'             Z_ eeKd!          d(             Z` eeKd!          d)             Za eeKd!          d*             Zb eeKd!          d+             Zc eeKd!          d,             Zd eeKd!          d-             Ze eeKd          d.             Zf eeKd          d/             Zg eeKd          d0             Zh eeKd          d1             Zi eeKd          dFd2            Zj eeKd          dFd3            Zk eeKd          dGd4            Zl eeKd          dGd5            Zm eeKd!          d6             Zn eeKd!          d7             Zo eeKd!          d8             Zp eeKd!          d9             Zq eeKd!          d:             Zr eeKd!          d;             Zs eeMd          d<             Zt eeMd          d=             Zu eeMd          d>             Zv eeLd          d?             Zw eeLd          dEd@            Zx eeLd          dA             Zy eeLd          dB             Zz eeLd          dC             Z{ eeLd          dD             Z|dS )H    )renderredirectget_object_or_404)authenticatelogin)user_passes_test)AdminConnexionFormInformationForm)ECTSFormMatiereECTSForm)MoisFormRamassageFormMatiereClasseSemaineSelectFormColleurSelectForm)ConfigNoteSemaineMatiereColleur	RamassageClasseEleveGroupeCreneaumoisMatiereECTSNoteECTSInformation)mixtegroupemixtegroupesupprmixtegroupeSwapmixtegroupemodifmixtecolloscopemixtecolloscopemodifmixtecreneauduplimixtecreneausupprmixteajaxcompatmixteajaxcolloscopemixteajaxcolloscopeelevemixteajaxmajcolleurmixteajaxcolloscopeeffacermixteajaxcolloscopemultimixteajaxcolloscopemulticonfirmmixteRamassagePdfParClassemixteCSVmixtegroupeCreermixtegroupecsvmixteColloscopeImport)Http404HttpResponseHttpResponseForbidden)PdfeasyPdfcreditsectsattestationects)Table
TableStyle)	timedelta)MaxMinN   c                 &    | j         o
| j        dk    S )u>   Renvoie True si l'utilisateur est le secrétariat, False sinon   Secrétariat)is_authenticatedusernameusers    !/opt/e-colle/secretariat/views.py	is_secretrG      s     BT]N%BB    c                 f    t          |           o"t          j                                        j        S )uN   Renvoie True si l'utilisateur est le secrétariat et ECTS activé, False sinon)rG   r   objects
get_configectsrD   s    rF   is_secret_ectsrM      s$    T???v~88::??rH   c                 ~    t          |           o.t          j                                        j        t
          z  dk    S )u   Renvoie True si l'utilisateur est le secrétariat et ECTS activé avec droits  de modification des matires et des coeffs, False sinonr   )rM   r   rJ   rK   
ects_modifSECRETARIATrD   s    rF   is_secret_modif_ectsrQ      s1    $YFN$=$=$?$?$J;$VXY$YYrH   c                    t          | j                  rt          d          S d}t          | j        pdddi          }|                                rA|j        d         }t          d|          }|rt          | |           t          d          S d	}d	|j	        d         j
        j        d
<   t          | d||d          S )u   Renvoie la vue de la page de connexion du secrétariat. Si le secrétariat est déjà connecté, redirige vers la page d'accueil du secrétariataction_secretFNrC   rA   initialpassword)rC   rV   Treadonlyzsecretariat/home.html)formerror)rG   rE   r   r	   POSTis_validcleaned_datar   r   fieldswidgetattrsr   )requestrY   rX   rV   rE   s        rF   connecra      s     )(((Egl2dZ<WXXXD}} $Z0^XFFF 	'$O,,,E7;DK
"(4'1$u2M2MNNNrH   login_secret)	login_urlc                 `    t          | ddt          j                                        i          S )u3   Renvoie la vue de la page d'accueil du secrétariatzsecretariat/action.htmlclasses)r   r   rJ   all)r`   s    rF   actionrg   /   s*     '3Yv~?Q?Q?S?S4TUUUrH   c                 >   t          | j        pd          }| j        dk    r|                                r|j        d         }|j        d         }|j        d         }|j        d         }|j        | j        d<   |j        | j        d<   |j        | j        d<   |j        | j        d<   t          d          S dx}x}x}x}x}}n&	 t          j	        
                    | j        d                   }t          j	        
                    | j        d                   }t          j	        
                    | j        d                   }t          j	        
                    | j        d                   }t          j	                            ||||          }t          |          }t          ||||d	
          }n2# t           $ r% dx}x}x}x}x}}t          | j        pd          }Y nw xY wt#          | d|||||||t          j	                                        d          S )uD   Renvoie la vue de la page de consultation des résultats des classesNrZ   classematiereseminsemaxresultats_secretpk)ri   rj   rk   rl   rT   zsecretariat/resultats.html)rX   ri   rj   semainesnotesrk   rl   re   )r   rZ   methodr[   r\   ro   sessionr   r   rJ   getr   r   r   classe2resultatnext	Exceptionr   rf   )r`   rX   ri   rj   rk   rl   rp   
generateurs           rF   	resultatsry   4   se    *',*>$??D~v==?? 		0&x0F'	2G%g.E%g.E(.	GOH%)0GOI&',xGOG$',xGOG$.///7;;;w;u;U;8JJ	}^''7?8+D'EEFo))W_Y-G)HHGO''7?7+C'DDEO''7?7+C'DDE
 55gfU5QQJJ''H1fW^gluz<{<{|||DD  	H 	H 	H;??F?7?5??x
1',2F$GGDDD	H '6tV^eqy  CM  W\  ej  u{  uC  uG  uG  uI  uI  8J  8J  K  K  Ks   B,F7 7,G&%G&c                    t          t          |          }t          t          |          }t          t          |          }t          t          |          }t          j                            ||||          }	t          |	          }
t          d          }d	                    |j
        |j
                  |d<   t          j        |          }|                    g dd |
D             z              d t          d	          D             d
d	<   dd<   |	D ]A}|                    |d         |d         |d         gfd|d         D             z              B|S )u   Renvoie le fichier CSV des résultats de la classe dont l'id est id_classe, dans la matière dont l'id est id_matiere
    entre les semaines dont l'id est id_semin et id_semaxrn   text/csvcontent_typez*attachment; filename="resultats_{}_{}.csv"Content-Disposition)u   Élèverangmoyennec                 B    g | ]}d                      |j                  S )zS{})formatnumero).0semaines     rF   
<listcomp>zresultatcsv.<locals>.<listcomp>`   s'    1g1g1gSZ%,,w~2N2N1g1g1grH   c                 .    i | ]}|t          |          S  )str)r   is     rF   
<dictcomp>zresultatcsv.<locals>.<dictcomp>a   s     ,,,Q#a&&,,,rH      zn.n.abs   elever   r   c                 R    g | ]#}d                      fd|D                       $S )|c                 ,    g | ]}|d                   S )noter   )r   r   notations     rF   r   z*resultatcsv.<locals>.<listcomp>.<listcomp>e   s'    OyOyOykoPXY]^dYePfOyOyOyrH   )join)r   valuer   s     rF   r   zresultatcsv.<locals>.<listcomp>e   sX      FY  FY  FY  @EchhOyOyOyOysxOyOyOyFzFz  FY  FY  FYrH   r   )r   r   r   r   r   rJ   ru   rv   r4   r   nomcsvwriterwriterowrange)r`   	id_classe
id_matiereid_seminid_semaxri   rj   rk   rl   rx   rp   responser   r   r   s                 @rF   resultatcsvr   S   s    Vy111F:666Gg222Eg222E--gfU5IIJJH444H&R&Y&YZ`Zdelep&q&qH"#Z!!F
OO0001g1g^f1g1g1gghhh,,%)),,,HHRLHRL Z ZgtF|DOD  FY  FY  FY  FY  IM  NW  IX  FY  FY  FY  Y  	Z  	Z  	Z  	ZOrH   c           
      0   t           j                            d          }t          | j        pdt          d                    }|                                r#|                                 t          d          S t          | d||ddd	d
dd          S )uh   Renvoie la vue de la page où l'on déterminer l'éventuel message d'Accueil des colleurs et/ou élèvesr?   )
expediteurNinstanceinformation_secretzmixte/information.htmlColleursu   ÉlèveszTout le monde)   r?      F)rX   infosexpeisadmin)	r   rJ   filterr
   rZ   r[   saver   r   )r`   r   rX   s      rF   informationr   h   s     &&A&66E7</4KST<U<U<UVVVD}} .		,---'2D5\fjt  yH  ZI  ZI  V[  5\  5\  ]  ]  ]rH   c                 t    t          t          |          }|                                 t          d          S )z%Supprime l'info dont l"id est id_inforn   r   )r   r   deleter   )r`   id_infoinfos      rF   informationSupprr   r   s2     [W555DKKMMM()))rH   c                 .   |dk    rt          t          |          }nt          dd          }t          | j        pd|          }|                                r#|                                 t          d          S t          | d	|d
|dk    d          S )z$Modifie l'info dont l"id est id_info0rn   r?   r   )r   destinataireNr   r   zmixte/informationmodif.htmlF)rX   r   modif)r   r   r
   rZ   r[   r   r   r   )r`   r   r   rX   s       rF   informationModifr   y   s     #~~ 999!<<<7</4DAAAD}} .		,---'8$SXcjnqcq:r:rsssrH   c                    t          | j        pd           }| j        dk    r|                                r{|j        d         j        | j        d<   |j        d         sdn|j        d         j        | j        d<   |j        d         sdn|j        d         j        | j        d<   t          d          S n
	 t          j	        
                    | j        d         	          }| j        d         sdn| j        d         }| j        d         sdn| j        d         }t          j	                            |
          }|r|                    |          }|r|                    |          }|                    ddddd                              dd          }t          |||d          }n# t          $ r dx}}Y nw xY wt!          | d|||d          S )NrZ   colleurrj   Fmatierenoteri   
classenotenotes_secretrn   r   )rj   ri   r   eleve__userr   z-date_collez-heure)r   rj   ri   rT   zsecretariat/notes.html)rX   r   rq   )r   rZ   rr   r[   r\   ro   rs   r   r   rJ   rt   r   r   select_relatedorder_byrw   r   )r`   rX   r   rj   ri   rq   s         rF   rq   rq      s   W\1T22D~==?? 	,)-):9)E)HGOI&:>:KI:V-{UU\`\mnw\x\{GOM*9=9J89T,xEEZ^ZkltZuZxGOL)N+++		,	ho))W_Y-G)HHG#*?=#AeeewWdGeG")/,"?bUUW_UaEbF L''''::E 8w77 6f55((yR[\\eefst|}}E$'W_e/f/fgggDD  	$ 	$ 	$##Geee	$ '2DW_d3e3efffs   4A#F) )F:9F: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 )zLRenvoie la vue de la page du colloscope de la classe dont l'id est id_classer   r   	transposeT1)	listr   rJ   rf   rw   r3   rs   colloscope2ro   )r`   r   r   rp   rk   rl   s         rF   
colloscoper      s     '/%%''((HQKe   CK7?::w{?[_c?c?c	wy58EHEEEs	   > Ac           
         t          t          |          }t          t          |          }t          t          |          }t          j                                        j        }t          | ||||t          |                    S )zRenvoie la vue de la page du colloscope de la classe dont l'id est id_classe entre les semaines dont l'id est id_semin et id_semaxrn   )	r   r   r   r   rJ   rK   modif_secret_colr#   int)	r`   r   r   r   r   ri   rk   rl   isprofs	            rF   r   r      sn     Vy111F
Gx
0
0
0E
Gx
0
0
0E^&&((9F76%fS^^LLLrH   c                     t          t          |          }t          t          |          }t          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_semaxrn   )r   r   r   r6   r`   r   r   r   ri   rk   rl   s          rF   colloscopePdfr      sL     Vy111F
Gx
0
0
0E
Gx
0
0
0EveE"""rH   c                     t          t          |          }t          t          |          }t          t          |          }t          | |||          S r   )r   r   r   r/   r   s          rF   colloscopeCsvr      sN     Vy111F
Gx
0
0
0E
Gx
0
0
0EGF5///rH   accueilc                    t           j                                        j        st	          d          S t          t          |          }t          t          |          }t          t          |          }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_semax   Accès non autorisérn   )	r   rJ   rK   r   r5   r   r   r   r$   )r`   r   r   r   creneaumodifri   rk   rl   s           rF   colloscopeModifr      sx     >$$&&7 =$%;<<<Vy111F
Gx
0
0
0E
Gx
0
0
0EuU<HHHrH   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_classern   r   )r   r   r   rJ   rK   r   r5   r2   r`   r   ri   s      rF   colloscopeImportr      sN     Vy111F>$$&&7 =$%;<<< 000rH   c                     t           j                                        j        st	          d          S t          t          |          }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   rn   )r   rJ   rK   r   r5   r   r   r&   r`   
id_creneaur   r   creneaus        rF   creneauSupprr      sR     >$$&&7 =$%;<<<g444GWWXh???rH   c                     t           j                                        j        st	          d          S t          t          |          }t          | |j        j	        |||          S )zMRenvoie la vue de la page de modification du creneau dont l'id est id_creneaur   rn   )r   )
r   rJ   rK   r   r5   r   r   r   ri   ro   r   s        rF   creneauModifr      s]     >$$&&7 =$%;<<<g444G77>#4XhT[\\\\rH   c                     t           j                                        j        st	          d          S t          t          |          }t          | j        |||          S )zLRenvoie la vue de la page de duplication du creneau dont l'id est id_creneaur   rn   )	r   rJ   rK   r   r5   r   r   r%   rE   r   s        rF   creneauDuplir      sT     >$$&&7 =$%;<<<g444GW\'(8DDDrH   c                     t           j                                        j        st	          d          S 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   rn   )r   rJ   rK   r   r5   r   r   r'   r   s      rF   
ajaxcompatr      sL     >$$&&7 =$%;<<<Vy111F6"""rH   c                     t           j                                        j        st	          d          S t          t          |          }t          t          |          }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   rn   )	r   rJ   rK   r   r5   r   r   r   r*   )r`   r   r   ri   rj   s        rF   ajaxmajcolleurr      s`     >$$&&7 =$%;<<<Vy111Fg444Gwv...rH   c                 h   t           j                                        j        st	          d          S t          t          |          }t          t          |          }t          t          |          }t          t          |          }	t          t          |          }
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   rn   r   )r   rJ   rK   r   r5   r   r   r   r   r   r   r(   )r`   r   
id_colleur	id_groupenumero_semainer   rj   r   grouper   r   s              rF   ajaxcolloscoper     s     >$$&&7 =$%;<<<g444Gg444GVy111Fg^<<<Gg444GwwvggFFFrH   c                 >   t           j                                        j        st	          d          S t          t          |          }t          t          |          }t          t          |          }	t          t          |          }
t          ||||	|
|          S )u   Ajoute la colle propre au quintuplet (matière,colleur,eleve,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   rn   r   )r   rJ   rK   r   r5   r   r   r   r   r   r)   )r`   r   r   id_elever   r   r   rj   r   r   r   s              rF   ajaxcolloscopeelever     s     >$$&&7 =$%;<<<g444Gg444Gg^<<<Gg444G#GGXggeTTTrH   c                     t           j                                        j        st	          d          S t          t          |          }t          t          |          }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   rn   )	r   rJ   rK   r   r5   r   r   r   r+   )r`   r   r   r   r   s        rF   ajaxcolloscopeeffacerr     s`     >$$&&7 =$%;<<<g^<<<Gg444G%gg666rH   c
                 Z   t           j                                        j        st	          d          S |dk    r-t          t          |          }
t          t          |          }nd}
d}t          t          |          }t          t          |          }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èrer   z-1rn   r   r   r   )r   rJ   rK   r   r5   r   r   r   r   r   r,   r`   r   r   r   r   r   r   duree	frequencepermutationrj   r   r   r   s                 rF   ajaxcolloscopemultir   '  s     >$$&&7 =$%;<<<T!'Z888!'Z888g^<<<Gg444G#GGIhwwW\^gituuurH   c
                 D   t           j                                        j        st	          d          S t          t          |          }
t          t          |          }t          t          |          }t          t          |          }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   rn   r   )r   rJ   rK   r   r5   r   r   r   r   r   r-   r   s                 rF   ajaxcolloscopemulticonfirmr   :  s     >$$&&7 =$%;<<<g444Gg444Gg^<<<Gg444G*779XgV]^cenp{|||rH   c                     t                      \  }}t          ||| j        pd          }|                                r|j        d         }|j        d         }t
          j                            ||          \  }}t          | d|||d          S )u?   Renvoie la vue de la page de récapitulatif des heures de colleNmoisMinmoisMaxzsecretariat/recapitulatif.html)rX   decompte	effectifs)	r   r   rZ   r[   r\   r   rJ   r  r   )r`   r   r   rX   listeDecompter  s         rF   recapitulatifr  H  s     FFOGGGGGL$8D99D}} -!),!),%-66wwGGM)':4S`mv;w;wxxxrH   c                    t          t          d                    ddgz   }t          j                            dddd                              dd	d
          }d}t          d          }d                    |          |d<   t          j	        |          }|
                    g d           |D ]D}|
                    |j        j        j                                        |j        j        j                                        |j        j                                        |j        j        |j        dnWd                    |j        j        j                                        |j        j        j                                                  |j        j        |j                            d          d                    |j        dz  |j        dz            ||j                 |j        j        g
           F|S )Nr   zn.nAbscolleur__userr   r   ri   colleur__user__last_namecolleur__user__first_name
date_collez
compta.csvr{   r|   attachment; filename={}r~   )
Nomu   prénom   Matièreri   u	   étudiantr   dateheurer   ztemps (min)u   élève fictifz{} {}z%d/%m/%Yz	{}h{:02d}<   )r   r   r   rJ   r   r   r4   r   r   r   r   r   rE   	last_nameupper
first_nametitlerj   r   ri   r   r   r   r
  strftimer  r   temps)r`   LISTE_NOTESrq   
nomfichierr   r   r   s          rF   comptar  S  s   uRyy//U5M1KL''yQYZZccd~  A\  ^j  k  kEJ444H&?&F&Fz&R&RH"#Z!!F
OOsssttt f f 	*4::<<dl>O>Z>`>`>b>bdhdpdtdzdzd|d|  C  J  N $
 2tzG`GfGfGhGhimisix  jD  jJ  jJ  jL  jL  9M  9ML!9!9*!E!E{GYGYZ^ZdfhZhimistvivGwGw  zE  FJ  FO  zP  RV  R^  Rde 	f 	f 	f 	f OrH   c           	         t          | j        pd          }|                                r#|                                 t	          d          S t
          j                                        }t          | d||t          |          d          S )z:Renvoie la vue de la page de ramassage des heures de colleN	ramassagezsecretariat/ramassage.html)rX   
ramassageshauteur)
r   rZ   r[   r   r   r   rJ   rf   r   len)r`   rX   r  s      rF   r  r  f  s     -..D}} %		$$$ $$&&J'6tQ[fijtfufu7v7vwwwrH   c                 t    t          t          |          }|                                 t          d          S )znEssaie d'effacer le ramassage dont l'id est id_ramassage, puis redirige vers la page de gestion des ramassagesrn   r  )r   r   r   r   )r`   id_ramassager  s      rF   ramassageSupprr!  p  s6      	\:::IK   rH   c                 $   t          |          }t          |          }t          t          |          }g d}t          d          }t          j                            |j                                                  rN|sLt          j                            |j                                      t          d                    d         }n2t          j                            t          d                    d	         }|j        }t          j                            |d
d||          \  }	}
d                    |j        |j        |j        |j        |j        |j                  }d                    |          |d<   t#          j        |          }|                    g d|rdgng z   d |
D             z              g d}|r|	D ]\  }}}}}}}|                    |                                |                                ||         |                                |                                ||dz  dz            gfdt-          t/          |
                    D             z              n|	D ]\  }}}}}}|                    |                                |                                ||         |                                |                                gfdt-          t/          |
                    D             z              |S )um   Renvoie le fichier CSV du ramassage par année/effectif correspondant au ramassage dont l'id est id_ramassagern    Janvieru   FévrierMarsAvrilMaiJuinJuilletu   Août	SeptembreOctobreNovembreu	   Décembrer{   r|   moisFin__ltmoisFinmoisFin__maxlundi
lundi__minTFr   	parClasseparMoisfullzramassage{}-{}-{}_{}-{}-{}.csvr  r~   )r     ÉtablissementGrader     Prénomr   c                 @    g | ]\  }}d                      ||          S )u   {}è. ann.  {}r   r   anneeeffectifs      rF   r   z ramassageCSV.<locals>.<listcomp>  sn      kt  kt  kt  Xf  X]  ^fk{  lC  lC  DI  JR  lS  lS  kt  kt  ktrH   inconnuu	   certifiézbi-admissibleu   agrégéz
chaire sup   r   c                 t    g | ]4}d                      |         dz                                dd          5S {:.2f}r  .,r   replacer   r   heuress     rF   r   z ramassageCSV.<locals>.<listcomp>  s      {J  {J  {J  op  |D  |K  |K  LR  ST  LU  VX  LX  |Y  |Y  |a  |a  be  fi  |j  |j  {J  {J  {JrH   c                 t    g | ]4}d                      |         dz                                dd          5S rD  rH  rJ  s     rF   r   z ramassageCSV.<locals>.<listcomp>  s      et  et  et  YZemetetu{|}u~  @B  vB  fC  fC  fK  fK  LO  PS  fT  fT  et  et  etrH   )r   r   r   r4   rJ   r   r0  exists	aggregater=   r   r>   decompteRamassager   yearmonthdayr   r   r   r  r  r   r  )r`   r   r6  r7  r  
LISTE_MOISr   debutfinr  r  r  r   LISTE_GRADESrj   etablissementgradecolleur_nomcolleur_prenom_moirK  s                        @rF   ramassageCSVr]  w  s    'llGt99D	\:::I D  D  DJ444HI,=>>EEGG FPT F!((Y5F(GGQQRUV_R`R`aabpq))#g,,77E

C(0BB9TXfkv}  GKB   L   LM9/66uz%+eiX[X`adajknkrssJ&?&F&Fz&R&RH"#Z!!F
OOIIIX_LgVHHegh  kt  kt  js  kt  kt  kt  t  u  u  uPPPL uZg 	K 	KVG]E;3PVOOW]]__m.A.A.C.C ,U 3[5F5F5H5H.J^J^J`J`blmpqsmstumubvx {J  {J  {J  {J  ty  z}  ~G  zH  zH  tI  tI  {J  {J  {JJ K K K K	K Vc 	u 	uQG]E;6OOW]]__m.A.A.C.C ,U 3[5F5F5H5H.J^J^J`J`b et  et  et  et  ^c  dg  hq  dr  dr  ^s  ^s  et  et  ett u u u uOrH   c                   + t                    dz  t          |          }t          t          |          }g d}g d}t          d          }t          j                            |j                                                  r_|s]t          j                            |j                                      t          d                    d	         t          d
          z   }n2t          j                            t          d                    d         }|j        }	d|j        z  |j        z   d
z
  }
t          j                            |dd|          \  }+d                    |j        |j        |j        |	j        |	j        |	j                  }d                    |          |d<   t%          d                    ||j                 |j        ||	j                 |	j                  dd          }|j        d         d|j        z  z
  dz   t)          +          z   z  }d}t+          d |D                       }|                                 t/          g d          }g drdgng z   d +D             z   g+fdt1          t3          d|                    D             z   }d
x}x}x}x}}|D ]0\  }}}|                                ||         d<   |d
k    r/|                    d d|fdt3          ||z   d
z
  d          f           ||z  }|D ]\  }}}|                                ||         d
<   |d
k    r/|                    d d
|fd
t3          ||z   d
z
  d          f           ||z  }|D ]l\  }}} |||         d<   | d
k    r/|                    d d|fdt3          || z   d
z
  d          f           || z  }ry|D ]s\  }!}"}#|!||         d!<   |#d
k    r/|                    d d!|fd!t3          ||#z   d
z
  d          f           ||#z  }|"D ]#\  }$}%|$|
k     r,|                    d"d#|fd#t)          +          z   |fd$           ||$dz           ||         d#<   t1          t)          +                    D ]@}&d%                    |%|&         d&z                                d'd(          ||         |&d)z   <   A|d
z  }|d*k    rn|dk    rgt;          |d|z  d!|z  |d!|z  |g|gt)          +          z  z   t3          d
|z   d*          |gz  +          }'|'                    |           |'                    |dd          \  }(})|'                     ||j        d         |(z
  dz  |j!        |)z
  |dz  z
             |"                                 |                                 t/          g d          }|dz  }g d,d- +D             z   g+fd.t1          t3          d|                    D             z   }|dz  }|dz  }|dz  }|dz  }d
}|d
k    r"|                                |d
         d<   |dk    r*|                    d d/dt3          |d
z
  d          f           |d
k    r|                                |d
         d
<   |dk    r*|                    d d0d
t3          |d
z
  d          f           |d
k    r|||d
         d<   |dk    r*|                    d d1dt3          |d
z
  d          f           |d
k    r;|!|d
         d!<   |dk    r*|                    d d2d!t3          |d
z
  d          f           %u|D ]\  }!}%|!||         d!<   t1          t)          +                    D ]@}&d%                    |%|&         d&z                                d'd(          ||         |&d#z   <   A|d
z  }|d*k    r&|dk    rt;          |d|z  d!|z  |d!|z  g|gt)          +          z  z   t3          d
|z   d*          |gz  +          }'|'                    |           |'                    |dd          \  }(})|'                     ||j        d         |(z
  dz  |j!        |)z
  |dz  z
             |"                                 |                                 t/          g d          }|dz  }g dd3 +D             z   g+fd4t1          t3          d|                    D             z   }|dz  }|dz  }|dz  }d
}|d
k    r|                                |d
         d<   |dk    r*|                    d d/dt3          |d
z
  d          f           |d
k    r|                                |d
         d
<   |dk    r*|                    d d0d
t3          |d
z
  d          f           |d
k    r;||d
         d<   |dk    r*|                    d d1dt3          |d
z
  d          f           nА2t;          |d|z  d!|z  |d!|z  g|gt)          +          z   z  z   t3          d
|z   d*          |gz  +          }'|'                    |           |'                    |dd          \  }(})|'                     ||j        d         |(z
  dz  |j!        |)z
  |dz  z
             |"                                 |#                                 |j$        %                                }*|j$        &                                 |'                    |*           |S )5um   Renvoie le fichier PDF du ramassage par année/effectif correspondant au ramassage dont l'id est id_ramassager?   rn   r#  )janfevmaravrmaijuinjuilaousepoctnovdeczapplication/pdfr|   r.  r0  r1  r   daysr2  r3  rB  Fr4  zramassage{}-{}-{}_{}-{}-{}.pdfr  r~   u&   Ramassage des colles de {} {} à {} {}   )titremarge_xmarge_yr   	   c                     g | ]\  }}}|	S r   r   )r   xyzs       rF   r   z ramassagePdf.<locals>.<listcomp>  s    111%!AaA111rH   ))GRIDr   r   r   r   r   )r   r   r   )
BACKGROUNDrw  )r   r   )333333?rz  rz  )VALIGNrw  rx  MIDDLE)ALIGNrw  rx  CENTRE)FACErw  rx  zHelvetica-Bold)SIZErw  rx     )r  r8  r9  r   Moisc                 @    g | ]\  }}d                      ||          S u   {}è. ann.
{}r<  r=  s      rF   r   z ramassagePdf.<locals>.<listcomp>  sb      _h  _h  _h  LZ  LQ  RZ_o_v_vw|  ~F  `G  `G  _h  _h  _hrH   c                 B    g | ]}d gdz   t                    z   z  S r$     r  )r   r   r  r6  s     rF   r   z ramassagePdf.<locals>.<listcomp>  s      jn  jn  jn  OP  ln  ko  qr  sz  qz  {~  H  {I  {I  qI  kJ  jn  jn  jnrH      SPANr   	TEXTCOLORr  )r   r   r   z{:.2f}hr  rF  rG        )	colWidths
rowHeights)r  r8  r9  r   r  c                 @    g | ]\  }}d                      ||          S r  r<  r=  s      rF   r   z ramassagePdf.<locals>.<listcomp>  sb      `i  `i  `i  M[  MR  S[`p`w`wx}  G  aH  aH  `i  `i  `irH   c                 <    g | ]}d gdt                    z   z  S )r$  r  r  r   r   r  s     rF   r   z ramassagePdf.<locals>.<listcomp>  ss      kg  kg  kg  HI  mo  lp  rs  tw  xA  tB  tB  rB  lC  kg  kg  kgrH   )r   r   )r   r   )r?   r   )r   r   c                 @    g | ]\  }}d                      ||          S r  r<  r=  s      rF   r   z ramassagePdf.<locals>.<listcomp>	  sV      U^  U^  U^  BP  BG  HPUeUlUlmrs{U|U|  U^  U^  U^rH   c                 <    g | ]}d gdt                    z   z  S r  r  r  s     rF   r   z ramassagePdf.<locals>.<listcomp>	  ss      `\  `\  `\  }~  bd  ae  gh  il  mv  iw  iw  gw  ax  `\  `\  `\rH   )(r   r   r   r4   rJ   r   r0  rM  rN  r=   r<   r   r>   rP  rQ  rO  r   rR  r7   ro  r  sumdebutDePager;   r   minr  addrI  r:   setStylewrapOndrawOnrt  	finDePager   buffergetvalueclosewrite),r`   r   r6  r7  r  rS  LISTE_MOIS_COURTr   rT  rU  	moisdebutr  r  pdf
largeurcel
hauteurcel
nbKolleurs
LIST_STYLEdataligneMat	ligneEtab
ligneGradeligneColleur	ligneMoisrj   
listeEtabsnbEtabsrW  listeGradesnbGradesrX  listeColleurs
nbColleursr   	listeMoisnbMoisr\  	decomptesr   twhfichierr  s,     `                                        @rF   ramassagePdfr    s    'llaG	TD	\:::I D  D  DJ```):;;;HI,=>>EEGG FPT F!((Y5F(GGQQRUV_R`R`aabpqr{  BC  sD  sD  sD  D))#g,,77E

C5:ek)!+I(0BB9TYglv}  GKB   L   LM9/66uz%+eiX[X`adajknkrssJ&?&F&Fz&R&RH"#
@GG
SXS^H_`e`jkuvyv  lA  BE  BJ  K  K  TV  _a  b  b  bC
1am+aiI.FGJJ11=11122JOO C C C D DJ <;;7?ZxxXZ[  _h  _h  ^g  _h  _h  _h  h  i  jn  jn  jn  jn  jn  TY  Z]  ^`  ak  Zl  Zl  Tm  Tm  jn  jn  jn  nD9::H:Y:z:,y(5 fb fb$W!--//Xq199NN61X,#hw6Fq6H2L2L/MNNN'4> a	b a	b0M;,2244DOAzzvqmQs9X;Ma;OPR7S7S4TUUUxI4? \b \b0}j$)Z #a<<NN61Z.!C
:@UVW@WXZ<[<[9\]]]J&
 Wb6C 0l 0l2F.5\*1-!!88&NN61\2BAc,W]J]^_J_`bFcFcCdeee$f,.7 +l +lNC"Y *{Ai=!CPYNNJZ[dIefm n n n/?B/GDOA.%*3y>>%:%: h h5>5E5EiPQlSUo5V5V5^5^_bcf5g5gY! 4 4%qLI("}}B"'*Qz\R\]^_i]ijt7u  xB  wC  DG  HQ  DR  DR  wR  8R  ^a  cd  eo  co  qs  ^t  ^t  v@  uA  ^A  #B  #B  #B !

: 6 6 6$%HHS1$5$5! !cjmAoq-@qTUAU V V V # # 1 1 1-7 9K 9K 9K .L .L
 !+B
(^(^(^  `i  `i  _h  `i  `i  `i  )i  (j  kg  kg  kg  kg  MR  SV  WY  Zd  Se  Se  Mf  Mf  kg  kg  kg  (g )2	 *B
 (" ,b 0*+	#+A::/6}}DGAJ'/zz(2veQs8TU:VXGYGYDZ([([(['0{{3@3F3F3H3HQ
+4Q;;,6NN6%3yYZ{[]K^K^H_,`,`,`+5a<<7<DGAJ/9!||0:veQsS]^_S_`bOcOcLd0e0e0e/;A~~<CQ
3?>>4>NN6%QRSVWcdeWefhSiSiPj4k4k4kW+l0ld /< $b $b*.5\*1-!&s9~~!6!6 g gA4=4D4DYq\RT_4U4U4]4]^abe4f4fD.qs33$a'++
2#DAjL:jYZ[eYe3fhrgstw  yB  uC  uC  hC  4C  OR  TU  V`  T`  bd  Oe  Oe  gq  fr  Or  s  s  sAJJz222 !Qq 1 1CAaHHS#*Q-/1)<SU1WZPQ\=QRRRMMOOOOO---)3 5G 5G 5G *H *HJ 'NJ$S$S$S  U^  U^  T]  U^  U^  U^  %^  $_  `\  `\  `\  `\  BG  HK  LN  OY  HZ  HZ  B[  B[  `\  `\  `\  $\D%rMI&NJ$bLH)*L'zz+2==??Q
#+A::$.NN6%3xPQzRTCUCU@V$W$W$W#,Q;;/</B/B/D/DDGAJ'0{{(2veQs9UV;WYGZGZD[(\(\(\'1!||38Q
+5a<<,6NN6%3zZ[|\^K_K_H`,a,a,aI$bq\ba	bD DAjL:j:NPZ|]dehireses]sOtt  AD  FG  HR  FR  TV  AW  AW  Yc  Xd  Ad  e  e  eAJJz	QqCAaHHS#*Q-/1$SU1WZ\%9:::MMOOOHHJJJj!!##GJNN7OrH   c           
         t          t          |          d          \  }}t          |          }t          t          |          }t          j                            |j                                                  r_|s]t          j                            |j                                      t          d                    d         t          d          z   }n2t          j                            t          d                    d	         }g d
}t          d          }	t          j                            |ddt          |          |          }
t!          |
           g d}d                    |j        |j        |j        j        |j        j                  }d                    |          |	d<   t)          j        |	          }g d}|rdg|dd<   |                    |           |s|
D ]}t          |d                   }|                    |d         |d         |d                                         ||d                  |d                                         |d                                         g|r||d         dz  dz            gng z   d                    |dz                                dd           gz              ېnt5          |
          d!k    r|
d!         d!         |
d!         d         |
d!         d         }}}d"\  }}|
D ]p}|d!         |d         }}|d         }||k    s||k    r|                    d#gd|z   z             |                    |d$                    |                                          gd#gd|z   z  z   d                    |dz                                dd           gz              |                    d#gd|z   z             ||z  }d!}||k    r|                    d$                    |          gd#gd|z   z  z   d                    |dz                                dd           gz              |                    d#gd|z   z             |                    d#gd|z   z             d!}t          |d                   }|                    |d         |d         |d                                         ||d                  |d                                         |d                                         g|r||d%         dz  dz            gng z   d                    |dz                                dd           gz              ||z  }|d!         |d         |d         }}}r|                    d#gd|z   z             |                    |d$                    |                                          gd#gd|z   z  z   d                    |dz                                dd           gz              |                    d#gd|z   z             ||z  }|                    d$                    |          gd#gd|z   z  z   d                    |dz                                dd           gz              |                    d#gd|z   z             |                    d#gd|z   z             |	S )&u   Renvoie le fichier CSV du ramassage par classe correspondant au ramassage dont l'id est id_ramassage
    si total vaut 1, les totaux par classe et matière sont calculésr?   rn   r.  r0  r1  r   rk  r2  r3  r#  r{   r|   Tr4  r@  z$ramassageCSVParclasse{}_{}-{}_{}.csvr  r~   )r   r  r8  r9  r  r:  rK  r   r   r   r  r        rq  rB  rE  r  rF  rG  r   rw  r$  ztotal {})divmodr   r   r   rJ   r   r0  rM  rN  r=   r<   r   r>   r4   rO  boolprintr   rQ  rP  r   r   r   r  r  rI  r  )r`   r   totalParmoisr7  parmoistotalr  	moisDebutrS  r   r  rV  r  r   enteter  rK  last_classelast_classe_nomlast_matieretotal_classetotal_matiereri   rj   s                           rF   ramassageCSVParClasser  %  s    C--a00NGUt99D	\:::II,=>>EEGG JPT J%,,9J,KKUUVYZcVdVdeeftu  yB  HI  yJ  yJ  yJ  J		O--c'll;;LI	 D  D  DJ444H!33ITW[gklsgtgt  ~B3  C  CI	)PPPL5<<Y_Y^\e\m\st}  uF  uK  L  LJ&?&F&Fz&R&RH"#Z!!FTTTF !r"u
OOF !*! 	H 	HH"&&FOOXa[(1+x{7H7H7J7J(!5x{7H7H7J7JHUVKL]L]L_L_a GN  eVeopxyzp{|~p~  @A  qA  fB  eC  eC  TVW [c  [j  [j  kq  rt  kt  [u  [u  [}  [}  ~A  BE  [F  [F  ZGG H H H H	H 
Y!		5>q\!_iPQlSToW`abWcdeWfl_&*#m! 	_ 	_H&qk8A;GFb\F,&&&K*?*?ai 0111*2C2CLDVDVDXDX2Y2Y Z\^[_abcjaj[k knvn}n}  L  MO  O  oP  oP  oX  oX  Y\  ]`  oa  oa  nb  !b  c  c  cai 0111- !$$!2!2?!C!C DbT1W9EU UX`XgXghtuwhwXxXx  YA  YA  BE  FI  YJ  YJ  XK  !K  L  L  Lai 0111ai 0111 "&&FOOXa[(1+x{7H7H7J7J$Xa[18A;3D3D3F3FQRHYHYH[H[] DK  aSakltuwlxy{l{|}l}a~``  QST X`  Xg  Xg  hn  oq  hq  Xr  Xr  Xz  Xz  {~  B  XC  XC  WDD E E EV#M9A!hqkS[\]S^,KKai()))**;*;L<N<N<P<P*Q*QRTVSWYZ[bYbSccfnfufu  wD  EG  wG  gH  gH  gP  gP  QT  UX  gY  gY  fZ  Z  	[  	[  	[ai()))%**?;;<bT1W9=MMPXP_P_`lmo`oPpPpPxPxy|  ~A  QB  QB  PC  C  	D  	D  	Dai()))ai()))OrH   c                     t          |          }t          t          |          d          \  }}t          t          |          }t	          ||||d          S )u   Renvoie le fichier PDF du ramassage par classe correspondant au ramassage dont l'id est id_ramassage
    si total vaut 1, les totaux par classe et matière sont calculésr?   rn   Fr   )r   r  r   r   r.   )r`   r   r  r7  r  r  r  s          rF   ramassagePdfParClasser  a  sU     t99DC--a00NGU	\:::I%igd5QQQQrH   c                    t           j                                        j        st	          d          S t          t          |          }t          j                            |          	                    d          }t          | ||          S )zURenvoie la vue de la page de gestion des groupes de la classe dont l'id est id_classer   rn   r   groupeeleve__user)r   rJ   rK   modif_secret_grouper5   r   r   r   r   prefetch_relatedr   )r`   r   ri   groupess       rF   r   r   j  sw     >$$&&: =$%;<<<Vy111Fn##6#22CCDWXXGwvg...rH   c                     t           j                                        j        st	          d          S t          t          |          }t          | |          S )uW   Renvoie la vue de la page de création d'un groupe de la classe dont l'id est id_classer   rn   )r   rJ   rK   r  r5   r   r   r0   r   s      rF   groupeCreerr  s  N     >$$&&: =$%;<<<Vy111FGF+++rH   c                     t           j                                        j        st	          d          S t          t          |          }t          | |          S )zhEssaie de supprimer la groupe dont l'id est id_groupe, puis redirige vers la page de gestion des groupesr   rn   )r   rJ   rK   r  r5   r   r   r    r`   r   r   s      rF   groupeSupprr  |  r  rH   c                     t           j                                        j        st	          d          S t          t          |          }t          | |          S )zKRenvoie la vue de la page de modification du groupe dont l'id est id_grouper   rn   )r   rJ   rK   r  r5   r   r   r"   r  s      rF   groupeModifr    r  rH   c                     t           j                                        j        st	          d          S t          t          |          }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   rn   )r   rJ   rK   r  r5   r   r   r!   r   s      rF   
groupeSwapr    sN     >$$&&: =$%;<<<v)444F76***rH   c                     t           j                                        j        st	          d          S t          t          |          }t          | |          S r  )r   rJ   rK   r  r5   r   r   r1   r   s      rF   	groupecsvr    sN     >$$&&: =$%;<<<v)444F'&)))rH   c                 :   t          t          |          }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 )uD   Renvoie la vue de la page de gestion des matières ects de la classern   r   profsr   	precisionNr   re   colleurprof__classeuser__last_nameuser__first_namesecret_ects_matiereszmixte/ectsmatieres.html)ri   matieresECTSrX   )r   r   r   rJ   r   r  r   r   rZ   r   r]   querysetr[   r   r   ro   r   )r`   r   ri   r  
newMatiererX   s         rF   ectsmatieresr    s    v333F&--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!}} :		.vy999'3fT`hl4m4mnnnrH   c                    t          t          |          }t          | j        pd|          }t          j                            |j        |j                                      dd          |j	        d         _
        |                                r.|                                 t          d|j        j                  S t          | d	||j        |d
          S )uI   Renvoie la vue de la page de modification des matières ects de la classern   Nr   r  r  r  r  r  zmixte/ectsmatieremodif.html)rj   ri   rX   )r   r   r   rZ   r   rJ   r   ri   r   r]   r  r[   r   r   ro   r   )r`   r   rj   rX   s       rF   ectsmatieremodifr    s      z:::G7</4AAAD")/"8"8dkdr"8"s"s"|"|  ~O  Pb  #c  #cDK!}} B		.w~/@AAA'77U\Uclp8q8qrrrrH   c                     t          t          |          }	 |                                 n+# t          $ r t                              | 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 ECTSrn   u6   Impossible de l'effacer (des élèves y ont des notes)r  )	r   r   r   rw   messagesrY   r   ri   ro   )r`   r   rj   s      rF   ectsmatieresupprr    s      z:::GY Y Y YwWXXXXXY*7>+<===s   - %AAc                 
   t          t          |          }t          j                            |                              dd          }t          d          }t          j                            ||          \  }}g }|D ]B}|	                    t          |j        du          t          |j        du          z              Ct          | dt          j                            |          |||j        dk    ||||d	          S )
z:Renvoie la vue de la page des notes ECTS ects de la classern   r   r   r  ABCDEFNzsecretariat/ectsnotes.htmlr?   )elevesnomatri   annee2matieres
listeNotes	listNotesnbsemestres)r   r   r   rJ   r   r   r   r   r   appendr   	semestre1	semestre2r   r   r>  )	r`   r   ri   r  r  r  r  r  rj   s	            rF   	ectsnotesr    s8    v333F")))88AA%TTHXI (--fX>>E:K b b3w0<==c'BS[_B_>`>``aaaa'6AUAU]cAUAdAdns  ~D  OU  O[  _`  O`  lt  BL  Yb  q|  8}  8}  ~  ~  ~rH   c                    t          t          |          }t          j                            |                              dd          }|st          || j        pd           }t          j        	                    |          \  }}t          | dt          | j                  |||||                                                                d          S )Nrn   r   r  r  zmixte/ectscredits.html)r   ri   creditsrX   r  nbeleves)r   r   r   rJ   r   r   r   rZ   r   r  r   rQ   rE   count)r`   r   rX   ri   r  r  r  s          rF   ectscreditsr    s   f	222F]!!!0099:KL^__F 3fW\1T22$,,V44MGE'2<PQXQ]<^<^hn  zA  IM  V[  gm  gv  gv  gx  gx  g~  g~  g@  g@  4A  4A  B  B  BrH   c                    t          t          |          }t          |j        | j                  }| j        dk    rE|                                rt          |||j                  S t          | |j        j	        |          S t          Nrn   rZ   )r   r   r   ri   rZ   rr   r[   r8   r  ro   r3   r`   r   r   rX   s       rF   ficheectspdfr    ss    ex000EEL',//D~v==?? 	=tE%,777wu|t<<<rH   c                    t          t          |          }t          |j        | j                  }| j        dk    rE|                                rt          |||j                  S t          | |j        j	        |          S t          r  )r   r   r   ri   rZ   rr   r[   r9   r  ro   r3   r  s       rF   attestationectspdfr
    ss    ex000EEL',//D~v==?? 	="4el;;;wu|t<<<rH   c                     t          t          |          }t          || j                  }| j        dk    r;|                                rt          |d |          S t          | |j        |          S t          r  )
r   r   r   rZ   rr   r[   r8   r  ro   r3   r`   r   ri   rX   s       rF   ficheectsclassepdfr    sm    v333FFGL))D~v==?? 	7tD000wvy666rH   c                     t          t          |          }t          || j                  }| j        dk    r;|                                rt          |d |          S t          | |j        |          S t          r  )
r   r   r   rZ   rr   r[   r9   r  ro   r3   r  s       rF   attestationectsclassepdfr    sm    v333FFGL))D~v==?? 	7"4V444wvy666rH   )Nrw  )r   )}django.shortcutsr   r   r   django.contrib.authr   r   django.contrib.auth.decoratorsr   administrateur.formsr	   r
   colleur.formsr   r   secretariat.formsr   r   r   r   accueil.modelsr   r   r   r   r   r   r   r   r   r   r   r   r   r   mixte.mixter   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   django.httpr3   r4   r5   pdf.pdfr6   r7   r8   r9   reportlab.platypusr:   r;   datetimer<   django.db.modelsr=   r>   r   rP   rG   rM   rQ   ra   rg   ry   r   r   r   r   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  r
  r  r  r   rH   rF   <module>r     s   @ @ @ @ @ @ @ @ @ @ 3 3 3 3 3 3 3 3 ; ; ; ; ; ; D D D D D D D D 3 3 3 3 3 3 3 3 h h h h h h h h h h h h X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X  X p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p  p E E E E E E E E E E > > > > > > > > > > > > 0 0 0 0 0 0 0 0       % % % % % % % % 



C C C@ @ @Z Z ZO O O" )~666V V 76V )~666K K 76K< )~666  76( )~666] ] 76] )~666* * 76* )~666
t 
t 76
t )~666g g 76g2 )~666	F 	F 76	F )~666M M 76M )~666# # 76# )~6660 0 760 )y111I I I 21I )y1111 1 211 )y111@ @ 21@ )y111] ] 21] )y111E E 21E )y111# # 21# )y111/ / 21/ )y111
G 
G 21
G )y111	U 	U 21	U )y1117 7 217 )y111v v 21v$ )y111} } 21} )~666y y 76y )~666  76$ )~666x x 76x )~666! ! 76! )~666   768 )~666N N N 76N` )~6668 8 8 768v )~666R R R 76R )y111/ / 21/ )y111, , 21, )y111, , 21, )y111, , 21, )y111+ + 21+ )y111* * 21* &.AAA
o 
o BA
o &.AAAs s BAs &.AAA> > BA> .N;;;	~ 	~ <;	~ .N;;;B B B <;B .N;;;	 	 <;	 .N;;;	 	 <;	 .N;;;	 	 <;	 .N;;;	 	 <;	 	 	rH   