
    X@	gU                     j   d dl mZmZ d dlmZmZ d dlmZ d dlZd dl	m
Z
mZmZ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 g dZd Zd Zd Z d Z! G d dej"                  Z# G d dej"                  Z$ G d dej%                  Z& G d dej"                  Z' G d dej"                  Z( G d dej"                  Z) G d dej"                  Z* eee$           d!             Z+ eee$           d"             Z, eee           d#             Z- eee           d$             Z. eee)           d%             Z. G d& d'ej"                  Z/ G d( d)ej%                  Z0 G d* d+ej"                  Z1 G d, d-ej%                  Z2 G d. d/ej"                  Z3dS )0    )models
connection)post_delete	post_save)receiverN)
MEDIA_ROOTIMAGEMAGICKBDDHEURE_DEBUT	HEURE_FIN
INTERVALLE)Image)SumFchoice   )ContentTypeRestrictedFileField)RichTextField)Eleve)lundimardimercredijeudivendredisamedidimanchec                 Z    d                     d t          |           D                       S )N c              3   4   K   | ]}t          d           V  dS )>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Nr   .0is     $/opt/e-colle/accueil/models/autre.py	<genexpr>z"texte_aleatoire.<locals>.<genexpr>   s,      ss`a6Z[[ssssss    )joinrange)tailles    r%   texte_aleatoirer+      s-    77ssejkqererssssssr'   c                 R    | j         fd|                                 D             S )z8Renvoie les lignes du curseur sous forme de dictionnairec                 ^    g | ])}t          t          d  D             |                    *S )c                     g | ]
}|d          S )r    )r#   cols     r%   
<listcomp>z+dictfetchall.<locals>.<listcomp>.<listcomp>   s    )))S#a&)))r'   )dictzip)r#   rowdescs     r%   r1   z dictfetchall.<locals>.<listcomp>   sJ        	S))D)))3//00  r'   )descriptionfetchall)cursorr5   s    @r%   dictfetchallr9      s@    D   ??$$   r'   c                     t           dk    st           dk    st           dk    rd                    | |          S t           dk    rd                    | |          S t           dk    rd                    | |          S d	S )
u   Renvoie une chaîne de caractères correspondant à la syntaxe SQL 
    qui permet d'ajouter un objet de type date, dateSQL, avec un nombre 
    de jours, jourSQL
postgresqlpostgresql_psycopg2oraclez{}+{}mysqlz{} + INTERVAL {} DAYsqlite3zdate({},'+{} days')r   r
   format)dateSQLjourSQLs     r%   date_plus_jourrD      s{     lc%:::cXoo~~gw///	%,,Wg>>>				$++GW===rr'   c                     t           dk    st           dk    st           dk    rd                    | |          S t           dk    rd                    | |          S t           dk    rd                    | |          S d	S )
u   Renvoie une chaîne de caractères correspondant à la syntaxe SQL
    qui permet de faire la différence date1-date2 en nombre de joursr;   r<   r=   z{}-{}r>   zDATEDIFF({},{})r?   zjulianday({})-julianday({})r   r@   )date1date2s     r%   date_moins_daterH   *   s{     lc%:::cXoo~~eU+++	 ''u555				,33E5AAArr'   c                      e Zd Zd  eeee          D             Z eg d          Z	 e
j        e	d          Z e
j        ed          Z e
j        ddd          Z e
j        d	d
e
j                  Z G d d          Zd ZdS )Creneauc                 J    g | ] }|d                      |dz  |dz            f!S )z	{}h{:02d}<   )rA   r"   s     r%   r1   zCreneau.<listcomp>9   s5    ggg!!K&&q"uad445gggr'   )r   r   r   r   r   r   r   )choicesdefaulti     T)
max_lengthnullblankClasseclassecreneaurelated_name	on_deletec                       e Zd Zg dZdS )Creneau.Meta)jourheuresallepkN)__name__
__module____qualname__orderingr/   r'   r%   MetarY   B   s        ...r'   rb   c                     d                     | j        j        t          | j                 | j        dz  | j        dz            S )Nz{}/{}/{}h{:02d}rL   )rA   classenomsemainerZ   r[   selfs    r%   __str__zCreneau.__str__E   s8     ''	8J4:WY>[_[efh[hjjjr'   N)r^   r_   r`   r)   r   r   r   LISTE_HEURE	enumerate
LISTE_JOURr   PositiveSmallIntegerFieldrZ   r[   	CharFieldr\   
ForeignKeyPROTECTrd   rb   ri   r/   r'   r%   rJ   rJ   8   s        gguu[QZ[e?f?fgggK yQQQRRJ+6+JqIIID,F,[MMMEF4@@@EVx_PVP^___F/ / / / / / / /k k k k kr'   rJ   c                      e Zd Zd Z ej        ddd          Z ej        ddej                  Z	 ej        d	d
ej                  Z
 ej        d          Z ej        ddd          Z ededddgd          Zd ZdS )	Programmec                 ,    dt          d          z   dz   S )Nzprogramme/progrO   z.pdf)r+   instancefilenames     r%   update_namezProgramme.update_nameI   s    /""5"55>>r'   Semainez
Semaine(s)F)verbose_namerR   rS   classeprogrammerU   Matierematiereprogramme2   rP   u   DétailsT)ry   rQ   rR   zFichier(pdf)application/pdf@KL ry   	upload_torQ   rR   content_typesmax_upload_sizec                 4    | j                                         S N)titretitlerg   s    r%   ri   zProgramme.__str__R   s    z!!!r'   N)r^   r_   r`   rw   r   ManyToManyFieldrf   ro   rp   rd   matierern   r   	TextFielddetailr   fichierri   r/   r'   r%   rr   rr   H   s        ? ? ?$f$YLuUUUGVx5FQWQ_```Ff	7ITZTbcccGF"---EV:4dKKKF,,.S^dhos  DU  CV  ho  p  p  pG" " " " "r'   rr   c                       e Zd Zd ZdS )FerieManagerc           	         d                     t          dd                    }t          j                    5 }|                    |||j        |j        |z   ||f           |                                }d d d            n# 1 swxY w Y   |S )NzSELECT COUNT(jf.id)             FROM accueil_semaine s             INNER JOIN accueil_jourferie jf             ON {} = %s             WHERE s.numero >= %s AND s.numero < %s AND s.numero %% %s = %szjf.datezs.lundi)rA   rH   r   r8   executenumerofetchone)	rh   rZ   rf   duree	frequencemodulorequeter8   nbferiess	            r%   
recupFeriezFerieManager.recupFerieV   s    L MSFSbclmvSwSwLxLx	 	
    	'FNN7Du8LYW]#^_____&&H	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' s   =B  BBN)r^   r_   r`   r   r/   r'   r%   r   r   U   s#        	 	 	 	 	r'   r   c                   f    e Zd Z ej        d          Z ej        d          Z e            Z	dS )	JourFerieT)unique   r~   N)
r^   r_   r`   r   	DateFielddatern   re   r   objectsr/   r'   r%   r   r   a   sC        			&	&	&DB'''ClnnGGGr'   r   c                       e Zd Z ej        dddgd          Z ej        dg d          Z ej        d	
          Z e	dd	d	          Z
dS )Informationu   Expéditeur)r   Administrateur)   u   Secrétariatr   )ry   rM   rN   destinataires))r   Colleurs)r   u   Élèves)   zTout le mondery   rM   Tauto_now_addcustom)config_namerR   rQ   N)r^   r_   r`   r   rm   
expediteurdestinataireDateTimeFieldr   r   messager/   r'   r%   r   r   f   s        11[o  rD  [E  QR  S  S  SJ363?  _R  _R  _R  S  S  SL6T222Dm$tLLLGGGr'   r   c                   2   e Zd Zd Z ej        d          Z ej        ddej        d          Z	 ej
        d          Z ej        d	          Z ej        d
	          Z ej        d          Z eddd          Z ededdg dd          ZdS )Messagec                 z    d                     t          d          |                    d          d                   S )Nz
pj/pj{}.{}rO   .)rA   r+   splitrt   s     r%   rw   zMessage.update_namem   s1    ""?2#6#6s8K8KB8OPPPr'   Tr   Usermessagesenvoyes)rQ   rW   rV   rN   zlu par: )ry   zListe des destinatairesd   r~   i  )rP   rR   rQ   u   Pièce jointe)z
text/plainztext/csvzapplication/mswordzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentz
image/jpegz	image/pngz/application/vnd.oasis.opendocument.presentationz.application/vnd.oasis.opendocument.spreadsheetz'application/vnd.oasis.opendocument.textzapplication/vnd.ms-powerpointzIapplication/vnd.openxmlformats-officedocument.presentationml.presentationzapplication/x-rar-compressedzapplication/rtfzapplication/vnd.ms-excelzAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetr   zapplication/zipzapplication/x-7z-compressedr   r   N)r^   r_   r`   rw   r   r   r   ro   CASCADEauteurBooleanField	hasAuteurr   luParlistedestinatairesrn   r   r   corpsr   pjr/   r'   r%   r   r   l   s        Q Q Q6T222DVvDFNYjkkkF##D111IF*555E))7PQQQF,,,EMT$tDDDE	'	'_{`dko n n n @G	
H 
H 
HBBBr'   r   c                       e Zd Z ej        edej                  Z ej        ddej                  Z ej	        d          Z
 ej        d          ZdS )	DestinatairemessagerecurU   r   r   Fr   r   N)r^   r_   r`   r   ro   r   r   r   userr   lurm   reponsesr/   r'   r%   r   r   |   sn        f]V^\\\G		6~	W	W	WDE***B/v/:::HHHr'   r   )senderc                    |j         r|j         j        t          j                            t
          |j         j                  }t          j                            |          rt          j        |           t          rvt          j                            t
          d|j         j        dd         z   dz             }t          j                            |          rt          j        |           d S d S d S d S d S )Nimage	   jpg)	r   nameospathr(   r   isfileremover	   )r   ru   kwargsr   r   s        r%   programme_post_delete_functionr      s     !H,1=Z(8(=>>7>>'"" 	Ig 	!GLLGH4D4I!B$4O,OPU,UVVEw~~e$$ !	%     ! !==	! 	!! !r'   c                    	 |j         j        }t          r|rt          j                            t          d|j         j        dd         z   dz             }t          j                            |          sct          j        dt          j                            t          |          z   dz   |z              t          j        d|z   dz   |z              d S d S d S d S # t          $ r Y d S w xY w)	Nr   r   r   r   zconvert -density 200 z[0] zconvert -resize 50%  )
r   r   r	   r   r   r(   r   r   system	Exception)r   ru   r   
nomfichiernomimages        r%   programme_post_save_functionr      s	   	#(
 	H: 	HW\\*WX5E5J1R45P-PQV-VWWH7>>(++ H	1"',,z*2U2UUV\\]eefff	09#=hFGGGGG	H 	H 	H 	HH H    s   CC 
C&%C&c                    |j         rt          j                            t          j                            t
          |j         j                            rt          j        t          j                            t
          |j         j                            }|j	        }|dk    r<	 |d         |d         z  }n# t          $ r d}Y nw xY w|dk    rW|                    t          |dz            df          }|j	        d         dz
  dz  }|                    |d|dz   df          }nr|dk     rW|                    dt          d|z            f          }|j	        d         dz
  dz  }|                    d|d|dz   f          }n|                    d          }|                    t          j                            t
          |j         j                             d S d S d S d S )N),    r   r   g      ?r   r   r   )photor   r   r   r(   r   r   r   opensizer   resizeintcropsave)r   ru   r   r   r*   ratioabscisseordonnees           r%   eleve_post_save_functionr      s   ~ E"'..jAT)U)UVV Ejj1DEEFFzYQiq	)   SyyllCc	NN3#788*Q-+a/jj(1Xc\#!>??sllCCI#788*Q-+a/jj!HS#!>??ll9--JJrw||Jx~/BCCDDDDD%E E E E s   &B8 8CCc                     |j         rp|j         j        ft          j                            t
          |j         j                  }t          j                            |          rt          j        |           d S d S d S d S r   )r   r   r   r   r(   r   r   r   r   ru   r   r   s       r%   eleve_post_delete_functionr      sv    ~ (.-9Z(;<<7>>'"" 	Ig 99	 	r'   c                     |j         rp|j         j        ft          j                            t
          |j         j                  }t          j                            |          rt          j        |           d S d S d S d S r   )r   r   r   r   r(   r   r   r   r   s       r%   r   r      sv    { x{'3Z(8997>>'"" 	Ig 33	 	r'   c                   j   e Zd Z ej        dddd          Z ej        dddej                  Z ej	        d	d
          Z
 ej	        ddd          Z ej        d e ed                    dd          Z ej        d e ed                    dd          Z G d d          Zd ZdS )MatiereECTSColleur
ProfesseurcolleurmatiereECTST)ry   rV   rR   rS   classematiereECTS)ry   rV   rW   P   u   Matière)rP   ry   rO   u
   Précision)rP   ry   rR   zcoefficient semestre 1   )ry   rM   rQ   rR   zcoefficient semestre 2c                       e Zd ZdZdS )MatiereECTS.Meta)rd   re   	precisionNr^   r_   r`   unique_togetherr/   r'   r%   rb   r      s        5r'   rb   c                     | j         r2d                    | j                                        | j                   S | j        S )Nz{}({}))r   rA   re   r   rg   s    r%   ri   zMatiereECTS.__str__   s6    > 	D??48>>#3#3DNCCCxr'   N)r^   r_   r`   r   r   profsro   r   rd   rn   re   r   rm   rk   r)   	semestre1	semestre2rb   ri   r/   r'   r%   r   r      s@       "F"9,UiptuuuEVxXL_kqkyzzzF
&
bj
A
A
AC  BLtTTTI00>V_h_hininoqirir_s_sy}  EI  J  J  JI00>V_h_hininoqirir_s_sy}  EI  J  J  JI7 7 7 7 7 7 7 7    r'   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )NoteECTSManagerc           	         g }|D ]{}d}t          j                    5 }|                    ||j        |j        |j        f           t	          |          }d d d            n# 1 swxY w Y   |                    |           |d}t          j                    5 }|                    ||j        |j        f           t	          |          }d d d            n# 1 swxY w Y   |j        dk    rXd}t          j                    5 }|                    ||j        f           t	          |          }d d d            n# 1 swxY w Y   |rl|j        dk    r0dt          t          t          d |D              |                    fS dt          t          t          d |D              ||                    fS |j        dk    rd	|gfS dt          ||          fS )
Na  SELECT DISTINCT e.id id_eleve, u.first_name prenom,u.last_name nom, m.nom matiere, m.precision, n1.note note1, n2.note note2            FROM accueil_eleve e            INNER JOIN accueil_user u            ON u.eleve_id=e.id            CROSS JOIN accueil_matiereects m            INNER JOIN accueil_matiereects_profs mp            ON mp.matiereects_id = m.id            LEFT OUTER JOIN accueil_noteects n1            ON n1.matiere_id=m.id AND n1.semestre = 1 AND n1.eleve_id = e.id            LEFT OUTER JOIN accueil_noteects n2            ON n2.matiere_id=m.id AND n2.semestre = 2 AND n2.eleve_id = e.id            WHERE m.classe_id=%s AND e.classe_id=%s AND m.id=%s            ORDER BY u.last_name,u.first_nameae  SELECT DISTINCT e.id id_eleve, u.first_name prenom,u.last_name nom, n.note note            FROM accueil_eleve e            INNER JOIN accueil_user u            ON u.eleve_id=e.id            LEFT OUTER JOIN accueil_noteglobaleects n            ON n.eleve_id = e.id AND n.annee = %s            WHERE e.classe_id=%s            ORDER BY u.last_name,u.first_namer   ad  SELECT DISTINCT e.id id_eleve, u.first_name prenom,u.last_name nom, n.note note            FROM accueil_eleve e            INNER JOIN accueil_user u            ON u.eleve_id=e.id            LEFT OUTER JOIN accueil_noteglobaleects n            ON n.eleve_id = e.id AND n.annee = 1            WHERE e.classe_id=%s            ORDER BY u.last_name,u.first_namer   Fc                     g | ]}|S r/   r/   r#   notes     r%   r1   z(NoteECTSManager.note.<locals>.<listcomp>       ,I,I,IdT,I,I,Ir'   c                     g | ]}|S r/   r/   r  s     r%   r1   z(NoteECTSManager.note.<locals>.<listcomp>   r  r'   T)	r   r8   r   r]   r9   appendanneelistr3   )	rh   rd   matieres
listeNotesr   r   r8   notesnotesbiss	            r%   r  zNoteECTSManager.note   s   
 	% 	%G/G "$$ -w	&)GJ'GHHH$V,,- - - - - - - - - - - - - - - e$$$$/    	)FNN7FL#<=== ((E	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) <1/G "$$ 0w	|444'//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  	^|q  d3s,I,Ij,I,I,I'JE#R#RSSSSd3s,I,Ij,I,I,I'JES[#\#\]]]]<1%= c%))))s5   8A  A$	'A$	2CCC?,D77D;>D;c                     d}t          j                    5 }|                    |t          d |D                       |j        |j        |j        f           t          |          }d d d            n# 1 swxY w Y   |S )Nah  SELECT u.first_name prenom, u.last_name nom, ne1.note semestre1, ne2.note semestre2        FROM accueil_matiereects me        INNER JOIN accueil_classe cl        ON me.classe_id = cl.id        INNER JOIN accueil_eleve e        ON e.classe_id=cl.id AND e.id IN %s        INNER JOIN accueil_user u        ON u.eleve_id=e.id        LEFT OUTER JOIN accueil_noteects ne1        ON ne1.eleve_id = e.id AND ne1.semestre =1 AND ne1.matiere_id=%s        LEFT OUTER JOIN accueil_noteects ne2        ON ne2.eleve_id = e.id AND ne2.semestre =2 AND ne2.matiere_id=%s        WHERE me.id=%s        ORDER BY u.last_name,u.first_namec                     g | ]	}|j         
S r/   r]   r#   eleves     r%   r1   z.NoteECTSManager.noteEleves.<locals>.<listcomp>  s    *M*M*M58*M*M*Mr'   )r   r8   r   tupler]   r9   )rh   r   listeElevesr   r8   r  s         r%   
noteEleveszNoteECTSManager.noteEleves  s    +    	)FNN7E*M*M*M*M*M$N$NwzZaZdeleo#pqqq ((E	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) s   AA22A69A6c           	         |j         g g fS |j         j        dk    rt          t          j                            |                              ddddd                              dd                    }t          j                            |d	                                          }t          j                            d|
          }|d |         ||d          |
                                sd n|d         j        fS t          t          j                            |d                              ddddd                              dd                    }t          j                            |dd                                                                          }t          t          j                            |d                              ddddd                              dd                    }t          j                            |dd                                                                          }t          j                            d|
          }t          j                            d|
          }|d |         ||d          |
                                sd n|d         j        |d |         ||d          |
                                sd n|d         j        fS )Nr   )r  matiere__nommatiere__precisionmatiere__semestre1matiere__semestre2r  semestre)r  r  )r	  r  r   )r  matiere__classe__annee)r  r  r  r   )rd   r	  r
  NoteECTSr   filtervalues_listorder_bycountNoteGlobaleECTSexistsr  distinct)	rh   r  r  r   ngnotes2	semestre3ng1ng2s	            r%   notePDFzNoteECTSManager.notePDF  s   <b5L<"")00u0==II.Ym  oC  DX  Y_  `  `  i  i  jt  uC  D  D  E  EE (//eQ/GGMMOOI (//ae/DDB)$eIJJ&7RYY[[9`VXYZV[V```)00uTU0VVbbcq  sG  H\  ]q  rx  y  y  B  B  CM  N\  ]  ]  ^  ^E (//eST^_/``iikkqqssI(*11UV1WWccdr  tH  I]  ^r  sy  z  z  C  C  DN  O]  ^  ^  _  _F (//eST^_/``iikkqqssI!)00qu0EEC!)00qu0EEC)$eIJJ&7SZZ\\9bWZ[\W]Wbdjkulukudvx~  @I  @J  @J  yK  Y\  Yc  Yc  Ye  Ye  Mv  MQ  MQ  kn  op  kq  kv  v  vr'   c                    |j         sdS |j         j        }t          j                            |d          }|                                r|d         j        }|dk    r|S nt          j                            |dd                              t          d          t          d          z            
                    t          d          	          d
         pd}|t          j                            |dd                              t          d          t          d          z            
                    t          d          	          d
         pdz  }|dz  }|dk    rt          |          S t          j                            |d          }|                                r|d         j        S t          j                            |dd                              t          d          t          d          z            
                    t          d          	          d
         pd}|t          j                            |dd                              t          d          t          d          z            
                    t          d          	          d
         pdz  }|dz  }|dk     rt          |          S t          ||z   dz            S )Nr   r   )r  r	  )r  r  r  r  r  )notepondr-  )spr.  r   r   r  rL   )rd   r	  r#  r   r  r$  r  r  annotater   	aggregater   round)rh   r  r	  r  somme1somme2s         r%   moyenneECTSzNoteECTSManager.moyenneECTS(  s   |%AA"&--E-BB;;== 		%!W\Fzz  %,,5![\,]]ffpqrxpypyz{  }Q  {R  {R  qRf  S  S  ]  ]  ad  eo  ap  ap  ]  q  q  rv  w  }  {}Fh&--E1\]-^^ggqrsyqzqz{|  ~R  |S  |S  rSg  T  T  ^  ^  be  fp  bq  bq  ^  r  r  sw  x  ~  |~  ~FbLFzzV}}$&--E-BB;;== 	7<%,,5![\,]]ffpqrxpypyz{  }Q  {R  {R  qRf  S  S  ]  ]  ad  eo  ap  ap  ]  q  q  rv  w  |  {|Fh&--E1\]-^^ggqrsyqzqz{|  ~R  |S  |S  rSg  T  T  ^  ^  be  fp  bq  bq  ^  r  r  sw  x  }  |}  }FbLFA::== fVmQ&'''r'   c                 N   t           dk    rd}nd}t          j                    5 }|                    ||j        f           t          |          }d d d            n# 1 swxY w Y   dgdz  }|D ]}d}|d         r|dxx         dz  cc<   nd}|d         r|dxx         dz  cc<   nd}|d	         r|d
xx         dz  cc<   nd}|d         dk    r|dxx         dz  cc<   n
|d         d}|d         dk    r|dxx         dz  cc<   n
|d         d}|dxx         |z  cc<   ||fS )Nr>   ad  SELECT u.first_name prenom, u.last_name nom, e.id, e.ddn, e.ldn, e.ine, SUM(CASE WHEN ne.semestre = 1 THEN m.semestre1 ELSE 0 END) sem1, ng.note note,            SUM(CASE WHEN ne.semestre = 2 THEN m.semestre2 ELSE 0 END) sem2            FROM accueil_classe cl            INNER JOIN accueil_eleve e            ON e.classe_id=cl.id            INNER JOIN accueil_user u            ON u.eleve_id=e.id            LEFT OUTER JOIN accueil_noteects ne            ON ne.eleve_id = e.id AND ne.note != 5            LEFT OUTER JOIN accueil_matiereects m            ON ne.matiere_id = m.id AND m.classe_id = cl.id            LEFT OUTER JOIN accueil_noteglobaleects ng            On ng.annee = cl.annee AND ng.eleve_id = e.id            WHERE cl.id = %s            GROUP BY u.last_name, u.first_name, e.id, e.ddn, e.ldn, e.ine, ng.note            ORDER BY u.last_name, u.first_namea  SELECT u.first_name prenom, u.last_name nom, e.id, e.ddn, e.ldn, e.ine, SUM(m1.semestre1) sem1, SUM(m2.semestre2) sem2, ng.note note            FROM accueil_classe cl            INNER JOIN accueil_eleve e            ON e.classe_id=cl.id            INNER JOIN accueil_user u            ON u.eleve_id=e.id            LEFT OUTER JOIN accueil_noteects ne            ON ne.eleve_id = e.id AND ne.note != 5            LEFT OUTER JOIN accueil_matiereects m1            ON ne.matiere_id = m1.id AND ne.semestre = 1 AND m1.classe_id = cl.id            LEFT OUTER JOIN accueil_matiereects m2            ON ne.matiere_id = m2.id AND ne.semestre = 2 AND m2.classe_id = cl.id            LEFT OUTER JOIN accueil_noteglobaleects ng            On ng.annee = cl.annee AND ng.eleve_id = e.id            WHERE cl.id = %s            GROUP BY u.last_name, u.first_name, e.id, e.ddn, e.ldn, e.ine, ng.note            ORDER BY u.last_name, u.first_namer      r   ddnldniner   sem1r   r   r  sem2      )r
   r   r8   r   r]   r9   )rh   rd   r   r8   creditstotalcreditattests           r%   r>  zNoteECTSManager.creditsA  s   '>>0GG"0G"    	+FNN7FI<000"6**G	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ A 	 	FFe} a!e} a!e} a!f~##a!'f~##a!'!HHHHHHHu}s   ,AA #A N)r^   r_   r`   r  r  r+  r4  r>  r/   r'   r%   r  r     sc        2* 2* 2*h  (v v v"( ( (2? ? ? ? ?r'   r  c                       e Zd Z ej        edej                  Z ej        eej                  Z	 ej
        dd          Z ej
         ed                    Z e            Z G d	 d
          ZdS )r     Élèvery   rW   )rW   r  ))r   z1er semestre)r   u   2ème semestrer   ABCDEFrM   c                       e Zd ZdZdS )NoteECTS.Meta)r  r   r  Nr   r/   r'   r%   rb   rH    s        7r'   rb   N)r^   r_   r`   r   ro   r   r   r  r   r   rm   r  rk   r  r  r   rb   r/   r'   r%   r  r    s        FeV^TTTEffnEEEG/v/ZPyzzzH+6+IIh4G4GHHHDOG9 9 9 9 9 9 9 9 9 9r'   r  c                       e Zd Zd ZdS )NoteGlobaleECTSManagerc           
          d}t          j                    5 }|                    |||j        t	          d |D                       f           t          |          }d d d            n# 1 swxY w Y   |S )NaH  SELECT u.first_name prenom, u.last_name nom, n.note note_globale        FROM accueil_eleve e        INNER JOIN accueil_user u        ON u.eleve_id=e.id        LEFT OUTER JOIN accueil_noteglobaleects n        ON n.eleve_id = e.id AND n.annee=%s         WHERE e.classe_id=%s AND e.id IN %s        ORDER BY u.last_name,u.first_namec                     g | ]	}|j         
S r/   r  r  s     r%   r1   z5NoteGlobaleECTSManager.noteEleves.<locals>.<listcomp>  s    <_<_<_%UX<_<_<_r'   )r   r8   r   r]   r  r9   )rh   rd   r	  r  r   r8   r  s          r%   r  z!NoteGlobaleECTSManager.noteEleves  s    +    	)FNN7E69e<_<_S^<_<_<_6`6`#abbb ((E	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) s   AA''A+.A+N)r^   r_   r`   r  r/   r'   r%   rJ  rJ    s#            r'   rJ  c                       e Zd Z ej        edej                  Z ej        dd          Z	 ej         e
d                    Z e            ZdS )	r#  rC  rD  u   année))r   u   1ère année)r   u   2ème annéer   rE  rF  N)r^   r_   r`   r   ro   r   r   r  rm   r	  rk   r  rJ  r   r/   r'   r%   r#  r#    sn        FeV^TTTE,F,(KrsssE+6+IIh4G4GHHHD""$$GGGr'   r#  )4	django.dbr   r   django.db.models.signalsr   r   django.dispatchr   r   ecolle.settingsr   r	   r
   r   r   r   PILr   django.db.modelsr   r   randomr   contenttyper   ckeditor.fieldsr   r  r   rf   r+   r9   rD   rH   ModelrJ   rr   Managerr   r   r   r   r   r   r   r   r   r   r  r  rJ  r#  r/   r'   r%   <module>rY     sq   ( ( ( ( ( ( ( ( ; ; ; ; ; ; ; ; $ $ $ $ $ $ 				? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?       # # # # # # # #       7 7 7 7 7 7 ) ) ) ) ) )      
N
N
Nt t t    
 
 
k k k k kfl k k k " " " " " " " "
 
 
 
 
6> 
 
 
       
M M M M M&, M M MH H H H Hfl H H H ; ; ; ; ;6< ; ; ; 
+i(((! ! )(! 
)I&&&
 
 '&
 
)E"""E E #"E* 
+e$$$  %$ 
+g&&&  '&    &,    r r r r rfn r r rj9 9 9 9 9v| 9 9 9    V^   % % % % %fl % % % % %r'   