o
    Dj,                     @   s  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d Zdd ZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZee
eddd  Zee
edd!d" Zee
edd#d$ Zee
edd%d& Z ee
edd'd( Z!ee
edd)d* Z"d	S )+    )models)	timedeltatime   )ContentTypeRestrictedFileFieldchoice)post_delete)
connection)receiverN)
MEDIA_ROOT)	unidecodec                    s   | j   fdd|  D S )z8Renvoie les lignes du curseur sous forme de dictionnairec                    s$   g | ]}t td d  D |qS )c                 S   s   g | ]}|d  qS )r    ).0colr   r   //home/reyt/e-colle-new/accueil/models/devoir.py
<listcomp>   s    z+dictfetchall.<locals>.<listcomp>.<listcomp>)dictzip)r   rowdescr   r   r      s    z dictfetchall.<locals>.<listcomp>)descriptionfetchall)cursorr   r   r   dictfetchall   s   
r   c                 C   s   d dd t| D S )N c                 s   s    | ]}t d V  qdS )>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Nr   )r   ir   r   r   	<genexpr>   s    z"texte_aleatoire.<locals>.<genexpr>)joinrange)tailler   r   r   texte_aleatoire   s   r#   c                   @   s   e Zd ZdddZdd ZdS )DevoirManagerNc                 C   s   |d u r.d}t  }|||j|j|jjf t|}W d    |S 1 s'w   Y  |S d}t  }|||j|j|jj|jf t|}W d    |S 1 sSw   Y  |S )NaA  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.numero 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.numero DESCr
   r   executepkclasser   )selfelevematiererequeter   devoirsr   r   r   devoirsEleves   s"   



	

zDevoirManager.devoirsElevesc                 C   sT   d}t  }|||j|j|jjf t|}W d    |S 1 s#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%   )r)   devoirr,   r   copiesr   r   r   devoirsrendus7   s   



zDevoirManager.devoirsrendusN)__name__
__module____qualname__r.   r1   r   r   r   r   r$      s    
r$   c                   @   s   e Zd Zdd Zdd ZejddejdZejdd	ejdZ	ej
d
eeeddedddZejddddZejddZejddddZejddddd edD dZededddgddZededddgddZe ZG dd dZdd  Zd!S )"Devoirc                 C      t jddtd d S )Nr/   devoir_   .pdfospathr    r#   instancefilenamer   r   r   update_nameH      zDevoir.update_namec                 C   r7   )Nr/   corrige_r9   r:   r;   r>   r   r   r   update_name_corrigeJ   rB   zDevoir.update_name_corrigeClasseclassedevoirrelated_name	on_deleteMatierematieredevoir   Numéror   e   verbose_namechoices   DétailsTrO   nullblankauto_now_addu   à rendre le    àc                 C   s"   g | ]}t |d d d|fqS )r   z{:2d}h00)r   format)r   hr   r   r   r   R   s   " zDevoir.<listcomp>   )rO   rS   rT   rP   u   Énoncé(pdf)application/pdf@KL rO   	upload_torS   rT   content_typesmax_upload_size   Corrigé(pdf)c                   @      e Zd ZdgZg dZdS )zDevoir.Meta-numero)numeror(   r+   Nr3   r4   r5   orderingunique_togetherr   r   r   r   MetaW       rh   c                 C   s   d | j| j| jS )Nu   Devoir n°{} / {} / {})rX   rd   r(   r+   r)   r   r   r   __str__[   s   zDevoir.__str__N)r3   r4   r5   rA   rD   r   
ForeignKeyPROTECTr(   r+   PositiveSmallIntegerFieldlistr   r!   rd   	TextFielddetailDateTimeFielddate_affichage	DateFielda_rendre_jour	TimeFielda_rendre_heurer   fichiercorriger$   objectsrh   rk   r   r   r   r   r6   G   s    $ r6   c                   @   sp   e Zd Zdd ZejddejdZejddejdZej	dd	Z
ed
edddgddZG dd dZdd ZdS )DevoirRenduc              	   C   0   t jddt| jjjt| jjjt	dS )Nr/   zrendu_{}_{}_{}.pdfr9   
r<   r=   r    rX   r   r*   user	last_name
first_namer#   r>   r   r   r   rA   _      0zDevoirRendu.update_nameElevedevoireleverG   r6   rendusT)auto_nowFichier(pdf)r[   逖 r]   c                   @   s   e Zd ZdgZddgZdS )zDevoirRendu.Meta
date_rendur*   r/   Nre   r   r   r   r   rh   f   ri   rh   c                 C      d | j| jS )NzCopie de {} au {}rX   r*   r/   rj   r   r   r   rk   j      zDevoirRendu.__str__N)r3   r4   r5   rA   r   rl   CASCADEr*   r/   rr   r   r   rx   rh   rk   r   r   r   r   r{   ^   s    r{   c                   @   sv   e Zd ZdddZejddejdZejddejdZej	d	d
d
dZ
eded
d
dgddZG dd dZdd ZdS )DevoirCorriger   c              	   C   r|   )Nr/   zcopiecorrige_{}_{}_{}.pdfr9   r}   r>   r   r   r   rA   n   r   zDevoirCorrige.update_namer   devoircorrigeeleverG   r6   corrigesCommentaireTrR   r   r[   r   r]   c                   @   s   e Zd ZddgZddgZdS )zDevoirCorrige.Metaeleve__user__last_nameeleve__user__first_namer*   r/   Nre   r   r   r   r   rh   u   s    rh   c                 C   r   )Nu%   Copie corrigée de {} au devoir n°{}r   rj   r   r   r   rk   y   r   zDevoirCorrige.__str__N)r   )r3   r4   r5   rA   r   rl   rm   r*   r/   rp   commentairer   rx   rh   rk   r   r   r   r   r   m   s    
r   c                   @   s   e Zd Zdd Zdd ZejddejdZejdd	ejdZ	ej
d
eeeddedddZejddddZejddZededddgddZededddgddZG dd dZdS )TDc                 C      t jddtd d S )Ntdr9   r:   r;   r>   r   r   r   rA   }   rB   zTD.update_namec                 C   r7   )Nr   rC   r9   r:   r;   r>   r   r   r   rD      rB   zTD.update_name_corrigerE   classetdrG   rJ   	matieretdrL   r   rM   rN   rQ   TrR   rU   r   r[   r\   r]   ra   c                   @   rb   )zTD.Metarc   r(   r+   rd   Nre   r   r   r   r   rh      ri   rh   N)r3   r4   r5   rA   rD   r   rl   rm   r(   r+   rn   ro   r   r!   rd   rp   rq   rr   rs   r   rx   ry   rh   r   r   r   r   r   |   s    $r   c                   @   s   e Zd Zdd ZejddejdZejddejdZej	de
eed	d
ed	d
dZejddddZejddZededddgddZG dd dZdS )Coursc                 C   r   )Ncoursr9   r:   r;   r>   r   r   r   rA      rB   zCours.update_namerE   classecoursrG   rJ   matierecoursrL   r   rM   rN   rQ   TrR   rU   r   r[   r   r]   c                   @   rb   )z
Cours.Metarc   r   Nre   r   r   r   r   rh      ri   rh   N)r3   r4   r5   rA   r   rl   rm   r(   r+   rn   ro   r   r!   rd   rp   rq   rr   rs   r   rx   rh   r   r   r   r   r      s    $r   c                   @   s   e Zd Zdd ZejddejdZejddejdZej	dd	d	d
Z
ejdd	d	dZejd	dZeded	d	dgddZG dd dZdS )Documentc                 C   r   )Ndocr9   r:   r;   r>   r   r   r   rA      rB   zDocument.update_namerE   classedocumentrG   rJ   matieredocumentP   T)
max_lengthrS   rT   rQ   rR   rU   r   r[   r   r]   c                   @   rb   )zDocument.Metaz-date_affichage)r(   r+   titreNre   r   r   r   r   rh      ri   rh   N)r3   r4   r5   rA   r   rl   rm   r(   r+   	CharFieldr   rp   rq   rr   rs   r   rx   rh   r   r   r   r   r      s    r   )senderc                 K   s   |j r|j jd urtjt|j j}tj|rt| |jr<|jjd ur>tjt|jj}tj|r@t| d S d S d S d S r2   )	rx   namer<   r=   r    r   isfileremovery   r   r?   kwargsrx   r   r   r   devoir_post_delete_function   s   
r   c                 K   J   |j r|j jd ur!tjt|j j}tj|r#t| d S d S d S d S r2   rx   r   r<   r=   r    r   r   r   r   r   r   r   cours_post_delete_function      r   c                 K   r   r2   r   r   r   r   r   td_post_delete_function   r   r   c                 K   r   r2   r   r   r   r   r   document_post_delete_function   r   r   c                 K   r   r2   r   r   r   r   r    devoirrendu_post_delete_function   r   r   c                 K   r   r2   r   r   r   r   r   "devoircorrige_post_delete_function   r   r   )#	django.dbr   datetimer   r   contenttyper   randomr   django.db.models.signalsr	   r
   django.dispatchr   r<   ecolle.settingsr   r   r   r#   Managerr$   Modelr6   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s>    0











