
    X@	gq                         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
 ddlmZmZmZ ddl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 Z G d dej                  Z G d dej                  ZdS )    )models
connection)get_object_or_404   )Classe)Groupe)Semaine)Creneaudate_plus_jourdictfetchall)Config)Count)date	timedeltadatetimetimetimezone)BDDc                     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'utiliser une fonction d'agrégation qui concatène des chaînes
postgresqlpostgresql_psycopg2z`STRING_AGG(DISTINCT CAST(COALESCE({0:},0) AS TEXT), ',' ORDER BY CAST(COALESCE({0:},0) AS TEXT))mysqlz'GROUP_CONCAT(DISTINCT COALESCE({0:},0))sqlite3z4GROUP_CONCAT(DISTINCT CAST (COALESCE({},0) AS TEXT)) )r   format)args    $/opt/e-colle/accueil/models/colle.pygroup_concatr      sp     lc%:::qxxy|}}}	8??DDD				ELLSQQQr    c                   4    e Zd Zd	dZd Zd Zd Zd Zd ZdS )
ColleManagerFc           
      
	   t           j                            |j        |j        f          }|rd}t	          j                    5 }|                    ||j        |j        |j        g           t          |          }	d d d            n# 1 swxY w Y   d	                    t          d          t          d                    }
t	          j                    5 }|                    |
|j        |j        |j        |j        |j        g           t          |          }d d d            n# 1 swxY w Y   t          t          |                    D ],}t          d||         d         z   dz             ||         d<   -g }|                                }t          t          |	                    D ]$}|                    |d |                    |d |= %|	||fS t           j                            |	          }t           j                            |	          }	|sy|                    |j        |j        f
          }|	                    |j        |j        f
                              t%          d                                        d          }	|	                    dddd          }	|                    d                              t%          dd                                        d          }d	                    t          d          t          d          |rdn"d	                    t+          dd                    |rdndt+          dd          |rdnd          }t	          j                    5 }|                    ||rg n|j        |j        g|j        |j        |j        gz              t          |          }t          t          |                    D ],}t          d||         d         z   dz             ||         d<   -	 d d d            n# 1 swxY w Y   g }|	                                }t          |                                          D ]$}|                    |d |                    |d |= %||	||fS )N)lundi__rangea  SELECT DISTINCT m.nom matiere_nom, m.lv, m.couleur, u.first_name prenom, u.last_name nom, cr.jour jds, cr.heure, cr.salle, cr.id            FROM accueil_creneau cr             INNER JOIN accueil_colle col            ON col.creneau_id = cr.id            INNER JOIN accueil_colleur co            ON col.colleur_id = co.id            INNER JOIN accueil_user u            ON u.colleur_id = co.id            INNER JOIN accueil_semaine s            ON col.semaine_id = s.id            INNER JOIN accueil_matiere m            ON col.matiere_id = m.id            WHERE cr.classe_id = %s AND s.lundi BETWEEN %s AND %s            ORDER BY cr.jour, cr.heure, cr.salle, cr.id, m.nomac  SELECT DISTINCT {} groupe, {} id_groupe, COUNT(col.id) nbcolles, colcr.id_colleur, colcr.jour, colcr.heure, colcr.salle, colcr.id_creneau, colcr.nom nom_matiere, colcr.id_matiere, s.numero, u.last_name nom, u.first_name prenom, e.id id_eleve, colcr.temps            FROM accueil_semaine s            CROSS JOIN             (SELECT DISTINCT co.id id_colleur, cr.id id_creneau, cr.jour jour, cr.heure heure, cr.salle salle, m.nom, m.temps, m.id id_matiere FROM accueil_creneau cr             INNER JOIN accueil_colle col            ON col.creneau_id = cr.id            INNER JOIN accueil_matiere m            ON col.matiere_id = m.id            INNER JOIN accueil_colleur co            ON col.colleur_id = co.id            INNER JOIN accueil_semaine s            ON col.semaine_id = s.id            WHERE cr.classe_id = %s AND s.lundi BETWEEN %s AND %s            ORDER BY jour, heure, salle, id_creneau) colcr            LEFT OUTER JOIN accueil_colle col            ON col.creneau_id = colcr.id_creneau AND col.semaine_id = s.id AND col.colleur_id = colcr.id_colleur            LEFT OUTER JOIN accueil_groupe g            ON col.groupe_id = g.id            LEFT OUTER JOIN accueil_eleve e            ON e.id=col.eleve_id            LEFT OUTER JOIN accueil_user u            ON u.eleve_id = e.id            WHERE s.lundi BETWEEN %s AND %s            GROUP BY colcr.id_colleur, colcr.jour, colcr.heure, colcr.salle, colcr.id_creneau, nom_matiere, colcr.id_matiere, s.numero, u.last_name,  u.first_name, id_eleve, colcr.temps            ORDER BY colcr.jour, colcr.heure, colcr.salle, colcr.id_creneau, colcr.nom, colcr.id_colleur, s.numerog.nomg.id(	id_groupez,))classe)colle__semaine__lundi__rangecolle)nbr   )nb__gtjourheuresallepkidT)distincta)  SELECT {} groupe, {} id_groupe, cr.id id_cr, COUNT(c2.id) nbcolles, c2.colleur_id id_colleur, jf.nom ferie, m.id id_matiere, m.nom nom_matiere, m.couleur couleur, m.temps temps, cr.jour jour, cr.heure heure, cr.salle salle, s.lundi lundi, e.id id_eleve, u2.first_name prenom_eleve,u2.last_name nom_eleve {}                             FROM accueil_creneau cr                             CROSS JOIN accueil_semaine s                            {}                            LEFT OUTER JOIN accueil_colle c2                             ON (c2.creneau_id=cr.id AND c2.semaine_id=s.id)                             LEFT OUTER JOIN accueil_user u                             ON u.colleur_id=c2.colleur_id                             LEFT OUTER JOIN accueil_matiere m                             ON c2.matiere_id=m.id                             LEFT OUTER JOIN accueil_groupe g                             ON g.id=c2.groupe_id                             LEFT OUTER JOIN accueil_eleve e                            ON e.id=c2.eleve_id                            LEFT OUTER JOIN accueil_user u2                            ON u2.eleve_id = e.id                            LEFT OUTER JOIN accueil_jourferie jf                             ON jf.date = {}                            WHERE cr.classe_id=%s AND s.lundi BETWEEN %s AND %s                             GROUP BY cr.id, c2.colleur_id, jf.nom, m.id, m.nom, m.couleur, m.temps, cr.jour, cr.heure, cr.salle, s.lundi, e.id, u2.first_name,u2.last_name {}                             ORDER BY s.lundi, cr.jour, cr.heure, cr.salle, cr.idr   z2, u.last_name nom, u.first_name prenom, {} jourbiss.lundicr.jourzINNER JOIN accueil_colle c                             ON c.creneau_id=cr.id INNER JOIN accueil_semaine s2 ON (c.semaine_id=s2.id AND s2.lundi BETWEEN %s AND %s)z,u.last_name, u.first_name)r	   objectsfilterlundir   cursorexecuter0   r   r   r   rangelenevalcountappendr
   annotater   order_byvaluesr   )selfr(   seminsemaxmodif	transposesemainesrequete1r8   creneauxrequete2groupesigroupescolleslongueurjoursrequete	precollescolless                      r   classe2colloscopezColleManager.classe2colloscope   s   ''ek%+5N'OO `	2@H "$$ 0x69U[*MOOO'//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0t0 u{tz  |H  IP  |Q  |Q  S_  `f  Sg  Sg  uh  uh1 2 "$$ /x69U[U[Y^Yd*eggg&v../ / / / / / / / / / / / / / / 3w<<(( U U*.sWQZ5L/Lt/S*T*T
;''M~~''H3x==)) ' '$$WYhY%7888IXI&&]H44O**&*99E--V-<<H P5;u{B[\\#??UZU`Ha?bbkkotu|o}o}k~~  F  F  NO  F  P  P((EEHLL((11U45N5N5N1OOXXY_``ER( SYRXYefmYnYnp|  ~D  qE  qE  MR  Gx  GI  GI  XL  XS  XS  Tb  cl  mv  Tw  Tw  Xx  Xx  D yH  y{  y{ JH IW  Xa  bk  Il  Il  ty  n[  np  np  [S\ S\) , "$$ ]wu)S5;u{:SV\V_`e`klqlwUx(xyyy(00	s9~~.. ] ]A04S9Q<;T5TW[5[0\0\IaL--]] ] ] ] ] ] ] ] ] ] ] ] ] ] ]
 F~~''H8>>++,, ) )i		2333ixi((&11s8   8B		BBAD''D+.D+7BPPPc                   	 t          j                    t          d          z   }t          j                                        j        }d                    t          d          t          d          t          d          t          dd                    }t          j                    5 }|                    ||||j        |f           t          |          }d d d            n# 1 swxY w Y   g }|D ]d	         d
k    r~d         rZ|                    d                    d                                         d                                                              q|                    d                    d         rȉd         |k    rd         d         k    pd         d         k    	|                    d                    	fdt&          j                            t+          t,          d	                             d                                                  ddddd          D                                  ]|                    d                    fdt&          j                            t+          t,          d	                             d                                                  ddd d!          D                                  d" t3          ||          D             S )#Ndaysa  SELECT COUNT(n.id) nbnotes, {} nom_groupe, {} id_groupes, {} id_colles, cr.id, cl.nom nom_classe, cl.semestres, {} jour, s.numero, cr.heure heure, cr.salle salle, m.id matiere_id, m.nom nom_matiere, m.lv, cl.option1_id, cl.option2_id, m.couleur couleur, m.lv lv, m.temps, u2.first_name prenom_eleve, u2.last_name nom_eleve, p.titre titre, p.detail detail, p.fichier fichier                   FROM accueil_colle co                   INNER JOIN accueil_creneau cr                   ON co.creneau_id = cr.id                   INNER JOIN accueil_matiere m                   ON co.matiere_id = m.id                   INNER JOIN accueil_semaine s                   ON co.semaine_id=s.id                   INNER JOIN accueil_colleur c                   ON co.colleur_id = c.id                   LEFT OUTER JOIN accueil_classe cl                   ON cr.classe_id = cl.id                   LEFT OUTER JOIN accueil_groupe g                   ON co.groupe_id = g.id                   LEFT OUTER JOIN accueil_eleve e                   ON co.eleve_id = e.id                   LEFT OUTER JOIN accueil_eleve e2                   ON (((cl.semestres IS FALSE OR s.numero < %s) AND e2.groupe_id = g.id)                   OR (cl.semestres IS TRUE AND s.numero >= %s AND e2.groupe2_id = g.id))                   LEFT OUTER JOIN accueil_user u2                   ON u2.eleve_id = e.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 = cl.id                   LEFT OUTER JOIN accueil_note n                   ON n.matiere_id = m.id AND n.colleur_id = c.id AND n.semaine_id=s.id AND (n.eleve_id = e.id OR n.eleve_id = e2.id)                   WHERE c.id=%s AND s.lundi >= %s                   GROUP BY cl.nom, cl.semestres, cl.option1_id, cl.option2_id,s.id, cr.id, cr.jour, cr.heure, cr.salle, m.id, m.nom, m.couleur, m.lv, m.temps, u2.first_name, u2.last_name, p.titre, p.detail, p.fichier                   ORDER BY s.lundi,cr.jour,cr.heurer$   r%   zco.idr3   r4   
id_groupes0	nom_eleve{} {}prenom_eleve
nom_classe	semestresnumero
matiere_id
option1_id
option2_idz; c                    g | ]}r|d          d         k    sJsd         dk    s<d         dk    r|d         d         k    sd         dk    N|d         d         k    `d                     |d         d	n|d                                         |d         d	n|d                                                   S )
   r`   lvr   r         r[   Nr   r   uppertitle).0xr*   isoptions     r   
<listcomp>z'ColleManager.agenda.<locals>.<listcomp>   s~    -R -R -R  LM#-R()!l0C(C(C8(CX]^bXcghXhXhlqrvlw{|l|l|  BC  DE  BF  JO  P\  J]  B]  B]  af  gk  al  pq  aq  aq  vw  xy  vz  ~C  DP  ~Q  vQ  vQ .5^^!A$,BBTUVWTXT^T^T`T`ghijgkgsacacyz{|y}  zD  zD  zF  zF  .G  .G vQ  vQ  vQr   ,)pk__ingroupe2eleve__user__last_namegroupe2eleve__user__first_namegroupe2eleve__lv1groupe2eleve__lv2groupe2eleve__optionc                 T   g | ]}d          dk    s<d          dk    r|d         d         k    sd          dk    8|d         d         k    Jd                     |d         dn|d                                         |d         dn|d                                                   S )	re   r   r   rf   r`   rg   r[   Nr   rh   )rk   rl   r*   s     r   rn   z'ColleManager.agenda.<locals>.<listcomp>   s    -U -U -U  LM ;!++uT{a/?/?AaDER^L_D_D_chimcnrscscsxyz{x|  AF  GS  AT  yT  yT .5^^!A$,BBTUVWTXT^T^T`T`ghijgkgsacacyz{|y}  zD  zD  zF  zF  .G  .G yT  yT  yTr   groupeeleve__user__last_namegroupeeleve__user__first_namegroupeeleve__lv1groupeeleve__lv2c           	         g | ]\  }}i d |d          d|d         d|d         d|d         d|d         d|d         d|d         d|d         d|d         d	|d
         dnEd                     |d
                                         |d                                                   d|d         d|d         d|d         d|d         d|d         d|d         d|S )nbnotes
nom_grouper]   r-   r_   r.   r/   nom_matierecouleurelever\   Nr[   rZ   titrefichiergroupedetailtemps	id_colles)r   rj   ri   )rk   r*   r   s      r   rn   z'ColleManager.agenda.<locals>.<listcomp>   s*    T T Tp|puw|l5+ l\%:M l|\abn\o lqwx}  E  yF l  HP  RW  X`  Ra l  cj  kp  qx  ky l  {B  CH  IP  CQ l  S`  af  gt  au l  w@  AF  GP  AQ l~.6GNN5Q_K`KfKfKhKhinozi{  jB  jB  jD  jD  =E  =El GN  OT  U\  O]l _h  in  ox  iyl {C  EJ  KW  EXlxl")5>l;FkHZl[cejl T T Tr   )r   todayr   r   r5   
get_config	semestre2r   r   r   r   r8   r9   r0   r   r>   ri   rj   joinr   r6   mapintsplitvalues_listzip)
rB   colleur
semaineminr   rP   r8   rR   elevesr*   rm   s
           @@r   agendazColleManager.agenda   s   Z\\)"5"5"55
N--//9	6: 7=f\'=R=RT`agThThjvw~jj  BP  QZ  [d  Be  Be  7f  7f; 	<    	*FNN7Iy'*Z#PQQQ!&))F	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*  	W 	WE\"c))% 7MM'..{1C1I1I1K1KER`LaLgLgLiLi"j"jkkkkMM%"56666% W%/Y*F*F$\2eL6IIwUS_M`dijvdwMwHMM$)) -R -R -R -R -R  QW  Q_  Qf  Qf  nq  ru  v{  |H  vI  vO  vO  PS  vT  vT  nU  nU  Qf  QV  QV  Qb  Qb  cB  Cc  dw  xK  Lb  Qc  Qc -R -R -R #S #S T T T T MM$)) -U -U -U -U  QW  Q_  Qf  Qf  nq  ru  v{  |H  vI  vO  vO  PS  vT  vT  nU  nU  Qf  QV  QV  Qb  Qb  cA  Ba  bt  uG  QH  QH -U -U -U #V #V W W W WT T AD  EK  LR  AS  AST T T 	Ts   */C%%C),C)c                    |j         j        rt          j                                        j        }d                    t          dd                    }t          j	                    5 }|
                    ||||j         j        |j        t          j                    t          d          z   f           t          |          }d d d            n# 1 swxY w Y   nd                    t          dd                    }t          j	                    5 }|
                    ||j         j        |j        t          j                    t          d          z   f           t          |          }d d d            n# 1 swxY w Y   |S )Na  SELECT s.lundi lundi, s.numero, {} jour, cr.heure heure, cr.salle salle, m.nom nom_matiere, m.couleur couleur, u.first_name prenom, u.last_name nom, p.titre titre, p.detail detail, p.fichier fichier                       FROM accueil_colle co                       INNER JOIN accueil_creneau cr                       ON co.creneau_id = cr.id                       INNER JOIN accueil_classe cl                       ON cr.classe_id = cl.id                       INNER JOIN accueil_matiere m                       ON co.matiere_id = m.id                       INNER JOIN accueil_semaine s                       ON co.semaine_id=s.id                       INNER JOIN accueil_colleur c                       ON co.colleur_id=c.id                       INNER JOIN accueil_user u                       ON u.colleur_id=c.id                       LEFT OUTER JOIN accueil_groupe g                       ON co.groupe_id = g.id                       INNER JOIN accueil_eleve e                       ON (s.numero < %s AND e.groupe_id = g.id AND (m.lv=0 OR m.lv=1 AND e.lv1_id=m.id OR m.lv=2 AND e.lv2_id=m.id))                       OR (s.numero >= %s AND e.groupe2_id = g.id AND ((cl.option1_id IS NULL OR m.id != cl.option1_id) AND (cl.option2_id IS NULL OR m.id != cl.option2_id) OR e.option_id = m.id) AND (m.lv=0 OR m.lv=1 AND e.lv1_id=m.id OR m.lv=2 AND e.lv2_id=m.id))                       OR e.id=co.eleve_id                       OR co.eleve_id IS NULL AND co.groupe_id IS NULL AND co.classe_id = e.classe_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 = %s                       WHERE e.id=%s AND s.lundi >= %s                       ORDER BY s.lundi,cr.jour,cr.heurer3   r4   rU   rV   a  SELECT s.lundi lundi, s.numero, {} jour, cr.heure heure, cr.salle salle, m.nom nom_matiere, m.couleur couleur, u.first_name prenom, u.last_name nom, p.titre titre, p.detail detail, p.fichier fichier                       FROM accueil_colle co                       INNER JOIN accueil_creneau cr                       ON co.creneau_id = cr.id                       INNER JOIN accueil_classe cl                       ON cr.classe_id = cl.id                       INNER JOIN accueil_matiere m                       ON co.matiere_id = m.id                       INNER JOIN accueil_semaine s                       ON co.semaine_id=s.id                       INNER JOIN accueil_colleur c                       ON co.colleur_id=c.id                       INNER JOIN accueil_user u                       ON u.colleur_id=c.id                       LEFT OUTER JOIN accueil_groupe g                       ON co.groupe_id = g.id                       INNER JOIN accueil_eleve e                       ON e.groupe_id = g.id AND (m.lv=0 OR m.lv=1 AND e.lv1_id=m.id OR m.lv=2 AND e.lv2_id=m.id) OR e.id=co.eleve_id                       OR co.eleve_id IS NULL AND co.groupe_id IS NULL AND co.classe_id = e.classe_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 = %s                       WHERE e.id=%s AND s.lundi >= %s                       ORDER BY s.lundi,cr.jour,cr.heurer(   r^   r   r5   r   r   r   r   r   r8   r9   r0   r   r   r   r   rB   r   r   rP   r8   rR   s         r   agendaElevezColleManager.agendaEleve   s   <! <	.1133=I:4 ;A&PYZcAdAd:e:e5 6 "$$ .w	)ELOEHUYU_UaUabkqtbububuUu'vwww%f--. . . . . . . . . . . . . . .:0 ;A&PYZcAdAd:e:e1 2 "$$ .wi]`NaNaNaAa'bccc%f--. . . . . . . . . . . . . . . &   &ACCCAE66E:=E:c                    |j         j        rt          j                                        j        }d                    t          dd                    }t          j	                    5 }|
                    ||||j         j        |j        t          j                    t          d          z   f           t          |          }d d d            n# 1 swxY w Y   nd                    t          dd                    }t          j	                    5 }|
                    ||j         j        |j        t          j                    t          d          z   f           t          |          }d d d            n# 1 swxY w Y   d |D             S )Na  SELECT s.numero, {} jour, cr.heure heure, cr.salle salle, m.nom nom_matiere, m.couleur couleur, u.first_name prenom, u.last_name nom, p.id id_programme                       FROM accueil_colle co                       INNER JOIN accueil_creneau cr                       ON co.creneau_id = cr.id                       INNER JOIN accueil_classe cl                       ON cr.classe_id = cl.id                       INNER JOIN accueil_matiere m                       ON co.matiere_id = m.id                       INNER JOIN accueil_semaine s                       ON co.semaine_id=s.id                       INNER JOIN accueil_colleur c                       ON co.colleur_id=c.id                       INNER JOIN accueil_user u                       ON u.colleur_id=c.id                       LEFT OUTER JOIN accueil_groupe g                       ON co.groupe_id = g.id                       INNER JOIN accueil_eleve e                       ON (s.numero < %s AND e.groupe_id = g.id AND (m.lv=0 OR m.lv=1 AND e.lv1_id=m.id OR m.lv=2 AND e.lv2_id=m.id))                       OR (s.numero >= %s AND e.groupe2_id = g.id AND ((cl.option1_id IS NULL OR m.id != cl.option1_id) AND (cl.option2_id IS NULL OR m.id != cl.option2_id) OR e.option_id = m.id) AND (m.lv=0 OR m.lv=1 AND e.lv1_id=m.id OR m.lv=2 AND e.lv2_id=m.id))                       OR e.id=co.eleve_id                       OR co.eleve_id IS NULL AND co.groupe_id IS NULL AND co.classe_id = e.classe_id                       LEFT OUTER JOIN (SELECT ps.semaine_id, sub.matiere_id, sub.classe_id, sub.titre, sub.detail, sub.fichier, sub.id 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 = %s                       WHERE e.id=%s AND s.lundi >= %s                       ORDER BY s.lundi,cr.jour,cr.heurer3   r4   rU   rV   a  SELECT s.numero, {} jour, cr.heure heure, cr.salle salle, m.nom nom_matiere, m.couleur couleur, u.first_name prenom, u.last_name nom, p.id id_programme                       FROM accueil_colle co                       INNER JOIN accueil_creneau cr                       ON co.creneau_id = cr.id                       INNER JOIN accueil_matiere m                       ON co.matiere_id = m.id                       INNER JOIN accueil_semaine s                       ON co.semaine_id=s.id                       INNER JOIN accueil_colleur c                       ON co.colleur_id=c.id                       INNER JOIN accueil_user u                       ON u.colleur_id=c.id                       LEFT OUTER JOIN accueil_groupe g                       ON co.groupe_id = g.id                       INNER JOIN accueil_eleve e                       ON e.groupe_id = g.id AND (m.lv=0 OR m.lv=1 AND e.lv1_id=m.id OR m.lv=2 AND e.lv2_id=m.id) OR e.id=co.eleve_id                       OR co.eleve_id IS NULL AND co.groupe_id IS NULL AND co.classe_id = e.classe_id                       LEFT OUTER JOIN (SELECT ps.semaine_id, sub.matiere_id, sub.classe_id, sub.titre, sub.detail, sub.fichier, sub.id 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 = %s                       WHERE e.id=%s AND s.lundi >= %s                       ORDER BY s.lundi,cr.jour,cr.heurec                    g | ]}t          t          j        |d          t          t	          |d         d                                         t          j                                                            |d         |d         |d         |d         |d         	                                d	z   |d
         
                                z   |d         dS )r-   r.   <   )tzinfor/   r_   r~   r   prenom nomid_programme)r   roomweeksubjectcolorr   program)r   r   combiner   divmodreplacer   utc	timestamprj   ri   )rk   r   s     r   rn   z/ColleManager.agendaEleveApp.<locals>.<listcomp>3  s     = = = ,2 X-fVndF6RY?[]D^D^>_``hhpxp|h}}  H  H  J  J  K  K,27O,28,</5m/D-3I->/5h/?/E/E/G/G#/MPVW\P]PcPcPePe/e/5n/E' ' = = =r   r   r   s         r   agendaEleveAppzColleManager.agendaEleveApp   s   <! :	.1133=I:4 ;A&PYZcAdAd:e:e5 6 "$$ .w	9eloehW[WaWcWcdmsvdwdwdwWw'xyyy%f--. . . . . . . . . . . . . . .:, ;A&PYZcAdAd:e:e- . "$$ .wi]`NaNaNaAa'bccc%f--. . . . . . . . . . . . . . .= = 6<= = = 	=r   c                    t          t          |          }|j        ryt          j                                        j        }d}t          j                    5 }|	                    ||||f           t          |          }d d d            n# 1 swxY w Y   nSd}t          j                    5 }|	                    ||f           t          |          }d d d            n# 1 swxY w Y   |S )Nr0   a  SELECT COUNT(DISTINCT co.id) nbColles, COUNT(g.id), s.numero numero, cr.jour jour, cr.heure heure, u.first_name prenom, u.last_name nom            FROM accueil_colle co            INNER JOIN accueil_semaine s            ON co.semaine_id = s.id            LEFT OUTER JOIN accueil_groupe g            ON co.groupe_id = g.id            LEFT OUTER JOIN accueil_matiere m            ON co.matiere_id = m.id            INNER JOIN accueil_creneau cr            ON co.creneau_id = cr.id            LEFT OUTER JOIN accueil_classe cl            ON cr.classe_id = cl.id            INNER JOIN accueil_eleve e            ON (s.numero < %s AND e.groupe_id = g.id AND (m.lv=0 OR m.lv=1 AND e.lv1_id=m.id OR m.lv=2 AND e.lv2_id=m.id))            OR (s.numero >= %s AND e.groupe2_id = g.id AND ((cl.option1_id IS NULL OR m.id != cl.option1_id) AND (cl.option2_id IS NULL OR m.id != cl.option2_id) OR e.option_id = m.id) AND (m.lv=0 OR m.lv=1 AND e.lv1_id=m.id OR m.lv=2 AND e.lv2_id=m.id))            OR e.id=co.eleve_id            INNER JOIN accueil_user u            ON u.eleve_id = e.id            WHERE cr.classe_id=%s            GROUP BY s.numero, cr.jour, cr.heure, u.first_name, u.last_name            HAVING COUNT(DISTINCT co.id) > 1            ORDER BY s.numero, cr.jour, cr.heure, u.first_name, u.last_namea  SELECT COUNT(DISTINCT co.id) nbColles, COUNT(g.id), s.numero numero, cr.jour jour, cr.heure heure, u.first_name prenom, u.last_name nom            FROM accueil_colle co            LEFT OUTER JOIN accueil_groupe g            ON co.groupe_id = g.id            LEFT OUTER JOIN accueil_matiere m            ON co.matiere_id = m.id            INNER JOIN accueil_creneau cr            ON co.creneau_id = cr.id            LEFT OUTER JOIN accueil_classe cl            ON cr.classe_id = cl.id            INNER JOIN accueil_eleve e            ON e.groupe_id = g.id AND (m.lv=0 OR m.lv=1 AND e.lv1_id=m.id OR m.lv=2 AND e.lv2_id=m.id) OR e.id=co.eleve_id            INNER JOIN accueil_semaine s            ON co.semaine_id = s.id            INNER JOIN accueil_user u            ON u.eleve_id = e.id            WHERE cr.classe_id=%s            GROUP BY s.numero, cr.jour, cr.heure, u.first_name, u.last_name            HAVING COUNT(DISTINCT co.id) > 1            ORDER BY s.numero, cr.jour, cr.heure, u.first_name, u.last_namer   r   r^   r   r5   r   r   r   r8   r9   r   rB   	id_classer(   r   rP   r8   incompats          r   compatElevezColleManager.compatEleve<  s^   "6i888 2	01133=IMG, "$$ 0w	9i'HIII'//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0MG( "$$ 0w	|444'//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 $   )BBB,'CC#&C#c                    t          t          |          }|j        ryt          j                                        j        }d}t          j                    5 }|	                    ||||f           t          |          }d d d            n# 1 swxY w Y   nSd}t          j                    5 }|	                    ||f           t          |          }d d d            n# 1 swxY w Y   |S )Nr   au  SELECT COUNT(DISTINCT e.id) nbeleves, COUNT(g.id), s.numero numero, cr.jour jour, cr.heure heure, u.first_name prenom, u.last_name nom            FROM accueil_colle co            INNER JOIN accueil_semaine s            ON co.semaine_id = s.id            LEFT OUTER JOIN accueil_groupe g            ON co.groupe_id = g.id            LEFT OUTER JOIN accueil_matiere m            ON co.matiere_id = m.id            INNER JOIN accueil_creneau cr            ON co.creneau_id = cr.id            INNER JOIN accueil_colleur col            ON co.colleur_id = col.id            LEFT OUTER JOIN accueil_classe cl            ON cr.classe_id = cl.id            INNER JOIN accueil_eleve e            ON (s.numero < %s AND e.groupe_id = g.id AND (m.lv=0 OR m.lv=1 AND e.lv1_id=m.id OR m.lv=2 AND e.lv2_id=m.id))            OR (s.numero >= %s AND e.groupe2_id = g.id AND ((cl.option1_id IS NULL OR m.id != cl.option1_id) AND (cl.option2_id IS NULL OR m.id != cl.option2_id) OR e.option_id = m.id) AND (m.lv=0 OR m.lv=1 AND e.lv1_id=m.id OR m.lv=2 AND e.lv2_id=m.id))            OR e.id=co.eleve_id            INNER JOIN accueil_user u            ON u.colleur_id = col.id            WHERE cr.classe_id=%s AND m.temps = 20            GROUP BY s.numero, cr.jour, cr.heure, u.first_name, u.last_name            HAVING COUNT(DISTINCT e.id) > 3            ORDER BY s.numero, cr.jour, cr.heure, u.first_name, u.last_nameaZ  SELECT COUNT(DISTINCT e.id) nbeleves, COUNT(g.id), s.numero numero, cr.jour jour, cr.heure heure, u.first_name prenom, u.last_name nom            FROM accueil_colle co            LEFT OUTER JOIN accueil_groupe g            ON co.groupe_id = g.id            LEFT OUTER JOIN accueil_matiere m            ON co.matiere_id = m.id            INNER JOIN accueil_creneau cr            ON co.creneau_id = cr.id            INNER JOIN accueil_colleur col            ON co.colleur_id = col.id            LEFT OUTER JOIN accueil_classe cl            ON cr.classe_id = cl.id            INNER JOIN accueil_eleve e            ON e.groupe_id = g.id AND (m.lv=0 OR m.lv=1 AND e.lv1_id=m.id OR m.lv=2 AND e.lv2_id=m.id) OR e.id=co.eleve_id            INNER JOIN accueil_semaine s            ON co.semaine_id = s.id            INNER JOIN accueil_user u            ON u.colleur_id = col.id            WHERE cr.classe_id=%s  AND m.temps = 20            GROUP BY s.numero, cr.jour, cr.heure, u.first_name, u.last_name            HAVING COUNT(DISTINCT co.id) > 1            ORDER BY s.numero, cr.jour, cr.heure, u.first_name, u.last_namer   r   s          r   compatColleurzColleManager.compatColleurs  s^   "6i888 6	01133=IMG0 "$$ 0w	9i'HIII'//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0MG, "$$ 0w	|444'//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 r   N)FF)	__name__
__module____qualname__rS   r   r   r   r   r    r   r   r!   r!      s        b2 b2 b2 b2H5T 5T 5Tn> > >@C= C= C=J5 5 5n9 9 9 9 9r   r!   c                   j   e Zd Z ej        dej                  Z ej        dej                  Z ej        dej                  Z ej        dej        d          Z	 ej        dej        d          Z
 ej        d	ej        d          Z ej        d
ej                  Z e            ZdS )Coller
   )	on_deleteColleurMatierer   T)r   nullElever   r	   N)r   r   r   r   
ForeignKeyPROTECTcreneaur   matierer   r   r(   semainer!   r5   r   r   r   r   r     s        f	FNCCCGf	FNCCCGf	FNCCCGVx&.dKKKFFgDIIIEVx&.dKKKFf	FNCCCGlnnGGGr   r   N)	django.dbr   r   django.shortcutsr   r(   r   r   r   r   r	   autrer
   r   r   configr   django.db.modelsr   r   r   r   r   r   ecolle.settingsr   r   Managerr!   Modelr   r   r   r   <module>r      s]   ( ( ( ( ( ( ( ( . . . . . .                   8 8 8 8 8 8 8 8 8 8       " " " " " " > > > > > > > > > > > > > >      
 
 
R R R R R6> R R Rh    FL     r   