
    X@	gR                        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  d dl!m"Z" d dl#Z#d dl$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 Z/d Z0d Z1d Z2e
d             Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;e
d             Z<d Z=d Z>e
d             Z?e
d             Z@e
d             ZAe
d             ZBd ZCdS )     )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)timezoneN)datedatetimetime	timedelta)CountQ)HEURE_DEBUT	HEURE_FIN
INTERVALLEc           	         t          | t                    r!t          |                                           S t          | t                    r`t          t          j        | t          dd                                        t          j	                                                            S t          | t                    rd| j
        z  | j        z   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)objs     /opt/e-colle/app_mobile/views.pydate_serialr8      s    #x   $3==??####t ]8#CQq		22::(,:OOYY[[\\\#t (#({SZ''
+
,
,,    c                     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configs     r7   checkrE      sa     ^&&((F (@A[A[\_A`A`adbdadAeffgggr9   c                     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users    r7   
checkeleverM   !   sg     >$$&&1   u> u: u: u4r9   c                     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   rG   rH   colleurrK   s    r7   checkcolleurrP   0   sU     >$$&&1   u> u< u4r9   c                 ^   t           j                                        j        st          | j        dk    rit          | j        d         | j        d                   }|0|j        C|j        j	        6t          | |           |j        j	        }t          t          j        |j                                        dz   |j                                        z   |j        j        |j        |j        |j        |j        sdn|j        j        |j        sdn|j        j        |j        sdn"t           j                                        j        |j        j        d	n|j        j        j        d
t           j                                        j        t6          t8          t:          d                    S |j        |j        rt          | |           |j        j         !                    d          }|j        j"        !                    d          }t          t          j        |j                                        dz   |j                                        z   |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                       t           j                                        j        d
t6          t8          t:          d                    S t          d          S tI          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)rS   rT   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                 6    g | ]}t          |j                  S  strre   .0rJ   s     r7   
<listcomp>zconnect.<locals>.<listcomp>_   s!    HnHnHn\bVYHnHnHnr9   c                     g | ]	}|j         
S rh   )nomrk   s     r7   rm   zconnect.<locals>.<listcomp>`   s    JlJlJlZ`6:JlJlJlr9   c                 6    g | ]}t          |j                  S rh   )rj   anneerk   s     r7   rm   zconnect.<locals>.<listcomp>a   s#    JsJsJsag3v|K\K\JsJsJsr9   c                 6    g | ]}t          |j                  S rh   )rj   	semestresrk   s     r7   rm   zconnect.<locals>.<listcomp>b   s&    O|O|O|jpPSTZTdPePeO|O|O|r9   c                     g | ]>}d                      |j        sdn|j        j        |j        sdn|j        j                  ?S )z{}-{}r   )r@   option1re   option2rk   s     r7   rm   zconnect.<locals>.<listcomp>c   s      NT  NT  NT  BHgnnflft  ^L]^]^  {A  {I  {L  W]  We  N|  NO  NO  kq  ky  k|  O}  O}  NT  NT  NTr9   c                 6    g | ]}t          |j                  S rh   ri   rl   matieres     r7   rm   zconnect.<locals>.<listcomp>d   s!    IrIrIr^e#gj//IrIrIrr9   c                 ,    g | ]}t          |          S rh   )rj   rx   s     r7   rm   zconnect.<locals>.<listcomp>e   s     KqKqKq]dCPWLLKqKqKqr9   c                     g | ]	}|j         
S rh   )couleurrx   s     r7   rm   zconnect.<locals>.<listcomp>f   s    LuLuLuahW_LuLuLur9   )rW   
colleur_id
classes_idclasses_nameclasses_yearclasses_semestresclasses_optionssubjects_idsubjects_namesubjects_colorr^   r`   rb   rc   rd   invalidezaccess denied)%r
   r=   r>   r?   r   methodr   rR   rI   rJ   r   r   jsondumps
first_nametitle	last_nameupperre   ro   rq   ru   rv   rs   r^   groupemessage_elevesr&   r'   r(   rO   rH   matieresorder_byclassesjoinr   )rC   rL   rJ   r   r   s        r7   connectr   >   s    >$$&&1 ~W\*%=%,\*%=? ? ?z%$**;*Ggt$$$*#DJ8M8M8O8ORU8UX\XfXlXlXnXn8n>Bjm=CY?Ez?E|KQ>Bp!!_e_m_pKQ>Bp!!_e_m_pGMGW  >CRR]c]k]v]v]x]x  ^C?Cz?P?X^b^h^o^s;@;A>;T;T;V;V;e?J=F>H0J 0J %K %K L L L |'DN'gt$$$<099$??,.77==#DJ8M8M8O8ORU8UX\XfXlXlXnXn8n>Blo>BiiHnHnfmHnHnHn>o>o@D		JlJldkJlJlJl@m@m@D		JsJskrJsJsJs@t@tEIYYO|O|t{O|O|O|E}E}CG99  NT  NT  LS  NT  NT  NT  DU  DU?CyyIrIriqIrIrIr?s?sAEKqKqhpKqKqKqArArBF))LuLultLuLuLuBvBv=C^=V=V=X=X=b;@?J=F>H0J 0J %K %K L L L J'''$_555r9   c           
      $   | j         }t          |          st          d          S t          j                            |j                  }t          j                            |j        j	                  
                    ddddddd	d
                              dd          }t          t          j        |t          |          d|j        j	        j        sdn"t"          j                                        j        igdt(                              S )uE   renvoie l'agenda des colles de l'utilisateur connecté au format jsonnot authenticatedrJ   re   matiere__couleurmatiere__nomsemaine__numerosemaine__lundititrefichierdetail-semaine__lundisem2r<   )agendasprogramsr^   default)rL   rM   r   r   r=   agendaEleveApprI   r   filterrJ   valuesr   r   r   r   listrs   r
   r>   r^   r8   )rC   rL   r   
programmess       r7   agendaprogramsr   r   s[   <Dd :$%8999m**4:66G"))1B)CCJJ4N,=?OQXZcemo oowow  yJ  LZ  p[  p[ 
wDDTDTekw{  xB  xI  xS  n~momo  Y_  Yg  Yr  Yr  Yt  Yt  Y~  e  d@  $A  $A  KV  W  W  W  X  X  Xr9   c                     | j         }t          |          st          d          S t          t	          j        d t          j                            |j	                  D             t                              S )u;   renvoie les notes de l'utilisateur connecté au format jsonr   c                    g | ]}|d                                           |d         |d         |d                                          dz   |d                                         z   |d         |d         |d         |d	         d
S )nom_matierer|   
date_colleprenomrU   ro   r   	programmenotecommentaire)subjectcolorr    rO   r   programgradecommentr   r   rl   xs     r7   rm   zgrades.<locals>.<listcomp>   s     $Q $Q $Q )* 01/?/E/E/G/G)H+##%%c)!E(..*:*::'
K.&	M"%$ %$ $Q $Q $Qr9   r   )rL   rM   r   r   r   r   r   r=   	noteEleverI   r8   )rC   rL   s     r7   gradesr   |   s    <Dd :$%8999
 $Q $Q .2\-C-CDJ-O-O$Q $Q $Q         r9   c                 2   | j         }t          |          st          d          S t          j                                        j        }	 t          j                            |          	                                }t          t          j        t          t          j                            |j        dd                    t          t          j                            |j        d|d                    t          t          j                            |j        |d                    d                    S # t"          $ rW t          t          j        dt          t          j                            |j        dd                    i                    cY S w xY w)u@   renvoie les résultats de l'utilisateur connecté au format jsonr   numeroFT)globalsem1r   r   )rL   rM   r   r
   r=   r>   r^   r   r   getr   r   r   r   r   
bilanEleverI   	Exception)rC   rL   r^   semaines       r7   resultsr      s   <Dd :$%8999))++5In/(()(<<@@BBDJ48O8OPTPZ\ach8i8i3j3jtxy}  zF  zQ  zQ  RV  R\  ^c  el  mq  zr  zr  us  usT\,,TZ%HHII(K (K L L M M 	M n n nDJ48O8OPTPZ\ach8i8i3j3j'kllmmmmmns   
C*D5 5AFFc                 P   | j         }t          |          st          d          S |j        j        }t          t          j                            |          	                                          }t          t          j                            |j                  	                                          }t          t          j                            |j                  	                                          }t          t          j                            |          	                                          }t          t          j                            |          	                                          }t          t          j                            |          	                                          }t          t          j                            |          	                    dddd                    }	t!          t#          j        |	||||||gt&          	                    S )
Nr   r   )rI   matieresclassere   ro   r|   lvr   )rL   rM   r   rI   rJ   r   r   r=   r   r   r   r   r   r   r   r   r   r   r   r8   )
rC   rL   rJ   devoirsdevoirsrendusdevoirscorrigescourstds	documentsr   s
             r7   r   r      s   <Dd :$%8999ZF6>((&(99@@BBCCG,33DJ3GGNNPPQQM=077
7KKRRTTUUO%%v%66==??@@E
rz   //6688
9
9CX%,,F,;;BBDDEEIGO** +  %vdE9dCCE EH
HW]?SXY\]f#gq|}}}~~~r9   c                 f   | j         }t          |          st          d          S |j        j        }t          t          j                            |          	                    t          d                                        d                              ddd	d
                    }t          t          j                            |                                                              ddd                    }t          j                            |                              ddddddd          }d |D             }t          t          j                            |                              dd                    }t          t           j                            |                              dddd                    }d |                                D             }d |                                D             }	t'          t)          j        |||||||	dt,                              S )Nr   r   collenbr   nb__gtre   jourheuresalle)colle__creneau__classer   lundi)creneau__classecreneaur   r   ry   rO   rI   c           	      8    g | ]\  }}}}}}}||||pd |||pd gS r   rh   rl   re   r   r   r   ry   rO   rI   s           r7   rm   zcolles.<locals>.<listcomp>   S     I I I=GWfgw 7GV[q'7EJQO I I Ir9   ro   r   r|   r   c           
      l   g | ]\  }}|j         |j        j                                        d z   |j        j                                        z   ||j        sdn|j        j         |j        sdn|j        j         |j        sdn|j        j         |j	        sdn|j	        j         |j
        sdn|j
        j         gS )rU   r   )re   rL   r   r   r   r   r   lv1lv2optiongroupe2rl   rI   r   s      r7   rm   zcolles.<locals>.<listcomp>   s     ` ` ` zF  z  AF x.4466<uz?S?Y?Y?[?[[]bmrmy  eOdede  @E  @L  @O	3qquy|ei5YQQUY\didp  \F[\[\v{  wC  wF  QV  Q^  Ht  HI  HI  di  dq  dtu ` ` `r9   c                     g | ]M\  }}|j         |j        j                                        d z   |j        j                                        z   |gNS )rU   re   rL   r   r   r   r   rl   rO   r   s      r7   rm   zcolles.<locals>.<listcomp>   sb     ? ? ?"GU W\4::<<sBW\E[EaEaEcEccejk ? ? ?r9   )creneauxsemainescollesgroupesr   elevescolleursr   )rL   rM   r   rI   rJ   r   r   r=   r   annotater$   values_listr   distinctr   r   r   loginsElevesloginsColleursr   r   r   r8   )
rC   rL   rJ   r   r   r   r   r   r   r   s
             r7   r   r      sv   <Dd :$%8999ZFGO**&*99BBeG GB  &&"";;tVWg#N#NP PHGO**% + ' ''/xzz++dHg2V2VX XH]!!&!99EEiHiGM MFI IAGI I IF6>(( )  "{4//1 1GGO** +  *{4	4HHJ JH` ` JP  J]  J]  J_  J_` ` `F? ?&,&;&;&=&=? ? ?H
hZ`/6HX^lt$v $v @KL L L M M Mr9   c                 ~   | j         }t          |          st          |          st          d          S t          j                            |                              ddddddd	d
ddd                              d          }d |D             }t          j                            |d          
                                                    ddddddddd	  	                            d          }d |D             }t          |          s#t          j                                        j        s+t          t          j        ||dt"                              S t          |          rR|j        j        }t)          t*          j                            |                              dd                     }t)          t,          j                            |!                              dd d"d#                    }d$ |                                D             }	d% |                                D             }
t)          t2          j                            |                              d&d'                    }|                                }t          t          j        |||||	|
||d(t"                              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   rK   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                     g | ]{}|d          |d         |d         |d         |d                                          dz   |d                                         z   |d         |d         |d	         |d
         |d         d
|S )r   r   r   r   r   rU   r   r   r   r   r   r  )
readanswersre   r    authorreadBy
recipientsr   body
attachmentr   r   s     r7   rm   zmessages.<locals>.<listcomp>   s     	H 	H 	H 01 tW
m=!_%45;;==cA!D`BaBgBgBiBii'(89&'%&=)	+ 	+ 	H 	H 	Hr9   T)auteur	hasAuteurr    auteur__first_nameauteur__last_nameluParlistedestinatairesr   corpspjre   z-datec                     g | ]m}|d          |d         |d                                          dz   |d                                         z   |d         |d         |d         |d         |d	         d
nS )re   r    r  rU   r  r  r  r   r  r  )re   r    r  r  r  r   r  r	  r   r   s     r7   rm   zmessages.<locals>.<listcomp>   s     A A A '( tWV9+,2244S8;N9O9U9U9W9WWwZ/0gJW:4" " A A Ar9   )messagesrecusmessagesenvoyesr   r   ro   r   r|   r   c           	         g | ]\  }}|j         |j        j                                        d z   |j        j                                        z   ||j        sdn|j        j         |j        sdn|j        j         |j        sdn|j        j         dS )rU   r   )idro   r   r   r   r   )	re   rL   r   r   r   r   r   r   r   r   s      r7   rm   zmessages.<locals>.<listcomp>   s     X X Xq}qvx} %**?*E*E*G*G#*MPUPZPdPjPjPlPl*lw|  RW  R^  Is  IJ  IJ  di  dp  ds#(9>!!%),PUPYGkqq_d_h_km m X X Xr9   c                     g | ]N\  }}|j         |j        j                                        d z   |j        j                                        z   |dOS )rU   )r  ro   r   r   r   s      r7   rm   zmessages.<locals>.<listcomp>   sx     C C C& #:gl.E.K.K.M.MPS.SV]VbVlVrVrVtVt.t  @E  F  F C C Cr9   colleur__pkmatiere__pk)r  r  r   r   r   r   profscolleurmatieresN)rL   rM   rP   r   r   r=   r   r   r   r   r   r
   r>   r   r   r   r   r8   rI   rJ   r   r   r   r   r   r   listeColleurMatiere)rC   rL   messagesrecusQueryr  messagesenvoyesQueryr  rJ   r   r   r   r   r  r  s                r7   messagesr     sr   <Dd :L$6$6 :$%8999%-44$4??FFtZYfhwB_a}  @PB_aq  tD  FST T U]  U]  ^n  Uo  Uo 	H 	H 5G	H 	H 	HM #?111NNWWYY``$&97DXZacjlprvx x yA  yA  BI  yJ  yJ A A ,@A A AO D U!:!:!<!<!K UDJZi'j'jt  A  A  A  B  B  	B	D		 U"v~,,F,;;BB4OOPP..f.EELLTSXZceijjkkX X BH  BU  BU  BW  BWX X XC C*0*?*?*A*AC C CT\((&(99@@}]]^^ 4466DJZiv} FSXm|(~ (~ HST T T U U 	UU Ur9   c                    | j         }t          |          st          |          st          d          S t	          t
          ||          }t	          t          |          }|j        sd|_        |                                 |xj	        d
                    |j                                        |j                                                  z  c_	        |                                 t          d          S )z=marque comme lu le message d'ont l'identifiant est message_idr   )r   rL   re   Tz{} {};r  )rL   rM   rP   r   r   r   r   r   saver  r@   r   r   r   r   r   )rC   
message_idrL   destinatairemessages        r7   readmessager&     s    <Dd :L$6$6 :$%8999$*49 9 9Lj999G? )>)>)@)@AUAUAWAWXXXr9   c                 r   | j         }t          |          st          |          st          d          S t	          t
          |          }|j        rg|j        |k    r\|j        	                                
                                s|                                 nd|_        |                                 nqt	          t          ||          }|                                 |j        s?|j        	                                
                                s|                                 t          d          S )uB   marque comme effacé le message d'ont l'identifiant est message_idr   r!  Fr%  rL   deleted)rL   rM   rP   r   r   r   r  r
  messagerecuallcountdeleter"  r   r   )rC   r#  rL   r%  r$  s        r7   deletemessager.     s%   <Dd :L$6$6 :$%8999J777G W^t33"&&((..00 	NN %GLLNNNN('6 6 6  	)<)@)@)B)B)H)H)J)J 	NN	"""r9   c                 \   | j         }t          |          st          |          st          d          S | j        dk    sd| j        vs	d| j        vrt          t          t          ||          }t          t          ||          }|j
        r9|j        2t          j                                        j        st          d          S |j        j                                        d	z   |j        j                                        z   }t          || j        d         | j        d         |
          }|                                 t          ||j                  }|                                 |xj
        dz  c_
        |                                 |dk    rg }	|j                                        D ]Q}
|
j         |k    rD|	                    t          ||
j         d                     |dt3          |
j                   z   z  }Rt          j                            |	           ||_        |                                 t9          t;          j        |j        tA          |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   rR   r  r   )re   messagerecu__userrL   r%  Nzalready answeredrU   )r
  r   r  r  r(     1r   )r%  rL   r   ; %srV   )re   r    r  r   r  r  )&rL   rM   rP   r   r   rR   r   r   r   r   r   rI   r
   r=   r>   r   r
  r   r   r   r   r"  r*  r+  appendrj   bulk_creater  r   r   r   re   r.   r    strftimer   r  r  )rC   r#  	answerAllrL   r%  userdestinatairer  reponser$  destinatairesdestinataireUsers              r7   answerr>    s   
 <Dd :L$6$6 :$%8999~6#=#=PWP\A\A\J$OOOG(42 2 2  9TZ%;FND]D]D_D_Dn%;$%7888 288::S@ &&(()Tg)>glG2DF F FGLLNNNgnEEEL"C ' 3 7 7 9 9 	H 	H$,,$$\#*:*?!&M &M &M N N N"dS1A1F-G-G&GG"((777%7"
'*c',BWBWC C ? ?&-&@7=cjcp  GN  GQ  yYx  yC  yC  WY$Z $Z [ [ \ \ \r9   c                 0	   | j         }t          |          st          d          S |j        j                                        }t          j                            |j                  }t          j        	                    |j                  }t          t          j                            |                              t          d                                        d                              ddd	d
d                    }t          t           j                            ddd                    }t"          j                            |                              ddddddd          }d |D             }t          t$          j                            |                              ddd                    }t          t&          j                            |                                                              dddd                    }	g }
|D ]Dfdt+                                                    D             }|
                    |           Ed t+                              |j                            D             }t2          j                            |j                  }t4          j                            |j        j                                        |j        j                                                                      ddd           }t4          j                            |                              ddd           }t9          t;          j        ||t          |                    d!dd"d#d$d%                    t          |                    d!                    t          ||z            t>          j                             |j                  t          tB          j                            |j        j                                                  "                    d&                              d dd'd(d)d*d+                    |||||	|
|tF          j        $                                j%        ggd,tL          -                    S ).uH   renvoie les colles des classes de l'utilisateur connecté au format jsonr   )
classe__inr   r   r   r   re   
classe__pkr   r   r   r   r   )creneau__classe__inr   r   r   ry   rO   rI   c           	      8    g | ]\  }}}}}}}||||pd |||pd gS r   rh   r   s           r7   rm   z"colleurDonnees.<locals>.<listcomp>E  r   r9   ro   )matieresclasse__inr|   r   c                 h   g | ]-\  }}|d          j         |d          j        j                                        dz   |d          j        j                                        z   |d         |d          j        sd n|d          j        j         |d          j        sd n|d          j        j         |d          j        sd n|d          j        j         j         ||d          j	        sd n|d          j	        j         |d          j
        sd n|d          j
        j         |d          j        sdn|d          j        j        g/S )r   rU   r2  N)re   rL   r   r   r   r   r   r   r   r   r   photourl)rl   orderrI   rJ   s      r7   rm   z"colleurDonnees.<locals>.<listcomp>M  s    I I I Xd  X]  _d  (+uQx}'?'E'E'G'G#'MPUVWPXP]PgPmPmPoPo'oqvwxqy  EJ  KL  EM  ET  |l{|{|  Z_  `a  Zb  Zi  Zla9qq%(,/E!HL;e11V[\]V^VbVegmgprw  CH  IJ  CK  CR  zjyzyz  X]  ^_  X`  Xg  Xj  uz  {|  u}  uE  l^  lm  lm  KP  QR  KS  K[  K^  lq  rs  lt  lz  `R  `d  `d  @E  FG  @H  @N  @RS I I Ir9   c                     g | ]f\  }}|d          j         |d          j        j                                        dz   |d          j        j                                        z   |d         |ggS )r   rU   r2  r   )rl   rH  rO   s      r7   rm   z"colleurDonnees.<locals>.<listcomp>P  s     ` ` `"E7 
 : @ @ B BS H7ST:?KdKjKjKlKl lnuvwnxz  A ` ` `r9   rO   )profprincipal)r@  matiere__inr  r  r  rq   rs   ru   rv   r   r   r   r   r   r   )r  colleurclassesr   ppr  notesr   r   r   r   r   r   r   r   r^   r   )'rL   rP   r   rO   r   r+  r   r=   listeColleurClasser  r   r   r   r   r$   r   r   r   r   r   r   	enumerater   extendr   r   r   r   r   r   r   r   listeNotesAppr   r   r
   r>   r^   r8   )rC   rL   r   rM  r  r   r   r   r   r   r   eleves_classer   rN  r  profspprJ   s                   @r7   colleurDonneesrV  8  sf   <D :$%8999l"&&((G_77EENo99$,GGOGO**g*>>GG5L LG  &&"";;t\67T[#\#\^ ^HGO//hHHIIH]!!g!>>JJiHiGM MFI IAGI I IF6>(( )  'KeLAAC CGGO**" + $ $$,HJJ{{4	SW/X/XZ ZHF % %I I I I hq  rx  rE  rE  rG  rG  hH  hHI I Im$$$$` `&/0E0EPTP\0E0]0]&^&^` ` `H			t|		<	<BLT\-A-E-E-G-GW[WcWlWpWpWrWrss  AN  O[  \i  j  jEl!!r!22>>}\ZghhG
Zhtx  zA  zM  zM  NR  SX  Y`  al  mv  w@  zA  zA  uB  uB  IM  NP  N\  N\  ]a  Nb  Nb  Ic  Ic  nr  sx  {B  sB  nC  nC  NR  NZ  Nh  Nh  im  iu  Nv  Nv9,33t|?S?W?W?Y?Y3ZZccduvv  C  C  DQ')97HiY Y Z Zgo  ~F  RX/6HX^lt  FL  FT  F_  F_  Fa  Fa  Fk  El  Dm$n $n xCD D D E E Er9   c                     | j         }t          |          st          d          S t          t          |          }|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)  )rL   rP   r   r   r   rO   r-  r   )rC   note_idrL   r   s       r7   deletegraderY  [  ss    <D :$%8999Tg...D|t|##$%5666KKMMM	"""r9   c           
      
   | j         }t          |          st          d          S | j        dk    sld| j        vscd| j        vsZd| j        vsQd| j        vsHd| j        vs?d| j        vs6d	| j        vs-d
| j        vs$d| j        vsd| j        vsd| j        vs	d| j        vrt
          | j        d         dk    r/t          t          t          | j        d                             }nw| j        d         dk    rX	 t          j	        
                    t          | j        d                             }n,# t          $ r t                      }Y nw xY wt                      }t          t          t          | j        d                             |_        t          t          t          | j        d                             |_        t          t           t          | j        d                             |_        |j        |j        j                                        vrt+          d          S |j        |j        j                                        vrt+          d          S t          | j        d                   |_        t          | j        d                   |_        |j        |_        | j        d	         |_        | j        d         dk    rd|_        d|_        n&t          t6          | j        d                   |_        | j        d         dk    rdnd|_        |j        s(|j        j        t=          |j                  z   |_        n1tA          j!        t          | j        d                             |_        | j        d
         |_"        t          j	        #                    |j        |j        |j                  }|j$        r|%                    |j$                  }|&                                }|dk    rt+          d          S t          j	        #                    |j        |j        |j        |j                  &                                }|dk    r|j        |j$        st+          d          S |'                                 	 tP          j	        
                    |j        |j        |j                   j)        }n# t          $ r d!}Y nw xY wt          tA          j*        |j        tW          |j        d"z  |j        d"z                      ,                    tZ          j.        #          /                                          }t+          ta          j1        |j$        ||d$td          %                    S )&u'   ajoute une note dans la base de donnéer   rR   weekdayr3   studentcatchupr    r   r   r   rJ   re   draft_id0r!  r   $vous ne collez pas dans cette classe&   vous ne collez pas dans cette matièreN   falseFTdaysr   rO   r      u)   Vous avez plus de 3 notes sur ce créneaur   ry   rO   rI   r   uE   Vous avez déjà collé cet élève dans cette matière cette semainerJ   r   ry   rV   r,   r*   )re   r   r    r   )3rL   rP   r   r   rR   r   r   r   r.   r=   r   r   r   r   r   ry   r   rJ   rO   r   r+  r   r   r   r   r   rI   r   	rattrapeer   r#   r   r!   utcfromtimestampr   r   re   excluder,  r"  r   r   r0   r"   r1   r   r2   r/   r   r   r8   )rC   rL   r   nbNotesColleurnbNotesElever   r   s          r7   addsinglegraderp  f  s    <D :$%8999~6#=#=glAZAZ^dlslx^x^xGL((IW\,I,IV[b[gMgMgkr  {B  {G  lG  lGGL((IW\,I,IX]d]iMiMimq  zA  zF  nF  nFW\))|DS   #gl4.@*A*ABBB	j	!S	(	(	<##s7<
+C'D'D#EEDD 	 	 	66DDD	 vv$Ws7<;O7P7PQQQDL$W3w|I7N3O3OPPPDL#FW\(5K1L1LMMMDK{$,.224444BCCC|4<0446666DEEEGL'((DIW\&)**DJ<DLW%DI|I#%%
		&ui1HIII
%l95@@UUdDN> O,,y	/J/J/JJ"3CV8L4M4MNN|I.D<&&$/$,]a]g&hhNw <'//47/;;#))++NGHHH$$T\$,W[Wcjnjt$uu{{}}LaDJ2472cdddIIKKK#''`d`l'mms   X%dotDJ"<Ldj[]o7^7^__ggowo{g||  G  G  I  I  J  JJ
$'gz#Z#Zdopppqqqs$   68D/ /E
	E
6R> >SSc           
         | j         }t          |          st          d          S | j        dk    sd| j        vsd| j        vs~d| j        vsud| j        vsld| j        vscd| j        vsZd	| j        vsQd
| j        vsHd| j        vs?d| j        vs6d| j        vs-d| j        vs$d| j        vsd| j        vsd| j        vs	d| j        vrt
          t                      t                      t                      }}}t          t          t          | j        d                             x|_
        x|_
        |_
        t          t          t          | j        d                             x|_        x|_        |_        t          t          t          | j        d                             x|_        x|_        |_        |j        |j        j                                        vrt%          d          S |j        |j        j                                        vrt%          d          S t          | j        d                   x|_        x|_        |_        t          | j        d                   x|_        x|_        |_        |j        x|_        x|_        |_        | j        d         dk    rdndx|_        x|_        |_        |j        s6|j
        j        t1          |j                  z   x|_        x|_        |_        n?t5          j        t          | j        d                             x|_        x|_        |_        t          | j        d                   |_        t          | j        d
                   |_        t          | j        d                   |_        | j        d         dk    rdn t          t:          | j        d                   |_        | j        d         dk    rdn t          t:          | j        d                   |_        | j        d         dk    rdn t          t:          | j        d                   |_        |j        |j        dk    rd|_        |j        |j        dk    rd|_        |j        |j        dk    rd|_        t          j                             |j        |j        |j                  !                                }|d k    rt%          d!          S |j        dk    r}t          j                             |j
        |j        |j        |j        "          !                                }|d#k    r.|j        't%          d$"                    |j                            S |j        dk    r}t          j                             |j
        |j        |j        |j        "          !                                }|d#k    r.|j        't%          d$"                    |j                            S |j        dk    r}t          j                             |j
        |j        |j        |j        "          !                                }|d#k    r.|j        't%          d$"                    |j                            S |j        dk    r&| j        d	         |_#        |$                                 |j        dk    r&| j        d         |_#        |$                                 |j        dk    r&| j        d         |_#        |$                                 	 tJ          j        &                    |j        |j
        |j        %          j'        }	n# tP          $ r d&}	Y nw xY wt          t5          j)        |j        tU          |j        d'z  |j        d'z                      +                    tX          j-        (          .                                          }
t%          t_          j0        |j1        |j1        |j1        |	|
d)td          *                    S )+u4   ajoute les notes d'un groupe dans la base de donnéer   rR   r[  r\  r3   r^  r    grade1comment1grade2grade3r   comment2comment3rJ   student1student2student3r   r!  ra  rb  rd  FTre  r`  Nr<   rc  rg  r2  u*   Vous avez déjà des notes sur ce créneauri  r   u<   Vous avez déjà collé {} dans cette matière cette semainerj  rV   r,   r*   )pk1pk2pk3r   r    r   )3rL   rP   r   r   rR   r   r   r   r   r.   r   r   ry   r   rJ   rO   r   r+  r   r   r   r   rk  r   r#   r   r!   rl  r   r   rI   r=   r   r,  r@   r   r"  r   r   r   r   r0   r"   r1   r   r2   r/   r   r   re   r8   )rC   rL   note1note2note3rn  nbNotesEleve1nbNotesEleve2nbNotesEleve3r   r   s              r7   addgroupgradesr    s    <D :$%8999~6#=#=glAZAZ^dlslx^x^xGL((F',,F,F(ZaZfJfJfW\))XW\-I-IX]d]iMiMimv  F  K  nK  nKW\))Zw|-K-Kx_f_kOkOkW\))Zw|-K-KzahamOmOm&&$&&$&&%5E4EgX[\c\hio\pXqXq4r4r4rrEMrEMEM4EgTWX_XdenXoTpTp4q4q4qqEMqEMEM1B6PST[T`aiTjPkPk1l1l1llELl5<%,|4</335555BCCC}DL1557777DEEE+.w|E/B+C+CCEJCej.1',v2F.G.GGEKG%+48L@EM@EMEMCJ<PYCZ^eCeCe%%kooEOoeo? vAFATW`hmhrWsWsWsAsss5+e.>.>AIAZ[^_f_klr_s[t[tAuAuuu5+e.>W\(+,,EJW\(+,,EJW\(+,,EJ!,z2c99$$?PQV[b[ghr[s?t?t?tEK!,z2c99$$?PQV[b[ghr[s?t?t?tEK!,z2c99$$?PQV[b[ghr[s?t?t?tEK{uzR//
{uzR//
{uzR//
<&&%2B5=_d_j&kkqqssNHIIIzRl))%-^b^jqvq|)}}  D  D  F  F1!8 ^ e efkfq r rssszRl))%-^b^jqvq|)}}  D  D  F  F1!8 ^ e efkfq r rssszRl))%-^b^jqvq|)}}  D  D  F  F1!8 ^ e efkfq r rssszR#L4

zR#L4

zR#L4

#''bgbo'ppv   X%e&6U[B=NPUP[^`P`8a8abbjjrzr~j  J  J  L  L  M  MJ
58EHUXbis}#~#~  IT  U  U  U  V  V  Vs   6] ]]c           	      (   | j         }t          |          st          d          S | j        dk    s	d| j        vrt
          g }g }	 t          | j        d                   }t          |          D ]j}t          | j        d                    |                             }|	                    |           t          | j        d                    |                             }||v r|	                    d           |dk    r@	 t          j                            |          }n,# t          $ r t                      }Y nw xY wt                      }	 t          j                            t          | j        d                    |                             	          |_        t           j                            t          | j        d
                    |                                       |_        t$          j                            t          | j        d                    |                                       |_        t          | j        d                    |                             |_        t          | j        d                    |                             |_        t          | j        d                    |                             |_        | j        d                    |                   dk    rdnd|_        t          | j        d                    |                             }	|	dk    rdnt0          j                            |	          |_        t          | j        d                    |                             }
n&# t          $ r |	                    d           Y >w xY w|j        |_        |j        |j        j                                        vs%|j        |j        j                                        vr|	                    d           |j        s(|j        j        t?          |j                  z   |_         ntC          j"        |
          |_         t          j        #                    |j         |j        |j                  }|j$        r|%                    |j$                  }|&                                }|dk    r|	                    d           {t          j        #                    |j        |j        |j        |j                  &                                }|dk    r%|j        |j$        s|	                    d           	 | j        d                    |                   |_'        n&# t          $ r |	                    d           Y 8w xY w|(                                 |	                    |j$                   ln# t          $ r t
          w xY wtS          tU          j+        ||g                    S )uU   ajoute les brouillons de notes dans la base de donnée en insérant / mettant à jourr   rR   
draftCountzrow{}zdraft{}r   r!  zweek{}r   z	subject{}zclasse{}zday{}zhour{}zgrade{}z	catchup{}rd  FTz	student{}Nzdate{}re  rg  rh  ri  z	comment{}),rL   rP   r   r   rR   r   r.   ranger@   r6  r   r=   r   r   r   r   r   ry   r   rJ   r   r   r   rk  r   rI   rO   r   r+  r   r   r#   r   r!   rl  r   re   rm  r,  r   r"  r   r   r   )rC   rL   listeNotesRowlisteNotesIdnbNotesirowidr_  r   eleve_idr   rn  ro  s                r7   adddraftgradesr    s    <D :$%8999~<w|#C#CML9gl<011w 5	- 5	-AW^^A%6%6788E  '''7<	(8(8(;(;<==H<''##A&&&&q==&#|//8/<<$ & & &#vv&  66D#*?#6#6GLQYQ`Q`abQcQcDd@e@e#6#f#fDL#*?#6#6C[M_M_`aMbMb@c<d<d#6#e#eDL"(."4"4#gl:K\K\]^K_K_>`:a:a"4"b"bDK #GL1B1B$C D DDI!$W\(//!2D2D%E!F!FDJ #GL1A1A!1D1D$E F FDI.5l;;M;Ma;P;P.QU\.\.\UUbfDN"7<0B0B10E0E#FGGH)1QEM<M<MS[<M<\<\DJ!$W\(//!2D2D%E!F!FJJ     ''***H  $|;dl&:&>&>&@&@@@DLX\XdXmXqXqXsXsDsDs ''***~ L&*l&89DI;V;V;V&VDOO&.&?
&K&KDO#|22doVZVbimis2tt7 H%3%;%;tw%;%G%GN!/!5!5!7!7!Q&& ''***!\00dlcgcovz  wA0  B  B  H  H  J  J!##
(>tw(> ''***'.|K4F4Fq4I4I'JD$$     ''***H 		##DG,,,,k5	-l    
M,#?@@AAAs{   B;W  D#"W #D>;W =D>>W H:N
W N.*W -N..F0W %VW V($W 'V((3W W.c           
         | j         }t          |          sAt          |          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                      }	 d | j	        d                             d          D             }n# t          $ r t          w xY w|D ]\  }}}|dk    rE	 |                    t          j                            |	                     B# t          $ r Y Nw xY w|d
k    rE	 |                    t          j                            |                     # t          $ r Y w xY w|dk    rd	 |d t"          j                            |          D             z  }# t          $ r(}t'          t)          |                    cY d}~c S d}~ww xY w|dk    rA	 |d t"          j                            |          D             z  }=# t          $ r Y Jw xY w|dk    rA	 |d t*          j                            |          D             z  }# t          $ r Y w xY w|dk    rB	 |d t*          j                            ||          D             z  }# t          $ r Y w xY w|st'          d          S |                    |           t/          |d                    d |D                       | j	        d         | j	        d                                                    t4          j                            fd|D                        t'          t9          j        j        t?          j         !                    d                    j"        j#        j$        d                    S ) u+   ajoute un message envoyé par l"utilisateurr   rR   r   r  r  c                 L    g | ]!}d  |                     d          D             "S )c                 ,    g | ]}t          |          S rh   )r.   r   s     r7   rm   z)addmessage.<locals>.<listcomp>.<listcomp>8  s    :::SVV:::r9   -)split)rl   ys     r7   rm   zaddmessage.<locals>.<listcomp>8  s1    jjjq::QWWS\\:::jjjr9   _r2  )	eleve__pk   )r  rh  c                     h | ]	}|j         
S rh   rK   rl   rI   s     r7   	<setcomp>zaddmessage.<locals>.<setcomp>H      !`!`!`%*!`!`!`r9   )
groupe__pkN   c                     h | ]	}|j         
S rh   rK   r  s     r7   r  zaddmessage.<locals>.<setcomp>M  r  r9   )rA     c                     h | ]	}|j         
S rh   rK   rl   rO   s     r7   r  zaddmessage.<locals>.<setcomp>R  s    !s!s!s7',!s!s!sr9   )colleurprof__classe__pk   c                     h | ]	}|j         
S rh   rK   r  s     r7   r  zaddmessage.<locals>.<setcomp>W  s,      "C  "C  "C7',  "C  "C  "Cr9   )classes__pkmatieres__pkz Il faut au moins un destinatairer4  c                     g | ]F}d                      |j                                        |j                                                  GS )z{} {})r@   r   r   r   r   )rl   r$  s     r7   rm   zaddmessage.<locals>.<listcomp>^  s      Dv  Dv  Dv  XdGNNS_SjSpSpSrSrs  tJ  tP  tP  tR  tR  ES  ES  Dv  Dv  Dvr9   )r
  r  r   r  c                 2    g | ]}t          |           S )r1  )r   )rl   personner%  s     r7   rm   zaddmessage.<locals>.<listcomp>`  s'    )t)t)tZb,HW*U*U*U)t)t)tr9   r5  )re   r    r  r   r  )%rL   rP   rM   r
   r=   r>   r   r   r   rR   r   setr  r   addr   r   r   r   r   rj   r   discardr   r   r"  r   r7  r   r   re   r.   r    r8  r  r   r  )	rC   rL   r<  destinataireListgenrere   
matiere_pker%  s	           @r7   
addmessager  .  s    <D :z$'7'7 :FN<U<U<W<W<f :$%8999~7',#>#>&PWP\B\B\`lt{  uA  aA  aAEEMjjGLQ]D^DdDdehDiDijjj   !1  r:A::!!$,"2"2r"2"B"BCCCC   aZZ!!$,"2"2"2"D"DEEEE   aZZ,!`!`%-:N:N\^:N:_:_!`!`!`` , , ,#CFF++++++++++,aZZ!`!`%-:N:N\^:N:_:_!`!`!``   aZZ!s!sgo>T>Toq>T>r>r!s!s!ss   aZZ  "C  "Cgo>T>Tce  wA>T  ?B  ?B  "C  "C  "C  C    
  v BCCCd###  Dv  Dv  hu  Dv  Dv  Dv  :w  :w  ~E  ~J  KR  ~S  Za  Zf  gm  Zn  o  o  o(()t)t)t)tfs)t)t)tuuu
'*c',BWBWC C ? ?&-&@7=cjcp$r $r s s t t ts   *C   C%3D
D&%D&03E$$
E10E1;-F))
G3GGG%-H
H"!H",-I
I)(I)3.J##
J10J1c           
         | j         }t          |          st          d          S t          j                            |j                  }g }g }g }g }g }g }|D ]}	t          j                            |	j        |	j	                  }
|t          t          j                            |
                                                    z  }|t          t          j                            |
                                                    z  }|t          |
                                          z  }|t          t          j                            |	j        |	j	                                                            z  }|t          t          j                            |	j        |	j	                                                            z  }|t          t          j                            |	j        |	j	                                                            z  }t!          t#          j        ||||||gt&                              S )Nr   rJ  )rJ   ry   )
devoir__inr   )rL   rP   r   r   r=   r   rO   r   rJ   ry   r   r   r   r   r   r   r   r   r   r8   )rC   rL   r  r   r   r   r   r   r   profdevoirs              r7   documents_profr  d  s   <D :$%8999L$,77EGMOE
CI j j&&t|&TTk188F8KKRRTTUUU4 3 : :f : M M T T V VWWW4(((em**DK4<*XX__aabbbtBJ%%t{dl%SSZZ\\]]]T(*114;RVR^1__ffhhiii		
GM/%PST]#^hstttuuur9   )D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   django.utilsr   r   r!   r    r"   r#   django.db.modelsr$   r%   ecolle.settingsr&   r'   r(   r8   rE   rM   rP   r   r   r   r   r   r   r  r&  r.  r>  rV  rY  rp  r  r  r  r  rh   r9   r7   <module>r     s   < < < < < < < < 6 6 6 6 6 6 6 6 3 3 3 3 3 3 3 3 4 4 4 4 4 4 Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q  Q ! ! ! ! ! !  4 4 4 4 4 4 4 4 4 4 4 4 % % % % % % % % > > > > > > > > > >- - -h h h     /6 /6 /6fX X X     n n n  M M M4)U )U )UV      # # #* "\ "\ "\L!E !E !EF	# 	# 	# 8r 8r 8rt DV DV DVL CB CB CBJ 3t 3t 3tjv v v v vr9   