o
    ÓÅDjl  ã                   @   s   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 d dlmZ d dlmZ d dlmZ d dlm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G dd„ dejƒZG dd„ dejƒZG dd„ dejƒZ dS )é    )Úforms)	ÚColleurÚGroupeÚMatiereÚDestinataireÚMessageÚClasseÚEleveÚUserÚProf)ÚCustomMultipleChoiceField)Úvalidate_password)ÚValidationError)ÚQc                   @   s(   e Zd ZejddZejdejdZdS )ÚConnexionFormÚidentifiant)ÚlabelúMot de passe)r   ÚwidgetN)Ú__name__Ú
__module__Ú__qualname__r   Ú	CharFieldÚusernameÚPasswordInputÚpassword© r   r   ú'/home/reyt/e-colle-new/accueil/forms.pyr   	   s
    
ÿr   c                       ó&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚGroupeMultipleChoiceFieldé   c                    s   t ƒ j|i |¤Ž || _d S ©N)ÚsuperÚ__init__Úsemestre)Úselfr$   ÚargsÚkwargs©Ú	__class__r   r   r#      s   
z"GroupeMultipleChoiceField.__init__c                 O   sV   | j dkrd |j¡d dd„ |j ¡ D ƒ¡ S d |j¡d dd„ |j ¡ D ƒ¡ S )Nr    z{}: ú/c                 S   ó   g | ]
}t |jj ¡ ƒ‘qS r   ©ÚstrÚuserÚ	last_nameÚupper©Ú.0Úelever   r   r   Ú
<listcomp>   ó    zAGroupeMultipleChoiceField.label_from_instance.<locals>.<listcomp>c                 S   r+   r   r,   r1   r   r   r   r4      r5   )r$   ÚformatÚnomÚjoinÚgroupeeleveÚallÚgroupe2eleve)r%   Úgrouper&   r'   r   r   r   Úlabel_from_instance   s   
&&z-GroupeMultipleChoiceField.label_from_instance)r    ©r   r   r   r#   r=   Ú__classcell__r   r   r(   r   r      s    r   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚColleurFormc                    sŠ   |  d¡| _tƒ j|i |¤Ž tjddd| jd< tjddd| jd< tjddd	d
| jd< tjdd	d| jd< tjddd	d
| jd< d S )NÚpkÚNomé   )r   Ú
max_lengthr/   u   PrÃ©nomÚ
first_namer   F©r   rD   Úrequiredr   Úactif©r   rG   Ú	is_activezemail(facultatif)é2   Úemail)	ÚpoprA   r"   r#   r   r   ÚfieldsÚBooleanFieldÚ
EmailField)r%   r&   r'   r(   r   r   r#      s   zColleurForm.__init__)r   r   r   r#   r?   r   r   r(   r   r@      s    r@   c                   @   s:   e Zd ZejddddZG dd„ dƒZdd„ Zd	d
„ ZdS )ÚUserFormr   rC   FrF   c                   @   ó   e Zd ZeZddgZdS )zUserForm.MetarL   ÚcssN©r   r   r   r
   ÚmodelrN   r   r   r   r   ÚMeta&   ó    rV   c                 C   ó   | j d }|rt|ƒ |S ©NÚ
motdepasse©Úcleaned_datar   ©r%   Údatar   r   r   Úclean_motdepasse*   ó   
zUserForm.clean_motdepassec                 C   s,   | j }| jd r| | jd ¡ | ¡  d S rY   )Úinstancer\   Úset_passwordÚsave)r%   r.   r   r   r   rc   0   s   
zUserForm.saveN)	r   r   r   r   r   rZ   rV   r_   rc   r   r   r   r   rQ   $   s
    rQ   c                       r   )ÚColleurMultipleChoiceFieldFc                    s"   t ƒ j|i |¤Ž || _|| _d S r!   )r"   r#   ÚclasseÚmatiere)r%   re   rf   r&   r'   r(   r   r   r#   8   s   
z#ColleurMultipleChoiceField.__init__c              	   O   s@   t |ƒ}| js|dd dd„ tjj|| jdD ƒ¡ d 7 }|S )Nz (z et c                 S   s   g | ]}t |ƒ ¡ ‘qS r   )r-   Útitle)r2   Úmatr   r   r   r4   @   s    zBColleurMultipleChoiceField.label_from_instance.<locals>.<listcomp>©Úmatiereprof__colleurÚmatiereprof__classeú))r-   rf   r8   r   ÚobjectsÚfilterre   )r%   Úcolleurr&   r'   Úchainer   r   r   r=   =   s   .z.ColleurMultipleChoiceField.label_from_instance)Fr>   r   r   r(   r   rd   7   s    rd   c                       ó:   e Zd ZG dd„ dƒZ‡ fdd„Zdd„ Zdd„ Z‡  ZS )	ÚUserProfprincipalFormc                   @   rR   )zUserProfprincipalForm.MetarL   rS   NrT   r   r   r   r   rV   D   rW   rV   c              
      s   t ƒ j|i |¤Ž || _tjdtjdd| jd< |D ]L}t|d |j	 
¡ ¡tjj|dd d¡j|jd	tjdd
| jd |j¡< t|d |j	 
¡ ¡tjj|dd d¡j|jd	tjdd
| jd |j¡< qtjddd„ tjj|d ¡ D ƒtjdttjj|ddjdddƒd| jd< d S )Nr   F©r   r   rG   rZ   z$Droits de modifier les groupes de {}T)Úcolleurprof__classeÚuser__is_activer.   ©rA   )r   Úquerysetr   rG   ú	{}_groupez&Droits de modifier le colloscope de {}ú{}_colloscopeõ   Masquer les rangs des Ã©lÃ¨vesc                 S   ó"   g | ]}|j d  |j|j¡f‘qS ©z{}/{}©rA   r6   re   rf   ©r2   Úxr   r   r   r4   O   ó   " z2UserProfprincipalForm.__init__.<locals>.<listcomp>©ro   ©ro   Ú	cacherangrA   ©Úflat©r   Úchoicesr   rG   Úinitialrƒ   )r"   r#   Úclassesr   r   r   rN   rd   r6   r7   r0   r   rm   rn   Úselect_relatedÚexcluderA   ÚCheckboxSelectMultipleÚMultipleChoiceFieldr   r:   ÚlistÚvalues_list)r%   ro   r‰   r&   r'   re   r(   r   r   r#   H   s   JL&ÿzUserProfprincipalForm.__init__c                 C   rX   rY   r[   r]   r   r   r   r_   R   r`   z&UserProfprincipalForm.clean_motdepassec                 C   sL  | j }| jd r| | jd ¡ | ¡  | jD ]L}|j ¡ D ]D}tjj	||d}|r?|d j
| jd |j¡ v r?|jdd n|jdd |r\|d j
| jd |j¡ v r\|jdd	 q|jdd	 qq| jd
 D ]}tjj	|j
|djdd qittjj	|j
djdddƒtdd„ | jd
 D ƒƒ D ]}tjj	|j
|djdd q”d S )NrZ   )re   rf   r   rx   T)ÚmodifgroupeFry   )Úmodifcolloscoperƒ   ©ro   rA   ©rƒ   r   rA   r„   c                 s   ó    | ]}t |ƒV  qd S r!   ©Úintr~   r   r   r   Ú	<genexpr>j   ó   € z-UserProfprincipalForm.save.<locals>.<genexpr>)ra   r\   rb   rc   r‰   Úmatieresr:   r   rm   rn   ro   r6   rA   ÚupdateÚsetr   )r%   r.   re   rf   Úprofr   r   r   rc   X   s&   

  ÷
:ÿzUserProfprincipalForm.save©r   r   r   rV   r#   r_   rc   r?   r   r   r(   r   rr   C   s
    
rr   c                       rq   )	ÚUserProfFormc                   @   rR   )zUserProfForm.MetarL   rS   NrT   r   r   r   r   rV   n   rW   rV   c              
      s|   t ƒ j|i |¤Ž tjdtjdd| jd< tjddd„ tjj	|d 
¡ D ƒtjdttjj	|d	d
jdd	dƒd| jd< d S )Nr   Frs   rZ   rz   c                 S   r{   r|   r}   r~   r   r   r   r4   u   r€   z)UserProfForm.__init__.<locals>.<listcomp>r   Tr‚   rA   r„   r†   rƒ   )r"   r#   r   r   r   rN   r   r   rm   rn   r:   rŒ   rŽ   r   )r%   ro   r&   r'   r(   r   r   r#   r   s
   &ÿzUserProfForm.__init__c                 C   rX   rY   r[   r]   r   r   r   r_   x   r`   zUserProfForm.clean_motdepassec                 C   s¬   | j }| jd r| | jd ¡ | ¡  | jd D ]}tjj|j|djdd qt	tjj|jdj
dddƒt	d	d
„ | jd D ƒƒ D ]}tjj|j|djdd qDd S )NrZ   rƒ   r’   Tr“   r   rA   r„   c                 s   r”   r!   r•   r~   r   r   r   r—   …   r˜   z$UserProfForm.save.<locals>.<genexpr>F)ra   r\   rb   rc   r   rm   rn   ro   rš   r›   r   )r%   r.   rœ   r   r   r   rc   ~   s   
:ÿzUserProfForm.saver   r   r   r(   r   rž   m   s
    rž   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚSelectMessageFormc                    sf   || _ tƒ j|i |¤Ž tj t|ddt|dB ¡ ¡  d¡}t	|dt
jd| jd< d | jd _d S )NT)ÚauteurÚ	hasAuteur)Úmessagerecu__userz-date)rw   rG   r   Úmessage)r.   r"   r#   r   rm   rn   r   ÚdistinctÚorder_byr   r   rŒ   rN   Úempty_label)r%   r.   r&   r'   Úqueryr(   r   r   r#   Š   s
   (zSelectMessageForm.__init__c                 O   sx   | j d D ]4}|j| jkr|j ¡ s| ¡  qd|_| ¡  qtj	j
|| jd ¡  tj	j
|djs9|js9| ¡  qdS )uL   si le formulaire est valide on efface les message/destinataires nÃ©cessairesr£   F©r£   r.   )r£   N)r\   r    r.   Úmessagerecur:   Údeleter¡   rc   r   rm   rn   Úexists)r%   r&   r'   r£   r   r   r   rc   ‘   s   


€özSelectMessageForm.save)r   r   r   r#   rc   r?   r   r   r(   r   rŸ   ‰   s    rŸ   c                       s>   e Zd ZG dd„ dƒZdd„ Z‡ fdd„Z‡ fdd„Z‡  ZS )	ÚReponseFormc                   @   ó   e Zd ZeZg d¢ZdS )zReponseForm.Meta©ÚtitreÚcorpsÚpjN©r   r   r   r   rU   rN   r   r   r   r   rV       rW   rV   c                 C   s   d|  ¡  dd¡ d S )Nú>Ú
z
>)ÚstripÚreplace)r%   r£   r   r   r   Úformat_reponse¤   s   zReponseForm.format_reponsec                    sš   t ƒ j|i |¤Ž || _|| _|| _tjddd| jd< ddi| jd j_	d|j
 | jd _d	d
i| jd j_	|  |j¡| jd _dddœ| jd j_	d S )NÚDestinatairesFrI   ÚdestinataireÚdisabledTzRe: r¯   ÚsizerK   r°   é<   é   ©ÚcolsÚrows)r"   r#   r£   Úatousr.   r   r   rN   r   Úattrsr¯   rˆ   r·   r°   )r%   r£   rÁ   r.   r&   r'   r(   r   r   r#   §   s   zReponseForm.__init__c                    sJ   t ƒ  ¡  ˆ jstˆ jjˆ jd ¡  d S tj ‡ fdd„ˆ jD ƒ¡ d S )N©r.   r£   c                    s(   g | ]}|j ˆ j krtˆ j|j d ‘qS )r¨   )r.   r   ra   )r2   r¹   ©r%   r   r   r4   ¸   s   ( z$ReponseForm.save.<locals>.<listcomp>)	r"   rc   rÁ   r   r£   r    ra   rm   Úbulk_createrÄ   r(   rÄ   r   rc   ³   s   
 zReponseForm.save)r   r   r   rV   r·   r#   rc   r?   r   r   r(   r   r¬   Ÿ   s
    r¬   c                       sB   e Zd ZG dd„ dƒZ‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )	Ú
EcrireFormc                   @   r­   )zEcrireForm.Metar®   Nr²   r   r   r   r   rV   ¼   rW   rV   c                    sX  t ƒ j|i |¤Ž g | _d| _|| _|jrw|jrwtjddd| j	d< tjddd| j	d< |jj
 ¡ }|jj ¡ }|jj ¡ }|D ]1}g }g }	d}
|j|d ¡ }d}|rjtjj|d	j|jjd
 ¡  d¡}ntjj||d ¡  d¡}t|d|tjdd| j	d |j¡< | d |j¡ }
tjddd| j	d |j¡< | d |j¡ }tjddd| j	d |j¡< | d |j¡ }tjj|j|dD ]V}tjt|ƒdd| j	d |j|j¡< |	 | d |j|j¡ ¡ tjj||ddj|jjd
 d¡ d¡}t|d|tjdd| j	d |j|j¡< | | d |j|j¡ ¡ qÅ|jr•tjddd| j	d |j¡< tjj|d d¡ ¡ }t d|tjdd| j	d |j¡< tjddd| j	d  |j¡< tjj|d! d"¡ ¡ }t d#|tjdd| j	d$ |j¡< | j	d |j¡ | j	d% |j¡< | j	d |j¡ | j	d& |j¡< njtjd'dd| j	d% |j¡< tjj|d d¡ ¡ }t d|tjdd| j	d& |j¡< | j	d% |j¡ | j	d |j¡< | j	d& |j¡ | j	d |j¡< | j	d% |j¡ | j	d  |j¡< | j	d& |j¡ | j	d$ |j¡< tjd(dd| j	d) |j¡< t!jj|d d¡}tj"|tjdd| j	d* |j¡< |	r/t#|	|ƒnd}| j |||
||| d% |j¡ | d& |j¡ | d |j¡ | d |j¡ | d  |j¡ | d$ |j¡ | d) |j¡ | d* |j¡ f¡ qBnm|j$r¢|j$j%r¢|j$j%}|j ¡ }g }g }	d}
d}tjj||d ¡  d¡}t|d|tjdd| j	d |j¡< t|d|tjdd| j	d |j¡< | d |j¡ }
tjddd| j	d |j¡< | d |j¡ }tjddd| j	d |j¡< | d |j¡ }|D ]Q}tjt|ƒdd| j	d |j|j¡< |	 | d |j|j¡ ¡ tjj||dd d¡ d¡}t|d|tjdd| j	d |j|j¡< | | d |j|j¡ ¡ qö|jrÁtjddd| j	d |j¡< tjj|d d¡ ¡ }t d|tjdd| j	d |j¡< tjddd| j	d  |j¡< tjj|d! d"¡ ¡ }t d#|tjdd| j	d$ |j¡< | j	d |j¡ | j	d% |j¡< | j	d |j¡ | j	d& |j¡< njtjd'dd| j	d% |j¡< tjj|d d¡ ¡ }t d|tjdd| j	d& |j¡< | j	d% |j¡ | j	d |j¡< | j	d& |j¡ | j	d |j¡< | j	d% |j¡ | j	d  |j¡< | j	d& |j¡ | j	d$ |j¡< tjd(dd| j	d) |j¡< t!jj|d d¡}tj"|tjdd| j	d* |j¡< |	r[t#|	|ƒnd}| j |||
||| d% |j¡ | d& |j¡ | d |j¡ | d |j¡ | d  |j¡ | d$ |j¡ | d) |j¡ | d* |j¡ f¡ nB|j&dks®|j&dkräd| _tjd+dd| j	d,< tjd-dd| j	d.< tjd/dd| j	d0< t'j ¡ }|D ]}g }g }	d}
d}tjj|d	 ¡  d¡}t|d|tjdd| j	d |j¡< | d |j¡ }
tjddd| j	d |j¡< | d |j¡ }tjddd| j	d |j¡< | d |j¡ }|j ¡ D ]R}tj|j( )¡ dd| j	d |j|j¡< |	 | d |j|j¡ ¡ tjj||dd d¡ d¡}t|d|tjdd| j	d |j|j¡< | | d |j|j¡ ¡ q7|jrtjddd| j	d |j¡< tjj|d d¡ ¡ }t d|tjdd| j	d |j¡< tjddd| j	d  |j¡< tjj|d! d"¡ ¡ }t d#|tjdd| j	d$ |j¡< | j	d |j¡ | j	d% |j¡< | j	d |j¡ | j	d& |j¡< njtjd'dd| j	d% |j¡< tjj|d d¡ ¡ }t d|tjdd| j	d& |j¡< | j	d% |j¡ | j	d |j¡< | j	d& |j¡ | j	d |j¡< | j	d% |j¡ | j	d  |j¡< | j	d& |j¡ | j	d$ |j¡< tjd(dd| j	d) |j¡< t!jj|d d¡}tj"|tjdd| j	d* |j¡< |	rt#|	|ƒnd}| j |||
||| d% |j¡ | d& |j¡ | d |j¡ | d |j¡ | d  |j¡ | d$ |j¡ | d) |j¡ | d* |j¡ f¡ qÖt*| jƒ| _+| j+d | _,|j$r÷d}n| -¡ }| j| jjd u |d d#  |d@ | _.| _/d1d2i| j	d3 j0_1d| j	d3 _2d4d5d6œ| j	d7 j0_1d S )8Nr   õ   SecrÃ©tariatFrI   ÚsecretÚadministrateurÚadmin)re   )rt   rv   Úuser__last_name)rt   Úcolleurprof__matiere__in)rw   r   rG   zclasseprof_{}ÚProfszmatiereprof_{}ÚColleurszcolleurs_{}ri   zmatiere_{}_{}T)r‰   r™   ru   r.   zclassematiere_{}_{}u   Ã‰lÃ¨ves(groupe/S1)zmatieregroupeS1_{})Úgroupeeleve__classeÚgroupeeleve__userr    zclassegroupeS1_{}u   Ã‰lÃ¨ves(groupe/S2)zmatieregroupeS2_{})Úgroupe2eleve__classeÚgroupe2eleve__useré   zclassegroupeS2_{}zmatieregroupe_{}zclassegroupe_{}u   Ã‰lÃ¨ves(groupe)u   Ã‰lÃ¨ves(solo)zmatiereeleve_{}zclasseeleve_{}zTous les colleursÚtouscolleurszTous les professeursÚ	tousprofsu   Tous les Ã©tudiantsÚ
touselevesr»   rK   r¯   r¼   r½   r¾   r°   )3r"   r#   ÚchampsÚadminsecretr.   ro   rJ   r   rO   rN   r‰   r:   Úcolleurprofr™   rn   r«   r   rm   r‹   rA   r¤   r¥   rd   rŒ   r6   r   r-   ÚappendrŠ   Ú	semestresr   Úprefetch_relatedr   r	   ÚModelMultipleChoiceFieldÚzipr3   re   r   r   r7   rg   ÚlenÚcolspanÚcolspansubmitÚcountÚrowspanÚrester   rÂ   rG   )r%   r.   r&   r'   r‰   Úclassesprofr™   re   ÚlistematieresÚlistecolleursÚ
listeprofsÚmatieresprofrœ   r§   ro   rf   Úquery2Ú	query2bisÚquery3ÚcolleursÚnbr(   r   r   r#   À   s6  
&"$*&   "      H8ÿÕ-
""$&   "      H8
ÿ

"&&   "      H8
ÿ,zEcrireForm.__init__c                    s\  t ƒ  ¡  tƒ | _d } }}| j ¡ D ]\}}| jjdks%| jjdkrw|dkr@|du r@d}|  jdd„ tj	j
ddD ƒO  _|d	kr]|du r]|s]d}|  jd
d„ tj	j
ddD ƒO  _|dkrv|du rvd}|  jdd„ tj	 ¡ D ƒO  _nD| jjd ur»|dkrœ|du rœ| jjd urœ|  jdd„ tj	j
ddD ƒO  _|dkr»|du r»| jjd ur»|  jdd„ tj	j
ddD ƒO  _| d¡d }|dksÌ|dkrÙ|sÙ|  jdd„ |D ƒO  _q|dksá|dkrõ|sõ|  jdd„ tj	j
|dD ƒO  _q|dkr|s|  jdd„ tj	j
|dD ƒO  _q|dkr#|s#|  jdd„ |D ƒO  _q| js,td ƒ‚d S )!NFrÇ   rÊ   rÔ   Tc                 S   ó   h | ]}|j ’qS r   ©r.   ©r2   ro   r   r   r   Ú	<setcomp>f  ó    z#EcrireForm.clean.<locals>.<setcomp>)ru   rÕ   c                 S   s   h | ]}|j j’qS r   )ro   r.   )r2   rœ   r   r   r   rò   i  s    )Úcolleur__user__is_activerÖ   c                 S   rï   r   rð   r1   r   r   r   rò   l  ró   c                 S   ó   h | ]}|’qS r   r   r~   r   r   r   rò   o  ó    )r   rÈ   c                 S   rõ   r   r   r~   r   r   r   rò   q  rö   Ú_r   ÚclassematiereÚ
classeprofc                 S   rï   r   rð   rñ   r   r   r   rò   t  ró   ÚclassegroupeÚclassegroupeS1c                 S   rï   r   rð   r1   r   r   r   rò   v  ró   )Ú
groupe__inÚclassegroupeS2c                 S   rï   r   rð   r1   r   r   r   rò   x  ró   )Úgroupe2__inÚclasseelevec                 S   rï   r   rð   r1   r   r   r   rò   z  ró   z Il faut au moins un destinataire)r"   Úcleanr›   Údestinatairesr\   Úitemsr.   r   r   rm   rn   r   r	   r:   ro   r
   Úsplitr   )r%   rÔ   rÕ   rÖ   ÚkeyÚvalueÚcler(   r   r   r   ^  sB   
""€""$$€ÿzEcrireForm.cleanc                    sD   d  dd„ ˆ jD ƒ¡ˆ j_tƒ  ¡  tj ‡ fdd„ˆ jD ƒ¡ d S )Nz; c                 s   r”   r!   )r-   ©r2   Úpersonner   r   r   r—     r˜   z"EcrireForm.save.<locals>.<genexpr>c                    s   g | ]	}t |ˆ jd ‘qS )rÃ   )r   ra   r  rÄ   r   r   r4     s    z#EcrireForm.save.<locals>.<listcomp>)	r8   r  ra   Úlistedestinatairesr"   rc   r   rm   rÅ   rÄ   r(   rÄ   r   rc   ~  s   
 zEcrireForm.save)r   r   r   rV   r#   r   rc   r?   r   r   r(   r   rÆ   »   s      rÆ   N)!Údjangor   Úaccueil.modelsr   r   r   r   r   r   r	   r
   r   Úadministrateur.formsr   Ú'django.contrib.auth.password_validationr   Údjango.core.exceptionsr   Údjango.db.modelsr   ÚFormr   rÝ   r   r@   Ú	ModelFormrQ   rd   rr   rž   rŸ   r¬   rÆ   r   r   r   r   Ú<module>   s    ,*