
    X@	g̷                        d dl mZmZmZ d dl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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& d dl'm(Z( d dl)m*Z* d dl+T d dl,m-Z- d d	l.m/Z/ d d
l0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@mAZA d dlBmCZC d dlDZDd dlEmFZF d dlGZGd dlHZHd dlImJZJ d dlKmLZLmMZMmNZNmOZOmPZPmQZQmRZR d dlSZSd dlTmUZU d dlVmWZX d dlYmWZZ d dl[mWZ\ d Z]d Z^d Z_d Z`e`d             Zae_d             Zbe_d             Zce_d             Zde_d             Zee_d             Zfe_d              Zge_d!             Zhe_d"             Zie_d#             Zje_d$             Zke_d%             Zle_d&             Zme_d'             Zne_d(             Zoe_d)             Zpe_d*             Zqe_d+             Zre_d,             Zse_d-             Zte_d.             Zue_d/             Zve_d0             Zwe_d1             Zxe_d2             ZydKd3Zze_d4             Z{e_d5             Z|e_d6             Z}e_d7             Z~e_d8             Zd9 Ze_d:             Ze_dKd;            Ze_d<             Ze_d=             Ze_d>             Ze_d?             Ze_d@             Ze_dA             Ze_dB             Ze_dC             Ze_dD             Ze_dE             Ze_dF             Ze_dG             Ze_dH             Ze_dI             Ze_dJ             ZdS )L    )HttpResponseForbiddenHttp404HttpResponse)renderredirectget_object_or_404)ChercheUserForm
ConfigFormEleveFormSetEleveFormSetMdpColleurFormSetColleurFormSetMdpMatiereClasseSelectFormAdminConnexionForm
ClasseFormClasseGabaritFormClasseSelectFormMatiereFormEtabFormSemaineFormSemestreFormColleurFormColleurFormMdpSelectColleurForm	EleveFormEleveFormMdpSelectEleveFormProfFormJourFerieFormCsvFormCsvColleurFormGenereSemainesFormInformationForm)authenticatelogin)user_passes_test)messages)*)formset_factory)transaction)MaxQ)	timedeltachoice)Table
TableStyleImageSimpleDocTemplate	PageBreak	Paragraph)ParagraphStyle	TA_CENTERTA_LEFT)A4N)join)TextIOWrapper)IP_FILTRE_ADMINIP_FILTRE_ADRESSES
MEDIA_ROOTBACKUP_ROOTGESTION_ADMIN_BDDPASSWORDMINPASSWORDSPEC)BytesIO)Commandc                  Z    d                     d t          d          D                       S )ul   renvoie une chaine de caractères aléatoires contenant des lettres ou des chiffres ou un des symboles _+-.@ c                 ,    g | ]}t          d           S )zCabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_+-.@0123456789r.   .0is     $/opt/e-colle/administrateur/views.py
<listcomp>z!random_string.<locals>.<listcomp>   s"    vvvfgF`aavvv       )r:   range rM   rK   random_stringrQ      s-    77vvkprtkukuvvvwwwrM   c                 &    | j         o
| j        dk    S )zFRenvoie True si l'utilisateur courant est l'administateur, False sinonadmin)is_authenticatedusernameusers    rK   is_adminrX   !   s     ;T]G%;;rM   c                 L      fd} t          t          d          |          S )u   Décorateur qui combine deux vérifications: l'utilisateur courant est l'administrateur
     et l'IP de l'utilisateur est parmi les IP autorisées si le filtrage IP est actifc                     t           r]| j        d         }t          D ]9}t          j        |                              |          }|r | g|R i |c S :t          d          S  | g|R i |S NREMOTE_ADDRA   Vous n'avez pas les droits suffisants pour accéder à cette pager<   METAr=   recompilematchr   requestargskwargsuser_ipipauthenticated_by_ipfuncs         rK   wrapped_viewzip_filter.<locals>.wrapped_view(        	nl=1G( : :&(jnn&:&:7&C&C#& :49$999&99999:()lmmmtG-d---f---rM   login_admin)	login_url)r&   rX   rj   rk   s   ` rK   	ip_filterrp   %   s<    . . . . . ?H>>>|LLLrM   c                       fd}|S )uj   Décorateur qui vérifie si l'IP de l'utilisateur est parmi les IP autorisées si le filtrage IP est actifc                     t           r]| j        d         }t          D ]9}t          j        |                              |          }|r | g|R i |c S :t          d          S  | g|R i |S r[   r^   rc   s         rK   rk   z&ip_filter_connec.<locals>.wrapped_view5   rl   rM   rP   ro   s   ` rK   ip_filter_connecrs   3   s$    . . . . . rM   c                    t          | j                  rt          d          S d}t          | j        pdddi          }|                                rCd}|j        d         }t          ||          }|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 de l'admin. Si l'administrateur est déjà connecté, redirige vers la page d'accueil de l'administrateuraction_adminFNrU   rS   initialpassword)rU   rx   Treadonlyzadministrateur/home.html)formerror)rX   rW   r   r   POSTis_validcleaned_datar$   r%   fieldswidgetattrsr   )rd   r{   rz   rU   rx   rW   s         rK   connecr   @   s      ('''Egl2dZ<PQQQD}} $Z0Xx@@@ 	'$N+++E7;DK
"(4'4T%5P5PQQQrM   c                 "    t          | d          S )z4Renvoie la vue la page d'accueil de l'administrateurzadministrateur/action.htmlr   rd   s    rK   actionr   S   s     '6777rM   c                     t          | j        pdt          j                                                  }|                                r#|                                 t          d          S t          | dd|i          S )z>Renvoie la vue de la page de configuration de l'administrateurNinstanceconfigconfirmzadministrateur/config.htmlrz   )	r
   r|   Configobjects
get_configr}   saver   r   rd   rz   s     rK   configr   X   sm     gl*dFN4M4M4O4OPPPD}} )		((('6t}EEErM   c                 "    t          | d          S )zMRenvoie la vue de la page de confirmation de modification de la configurationz!administrateur/configconfirm.htmlr   r   s    rK   r   r   a   s     '=>>>rM   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èves   )
expediteurNr   information_adminzmixte/information.htmlColleursu   ÉlèveszTout le monde)r         T)rz   infosexpeisadmin)	Informationr   filterr#   r|   r}   r   r   r   )rd   r   rz   s      rK   informationr   f   s     &&A&66E7</4KST<U<U<UVVVD}} -		+,,,'2D5\fjt  yH  ZI  ZI  VZ  5[  5[  \  \  \rM   c                 t    t          t          |          }|                                 t          d          S )z%Supprime l'info dont l"id est id_infopkr   )r   r   deleter   )rd   id_infoinfos      rK   informationSupprr   p   s2     [W555DKKMMM'(((rM   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0r   r   r   )r   destinataireNr   r   zmixte/informationmodif.htmlT)rz   r   modif)r   r   r#   r|   r}   r   r   r   )rd   r   r   rz   s       rK   informationModifr   w   s     #~~ 999!<<<7</4DAAAD}} -		+,,,'8$SWbimpbp:q:qrrrrM   c                    t          | j        pd          }|                                r#|                                 t	          d          S t
          j                            dd          }t          | d||d          S )z0Renvoie la vue de la page de gestion des classesNgestion_classeanneenomzadministrateur/classe.html)classesrz   )	r   r|   r}   r   r   Classer   order_byr   )rd   rz   r   s      rK   classer      sw     W\1T22D}} *		()))n%%ge44G'6'QU7V7VWWWrM   c                     t          t          |          }t          | j        pd|          }|                                r#|                                 t          d          S t          | d|||d          S )zNRenvoie la vue de la page de modification de la classe dont l'id est id_classer   Nr   r   zadministrateur/classemodif.html)rz   r   idclasse)r   r   r   r|   r}   r   r   r   )rd   	id_classer   rz   s       rK   classemodifr      sz     v)444F	GL(D6	:	:	:D}} *		()))7<TSYen=o=oppprM   c                 `   t           j                            |                                          }|r)t	          j        | d                    |                     n	 t          j                    5  t          j                            |          
                                 t          t          |          
                                 ddd           n# 1 swxY w Y   n<# t          $ r/}t	          j        | dt          |          z              Y d}~nd}~ww xY wt          d          S )zhessaie de supprimer la classe dont l'id est id_classe, puis redirige vers la page de gestion des classes)
classe__pku8   Impossible d'effacer la classe elle contient {} élèvesr   Nz Impossible d'effacer la classe: r   )Elever   r   countr'   r{   formatr*   atomicGrouper   r   r   	Exceptionstrr   )rd   r   nbeleveses       rK   classesupprr      sw    }###;;AACCH PwY``aijjkkkk	P#%% @ @%%9%==DDFFF!&I666==???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @  	P 	P 	PN7#EA#NOOOOOOOO	P$%%%s=   C% 2ACC% CC%  C!C% %
D/%DDc                    t          | j        pd          }|                                r#|                                 t	          d          S t
          j                            dd          }t          | d||d          S )u7   Renvoie la vue de la page de gestion des jours fériésNgestion_feriedater   zadministrateur/ferie.html)feriesrz   )	r   r|   r}   r   r   	JourFerier   r   r   )rd   rz   r   s      rK   ferier      sv     -..D}} )		(((''u55F'5d6S6STTTrM   c                     t          t          |          }t          | j        pd|          }|                                r#|                                 t          d          S t          | d|||d          S )uP   Renvoie la vue de la page de modification du jour férié dont l'id est id_ferier   Nr   r   zadministrateur/feriemodif.html)rz   r   id_ferie)r   r   r   r|   r}   r   r   r   )rd   r   r   rz   s       rK   
feriemodifr      sy     iH555E	w|+te	<	<	<D}} )		(((7;DQVbj<k<klllrM   c                     	 t          t          |                                           n%# t          $ r t	          j        | d           Y nw xY wt          d          S )ut   essaie de supprimer le jour férié dont l'id est id_ferie, puis redirige vers la page de gestion des jours fériésr   u8   Impossible d'effacer le jour férié car il n'existe pasr   )r   r   r   r   r'   r{   r   )rd   r   s     rK   
feriesupprr      sp    [)x000779999 [ [ [wYZZZZZ[O$$$   (+ AAc                    t          | j        pd          }|                                r#|                                 t	          d          S t
          j                            d          }t          | d||d          S )z1Renvoie la vue de la page de gestion des matieresNgestion_matierer   zadministrateur/matiere.html)matieresrz   )	r   r|   r}   r   r   Matierer   r   r   )rd   rz   r   s      rK   matierer      su     w|+t,,D}} +		)***''..H'7HTX8Y8YZZZrM   c                     t          t          |          }t          | j        pd|          }|                                r#|                                 t          d          S t          | d||d          S )uQ   Renvoie la vue de la page de modification de la matière dont l'id est id_matierer   Nr   r   z administrateur/matieremodif.html)rz   r   )r   r   r   r|   r}   r   r   r   )rd   
id_matierer   rz   s       rK   matieremodifr      sw      :666G	W\)TG	<	<	<D}} +		)***7=dU\>]>]^^^rM   c                     	 t          t          |                                           n%# t          $ r t	          j        | d           Y nw xY wt          d          S )um   essaie de supprimer la matière dont l'id est id_matiere, puis redirige vers la page de gestion des matièresr   uN   Impossible d'effacer la matière car elle est présente chez certains colleursr   )r   r   r   r   r'   r{   r   )rd   r   s     rK   matieresupprr      sq    q'Z000779999 q q qwopppppq%&&&r   c                    t          | j        pd          }|                                r#|                                 t	          d          S t
          j                            d          }t          | d||d          S )u8   Renvoie la vue de la page de gestion des établissementsNgestion_etabr   zadministrateur/etab.html)etabsrz   )	r   r|   r}   r   r   Etablissementr   r   r   )rd   rz   r   s      rK   etabr      st     GL(D))D}} (		''' ))%00E75uD6Q6QRRRrM   c                     t          t          |          }t          | j        pd|          }|                                r#|                                 t          d          S t          | d||d          S )uS   Renvoie la vue de la page de modification de l'établissement dont l'id est id_etabr   Nr   r   zadministrateur/etabmodif.html)rz   r   )r   r   r   r|   r}   r   r   r   )rd   id_etabr   rz   s       rK   	etabmodifr      su     ]g666D	',&$	6	6	6D}} (		'''7:4t;T;TUUUrM   c                     	 t          t          |                                           n%# t          $ r t	          j        | d           Y nw xY wt          d          S )uu   essaie de supprimer l'établissement dont l'id est id_etab, puis redirige vers la page de gestion des établissementsr   uP   Impossible d'effacer l'établissement car il est présent chez certains colleursr   )r   r   r   r   r'   r{   r   )rd   r   s     rK   	etabsupprr      sp    s-7333::<<<< s s swqrrrrrsN###r   c                 N   t           j                            t          d                    }t           j                            t          d                    }t           j                            d          }t                      }|d         6|d         .|d         t          d          z   |_        |d         dz   |_        t          | j	        pd|j        |j        d	
          }|
                                r#|                                 t          d          S t          | j	        pddt          j                                        j        i
          }|
                                r#|                                 t          d          S t#          | d|||d          S )z1Renvoie la vue de la page de gestion des semaineslundinumero
lundi__maxNnumero__max   )daysr   )r   r   rv   gestion_semainesemestrezadministrateur/semaine.html)semainesrz   form2)Semainer   	aggregater+   r   r-   r   r   r   r|   r}   r   r   r   r   r   	semestre2r   )rd   lundimax	numeromaxr   semainerz   r   s          rK   r   r      si    _&&s7||44Ho''H66I''00HIIG)i.F.R|,YA->->->> /1w|+tgmU\Uc5d5deeeD}} +		)***-*fnF_F_FaFaFk9lmmmE~~ +

)***'7HTXch8j8jkkkrM   c                    t          t          |          }t          | j        pd||j        |j        d          }|                                r#|                                 t          d          S t          | d||d          S )zPRenvoie la vue de la page de modification de la semaine dont l'id est id_semainer   N)r   r   )r   rw   r   z administrateur/semainemodif.html)rz   r   )
r   r   r   r|   r   r   r}   r   r   r   )rd   
id_semainer   rz   s       rK   semainemodifr     s      :666G	W\)TGQXQ_hohuGvGv	w	w	wD}} +		)***7=dU\>]>]^^^rM   c                     	 t          t          |                                           n%# t          $ r t	          j        | d           Y nw xY wt          d          S )ur   essaie de supprimer la semaine dont l'id est id_semaine, puis redirige vers la page de gestion des établissementsr   uY   Impossible d'effacer la semaine car elle est présente dans certain(e)s colles/programmesr   )r   r   r   r   r'   r{   r   )rd   r   s     rK   semainesupprr     sq    |'Z000779999 | | |wz{{{{{|%&&&r   c                 N   t           j                                        r$t          j        | d           t          d          S t          | j        pdddi          }|                                r#|	                                 t          d          S t          | dd|i          S )	ug   renvoie une vue qui propose en un seul formulaire de générer toutes les semaines de colle de l'annéeu&   il existe déjà des semaines de coller   Nnb_semaines$   rv   z"administrateur/genere_semaine.htmlrz   )r   r   existsr'   r{   r   r"   r|   r}   r   r   r   s     rK   genere_semainesr   %  s      +w HIII)***gl2d}b>QRRRD}} +		)***'?&$PPPrM   c           
      v   d| j         v rt          | j                   }n	 t          j                            | j        d                   }n# t          $ r d}Y nw xY w	 t          j                            | j        d                   }n# t          $ r d}Y nw xY wt          ||d          }|                                rA|j	        d         }|sdn|j
        | j        d<   |j	        d         }|sdn|j
        | j        d<   n~	 t          j                            | j        d                   }n# t          $ r d}Y nw xY w	 t          j                            | j        d                   }n# t          $ r d}Y nw xY wd}d	| j         v r6t          | j                   }|                                r|j	        d
         }nt          d          }t          |||d| j         v s	d| j         v r| j         nd          }|                                rd| j         v rg }|j	        d         D ]I}	 |                                 # t          $ r% |                    t          |                     Y Fw xY w|r;t!          j        | d                    d                    |                               t)          d          S d| j         v r8t)          dd                    d |j	        d         D                                 S t*          j                            |||          }	t/          | d||||	g dd          S )z1Renvoie la vue de la page de gestion des colleursselectmatierer   r   Nr   r   r   rv   rF   chercheuserr   	supprimermodifiercolleurut   les colleurs suivants n'ont pas pu être supprimés:
{}
 car ils sont reliés à des notes de colle ou à des colles
gestion_colleurmodif_colleur-c                 6    g | ]}t          |j                  S rP   r   r   rI   r  s     rK   rL   zcolleur.<locals>.<listcomp>c  s     6t6t6t7s7:6t6t6trM   zadministrateur/colleur.html)inconnuu	   certifiézbi-admissibleu   agrégéu   chaire supérieure)rz   r   form3colleurslistegrades)r|   r   r   r   getsessionr   r   r}   r~   r   r	   r   r   appendr   r'   r{   r   r:   r   ColleurlisteColleursr   )
rd   rz   r   r   terme_rechercher  r   colleursPasSupprr  r  s
             rK   r  r  2  s    ',&&&w|44	o))W_Y-G)HHGG 	 	 	GGG		^''7?8+D'EEFF 	 	 	FFF	&GV1T1TUUU}} #I.18%HTTgj	""8,06$EDDFI!!	o))W_Y-G)HHGG 	 	 	GGG		^''7?8+D'EEFF 	 	 	FFF	O$$-->> 	8#07O%%gfoP[_f_kPkPkoy  ~E  ~J  pJ  pJw||  QU  V  VE~~ w',&&! -i8 : ::NN$$$$  : : :$++CLL99999: Ew  (`  (g  (g  hl  hq  hq  rB  hC  hC  (D  (D  E  E  E-...7<''OSXX6t6tV[VhirVs6t6t6t-u-uvvv,,WVOLLH78e^cpx  IP  IP  IP  :Q  :Q  R  R  RsY   +A AA+B BB+D2 2E E+E1 1F ?F -I,I10I1c                 <   t           j                            d |                    d          D                                           dd                              d          }t          t          d|                                t                    }| j
        d	k    rI ||| j                  }|                                r#|                                 t          d
          S n ||d |D                       }t          | dt           t"          |d          S )z_Renvoie la vue de la page de modification des colleurs dont l'id fait partie de chaine_colleursc                 ,    g | ]}t          |          S rP   intrH   s     rK   rL   z colleurmodif.<locals>.<listcomp>j  s    2^2^2^a3q662^2^2^rM   r  pk__inuser__last_nameuser__first_namerW   r   extramax_numformsetr|   r  c                     g | ]x}|j         j        |j         j        |j         j        |j         j        |j         j        |j        |j        |j        	                                |j
        	                                d 	yS ))		last_name
first_namerU   email	is_activegradeetablissementr   r   )rW   r$  r%  rU   r&  r'  r(  r)  r   allr   r  s     rK   rL   z colleurmodif.<locals>.<listcomp>r  s      8{  8{  8{  biW\E[ipiu  jA  MT  MY  Mb  kr  kw  k}  JQ  JV  J`  ip  iv  GN  G\  gn  gw  g{  g{  g}  g}  GN  GV  GZ  GZ  G\  G\  9]  9]  8{  8{  8{rM   rv   z administrateur/colleurmodif.htmlpwdminpwdspecr"  )r  r   r   splitr   select_relatedr)   r   r   r   methodr|   r}   r   r   r   rA   rB   )rd   chaine_colleursr  Colleurformsetr"  s        rK   colleurmodifr3  g  sN    O**2^2^?CXCXY\C]C]2^2^2^*__hhiz  |N  O  O  ^  ^  _e  f  fM$[qATATAVAV_mnnnN~ .w|<< 	/LLNNN-...	/ !.  8{  8{  mz  8{  8{  8{  |  |  |'<{^ju|=}=}~~~rM   c                    | j         dk    rzt          t          dt                    }d| j        v r ||          }n || j                  }|                                r#|                                 t          d          S nd	 t          j	        
                    | j        d                   }n# t          $ r d	}Y nw xY wt          t          d
          } |d|ig          }t          | dt          t          |d          S )z-Renvoie la vue de la page d'ajout de colleursr|   r   r   r"  csvrv   r  r   r   Nr   z administrateur/colleurajout.htmlr+  )r0  r)   r   r   r|   r}   r   r   r   r   r  r  r   r   rA   rB   )rd   rw   r2  r"  r   s        rK   colleurajoutr8  u  s    ~v(J[\\\GL  $nW555GG"N7<00G!! 3 12223	o))W_Y-G)HHGG 	 	 	GGG	(a@@@Y+A*BCCC'<{^ju|=}=}~~~s   +B3 3CCc                     t          t          |          }	 |                                 n%# t          $ r t	          j        | d           Y nw xY wt          d          S )zkessaie de supprimer le colleur dont l'id est id_colleur, puis redirige vers la page de gestion des colleursr   u@   Impossible d'effacer le colleur car il possède des notes/collesr  )r   r  r   r   r'   r{   r   )rd   
id_colleurr  s      rK   colleursupprr;    sv     g444Gc c c cwabbbbbc%&&&   - AAc                 D    |dk    rdnd| j         d<   t          d          S )uY   change la façon de trier les élèves puis redirige vers la page de gestion des élèves1cr   trigestion_eleve)r  r   )rd   r@  s     rK   eleveTrirB    s*     %(3JJSSCGOEO$$$rM   c           	         d| j         v rt          | j                   }nQ	 t          j                            | j        d                   }n# t          $ r d}Y nw xY wt          d|i          }|                                r!|j        d         }|sdn|j	        | j        d<   n?	 t          j                            | j        d                   }n# t          $ r d}Y nw xY wd}d| j         v r6t          | j                   }|                                r|j        d         }nt          d          }d	}d
| j        v r| j        d
         dk    }|d}t          |||d| j         v s$d| j         v sd| j         v sd| j         v s	d| j         v s | j                   }|                                rd| j         v rg }|j        d         D ]I}	 |                                 # t          $ r% |                    t          |                     Y Fw xY w|r;t          j        | d                    d                    |                               t'          d          S d| j         v r8t'          dd                    d |j        d         D                                 S d| j         v r)|j        d                             |j        d                   |j        d<   t*          j                            |j        d                                       dd          }	|j        d                             |j        d         d           	 t*          j                            |	                               t5          d!          "                              d#"                                           n# t          $ r Y nw xY wt'          d          S d$| j         v r|j        d         u|j        d                             t7          |j        d         %          t7          |j        d         &          z                                |j        d         '           n!|j        d                             d'           t'          d          S d(| j         v r|j        d         L|j        d                             |j        d         )                              |j        d         *           n!|j        d                             d*           t'          d          S d+| j         v r|j        d         L|j        d                             |j        d         )                              |j        d         ,           n!|j        d                             d,           t'          d          S t9          | d-||||d.          S )/u1   Renvoie la vue de la page de gestion des élèvesselectclasser   r   Nrv   rF   r  r   Fr@  r?  r  r  
transfererlv1lv2optioneleveuc   les élèves suivants n'ont pas pu être supprimés:
{}
 car ils sont reliés à des notes de coller  rA  modif_elever  c                 6    g | ]}t          |j                  S rP   r
  rI   rI  s     rK   rL   zeleve.<locals>.<listcomp>  s     4l4l4luS]]4l4l4lrM   klasse)r   )groupeeleve__inr   T)flat)r   grouper  groupeeleve)nbr   change_option)classe__option1)classe__option2)rH  
change_lv1)classe__matieres)rF  
change_lv2)rG  zadministrateur/eleve.html)rz   r   r  r@  )r|   r   r   r   r  r  r   r}   r~   r   r	   r   r   r  r   r'   r{   r   r:   r   excluder   r   values_listupdateannotateCountr,   r   )
rd   rz   r   r  r  r@  r   elevesPasSupprrI  groupess
             rK   rI  rI    s    %%--	^''7?8+D'EEFF 	 	 	FFF	8F*;<<<}} "8,06$EDDFI!!	^''7?8+D'EEFF 	 	 	FFF	O$$-->> 	8#07O%% Coe$+FC;ZaZfKfKfjtx  yE  kE  kE  IU  Y`  Ye  Ie  Ie  in  ry  r~  i~  i~  BG  KR  KW  BW  BW',  o  oE~~ .-',&&N+G4 6 66LLNNNN  6 6 6"))#e**555556 rw  (O  (V  (V  W[  W`  W`  ao  Wp  Wp  (q  (q  r  r  rO,,,7<''M3884l4lPUPbcjPk4l4l4l+m+mnnnW\))(-(:7(C(K(KSXSefnSo(K(p(pEw'n++E<Nw<W+XXddeiosdttGw'..e6H6RZ^.___%%W%55>>%BVBV>WW^^bc^ddkkmmmm   O,,,,,!(+7"7+221UEWX`Ea3b3b3befw|  xJ  KS  xT  fU  fU  fU  4U  V  V  ]  ]  ej  ew  x@  eA  ]  B  B  B  B"7+22$2???O,,,W\))!%(4"7+22EDVW\D]2^^eejoj|  ~C  kDe  E  E  E  E"7+22t2<<<O,,,W\))!%(4"7+22EDVW\D]2^^eejoj|  ~C  kDe  E  E  E  E"7+22t2<<<O,,,76tE\ail7m7mnnnsH   +A AA&+C C! C!G,HHA'N0 0
N=<N=c                    t          | j        pd| j        pddddddddd	d
ddd          }|                                r|j        d         rl	 |                                 t          d          S # t          $ r;}t          j	        | t          |                     t          d          cY d}~S d}~ww xY wd t          |j        |j        |j                  D             }t          | |          S t!          | dd|i          S )u?   Renvoie la vue de la page d'ajout d'élèves via un fichier CSVNNom   Prénomr   Adresse mailIdentifiantMot de passerF  rG  zDate de naissanceCommuneu   Numéro INE)r   prenom	nomclasser&  identifiant
motdepasserF  rG  ddnldninerv   importdirectrA  	csv_elevec                    g | ]|\  }}}|j         pd |j        pd |j        pd ||j        pd t	          |d          r|j        nd|j        |j        sd n|j                            d          |j	        |j
        |j        d}S )rF   r   N%d/%m/%Y)r$  r%  rU   rx   r&  r   rl  rk  rm  rF  rG  )r$  r%  rU   r&  hasattrr   rl  rk  strftimerm  rF  rG  )rI   rW   rI  mdps       rK   rL   zelevecsv.<locals>.<listcomp>  s    k k k rB  rv  x}  B &*^%9rI^\^lplyl}  NQZ%2xAXAX1b^bkpkt  HM  HQ  ~u}}  W\  W`  Wi  Wi  jt  Wu  Wu  ~C  ~G  PU  PY  bg  bkm m k k krM   zadministrateur/elevecsv.htmlrz   )r    r|   FILESr}   r~   r   r   r   r'   r{   r   zipuserselevesrt  
eleveajoutr   rd   rz   r   rw   s       rK   elevecsvr{    s    7<'4)>$PU_hw  KY  jw  GU  ^c  lq  zM  V_  hu  Jv  Jv  w  w  wD}} :^, 
	:-		000 - - -ws1vv...,,,,,,,,-k k FI  JN  JT  UY  U`  ae  ai  Fj  Fjk k kGg9999'8&GGGs   "A2 2
B7<0B2,B72B7c                    t          | j        pd| j        pddddddddd	
          }|                                r|j        d         rl	 |                                 t          d          S # t          $ r;}t          j	        | t          |                     t          d          cY d}~S d}~ww xY wd t          |j        |j        |j        |j                  D             }t!          | |
          S t#          | dd|i          S )z@Renvoie la vue de la page d'ajout de colleurs via un fichier CSVNra  rb  rc  rd  re  u	   MatièresClasses)r   rg  r&  ri  rj  nommatieres
nomclassesrv   rn  r  csv_colleurc           
      d    g | ]-\  }}}}|j         pd |j        pd |j        pd ||j        pd ||d.S )rF   )r$  r%  rU   rx   r&  r   r   )r$  r%  rU   r&  )rI   rW   r   r   rt  s        rK   rL   zcolleurcsv.<locals>.<listcomp>  sx     h h hSoSWY`bjlo &*^%9rI^\^lplyl}  NQZ%2XO O h h hrM   zadministrateur/colleurcsv.htmlrz   )r!   r|   ru  r}   r~   r   r   r   r'   r{   r   rv  rw  r   r   rt  r8  r   rz  s       rK   
colleurcsvr    s    ',.$0EX]gp  zH  Yf  vD  U`  py  Rz  Rz  {  {  {D}} <^, 
	</		 1222 / / /ws1vv.........../h hsvw{  xB  CG  CO  PT  P]  ^b  ^f  tg  tgh h hG7;;;;':F4=IIIs   "A. .
B380B.(B3.B3c                 "   t           j                            d |                    d          D                                           dd          }t          t          d|                                t                    }| j	        dk    rO ||| j
        | j                  }|                                r#|                                 t          d	          S n ||d
 |D                       }t          | dt           t"          |d          S )u]   Renvoie la vue de la page de modification des élèves dont l'id fait partie de chaine_elevesc                 ,    g | ]}t          |          S rP   r  rH   s     rK   rL   zelevemodif.<locals>.<listcomp>  s    .X.X.X!s1vv.X.X.XrM   r  r  r  r  r   r  r|   rA  c                    g | ]}}|j         j        |j         j        |j        |j        |j        sd n|j                            d          |j         j        |j         j        |j	        |j
        |j        |j        |j        d~S )Nrq  )r$  r%  rm  rl  rk  rU   r&  r   photorF  rG  rH  )rW   r$  r%  rm  rl  rk  rs  rU   r&  r   r  rF  rG  rH  rL  s     rK   rL   zelevemodif.<locals>.<listcomp>  s     BI BI BIsx PUzOcqvq{  rG  NS  NW9	$]DDuy?Q?QR\?]?]inisi|  FK  FP  FV\%+EIEIafamCo Co BI BI BIrM   )chaine_elevesrw   zadministrateur/elevemodif.htmlr+  )r   r   r   r.  r   r)   r   r   r   r0  r|   ru  r}   r   r   r   rA   rB   )rd   r  listeElevesEleveFormsetr"  s        rK   
elevemodifr    s7   -&&.X.X}?R?RSV?W?W.X.X.X&YYbbct  vH  I  IK"91[=N=N=P=PYefffL~,{GL'-HH 	-LLNNNO,,,	- ,[ BI BI }HBI BI BI J J J ':[\hsz;{;{|||rM   c                     t          t          |          }	 |                                 n%# t          $ r t	          j        | d           Y nw xY wt          d          S )uh   essaie de supprimer l'élève dont l'id est id_eleve, puis redirige vers la page de gestion des élèvesr   u?   Impossible d'effacer l'élève car il possède des notes/collesrA  )r   r   r   r   r'   r{   r   )rd   id_eleverI  s      rK   
elevesupprr     sq     EX
.
.
.Eb b b bw`aaaaabO$$$r<  c                    | j         dk    rt          t          dt                    }d| j        v r ||          }n || j        | j                  }|                                r#|                                 t          d          S nd	 t          j
                            | j        d                   }n# t          $ r d	}Y nw xY wt          t          d
          } |d|ig          }t          | dt          t           |d          S )u,   Renvoie la vue de la page d'ajout d'élèvesr|   r   r5  r6  rv   rA  r   r   Nr7  zadministrateur/eleveajout.htmlr+  )r0  r)   r   r   r|   ru  r}   r   r   r   r   r  r  r   r   rA   rB   )rd   rw   r  r"  r   s        rK   ry  ry  *  s$    ~v&|!OTTTGL  "l7333GG Lgm<<G!! 10001	^''7?8+D'EEFF 	 	 	FFF	&|!<<<8f)=(>???':[\hsz;{;{|||s   +B9 9CCc                 `    t          | ddt          j                                        i          S )z.Renvoie la vue de la page de gestion des profszadministrateur/prof.htmlprofs)r   Profr   
listeprofsr   s    rK   profr  ?  s*     '4gdl>U>U>W>W5XYYYrM   c                    t          t          |          }|j                                        }t	                      }|j        |d<   |D ]X}t          j                            ||          }|	                                r!d |D             |t          |j                  <   Yt          || j        pd|          }|                                r#|                                 t!          d          S t#          | d|||d	          S )
zXRenvoie la vue de la page de modification des profs de la classe dont l'id est id_classer   profprincipalr   c                     g | ]	}|j         
S rP   r  rI   r  s     rK   rL   zprofmodif.<locals>.<listcomp>N  s    %G%G%Gtdl%G%G%GrM   Nrv   gestion_profzadministrateur/profmodif.html)r   r   rz   )r   r   r   r*  dictr  r  r   r   r   r   r   r   r|   r}   r   r   r   )rd   r   r   r   rw   r   r  rz   s           rK   	profmodifr  D  s    Vy111F""$$HFFG%3GO H H##G6#BB>> 	H%G%Gw%G%G%GGC
OO$	&-g	>	>	>D}} (		''''9FV^fj:k:klllrM   c                     	 t           j                            |                              d          d         }n# t          $ r t
          w xY wt          | dd|i          S )Nr   rW   r   zadministrateur/rgpd_eleve.htmlrI  )r   r   r   r/  r   r   r   rd   eleve_idrI  s      rK   
rgpd_elever  U  sl    $$$11@@HHK   ':We<LMMM	   9< Ac                     	 t           j                            |                              d          d         }n# t          $ r t
          w xY wt          | dd|i          S )Nr   rW   r   z administrateur/rgpd_colleur.htmlr  )r  r   r   r/  r   r   r   rd   
colleur_idr  s      rK   rgpd_colleurr  ]  sl    /((J(77FFvNNqQ   '<y'>RSSSr  c                    	 t           j                            |                              ddddd          d         }n# t          $ r t
          w xY wd                    |j                  }t          d	
          }d                    |          |d<   dt          d                    |          fd}t                      }t          |          }dx|_        |_        t          ddt          ddddddd
  
        }t          ddt           dddd          }	t#          d|          }
t%          g d          }d|j        j                                        fd |j        j                                        fd!|j        j        fg}|j        j        r!|                    d"|j        j        f           |j        j        r4|                    d#|j        j                            d$          f           |j        j        r4|                    d%|j        j                            d$          f           |j        r|                    d&|j        f           |j        r/|                    d'|j                            d(          f           |j         r|                    d)|j         f           |j!        r!|                    d*|j!        j"        f           |j#        r!|                    d+|j#        j"        f           |j$        r3|                    d,|j$        j"                                        f           |j%        r3|                    d-|j%        j"                                        f           |j&        rYtO          tQ          tR          tU          |j&                                      }d.|_+        d/|_,        |                    d0|f           t[          |d1d2          }|.                    |           |
|t_                      g}t`          j                            |3          1                                rt#          d4|          }|                    |           t`          j                            |3                              d5d6d7          2                    d8d9          }tg          ti          d:                    d;d<gz   }|D ]}|j5                            d(          d=                    |j6        d/z  |j6        d/z            tU          |j7                  tU          |j8                  tU          ||j9                           fg}t[          |d>?          }|.                    |           |                    |           |j:        rAt#          d@|j:        ;                    dAdB          z   |	          }|                    |           |                    t_                                 tx          j                            |3          1                                rt#          dC|          }|                    |           dDtx          j                            |3                              dE          2                    dFdG          }dHg}|fdI|D             z  }t[          |dJd2          }|.                    |           |                    |           |                    t_                                 tz          j                            |j        K          1                                rt#          dL|          }|                    |           tz          j                            |j        K          }|D ]z}dM                    |j>                            d$          |j?        |j@        |jA        ;                    dAdB                    }t#          ||	          }|                    |           {|B                    |||N           |C                                }|D                                 |E                    |           |S )ONr   rW   r   rP  rF  rG  r   zRGPD_eleve-{}.pdfapplication/pdfcontent_typeattachment; filename={}Content-Disposition(   u'   Données personnelles de l'étudiant {}c                    |                                   d         dz  }d         z
  }|                     dd           |                     ||           |dz  }|                     ||t          j                                        j                   d         dz  }}|                     dd           |                     ||d	                    |                                                      | 	                                 d S 
Nr   r   r   Helvetica-Bold      zHelvetica-Oblique   u
   page n°{}
	saveStatesetFontdrawCentredStringr   r   r   nom_etablissementr   getPageNumberrestoreStatecanvasdocxymarge_y	pdfformattitres       rK   myFirstPagez#rgpd_eleve_pdf.<locals>.myFirstPager      
A,q.
A,w
'+++  1U+++	2  1V^%>%>%@%@%RSSS
A,q.
*1---  1\%8%89M9M9O9O%P%PQQQrM   r  	soustitrer  r  blackr   r      r   #DDDDDD
namefontSize	alignmentfontNameborderColorborderPaddingborderWidth	backColorspaceBefore
spaceAftercommentaire	   r   r   r   r   r   r  r  r  r  r  r  r     Données utilisateur)GRIDr   r   r  r   )r   r   r   )VALIGNr  r  MIDDLE)ALIGNr  r  CENTRE)FACEr  r  r  )SIZEr  r  r  Nom:   Prénom:Identifiant:Email:   ajouté le:   %d/%m/%Y à %Hh%M   Dernière connexion le:u   Numéro INE:zDate de naissance:rq  zLieu de naissance:zClasse:zGroupe:zLV1:LV2P   <   Photo   	colWidths
repeatRowsrI  Notes de colleeleve__userr   colleur__user-date_colle-heure   n.nabs.	{}h{:02d}r  r     r  r  r  <u>commentaire:</u> r  <br/>z
Notes ECTSABCDEFmatiereECTSr   matiereECTS__nom)r   u   matièrenotec                 N    g | ]!}|j         |j        j        |j                 f"S rP   )r   r   r   r  )rI   r  LISTE_NOTES_ECTSs     rK   rL   z"rgpd_eleve_pdf.<locals>.<listcomp>  s0    fffTX$-!13CDI3NOfffrM   )2   r  r  auteur   Messages envoyésH   <u>Envoyé le</u> {} <br/> <u>à</u>: {} <br/> <u>sujet</u>: {} <br/> {}onFirstPageonLaterPages)Fr   r   r   r/  r   r   r   r   r   r9   rC   r3   
leftMarginrightMarginr6   r7   r8   r5   r1   rW   r$  upperr%  titlerU   r&  r  date_joinedrs  
last_loginrm  rk  rl  r   r   rP  rF  rG  r  r2   r:   r>   r   
drawHeight	drawWidthr0   setStyler4   Noter   r   listrO   
date_colleheurer  r   r  r  replaceNoteECTSMessager   listedestinatairesr  corpsbuildgetvalueclosewrite)rd   r  rI  
nomfichierresponser  	pdfbufferr  stylestylebispar1
LIST_STYLEdataimagetstorypar2notesLISTE_NOTESr  par	notesECTSr'   messagetextefichierr  r  r  r  s                             @@@@rK   rgpd_eleve_pdfr8  e  sg   $$$11@@QYZ_`effghi   "))%(33J):;;;H&?&F&Fz&R&RH"#GI5<<UCCE       		I
I
&
&C'))CNS_!	 	 	E =!# # #H +U33D C C C D DJ
 UZ)//112&,,../UZ()+D z 2Xuz/0111z []EJ$:$C$CDW$X$XYZZZz f.
0E0N0NOb0c0cdeeey 1^UY/000y L)59+=+=j+I+IJKKKy 7)595666| 3Y 01222| 3Y 01222y 5VUY]00223444y 4UEIM//112333{ &d:s5;'7'78899We$%%%DCa000AJJz1ikk"E|5))0022 ")511T##E#22AA-PYZijjss  uB  DL  M  M599oo7 	" 	"D_--j99;;M;MdjZ\n^b^hik^k;l;lnqrvr~nn  BE  FJ  FR  BS  BS  UX  Yd  ei  en  Yo  Up  Up  q  rDD$:;;;AJJz"""LLOOO " 69I9Q9QRVX_9`9` `bjkkS!!!Y[[!!!u--4466 
"u--T#$++E+::II-XXaablm  A  A	01ffff\effff
A
>
>
>	

:QY[[!!!uz2299;; ,e44T?))5:)>> 	 	G^eefmfrf{f{  }P  gQ  gQ*GM7=;P;PQUW^;_;_a aEE8,,CLLIIe;IGGG  ""GOONN7Os   =A Ac                 J   t          t          |          }t          j                    5  t          j                            |                              d d           t          j                            |          	                                 t          j                            |j                  	                                 t          j                            |j                  	                                 t          j                            |          	                                 |	                                 t          j        | d           t!          d          cd d d            S # 1 swxY w Y   t          j        | d	           t!          d          S )
Nr   r  rF   )rI  r  r  rV   u)   L'élève a été définitivement effacérA  u"   L'élève n'a pas pu être effacé)r   r   r*   r   r  r   r   r[  Coller   r  rW   Destinatairer  r'   r{   r   r  s      rK   eleve_force_effacer<    s   
Eh
/
/
/E				 ) ) 	%((//d/KKK5))00222ej1188:::###44;;===e,,33555wJKKK(() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) N7?@@@O$$$s   D?E66E:=E:c                    	 t           j                            |                              d                              dd          d         }n# t
          $ r t          w xY wd                    |j                  }t          d          }d	                    |          |d
<   dt          d                    |          fd}t                      }t          |          }dx|_        |_        t          ddt           ddddddd
  
        }t          ddt"          dddd          }	t%          d|          }
t'          g d          }d|j        j                                        fd|j        j                                        fd|j        j        fg}|j        j        r!|                    d |j        j        f           |j        j        r4|                    d!|j        j                            d"          f           |j        j        r4|                    d#|j        j                            d"          f           |j        rK|                    d$d%                     d& |j        !                                D                       f           |j"        rK|                    d'd%                     d( |j"        !                                D                       f           tF          j                            |)          $                                rd|                    d*d%                     d+ tF          j                            |)          !                                D                       f           tK          |d,d-          }|&                    |           |
|tO                      g}tP          j                            |)          $                                rt%          d.|          }|                    |           tP          j                            |)                              d/d0d1          )                    d2d3          }tU          tW          d4                    d5d6gz   }|D ]}|j,                            d7          d8                    |j-        d9z  |j-        d9z            t]          |j/                  t]          |j0                  t]          ||j1                           fg}tK          |d:;          }|&                    |           |                    |           |j2        rAt%          d<|j2        3                    d=d>          z   |	          }|                    |           |                    tO                                 th          j                            |j        ?          $                                rt%          d@|          }|                    |           th          j                            |j        ?          }|D ]z}dA                    |j5                            d"          |j6        |j7        |j8        3                    d=d>                    }t%          ||	          }|                    |           {|9                    |||B           |:                                }|;                                 |<                    |           |S )CNr   rW   r   r   r   zRGPD_colleur-{}.pdfr  r  r  r  r  u#   Données personnelles du colleur {}c                    |                                   d         dz  }d         z
  }|                     dd           |                     ||           |dz  }|                     ||t          j                                        j                   d         dz  }}|                     dd           |                     ||d	                    |                                                      | 	                                 d S r  r  r  s       rK   r  z%rgpd_colleur_pdf.<locals>.myFirstPage  r  rM   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  zClasses:;c                     g | ]	}|j         
S rP   )r   )rI   r   s     rK   rL   z$rgpd_colleur_pdf.<locals>.<listcomp>4  s    *Z*Z*Z&6:*Z*Z*ZrM   u
   Matières:c                 ,    g | ]}t          |          S rP   )r   )rI   r   s     rK   rL   z$rgpd_colleur_pdf.<locals>.<listcomp>6  s    ,`,`,`gS\\,`,`,`rM   r  zProfesseur:c                 V    g | ]&}t          |j                  d z   |j        j        z   'S )/)r   r   r   r   r  s     rK   rL   z$rgpd_colleur_pdf.<locals>.<listcomp>8  sC      .R  .R  .R\`c$,.?.?#.E.W  .R  .R  .RrM   r  r  r  r  r   r  r  r  r  r  r  rq  r  r  r  r  r  r  r   r  r
  r  r  )=r  r   r   r/  prefetch_relatedr   r   r   r   r   r9   rC   r3   r  r  r6   r7   r8   r5   r1   rW   r$  r  r%  r  rU   r&  r  r  rs  r  r   r:   r*  r   r  r   r0   r  r4   r  r   r  rO   r  r  r   rI  r   r  r  r  r  r   r  r  r   r!  r"  r#  r$  )rd   r  r  r%  r&  r  r'  r  r(  r)  r*  r+  r,  r.  r/  r0  r1  r2  r  r3  r'   r5  r6  r7  r  r  r  s                           @@@rK   rgpd_colleur_pdfrE    sD   /((J(77FFvNN__`ijtuuvwx   $++GJ77J):;;;H&?&F&Fz&R&RH"#GI188AAE       		I
I
&
&C'))CNS_!	 	 	E =!# # #H +U33D C C C D DJ
 W\+11334(..001W\*+-D | 4Xw|12333| ]]GL$<$E$EFY$Z$Z[\\\| h.0G0P0PQd0e0efggg ^Z*Z*ZGODWDWDYDY*Z*Z*Z![![\]]] d\388,`,`IYI]I]I_I_,`,`,`#a#abccc|W--4466 U]CHH  .R  .Rdhdpdwdw  CJdw  eK  eK  eO  eO  eQ  eQ  .R  .R  .R  %S  %S  T  	U  	U  	UDCa000AJJz1ikk"E|W--4466 ")511T##g#66EEmT]^mnnww  yF  HP  Q  Q599oo7 	" 	"D_--j99;;M;MdjZ\n^b^hik^k;l;lnqrvr|n}n}  @C  DH  DP  @Q  @Q  SV  Wb  cg  cl  Wm  Sn  Sn  o  pDD$:;;;AJJz"""LLOOO " 69I9Q9QRVX_9`9` `bjkkS!!!Y[[!!!w|44;;== ,e44T?))7<)@@ 	 	G^eefmfrf{f{  }P  gQ  gQ*GM7=;P;PQUW^;_;_a aEE8,,CLLIIe;IGGG  ""GOONN7Os   AA A%c                    t          t          |          }t          j                    5  t          j                            |                              d            t          j                            |          	                                 t          j                            |j                  	                                 t          j                            |j                  	                                 |	                                 t          j        | d           t          d          cd d d            S # 1 swxY w Y   t          j        | d           t          d          S )Nr   r  r  rV   u*   Le colleur a été définitivement effacér  u#   Le colleur n'a pas pu être effacé)r   r  r*   r   r  r   r   r[  r:  r   r  rW   r;  r'   r{   r   r  s      rK   colleur_force_effacerG  Y  sn   J777G				 + +g..555EEEw//6688855<<>>>##7<#88??AAAw LMMM)**+ + + + + + + + + + + + + + + + N7ABBB%&&&s   DEE
Ec                 N    t           st          d          S t          | d          S )uG   Renvoie la vue de la page de reinitialisation de la bdd entre 2 annéesr]   z"administrateur/nouvelle_annee.htmlr@   r   r   r   s    rK   nouvelle_anneerJ  g  s-      j$%hiii'>???rM   c                     t           st          d          S t                      }t          j        | d                    |                                                     t          d          S )ub   nettoie la base de données pour la nouvelle année scolaire et affiche un message de confirmationr]   r  ru   )r@   r   NouvelleAnneer'   r{   r:   reinitr   )rd   commands     rK   nouvelle_annee_confirmrO  n  s[      j$%hiiiooGN7DIIgnn&6&677888N###rM   c           	          t           st          d          S t          d t          j        t
                    D             d          }d |D             }t          | ddt          ||          i          S )ua   Renvoie la vue de la page de gestion des sauvegardes de la base de donnée et des fichiers médiar]   c                     g | ]D}|d d         dk    |                     d          d                              d          d         ES )Nz.bz2_r   .r   )r.  rI   fs     rK   rL   zsauvebdd.<locals>.<listcomp>|  sQ    nnnQ]^_a_b_b]cgm]m]m1773<<?0055a8]m]m]mrM   T)reversec           
          g | ]W}t           j                            t           j                            t          d                     |                              XS )zecolle-media_{}.tar.xz)ospathisfiler:   r?   r   rU  s     rK   rL   zsauvebdd.<locals>.<listcomp>}  sV       	 7>>"',,{;S;Z;Z[\;];]"^"^__   rM   zadministrateur/sauvegardes.htmlsauvegardes)r@   r   sortedrY  listdirr?   r   rv  )rd   fichiers_bz2fichiers_xzs      rK   sauvebddra  w  s      j$%hiiinn"*[BYBYnnnx|}}}L   K';mSQ]^iMjMj=klllrM   c                 `   t           st          d          S t                      }	 |                                \  }}t	          j        | d                    ||                     n9# t          $ r,}t	          j        | t          |                     Y d}~nd}~ww xY w|dk    r{	 |	                                \  }}t	          j        | d                    ||                     n9# t          $ r,}t	          j        | t          |                     Y d}~nd}~ww xY wt          d          S )u   Effectue une sauvegarde de la base de données et renvoie sur les pages des sauvegardes
    le paramètre media indique si l'on doit inclure (1) ou pas (0) les fichiers mediar]   ui   sauvegarde de la base de données effectuée avec succès, taille:{} octets, taux de compression: {:.02f}Nr>  ua   sauvegarde des fichiers média effectuée avec succès, taille:{} octets, taux de compression: {}gestion_sauvebdd)r@   r   Backupjson_backupr'   r{   r   r   r   media_backupr   )rd   mediarN  taillecompr   s         rK   sauvegarde_bddrj    s     j$%hiiihhG(**,,w  !L  !S  !S  TZ  \`  !a  !a  	b  	b  	b  	b ( ( (wA''''''''(||	,"//11LFDN7  %H  %O  %O  PV  X\  %]  %]  ^  ^  ^  ^ 	, 	, 	,N7CFF++++++++	,&'''s1   A A' '
B1"BB'A C( (
D2"DDc                    t           st          d          S 	 t          j                            t
          d                    |                    }t          j        |           n?# t          $ r2}t          j
        | d                    |                     Y d}~nd}~ww xY w	 t          j                            t
          d                    |                    }t          j                            |          rt          j        |           n?# t          $ r2}t          j
        | d                    |                     Y d}~nd}~ww xY wt          d          S )u\   supprime la sauvegarde de date indiquée et renvoie la page sur les différentes sauvegardesr]   ecolle_{}.json.bz2uF   Erreur dans la suppression de la sauvegarde de la Base de données: {}Nz=Erreur dans la suppression de la sauvegarde des fichiers : {}rc  )r@   r   rY  rZ  r:   r?   r   remover   r'   r{   r[  r   )rd   r   fichier_bz2r   
fichier_xzs        rK   suppr_sauvegarderp    sa     j$%hiiitgll;/C/J/J4/P/PQQ
	+ t t tw h o opq r rsssssssstkW\\+.B.I.I$.O.OPP
7>>*%% 	"Ij!!! k k kw _ f fgh i ijjjjjjjjk&'''s1   AA% %
B!/(BB!%A+D 
E(EEc                 T    t           st          d          S t          | dd|i          S )uE   renvoie la page de restauration de la sauvegarde de la date indiquéer]   z'administrateur/restaure_sauvegarde.htmlr   rI  )rd   r   s     rK   restaure_sauvegarderr    s3      j$%hiii'DvtnUUUrM   c                    t           st          d          S t                      }t          j                            t          d                    |                    }t          j                            t          d                    |                    }	 |                    ||           n9# t          $ r,}t          j        | t          |                     Y d}~nd}~ww xY w	 |                    |           n9# t          $ r,}t          j        | t          |                     Y d}~nd}~ww xY wt          d          S )ue   restaure le système à la sauvegarde en question, selon le choix fait concernant les fichiers médiar]   rl  Nrc  )r@   r   RestorerY  rZ  r:   r?   r   
gere_mediar   r'   r{   r   	gere_jsonr   )rd   r   choixrN  rn  ro  r   s          rK   restaure_sauvegarde_confirmrx    sB     j$%hiiiiiG',,{+?+F+Ft+L+LMMKk*>*E*Ed*K*KLLJ(:u---- ( ( (wA''''''''((+&&&& ( ( (wA''''''''(&'''s0   B- -
C#7"CC#'C= =
D3"D..D3)N)django.httpr   r   r   django.shortcutsr   r   r   administrateur.formsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   django.contrib.authr$   r%   django.contrib.auth.decoratorsr&   django.contribr'   accueil.modelsdjango.forms.formsetsr)   	django.dbr*   django.db.modelsr+   r,   datetimer-   randomr/   reportlab.platypusr0   r1   r2   r3   r4   r5   reportlab.lib.stylesr6   r7   r8   reportlab.lib.pagesizesr9   r6  os.pathr:   rY  bz2_ior;   ecolle.settingsr<   r=   r>   r?   r@   rA   rB   r`   iorC   *accueil.management.commands.nouvelle_anneerD   rL  #accueil.management.commands.restorert  "accueil.management.commands.backuprd  rQ   rX   rp   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r3  r8  r;  rB  rI  r{  r  r  r  ry  r  r  r  r  r8  r<  rE  rG  rJ  rO  ra  rj  rp  rr  rx  rP   rM   rK   <module>r     st	   D D D D D D D D D D @ @ @ @ @ @ @ @ @ @ @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ 3 3 3 3 3 3 3 3 ; ; ; ; ; ; # # # # # #     1 1 1 1 1 1 ! ! ! ! ! ! # # # # # # # #             ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` C C C C C C C C C C & & & & & & 



       				 



       G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G  G 				       O O O O O O B B B B B B @ @ @ @ @ @x x x< < <M M M   R R R$ 8 8 8 F F F ? ? ? \ \ \ ) ) ) 
s 
s 
s X X X q q q & & & U U U m m m % % % [ [ [ _ _ _ ' ' ' S S S V V V $ $ $ l l l& _ _ _ ' ' ' 	Q 	Q 	Q 2R 2R 2Rh      ( ' ' ' % % %
 Qo Qo Qof H H H" J J J"} } } % % % } } } }( Z Z Z m m m  N N N T T T y y yv % % %& a a aF ' ' ' @ @ @ $ $ $ m m m ( ( (& ( ( (" V V V ( ( ( ( (rM   