o
    Dj                     @   s  d dl mZmZ d dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z! d dl"Z"d dl#m$Z$m#Z#m%Z%m&Z&m'Z' d dl(m)Z)m*Z* d d	l+m,Z,m-Z-m.Z. d
d Z/dd Z0dd Z1dd Z2e
dd Z3dd Z4dd Z5dd Z6dd Z7dd Z8e
dd Z9d d! Z:d"d# Z;d$d% Z<d&d' Z=e
d(d) Z>d*d+ Z?d,d- Z@e
d.d/ ZAe
d0d1 ZBe
d2d3 ZCe
d4d5 ZDd6d7 ZEdS )8    )HttpResponseget_object_or_404)HttpResponseForbiddenHttp404)authenticatelogin)csrf_exempt)ConfigNote	ProgrammeColleMessageDestinataireCreneauSemaineGroupeMatiereClasseEleveUserProfColleurDevoirDevoirRenduDevoirCorrigeTDCoursDocumentPlancheN)datedatetimetime	timedeltatimezone)CountQ)HEURE_DEBUT	HEURE_FIN
INTERVALLEc                 C   sf   t | trt|  S t | tr"tt| tddjtj	d S t | tr/d| j
 | j S td)uI   convertit les dates en timestamp en vue d'une mise à plat au format jsonr   tzinfo<   zType not serializable)
isinstancer    int	timestampr   combiner!   replacer#   utchourminute	TypeError)obj r6   */home/reyt/e-colle-new/app_mobile/views.pydate_serial   s   

$
r8   c                 C   s4   t j }|js
ttd|j| ddd S )uZ   renvoie la version de e-colle 
    pour indiquer à l'app mobile que le serveur fonctionnez{}::{}/N)	r	   objects
get_config
app_mobiler   r   formatnom_etablissementbuild_absolute_uri)requestconfigr6   r6   r7   check   s   
 rC   c                 C   s>   t j jst| jsdS | jsdS | jsdS | jjsdS dS )u   renvoie False si l'utilisateur n'est pas un élève connecté, avec une classe, True sinon et lève une erreur 404
    si l'app_mobile n'est pas activée dans la configurationFT)	r	   r;   r<   r=   r   is_authenticated	is_activeeleveclasseuserr6   r6   r7   
checkeleve    s   rJ   c                 C   s2   t j jst| jsdS | jsdS | jsdS dS )u   renvoie False si l'utilisateur n'est pas un colleur connecté, True sinon et lève une erreur 404
    si l'app_mobile n'est pas activée dans la configurationFT)r	   r;   r<   r=   r   rD   rE   colleurrH   r6   r6   r7   checkcolleur/   s   rL   c                 C   s  t j jst| jdkrt| jd | jd d}|dur|jdur}|jj	dur}t
| | |jj	}tt|j d |j  |jj|j|j|j|jsNdn|jj|jsVdn|jj|js^dnt j j|jjdu rkd	n|jjjd
t j jtttdS |jdur|jrt
| | |jj !d}|jj"!d}tt|j d |j  |jjd#dd |D d#dd |D d#dd |D d#dd |D d#dd |D d#dd |D d#dd |D d#dd |D t j jd
tttdS tdS t$dS )u   connecte l'élève/le colleur si les identifiants sont exacts, et renvoie le cookie de session
    ainsi que certaines données de l'utilisateurPOSTusernamepassword)rN   rO   N r   r:    z2.4)name
student_id	classe_idclasse_nameclasse_yearclasse_option1classe_option2	semestre2groupversioncomposeheure_debut	heure_fin
intervallepk__c                 S      g | ]}t |jqS r6   strr`   .0rG   r6   r6   r7   
<listcomp>^       zconnect.<locals>.<listcomp>c                 S      g | ]}|j qS r6   nomre   r6   r6   r7   rg   _       c                 S   rb   r6   )rd   anneere   r6   r6   r7   rg   `   rh   c                 S   rb   r6   )rd   	semestresre   r6   r6   r7   rg   a   rh   c                 S   s4   g | ]}d  |jsdn|jj|jsdn|jjqS )z{}-{}r   )r>   option1r`   option2re   r6   r6   r7   rg   b   s   4 c                 S   rb   r6   rc   rf   matierer6   r6   r7   rg   c   rh   c                 S      g | ]}t |qS r6   )rd   rq   r6   r6   r7   rg   d       c                 S   ri   r6   )couleurrq   r6   r6   r7   rg   e   rl   )rR   
colleur_id
classes_idclasses_nameclasses_yearclasses_semestresclasses_optionssubjects_idsubjects_namesubjects_colorrY   r[   r]   r^   r_   invalidezaccess denied)%r	   r;   r<   r=   r   methodr   rM   rF   rG   r   r   jsondumps
first_nametitle	last_nameupperr`   rk   rm   ro   rp   rn   rY   groupemessage_elevesr&   r'   r(   rK   rE   matieresorder_byclassesjoinr   )rA   rI   rG   r   r   r6   r6   r7   connect=   s^   






r   c              
   C   s   | j }t|stdS tj|j}tjj|jj	d
ddddddd	d
dd}ttj|t|d|jj	js8dntj jigdtdS )uE   renvoie l'agenda des colles de l'utilisateur connecté au format jsonnot authenticatedrG   r`   matiere__couleurmatiere__nomsemaine__numerosemaine__lundititrefichierdetail-semaine__lundisem2r:   )agendasprogramsrY   default)rI   rJ   r   r   r;   agendaEleveApprF   r   filterrG   valuesr   r   r   r   listrn   r	   r<   rY   r8   )rA   rI   r   
programmesr6   r6   r7   agendaprogramsq   s   :r   c                 C   s<   | j }t|stdS ttjdd tj|j	D t
dS )u;   renvoie les notes de l'utilisateur connecté au format jsonr   c                 S   sZ   g | ])}|d    |d |d |d   d |d   |d |d |d |d	 d
qS )nom_matiereru   
date_colleprenomrP   rk   r   	programmenotecommentaire)subjectcolorr   rK   r   programgradecommentr   r   rf   xr6   r6   r7   rg      s    

zgrades.<locals>.<listcomp>r   )rI   rJ   r   r   r   r   r
   r;   	noteEleverF   r8   )rA   rI   r6   r6   r7   grades{   s   r   c                 C   s   | j }t|stdS tj j}z1tjj|d	 }t
tttj|jddttj|jd|dttj|j|ddW S  ty]   t
tdttj|jddi Y S w )u@   renvoie les résultats de l'utilisateur connecté au format jsonr   numeroFT)globalsem1r   r   )rI   rJ   r   r	   r;   r<   rY   r   r   getr   r   r   r   r
   
bilanEleverF   	Exception)rA   rI   rY   semainer6   r6   r7   results   s   0(r   c           
   	   C   s   | j }t|stdS |jj}ttjj|d	 }tt
jj|jd	 }ttjj|jd	 }ttjj|d	 }ttjj|d	 }ttjj|d	 }ttjj|d	dddd}	ttj|	||||||gtd	S )
Nr   r   )rF   matieresclasser`   rk   ru   lvr   )rI   rJ   r   rF   rG   r   r   r;   r   r   r   r   r   r   r   r   r   r   r   r8   )
rA   rI   rG   devoirsdevoirsrendusdevoirscorrigescourstds	documentsr   r6   r6   r7   r      s     r   c                 C   s:  | j }t|stdS |jj}ttjj|dj	t
ddjddddd	d
}ttjj|d ddd}tjj|dddddddd}dd |D }ttjj|ddd}ttjj|ddddd}dd | D }dd | D }	tjj|d}
dd |
D }
ttj|||||||	|
dtd S )!Nr   r   collenbr   nb__gtr`   jourheuresalle)colle__creneau__classer   lundi)creneau__classecreneaur   r   rr   rK   rF   c              	   S   4   g | ]\}}}}}}}||||pd |||pd gqS r   r6   rf   r`   r   r   r   rr   rK   rF   r6   r6   r7   rg          zcolles.<locals>.<listcomp>rk   r   ru   r   c              
   S   s   g | ]>\}}|j |jj d  |jj  ||jsdn|jj |js#dn|jj |js+dn|jj |j	s3dn|j	j |j
s;dn|j
j gqS )rP   r   r`   rI   r   r   r   r   r   lv1lv2optiongroupe2rf   rF   r   r6   r6   r7   rg      s
    0@c                 S   s4   g | ]\}}|j |jj d  |jj  |gqS )rP   r`   rI   r   r   r   r   rf   rK   r   r6   r6   r7   rg      s    ()r   c                 S   s   g | ]C}|j |jsd n|jj t|jj|jj ddd |j D |j	j
| |jdu r/dn|j|jdu r8dn|j|jdu rAdn|jg
qS )r   r9   c                 s       | ]}|j V  qd S Nrj   re   r6   r6   r7   	<genexpr>       z$colles.<locals>.<listcomp>.<genexpr>NrQ   )r`   rF   rd   rK   rI   rr   r   r   allr   r   get_utc_timestampr   r   commentaire_colleurrf   plancher6   r6   r7   rg      s    )creneauxsemainescollesgroupesr   elevescolleursplanchesr   )rI   rJ   r   rF   rG   r   r   r;   r   annotater$   values_listr   distinctr   r   r   loginsElevesloginsColleursr   r   r   r   r8   )rA   rI   rG   r   r   r   r   r   r   r   r   r6   r6   r7   r      sZ   
r   c           	      C   sD  | j }t|stdS | j jj}|d u rtdS t| jd }| jd d d }| jd dk}tt||d}|rC|j|jkrBtd	S nItj	j
| j j|j|j|jd
 }|rZtdS tj	j
| j j|j|j|jd}| dt|j| j jk kr|tdS |jd ur|j| j jkrtdS | j j|_||_|  ttd|jiS )Nr   no class
id_plancher   d   modiftrue)r`   r   uB   Vous ne pouvez pas modifier le créneau d'un(e) autre étudiant(e))rF   r   r   r   u,   Vous avez déjà une planche sur ce créneau)rF   r   rK   r      u:   Vous avez trop de planches avec ce colleur sur ce créneauu;   Ce créneau est déjà occupé par un(e) autre étudiant(e))rI   rJ   r   rF   rG   r-   rM   r   r   r;   r   r   r   r   existsrK   countr   saver   r   r   )	rA   rI   rG   r   r   r   r   dejaplancher   r6   r6   r7   inscriptionPlanche   s4   
"
r   c                 C   s`   | j }t|stdS | j jj}|d u rtdS tt||| j jd}d |_d|_|  t	dS )Nr   r   )r`   r   rF   rQ   deleted)
rI   rJ   r   rF   rG   r   r   r   r   r   )rA   r   rI   rG   r   r6   r6   r7   desinscriptionPlanche   s   
r   c                 C   sz  | j }t|st|stdS tjj|dddddddd	d
dddd}dd |D }t	jj|dd
 ddddddddd	d}dd |D }t|sVtj jsbttj||dtdS t|r|jj}ttjj|d dd!}ttjj|d"dd!d#d$}d%d | D }	d&d | D }
ttjj|d d'd(}| }ttj|||||	|
||d)tdS d*S )+u   renvoie les messages envoyés/reçus par l'utilisateur ainsi que les données pour écrire des messages connecté au format jsonr   rH   lureponsesmessage__pkmessage__datemessage__auteur__first_namemessage__auteur__last_namemessage__luParmessage__listedestinatairesmessage__titremessage__corpsmessage__pjz-message__datec                 S   sb   g | ]-}|d  |d |d |d |d   d |d   |d |d |d	 |d
 |d d
qS )r   r   r  r  r  rP   r  r  r  r  r  r	  )
readanswersr`   r   authorreadBy
recipientsr   body
attachmentr   r   r6   r6   r7   rg      s    	
zmessages.<locals>.<listcomp>T)auteur	hasAuteurr   auteur__first_nameauteur__last_nameluParlistedestinatairesr   corpspjr`   z-datec                 S   sV   g | ]'}|d  |d |d   d |d   |d |d |d |d |d	 d
qS )r`   r   r  rP   r  r  r  r   r  r  )r`   r   r  r  r  r   r  r  r   r   r6   r6   r7   rg     s    
)messagesrecusmessagesenvoyesr   r   rk   r   ru   r   c                 S   s   g | ]?\}}|j |jj d  |jj  ||jsdn|jj |js#dn|jj |js+dn|jj |j	s3dn|j	j |j
s;dn|j
j dqS )rP   r   )idrk   r   r   r   r   r   r   r   r   r6   r6   r7   rg     s
    0@
c                 S   s6   g | ]\}}|j |jj d  |jj  |dqS )rP   )r  rk   r   r   r   r6   r6   r7   rg     s    *colleur__pkmatiere__pk)r  r  r   r   r   r   profscolleurmatieresN)rI   rJ   rL   r   r   r;   r   r   r   r   r   r	   r<   r   r   r   r   r8   rF   rG   r   r   r   r   r   r   listeColleurMatiere)rA   rI   messagesrecusQueryr  messagesenvoyesQueryr  rG   r   r   r   r   r  r  r6   r6   r7   messages   sP   	

r#  c                 C   s~   | j }t|st|stdS tt||d}tt|d}|js;d|_|  | j	d
|j |j 7  _	|  tdS )z=marque comme lu le message d'ont l'identifiant est message_idr   )r  rI   r`   Tz{} {};r
  )rI   rJ   rL   r   r   r   r   r   r   r  r>   r   r   r   r   r   )rA   
message_idrI   destinatairemessager6   r6   r7   readmessage  s   "r(  c                 C   s   | j }t|st|stdS tt|d}|jr7|j|kr7|j	 
 s,|  tdS d|_|  tdS tt||d}|  |jsP|j	 
 sP|  tdS )uB   marque comme effacé le message d'ont l'identifiant est message_idr   r$  Fr'  rI   r   )rI   rJ   rL   r   r   r   r  r  messagerecur   r   deleter   r   r   )rA   r%  rI   r'  r&  r6   r6   r7   deletemessage*  s$   
r,  c              
   C   s  | j }t|st|stdS | jdksd| jvsd| jvr ttt||d}tt	||d}|j
r@|jdur@tj js@tdS |jj d	 |jj  }t|| jd | jd |d
}|  t	||jd}|  | j
d7  _
|  |dkrg }	|j D ]}
|
j |kr|	t	||
j dd |dt|
j  7 }qt	j|	 ||_|  tt|jt |j!"d|j|j#|j$|j%r|j%nddS )u   répond au message dont l'identifiant est message_id, avec les champs POST title et body.
    La réponse est envoyée à tous si la variable booléenne answerAll vaut True, et uniquement
    à l'expéditeur du message original sinonr   rM   r  r   )r`   messagerecu__userrI   r'  Nzalready answeredrP   )r  r   r  r  r)  r   1r   )r'  rI   r   ; %srQ   )r`   r   r  r   r  r  )&rI   rJ   rL   r   r   rM   r   r   r   r   r   rF   r	   r;   r<   r   r  r   r   r   r   r   r*  r   appendrd   bulk_creater  r   r   r   r`   r-   r   strftimer   r  r  )rA   r%  	answerAllrI   r'  userdestinatairer  reponser&  destinatairesdestinataireUserr6   r6   r7   answer?  sR   


r:  c                    s  | j }t|stdS |jj }tj|j}tj	|j}t
tjj|djtddjddddd	d
d}t
tjddd}tjj|dddddddd}dd |D }t
tjj|dddd}t
tjj|d dddd}	tjj|jd}
dd |
D }
g }|D ]  fddt  D }|| qdd t j|jdD }tjj|jd}tjj|jj |jj d d!dd"}tjj|dd!dd"}ttji d#|d$|d%t
|d&dd'd(d)d*d+t
|d&d,t
||B d-t j!|jd.t
t"jj|jj d#d/d"dd0d1d2d3d4d5|d6|d7|d8|d9|	d:|d;|d<t$j% j&ggd=|
t'd>S )?uH   renvoie les colles des classes de l'utilisateur connecté au format jsonr   )
classe__inr   r   r   r   r`   
classe__pkr   r   r   r   r   )creneau__classe__inr   r   r   rr   rK   rF   c              	   S   r   r   r6   r   r6   r6   r7   rg   s  r   z"colleurDonnees.<locals>.<listcomp>rk   )matieresclasse__inru   r   rK   c                 S   s   g | ]A}|j |jsd n|jj |jj |jj ddd |j D |jj|	 |j
du r-dn|j
|jdu r6dn|j|jdu r?dn|jg
qS )r   r9   c                 s   r   r   rj   re   r6   r6   r7   r   z  r   z,colleurDonnees.<locals>.<listcomp>.<genexpr>NrQ   )r`   rF   rK   rr   r   r   r   r   r   r   r   r   r   r   r6   r6   r7   rg   z  s    c                    s   g | ]i\}}|d  j |d  jj d |d  jj  |d |d  js%d n|d  jj |d  js1d n|d  jj |d  js=d n|d  jj  j ||d  j	sLd n|d  j	j |d  j
sXd n|d  j
j |d  jsddn|d  jjgqS )r   rP   r   N)r`   rI   r   r   r   r   r   r   r   r   r   photourl)rf   orderrF   r   r6   r7   rg   }  s
    H~c                 S   sF   g | ]\}}|d  j |d  jj d |d  jj  |d |gqS )r   rP   r   r   )rf   rB  rK   r6   r6   r7   rg     s    :)profprincipal)r;  matiere__inr  r  r  colleurclassesr   r  rm   rn   ro   rp   ppr  notesr   r   r   r   r   r   r   r   r   r   r   r   r   r   rY   r   r   )(rI   rL   r   rK   r   r   r   r;   listeColleurClasser   r   r   r   r   r$   r   r   r   r   r   r   r   	enumerater   extendr   r   r   r   r   r   r   r
   listeNotesAppr   r   r	   r<   rY   r8   )rA   rI   r   rE  r  r   r   r   r   r   r   r   eleves_classer   rF  r  profsppr6   r   r7   colleurDonneesf  s   


*\"rN  c                 C   sF   | j }t|stdS tt|d}|j|jkrtdS |  tdS )z-efface la note dont l'identifiant est note_idr   r$  znot your grader   )rI   rL   r   r   r
   rK   r+  r   )rA   note_idrI   r   r6   r6   r7   deletegrade  s   rP  c                 C   sb  | j }t|stdS | jdksLd| jvsLd| jvsLd| jvsLd| jvsLd| jvsLd| jvsLd	| jvsLd
| jvsLd| jvsLd| jvsLd| jvsLd| jvrNt| jd dkrattt| jd d}n%| jd dkrztj	j
t| jd d}W n ty   t }Y nw t }ttt| jd d|_ttt| jd d|_ttt| jd d|_|j|jj vrtdS |j|jj vrtdS t| jd |_t| jd |_|j|_| jd	 |_| jd dkrd|_d|_n
tt| jd d|_| jd dkrdnd|_|js|jjt|jd |_nt !t| jd |_| jd
 |_"tj	j#|j|j|jd}|j$r:|j%|j$d}|& }|dkrGtdS tj	j#|j|j|j|jd& }|dkrj|jdurj|j$sjtdS |'  zt(j	j
|j|j|jd j)}W n ty   d!}Y nw tt *|jt+|jd" |jd" j,t-j.d#/ }tt0j1|j$||d$t2d%S )&u'   ajoute une note dans la base de donnéer   rM   weekdayr2   studentcatchupr   r   r   r   rG   r`   draft_id0r$  r   $vous ne collez pas dans cette classe&   vous ne collez pas dans cette matièreN   falseFTdaysr   rK   r      u)   Vous avez plus de 3 notes sur ce créneaur   rr   rK   rF   r   uE   Vous avez déjà collé cet élève dans cette matière cette semainerG   r   rr   rQ   r+   r)   )r`   r   r   r   )3rI   rL   r   r   rM   r   r   r
   r-   r;   r   r   r   r   r   rr   r   rG   rK   r   r   r   r   r   r   r   rF   r   	rattrapeer   r"   r   r    utcfromtimestampr   r   r`   excluder   r   r   r   r/   r!   r0   r#   r1   r.   r   r   r8   )rA   rI   r   nbNotesColleurnbNotesElever   r   r6   r6   r7   addsinglegrade  sl   (((


 2rf  c                 C   sL  | j }t|stdS | jdks`d| jvs`d| jvs`d| jvs`d| jvs`d| jvs`d| jvs`d	| jvs`d
| jvs`d| jvs`d| jvs`d| jvs`d| jvs`d| jvs`d| jvs`d| jvs`d| jvrbtt t t }}}ttt	| jd d |_
 |_
|_
ttt	| jd d |_ |_|_ttt	| jd d |_ |_|_|j|jj vrtdS |j|jj vrtdS t	| jd  |_ |_|_t	| jd  |_ |_|_|j |_ |_|_| jd dkrdnd |_ |_|_|js|j
jt|jd  |_ |_|_ntt	| jd  |_ |_|_t	| jd |_t	| jd
 |_t	| jd |_| jd dkr>dntt| jd d|_| jd dkrRdntt| jd d|_| jd dkrfdntt| jd d|_|jdu r|jdkrd|_|jdu r|jdkrd|_|jdu r|jdkrd|_tjj |j|j|jd! }|d krtd!S |jdkrtjj |j
|j|j|jd"! }|d#kr|jdurtd$"|jS |jdkrtjj |j
|j|j|jd"! }|d#kr|jdurtd$"|jS |jdkr/tjj |j
|j|j|jd"! }|d#kr/|jdur/td$"|jS |jdkr?| jd	 |_#|$  |jdkrO| jd |_#|$  |jdkr_| jd |_#|$  zt%jj&|j|j
|jd%j'}	W n t(yz   d&}	Y nw t	t)|jt*|jd' |jd' j+t,j-d(. }
tt/j0|j1|j1|j1|	|
d)t2d*S )+u4   ajoute les notes d'un groupe dans la base de donnéer   rM   rQ  rR  r2   rT  r   grade1comment1grade2grade3r   comment2comment3rG   student1student2student3r   r$  rW  rX  rZ  FTr[  rV  Nr:   rY  r]  r   u*   Vous avez déjà des notes sur ce créneaur_  r   u<   Vous avez déjà collé {} dans cette matière cette semainer`  rQ   r+   r)   )pk1pk2pk3r   r   r   )3rI   rL   r   r   rM   r   r
   r   r   r-   r   r   rr   r   rG   rK   r   r   r   r   r   r   ra  r   r"   r   r    rb  r   r   rF   r;   r   r   r>   r   r   r   r   r   r   r/   r!   r0   r#   r1   r.   r   r   r`   r8   )rA   rI   note1note2note3rd  nbNotesEleve1nbNotesEleve2nbNotesEleve3r   r   r6   r6   r7   addgroupgrades  s   (($$$$$"(((
   2$ry  c              	   C   sp  | j }t|stdS | jdksd| jvrtg }g }zt| jd }t|D ]y}t| jd| }|	| t| jd| }||v rN|	d q(|dkrhz	t
jj|d}W n tyg   t
 }Y nw t
 }ztjjt| jd| d	|_tjjt| jd
| d|_tjjt| jd| d|_t| jd| |_t| jd| |_t| jd| |_| jd| dkrdnd|_t| jd| }	|	dkrdntjj|	d|_t| jd| }
W n ty   |	d Y q(w |j|_|j|jj vs|j|jj vr|	d q(|js,|jjt|jd |_ nt!"|
|_ t
jj#|j |j|jd}|j$rI|j%|j$d}|& }|dkrX|	d q(t
jj#|j|j|j|jd& }|dkr}|jdur}|j$s}|	d q(z| jd| |_'W n ty   |	d Y q(w |(  |	|j$ q(W n
 ty   tw t)t*+||gS )uU   ajoute les brouillons de notes dans la base de donnée en insérant / mettant à jourr   rM   
draftCountzrow{}zdraft{}r   r$  zweek{}r   z	subject{}zclasse{}zday{}zhour{}zgrade{}z	catchup{}rZ  FTz	student{}Nzdate{}r[  r]  r^  r_  z	comment{}),rI   rL   r   r   rM   r   r-   ranger>   r2  r
   r;   r   r   r   r   r   rr   r   rG   r   r   r   ra  r   rF   rK   r   r   r   r   r"   r   r    rb  r   r`   rc  r   r   r   r   r   r   )rA   rI   listeNotesRowlisteNotesIdnbNotesirowidrU  r   eleve_idr   rd  re  r6   r6   r7   adddraftgrades  s   

   
(


 

6r  c                    s  | j }t|st|rtj jstdS | jdks)d| j	vs)d| j	vs)d| j	vr+t
t }zdd | j	d dD }W n	 tyF   t
w |D ]\}}}|d	krhz|tjj|d
 W qI tyg   Y qIw |dkrz|tjj|d W qI ty   Y qIw |dkrz|dd tjj|dD O }W qI ty } ztt|W  Y d}~  S d}~ww |dkrz|dd tjj|dD O }W qI ty } ztt|W  Y d}~  S d}~ww |dkrz|dd tjj|dD O }W qI ty   Y qIw |dkrz|dd tjj|dD O }W qI ty   Y qIw |dkr?z|dd tjj||dD O }W qI ty>   Y qIw qI|sGtdS || t|dd d |D | j	d | j	d d!    tj fd"d|D  tt jt j !d# j" j# j$d$S )%u+   ajoute un message envoyé par l"utilisateurr   rM   r   r  r  c                 S   s    g | ]}d d | dD qS )c                 S   rs   r6   )r-   r   r6   r6   r7   rg   h  rt   z)addmessage.<locals>.<listcomp>.<listcomp>-)split)rf   yr6   r6   r7   rg   h  s     zaddmessage.<locals>.<listcomp>_r   )	eleve__pk   )r  r^  c                 S      h | ]}|j qS r6   rH   rf   rF   r6   r6   r7   	<setcomp>x  rl   zaddmessage.<locals>.<setcomp>)
groupe__pkN   c                 S   r  r6   rH   r  r6   r6   r7   r  }  rl   )groupe2__pk   c                 S   r  r6   rH   r  r6   r6   r7   r    rl   )r<     c                 S   r  r6   rH   rf   rK   r6   r6   r7   r    rl   )colleurprof__classe__pk   c                 S   r  r6   rH   r  r6   r6   r7   r    rl   )classes__pkmatieres__pkz Il faut au moins un destinatairer0  c                 S   s$   g | ]}d  |j |j qS )z{} {})r>   r   r   r   r   )rf   r&  r6   r6   r7   rg     s   $ )r  r  r   r  c                    s   g | ]}t | d qS )r.  )r   )rf   personner'  r6   r7   rg     s    r1  )r`   r   r  r   r  )%rI   rL   rJ   r	   r;   r<   r   r   r   rM   r   setr  r   addr   r   r   r   r   rd   r   discardr   r   r   r   r3  r   r   r`   r-   r   r4  r  r   r  )rA   rI   r8  destinataireListgenrer`   
matiere_pker6   r  r7   
addmessage^  s   (   
 
"
,
r  c                 C   s  | j }t|stdS tjj|jd}g }g }g }g }g }g }|D ]^}	tjj|	j|	j	d}
|t
tjj|
d 7 }|t
tjj|
d 7 }|t
|
 7 }|t
tjj|	j|	j	d 7 }|t
tjj|	j|	j	d 7 }|t
tjj|	j|	j	d 7 }q!ttj||||||gtdS )Nr   r?  )rG   rr   )
devoir__inr   )rI   rL   r   r   r;   r   rK   r   rG   rr   r   r   r   r   r   r   r   r   r   r8   )rA   rI   r  r   r   r   r   r   r   profdevoirr6   r6   r7   documents_prof  s&     "r  )Fdjango.shortcutsr   r   django.httpr   r   django.contrib.authr   r   django.views.decorators.csrfr   accueil.modelsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r!   r"   r#   django.db.modelsr$   r%   ecolle.settingsr&   r'   r(   r8   rC   rJ   rL   r   r   r   r   r   r   r   r   r#  r(  r,  r:  rN  rP  rf  ry  r  r  r  r6   r6   r6   r7   <module>   sN    `	
3

+
&%
:
F
E
: