o
    Dj2                     @   sL  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d Z]dd Z^dd Z_dd Z`e`dd Zae_d d! Zbe_d"d# Zce_d$d% Zde_d&d' Zee_d(d) Zfe_d*d+ Zge_d,d- Zhe_d.d/ Zie_d0d1 Zje_d2d3 Zke_d4d5 Zle_d6d7 Zme_d8d9 Zne_d:d; Zoe_d<d= Zpe_d>d? Zqe_d@dA Zre_dBdC Zse_dDdE Zte_dFdG Zue_dHdI Zve_dJdK Zwe_dLdM Zxe_dNdO Zye_ddPdQZze_dRdS Z{e_dTdU Z|e_dVdW Z}e_dXdY Z~e_dZd[ Ze_d\d] Ze_d^d_ Ze_dd`daZe_dbdc Ze_ddde Ze_dfdg Ze_dhdi Ze_djdk Ze_dldm Ze_dndo Ze_dpdq Ze_drds Ze_dtdu Ze_dvdw Ze_dxdy Ze_dzd{ Ze_d|d} Ze_d~d ZdS )    )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                   C   s   d 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                 S   s   g | ]}t d qS )zCabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_+-.@0123456789r-   .0i rH   ./home/reyt/e-colle-new/administrateur/views.py
<listcomp>       z!random_string.<locals>.<listcomp>   )r9   rangerH   rH   rH   rI   random_string   s   rN   c                 C   s   | j o| jdkS )zFRenvoie True si l'utilisateur courant est l'administateur, False sinonadmin)is_authenticatedusernameuserrH   rH   rI   is_admin!   s   rT   c                    s    fdd}t td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                    d   t r'| jd }tD ]}t||}|r" | g|R i |  S q	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funcrH   rI   wrapped_view(      
zip_filter.<locals>.wrapped_viewlogin_admin)	login_url)r%   rT   rf   rg   rH   re   rI   	ip_filter%   s   	rl   c                    s    fd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                    rU   rV   rY   r^   re   rH   rI   rg   5   rh   z&ip_filter_connec.<locals>.wrapped_viewrH   rk   rH   re   rI   ip_filter_connec3   s   	rm   c                 C   s   t | jr	tdS d}t| jpdddid}| r4d}|jd }t||d}|r2t| | 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_adminFNrQ   rO   initialpassword)rQ   rq   Treadonlyzadministrateur/home.html)formerror)rT   rS   r   r   POSTis_validcleaned_datar#   r$   fieldswidgetattrsr   )r_   rt   rs   rQ   rq   rS   rH   rH   rI   connec@   s   


r{   c                 C   
   t | dS )z4Renvoie la vue la page d'accueil de l'administrateurzadministrateur/action.htmlr   r_   rH   rH   rI   actionS      
r   c                 C   s@   t | jpdtj d}| 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.htmlrs   )	r	   ru   Configobjects
get_configrv   saver   r   r_   rs   rH   rH   rI   configX   s
   r   c                 C   r|   )zMRenvoie la vue de la page de confirmation de modification de la configurationz!administrateur/configconfirm.htmlr}   r~   rH   rH   rI   r   a   r   r   c              	   C   s\   t jjdd}t| jpdt dd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)rs   infosexpeisadmin)	Informationr   filterr"   ru   rv   r   r   r   )r_   r   rs   rH   rH   rI   informationf   s   r   c                 C   s   t t|d}|  tdS )z%Supprime l'info dont l"id est id_infopkr   )r   r   deleter   )r_   id_infoinforH   rH   rI   informationSupprp   s   r   c                 C   sd   |dkrt t|d}ntddd}t| jpd|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)rs   r   modif)r   r   r"   ru   rv   r   r   r   )r_   r   r   rs   rH   rH   rI   informationModifw   s   r   c                 C   F   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)classesrs   )	r   ru   rv   r   r   Classer   order_byr   )r_   rs   r   rH   rH   rI   classe      r   c                 C   J   t t|d}t| jpd|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)rs   r   idclasse)r   r   r   ru   rv   r   r   r   )r_   	id_classer   rs   rH   rH   rI   classemodif      r   c              
   C   s   t jj|d }|rt| d| tdS z/t  t	jj|d
  tt|d
  W d   n1 s9w   Y  W tdS W tdS  tyf } zt| dt|  W Y d}~tdS d}~ww )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&   rt   formatr)   atomicGrouper   r   r   	Exceptionstrr   )r_   r   nbeleveserH   rH   rI   classesuppr   s"   
r   c                 C   r   )u7   Renvoie la vue de la page de gestion des jours fériésNgestion_feriedater   zadministrateur/ferie.html)feriesrs   )	r   ru   rv   r   r   	JourFerier   r   r   )r_   rs   r   rH   rH   rI   ferie   r   r   c                 C   r   )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)rs   r   id_ferie)r   r   r   ru   rv   r   r   r   )r_   r   r   rs   rH   rH   rI   
feriemodif   r   r   c                 C   @   zt t|d  W tdS  ty   t| d Y tdS w )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&   rt   r   )r_   r   rH   rH   rI   
feriesuppr      r   c                 C   D   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)matieresrs   )	r   ru   rv   r   r   Matierer   r   r   )r_   rs   r   rH   rH   rI   matiere      r   c                 C   H   t t|d}t| jpd|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)rs   r   )r   r   r   ru   rv   r   r   r   )r_   
id_matierer   rs   rH   rH   rI   matieremodif      r   c                 C   r   )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&   rt   r   )r_   r   rH   rH   rI   matieresuppr   r   r   c                 C   r   )u8   Renvoie la vue de la page de gestion des établissementsNgestion_etabr   zadministrateur/etab.html)etabsrs   )	r   ru   rv   r   r   Etablissementr   r   r   )r_   rs   r   rH   rH   rI   etab   r   r   c                 C   r   )uS   Renvoie la vue de la page de modification de l'établissement dont l'id est id_etabr   Nr   r   zadministrateur/etabmodif.html)rs   r   )r   r   r   ru   rv   r   r   r   )r_   id_etabr   rs   rH   rH   rI   	etabmodif   r   r   c                 C   r   )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&   rt   r   )r_   r   rH   rH   rI   	etabsuppr   r   r   c                 C   s   t jtd}t jtd}t jd}t  }|d dur6|d dur6|d tdd |_|d d |_t| j	p;d|j|jd	d
}|
 rP|  tdS t| j	pUddtj jid
}|
 rk|  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   ro   gestion_semainesemestrezadministrateur/semaine.html)semainesrs   form2)Semainer   	aggregater*   r   r,   r   r   r   ru   rv   r   r   r   r   r   	semestre2r   )r_   lundimax	numeromaxr   semainers   r   rH   rH   rI   r      s    r   c                 C   sT   t t|d}t| jpd||j|jd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   rp   r   z administrateur/semainemodif.html)rs   r   )
r   r   r   ru   r   r   rv   r   r   r   )r_   
id_semainer   rs   rH   rH   rI   semainemodif  s   r   c                 C   r   )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&   rt   r   )r_   r   rH   rH   rI   semainesuppr  r   r   c                 C   s\   t j rt| d tdS t| jpdddid}| 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$   ro   z"administrateur/genere_semaine.htmlrs   )r   r   existsr&   rt   r   r!   ru   rv   r   r   r   rH   rH   rI   genere_semaines%  s   
r   c           
   	   C   sZ  d| j v rt| j }n8ztjj| jd d}W n ty"   d}Y nw ztjj| jd d}W n ty:   d}Y nw t||dd}| rf|j	d }|sPdn|j
| jd< |j	d }|s_dn|j
| jd< n0ztjj| jd d}W n ty}   d}Y nw ztjj| jd d}W n ty   d}Y nw d}d	| j v rt| j }| r|j	d
 }ntd}t|||d| j v sd| j v r| j nd}| rd| j v rg }|j	d D ]}z|  W q ty   |t| Y qw |rt| dd| tdS d| j v rtd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   ro   rD   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                 S      g | ]}t |jqS rH   r   r   rF   r   rH   rH   rI   rJ   c      zcolleur.<locals>.<listcomp>zadministrateur/colleur.html)inconnuu	   certifiézbi-admissibleu   agrégéu   chaire supérieure)rs   r   form3colleurslistegrades)ru   r   r   r   getsessionr   r   rv   rw   r   r   r   r   appendr   r&   rt   r   r9   r   ColleurlisteColleursr   )
r_   rs   r   r   terme_rechercher   r   colleursPasSupprr   r   rH   rH   rI   r   2  sh   





(
 r   c                 C   s   t jjdd |dD dddd}ttd| t	d	}| j
d
kr8||| j}| r7|  tdS n||dd |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                 S      g | ]}t |qS rH   intrE   rH   rH   rI   rJ   j  rK   z colleurmodif.<locals>.<listcomp>r   pk__inuser__last_nameuser__first_namerS   r   extramax_numformsetru   r   c                 S   sH   g | ] }|j j|j j|j j|j j|j j|j|j|j	 |j
	 d 	qS ))		last_name
first_namerQ   email	is_activegradeetablissementr   r   )rS   r  r  rQ   r  r  r  r  r   allr   r   rH   rH   rI   rJ   r  s   H ro   z administrateur/colleurmodif.htmlpwdminpwdspecr  )r  r   r   splitr   select_relatedr(   r   r   r   methodru   rv   r   r   r   r@   rA   )r_   chaine_colleursr  Colleurformsetr  rH   rH   rI   colleurmodifg  s   ,
r  c                 C   s   | j dkr)ttdtd}d| jv r||d}n8|| j}| r(|  tdS n&ztj	j
| jd d}W n ty@   d	}Y nw ttdd
}|d|igd}t| dtt|dS )z-Renvoie la vue de la page d'ajout de colleursru   r   r  r  csvro   r   r   r   Nr  z administrateur/colleurajout.htmlr  )r  r(   r   r   ru   rv   r   r   r   r   r   r   r   r   r@   rA   )r_   rp   r  r  r   rH   rH   rI   colleurajoutu  s"   


r#  c                 C   D   t t|d}z	|  W tdS  ty!   t| d Y tdS w )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&   rt   r   )r_   
id_colleurr   rH   rH   rI   colleursuppr     
r&  c                 C   s   |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   )r_   r*  rH   rH   rI   eleveTri  s   r,  c              
   C   sV  d| j v rt| j }nztjj| jd d}W n ty"   d}Y nw td|id}| r>|jd }|s7dn|j	| jd< nztjj| jd d}W n tyU   d}Y nw d}d| j v rlt
| j }| rk|jd }nt
d}d	}d
| jv r~| jd
 dk}|durd}t|||d| j v sd| j v sd| j v sd| j v sd| j v sd| j v sd| j v r| j nd}|jd j }| rd| j v rg }|jd D ]}	z|	  W q ty   |t|	 Y qw |rt| dd| tdS d| j v rtdddd |jd D S d| j v rb|jd j|jd d|jd< tjj|jd djddd }
|jd j|jd dd! ztjj|
d"jtd#d$jd%d$  W tdS  tya   Y tdS w d&| j v r|jd dur|jd t|jd d't|jd d(B j|jd d) tdS |jd jdd) tdS d*| j v r|jd jd+d,j|jd d-kd. tdS d/| j v r|jd dur|jd j|jd d0j|jd d1 tdS |jd jdd1 tdS d2| j v r|jd dur|jd j|jd d0j|jd d3 tdS |jd jdd3 tdS t| d4||||||d5S )6u1   Renvoie la vue de la page de gestion des élèvesselectclasser   r   Nro   rD   r   r   Fr*  r)  r   r   
transfererlv1lv2optioncubeeleveuc   les élèves suivants n'ont pas pu être supprimés:
{}
 car ils sont reliés à des notes de coller   r+  modif_elever   c                 S   r   rH   r   rF   r3  rH   rH   rI   rJ     r   zeleve.<locals>.<listcomp>klasse)r   )groupeeleve__inr   T)flat)r   grouper  groupeeleve)nbr   change_option)classe__option1)classe__option2)r1  change_cuber   )classe__anneeTrue)r2  
change_lv1)classe__matieres)r/  
change_lv2)r0  zadministrateur/eleve.html)r   r;  rs   r   r   r*  ) ru   r   r   r   r   r   r   rv   rw   r   r   r   rx   querysetr   r   r   r   r&   rt   r   r9   r   excluder   r   values_listupdateannotateCountr+   r   )r_   rs   r   r  r   r*  r   r;  elevesPasSupprr3  groupesrH   rH   rI   r3    s   





Z

 (:$&&r3  c                 C   s   t | jpd| jp	ddddddddd	d
dddd}| r^|jd rJz	|  tdW S  tyI } zt	| t
| tdW  Y d}~S d}~ww dd t|j|j|jD }t| |d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 passer/  r0  zDate de naissanceCommuneu   Numéro INE)r   prenom	nomclasser  identifiant
motdepasser/  r0  ddnldninero   importdirectr+  	csv_elevec                 S   sp   g | ]4\}}}|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qS )rD   r   N%d/%m/%Y)r  r  rQ   rq   r  r   rX  rW  rY  r/  r0  )r  r  rQ   r  hasattrr   rX  rW  strftimerY  r/  r0  )rF   rS   r3  mdprH   rH   rI   rJ      s
    >
zelevecsv.<locals>.<listcomp>zadministrateur/elevecsv.htmlrs   )r   ru   FILESrv   rw   r   r   r   r&   rt   r   zipuserselevesr_  
eleveajoutr   r_   rs   r   rp   rH   rH   rI   elevecsv  s    2

rf  c                 C   s   t | jpd| jp	ddddddddd	d
}| r\|jd rFz	|  tdW S  tyE } zt	| t
| tdW  Y d}~S d}~ww dd t|j|j|j|jD }t| |d
S t| dd|iS )z@Renvoie la vue de la page d'ajout de colleurs via un fichier CSVNrM  rN  rO  rP  rQ  u	   MatièresClasses)r   rS  r  rU  rV  nommatieres
nomclassesro   rZ  r   csv_colleurc              
   S   s@   g | ]\}}}}|j pd |jpd |jpd ||jpd ||dqS )rD   )r  r  rQ   rq   r  r   r   )r  r  rQ   r  )rF   rS   r   r   r_  rH   rH   rI   rJ     s
    

zcolleurcsv.<locals>.<listcomp>zadministrateur/colleurcsv.htmlrs   )r    ru   r`  rv   rw   r   r   r   r&   rt   r   ra  rb  r   r   r_  r#  r   re  rH   rH   rI   
colleurcsv  s    *

rk  c                 C   s   t jjdd |dD ddd}ttd| td}| j	d	kr7||| j
| j}| r6|  td
S n||dd |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                 S   r  rH   r  rE   rH   rH   rI   rJ     rK   zelevemodif.<locals>.<listcomp>r   r  r
  r  r   r  ru   r+  c                 S   s^   g | ]+}|j j|j j|j|j|jsd n|jd|j j|j j|j	|j
|j|j|j|jdqS )Nr\  )r  r  rY  rX  rW  rQ   r  r   photor/  r0  r1  r2  )rS   r  r  rY  rX  rW  r^  rQ   r  r   rl  r/  r0  r1  r2  r5  rH   rH   rI   rJ   "  s    $
)chaine_elevesrp   zadministrateur/elevemodif.htmlr  )r   r   r   r  r   r(   r   r   r
   r  ru   r`  rv   r   r   r   r@   rA   )r_   rm  listeElevesEleveFormsetr  rH   rH   rI   
elevemodif  s   &


rp  c                 C   r$  )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/collesr+  )r   r   r   r   r&   rt   r   )r_   id_elever3  rH   rH   rI   
elevesuppr'  r'  rr  c                 C   s   | j dkr+ttdtd}d| jv r||d}n:|| j| j}| r*|  tdS n&zt	j
j| jd d}W n tyB   d	}Y nw ttdd
}|d|igd}t| dtt|dS )u,   Renvoie la vue de la page d'ajout d'élèvesru   r   r   r!  ro   r+  r   r   Nr"  zadministrateur/eleveajout.htmlr  )r  r(   r   r   ru   r`  rv   r   r   r   r   r   r   r   r   r@   rA   )r_   rp   ro  r  r   rH   rH   rI   rd  1  s"   

rd  c                 C   s   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~   rH   rH   rI   profF  s   rv  c                 C   s   t t|d}|j }t }|j|d< |D ]}tjj||d}|	 r/dd |D |t
|j< qt|| jp6d|d}| rF|  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                 S      g | ]}|j qS rH   r   rF   rv  rH   rH   rI   rJ   U      zprofmodif.<locals>.<listcomp>Nro   gestion_profzadministrateur/profmodif.html)r   r   rs   )r   r   r   r  dictrw  rt  r   r   r   r   r   r   ru   rv   r   r   r   )r_   r   r   r   rp   r   r   rs   rH   rH   rI   	profmodifK  s   

r~  c                 C   @   zt jj|ddd }W n	 ty   tw t| dd|iS )Nr   rS   r   zadministrateur/rgpd_eleve.htmlr3  )r   r   r   r  r   r   r   r_   eleve_idr3  rH   rH   rI   
rgpd_eleve\     r  c                 C   r  )Nr   rS   r   z administrateur/rgpd_colleur.htmlr   )r  r   r   r  r   r   r   r_   
colleur_idr   rH   rH   rI   rgpd_colleurd  r  r  c                    s  zt jj|ddddddd }W n	 ty   tw d|j}td	d
}d||d< dt	d|fdd}t
 }t|}d |_|_tddtdddddddd
}tddtd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r|d$|jjd%f |jjr|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$r|d-|j$j" f |j%r|d.|j%j" f |j&r&t't(t)t*|j&}d/|_+d0|_,|d1|f t-|d2dd3}|.| |
|t/ g}t0jj|d41 rtd5|}|| t0jj|d4d6d7d82d9d:}t3t4d;d<d=g }|D ]I}|j5d)d>|j6d0 |j6d0 t*|j7t*|j8t*||j9 fg}t-|d?d@}|.| || |j:rtdA|j:;dBdC |	}|| qh|t/  t<jj|d41 rtdD|}|| dE t<jj|d4dF2dGdH}dIg}| fdJdK|D 7 }t-|dLdd3}|.| || |t/  t=jj|jdM1 rAtdN|}|| t=jj|jdM}|D ] }dO|j>d%|j?|j@|jA;dBdC}t||	}|| q |jB|||dP |C }|D  |E| |S )QNr   rS   r   r9  r/  r0  r   zRGPD_eleve-{}.pdfapplication/pdfcontent_typeattachment; filename={}Content-Disposition(   u'   Données personnelles de l'étudiant {}c                       |    d d }d   }| dd | || |d8 }| ||tj j d d } }| 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titrerH   rI   myFirstPagey     z#rgpd_eleve_pdf.<locals>.myFirstPager  	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:r\  zLieu de naissance:zClasse:zGroupe:zLV1:LV2P   <   Photo   	colWidths
repeatRowsr3  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                    s"   g | ]}|j |jj |j fqS rH   )r   r   r   r  )rF   r  )LISTE_NOTES_ECTSrH   rI   rJ        " z"rgpd_eleve_pdf.<locals>.<listcomp>)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   r8   rB   r2   
leftMarginrightMarginr5   r6   r7   r4   r0   rS   r  upperr  titlerQ   r  r   date_joinedr^  
last_loginrY  rW  rX  r   r   r9  r/  r0  rl  r1   r9   r=   r   
drawHeight	drawWidthr/   setStyler3   Noter   r   listrM   
date_colleheurer   r   r  r  replaceNoteECTSMessager   listedestinatairesr  corpsbuildgetvalueclosewrite)r_   r  r3  
nomfichierresponser  	pdfbufferr  stylestylebispar1
LIST_STYLEdataimagetstorypar2notesLISTE_NOTESr  par	notesECTSr&   messagetextefichierrH   )r  r  r  r  rI   rgpd_eleve_pdfl  s   $







 B










r  c                 C   s   t t|d}t H tjj|djd dd tjj|d	  t
jj|jd	  tjj|jd	  tjj|d	  |	  t| d tdW  d    S 1 sUw   Y  t| d	 tdS )
Nr   r  rD   )r3  r  r  rR   u)   L'élève a été définitivement effacér+  u"   L'élève n'a pas pu être effacé)r   r   r)   r   r  r   r   rH  Coller   r   rS   Destinatairer  r&   rt   r   r  rH   rH   rI   eleve_force_efface  s   
 r  c                    s  zt jj|ddddd }W n	 ty   tw d|j}t	dd}d	||d
< d t
d| fdd}t }t|}d |_|_tddtdddddddd
}tddtd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r|d"|jjd#f |jjr|d$|jjd#f |jr|d%d& d'd( |j! D f |j"r|d)d& d*d( |j"! D f t#jj|d+$ r|d,d& d-d( t#jj|d+! D f t%|d.dd/}|&| |
|t' g}t(jj|d+$ rtd0|}|| t(jj|d+d1d2d3)d4d5}t*t+d6d7d8g }|D ]I}|j,d9d:|j-d; |j-d; t.|j/t.|j0t.||j1 fg}t%|d<d=}|&| || |j2rtd>|j23d?d@ |	}|| q=|t'  t4jj|jdA$ rtdB|}|| t4jj|jdA}|D ] }dC|j5d#|j6|j7|j83d?d@}t||	}|| q|j9|||dD |: }|;  |<| |S )ENr   rS   r   r   r   zRGPD_colleur-{}.pdfr  r  r  r  r  u#   Données personnelles du colleur {}c                    r  r  r  r  r  rH   rI   r  	  r  z%rgpd_colleur_pdf.<locals>.myFirstPager  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  zClasses:;c                 S   rx  rH   )r   )rF   r   rH   rH   rI   rJ   ;  r{  z$rgpd_colleur_pdf.<locals>.<listcomp>u
   Matières:c                 S   r  rH   )r   )rF   r   rH   rH   rI   rJ   =  rK   ry  zProfesseur:c                 S   s"   g | ]}t |jd  |jj qS )/)r   r   r   r   rz  rH   rH   rI   rJ   ?  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  prefetch_relatedr   r   r   r   r   r8   rB   r2   r  r  r5   r6   r7   r4   r0   rS   r  r  r  r  rQ   r  r   r  r^  r  r   r9   r  r   rt  r   r/   r  r3   r  r   r  rM   r  r  r   r3  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   r  rI   rgpd_colleur_pdf  s   $




$$,


 B






r!  c                 C   s   t t|d}t > tjj|djd d tjj|d	  t
jj|jd	  tjj|jd	  |	  t| d tdW  d    S 1 sKw   Y  t| d tdS )Nr   ry  r  rR   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   rH  r  r   r   rS   r  r&   rt   r   r  rH   rH   rI   colleur_force_efface`  s   
 r"  c                 C   s   t stdS t| dS )uG   Renvoie la vue de la page de reinitialisation de la bdd entre 2 annéesrX   z"administrateur/nouvelle_annee.htmlr?   r   r   r~   rH   rH   rI   nouvelle_anneen  s   
r$  c                 C   s0   t stdS t }t| d|  tdS )ub   nettoie la base de données pour la nouvelle année scolaire et affiche un message de confirmationrX   r   rn   )r?   r   NouvelleAnneer&   rt   r9   reinitr   )r_   commandrH   rH   rI   nouvelle_annee_confirmu  s
   r(  c                 C   sL   t stdS tdd ttD d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édiarX   c                 S   s4   g | ]}|d d dkr| dd  dd qS )Nz.bz2_r   .r   )r  rF   frH   rH   rI   rJ     s   4 zsauvebdd.<locals>.<listcomp>T)reversec              
   S   s(   g | ]}t jt jtd |qS )zecolle-media_{}.tar.xz)ospathisfiler9   r>   r   r,  rH   rH   rI   rJ     s     zadministrateur/sauvegardes.htmlsauvegardes)r?   r   sortedr/  listdirr>   r   ra  )r_   fichiers_bz2fichiers_xzrH   rH   rI   sauvebdd~  s   r7  c              
   C   s   t stdS t }z| \}}t| d|| W n ty5 } zt| t| W Y d}~nd}~ww |dkrmz|	 \}}t| d|| W t
dS  tyl } zt| t| W Y d}~t
dS d}~w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 mediarX   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&   rt   r   r   r   media_backupr   )r_   mediar'  taillecompr   rH   rH   rI   sauvegarde_bdd  s*   r?  c              
   C   s   t stdS ztjtd|}t| W n ty2 } zt	
| d| W Y d}~nd}~ww ztjtd|}tj|rNt| W tdS W tdS  typ } zt	
| d| W Y d}~tdS d}~ww )u\   supprime la sauvegarde de date indiquée et renvoie la page sur les différentes sauvegardesrX   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 : {}r8  )r?   r   r/  r0  r9   r>   r   remover   r&   rt   r1  r   )r_   r   fichier_bz2r   
fichier_xzrH   rH   rI   suppr_sauvegarde  s*   rD  c                 C   s   t stdS t| dd|iS )uE   renvoie la page de restauration de la sauvegarde de la date indiquéerX   z'administrateur/restaure_sauvegarde.htmlr   r#  )r_   r   rH   rH   rI   restaure_sauvegarde  s   rE  c              
   C   s   t stdS t }tjtd|}tjtd|}z||| W n t	y? } zt
| t| W Y d}~nd}~ww z
|| W tdS  t	yg } zt
| t| W Y d}~tdS d}~ww )ue   restaure le système à la sauvegarde en question, selon le choix fait concernant les fichiers médiarX   r@  Nr8  )r?   r   Restorer/  r0  r9   r>   r   
gere_mediar   r&   rt   r   	gere_jsonr   )r_   r   choixr'  rB  rC  r   rH   rH   rI   restaure_sauvegarde_confirm  s&   rJ  )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.platypusr/   r0   r1   r2   r3   r4   reportlab.lib.stylesr5   r6   r7   reportlab.lib.pagesizesr8   r!  os.pathr9   r/  bz2_ior:   ecolle.settingsr;   r<   r=   r>   r?   r@   rA   r[   iorB   *accueil.management.commands.nouvelle_anneerC   r%  #accueil.management.commands.restorerF  "accueil.management.commands.backupr9  rN   rT   rl   rm   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,  r3  rf  rk  rp  rr  rd  rv  r~  r  r  r  r  r!  r"  r$  r(  r7  r?  rD  rE  rJ  rH   rH   rH   rI   <module>   s   t $




	


	
	

	
	

	
	

	
	


	


4

	

X



	




{

c



	


