
    X@	g                     (   d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ  d d
l!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m&Z& d dl)Z)d dl*m+Z+ d dl,m-Z-  G d dej.                  Z/ G d dej.                  Z0 G d dej1                  Z2 G d dej1                  Z3 G d dej1                  Z4 G d dej1                  Z5 G d dej6                  Z7 G d dej.                  Z8 G d  d!ej.                  Z9 G d" d#ej.                  Z: G d$ d%ej.                  Z; G d& d'ej.                  Z<d( Z= G d) d*ej6                  Z> G d+ d,ej6                  Z? G d- d.ej.                  Z@ G d/ d0ej6                  ZA G d1 d2ej.                  ZB G d3 d4ej6                  ZC G d5 d6ej.                  ZD G d7 d8ej6                  ZE G d9 d:ejF                  ZG G d; d<ej6                  ZH G d= d>ej6                  ZI G d? d@ej6                  ZJ G dA dBej6                  ZK G dC dDej6                  ZL G dE dFej6                  ZM G dG dHej6                  ZNdS )I    )forms)ClasseMatiereEtablissementSemaineColleurEleve	JourFerieUserProfConfigNoteColleRestrictedImageFieldInformation)SelectDateWidget)ValidationError)validate_password)transactionQ)RESOURCES_ROOT
MEDIA_ROOT)ElementTree)choice)pathremove)date	timedeltadatetimeN)TextIOWrapper)reducec                   (    e Zd Z G d d          ZdS )
ConfigFormc                       e Zd ZeZg dZdS )ConfigForm.Meta)nom_etablissement
app_mobilemodif_secret_colmodif_secret_groupemodif_prof_coldefault_modif_colmodif_prof_groupedefault_modif_groupemessage_elevesmathjaxects
ects_modifnom_adresse_etablissementvilleacademieN)__name__
__module____qualname__r   modelfields     $/opt/e-colle/administrateur/forms.pyMetar&      s'        R R Rr<   r>   Nr6   r7   r8   r>   r;   r<   r=   r$   r$      sF        R R R R R R R R R Rr<   r$   c                   .    e Zd Z G d d          Zd ZdS )InformationFormc                       e Zd ZeZddgZdS )InformationForm.MetadestinatairemessageN)r6   r7   r8   r   r9   r:   r;   r<   r=   r>   rC      s         +r<   r>   c                    t           j                            | j        j        | j        d                   }| j        j        r |                    | j        j                  }|                                rt          d          d S )NrD   )
expediteurrD   pkuV   Il y a déjà un message d'information avec ce destinataire. Effacez-le ou modifiez-le)
r   objectsfilterinstancerG   cleaned_datarI   excludeexistsr   )selfquerys     r=   cleanzInformationForm.clean   s    #**8Paear  tB  bC*  D  D= 	9MMt}'7M88E<<>> 	|!"z{{{	| 	|r<   N)r6   r7   r8   r>   rR   r;   r<   r=   rA   rA      sP        , , , , , , , ,| | | | |r<   rA   c                       e Zd Zd Zd ZdS )ColleurFormSetMdpc                     t          | j                  rdS d | j        D             }t          |          t          t	          |                    k    rt          d          dS )Q   vérifie si on n'a pas deux identifiants identiques dans le groupe de formulairesNc                 (    g | ]}|j         d          S usernamerM   .0forms     r=   
<listcomp>z+ColleurFormSetMdp.clean.<locals>.<listcomp>,        JJJtT&z2JJJr<   /Deux identifiants identiques dans le formulaireanyerrorsr   lensetr   rP   	usernamess     r=   rR   zColleurFormSetMdp.clean(   d    t{ 	FJJtzJJJ	y>>SY0000!"STTT 10r<   c           	         t          j                    5  | j        D ] }t          |j        d         |j        d                   }|                                 |j                            |j        d                    |j                            |j        d                    t          |j        d         |j        d         
                                |j        d         
                                |j        d	         |
          }|                    |j        d                    |                                 "	 ddd           dS # 1 swxY w Y   dS )z2Sauvegarde en BDD les colleurs/users du formulairegradeetablissement)rj   rk   matiereclasserY   
first_name	last_nameemail)rY   rn   ro   rp   colleurpasswordN)r   atomicr   r   rM   savematieresre   classesr   lowerset_password)rP   r]   rq   users       r=   rt   zColleurFormSetMdp.save0   s    !! 
	 
	
 	 	 t'8'APTPabqPrsss $$T%6y%ABBB##D$5h$?@@@T%6z%BdN_`lNmNsNsNuNu  AE  AR  S^  A_  Ae  Ae  Ag  Ag  nr  n  @G  nH  QX  Y  Y  Y!!$"3J"?@@@			
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s   D*EEENr6   r7   r8   rR   rt   r;   r<   r=   rT   rT   '   s5        U U U    r<   rT   c                   8     e Zd Zg f fd	Z fdZd Zd Z xZS )ColleurFormSetc                 H     t                      j        |i | || _        d S N)super__init__chaine_colleurs)rP   r   argskwargs	__class__s       r=   r   zColleurFormSet.__init__@   s-    $((((,r<   c                     t                                          |          }| j        r| j        |         j        |d<   nd|d<   |S uF   déterminer l'argument nommé 'pk' à passer en paramtre du formulairerI   r   )r   get_form_kwargsr   rI   rP   indexr   r   s      r=   r   zColleurFormSet.get_form_kwargsD   sI    ((// 	/69F4LLF4Lr<   c                     t          | j                  rdS d | j        D             }t          |          t          | j                  k    rt          d          dS )rV   Nc                 (    h | ]}|j         d          S rX   rZ   r[   s     r=   	<setcomp>z'ColleurFormSet.clean.<locals>.<setcomp>Q   r_   r<   r`   )rb   rc   r   rd   r   r   rf   s     r=   rR   zColleurFormSet.cleanM   sa    t{ 	FJJtzJJJ	y>>S!56666!"STTT 76r<   c                 4   t          j                    5  t          | j        | j                  D ]N\  }}|j        d         |_        |j        d         |_        |j        	                    |j        d                    |j
        	                    |j        d                    |                                 |j        }|j        d                                         |_        |j        d                                         |_        |j        d         |_        |j        d         |_        |j        d	         |_        |j        d
         r |                    |j        d
                    |                                 P	 ddd           dS # 1 swxY w Y   dS )uA   Sauvegarde (mise à jour) en BDD les colleurs/users du formulairerj   rk   rm   rl   rn   ro   rp   rY   	is_activerr   N)r   rs   zipr   r   rM   rj   rk   rv   re   ru   rt   ry   rw   rn   ro   rp   rY   r   rx   )rP   rq   r]   ry   s       r=   rt   zColleurFormSet.saveU   s   !! 	 	 #D$8 D D  "/8&*&7&H%##D$5h$?@@@ $$T%6y%ABBB\ $ 1, ? E E G G#0=CCEE,W5
 $ 1* =#0=$Z0 E%%d&7
&CDDD			 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   E+FFFr6   r7   r8   r   r   rR   rt   __classcell__r   s   @r=   r|   r|   ?   sz        &( - - - - - -    U U U      r<   r|   c                   <     e Zd Zg f fd	Z fdZ fdZd Z xZS )EleveFormSetc                 H     t                      j        |i | || _        d S r~   )r   r   chaine_eleves)rP   r   r   r   r   s       r=   r   zEleveFormSet.__init__i   s-    $((((*r<   c                     t                                          |          }| j        r| j        |         j        |d<   nd|d<   |S r   )r   r   r   rI   r   s      r=   r   zEleveFormSet.get_form_kwargsm   sI    ((// 	-e47F4LLF4Lr<   c                    t          | j                  rdS d | j        D             }t          |          t          | j                  k    rt          d          t                                                       t          | j        | j                  D ]Y\  }}|j	        d         Gt          j        t          |j        j                  }t          j        |          rt!          |           ZdS )rV   Nc                 (    h | ]}|j         d          S rX   rZ   r[   s     r=   r   z%EleveFormSet.clean.<locals>.<setcomp>z   r_   r<   r`   photo)rb   rc   r   rd   r   r   r   rR   r   rM   r   joinr   r   nameisfiler   )rP   rg   elever]   fichierr   s        r=   rR   zEleveFormSet.cleanv   s    t{ 	FJJtzJJJ	y>>S!34444!"STTTd0<< 	$ 	$JE$ )5	*U[-=>>;w'' $7OOO		$ 	$r<   c                    t          j                    5  t          | j        | j                  D ]\  }}|j        }|j        d                                         |_        |j        d                                         |_	        |j        d         |_
        |j        d         |_        |j        d         r |                    |j        d                    |j        |j        d         k    r||j        }d|_        |                                 |Xt           j                            |                                          s&	 |                                 n# t*          $ r Y nw xY w|j        d         |_        |j        d	         r|j        d	         |_        n|j        d	         d
u rd|_        |j        d         |_        |j        d         |_        |j        d         |_        |j        d         |_        |j        d         |_        |j        d         |_        |                                 |                                 	 ddd           dS # 1 swxY w Y   dS )u?   Sauvegarde (mise à jour) en BDD les eleves/users du formulairero   rn   rp   rY   rr   rm   N)grouper   Fddnldninelv1lv2option)r   rs   r   r   r   ry   rM   rw   ro   rn   rp   rY   rx   rm   r   rt   r	   rJ   rK   rO   delete	Exceptionr   r   r   r   r   r   r   )rP   r   r]   ry   r   s        r=   rt   zEleveFormSet.save   sr   !! 	 	!$"4TZ@@  
dZ#0=CCEE $ 1, ? E E G G,W5
 $ 1* =$Z0 E%%d&7
&CDDD<4#4X#>>>"\F#'ELJJLLL)%-2F2Ff2F2U2U2\2\2^2^)!"MMOOOO( ! ! ! D!!.x8$W- % $ 1' :EKK&w/588 $EK+E2	+E2	+E2	+E2	+E2	!.x8		

;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s7   D-IEI
E$!I#E$$C!IIIr   r   s   @r=   r   r   h   s        $& + + + + + +    $ $ $ $ $             r<   r   c                       e Zd Zd Zd ZdS )EleveFormSetMdpc                     t          | j                  rdS d | j        D             }t          |          t          t	          |                    k    rt          d          dS )rV   Nc                 (    g | ]}|j         d          S rX   rZ   r[   s     r=   r^   z)EleveFormSetMdp.clean.<locals>.<listcomp>   r_   r<   r`   ra   rf   s     r=   rR   zEleveFormSetMdp.clean   rh   r<   c                    t          j                    5  | j        D ]$}t          |j        d                                         |j        d                                         |j        d         |j        d                   }|                    |j        d                    t          |j        d         |j        d         |j        d	         |j        d
         |j        d         |j        d         |j        d         |j        d                   }|                                 ||_	        |                                 &	 d d d            d S # 1 swxY w Y   d S )Nrn   ro   rp   rY   )rn   ro   rp   rY   rr   rm   r   r   r   r   r   r   r   )rm   r   r   r   r   r   r   r   )
r   rs   r   r   rM   rw   rx   r	   rt   r   )rP   r]   ry   r   s       r=   rt   zEleveFormSetMdp.save   s   !! 	 	
  t'8'F'L'L'N'NY]YjkvYwY}Y}YY  GK  GX  Y`  Ga  nr  n  @J  nK  L  L  L!!$"3J"?@@@T%6x%@tGXY`Gafjfwx}f~  DH  DU  V[  D\  ae  ar  sx  ay  ~B  ~O  PU  ~V  [_  [l  mr  [s  ~B  ~O  PX  ~Y  Z  Z  Z

 
			 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   D.EEENrz   r;   r<   r=   r   r      s5        U U U    r<   r   c                   ^    e Zd Z ej        d          Z ej        dej                  ZdS )AdminConnexionFormidentifiant)labelMot de passe)r   widgetN)r6   r7   r8   r   	CharFieldrY   PasswordInputrr   r;   r<   r=   r   r      s;        u]333Hu^5;NOOOHHHr<   r   c                   H     e Zd Z fdZ G d d          Zd Z fdZ xZS )
ClasseFormc                      t                      j        |i | t          j                            d          | j        d         _        t          j                            d          | j        d         _        d S Nr   lvoption1option2r   r   r   rJ   rK   r:   querysetrP   r   r   r   s      r=   r   zClasseForm.__init__   i    $)&)))*1/*@*@A*@*F*FI'*1/*@*@A*@*F*FI'''r<   c                   ,    e Zd ZeZg dZdej        iZdS )ClasseForm.Metanomanneeru   r   r   ru   N	r6   r7   r8   r   r9   r:   r   CheckboxSelectMultiplewidgetsr;   r<   r=   r>   r      +        ===e:;r<   r>   c                 t   d | j         d         D             }t          j                            | j                                      dd                                          }t          |          t          	                                          }||z
  }|rAt          d                    d                    fd|D                                           t          t          j                            | j        	                              dd                                                    }t          |          t          	                                          }||z
  }|rAt          d
                    d                    fd|D                                           | j         d         S )Nc                     h | ]	}|j         
S r;   rH   r\   xs     r=   r   z,ClasseForm.clean_matieres.<locals>.<setcomp>   s    BBBqadBBBr<   ru   rm   matiere__pkmatiere__nomcompletu_   Vous ne pouvez pas retirer la/les matière(s): {} elles contiennent des notes dans cette classez, c              3   (   K   | ]}|         V  d S r~   r;   )r\   r   matieresNotesDicts     r=   	<genexpr>z,ClasseForm.clean_matieres.<locals>.<genexpr>   s[        Uy  Uy  op  Vg  hi  Vj  Uy  Uy  Uy  Uy  Uy  Uyr<   )creneau__classeu`   Vous ne pouvez pas retirer la/les matière(s): {} elles contiennent des colles dans cette classec              3   (   K   | ]}|         V  d S r~   r;   )r\   r   matieresCollesDicts     r=   r   z,ClasseForm.clean_matieres.<locals>.<genexpr>   s[        V{  V{  qr  Wi  jk  Wl  V{  V{  V{  V{  V{  V{r<   )rM   r   rJ   rK   rL   values_listdistinctdictre   keysr   formatr   r   )	rP   
matieresPkmatieresNotesmatieresNotesSetdiffmatieresCollesmatieresCollesSetr   r   s	          @@r=   clean_matiereszClasseForm.clean_matieres   sT   BBD$5j$ABBB
++4=+AAMMm\qrr{{}} //0557788*, 	{!  #D  #K  #K  LP  LU  LU  Uy  Uy  Uy  Uy  tx  Uy  Uy  Uy  Ly  Ly  #z  #z  {  {  {U]11$-1PP\\]j  mB  C  C  L  L  N  N  O  O!.11 2 7 7 9 9:: :- 	}!  #E  #L  #L  MQ  MV  MV  V{  V{  V{  V{  vz  V{  V{  V{  M{  M{  #|  #|  }  }  } ,,r<   c                     | j         d         r)| j         d         | j         d         vrt          d          | j         d         r)| j         d         | j         d         vrt          d          t                                                       d S Nr   ru   u/   L'option 1 doit être une matière de la classer   u/   L'option 2 doit être une matière de la classerM   r   r   rR   rP   r   s    r=   rR   zClasseForm.clean       Y' 	UD,=i,HPTPablPm,m,m!"STTTY' 	UD,=i,HPTPablPm,m,m!"STTTr<   )r6   r7   r8   r   r>   r   rR   r   r   s   @r=   r   r      s        G G G G G
< < < < < < < <
- - -"        r<   r   c            
           e Zd Z fdZ ej        dd          Z ej         e	j
        ed                                                    Z ed e                    d          D                       Zg ZeD ]\Ze                    d          \  ZZe                    ed	z   ez   d
z   edk    rdndz   dz    e d ee                    f           ] ej        de          Z G d d          Z fdZ fdZ xZS )ClasseGabaritFormc                      t                      j        |i | t          j                            d          | j        d         _        t          j                            d          | j        d         _        d S r   r   r   s      r=   r   zClasseGabaritForm.__init__   r   r<   gabaritFr   requiredzclasses.xmlc                 j    h | ]0}|                     d           dz   |                     d          z   1S )type_r   )getr   s     r=   r   zClasseGabaritForm.<setcomp>   s6    SSSq!%%--#AEE'NN2SSSr<   rm   r       è1rmu   e annéec                 F      fd|                     d          D             S )Nc                    g | ]}|                     d           |                     d          g                    d          k    C|                     d          dz   |                     d          z   |                     d          fS )r   r   r   r   )r   splitr\   r   ys     r=   r^   z.ClasseGabaritForm.<lambda>.<locals>.<listcomp>   sI     on  on  on  cd  @A  @E  @E  FL  @M  @M  NO  NS  NS  T[  N\  N\  ]  ab  ah  ah  il  am  am  m  mpqpupuv{p|p|  ~A  qA  BC  BG  BG  HO  BP  BP  qP  QR  QV  QV  W\  Q]  Q]  p^  m  m  mr<   rm   )findall)r   zs   ` r=   <lambda>zClasseGabaritForm.<lambda>   s`      on  on  on  on  hi  hq  hq  rz  h{  h{  on  on  on r<   r   choicesc                   ,    e Zd ZeZg dZdej        iZdS )ClasseGabaritForm.Metar   ru   Nr   r;   r<   r=   r>   r     r   r<   r>   c                     | j         d         r)| j         d         | j         d         vrt          d          | j         d         r)| j         d         | j         d         vrt          d          t                                                       d S r   r   r   s    r=   rR   zClasseGabaritForm.clean   r   r<   c                    | j         d         r9| j         d                             d          \  }}t          |          }| j                            d                    ||                                                    }t          | j         d         |                    d                    }|	                                 g }t          |          D ]`}t          j                            |                    d          t          |                    d                    t          |                    d	          pd
                    }|                                r	|d
         }nt          |                    d          t          |                    d                    |                    d	          pd
t          t          t!          t          j                   d
                             }t%          |          |_        |	                                 |                    |           b |j        j        |  d S t/                      	                                 d S )Nr   rm   r   zclasse[@nom='{}'][@annee='{}']r   r   )r   r   tempsr   r   )nom__iexactr  r   )r   r  r   couleur)rM   r   inttreer   r   popr   r   rt   listr   rJ   rK   rO   r   r   LISTE_COULEURSstr
nomcompletappendru   addr   )	rP   r   r   rm   nouvelleClasselisteMatieresrl   rQ   r   s	           r=   rt   zClasseGabaritForm.save   sp   Y' 	'177<<ICe**E9$$%E%L%LSQV%W%WXX\\^^F#(9%(@vzzRYGZGZ[[[N!!!M<< . ...7;;u;M;MTWX_XcXcdkXlXlTmTmqtu|  vA  vA  BF  vG  vG  vL  KL  rM  rM.  N  N<<>> ##AhGG%'++e*<*<3w{{SZG[G[C\C\ahalalmqararawvw  BH  IM  NQ  SZ  Si  Nj  Ik  Ik  lm  In  Bo  Bo  p  p  pG'*7||G&LLNNN$$W----'N#'7777GGLLNNNNNr<   )r6   r7   r8   r   r   BooleanFieldr   etreeparser   r   r   getrootr  sortedr   typesLISTE_CLASSEStypr   styler   r  ChoiceFieldrm   r>   rR   rt   r   r   s   @r=   r   r      s       G G G G G EY>>>G	YTY~m<<	=	=	E	E	G	GD
&SSDLL<R<RSSS
T
TEM | |IIcNNeeCiod25#::CC3OPZZ[a[a  dn  dn  dn  ps  tx  cy  cy  \z  \z  {  	|  	|  	|  	|UXmDDDF< < < < < < < <
            r<   r   c                   8     e Zd Z G d d          Z fdZ xZS )MatiereFormc                       e Zd ZeZg dZdS )MatiereForm.Meta)r   r   r	  r  N)r6   r7   r8   r   r9   r:   r;   r<   r=   r>   r"    s        ---r<   r>   c                     t                                          d          }t          |          |_        |                                 d S )NF)commit)r   rt   r  r  )rP   rm   r   s     r=   rt   zMatiereForm.save  s9    U++KKr<   )r6   r7   r8   r>   rt   r   r   s   @r=   r   r     s`        . . . . . . . .        r<   r   c                   (    e Zd Z G d d          ZdS )EtabFormc                       e Zd ZeZdgZdS )EtabForm.Metar   N)r6   r7   r8   r   r9   r:   r;   r<   r=   r>   r(    s        wr<   r>   Nr?   r;   r<   r=   r&  r&    s<                 r<   r&  c                       e Zd Z ej                    Ze ee                                          z
  Z d e          Zd eD             Z	 e
ee	          Z ej        de          Z G d d          Zd Zd	S )
SemaineFormdaysc                 <      fdt          dd          D             S )Nc                 <    g | ]}t          d |z            z   S    r+  r   r   s     r=   r^   z(SemaineForm.<lambda>.<locals>.<listcomp>&  -    EEE!)1----EEEr<   <   ranger   s   `r=   r   zSemaineForm.<lambda>&  $    EEEEuS}}EEE r<   c                 8    g | ]}|                     d           S z%d %B %Ystrftimer\   ds     r=   r^   zSemaineForm.<listcomp>'  $    555ajj$$555r<   lundir  c                       e Zd ZeZdgZdS )SemaineForm.MetanumeroN)r6   r7   r8   r   r9   r:   r;   r<   r=   r>   rB  +  s        zr<   r>   c                     | j         d         | j        _        | j         d         | j        _        | j                                         d S )Nr@  rC  )rM   rL   r@  rC  rt   rP   s    r=   rt   zSemaineForm.save/  s@    "/8#0:r<   N)r6   r7   r8   r   todaybaser   weekdayliste1liste2r   LISTE_LUNDISr   r  r@  r>   rt   r;   r<   r=   r*  r*  "  s        4:<<D		t||~~....DEEEtLLF55f555F3vf%%LEG\BBBE           r<   r*  c                  z    	 d t           j                            d          D             S # t          $ r g cY S w xY w)Nc                 P    g | ]#}|j         d                     |j                   f$S )zS{})rC  r   )r\   semaines     r=   r^   z get_semaines.<locals>.<listcomp>6  s-    sssW'.%,,w~">">?sssr<   rC  )r   rJ   order_byr   r;   r<   r=   get_semainesrP  4  sR    ssPWP_PhPhiqPrPrssss   			s   (+ ::c                   :    e Zd Z ej        ded          Zd ZdS )SemestreFormu   début du second semestreFr   r  r   c                     t           j                                                            | j        d                    d S )Nsemestre)	semestre2)r   rJ   allupdaterM   rE  s    r=   rt   zSemestreForm.save=  s5    ##0A*0M#NNNNNr<   N)r6   r7   r8   r   r  rP  rU  rt   r;   r<   r=   rR  rR  :  sC         u 'BlglmmmHO O O O Or<   rR  c            
          e Zd Z ej                    Ze ee                                          z
  Z d e          Zd eD             Z	 e
 eee	                    Z ej        ded          Z ej        d e edd	           edd	                    d          Z ej        d
ded ej        ddi                    Zd ZdS )GenereSemainesFormr+  c                 <      fdt          dd          D             S )Nc                 <    g | ]}t          d |z            z   S r/  r1  r   s     r=   r^   z/GenereSemainesForm.<lambda>.<locals>.<listcomp>D  r2  r<   r3  r4  r5  r7  s   `r=   r   zGenereSemainesForm.<lambda>D  r8  r<   c                 8    g | ]}|                     d           S r:  r;  r=  s     r=   r^   zGenereSemainesForm.<listcomp>E  r?  r<   u   première semaineTrS  znombre de semaines   )   u   semaines à retirer (vacances)u0   Maintenir CTRL enfoncé pour sélection multipleFsize20attrs)r   	help_textr  r   r   c                    g }d}t          | j        d                   }| j        d         }| j        d         }|r/|d         |k     r#|                    d           |r|d         |k     #t          j        |          }d}|r't          j        |                    d                    }||k     ry|r2||k    r,|sdn&t          j        |                    d                    }n,|                    t          |dz   |                     |dz  }|t          d	          z   }||k     yt          j        	                    |           d S )
Nr   nb_semainespremiere_semaineno_semainesFr^  )rC  r@  r0  r+  )
r
  rM   r  r   fromisoformatr  r   r   rJ   bulk_create)rP   semainesnombre_semainesnombre_totalsemaine_courantediff_semainesdiff_semaines          r=   rt   zGenereSemainesForm.saveK  sz   4,];<<,-?@)-8 	!a 03C C Ca     	!a 03C C C-.>?? 	D-m.?.?.B.BCCL,, %0@ @ @,9guut?QR_RcRcdeRfRf?g?g1BL\ ] ] ]^^^1$/)12E2E2EE ,, 	##H-----r<   N)r6   r7   r8   r   rF  rG  r   rH  rI  rJ  r  r   rK  r   r  rg  r6  rf  MultipleChoiceFieldSelectMultiplerh  rt   r;   r<   r=   rZ  rZ  @  sf       4:<<D		t||~~....DEEEtLLF55f555F4F6**++L(u(1Dlgklll#%#,@CCPUPUVWXZP[P[\a\abcdf\g\gLhLhuyzzzK+%+4T  aS  _k  x}  FZ  FK  FZ  bh  im  an  Fo  Fo  Fo  p  p  pK. . . . .r<   rZ  c                   (    e Zd Z G d d          ZdS )JourFerieFormc                   2    e Zd ZeZddgZd e            iZdS )JourFerieForm.Metar   r   N)r6   r7   r8   r
   r9   r:   r   r   r;   r<   r=   r>   rv  b  s0        u~**,,-r<   r>   Nr?   r;   r<   r=   rt  rt  a  s<        . . . . . . . . . .r<   rt  c                   $     e Zd Z fdZd Z xZS )ColleurFormc                    |                     d          | _         t                      j        |i | d}t	          j        dd          | j        d<   t	          j        dd          | j        d<   t	          j        d	dd
          | j        d<   t	          j        dd
          | j        d<   t	          j        ddd
          | j        d<   t	          j        ddd          | j        d<   t	          j	        |          | j        d<   t	          j
        t          j                            d          dd
          | j        d<   t	          j        dt          j                            d          d
          | j        d<   t	          j        d t           j                            d!d          d
          | j        d"<   d S )#NrI   ))r   autre)r^  	   certifié)   bi-admissible)      agrégé)      chaire supérieureNom   )r   
max_lengthro      Prénomrn   r   Fr   r  r   rr   actifr   r   zemail(facultatif)2   rp   Identifiant   TrY   r  rj   r   inconnur   empty_labelr   rk      Matière(s)r   r   r   rl   	Classe(s)r   rm   )r  rI   r   r   r   r   r:   r  
EmailFieldr  ModelChoiceFieldr   rJ   rO  ModelMultipleChoiceFieldr   r   )rP   r   r   LISTE_GRADEr   s       r=   r   zColleurForm.__init__h  s   **T""$((((m#(?"#M#M#MK $)O)r$R$R$RL!"'/RT^c"d"d"dJ#(#5GU#S#S#SK $/6IUWafgggG"'/QT`d"e"e"eJ$0EEEG','=}G\GeGefkGlGl  zC  MR  (S  (S  (SO$!&!?m]d]l]u]uv{]|]|  HM  "N  "N  "NI % >[Z`ZhZqZqryz  [A  [A  KP  !Q  !Q  !QHr<   c                     t                      }d| j        v r| j        d         |_        d| j        v r| j        d         |_        | j        d         }|rt	          ||           |S Nrn   ro   rr   r   rM   rn   ro   r   rP   ry   datas      r=   clean_motdepassezColleurForm.clean_motdepassex  o    VV4,,, -l;DO$+++,[9DN , 	)d4(((r<   )r6   r7   r8   r   r  r   r   s   @r=   rx  rx  g  sL        Q Q Q Q Q 	 	 	 	 	 	 	r<   rx  c                   n   e Zd Z eg d          Z ej        e          Z ej        e	j
                            d          dd          Z ej        dej
                            d          d          Z ej        d	ej
                            d
d          d          Z G d d          Zd ZdS )ColleurFormMdp)rz  r{  r}  r  r  r  r   r  Fr  r  r  r  r   c                       e Zd ZeZg dZdS )ColleurFormMdp.Meta)rn   ro   rY   rr   rp   r   Nr6   r7   r8   r   r9   r:   r;   r<   r=   r>   r    s        SSSr<   r>   c                     t                      }d| j        v r| j        d         |_        d| j        v r| j        d         |_        | j        d         }t	          ||           |S r  r  r  s      r=   clean_passwordzColleurFormMdp.clean_password  sg    VV4,,, -l;DO$+++,[9DN ,$t$$$r<   N)r6   r7   r8   	enumerater  r   r  rj   r  r   rJ   rO  rk   r  r   rl   r   rm   r>   r  r;   r<   r=   r  r    s       	___``KEk222E*E*M4I4R4RSX4Y4Yfoy~M,e,='/JbJbchJiJisxyyyG+U++v~G^G^_fglGmGmw|}}}FT T T T T T T T
    r<   r  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )	EleveFormc           	         |                     d          | _         t                      j        |i | t	          j        ddd          | j        d<   t	          j        ddd          | j        d<   t	          j        d	d
d          | j        d<   t	          j        ddd          | j        d<   t	          j        ddd          | j        d<   t	          j        ddg dt	          j	        ddi                    | j        d<   t	          j        ddd          | j        d<   t	          j        ddd          | j        d<   t          ddd !          | j        d"<   t	          j        t          j                            d#d$          d %          | j        d&<   t	          j        t          j                            d'(                              d$          d)d*          | j        d+<   t	          j        t          j                            d,(                              d$          d)d*          | j        d-<   t	          j        t          j                            d$          d)d*          | j        d.<   d S )/NrI   r  r  Tr  ro   r  rn   r  r  rY   r   Frr   zEmail(Facultatif)r  rp   )Date de naissance (pour ECTS, facultatif)%d/%m/%Yz%j/%m/%Yz%d/%n/%Yz%j/%n/%Yplaceholder
jj/mm/aaaarb  r   r   input_formatsr   r   )lieu de naissance (pour ECTS, facultatif)r   r   r  r   )   N° étudiant INE (pour ECTS, facultatif)   r   photo(jpg/png, 300x400)@KL r   r   max_upload_sizer   r   r   r   r  rm   r^  r   ----r  r   r|  r   r   )r  rI   r   r   r   r   r:   r  	DateField	TextInputr   r  r   rJ   rO  r   rK   r   s      r=   r   zEleveForm.__init__  s   **T""$((((#(?"Y]#^#^#^K $)O)r^b$c$c$cL!"'/QT`d"e"e"eJ"'/RT^c"d"d"dJ$/6IUWafgggG"_3^in  ~k  ~k  ~k  sx  sB  JW  Ye  If  sg  sg  sg  h  h  hE"_3^hmy{|||E"_3^hmy{|||E3:S]bsz{{{G % 6@W@WX_`e@f@fsw x x xH"3W_=S=SWX=S=Y=Y=b=bch=i=iv|  GL  M  M  ME"3W_=S=SWX=S=Y=Y=b=bch=i=iv|  GL  M  M  ME % 6@X@XY^@_@_lr  }B  !C  !C  !CHr<   c                     | j         d         }t          j                            |                              | j                                                  rt          d          |S )NrY   rX   )	eleve__pku   identifiant déjà existant)rM   r   rJ   rK   rN   rI   rO   r   rP   r  s     r=   clean_usernamezEleveForm.clean_username  s^     ,<$//77$'7JJQQSS 	A!"?@@@r<   c                     t                      }d| j        v r| j        d         |_        d| j        v r| j        d         |_        | j        d         }|rt	          ||           |S r  r  r  s      r=   r  zEleveForm.clean_motdepasse  r  r<   c                     | j         d         }|5|| j         d         j                                        vrt          d          |S Nr   rm   =   Cette langue ne fait pas partie des matières de cette classerM   ru   rW  r   r  s     r=   	clean_lv1zEleveForm.clean_lv1  K     '4,X6?CCEEEE%&efffr<   c                     | j         d         }|5|| j         d         j                                        vrt          d          |S Nr   rm   r  r  r  s     r=   	clean_lv2zEleveForm.clean_lv2  r  r<   c                     | j         d         }|5|| j         d         j        | j         d         j        fvrt          d          |S Nr   rm   u=   Cette matière ne fait pas partie des options de cette classerM   r   r   r   r  s     r=   clean_optionzEleveForm.clean_option  P     *D-h7?ARS[A\Adeee%&efffr<   c                    | j         d         }|rt          |          dk    rt          d          	 t          |d d                   }|dk    st	          |t                    st          d          n# t
          $ r t          d          w xY wdt          |d                   cxk    rd	k    sn t          d
          |S )Nr   r  .   le numéro d'étudiant comporte 11 caractèresr   5   les 9 premiers caractères doivent être des chiffresA   Z   u.   le dernier caractère est une lettre majusculerM   rd   r   r
  
isinstancer   ordrP   r  ls      r=   	clean_inezEleveForm.clean_ine  s     ' 
	X4yyB%&VWWW_d3B3i..a44z!C004)*abbb  _ _ _%&]^^^_#d2h------2----%&VWWW   AA5 5B)r6   r7   r8   r   r  r  r  r  r  r  r   r   s   @r=   r  r    s        C C C C C"  	 	 	            r<   r  c            	          e Zd Z ej        ddg d ej        ddi                    Z ej        ddd	
          Z ej        ddd
          Z	 e
ddd          Z ej        ej                            dd          d          Z ej        ej                            d                              d          dd          Z ej        ej                            d                              d          dd          Z ej        ej                            d          dd          Z G d d          Zd Zd Zd Zd Zd ZdS ) EleveFormMdpr  Fr  r  r  rb  r  r  r  r  r  r  r  r  r  r   r   Nr  r^  r   r  r  r|  c                       e Zd ZeZg dZdS )EleveFormMdp.Meta)rn   ro   rY   rr   rp   Nr  r;   r<   r=   r>   r    s        GGGr<   r>   c                     | j         d         }|5|| j         d         j                                        vrt          d          |S r  r  r  s     r=   r  zEleveFormMdp.clean_lv1  r  r<   c                     | j         d         }|5|| j         d         j                                        vrt          d          |S r  r  r  s     r=   r  zEleveFormMdp.clean_lv2  r  r<   c                     | j         d         }|5|| j         d         j        | j         d         j        fvrt          d          |S r  r  r  s     r=   r  zEleveFormMdp.clean_option  r  r<   c                     t                      }d| j        v r| j        d         |_        d| j        v r| j        d         |_        | j        d         }t	          ||           |S )Nprenomr   
motdepasser  r  s      r=   r  zEleveFormMdp.clean_motdepasse  sg    VVt((( -h7DOD%%%,U3DN .$t$$$r<   c                    | j         d         }|rt          |          dk    rt          d          	 t          |d d                   }|dk    st	          |t                    st          d          n# t
          $ r t          d          w xY wdt          |d                   cxk    rd	k    sn t          d
          |S )Nr   r  r  r  r   r  r  r  r  u4   le dernier caractère est une lettre ASCII majusculer  r  s      r=   r  zEleveFormMdp.clean_ine  s     ' 
	^4yyB%&VWWW_d3B3i..a44z!C004)*abbb  _ _ _%&]^^^_#d2h------2----%&\]]]r  )r6   r7   r8   r   r  r  r   r   r   r   r   r   r  r   rJ   rO  rm   r   rK   r   r   r   r>   r  r  r  r  r  r;   r<   r=   r  r    s"       
%/ KV[  kX  kX  kX  `o  `e  `o  wD  FR  vS  `T  `T  `T  U  U  UC
%/ KUZfh
i
i
iC
%/ KUZfh
i
i
iC  '@%`ghhhE#U#V^-D-DWU-S-S`deeeF
 %
 '/*@*@A*@*F*F*O*OPU*V*Vcisx
y
y
yC
 %
 '/*@*@A*@*F*F*O*OPU*V*Vcisx
y
y
yC#U#W_-E-Ee-L-LY_inoooFH H H H H H H H            r<   r  c                   *     e Zd Z fdZd Zd Z xZS )ProfFormc                     t                      j        |i | || _        |j                                        D ]v}t
          j                            ||d                              dd          }t          j
        t          |          |d          | j        t          |j                  <   wt
          j                            |d          }t          j        d|d          | j        d<   d S )	NT)ru   rv   user__is_activeuser__last_nameFr  )rv   r  zprof principalprofprincipal)r   r   rm   ru   rW  r   rJ   rK   rO  r   r  r  r:   rI   r  )rP   rm   r   r   rl   rQ   query2r   s          r=   r   zProfForm.__init__  s    $)&)))**,, 	| 	|G/(('&Y](^^gghy  {L  M  ME+0+IPST[P\P\fkuz+{+{+{DKGJ((''t'LL','=DT^dns't't'tO$$$r<   c                       j         d         }|;| fd j        j                                        D             vrt	          d          dS dS )uK   Vérifie que le prof principal est bien choisi parmi les profs de la classer  Nc                 X    g | ]&}j         t          |j                           D ]}|'S r;   rM   r  rI   r\   rl   rq   rP   s      r=   r^   z"ProfForm.clean.<locals>.<listcomp>(  st      7\  7\  7\7x|  yJ  KN  OV  OY  KZ  KZ  y[  7\  7\mtw  7\  7\  7\  7\r<   zFle professeur principal doit faire partie des professeurs de la classe)rM   rm   ru   rW  r   )rP   	profprincs   ` r=   rR   zProfForm.clean%  s    %o6	 Y  7\  7\  7\  7\dkNbNfNfNhNh  7\  7\  7\  &\  &\!"jkkk !   &\  &\r<   c                      fd j         j                                        D             }t          j                             j                                                    t          j                                        t          j        	                     fd|D                         j
        d         r j
        d          j         _        nd j         _         j                                          dS )u9   Sauvegarde en base de données les données du formulairec                 \    g | ](}j         t          |j                           D ]}||f)S r;   r  r  s      r=   r^   z!ProfForm.save.<locals>.<listcomp>-  sq      K  K  K'gkgxy|  ~E  ~H  zI  zI  hJ  K  K\cWW-  K  K  K  Kr<   r   c           	      \    g | ](\  }}t          j        |j        j        |           )S ))rm   rl   modifgroupemodifcolloscoperq   )r   rm   r.   r,   )r\   rl   rq   configrP   s      r=   r^   z!ProfForm.save.<locals>.<listcomp>2  sq      "W  "W  "W  q@  qx  y@$dk'V\Vq  CI  C[  dk  #l  #l  #l  "W  "W  "Wr<   r  N)rm   ru   rW  r   rJ   rK   r   r   
get_configrj  rM   r  rt   )rP   matieres_avec_profr  s   ` @r=   rt   zProfForm.save+  s    K  K  K  KT[=Q=U=U=W=W  K  K  K4;//66888~((**    "W  "W  "W  "W  "W  DV  "W  "W  "W  	X  	X  	X_- 	-&*&7&HDK%%(,DK%r<   )r6   r7   r8   r   rR   rt   r   r   s   @r=   r  r    s^        u u u u ul l l      r<   r  c                       e Zd Zd ZdS )CustomMultipleChoiceFieldc                      dS )N r;   )r   r   s     r=   label_from_instancez-CustomMultipleChoiceField.label_from_instance;  s    rr<   N)r6   r7   r8   r  r;   r<   r=   r  r  :  s#            r<   r  c                         e Zd Zd fd	Z xZS )SelectColleurFormNr  c                     t                      j        |i | t          j        }|r|                    |          }|r|                    |          }|r4|                    t          |          t          |          z            }|                    ddd          }t          |dt          j	        	          | j
        d
<   d | j
        d
         _        d S )N)ru   )rv   user__first_name__icontainsuser__last_name__icontainsr  user__first_nameuser__pkTr   r   r   rq   )r   r   r   rJ   rK   r   rO  r  r   r   r:   r  )rP   rl   rm   patternr   r   rQ   r   s          r=   r   zSelectColleurForm.__init__?  s    $)&))) 	3LL'L22E 	1LLL00E 	qLLw!G!G!G!gnJoJoJo!oppEnn./A*MM!:ETXbgb~!!!I+/I***r<   )NNr  r6   r7   r8   r   r   r   s   @r=   r  r  >  s=        0 0 0 0 0 0 0 0 0 0r<   r  c                   :    e Zd Z ej        ddd          Zd ZdS )ChercheUserFormr  F(   r  c                 @    | j         d                                         S )Nr   )rM   rw   rE  s    r=   	clean_nomzChercheUserForm.clean_nomO  s     '--///r<   N)r6   r7   r8   r   r   r   r  r;   r<   r=   r  r  L  s;        
%/%E
K
K
KC0 0 0 0 0r<   r  c                         e Zd Zd fd	Z xZS )SelectEleveFormNTr  c                     t                      j        |i | |rt          j                            |                              dddd          }t          j                            |          }t          |j        r|j        j	        nd |j
        r|j
        j	        nd f          d hz
  }|r|                    |          }nt          j                            dddd          }t          d t          j                                        D                       t          d	 t          j                                        D                       z  d hz
  }d
 |D             }t          j                            |          }|r4|                    t          |          t          |          z            }|r|                    ddd          }n|                    ddd          }t          |dt           j                  | j        d<   d | j        d         _        t!          j        t          j                            dd          d          | j        d<   d | j        d         _        t!          j        t          j                            d                              d          d          | j        d<   t!          j        t          j                            d                              d          d          | j        d<   t!          j        |                    d          d          | j        d<   d S )Nr   ry   rm   r   r   matieresclasse)pk__inc                     g | ]	}|j         
S r;   )r   r\   rm   s     r=   r^   z,SelectEleveForm.__init__.<locals>.<listcomp>^  s    QQQ&v~QQQr<   c                     g | ]	}|j         
S r;   )r   r  s     r=   r^   z,SelectEleveForm.__init__.<locals>.<listcomp>^  s5      ZM  ZM  ZMmsZ`Zh  ZM  ZM  ZMr<   c                     h | ]	}|j         
S r;   rH   r   s     r=   r   z+SelectEleveForm.__init__.<locals>.<setcomp>_  s    3331!$333r<   r  r  classe__nomr  r  Tr	  r   r   r   F)r   r   klasser^  r   r|  r   )r   r   r	   rJ   rK   select_relatedr   re   r   rI   r   r   rW  r   rO  r  r   r   r:   r  r  )
rP   r  trir
  r   r   rQ   r  
options_pkr   s
            r=   r   zSelectEleveForm.__init__T  sG   $)&))) 
	AM(((77FFvhW\]bccE_++6+BBF6>Kfn//tbhbpMzV^M^M^vz{||  AE  @F  FJ :j99M00uMMEQQFN<N<N<P<PQQQRRUX  ZM  ZMw}  xF  xJ  xJ  xL  xL  ZM  ZM  ZM  VN  VN  N  SW  RX  XJ33
333J_++Z+@@F 	qLLw!G!G!G!gnJoJoJo!oppE 	WNN=1BCUVVEENN#45GVVE8%RV`e`|}}}G)-G( % 6@W@WX_`e@f@fpu v v vH*.H)"3W_=S=SWX=S=Y=Y=b=bch=i=isxyyyE"3W_=S=SWX=S=Y=Y=b=bch=i=isxyyyE % 6PU@V@V`e f f fHr<   )NTr  r  r   s   @r=   r  r  S  sG        g g g g g g g g g gr<   r  c                   j    e Zd Zej                            d          Z ej        dedd          Z	dS )ClasseSelectFormr   r   ToutesFr   r   r  r   N)
r6   r7   r8   r   rJ   rO  rQ   r   r  rm   r;   r<   r=   r!  r!  o  s?        
.
!
!%
(
(E!5!%X_deeeFFFr<   r!  c                       e Zd Z ej        dej                            d          dd          Z ej        de	j                            d          dd          Z
d ZdS )	MatiereClasseSelectForm   Matièrer   r"  Fr#  r   c                     | j         d         h| j         d         ]| j         d         | j         d         j                                        vr.t          d| j         d         | j         d         d          d S d S d S )Nrm   rl   u6   la classe %(classe)s n'a pas pour matière %(matiere)s)rm   rl   )paramsr  rE  s    r=   rR   zMatiereClasseSelectForm.cleanw  s    X&2t7H7S7_dhduv  eA  IM  IZ  [c  Id  Im  Iq  Iq  Is  Is  es  es!"Zlpl}  G  mH  SW  Sd  en  So  cp  cp  q  q  q  q 327_7_  es  esr<   N)r6   r7   r8   r   r  r   rJ   rO  rl   r   rm   rR   r;   r<   r=   r%  r%  s  s        "E"W_=U=UV[=\=\jr  }B  C  C  CG!5!&.:Q:QRW:X:Xfnx}~~~Fq q q q qr<   r%  c                      e Zd Z ej        ddd          Z ej        ddd          Z ej        ddd          Z ej        d	d
          Z	 ej        ddd          Z
 ej        dd
          Z ej        ddd          Z ej        dd
          Z ej        ddd          Z ej        dd
          Z ej        ddd          Z ej        dd
          Z ej        ddd          Z ej        dd
          Z ej        ddd          Z ej        dd
          Z ej        ddd          Z ej        dd
          Z ej        ddd          Z ej        dd
          Z ej        dd
          Z ej        ddd          Z ej        d d!ej                             d"          d#d$          Z!d% Z"d& Z#d'S )(CsvForm   intitulé du champ nomTr  r     intitulé du champ prénom   intitulé du champ emailFr4  rp   r   u   intitulé du champ classerm      intitulé du champ identifiantr      intitulé du champ mot de passemot de passeu   intitulé du champ lv1r   u   intitulé du champ lv2r   u0   intitulé du champ date de naissance (pour ECTS)zdate de naissanceu0   intitulé du champ lieu de naissance (pour ECTS)r  zlieu de naissanceu*   intitulé du champ numéro INE (pour ECTS)INEFichier csvimport directm   (cocher si le fichier csv contient déjà toutes les infos nécessaires et qu'il     n'y a rien à retoucher)r   r   rd  r   u:   (ignoré si la classe est importée depuis le fichier csv)r      Non définier   rd  r   r  r   c           	      l   | j         d         r)| j         d         r| j         d         st          d          t          | j         d         j        d          5 }t	          j                                        |                    d                    }| j         d	         | j         d
         h| _        | j         d         r%| j        	                    | j         d                    | j         d         r%| j        	                    | j         d                    | j         d         r%| j        	                    | j         d                    | j         d         r%| j        	                    | j         d                    | j         d         r%| j        	                    | j         d                    | j         d         r%| j        	                    | j         d                    | j         d         r%| j        	                    | j         d                    | j         d         r%| j        	                    | j         d                    | j         d         r%| j        	                    | j         d                    t	          j
        ||          }|                    d           t          |          fd| j        D             }|r"t          d                    |                    g | _        g | _        g | _        |                    d           t          |           t#          |          D ]l\  }t%                      }dx}x}x}	x}
x}}| j         d         r~| j         d                  }|d k    re	 t&          j                            |                                !          |d"<   n.# t.          $ r!}t          t1          |                    d }~ww xY wd"|vrM| j         d"         @	 | j         d"         |d"<   n.# t.          $ r!}t          t1          |                    d }~ww xY w| j         d         r| j         d                  }|d k    r	 t2          j                            d#|                                $          }d"|v r|                    |d"         %          }|                                }|r|d         |d<   n.# t.          $ r!}t          t1          |                    d }~ww xY w| j         d         r| j         d                  }|d k    r	 t2          j                            d&|                                $          }	d"|v r|	                    |d"         %          }	|	                                }|r|d         |d<   n.# t.          $ r!}t          t1          |                    d }~ww xY w| j         d         rF	 | j         d                  |d<   n.# t.          $ r!}t          t1          |                    d }~ww xY w| j         d         rg| j         d                  }|d k    rN	 t9          j        |d'          |d<   n4# t.          $ r'}t          d(                    |                    d }~ww xY w| j         d         rF	 | j         d                  |d<   n.# t.          $ r!}t          t1          |                    d }~ww xY w	 | j                            t?          d.i |           n.# t.          $ r!}t          t1          |                    d }~ww xY w|                                  	 | j         d	                  |d)<   n.# t.          $ r!}t          t1          |                    d }~ww xY w	 | j         d
                  |d*<   n.# t.          $ r!}t          t1          |                    d }~ww xY w| j         d         r| j         d                  }|d k    r/| j         d         r"t          d+                    |                    |d k    r5	 ||d,<   n.# t.          $ r!}t          t1          |                    d }~ww xY w| j         d         rN| j         d                  }|d k    r5	 ||d<   n.# t.          $ r!}t          t1          |                    d }~ww xY w	 tC          d.i |}n.# t.          $ r!}t          t1          |                    d }~ww xY w| j                            |           d }| j         d         rd| j         d                  }|d k    r/| j         d         r"t          d-                    |                    | j         d         rtE          |           | j                            |           n	 d d d            d S # 1 swxY w Y   d S )/NimportdirectgetidentifiantgetmotdepasseUPour un import direct il faut valider au moins les champs identifiant et mot de passer   z	utf-8-sigencoding   r   r  getemailrp   r   r  	getclasse	nomclassegetlv1r   getlv2r   getldnr   getddnr   getiner   dialectr   c                     g | ]}|v|	S r;   r;   r\   r   lignes     r=   r^   z!CsvForm.clean.<locals>.<listcomp>      @@@Q%qr<   4   Les intitulés des champs suivants sont inexacts: {}Fr  r  rm   r^  )r   r  r  r|  r  u=   la date de naissance de l'élève à la ligne {} est invalidero   rn   u1   il manque l'identifiant pour l'élève de rang {}rY   u3   il manque le mot de passe pour l'élève de rang {}r;   )#rM   r   r!   filecsvSniffersniffreadchampsr  
DictReaderseeknextr   userselevesmdpr  r   r   rJ   r   rw   r   r  r   rK   rW  r    strptimer  r	   clearr   r   )rP   
fichiercsvrI  readererreursir   eleveclasseelevelv1elevelv2eleveddneleveldneleveinedonneeeru   ry   r[  rL  s                     @r=   rR   zCsvForm.clean  s
   ^, 	{t7HIY7Z 	{bfbs  uD  cE 	{!"yzzz4,Y7<TTT A	%Xbkmm))*//$*?*?@@G,U3T5Fx5PQDK , < 1' :;;; !12 B 1- @AAA 1 A 1, ?@@@ - @ 1+ >??? * : 1% 8999 * : 1% 8999 * : 1% 8999 * : 1% 8999 * : 1% 8999^J@@@FOOALLE@@@@$+@@@G n%&\&c&cdk&l&lmmmDJDKDHOOALLL%f-- a% a%5vvUZZZhZZHZx($[1 :"4#4[#ABF||:-3^-?-?FLLNN-?-[-[DNN( : : :"1#a&&"9"99:4''D,=h,G,S6)-):8)DX$ 6 6 6-c!ff5556$X. :"4#4U#;<F||:'.'='=PVP\P\P^P^'='_'_H'4//+3??$x.?+Y+Y'/||~~H' :.6qkU( : : :"1#a&&"9"99:$X. :"4#4U#;<F||:'.'='=PVP\P\P^P^'='_'_H'4//+3??$x.?+Y+Y'/||~~H' :.6qkU( : : :"1#a&&"9"99:$X. 66&+D,=e,D&EU$ 6 6 6-c!ff5556$X. }"4#4U#;<F||}*2*;FJ*O*ODKK( } } }"12q2x2xyz2{2{"|"||}$X. 66&+D,=e,D&EU$ 6 6 6-c!ff55566K&&u}}t}}5555  6 6 6-c!ff5556

3(-d.?.F(GD%%  3 3 3*3q6622233).t/@/J)KD&&  3 3 3*3q662223$%56 :"4#4]#CDF||(9.(I|-.a.h.hij.k.klll2:/5D,,( : : :"1#a&&"9"99:$Z0 :"4#4W#=>F||:,2DMM( : : :"1#a&&"9"99:2<<$<<DD  2 2 2)#a&&1112
!!$'''$_5 / 1, ?@CbyyT%6~%Fy-.c.j.jkl.m.mnnn*>: /)#...$$$$Ca%AA	% A	% A	% A	% A	% A	% A	% A	% A	% A	% A	% A	% A	% A	% A	% A	% A	% A	%s  Lf)45N*)f)*
O4OOf)*O;:f);
P&P!!P&&)f)A4Sf)
S0S++S00)f)A4Vf)
V:V55V::f)W"!f)"
X,XX)f)7Yf)
Z"Y<<Zf)Z)(f))
[3[[f)$[=<f)=
\(\##\((f) ]f)
^!]==^f)^f)
_'__Af)'`-,f)-
a7aa)f)bf)
b3b..b33f)7cf)
c/c**c//B,f))f-0f-c                 r   | j         d         rt          j                    5  t          | j        | j        | j                  D ]6\  }}}|                                 ||_        |	                    |           7t          j                            | j                   d d d            d S # 1 swxY w Y   d S d S Nr9  )rM   r   rs   r   rY  rZ  r[  rt   r   rx   r   rJ   rj  )rP   ry   r   r[  s       r=   rt   zCsvForm.save  s    ^, 	5#%% 5 5(+DJTX(N(N + +$D%JJLLL!&DJ%%c****((4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5s   A<B**B.1B.N)$r6   r7   r8   r   r   r   r  rp   r  r@  rB  rA  r   r:  r  r;  r   rC  r   rD  r   rF  r   rE  r   rG  	FileFieldr   r9  r  r   rJ   rO  rm   rR   rt   r;   r<   r=   r*  r*  {  s       
%/ 8$RT
U
U
UCU_#?Y[\\\FEO"<eWYZZZE!u!EBBBH&A4[]^^^I""eDDDI!%/(HRVbdeeeK'U'mNNNN 'HRVbdeeeJ&E&^NNNM
%/ 8$RT
U
U
UCUe>>>F
%/ 8$RT
U
U
UCUe>>>F
%/ R\amo
p
p
pCU&9eLLLF
%/ R\amo
p
p
pCU&9eLLLF
%/ LV[gi
j
j
jCUe>>>FeoM4@@@G%5%O Z      L!5!<x  DJ  DR  D[  D[  \a  Db  Db  p~  HM  N  N  NFE% E% E%N5 5 5 5 5r<   r*  c                      e Zd Z ej        ddd          Z ej        ddd          Z ej        ddd          Z ej        dd	          Z	 ej        d
dd          Z
 ej        dd	          Z ej        ddd          Z ej        dd	          Z ej        ddd          Z ej        dd	          Z ej        ddd          Z ej        dd	          Z ej        dd	          Z ej        ddd          Z ej        ddej                            d          dd          Z ej        ddej                            d          dd          Zd Zd ZdS ) CsvColleurFormr+  Tr  r  r,  r-  Frp   r   u   intitulé du champ classesrm   r.  r   r/  r0  u   intitulé du champ matièresu	   matièresr2  r3  r4  r5  r   uK   (ignoré si la/les classe(s) est (sont) importée(s) depuis le fichier csv)r   r6  r7  r&  uK   (ignoré si la/les matières est (sont) importée(s) depuis le fichier csv)c                    | j         d         r)| j         d         r| j         d         st          d          t          | j         d         j        d          5 }t	          j                                        |                    d                    }| j         d	         | j         d
         h| _        | j         d         r%| j        	                    | j         d                    | j         d         r%| j        	                    | j         d                    | j         d         r%| j        	                    | j         d                    | j         d         r%| j        	                    | j         d                    | j         d         r%| j        	                    | j         d                    t	          j
        ||          }|                    d           t          |          fd| j        D             }|r"t          d                    |                    g | _        g | _        g | _        g | _        |                    d           t          |           t%          |          D ]\  }t'                      }g }g }| j         d         rd | j         d                                      d          D             }	|	dgk    rq	 t+          d |	          }	t-          d |	          }	t.          j                            |	          }n.# t4          $ r!}
t          t7          |
                    d }
~
ww xY w|sK| j         d         r>	 | j         d         g}n.# t4          $ r!}
t          t7          |
                    d }
~
ww xY w| j         d         rd | j         d                                      d          D             }	|	dgk    rq	 t+          d |	          }	t-          d |	          }	t8          j                            |	          }n.# t4          $ r!}
t          t7          |
                    d }
~
ww xY w|sK| j         d          r>	 | j         d          g}n.# t4          $ r!}
t          t7          |
                    d }
~
ww xY w	 | j                            |           | j                            |           n.# t4          $ r!}
t          t7          |
                    d }
~
ww xY w|                                 	 | j         d	                  |d!<   n.# t4          $ r!}
t          t7          |
                    d }
~
ww xY w	 | j         d
                  |d"<   n.# t4          $ r!}
t          t7          |
                    d }
~
ww xY w| j         d         r| j         d                  }	|	dk    r/| j         d         r"t          d#                    |                    |	dk    r5	 |	|d$<   n.# t4          $ r!}
t          t7          |
                    d }
~
ww xY w| j         d         rN| j         d                  }	|	dk    r5	 |	|d<   n.# t4          $ r!}
t          t7          |
                    d }
~
ww xY w	 t?          d&i |}n.# t4          $ r!}
t          t7          |
                    d }
~
ww xY w| j                            |           d}| j         d         rd| j         d                  }|dk    r/| j         d         r"t          d%                    |                    | j         d         rtA          |           | j                            |           	 d d d            d S # 1 swxY w Y   d S )'Nr9  r:  r;  r<  r   utf8r=  r?  r   r  r@  rp   r   r  
getclasses
nomclassesgetmatieresnommatieresrH  r   c                     g | ]}|v|	S r;   r;   rK  s     r=   r^   z(CsvColleurForm.clean.<locals>.<listcomp>O  rM  r<   rN  c                 Z    g | ](}|                                                                 )S r;   )striprw   r   s     r=   r^   z(CsvColleurForm.clean.<locals>.<listcomp>]  s*    kkkAaggiioo//kkkr<   ;r  c                 "    t          |           S )NrO  r   ns    r=   r   z&CsvColleurForm.clean.<locals>.<lambda>`  s    13C3C3C r<   c                     | |z  S r~   r;   abs     r=   r   z&CsvColleurForm.clean.<locals>.<lambda>a  
    Q r<   rm   c                 6    g | ]}|                                 S r;   )rw  r   s     r=   r^   z(CsvColleurForm.clean.<locals>.<listcomp>k  s     dddAaggiidddr<   c                 "    t          |           S )N)nomcomplet__iexactr   rz  s    r=   r   z&CsvColleurForm.clean.<locals>.<lambda>n  s    13J3J3J r<   c                     | |z  S r~   r;   r}  s     r=   r   z&CsvColleurForm.clean.<locals>.<lambda>o  r  r<   rl   ro   rn   z2il manque l'identifiant pour le colleur de rang {}rY   z4il manque le mot de passe pour le colleur de rang {}r;   )!rM   r   r!   rP  rQ  rR  rS  rT  rU  r  rV  rW  rX  r   rY  rv   ru   r[  r  r   r   mapr"   r   rJ   rK   r   r  r   r  r]  r   r   )rP   r^  rI  r_  r`  ra  r   rv   ru   rh  ri  ry   r[  rL  s                @r=   rR   zCsvColleurForm.clean;  s?   ^, 	{t7HIY7Z 	{bfbs  uD  cE 	{!"yzzz4,Y7<OOO c	%S]kmm))*//$*?*?@@G,U3T5Fx5PQDK , < 1' :;;; !12 B 1- @AAA 1 A 1, ?@@@ . A 1, ?@@@ / B 1- @AAA^J@@@FOOALLE@@@@$+@@@G n%&\&c&cdk&l&lmmmDJDLDMDHOOALLL%f-- J% J%5vv$\2 :kkt?PQ]?^9_9e9efi9j9jkkkF"~~:%()C)CV%L%LF%+,>,>%G%GF&,n&;&;F&C&CGG( : : :"1#a&&"9"99: 64#4X#> 66#'#4X#>"?$ 6 6 6-c!ff5556$]3 :ddt7H7W1X1^1^_b1c1cdddF"~~:%()J)JF%S%SF%+,>,>%G%GF'.'='=f'E'EHH( : : :"1#a&&"9"99: 6D$5i$@ 66$($5i$@#A$ 6 6 6-c!ff55566L''000M((2222  6 6 6-c!ff5556

3(-d.?.F(GD%%  3 3 3*3q6622233).t/@/J)KD&&  3 3 3*3q662223$%56 :"4#4]#CDF||(9.(I|-.b.i.ijk.l.lmmm2:/5D,,( : : :"1#a&&"9"99:$Z0 :"4#4W#=>F||:,2DMM( : : :"1#a&&"9"99:2<<$<<DD  2 2 2)#a&&1112
!!$'''$_5 / 1, ?@CbyyT%6~%Fy-.d.k.klm.n.nooo*>: /)#...$$$$UJ%3c	% c	% c	% c	% c	% c	% c	% c	% c	% c	% c	% c	% c	% c	% c	% c	% c	% c	%s  I/]*	AL
]*
L6L11L66]*	M]*
N"M>>NA]*AP]*
P8P33P88]*Q]*
R$R  R]*	4R>=]*>
S)S$$S))]*T]*
U"T>>U]*U]*
V	(VV		A]*(W.-]*.
X8XX)]*Y	]*	
Y4Y//Y44]*8Z]*
Z0Z++Z00B,]**].1].c                    | j         d         rt          j                    5  t          | j        | j        | j        | j                  D ]}\  }}}}t                      }|	                                  |j        j
        t          |             |j        j
        t          |            ||_        |                    |           ~t          j                            | j                   d d d            d S # 1 swxY w Y   d S d S rk  )rM   r   rs   r   rY  rv   ru   r[  r   rt   r  r  rq   rx   r   rJ   rj  )rP   ry   rv   ru   r[  rq   s         r=   rt   zCsvColleurForm.save  s>   ^, 		5#%% 5 547
DLRVR_aeai4j4j + +0D'8S%iiGLLNNN'GO'g77(G$($x..99#*DL%%c****((4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5		5 		5s   C	C77C;>C;N)r6   r7   r8   r   r   r   r  rp   r  r@  rr  rq  r   r:  r  r;  rt  rs  rl  r   r9  r  r   rJ   rO  rm   r   rl   rR   rt   r;   r<   r=   rn  rn  '  sb       
%/ 8$RT
U
U
UCU_#?Y[\\\FEO"<eWYZZZE!u!EBBBH 'CU^`aaaJ##(uEEEJ!%/(HRVbdeeeK'U'mNNNN 'HRVbdeeeJ&E&^NNNM!%/(FPUacdddK$%$;5IIIKeoM4@@@G%5%O Z      L!5!  =J  U[  Uc  Ul  Ul  mr  Us  Us  AO  Y^  _  _  _F"E"  @M  X_  Xg  Xp  Xp  qv  Xw  Xw  ES  ]b  c  c  cGg% g% g%R
5 
5 
5 
5 
5r<   rn  )Odjangor   accueil.modelsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   django.forms.widgetsr   django.core.exceptionsr   'django.contrib.auth.password_validationr   	django.dbr   django.db.modelsr   ecolle.settingsr   r   	xml.etreer   r  randomr   osr   r   r    r   r   rQ  _ior!   	functoolsr"   	ModelFormr$   rA   BaseFormSetrT   r|   r   r   Formr   r   r   r   r&  r*  rP  rR  rZ  rt  rx  r  r  r  r  r  r  r  r  r  r!  r%  r*  rn  r;   r<   r=   <module>r     s         d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d  d 1 1 1 1 1 1 2 2 2 2 2 2 E E E E E E ! ! ! ! ! !       6 6 6 6 6 6 6 6 * * * * * *               . . . . . . . . . . 



            R R R R R R R R
| 
| 
| 
| 
|eo 
| 
| 
|    )   0' ' ' ' 'U& ' ' 'R= = = = =5$ = = =~    e'   &P P P P P P P P
" " " " " " " "H. . . . . . . .`    %/       u   
    %/   $  O O O O O5: O O O. . . . . . . .B. . . . .EO . . .    %*   8    U_   *E E E E E
 E E EP9 9 9 9 95? 9 9 9v    uz   >     >   0 0 0 0 0
 0 0 00 0 0 0 0ej 0 0 0g g g g gej g g g8f f f f fuz f f fq q q q qej q q qi5 i5 i5 i5 i5ej i5 i5 i5XG5 G5 G5 G5 G5UZ G5 G5 G5 G5 G5r<   