
    X@	g|-                         d dl mZmZ d dlmZmZmZmZ d dlmZ d dl	m
Z
mZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ d d
lmZmZmZ ddZ G d dej                  Z G d dej                  ZdS )    )models
connection)date	timedeltadatetimetime)timezone)AvgMinMaxStdDevCount   )dictfetchall)Semaine)Eleve)Matiere)HEURE_DEBUT	HEURE_FIN
INTERVALLENFc                    
 |du rt                     }|dn|d         |d n|d         
|dk    rg S z   t           d                   k    r
 fdt          |          D             S g }g}d}t          |dz
            D ]a}	 |	z                      |	z   dz                     k    r|dz  }/|                    |           |                    |	z   dz              d}b|                    |           |dn	|dd         |dn	|dd         
 fdt          ||          D             S )uM   fonction récursive pour transformer un tableau de tableaux en arbre à poidsFNr   r   c                     | S N ts    #/opt/e-colle/accueil/models/note.py<lambda>zarray2tree.<locals>.<lambda>   s    Q     c                 N    g | ]!} |z            z                      "S r   r   ).0ifuncproftableauxys     r   
<listcomp>zarray2tree.<locals>.<listcomp>   s8    DDDWQqS\!AdF(+,,DDDr   c                     g | ]=\  }}g  |         z                      t          |z   |          |R >S r   )
array2tree)	r!   longueurpositionr#   new_funcnew_profr$   r%   r'   s	      r   r(   zarray2tree.<locals>.<listcomp>"   s      t  t  t  EW  EM  OWdd78$QqvX.//GXxYacdeiciks1t1tv~  t  t  tr   )lenrangeappendzip)r%   profondeursfuncsr&   r'   taille	longueurs	positionsr+   r"   r#   r-   r.   r$   s   `  ``     @@@@r   r*   r*      s   W#11QD =JJJeAhD{{	4x3wqz??""DDDDDDDDeFmmDDDDIIH6!8__  1Q3<?gac!enQ///qLHHX&&&QqSU###HHX"*ttABBH}tt%)H t  t  t  t  t  t  t  t  t  [^  _h  ir  [s  [s  t  t  t  tr   c                   6    e Zd Zd Zd Zd Zd Zd	dZd
dZdS )NoteManagerc                     d}t          j                    5 }|                    ||j        f           t	          |          }d |D             cd d d            S # 1 swxY w Y   d S )Nan  SELECT s.numero semaine, n.id, n.date_colle, n.heure, n.note, n.commentaire, n.matiere_id, n.classe_id, n.eleve_id, n.rattrapee                   FROM accueil_note n                   INNER JOIN accueil_semaine s                   ON n.semaine_id=s.id                   WHERE n.colleur_id= %s                   ORDER BY s.numero DESC, n.date_colle DESC, n.heure DESCc                 p   g | ]}|d          |d         |d         |d         |d         |d         t          j        |d         t          |d         dz  |d         dz                                          t          j        	                                          |d
         t          |d                   g	S )id
matiere_id	classe_idnotecommentairesemaine
date_colleheure<   )tzinfoeleve_id	rattrapee)r   combiner   replacer	   utc	timestampbool)r!   r?   s     r   r(   z-NoteManager.listeNotesApp.<locals>.<listcomp>2   s     g g g Y] $Zl!3T+5FVW[\iWjlpqzl{  ~F  ~N  OS  T`  OaT']b($w-"*<==~? ~??Fwhlw?[?[\e\e\g\gimnxiy{  AE  FQ  AR  |S  |ST g g gr   r   cursorexecutepkr   )selfcolleurrequeterN   notess        r   listeNotesAppzNoteManager.listeNotesApp(   s    L    	gFNN7GJ=111 ((Eg g afg g g	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	g 	gs   7AA!Ac           	      "   d}t          j                    5 }|                    ||j        |j        |j        |j        |j        f           |                                }d d d            n# 1 swxY w Y   t          |g dd d d d g          S )Nu  SELECT s.numero semaine, p.titre, p.detail, n.date_colle, n.heure, COALESCE(u.first_name,'Élève Fictif') prenom, COALESCE(u.last_name,'') nom, n.note, n.commentaire, n.id pk                   FROM accueil_note n                   LEFT OUTER JOIN accueil_eleve e                   ON n.eleve_id = e.id                   LEFT OUTER JOIN accueil_user u                   ON u.eleve_id = e.id                   INNER JOIN accueil_semaine s                   ON n.semaine_id=s.id                   LEFT OUTER JOIN (SELECT ps.semaine_id, sub.matiere_id, sub.classe_id, sub.titre, sub.detail, sub.fichier FROM accueil_programme_semaine ps                   INNER JOIN accueil_programme sub                   ON ps.programme_id = sub.id) p                   ON p.semaine_id = s.id AND p.classe_id = %s AND p.matiere_id = %s                   WHERE n.classe_id = %s AND n.colleur_id= %s AND n.matiere_id = %s                   ORDER BY s.numero DESC, n.date_colle DESC, n.heure DESC, u.last_name, u.first_name)   r   r      c                 ^    d                     | d                   | d         pd| d         pdfS )Nu   Semaine n°{}r   r       format)ls    r   r   z(NoteManager.listeNotes.<locals>.<lambda>G   s9    _5K5KAaD5Q5QRSTURVR\Z\]^_`]a]geg4h r   c                     | S r   r   r   s    r   r   z(NoteManager.listeNotes.<locals>.<lambda>G   s    rs r   c                     | S r   r   r   s    r   r   z(NoteManager.listeNotes.<locals>.<lambda>G   s    ~ r   c                     d                     | d                                         | d                                                   | d         | d         | d         fS )Nz{} {}r   r   r[   rW      )r]   titleupperr   s    r   r   z(NoteManager.listeNotes.<locals>.<lambda>G   s      LS  LZ  LZ  [\  ]^  [_  [e  [e  [g  [g  hi  jk  hl  hr  hr  ht  ht  Lu  Lu  vw  xy  vz  {|  }~  {  @A  BC  @D  KE r   )r   rN   rO   rP   fetchallr*   )rQ   rR   classematiererS   rN   rT   s          r   
listeNoteszNoteManager.listeNotes5   s    g    	&FNN7FIgj7:gj#YZZZOO%%E	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& %			+h+hisisuu  BE  BE  +F  G  G  	Gs   A	A++A/2A/c           
   #     K   t           j                            |||j        |j        f                                                              d          }|V  t          t          j                            |                              d                    }d |D             t          t          j        
                    d           
                    d                              ||	                              |j        |j        g
                              ddd                              t          d                                        dd                    }|                    d d           t          |          D ]\  }}	|dz   |	d<   t!          t#          |          dz
            D ]@}||         d         ||dz            d         z
  dk     r||         d         ||dz            d<   A|D ]#}
|
d         |
d         g|
d                  dd <   $fd|D             }t%          ||          D ]\  }}t'                      }||d<   |d         |d<   |d         |d<   t                      |d<   |D ]S}|d                             t          j                            |||                              dddd                     T|V  d S ) Nsemainenote__classesemainenote__matierelundi__rangelundi)rf   userc                     i | ]F}|j         |j        j                                        |j        j                                        d d gGS )rZ   )rP   ro   
first_namerc   	last_namerd   )r!   eleves     r   
<dictcomp>z/NoteManager.classe2resultat.<locals>.<dictcomp>M   sJ    {{{fkeh
 5 ; ; = =ej>R>X>X>Z>Z[]^`a{{{r   rs      note__gt)rg   eleve__classe)semaine__lundi__range	eleve__ideleve__user__first_nameeleve__user__last_namer?   c                     | d         S )N	note__avgr   )r&   s    r   r   z-NoteManager.classe2resultat.<locals>.<lambda>O   s
    1[> r   T)keyreverser   rangr   gư>r[   c                 *    g | ]}|j                  S r   )rP   )r!   rs   
elevesdicts     r   r(   z/NoteManager.classe2resultat.<locals>.<listcomp>W   s     @@@5*UX&@@@r   rs   moyennerW   rA   )rs   rg   rA   colleur__user__first_namecolleur__user__last_namer@   )r   objectsfilterrn   distinctorder_bylistr   select_relatedNoteexcludevaluesannotater
   sort	enumerater0   r/   r2   dictr1   )rQ   rg   rf   seminsemaxsemaineslisteElevesmoyennesr"   r&   r   eleveselevemoyrs   r?   rA   r   s                   @r   classe2resultatzNoteManager.classe2resultatI   s     ?))fZapup{  }B  }H  pI)  J  J  S  S  U  U  ^  ^  _f  g  g5=//v/>>MMfUUVV{{oz{{{
,,4,88@@"@MMTT]dsyTzz  B  B  Z_  Ze  fk  fq  Yr  B  s  s  z  z  {F  G`  ay  z  z  C  C  DG  HN  DO  DO  P  P  Y  Y  Zr  sL  M  M  N  N11$???X&& 	 	CAacAfIIs8}}Q'' 	: 	:A{;'1k(BB4GG&.qk&&91f% 	X 	XG29+2Fwv1WJw{+,QRR00@@@@K@@@!&55 	 	NHUDDM$QKDO!!DL FFDO# } }Y&&t|':':w_f':'g'g'n'nou  wR  Sm  n{  (|  (|  }  }  }  }JJJJ	 	r   c                     t           j                            |||j        |j        f                                                                          S )Nrj   )r   r   r   rn   r   count)rQ   rg   rf   r   r   s        r   
nbSemaineszNoteManager.nbSemainesb   sn    %%&V]lqlwx}  yD  lE%  F  F  O  O  Q  Q  W  W  Y  Y  	Yr   Nc                     d}|r|dz  }|dz  }t          j                    5 }|                    ||j        g|r|j        gng z              t	          |          }d d d            n# 1 swxY w Y   |S )Na  SELECT m.nom nom_matiere, m.couleur couleur, n.date_colle date_colle, u.first_name prenom, u.last_name nom, p.titre titre, p.detail programme, n.note note, n.commentaire commentaire                   FROM accueil_note n                   INNER JOIN accueil_matiere m                   ON n.matiere_id=m.id                   LEFT JOIN accueil_colleur c                   ON n.colleur_id=c.id                   LEFT JOIN accueil_user u                   ON u.colleur_id=c.id                   INNER JOIN accueil_semaine s                   ON n.semaine_id=s.id                   LEFT OUTER JOIN (SELECT ps.semaine_id, sub.matiere_id, sub.classe_id, sub.titre, sub.detail, sub.fichier FROM accueil_programme_semaine ps                   INNER JOIN accueil_programme sub                   ON ps.programme_id = sub.id) p                   ON p.semaine_id = s.id AND p.matiere_id = m.id AND p.classe_id = n.classe_id                   WHERE n.eleve_id = %s zAND m.id = %s zORDER BY date_colle DESCrM   )rQ   rs   rg   rS   rN   rT   s         r   	noteElevezNoteManager.noteElevee   s    +  	&%%G++   	)FNN7EH:1P'*b#QRRR ((E	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) s   9A''A+.A+Fc                 r   |                      |                              d          }|r|                     |j                  }|r|s|                     |j                  }n|r|                     |j                  }|                    d                              dd	d
                                          }d t          j                             |                                          D             |                      ||                              d          }|                      ||j	        d                              d          }|r6|                     |j                  }|                     |j                  }|r9|s7|                     |j                  }|                     |j                  }n8|r6|                     |j                  }|                     |j                  }t          |                    dd                              t          d          t          d          t          d          t!          d          t#          d                                        dd	d
                    }|                    d                              t          d                                        dd	d
          }g }t%          |          D ]*\  }	}
|                     d                               |j	        d|
d                   }|r|                     |j                  }|r|s|                     |j                  }n|r|                     |j                  }||	         d         rn|                    d                              t          d                                         ||	         d         dz                                             dz   }nd}|                    |           ,fdt+          |||          D             S )Nru   rv   rw   )semaine__lundi__gte)semaine__lundi__lte)semaine__lundi__ltmatiere__pkmatiere__nommatiere__lvmatiere__tempsc                     i | ]E}|j         |j                                        |j        rd                     |j                  ndz   FS )z(lv{})rZ   )rP   nomrc   lvr]   )r!   r&   s     r   rt   z*NoteManager.bilanEleve.<locals>.<dictcomp>   sY      M  M  MYZqtQU[[]]qt.Shooad.C.C.CQST  M  M  Mr   )pk__in)rs   matiere__pk__inF)r   rf   eleve__isnullmatiere__couleurr?   r   )rf   r   r   r   rs   g-C6?)note__avg__gtr   c                     g | ]H\  }}}|d          |d         |d         |d         |d                  |d         |d         |d         |d	IS )	note__maxr   note__stddev	note__minr   note__countr   )	r   r   r   r   r   r   r   noteclasse__avgr   r   )r!   r&   r'   zmatieresObjs       r   r(   z*NoteManager.bilanEleve.<locals>.<listcomp>   s     P P P ej  ef  gh  ij  n!DVBWijkyiz  JK  LW  JX#Am$45aFVefgres  HI  JU  HV  ^_` ` P P Pr   )r   r   rn   values_listr   r   r   r   allrf   r   r   r   r
   r   r   r   r   r   r   r1   r2   )rQ   rs   r   r   strictmatieresr   moyenne_classerangsr"   rg   r   r   s               @r   
bilanElevezNoteManager.bilanEleve}   s   ;;U;++33R3@@ 	F___EEH 	E 	E___EEHH 	E___DDH%%m44==n][klluuww M  M^e^m^t^t  }E^t  _F  _F  _J  _J  _L  _L  M  M  M++E(+CCKKUWKXXXU\`effnnxzn{{ 	TNNu{NCCG+22u{2SSN 	S 	SNNu{NCCG+22u{2SSNN 	SNNekNBBG+22ek2RRNw~~m4FGGPPQTU[Q\Q\]`ag]h]hilmsitituz  |B  vC  vC  DJ  KQ  DR  DR  S  S  \  \  ]k  ly  zJ  K  K  L  L'..}==FFs6{{SS\\]kly  {K  L  L"8,, 	 	IAgr**11TYfmnofp1qqD B[[U[[AA AV A[[U[[AA A[[EK[@@qz+& [[))223v;;??FFU\]^U_`kUlmsUsFttzz||}~~LLP P P P nq  ry  zH  IN  nO  nOP P P 	Pr   r   )F)	__name__
__module____qualname__rU   rh   r   r   r   r   r   r   r   r9   r9   '   s        g g gG G G(  2Y Y Y   0&P &P &P &P &P &Pr   r9   c                      e Zd Z eg d          Zd  eeee          D             Z	ddgZ
e
                     e ed           ed                                ej        dej        d          Z ej        d	ej        
          Z ej        d          Z ej        ddej        d          Z ej        dej                  Z ej        d          Z ej        ed          Z ej        e
d          Z ej        ddej                  Z ej        dej        
          Z ej        e	d          Z ej         dddd          Z! e"            Z#d Z$d Z%d S )!r   )rn   mardimercredijeudivendredisamedic                 J    g | ] }|d                      |dz  |dz            f!S )z	{}h{:02d}rD   r\   )r!   r"   s     r   r(   zNote.<listcomp>   s5    ggg!!K&&q"uad445gggr   )   zn.n)   Absr   ColleurT)	on_deletenullr   )r   )auto_now_addr   semainenoteF)related_namer   blankzdate de rattrapage)verbose_namedefaultu
   rattrapée)r   r   )choicesr   r   r   )r   r   Classe   i  zCommentaire(facultatif))
max_lengthr   r   r   c                     | j         s6| j        j        t          t	          | j                            z   | _        d S d S )N)days)rG   rA   rn   r   intjourrB   rQ   s    r   updatezNote.update   sA    ~ 	N L.yc$)nn/M/M/MMDOOO	N 	Nr   c                     d                     | j        j        j                                        | j        j        | j        j        | j	                  S )Nz{} {} {} {})
r]   rs   ro   rr   rd   rg   r   rA   numeror?   r   s    r   __str__zNote.__str__   s?    ##DJO$=$C$C$E$EdlFVW[WcWjkoktuuur   N)&r   r   r   r   
LISTE_JOURr0   r   r   r   LISTE_HEURE
LISTE_NOTEextendr2   r   
ForeignKeyPROTECTrR   rg   	DateField
date_enregrA   r   todayrB   BooleanFieldrG   PositiveSmallIntegerFieldr   r?   rs   rf   rC   	TextFieldr@   r9   r   r   r   r   r   r   r   r      s       yQQQRRJgguu[QZ[e?f?fgggK:&Jcc%%))EE"II..///f	FN4PPPGf	FNCCCG!!666Jf	}v~dijjjG!!1EdjYYYJ##>>>I+6+JqIIID+6+JrJJJDFg4&.IIIEVx&.AAAF,F,[LLLE"&"d@YaemqrrrKkmmGN N Nv v v v vr   r   )NNr   r   F) 	django.dbr   r   r   r   r   r   django.utilsr	   django.db.modelsr
   r   r   r   r   autrer   rA   r   rs   r   rg   r   ecolle.settingsr   r   r   r*   Managerr9   Modelr   r   r   r   <module>r      sx   ( ( ( ( ( ( ( ( 4 4 4 4 4 4 4 4 4 4 4 4 ! ! ! ! ! ! 9 9 9 9 9 9 9 9 9 9 9 9 9 9                         > > > > > > > > > >t t t t8|P |P |P |P |P&. |P |P |P|v v v v v6< v v v v vr   