o
    DjL                     @   s   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d ZG dd dejZG d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                 C   sB   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)arg r   ./home/reyt/e-colle-new/accueil/models/colle.pygroup_concat   s   


r   c                   @   s>   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdS )ColleManagerFc              	   C   s  t jj|j|jfd}|rd}t }|||j|j|jg t|}	W d    n1 s.w   Y  d	t
dt
d}
t }||
|j|j|j|j|jg t|}W d    n1 s`w   Y  tt|D ]}td|| d  d || d< qkg }| }tt|	D ]}||d |  |d |= q|	||fS tjj|d	}tjj|d	}	|s|j|j|jfd
}|	j|j|jfd
jtddjdd}	|	dddd}	|djtddddd}d	t
dt
d|rdnd	tdd|rdndtdd|rdnd}t =}|||rg n|j|jg|j|j|jg  t|}tt|D ]}td|| d  d || d< q0W d    n	1 sOw   Y  g }|	 }t| D ]}||d |  |d |= q`||	||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executer,   r   r   r   rangelenevalcountappendr	   annotater   order_byvaluesr
   )selfr$   seminsemaxmodif	transposesemainesrequete1r4   creneauxrequete2groupesigroupescolleslongueurjoursrequete	precollescollesr   r   r   classe2colloscope   s^   


 
"
( .
.$zColleManager.classe2colloscopec                    sP  t  tdd }tj j}dtdtdtdt	dd}d	t	dd
}t
 }|||||j|f t|}W d    n1 sFw   Y  t
 }|||jf t|}W d    n1 sfw   Y  g }	|D ]  d dkr d r|	d d   d   qo|	 d  qo d rԈ d |krԈ d  d kp d  d k|	d fddtjjtt d dddddddD  qo|	d fd dtjjtt d ddd!d"d#d$D  qo|D ] |	d d   d   qd%d t||	D }
d&d |D }t|
| d'd( 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.idr/   r0   a=  SELECT COUNT(n.note) nbnotes, pl.id id_planche, cl.nom nom_classe, {} jour, s.numero, pl.heure heure, pl.salle salle, m.id matiere_id, m.nom nom_matiere, m.couleur couleur, m.temps, u.first_name prenom_eleve, u.last_name nom_eleve, pl.commentaire titre                   FROM accueil_planche pl                   INNER JOIN accueil_matiere m                   ON pl.matiere_id = m.id                   INNER JOIN accueil_semaine s                   ON pl.semaine_id=s.id                   INNER JOIN accueil_colleur c                   ON pl.colleur_id = c.id                   LEFT OUTER JOIN accueil_eleve e                   ON pl.eleve_id = e.id                   LEFT OUTER JOIN accueil_user u                   ON u.eleve_id = e.id                   LEFT OUTER JOIN accueil_classe cl                   ON e.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 AND pl.heure=n.heure AND pl.semaine_id = n.semaine_id AND pl.jour = n.jour                    WHERE pl.eleve_id IS NOT NULL AND c.id=%s                   GROUP BY pl.id, cl.nom, pl.jour, s.numero, s.lundi, pl.heure, pl.salle, m.id, m.nom, m.couleur, m.temps, u.first_name, u.last_name, pl.commentaire                   ORDER BY s.lundi,pl.jour,pl.heurepl.jour
id_groupes0	nom_eleve{} {}prenom_eleve
nom_classe	semestresnumero
matiere_id
option1_id
option2_idz; c                    s   g | ]N}r|d   d ks2s d dks2 d dkr$|d  d ks2 d dkr|d  d krd |d du r<d	n|d  |d du rId	n|d  qS )
   r\   lvr   r         rW   Nr   r   uppertitle.0xr&   isoptionr   r   
<listcomp>   s    X:z'ColleManager.agenda.<locals>.<listcomp>,)pk__ingroupe2eleve__user__last_namegroupe2eleve__user__first_namegroupe2eleve__lv1groupe2eleve__lv2groupe2eleve__optionc                    s   g | ]B} d  dks& d  dkr|d  d ks& d  dkr|d  d krd |d du r0dn|d  |d du r=dn|d  qS )	r`   r   r   ra   r\   rb   rW   Nr   rc   rf   )r&   r   r   rk      s    D:groupeeleve__user__last_namegroupeeleve__user__first_namegroupeeleve__lv1groupeeleve__lv2c              	   S   s   g | ]o\}}i d |d  d|d d|d d|d d|d d|d d|d d|d d|d d	|d
 du r=dnd |d
  |d  d|d d|d d|d d|d d|d d|d d|ddiqS )nbnotes
nom_grouperY   r)   r[   r*   r+   nom_matierecouleureleverX   NrW   rV   titrefichiergroupedetailtemps	id_colles
is_plancheFr   re   rd   )rg   r&   r{   r   r   r   rk      s*    \,
c                 S   sp   g | ]4}|d  |d |d |d |d |d |d |d d |d	  |d
  |d |d |d ddqS )rw   rY   r)   r[   r*   r+   ry   rz   rW   rX   rV   r|   r   
id_plancheT)rw   rY   r)   r[   r*   r+   ry   rz   r{   r|   r   r   r   r   )rg   r&   r   r   r   rk      s
    0.
c                 S      | d | d | d fS Nr[   r)   r*   r   rh   r   r   r   <lambda>       z%ColleManager.agenda.<locals>.<lambda>key)r   todayr   r   r1   
get_config	semestre2r   r   r
   r   r4   r5   r,   r   r:   rd   re   joinr   r2   mapintsplitvalues_listzipsorted)r>   colleur
semaineminr   rL   rF   r4   rN   colles2elevesliste1liste2r   ri   r   agenda   sF   



$ JF$zColleManager.agendac                 C   sN  |j jrBtj j}dtdd}t	 "}|
||||j j|jt tdd f t|}W d    |S 1 s;w   Y  |S dtdd}t	 }|
||j j|jt tdd f t|}W d    n1 spw   Y  dtdd}t	 }|
||jf t|}W d    n1 sw   Y  t|| d	d
 d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.heurer/   r0   rP   rQ   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.heurea  SELECT s.lundi lundi, s.numero, {} jour, pl.heure heure, pl.salle salle, m.nom nom_matiere, m.couleur couleur, u.first_name prenom, u.last_name nom, pl.commentaire titre                        FROM accueil_planche pl                       INNER JOIN accueil_matiere m                       ON pl.matiere_id = m.id                       INNER JOIN accueil_semaine s                       ON pl.semaine_id=s.id                       INNER JOIN accueil_colleur c                       ON pl.colleur_id=c.id                       INNER JOIN accueil_user u                       ON u.colleur_id=c.id                       WHERE pl.eleve_id=%s                       ORDER BY s.lundi,pl.jour,pl.heurerS   c                 S   r   r   r   r   r   r   r   r      r   z*ColleManager.agendaEleve.<locals>.<lambda>r   r$   rZ   r   r1   r   r   r   r
   r   r4   r5   r,   r   r   r   r   r   r>   r{   r   rL   r4   rN   rF   r   r   r   r   agendaEleve   s6   
*


&


zColleManager.agendaElevec                 C   s^  |j jr@tj j}dtdd}t	 !}|
||||j j|jt tdd f t|}W d    n1 s:w   Y  n3dtdd}t	 }|
||j j|jt tdd f t|}W d    n1 snw   Y  dtdd}t	 }|
||jf t|}W d    n1 sw   Y  td	d
 |D dd
 |D  d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.heurer/   r0   rP   rQ   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.heurea  SELECT s.numero, {} jour, pl.heure heure, pl.salle salle, m.nom nom_matiere, m.couleur couleur, u.first_name prenom, u.last_name nom, pl.commentaire commentaire                       FROM accueil_planche pl                       INNER JOIN accueil_matiere m                       ON pl.matiere_id = m.id                       INNER JOIN accueil_semaine s                       ON pl.semaine_id=s.id                       INNER JOIN accueil_colleur c                       ON pl.colleur_id=c.id                       INNER JOIN accueil_user u                       ON u.colleur_id=c.id                       WHERE pl.eleve_id=%s                       ORDER BY s.lundi,pl.jour,pl.heurerS   c                 S   sz   g | ]9}t t|d  tt|d d jtjd |d |d |d |d |d 	 d	 |d
 
  |d ddqS )r)   r*   <   tzinfor+   r[   ry   rz   prenom nomid_programmer   r   roomweeksubjectcolorr   programcommentairer   r   combiner   divmodreplacer   utc	timestampre   rd   rg   r   r   r   r   rk   m  s    .
z/ColleManager.agendaEleveApp.<locals>.<listcomp>c                 S   sz   g | ]9}t t|d  tt|d d jtjd |d |d |d |d |d 	 d	 |d
 
  d|d dqS )r)   r*   r   r   r+   r[   ry   rz   r   r   r   Nr   r   r   r   r   r   r   rk   u  s    .
c                 S   s   | d S )Nr   r   r   r   r   r   r   }  s    z-ColleManager.agendaEleveApp.<locals>.<lambda>r   r   r   r   r   r   agendaEleveApp"  sB   
*

&


zColleManager.agendaEleveAppc                 C      t t|d}|jr5tj j}d}t }|	||||f t
|}W d    |S 1 s.w   Y  |S d}t }|	||f t
|}W d    |S 1 sRw   Y  |S )Nr,   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   rZ   r   r1   r   r   r   r4   r5   r   r>   	id_classer$   r   rL   r4   incompatr   r   r   compatEleve  s&   





zColleManager.compatElevec                 C   r   )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   r   r   r   compatColleur  s&   





zColleManager.compatColleurN)FF)	__name__
__module____qualname__rO   r   r   r   r   r   r   r   r   r   r      s    
dRP]7r   c                   @   s   e Zd 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ddZ	ejdejddZ
ejd	ejddZejd
ejd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   r1   r   r   r   r   r     s    
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   r   <module>   s        Z