
    X@	g,                        d dl mZ 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 d d	lZd d
lmZ d dlmZ d Zd Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z ee
e          d             Z ee
e          d             Z ee
e          d             Z ee
e          d              Z  ee
e          d!             Z! ee
e          d"             Z"d	S )#    )models)	timedeltatime   )ContentTypeRestrictedFileFieldchoice)post_delete)
connection)receiverN)
MEDIA_ROOT)	unidecodec                 R    | j         fd|                                 D             S )z8Renvoie les lignes du curseur sous forme de dictionnairec                 ^    g | ])}t          t          d  D             |                    *S )c                     g | ]
}|d          S )r    ).0cols     %/opt/e-colle/accueil/models/devoir.py
<listcomp>z+dictfetchall.<locals>.<listcomp>.<listcomp>   s    )))S#a&)))    )dictzip)r   rowdescs     r   r   z dictfetchall.<locals>.<listcomp>   sJ        	S))D)))3//00  r   )descriptionfetchall)cursorr   s    @r   dictfetchallr      s@    D   ??$$   r   c                 Z    d                     d t          |           D                       S )N c              3   4   K   | ]}t          d           V  dS )>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Nr   )r   is     r   	<genexpr>z"texte_aleatoire.<locals>.<genexpr>   s,      ss`a6Z[[ssssssr   )joinrange)tailles    r   texte_aleatoirer)      s-    77ssejkqererssssssr   c                       e Zd ZddZd ZdS )DevoirManagerNc                    |jd}t          j                    5 }|                    ||j        |j        |j        j        f           t          |          }d d d            n# 1 swxY w Y   nod}t          j                    5 }|                    ||j        |j        |j        j        |j        f           t          |          }d d d            n# 1 swxY w Y   |S )Na`  SELECT dv.id, dv.numero, dv.date_affichage, m.nom, m.couleur, dv.detail, dv.a_rendre_jour, dv.a_rendre_heure, dv.fichier enonce, dv.corrige            , dr.fichier copie, dc.fichier copie_corrige            FROM accueil_devoir dv             INNER JOIN accueil_matiere m            ON dv.matiere_id = m.id            LEFT JOIN accueil_devoirrendu dr            ON dr.devoir_id = dv.id AND dr.eleve_id = %s            LEFT JOIN accueil_devoircorrige dc            ON dc.devoir_id = dv.id AND dc.eleve_id = %s            WHERE dv.classe_id = %s            ORDER BY dv.a_rendre_jour DESC, dv.a_rendre_heure DESCa  SELECT dv.id, dv.numero, dv.date_affichage, dv.detail, dv.a_rendre_jour, dv.a_rendre_heure, dv.fichier enonce, dv.corrige            , dr.fichier copie, dc.fichier copie_corrige            FROM accueil_devoir dv             LEFT JOIN accueil_devoirrendu dr            ON dr.devoir_id = dv.id AND dr.eleve_id = %s            LEFT JOIN accueil_devoircorrige dc            ON dc.devoir_id = dv.id AND dc.eleve_id = %s            WHERE dv.classe_id = %s AND dv.matiere_id = %s            ORDER BY dv.a_rendre_jour DESC, dv.a_rendre_heure DESCr   r   executepkclasser   )selfelevematiererequeter   devoirss         r   devoirsEleveszDevoirManager.devoirsEleves   sI   ?
DG "$$ /w%(ELO'LMMM&v../ / / / / / / / / / / / / / /DG "$$ /w%(ELOWZ'XYYY&v../ / / / / / / / / / / / / / / s$   =A!!A%(A%ACCCc                     d}t          j                    5 }|                    ||j        |j        |j        j        f           t          |          }d d d            n# 1 swxY w Y   |S )Na  SELECT e.id, u.first_name, u.last_name, dr.fichier copie, dr.date_rendu, dc.fichier copiecorrige, dc.commentaire        FROM accueil_user u        INNER JOIN accueil_eleve e        ON u.eleve_id = e.id        LEFT JOIN accueil_devoirrendu dr        ON dr.eleve_id = e.id AND dr.devoir_id = %s        LEFT JOIN accueil_devoircorrige dc        ON dc.eleve_id = e.id AND dc.devoir_id = %s        WHERE e.classe_id = %s         ORDER BY u.last_name, u.first_namer-   )r1   devoirr4   r   copiess        r   devoirsrenduszDevoirManager.devoirsrendus7   s    	,    	.Fw	69fm>N'OPPP%f--	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. s   =AA#&A#N)__name__
__module____qualname__r6   r:   r   r   r   r+   r+      s7           >    r   r+   c                   $   e Zd Zd Zd Z ej        ddej                  Z ej        ddej                  Z	 ej
        d e e ed	d
           ed	d
                                        Z ej        ddd          Z ej        d          Z ej        ddd          Z ej        dddd  ed          D                       Z ededddgd          Z ededddgd          Z e            Z G d d          Zd ZdS )Devoirc                 h    t           j                            ddt          d          z   dz             S )Nr8   devoir_   .pdfospathr&   r)   instancefilenames     r   update_namezDevoir.update_nameH   s*    w||Hi/"2E2E&E&NOOOr   c                 h    t           j                            ddt          d          z   dz             S )Nr8   corrige_rC   rD   rE   rH   s     r   update_name_corrigezDevoir.update_name_corrigeJ   s*    w||Hj?23F3F&F&OPPPr   Classeclassedevoirrelated_name	on_deleteMatierematieredevoir   Numéror   e   verbose_namechoices   DétailsTrY   nullblankauto_now_addu   à rendre le    àc                 Z    g | ](}t          |d d           d                    |          f)S )r   z{:2d}h00)r   format)r   hs     r   r   zDevoir.<listcomp>R   sf      ^V  ^V  ^V  GH_cdefghi_j_jlvl}l}~  mA  mA  _B  ^V  ^V  ^Vr      )rY   r]   r^   rZ   u   Énoncé(pdf)application/pdf@KL rY   	upload_tor]   r^   content_typesmax_upload_size   Corrigé(pdf)c                       e Zd ZdgZg dZdS )Devoir.Meta-numero)numeror0   r3   Nr<   r=   r>   orderingunique_togetherr   r   r   Metarn   W            ;999r   rt   c                 N    d                     | j        | j        | j                  S )Nu   Devoir n°{} / {} / {})rc   rp   r0   r3   r1   s    r   __str__zDevoir.__str__[   s     '..t{DKVVVr   N)r<   r=   r>   rK   rN   r   
ForeignKeyPROTECTr0   r3   PositiveSmallIntegerFieldlistr   r'   rp   	TextFielddetailDateTimeFielddate_affichage	DateFielda_rendre_jour	TimeFielda_rendre_heurer   fichiercorriger+   objectsrt   rx   r   r   r   r@   r@   G   s,       P P PQ Q QVx^fn]]]FVyoPVP^___G-V-9PTPTUXUXY^Y^_`adYeYefkfklmnqfrfrUsUsPtPtuuuFV:4dKKKF)V)>>>N$F$/W[\\\M%V%4tT  ^V  ^V  LQ  LQ  RT  LU  LU  ^V  ^V  ^V  W  W  WN,,/T_eipt  EV  DW  ip  q  q  qG,,/Tgmqx|  M^  L_  qx  y  y  yGmooG: : : : : : : :W W W W Wr   r@   c                       e Zd Zd Z ej        ddej                  Z ej        ddej                  Z ej	        d          Z
 ed	eddd
gd          Z G d d          Zd ZdS )DevoirRenduc           
          t           j                            dd                    t	          | j        j        j                  t	          | j        j        j                  t          d                              S )Nr8   zrendu_{}_{}_{}.pdfrC   
rF   rG   r&   rc   r   r2   user	last_name
first_namer)   rH   s     r   rK   zDevoirRendu.update_name_   s    w||H&:&A&A)HNL_LiBjBjluv~  wE  wJ  wU  mV  mV  Xg  hj  Xk  Xk  'l  'l  m  m  	mr   ElevedevoireleverQ   r@   rendusT)auto_nowFichier(pdf)rf   逖 rh   c                       e Zd ZdgZddgZdS )DevoirRendu.Meta
date_rendur2   r8   Nrq   r   r   r   rt   r   f   s         >"H-r   rt   c                 B    d                     | j        | j                  S )NzCopie de {} au {}rc   r2   r8   rw   s    r   rx   zDevoirRendu.__str__j   s    "))$*dkBBBr   N)r<   r=   r>   rK   r   ry   CASCADEr2   r8   r   r   r   r   rt   rx   r   r   r   r   r   ^   s        m m mFgmQWQ_```EVxfn]]]F%%666J,,.S^dhos  DU  CV  hp  q  q  qG. . . . . . . .C C C C Cr   r   c                       e Zd ZddZ ej        ddej                  Z ej        ddej                  Z ej	        dd	d	
          Z
 eded	d	dgd          Z G d d          Zd ZdS )DevoirCorriger!   c           
          t           j                            dd                    t	          | j        j        j                  t	          | j        j        j                  t          d                              S )Nr8   zcopiecorrige_{}_{}_{}.pdfrC   r   rH   s     r   rK   zDevoirCorrige.update_namen   s    w||H&A&H&HS[SaSfSpIqIqs|  ~F  ~L  ~Q  ~\  t]  t]  _n  oq  _r  _r  's  's  t  t  	tr   r   devoircorrigeeleverQ   r@   corrigesCommentaireTr\   r   rf   r   rh   c                       e Zd ZddgZddgZdS )DevoirCorrige.Metaeleve__user__last_nameeleve__user__first_namer2   r8   Nrq   r   r   r   rt   r   u   s#        ,.GH"H-r   rt   c                 B    d                     | j        | j                  S )Nu%   Copie corrigée de {} au devoir n°{}r   rw   s    r   rx   zDevoirCorrige.__str__y   s    6==dj$+VVVr   N)r!   )r<   r=   r>   rK   r   ry   rz   r2   r8   r}   commentairer   r   rt   rx   r   r   r   r   r   m   s        t t t tFg6JX^XfgggEVx
PVP^___F"&"4dSSSK,,.S^dhos  DU  CV  hp  q  q  qG. . . . . . . .W W W W Wr   r   c                      e Zd Zd Zd Z ej        ddej                  Z ej        ddej                  Z	 ej
        d e e ed	d
           ed	d
                                        Z ej        ddd          Z ej        d          Z ededddgd          Z ededddgd          Z G d d          ZdS )TDc                 h    t           j                            ddt          d          z   dz             S )NtdrC   rD   rE   rH   s     r   rK   zTD.update_name}   s*    w||D$)<)<"<v"EFFFr   c                 h    t           j                            ddt          d          z   dz             S )Nr   rM   rC   rD   rE   rH   s     r   rN   zTD.update_name_corrige   s*    w||D*r/B/B"BV"KLLLr   rO   classetdrQ   rT   	matieretdrV   r   rW   rX   r[   Tr\   r_   r   rf   rg   rh   rl   c                       e Zd ZdgZg dZdS )TD.Metaro   r0   r3   rp   Nrq   r   r   r   rt   r      ru   r   rt   N)r<   r=   r>   rK   rN   r   ry   rz   r0   r3   r{   r|   r   r'   rp   r}   r~   r   r   r   r   r   rt   r   r   r   r   r   |   s       G G GM M MVxZ&.YYYFf	{V^\\\G-V-9PTPTUXUXY^Y^_`adYeYefkfklmnqfrfrUsUsPtPtuuuFV:4dKKKF)V)>>>N,,.S^dhos  DU  CV  ho  p  p  pG,,/Tgmqx|  M^  L_  qx  y  y  yG: : : : : : : : : :r   r   c                   l   e Zd Zd Z ej        ddej                  Z ej        ddej                  Z ej	        d e
 e edd	           edd	                              
          Z ej        ddd          Z ej        d          Z ededddgd          Z G d d          ZdS )Coursc                 h    t           j                            ddt          d          z   dz             S )NcoursrC   rD   rE   rH   s     r   rK   zCours.update_name   s*    w||GWr/B/B%BV%KLLLr   rO   classecoursrQ   rT   matierecoursrV   r   rW   rX   r[   Tr\   r_   r   rf   r   rh   c                       e Zd ZdgZg dZdS )
Cours.Metaro   r   Nrq   r   r   r   rt   r      ru   r   rt   N)r<   r=   r>   rK   r   ry   rz   r0   r3   r{   r|   r   r'   rp   r}   r~   r   r   r   r   rt   r   r   r   r   r      s?       M M MVx]V^\\\Ff	~PVP^___G-V-9PTPTUXUXY^Y^_`adYeYefkfklmnqfrfrUsUsPtPtuuuFV:4dKKKF)V)>>>N,,.S^dhos  DU  CV  hp  q  q  qG: : : : : : : : : :r   r   c                       e Zd Zd Z ej        ddej                  Z ej        ddej                  Z ej	        ddd	          Z
 ej        d
dd          Z ej        d          Z ededddgd          Z G d d          ZdS )Documentc                 h    t           j                            ddt          d          z   dz             S )NdocrC   rD   rE   rH   s     r   rK   zDocument.update_name   s*    w||E5?2+>+>#>#GHHHr   rO   classedocumentrQ   rT   matieredocumentP   T)
max_lengthr]   r^   r[   r\   r_   r   rf   r   rh   c                       e Zd ZdgZg dZdS )Document.Metaz-date_affichage)r0   r3   titreNrq   r   r   r   rt   r      s!        %&888r   rt   N)r<   r=   r>   rK   r   ry   rz   r0   r3   	CharFieldr   r}   r~   r   r   r   r   rt   r   r   r   r   r      s       I I IVx5EPVP^___Ff	7HSYSabbbGF4@@@EV:4dKKKF)V)>>>N,,.S^dhos  DU  CV  hp  q  q  qG9 9 9 9 9 9 9 9 9 9r   r   )senderc                    |j         rn|j         j        bt          j                            t
          |j         j                  }t          j                            |          rt          j        |           |j        rp|j        j        ft          j                            t
          |j        j                  }t          j                            |          rt          j        |           d S d S d S d S r;   )	r   namerF   rG   r&   r   isfileremover   r   rI   kwargsr   s       r   devoir_post_delete_functionr      s     H,1=Z(8(=>>7>>'"" 	Ig H,1=Z(8(=>>7>>'"" 	Ig ==	 	r   c                     |j         rp|j         j        ft          j                            t
          |j         j                  }t          j                            |          rt          j        |           d S d S d S d S r;   r   r   rF   rG   r&   r   r   r   r   s       r   cours_post_delete_functionr      y     H,1=Z(8(=>>7>>'"" 	Ig ==	 	r   c                     |j         rp|j         j        ft          j                            t
          |j         j                  }t          j                            |          rt          j        |           d S d S d S d S r;   r   r   s       r   td_post_delete_functionr      r   r   c                     |j         rp|j         j        ft          j                            t
          |j         j                  }t          j                            |          rt          j        |           d S d S d S d S r;   r   r   s       r   document_post_delete_functionr      r   r   c                     |j         rp|j         j        ft          j                            t
          |j         j                  }t          j                            |          rt          j        |           d S d S d S d S r;   r   r   s       r    devoirrendu_post_delete_functionr      r   r   c                     |j         rp|j         j        ft          j                            t
          |j         j                  }t          j                            |          rt          j        |           d S d S d S d S r;   r   r   s       r   "devoircorrige_post_delete_functionr      r   r   )#	django.dbr   datetimer   r   contenttyper   randomr	   django.db.models.signalsr
   r   django.dispatchr   rF   ecolle.settingsr   r   r   r)   Managerr+   Modelr@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s0         $ $ $ $ $ $ $ $ 7 7 7 7 7 7       0 0 0 0 0 0             $ $ $ $ $ $ 				 & & & & & &        t t t. . . . .FN . . .`W W W W WV\ W W W.C C C C C&, C C CW W W W WFL W W W: : : : : : : :": : : : :FL : : :9 9 9 9 9v| 9 9 9 
+f%%%  &% 
+e$$$  %$ 
+b!!!  "! 
+h'''  (' 
+k***  +* 
+m,,,  -,  r   