
    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mZmZmZmZmZ d dlmZmZ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% d d	l&m'Z'm(Z(m)Z) d d
l*m+Z+m,Z, d dl-m.Z. d dl/m/Z/ d dl0m1Z1 d dl2Z2d dl3Z3d dl4m5Z5 d dl6m6Z6 d dl7m8Z8  G d dej9                  Z: G d dej;                  Z< G d dej=                  Z> G d dej9                  Z? G d dej9                  Z@ G d dej;                  ZA G d dej9                  ZB G d  d!ej9                  ZC G d" d#ej9                  ZD G d$ d%ej;                  ZE G d& d'ej9                  ZF G d( d)ej9                  ZG G d* d+ejH                  ZI G d, d-ej9                  ZJ G d. d/ejH                  ZK G d0 d1ej9                  ZL G d2 d3ej9                  ZM G d4 d5ej;                  ZN G d6 d7ej9                  ZO G d8 d9ejH                  ZP G d: d;ejQ                  ZQ G d< d=ej;                  ZR G d> d?ej;                  ZS G d@ dAej9                  ZT G dB dCej9                  ZU G dD dEej;                  ZV G dF dGej;                  ZW G dH dIej;                  ZXdS )J    )forms)ColleurColleNoteSemaine	ProgrammeEleveCreneauMatiereGroupeMatiereECTSNoteECTSNoteGlobaleECTSDevoirDevoirCorrigeDevoirRenduTDCoursDocumentConfig)QCountValue)Coalesce)date	timedelta)SelectDateWidget)ValidationError)ElementTree)RESOURCES_ROOT
MEDIA_ROOTIMAGEMAGICK)isfilejoin)remove)copy)TextIOWrapperN)ZipFile)	unidecode)ContentFilec                   ^    e Zd Z ej        d          Z ej        dej                  ZdS )ColleurConnexionFormIdentifiant)labelzMot de passe)r.   widgetN)__name__
__module____qualname__r   	CharFieldusernamePasswordInputpassword     /opt/e-colle/colleur/forms.pyr,   r,      s;        "5?777"5?u?RSSSr8   r,   c                   >     e Zd Z G d d          Zd Z fdZ xZS )ProgrammeFormc                   ,    e Zd ZeZg dZdej        iZdS )ProgrammeForm.Meta)semainetitredetailfichierr>   N)	r0   r1   r2   r   modelfieldsr   CheckboxSelectMultiplewidgetsr7   r8   r9   Metar=      s+        555U9:r8   rF   c                 4   | j         d         }t          j                            || j        j        | j        j                  }| j        j        r |                    | j        j                  }|	                                rt          ddd|i          |S )Nr>   )semaine__inclassematierepkuK   Il existe déjà un programme de colle sur une des semaines sélectionnéesuniqueness violationvaluecodeparams)cleaned_datar   objectsfilterinstancerI   rJ   rL   excludeexistsr   )selfsemainesquerys      r9   clean_semainezProgrammeForm.clean_semaine    s    $Y/!((XdmFZcgcpcx(yy= 	7MMT]%5M66E<<>> 	!Y'X&   
 r8   c                    t                                                       | j        d         du rt          t          | j        j        j                  }t          |          rt          |           t          rTt          t          d| j        j        j        dd         z   dz             }t          |          rt          |           d S d S d S d S )NrA   Fimage	   jpg)supercleanrR   r$   r!   rU   rA   namer#   r%   r"   )rX   rA   r]   	__class__s      r9   rb   zProgrammeForm.clean.   s    Y'500DM$9$>??Gg  w "Z0E0J1R40P(PQV(VWW%== "5MMMMM 10" "" "r8   )r0   r1   r2   rF   r[   rb   __classcell__rd   s   @r9   r;   r;      so        ; ; ; ; ; ; ; ;  	" 	" 	" 	" 	" 	" 	" 	" 	"r8   r;   c                       e Zd Zd ZdS )MatiereChoiceFieldc                 4    |j                                         S N)nomtitle)rX   rJ   s     r9   label_from_instancez&MatiereChoiceField.label_from_instance;   s    {  """r8   N)r0   r1   r2   rm   r7   r8   r9   rh   rh   :   s#        # # # # #r8   rh   c                   0     e Zd Z fdZd Zd Zd Z xZS )Groupe2Formc                     t                      j        |i | || _        || _        |sit          j                            d|                              d          }t          j                            d|                              d          }nt          j                            |                              t          d          t          |          z                                d          }t          j                            |                              t          d          t          |	          z                                d          }t          t          j                            |                              d
d                    }t          t          dd                    |z
  }|r||j        hz  }t          |          }t          ||          }t!          j        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        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                                          }|                                r6t1          d|d d          | j        d!<   t1          d|d d          | j        d"<   t*          j                            |d#                                          }|                                r6t1          d$|d d          | j        d%<   t1          d$|d d          | j        d&<   |j        |j        j        nd |j        |j        j        nd hd hz
  }	t*          j                            |	'                                          }|                                rt1          d(|d d          | j        d)<   d S d S )*NTgroupe__isnullrI   user)groupe2__isnullrI   rI   rr   groupe)rt   groupe2rk   flat      r.   choicesu(   recopier les élèves au second semestreFr.   requiredidem   Premier élève   Élève fictifr.   querysetempty_labelr   eleve0   Deuxième élèveeleve1   Troisième élèveeleve2eleve20eleve21eleve22matieresclasselvLV1Toutlv11lv12   LV2lv21lv22pk__inOptionoption)ra   __init__rx   rI   r	   rS   rT   select_relatedr   setr   values_listrangerk   sortedzipr   ChoiceFieldrC   BooleanFieldModelChoiceFieldr   distinctrW   rh   option1rL   option2)rX   rI   rx   argskwargsrZ   query2groupes_prisgroupesoptionsrd   s             r9   r   zGroupe2Form.__init__?   s   $)&))) 	@-&&d&&IIXXY_``E=''F'KKZZ[abbFF-&&f&55<<Qd=S=S=STU]cTdTdTd=deettu{||E=''v'66==aPT>U>U>UVW`fVgVgVg>ghhwwx~F6>000??KKEY]K^^__eAbkk""\1 	$
|#G//gg&&".U7KKKE#07amrsssF % 6=NX]jz  EJ  !K  !K  !KH % 6=PZ_l|  GL  !M  !M  !MH % 6=Q[`m}  HM  !N  !N  !NH!&!7>OY_l|  GL  "M  "M  "MI!&!7>Q[an~  IN  "O  "O  "OI!&!7>R\bo  JO  "P  "P  "PI&&f&BBKKMM<<>> 	s"45%\blq"r"r"rDK"45%\blq"r"r"rDK&&f&BBKKMM<<>> 	s"45%\blq"r"r"rDK"45%\blq"r"r"rDK(.(B6>$$cicqc}fnN_N_  DH  I  MQ  LR  R&&g&66??AA<<>> 	x$6Xuagqv$w$w$wDK!!!	x 	xr8   c                 
   | j         d         }t          j                            || j                  }| j        r |                    | j        j                  }|                                rt          ddd|i          |S u:   Validation du champ nom (unicité pour une classe donnée)rk   rk   rI   rK   u    le nom %(value)s est déjà prisrM   rN   rO   
rR   r   rS   rT   rI   rx   rV   rL   rW   r   rX   datarZ   s      r9   	clean_nomzGroupe2Form.clean_nomd        '%%$dk%BB; 	3--4;>-22E<<>> 	!.'T?   
 r8   c                 J     fdt          d          D             } fdt          d          D             }t          |          t          t          |                    k    s-t          |          t          t          |                    k    rt          dd          dS )g   validation du formulaire. S'il y a deux fois le même élève (non fictif) on lève une ValidationErrorc                     g | ]^}d                      |          j        v j        d                      |                   >j        d                      |                   _S zeleve{}formatrR   .0irX   s     r9   
<listcomp>z%Groupe2Form.clean.<locals>.<listcomp>t         c  c  cQiN^N^_`NaNaeievNvNv{  |M  NW  N^  N^  _`  Na  Na  |bNv$#I$4$4Q$7$78NvNvNvr8      c                     g | ]^}d                      |          j        v j        d                      |                   >j        d                      |                   _S zeleve2{}r   r   s     r9   r   z%Groupe2Form.clean.<locals>.<listcomp>u   s      g  g  gqPZPaPabcPdPdhlhyPyPy  C  P  Q[  Qb  Qb  cd  Qe  Qe  fPy4$Z%6%6q%9%9:PyPyPyr8   9   Un élève ne peut apparaître qu'une fois dans un grouperM   rP   Nr   lenr   r   )rX   eleveseleves2s   `  r9   rb   zGroupe2Form.cleanr   s     c  c  c  c%((  c  c  c g  g  g  gE!HH  g  g  gv;;S[[))))S\\CG<M<M-M-M!"]cyzzzz .N-Mr8   c                      j         r j         }t          j                            |                              d           t          j                            |                              d           t
          j                            |j                                       j        d                    n5t           j        d          j                  }|	                                 t          j                             fdt          d	          D             
                              |           t          j                             fdt          d	          D             
                              |           dS )9   sauvegarde en base de données les données du formulairerw   Nry   rK   rk   rk   r   c                     g | ]G}j         d                     |                   "j         d                     |                   j        HS r   rR   r   rL   r   s     r9   r   z$Groupe2Form.save.<locals>.<listcomp>         %X  %X  %XSTdhduv  wG  wG  HI  wJ  wJ  eK  eWT%6y7G7G7J7J%K%N  eW  eW  eWr8   r   r   c                     g | ]G}j         d                     |                   "j         d                     |                   j        HS r   r   r   s     r9   r   z$Groupe2Form.save.<locals>.<listcomp>   s      %Z  %Z  %ZTUeiev  xB  xI  xI  JK  xL  xL  fM  fYT%6z7H7H7K7K%L%O  fY  fY  fYr8   rx   r	   rS   rT   updater   rL   rR   rI   saver   rX   rx   s   ` r9   r   zGroupe2Form.savey   s   ; 	;FM   //66d6CCCM   00777EEEN!!VY!//664;LU;S6TTTTd/6dkJJJFKKMMM  %X  %X  %X  %XX]^_X`X`  %X  %X  %X  	Y  	Y  	`  	`  hn  	`  	o  	o  	o  %Z  %Z  %Z  %ZY^_`YaYa  %Z  %Z  %Z  	[  	[  	b  	b  kq  	b  	r  	r  	r  	r  	rr8   r0   r1   r2   r   r   rb   r   re   rf   s   @r9   ro   ro   >   su        #x #x #x #x #xJ  { { {r r r r r r rr8   ro   c                   0     e Zd Z fdZd Zd Zd Z xZS )
GroupeFormc                 2    t                      j        |i | || _        || _        |s5t          j                            d|                              d          }net          j                            |                              t          d          t          |          z                                d          }t          t          j                            |                              dd                    }t          t          d	d
                    |z
  }|r||j        hz  }t          |          }t          ||          }t!          j        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	                                          }|                                rt/          d|dd          | j        d<   t(          j                            |d                                          }|                                rt/          d|dd          | j        d<   d S d S )NTrq   rs   ru   rv   rw   rk   r{   r}   r~   r   r   r   Fr   r   r   r   r   r   r   r   r   lv1r   r   lv2)ra   r   rx   rI   r	   rS   rT   r   r   r   r   r   r   rk   r   r   r   r   rC   r   r   r   rW   rh   )	rX   rI   rx   r   r   rZ   r   r   rd   s	           r9   r   zGroupeForm.__init__   s   $)&))) 	}-&&d&&IIXXY_``EE-&&f&55<<Qd=S=S=STU]cTdTdTd=deettu{||E6>000??KKEY]K^^__eAbkk""\1 	$
|#G//gg&&".U7KKKE % 6=NX]jz  EJ  !K  !K  !KH % 6=PZ_l|  GL  !M  !M  !MH % 6=Q[`m}  HM  !N  !N  !NH&&f&BBKKMM<<>> 	r!3%[akp!q!q!qDK&&f&BBKKMM<<>> 	r!3%[akp!q!q!qDK	r 	rr8   c                 
   | j         d         }t          j                            || j                  }| j        r |                    | j        j                  }|                                rt          ddd|i          |S r   r   r   s      r9   r   zGroupeForm.clean_nom   r   r8   c                       fdt          d          D             }t          |          t          t          |                    k    rt          dd          dS )r   c                     g | ]^}d                      |          j        v j        d                      |                   >j        d                      |                   _S r   r   r   s     r9   r   z$GroupeForm.clean.<locals>.<listcomp>   r   r8   r   r   rM   r   Nr   )rX   r   s   ` r9   rb   zGroupeForm.clean   ss     c  c  c  c%((  c  c  cv;;S[[))))!"]cyzzzz *)r8   c                      j         r j         }t          j                            |                              d           t
          j                            |j                                       j        d                    n5t           j        d          j                  }|	                                 t          j                             fdt          d          D             	                              |           dS )
r   rw   NrK   rk   r   r   c                     g | ]G}j         d                     |                   "j         d                     |                   j        HS r   r   r   s     r9   r   z#GroupeForm.save.<locals>.<listcomp>   r   r8   r   r   r   r   s   ` r9   r   zGroupeForm.save   s%   ; 	;FM   //66d6CCCN!!VY!//664;LU;S6TTTTd/6dkJJJFKKMMM  %X  %X  %X  %XX]^_X`X`  %X  %X  %X  	Y  	Y  	`  	`  hn  	`  	o  	o  	o  	o  	or8   r   rf   s   @r9   r   r      st        r r r r r2  { { {	o 	o 	o 	o 	o 	o 	or8   r   c                   (    e Zd Z G d d          ZdS )CreneauFormc                       e Zd ZeZg dZdS )CreneauForm.Meta)jourheuresalleN)r0   r1   r2   r
   rB   rC   r7   r8   r9   rF   r      s        )))r8   rF   N)r0   r1   r2   rF   r7   r8   r9   r   r      s<        * * * * * * * * * *r8   r   c                      e Zd Z	 ej                            d          Z ej        eded                   Z	 ej        edee
                                dz
                     ZdS # e$ rV  ej        ej                                        d          Z	 ej        ej                                        d          ZY dS w xY w)SemaineFormlundiNr   r   r   initialr}   r   r   )r0   r1   r2   r   rS   order_byrZ   r   r   semincountsemax	Exceptionnoner7   r8   r9   r   r      s        Xo&&w//$e$eeTUhWWW$e$eeTYT_T_TaTabcTcNdeee X X X$e$go.B.B.D.DRVWWW$e$go.B.B.D.DRVWWWXs   A!A) )ACCr   c                        e Zd Z fdZ xZS )	ColleFormc                     t                      j        |i | |j                                        }t          j                                        }t          j                            |          	                    d          }t          j                            |                                          }	 t          j        |d |d                   | j        d<   n.# t          $ r! t          j        |d           | j        d<   Y nw xY wt          j        |d           | j        d<   t          j        dg d	t          j        
          | j        d<   	 t          j        |d |d                   | j        d<   n.# t          $ r! t          j        |d           | j        d<   Y nw xY w	 t          j        |d |d                   | j        d<   n.# t          $ r! t          j        |d           | j        d<   Y nw xY wdgt#          t%          t'          dd          d t'          dd          D                                 z   }d t'          dd          D             }	d dD             }
t          j        d|          | j        d<   t          j        d|
          | j        d<   t          j        d|	          | j        d<   d S )Nru   rk   r   r   rJ   r   colleurzGroupe/Solo/Classe))r   r   )r}   Solo)r   Classe)r.   r   r/   GSCrx   eleve)r}   z	1 semainer   r~   c                 8    g | ]}d                      |          S )z{} semainesr   r   r   s     r9   r   z&ColleForm.__init__.<locals>.<listcomp>   s'    5d5d5dRSm6J6J16M6M5d5d5dr8   c                 >    g | ]}|d                      ||          fS )zde {} en {}r  r  s     r9   r   z&ColleForm.__init__.<locals>.<listcomp>   s-    HHHqa,,Qq112HHHr8   r}      c                 <    g | ]}|d                      |          fS )zune semaine sur {}r  r  s     r9   r   z&ColleForm.__init__.<locals>.<listcomp>   s,    KKK!A*11!445KKKr8   )r}   r   r         u   Duréer   dureeu
   Fréquence	frequencezPermutation des groupespermutation)ra   r   matieresallr   rS   r   r   rT   r   r	   r   r   rC   r   r   RadioSelectlistr   r   )rX   rI   r   r   query1r   query3query4DUREEPERMUTATION	FREQUENCErd   s              r9   r   zColleForm.__init__   s   $)&)))""$$##%%~$$F$33<<UCC}##6#226688	\#(#96VZcijkcl#m#m#mDK	"" 	\ 	\ 	\#(#96VZ#[#[#[DK	"""	\$5vRVWWWI ,3GPvPvPv  @E  @Q  R  R  RE	["'"8&UYbhijbk"l"l"lDK!! 	[ 	[ 	["'"8&UY"Z"Z"ZDK!!!	[	Z!&!7TXaghiaj!k!k!kDK   	Z 	Z 	Z!&!7TX!Y!Y!YDK   	ZSq5d5dW\^_`bWcWc5d5d5d%e%e f ffHHE!BKKHHHKK{KKK	".XeLLLG!&!2i!X!X!XK #(#4;T]h#i#i#iM"""s6   8%C (D	D	%E< <(F'&F'+%G (G<;G<r0   r1   r2   r   re   rf   s   @r9   r   r      sA        j j j j j j j j jr8   r   c                        e Zd Z fdZ xZS )	EleveFormc                      t                      j        |i | t          j        dt          j                            |          d           | j        d<   d S )Nu   Élèveru   )r.   r   r   r   )ra   r   r   r   r	   rS   rT   rC   rX   rI   r   r   rd   s       r9   r   zEleveForm.__init__   sg    $(((($5iQVQ^QeQemsQeQtQt  BF   G   G   GGr8   r  rf   s   @r9   r  r     sA        G G G G G G G G Gr8   r  c                   .    e Zd Z G d d          Zd ZdS )MatiereECTSFormc                       e Zd ZeZg dZdS )MatiereECTSForm.Meta)rk   	precisionprofs	semestre1	semestre2N)r0   r1   r2   r   rB   rC   r7   r8   r9   rF   r     s        DDDr8   rF   c                 ~   | j         d         | j         d         t          d          t          j                            | j        j        | j         d         | j         d                   }| j        j        r |                    | j        j                  }|	                                rt          d	d
          dS )u   validation du formulaire. On vérifie qu'au moins un des champs semestre1 ou semetre2 est non nul et que le triplet
        classe/nom/precision, sans compter la casse, est uniquer   Nr!  u:   au moins un des champs de coefficient doit être précisérk   r  )rI   nom__iexactprecision__iexactrK   u#   le couple nom/précision est uniquerM   r   )
rR   r   r   rS   rT   rU   rI   rL   rV   rW   rX   rZ   s     r9   rb   zMatiereECTSForm.clean   s     [)1d6G6T6\!"^___#**$-2FSWSdejSk  C  P  Q\  ]*  ^  ^= 	5--4=#3-44E<<>> 	e!"GMcdddd	e 	er8   N)r0   r1   r2   rF   rb   r7   r8   r9   r  r     sX        E E E E E E E E	e 	e 	e 	e 	er8   r  c                        e Zd Z fdZ xZS )SelectEleveFormc                 >    t                      j        |i | t          j                            |                              d                              dd          }t          j        |dt          j	                  | j
        d<   d | j
        d         _        d S )Nru   rs   user__last_nameuser__first_nameT)r   r   r/   r   )ra   r   r	   rS   rT   r   r   r   ModelMultipleChoiceFieldrD   rC   r   )rX   rI   r   r   rZ   rd   s        r9   r   zSelectEleveForm.__init__  s    $)&)))$$F$33BB6JJSSTefxyy$=uVZdi  eA   B   B   BG)-G(((r8   r  rf   s   @r9   r'  r'     s8        . . . . . . . . .r8   r'  c                       e Zd Z ej        dg e ed                    z   d          Z ej        dg e ed                    z   d          ZdS )NoteEleveFormNz---ABCDEFFr   r   N)	r0   r1   r2   r   r   r  	enumerater   r!  r7   r8   r9   r-  r-    st        %E%|nTT))HBUBU=V=V.V`efff	%E%|nTT))HBUBU=V=V.V`efff			r8   r-  c                   *     e Zd Zg df fd	Zd Z xZS )NoteEleveFormSetNc                 V     t                      j        |i | || _        || _        d S rj   )ra   r   chaine_elevesrJ   )rX   r5  rJ   r   r   rd   s        r9   r   zNoteEleveFormSet.__init__  s2    $(((((r8   c                    t          | | j                  D ]F\  }}d|j        v r|j        d         dk    r:t          j                            d| j        |                                           nL|j        d         dv r=t          j                            || j        d|j        d         dd| j        |           d|j        v r|j        d         dk    r:t          j                            d	| j        |                                           |j        d         dv r=t          j                            || j        d	|j        d         dd	| j        |           Hd
S )=   Sauvegarde (mise à jour) en BDD les notes ECTS du formulairer    r}   )semestrerJ   r   012345)r   rJ   r9  note)defaultsr9  rJ   r   r!  r   N)	r   r5  rR   r   rS   rT   rJ   deleteupdate_or_createrX   formr   s      r9   r   zNoteEleveFormSet.save  s   d4#566 
	F 
	FJDd///$[1R77$++Qt|RW+XX__aaaa&{3x??$55X\Xdpqy}  zK  LW  zX  @Y  @Y  cd  mq  my  @E5  F  F  Fd///$[1R77$++Qt|RW+XX__aaaa&{3x??$55X\Xdpqy}  zK  LW  zX  @Y  @Y  cd  mq  my  @E5  F  F  F
	F 
	Fr8   r0   r1   r2   r   r   re   rf   s   @r9   r3  r3    sX        $&t      
F F F F F F Fr8   r3  c                   ^    e Zd Z ej        dg e ed                    z   d          ZdS )NoteGlobaleEleveFormr.  r/  Fr0  N)r0   r1   r2   r   r   r  r1  note_globaler7   r8   r9   rC  rC    sA        (u(,YYxEXEX@Y@Y1Ychiiir8   rC  c                   (     e Zd Zg f fd	Zd Z xZS )NoteGlobaleEleveFormSetc                 V     t                      j        |i | || _        || _        d S rj   )ra   r   r5  annee)rX   rH  r5  r   r   rd   s        r9   r   z NoteGlobaleEleveFormSet.__init__#  s2    $(((((


r8   c                 v   t          | | j                  D ]\  }}d|j        v r|j        d         dk    r9t          j                            | j        |                                           X|j        d         dv r;t          j                            || j        |j        d         d|| j                   dS )r7  rD  r8  )rH  r   r:  )r   rH  r;  )r<  r   rH  N)	r   r5  rR   r   rS   rT   rH  r=  r>  r?  s      r9   r   zNoteGlobaleEleveFormSet.save(  s    d4#566 	p 	pJD!222$^4::#+22%2PPWWYYYY&~6(BB#+<<u]a]gos  pA  BP  pQ  GR  GR  Y^  ei  eo<  p  p  p	p 	pr8   rA  rf   s   @r9   rF  rF  "  sV        *,      
p p p p p p pr8   rF  c                        e Zd Z fdZ xZS )ECTSFormc           
          t                      j        |i | t          j        t	          t
          d                                                    }d |                    d          D             }t          |          }|	                                 g }d }|D ]`}|
                    d          \  }	}
|                    |	dz   |
z   dz   |
dk    rdnd	z   d
z   t           d ||                    f           a|                    d          D ]}|j                                        d t          |                    d                             |                    d                                          k    rY|j        t%          |                    d                    k    r.|                    d          dz   |                    d          z   }t	          t
          d          t	          t
          d          f}t	          t
          d          t	          t
          d          f}t'          j        d||          | j        d<   t'          j        dg dt'          j        ddi          t1          j                                        d                    | j        d<   t'          j        ddgdz  dgdz  f           | j        d!<   t'          j        d"d# t7          t1          j                    j        d$z
  t1          j                    j        d$z             D             t1          j                    j                  | j        d%<   |j        dk    r)d&|j        v r t'          j        d'd(d)*          | j        d+<   nt'          j        d'd(,          | j        d+<   t=          d- ||z   D                       r t'          j        d.d(,          | j        d/<   d S d S )0Nzclasses.xmlc                 j    h | ]0}|                     d           dz   |                     d          z   1S )type_rH  )getr   xs     r9   	<setcomp>z$ECTSForm.__init__.<locals>.<setcomp>5  s6    PPPAquuV}}S w/PPPr8   rI   rO      è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 )rN  rH  rO  rk   )rP  split)r   rR  ys     r9   r   z7ECTSForm.__init__.<locals>.<lambda>.<locals>.<listcomp><  sQ     sr  sr  sr  gh  DE  DI  DI  JP  DQ  DQ  RS  RW  RW  X_  R`  R`  Ca  ef  el  el  mp  eq  eq  Cq  Cqtutytyz  uA  uA  BE  uE  FG  FK  FK  LS  FT  FT  uT  UV  UZ  UZ  [`  Ua  Ua  tb  Cq  Cq  Cqr8   rI   )findall)r\  zs   ` r9   <lambda>z#ECTSForm.__init__.<locals>.<lambda><  s`      sr  sr  sr  sr  lm  lu  lu  v~  l  l  sr  sr  sr r8   rk   rH  zproviseur.pngzproviseur.jpgzproviseuradjoint.pngzproviseuradjoint.jpgu   filière)r.   r   r   u   Date d'édition)%d/%m/%Yz%j/%m/%Yz%d/%n/%Yz%j/%n/%Yplaceholderz
jj/mm/aaaa)attrsr`  )r.   input_formatsr/   r   r   zsignature/tampon par:	Proviseurr   zProviseur adjointr   	signatureu   année scolairec                 J    g | ] }|d z   d                     ||d z             f!S )r}   z{}-{}r  rQ  s     r9   r   z%ECTSForm.__init__.<locals>.<listcomp>E  sV      Zq  Zq  Zqz{[\]^[^_f_m_mnopqrsps_t_tZu  Zq  Zq  Zqr8   
   anneescolaire*u   classe étoileFT)r.   r   r   etoiler   c              3   4   K   | ]}t          |          V  d S rj   )r#   rQ  s     r9   	<genexpr>z$ECTSForm.__init__.<locals>.<genexpr>J  s(      IIQvayyIIIIIIr8   z incruster le tampon/la signaturetampon)ra   r   etreeparser$   r    getrootr]  r  sortr[  appendr   rk   lowerr   rP  rH  intr   r   rC   	DateField	TextInputr   todaystrftimer   yearr   any)rX   rI   r   r   treetypesLISTE_CLASSESdefaulttypstylerH  rR  imagesProviseurimagesProviseurAdjointrd   s                 r9   r   zECTSForm.__init__2  s   $(((([n];;<<DDFFPPh9O9OPPPU

 	@ 	@C		#KE%  %)E/$"6uczzs"ST^"^_e  hr  hr  hr  tw  x|  g}  g}  `~  `~  "  @  @  @  @h'' 	8 	8Az!!"43quuU||#4#4"45u9K9K9M9MMMRXR^befgfkfklsftftbubuRuRueS(w7n_==d>Ra>b>bc $^4J K KDQ_`vLwLwx % 1
=ah i i iH#o4E  UB  UB  UB  JO  JY  an  p|  `}  J~  J~  J~  GK  GQ  GS  GS  G\  G\  ]g  Gh  Gh  i  i  iF#(#4;R]h\ijk\k  nA  mB  CD  mD  \E  $F  $F  $FK ','8?P  Zq  Zq  @E  FJ  FP  FR  FR  FW  XZ  FZ  [_  [e  [g  [g  [l  mo  [o  @p  @p  Zq  Zq  Zq  z~  zD  zF  zF  zK  (L  (L  (LO$<1
!2!2$)$6=MW\ei$j$j$jDK!!$)$6=MW\$]$]$]DK!II/2H"HIIIII 	p$)$6=_in$o$o$oDK!!!	p 	pr8   r  rf   s   @r9   rK  rK  1  sA        p p p p p p p p pr8   rK  c                   $     e Zd Z fdZd Z xZS )SelectEleveNoteFormc           
      n    t                      j        |i | |dk    rt          t          j                            |                              t          dt          d                              	                    d          
                    ddd	                    }t          j                            |                              t          d
                    
                    d          }n5|dk    rt          t          j                            |                              t          dt          d                              	                    d          
                    ddd	                    }t          j                            |                              t          d                    
                    d          }nVt          t          j                            |          	                    d          
                    dd	                    }g }d |D             }dg}d}	|D ]}
t          |
j                  D ]:}t          |          }|                    |j        t%          |          f           ;t          d|
j        z
            D ]}|                    |	df           |	dz  }	d}	 	 t          |          }|                    |j        t%          |          f           |dz  }n# t&          $ r Y nw xY wPt          d|dz  z
            D ]}|                    |	df           |	dz  }	d |D             | _        t+          j        |t*          j        d          | j        d<   t+          j        |t*          j        d          | j        d<   d S )Nr}   ru   groupe__nomd   )
groupe_nomrs   r  r)  r*  groupeelevenbrk   r   groupe2__nomgroupe2elevec                 P    g | ]#}|j         d                     |j                  f$S )z	Groupe {})rL   r   rk   r   rx   s     r9   r   z0SelectEleveNoteForm.__init__.<locals>.<listcomp>Y  s/    aaa&69k&8&8&D&DEaaar8   )r   r   r   r   r   Tc                     g | ]	}|j         
S r7   r  rQ  s     r9   r   z0SelectEleveNoteForm.__init__.<locals>.<listcomp>n  s    999qad999r8   F)r   r/   r   rx   r   )ra   r   iterr	   rS   rT   annotater   r   r   r   r   r   r   r  nextrr  rL   strr   tailleGroupesr   MultipleChoiceFieldrD   rC   )rX   rI   r  r   r   rZ   listeGroupeschoices_grouper   indexFictifrR  r   r   jmodulord   s                  r9   r   zSelectEleveNoteForm.__init__N  s'   $((((!--V-<<EEQYZghmnqhrhrQsQsEtt  D  D  EK  L  L  U  U  Vb  ct  uG  H  H  I  IE!>000??HHER_L`L`HaajjkpqqLLA--V-<<EEQYZhinorisisQtQtEuu  E  E  FL  M  M  V  V  Wc  du  vH  I  I  J  JE!>000??HHER`LaLaHbbkklqrrLL--V-<<KKFSS\\]n  pB  C  C  D  DELaaT`aaa'( 	! 	!A14[[ 6 6UU455551QT6]] ! !,<=>>>q ! 	UU4555!   	 qFQJ'(( 	 	ANNK(89:::1KK99L999 % 9.[`[w  EJ  !K  !K  !KH$8SXSo  }A   B   B   BGs   =L 
LLc                 d    | j         d         }t          |          dk    rt          d          |S )Nr   r   uA   Vous ne pouvez pas noter plus de 3 élèves sur un même créneau)rR   r   r   )rX   r   s     r9   clean_elevezSelectEleveNoteForm.clean_elever  s2     )t99q==!"efffr8   )r0   r1   r2   r   r  re   rf   s   @r9   r  r  M  sM        "B "B "B "B "BH      r8   r  c                   8     e Zd Z G d d          Z fdZ xZS )NoteElevesHeadFormc                       e Zd ZeZg dZdS )NoteElevesHeadForm.Meta)r>   r   r   	rattrapee
date_colleN)r0   r1   r2   r   rB   rC   r7   r8   r9   rF   r  y  s        DDDr8   rF   c                      t                      j        |i | || _        || _        || _        t          d t          d          D                       | j        d         _        d S )Nc                 J    g | ] }t          j                    j        |z   d z
  !S )r}   )r   rw  ry  r  s     r9   r   z/NoteElevesHeadForm.__init__.<locals>.<listcomp>  s.    @j@j@j[\ARSTATUVAV@j@j@jr8   rg  )yearsr  )	ra   r   rJ   r   rI   r   r   rC   r/   )rX   rJ   r   rI   r   r   rd   s         r9   r   zNoteElevesHeadForm.__init__}  sm    $)&))))9@j@j`efh`i`i@j@j@j)k)k)kL!(((r8   )r0   r1   r2   rF   r   re   rf   s   @r9   r  r  x  sq        E E E E E E E El l l l l l l l lr8   r  c                        e Zd Z fdZ xZS )NoteElevesTailFormc                 T    t                      j        |i | || _        ddg}|                    t	          t          d          t          d                               t          j        |          | j        d<   t          j	        t          j
        d          | j        d<   d S )	N)r  zn.n)   Absr  )r   r;  F)r/   r   commentaire)ra   r   r   extendr   r   r   r   rC   r3   Textarea)rX   r   r   r   
LISTE_NOTErd   s        r9   r   zNoteElevesTailForm.__init__  s    $)&)))
z*
#eBiib		22333#/
CCCF%*_ENW\%]%]%]M"""r8   r  rf   s   @r9   r  r    sA        ^ ^ ^ ^ ^ ^ ^ ^ ^r8   r  c                   4     e Zd Z fdZ fdZd Zd Z xZS )NoteElevesFormsetc                 V     t                      j        |i | || _        || _        d S rj   )ra   r   headFormr   )rX   r  r   r   r   rd   s        r9   r   zNoteElevesFormset.__init__  s1    $(((( r8   c                     t                                          |          }| j        r| j        |         |d<   nd|d<   |S )uK   déterminer l'argument nommé 'eleve' à passer en paramètre du formulairer   N)ra   get_form_kwargsr   )rX   indexr   rd   s      r9   r  z!NoteElevesFormset.get_form_kwargs  sD    ((//; 	#"k%0F7OO"F7Or8   c                    | j                                         st          d          | j         j        d         sR| j         j        d         j        t          t          | j         j        d                             z   | j         j        d<   t          j        	                    | j         j        d         | j         j
        | j         j        d                   }| j         j        j        r%|                    | j         j        j        	          }|                                }|t          | j                  z   d
k    rt          d          | j         j        j        dk    rt          j        	                    | j         j        d         | j         j        | j         j
        | j                  }| j         j        j        r%|                    | j         j        j        	          }|                                }|rt          d          dS dS )u   Vérifie que le colleur n'aura au final pas plus de 3 notes sur ce créneau et qu'il n'a pas déjà collé un des élève cette semaine dans cette matièrez+erreur dans dans la semaine/date/jeure/jourr  r>   r   )daysr  r   )r  r   r   rK   r   u/   Vous avez trop de notes sur ce créneau horaire   )r>   rJ   r   	eleve__inuH   Vous avez déjà noté un des élèves cette semaine dans cette matièreN)r  is_validr   rR   r   r   rt  r   rS   rT   r   rU   rL   rV   r   r   r   rJ   tempsrW   )rX   nbNotesColleurnbNotesEleves      r9   rb   zNoteElevesFormset.clean  s8   }%%'' 	Q!"OPPP})+6 	Y59]5OPY5Z5`ajpstx  uB  uO  PV  uW  qX  qX  bY  bY  bY  6YDM&|4|**dm6PQ]6^gkgtg|  DH  DQ  D^  _f  Dg*  h  h=!$ 	T+339O9R3SSN'--//C,,,q00!"STTT= &",,,,T]5OPY5Zcgcpcx  BF  BO  BW  bf  bm,  n  nL}%( T+339O9R3SS'..00L r%&pqqq -,
r rr8   c                    | j         j        }|j        r| D ]y}|j        d         |_        |j        d         |_        |j        |_        | j         j        |_        | j         j        |_        | j         j	        |_	        |
                                 z|                                 dS g }| D ]}t          |          }|j        d         |_        |j        d         |_        |j        |_        | j         j        |_        | j         j        |_        | j         j	        |_	        |
                                 |                    |           t          j                            |           dS )u(   sauvegarde en base de données les notesr;  r  N)r  rU   rL   rR   r;  r  r   rI   rJ   r   r   r   r&   rr  r   rS   bulk_create)rX   r;  r@  notesnotebiss        r9   r   zNoteElevesFormset.save  s=   }%7 	,   -f5	#'#4]#C !Z
"m2#}4#}4IIKKKKKE 	& 	&t**#08&*&7&F# $
!%!5"&-"7"&-"7   W%%%%L$$U+++++r8   )r0   r1   r2   r   r  rb   r   re   rf   s   @r9   r  r    sr            
    r r r(, , , , , , ,r8   r  c                       e Zd ZdZdS )	DateInputr   N)r0   r1   r2   
input_typer7   r8   r9   r  r    s        JJJr8   r  c                   >     e Zd Z G d d          Z fdZd Z xZS )
DevoirFormc                   2    e Zd ZeZg dZd e            iZdS )DevoirForm.Meta)numeror@   a_rendre_joura_rendre_heurerA   corriger  N)r0   r1   r2   r   rB   rC   r  rE   r7   r8   r9   rF   r    s.        WWW"IIKK0r8   rF   c           	          t                      j        |i | || _        || _        t          j                            ||          }| j        r |                    | j        j	                  }|
                    dd          }d t          t          t          dd                    t          |          z
            D             | j        d         _        d S )	NrI   rJ   rK   r  Tr{   c                     g | ]}||fS r7   r7   r  s     r9   r   z'DevoirForm.__init__.<locals>.<listcomp>      (](](]1!A(](](]r8   r}   e   )ra   r   rJ   rI   r   rS   rT   rU   rV   rL   r   r   r   r   rC   r   rX   rJ   rI   r   r   rZ   rd   s         r9   r   zDevoirForm.__init__  s    $)&)))%%v%HH= 	9MMt}'7M88E!!(!55(](]s53<<?P?PQTUZQ[Q[?[8\8\(](](]H%%%r8   c                 \   t           j                            | j        d         | j        | j                  }| j        r |                    | j        j                  }|	                                r9t          d                    | j        d         | j        | j                            dS );   Vérifie la condition d'unicité de numéro/classe/matièrer  r  rJ   rI   rK   u8   il existe déjà un devoir n°{} dans la classe {} en {}N)r   rS   rT   rR   rJ   rI   rU   rV   rL   rW   r   r   r%  s     r9   rb   zDevoirForm.clean  s    %%t/@/JVZVbmqmx%yy= 	9MMt}'7M88E<<>> 	]!"\"c"cdhduv~d  BF  BM  OS  O[  #\  #\  ]  ]  ]	] 	]r8   r0   r1   r2   rF   r   rb   re   rf   s   @r9   r  r    s{        1 1 1 1 1 1 1 1
^ ^ ^ ^ ^] ] ] ] ] ] ]r8   r  c                   8     e Zd Z G d d          Z fdZ xZS )	CopieFormc                       e Zd ZeZddgZdS )CopieForm.MetarA   r  N)r0   r1   r2   r   rB   rC   r7   r8   r9   rF   r    s        ]+r8   rF   c                     | j         d         dv r)| j        j        r| j                                         d S d S t	                                                       d S )NrA   )FN)rR   rU   idr=  ra   r   )rX   r   r   rd   s      r9   r   zCopieForm.save  s^    Y'=88} '$$&&&&&' ' GGLLNNNNNr8   )r0   r1   r2   rF   r   re   rf   s   @r9   r  r    s`        , , , , , , , ,        r8   r  c                   *     e Zd Z fdZd Zd Z xZS )
CopiesFormc                      t                      j        |i | || _        t          j        dd          | j        d<   d S )Nzfichier zipu(  déposer un fichier zip avec les copies corrigées ayant le même nom que les copies ramassées.         Si vous déposez une copie corrigée pour un élève qui en a déjà une, elle écrasera la précédente. Si un nom de fichier ne correspond pas à un nom de copie ramassée, il sera ignoré.)r.   	help_textrA   )ra   r   devoirr   	FileFieldrC   )rX   r  r   r   rd   s       r9   r   zCopiesForm.__init__  sU    $)&)))!&} QJ "K "K "KIr8   c                    | j         d         }|j        dk    rt          d          t          |          5 }|                                D ]j}|j        dd          dk    rt          d          |j        t          j        j	        j
        k    r't          d                    |j                            k	 d d d            n# 1 swxY w Y   |S )NrA   zapplication/zipz*le fichier n'est pas un fichier zip validez.pdfz#le fichier n'est pas un fichier pdfz!le fichier {} est trop volumineux)rR   content_typer   r(   infolistfilename	file_sizer   rA   fieldmax_upload_sizer   )rX   rA   myzipinfos       r9   clean_fichierzCopiesForm.clean_fichier  s'   $Y/#444!"NOOOW 	e(( e e=%//)*OPPP>M$9$?$OOO)*M*T*TUYUb*c*cddd Pe	e 	e 	e 	e 	e 	e 	e 	e 	e 	e 	e 	e 	e 	e 	e s   B CCCc           
      0   t          | j        d                   5 }|                                }|D ]I}t          j                            | j        t          d|                                                    }|rt          j                            | j        |j
                                                  }|r|                                 |                    |          5 }t          |j
        | j        d          }|j                            |                                t!          |                                          d           |                                 d d d            n# 1 swxY w Y   K	 d d d            d S # 1 swxY w Y   d S )	NrA   r  )r  rA   )r  r   r8  )r   r  r  F)r   )r(   rR   namelistr   rS   rT   r  r$   firstr   r   r=  openrA   r   update_namer*   read)rX   r  nomfichiers
nomfichiercopiecopiecorrigeemyfiles          r9   r   zCopiesForm.save  s   T&y122 	-e..**K) 	- 	-
#+22$+QUV^`jQkQk2llrrtt -$1$9$@$@$+_d_j$@$k$k$q$q$s$sM$ /%,,...J// -6(5ekTXT_oq(r(r(r%-22=3L3L3N3NQ\]c]h]h]j]jQkQkty2zzz%**,,,- - - - - - - - - - - - - - -	-	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s7   C
F%A?E0$F0E44F7E48FFF)r0   r1   r2   r   r  r   re   rf   s   @r9   r  r    s[        K K K K K
 
 
- - - - - - -r8   r  c                   *     e Zd Z fdZd Zd Z xZS )ColloscopeImportFormc                      t                      j        |i | || _        g | _        g | _        g | _        t          j        dd          | j        d<   d S )NzFichier csvTr   rA   )	ra   r   rI   entetecollesrY   r   r  rC   r  s       r9   r   zColloscopeImportForm.__init__  s\    $)&)))!&}d!S!S!SIr8   c           
        #$% d $d t           j                            | j                                                  D             }d t
          j                            | j                  D             }d t          j                            | j                  D             }dd	d
ddddd}t          j        d          }t          j        d          %t          j        d          }dd	d
d}| j        j	        r$t          j                                        j        }nd}	 t          | j        d         j        dd          5 }	t!          j        |	d          }
t%          |
          | _        	 %fd| j        dd          D             | _        n# t*          $ r t-          d          w xY wt/          | j                  }|dk    rt-          d          g | _        |
D ]}d}t/          |          |k    rt-          d          t3          |d                                                   }||v r
||         g}n-t-          d                    || j        j                            t3          |d	                                                                                   t3          |d
                                                                                   f}||v r=|d         j        ||         d	         v r"|                    ||         d                    nAt-          d                     d!                     |          | j        j        |                    |d                                                                         !                    d!          }|d         |vr(t-          d"                    |d                             |                    ||d                             |d	         !                    d#          }	 d$tE          |d                   z  tE          |d	                   z   }|                    |           n6# t*          $ r) t-          d%                    |d	                             w xY w|                    |d                    tG          d& | j        $                                D                       }tK          |dd          | j                  D ]/\  }}|dk    r|                    d            "|&                                sd'|v rg }%'                    |          D ]q}|&                                r:tE          |          |v r)|                    |tE          |                              Pt-          d(                    |                    |                    d)|f           |                                | j        j                                        k    r|                    d*| j        f           -||v r|                    d+||         f           P|d         &                                r|'                    |          }g }|D ]H}tE          %(                    |          )                                          }d, |'                    |          D             }|g k    rd-}n|d         }t          j                            || j        .          }|*                                r|+                                }|j,        |k     r't[          |j.        /                                          }n&t[          |j0        /                                          }|D ]8}||         } | t/          |          k     r|                    ||                     9Jt/          |          |k    rt/          |          }|                    d+|f           	t-          d/                    || j                            |rPtc          |          D ]>#|d d         #$fd0|dd          D             z   }!| j                            |!           ?| j                            |           	 d d d            d S # 1 swxY w Y   d S # t,          $ r!}"t-          te          |"                    d }"~"wt*          $ r}"t-          d1          d }"~"ww xY w)2Nc                     | d S | d         dk    r
|dk    r| S d S t          | d                   |k    r| d         | d         |         fS d S )Nr   sor}   )r   )subsr   s     r9   indicez*ColloscopeImportForm.clean.<locals>.indice  s]    |tAw$66K447||aQQ
++4r8   c                     i | ]M}t          |j                                                  |j        rd                     |j                  ndz   |NS )z(lv{})r8  )r)   rk   rs  r   r   )r   rJ   s     r9   
<dictcomp>z.ColloscopeImportForm.clean.<locals>.<dictcomp>(  sf      @  @  @v}Igk//1122U\U_6ghoogj6Q6Q6Qeghjq  @  @  @r8   )r   c           
         i | ]}t          |j        j                                                  t          |j        j                                                  f|t          |j                            d d                    fS )rL   Tr{   )r)   rs   	last_namers  
first_namer   r  r   )r   r   s     r9   r  z.ColloscopeImportForm.clean.<locals>.<dictcomp>)  s      h  h  h  qxYw|5;;==>>	',JaJgJgJiJi@j@jknuwz  |C  |L  |X  |X  Y]  ei  |X  |j  |j  xk  xk  nl  h  h  hr8   )classesc                     i | ]
}|j         |S r7   r   r  s     r9   r  z.ColloscopeImportForm.clean.<locals>.<dictcomp>*  s    ```&6:v```r8   ru   r   r}   r   r   r        )lumamejevesadiz	\d+a?b?c?z\d+za?b?c?)abcr  rA   z	utf-8-sigr8  )encodingnewline,)	delimiterc                     g | ]G}t           j                                                |                                                     HS ))r  )r   rS   rP  searchgroup)r   rR  p2s     r9   r   z.ColloscopeImportForm.clean.<locals>.<listcomp>9  sC    $q$q$q\]W_%8%8"))A,,BTBTBVBV%8%W%W$q$q$qr8   ua   erreur dans les numéros de semaine (il faut uniquement des nombres précédés de la lettre 'S')u'   première ligne du fichier trop courte!z"longueurs de lignes inconsistantesu,   {} n'est pas une matière de la classe de {}u.   {} n'est pas colleur de {} dans la matière {}rT  u,   {} ne correspond à aucun jour de la semaineh<   u   l'heure {} est mal formatéec              3   4   K   | ]}t          |          V  d S rj   )reversedrQ  s     r9   rl  z-ColloscopeImportForm.clean.<locals>.<genexpr>[  s(      !R!R!(1++!R!R!R!R!R!Rr8   ;zle groupe {} n'existe pasgrclr  c                     g | ]
}|d k    |S )r8  r7   rQ  s     r9   r   z.ColloscopeImportForm.clean.<locals>.<listcomp>q  s$    6a6a6aQYZ^`Y`Y`qY`Y`Y`r8   abcr   u'   {} n'est le login d'aucun élève de {}c                 (    g | ]} |          S r7   r7   )r   elementr   r  s     r9   r   z.ColloscopeImportForm.clean.<locals>.<listcomp>  s%    4`4`4`7VVGA5F5F4`4`4`r8   u=   Le fichier doit être un fichier CSV valide, encodé en UTF-8)3r   rS   rT   rI   r   r   r   recompile	semestresr   
get_configr!  r'   rR   filecsvreaderr  r  rY   r   r   r   r  r)   rs  r   rk   striprL   rr  r$   r[  rt  dictloginsElevesr   isdigitr]  r  r  rW   rP  r  r  r  r  r  r   r  )&rX   r  colleursr   joursp1p3dicor!  csvfilecolloscopereadertaillerowmaxnummatcoller   creneaur   minutesr   colr>   groupsrR  sgroupes
eleves_totsgroupegroupe_numeroeleves_positionrx   ppos	souscolleer   r  r  s&                                      @@@r9   rb   zColloscopeImportForm.clean  s	   
	 
	 
	 @  @  BI  BQ  BX  BX  hl  hs  BX  Bt  Bt  B}  B}  B  B  @  @  @ h  h  |C  |K  |R  |R  [_  [f  |R  |g  |g  h  h  h``FN4I4ISWS^4I4_4_```aaaaaaHHZ%%ZZ!!!"";  	1133=III[	ct0;@K`bccc V2gn#&:g#E#E#E "#344O$q$q$q$qaealmnmomoap$q$q$qDMM  O O O)  +N  O  O  OOT[))Q;;)*STTT + K2 K2CF3xx6))-.RSSS#CFLLNN33Ch!)#-.\.c.cdghlhshw.x.xyyy(Q)=)=)?)?@@3q6<<>>K_K_KaKaAbAbcG(**uQx{hw>OPQ>R/R/RXg%6q%9::::-.^.e.efifnfnovfwfwy}  zE  zI  KN  /O  /O  P  P  P!!fllnn2244::3??Gqz..-.\.c.cdklmdn.o.opppU71:%6777#AJ,,S11E."$Sq]]"2Sq]]"B W---- % a a a-.L.S.ST[\]T^._._```a LLQ(((!!R!Rt{7O7O7Q7Q!R!R!RRRF),SWT])C)C )y )yW"99!LL.... [[]] &ycSjj%'F%'ZZ__ c c#$99;; !c3q66W3D3D$*MM'#a&&/$B$B$B$B*9:U:\:\]`:a:a*b*b$b!LL$v7777 YY[[DKO,A,A,C,CCC!LL$t{);<<<<"f}} %d6#;-? @ @ @ @!$Q!1!1 y+-::c??-/
/7 !O !OG47		'8J8J8P8P8R8R4S4SM6a6a"**WBUBU6a6a6aO'6"'<'<:?:I!:L-3^-B-B}\`\g-B-h-hF'-}} 	%O17+2>I+E+E59&:L:P:P:R:R5S5SFF59&:M:Q:Q:S:S5T5TF1@ )O )OA26q'C/2S[[/@/@0:0A0A&+0N0N0N#&z??V#;#;-0__F %d:-> ? ? ? ?&56_6f6fgjkokv6w6w&x&x x 2!&v : :A(-bqb	4`4`4`4`4`V[\]\^\^V_4`4`4`(`I K..y9999: **51111WK2V2 V2 V2 V2 V2 V2 V2 V2 V2 V2 V2 V2 V2 V2 V2 V2 V2 V2n  	* 	* 	*!#a&&))) 	c 	c 	c!"abbb	csz   %"b* +b3 FbF..Ib.Q<b3RP
bb* b!!b* $b!%b* *
c14cc1c,,c1c                 B   t           j                            | j        | j                                                   | j        D ]X}g }t          j                            |d         |d         |d         | j        |d         |d                   }|                                rOt           j                            |d         | j                                                  s|d d         d         }nt          j                            |d         |d         |d         | j        d	
          }|                                r|d d         d         }n>t          |d         |d         |d         | j                  }|	                                 t          |dd          | j                  D ]\  }}||\  }}|dk    r@|D ]<}|                    t          ||d         |d         |d | j        |                     =R|dk    r;|                    t          ||d         |d         d || j        |                     |                    t          ||d         |d         d d | j        |                     t           j                            |           Zd S )N)rH   creneau__classer   r   r  r   r}   )r   r   r   rI   colle__matierecolle__colleur)rB  rH   T)r   r   r   rI   colle__isnull)r   r   r   rI   r  r%  )rB  r   rJ   rx   r   rI   r>   r  )r   rS   rT   rY   rI   r=  r  r
   rW   r   r   rr  r  )	rX   r  colles_a_sauverrB  rD  r>   gscr   rx   s	            r9   r   zColloscopeImportForm.save  sJ   4=4;WW^^```k 	7 	7F Oo,,&)&)RXYZR[cgcn  E  FG  H  X^  _`  Xa,  b  bG~~ #(<(<wqz_c_l(<(m(m(t(t(v(v #!"1"+a.!/00fQifQiV\]^V_gkgr  BF0  G  G>>## #%bqbk!nGG%6!96!96RS9\`\ghhhGLLNNN #F122Jt} = = 	x 	xW? #ICd{{&* ~ ~F+2257V\]^V_jpqrjs  E  OS  ^b  ^i  u|  4}  4}  4}  ~  ~  ~  ~~'..uwRXYZR[flmnfoz~  IM  X\  Xc  ov  0w  0w  0w  x  x  x  x'..uwRXYZR[flmnfoz~  IM  X\  Xc  ov  0w  0w  0w  x  x  xM%%o6666/	7 	7r8   )r0   r1   r2   r   rb   r   re   rf   s   @r9   r  r    sb        T T T T Tsc sc scj7 7 7 7 7 7 7r8   r  c                   >     e Zd Z G d d          Z fdZd Z xZS )TDFormc                       e Zd ZeZg dZdS )TDForm.Meta)r  r@   rA   r  N)r0   r1   r2   r   rB   rC   r7   r8   r9   rF   rY    s        666r8   rF   c           	          t                      j        |i | || _        || _        t          j                            ||          }| j        r |                    | j        j	                  }|
                    dd          }d t          t          t          dd                    t          |          z
            D             | j        d         _        d S )	Nr  rK   r  Tr{   c                     g | ]}||fS r7   r7   r  s     r9   r   z#TDForm.__init__.<locals>.<listcomp>  r  r8   r}   r  )ra   r   rJ   rI   r   rS   rT   rU   rV   rL   r   r   r   r   rC   r   r  s         r9   r   zTDForm.__init__  s    $)&)))
!!6G!DD= 	9MMt}'7M88E!!(!55(](]s53<<?P?PQTUZQ[Q[?[8\8\(](](]H%%%r8   c                 \   t           j                            | j        d         | j        | j                  }| j        r |                    | j        j                  }|	                                r9t          d                    | j        d         | j        | j                            dS )r  r  r  rK   u4   il existe déjà un td n°{} dans la classe {} en {}N)r   rS   rT   rR   rJ   rI   rU   rV   rL   rW   r   r   r%  s     r9   rb   zTDForm.clean  s    
!!4+<X+FRVR^imit!uu= 	9MMt}'7M88E<<>> 	Y!"X"_"_`d`qrz`{  ~B  ~I  KO  KW  #X  #X  Y  Y  Y	Y 	Yr8   r  rf   s   @r9   rW  rW    s{        7 7 7 7 7 7 7 7^ ^ ^ ^ ^Y Y Y Y Y Y Yr8   rW  c                   >     e Zd Z G d d          Z fdZd Z xZS )	CoursFormc                       e Zd ZeZg dZdS )CoursForm.Meta)r  r@   rA   N)r0   r1   r2   r   rB   rC   r7   r8   r9   rF   r`    s        ,,,r8   rF   c           	          t                      j        |i | || _        || _        t          j                            ||          }| j        r |                    | j        j	                  }|
                    dd          }d t          t          t          dd                    t          |          z
            D             | j        d         _        d S )	Nr  rK   r  Tr{   c                     g | ]}||fS r7   r7   r  s     r9   r   z&CoursForm.__init__.<locals>.<listcomp>  r  r8   r}   r  )ra   r   rJ   rI   r   rS   rT   rU   rV   rL   r   r   r   r   rC   r   r  s         r9   r   zCoursForm.__init__  s    $)&)))$$fw$GG= 	9MMt}'7M88E!!(!55(](]s53<<?P?PQTUZQ[Q[?[8\8\(](](]H%%%r8   c                 \   t           j                            | j        d         | j        | j                  }| j        r |                    | j        j                  }|	                                r9t          d                    | j        d         | j        | j                            dS )r  r  r  rK   u7   il existe déjà un cours n°{} dans la classe {} en {}N)r   rS   rT   rR   rJ   rI   rU   rV   rL   rW   r   r   r%  s     r9   rb   zCoursForm.clean  s    $$d.?.IUYUalplw$xx= 	9MMt}'7M88E<<>> 	\!"["b"bcgctu}c~  AE  AL  NR  NZ  #[  #[  \  \  \	\ 	\r8   r  rf   s   @r9   r^  r^    s{        - - - - - - - -^ ^ ^ ^ ^\ \ \ \ \ \ \r8   r^  c                   >     e Zd Z G d d          Z fdZd Z xZS )DocumentFormc                       e Zd ZeZg dZdS )DocumentForm.Meta)r?   r@   rA   N)r0   r1   r2   r   rB   rC   r7   r8   r9   rF   rg    s        +++r8   rF   c           	          t                      j        |i | || _        || _        t          j                            ||          }| j        r |                    | j        j	                  }|
                    dd          }d t          t          t          dd                    t          |          z
            D             | j        d         _        d S )	Nr  rK   r  Tr{   c                     g | ]}||fS r7   r7   r  s     r9   r   z)DocumentForm.__init__.<locals>.<listcomp>  r  r8   r}   r  )ra   r   rJ   rI   r   rS   rT   rU   rV   rL   r   r   r   r   rC   r   r  s         r9   r   zDocumentForm.__init__  s    $)&))) ''''JJ= 	9MMt}'7M88E!!(!55(](]s53<<?P?PQTUZQ[Q[?[8\8\(](](]H%%%r8   c                 \   t           j                            | j        d         | j        | j                  }| j        r |                    | j        j                  }|	                                r9t          d                    | j        d         | j        | j                            dS )r  r?   )r?   rJ   rI   rK   u@   il existe déjà un document nommé '{}' dans la classe {} en {}N)r   rS   rT   rR   rJ   rI   rU   rV   rL   rW   r   r   r%  s     r9   rb   zDocumentForm.clean  s     ''0A'0JVZVbmqmx'yy= 	9MMt}'7M88E<<>> 	d!"d"k"klpl}  F  mG  IM  IT  VZ  Vb  #c  #c  d  d  d	d 	dr8   r  rf   s   @r9   re  re    s{        , , , , , , , ,^ ^ ^ ^ ^d d d d d d dr8   re  )Ydjangor   accueil.modelsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   django.db.modelsr   r   r   django.db.models.functionsr   datetimer   r   django.forms.widgetsr   django.core.exceptionsr   	xml.etreer   rn  ecolle.settingsr    r!   r"   os.pathr#   r$   osr%   r&   _ior'   r0  r+  zipfiler(   r)   django.core.files.baser*   Formr,   	ModelFormr;   r   rh   ro   r   r   r   r   r  r  r'  r-  BaseFormSetr3  rC  rF  rK  r  r  r  r  r  r  r  r  r  rW  r^  re  r7   r8   r9   <module>r|     s         N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N , , , , , , , , , , / / / / / / $ $ $ $ $ $ $ $ 1 1 1 1 1 1 2 2 2 2 2 2 * * * * * * C C C C C C C C C C                           



 				             . . . . . .T T T T T5: T T T" " " " "EO " " "B# # # # #/ # # #Fr Fr Fr Fr Fr%* Fr Fr FrR7o 7o 7o 7o 7o 7o 7o 7or* * * * *%/ * * *
X X X X X%* X X Xj j j j j
 j j j8G G G G G
 G G Ge e e e eeo e e e . . . . .ej . . .g g g g gEJ g g gF F F F Fu( F F F(j j j j j5: j j jp p p p pe/ p p pp p p p puz p p p8) ) ) ) )%* ) ) )V
l 
l 
l 
l 
l 
l 
l 
l^ ^ ^ ^ ^ ^ ^ ^<, <, <, <, <,) <, <, <,|       ] ] ] ] ] ] ] ]0
 
 
 
 
 
 
 
- - - - - - - -BX7 X7 X7 X7 X75: X7 X7 X7vY Y Y Y YU_ Y Y Y0\ \ \ \ \ \ \ \.d d d d d5? d d d d dr8   