o
    Dj                     @   s   d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZ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dS )    )forms)SelectDateWidget)MaxMin)MatiereClasseSemaine	RamassageColleur)date	timedeltadatetime)ValidationErrorc                  C   s   zPt jtd} t jtd}t| d j| d jd  | d jd d dtdd } |d tdd }t|j|jd  |jd d dtdd }W | |fS  t	yx   t
 }t|j|jd  |jd d dtdd  } }Y | |fS w )u   Renvoie les mois min et max (+1 mois) des semaines de colle. Renvoie le mois courant en double si aucune semaine n'est définielundi
lundi__min      days
lundi__max#   )r   objects	aggregater   r   r   yearmonthr   	Exceptiontoday)moisMinmoisMaxhui r    +/home/reyt/e-colle-new/secretariat/forms.pymois	   s   8.2r"   c                 C   s:   | t dd7 } t| j| jd  | jd d dt dd S )u   ajoute un mois à momentr   r   r   )r   r   r   r   )momentr    r    r!   incremente_mois   s   ,r$   c                   @   sD   e Zd Zejdedd edD de dZ	dd Z
d	d
 ZdS )RamassageFormzjusqu'au (inclus)c                 C   s   g | ]}t  j| d  qS )r   )r   r   r   ).0ir    r    r!   
<listcomp>   s    zRamassageForm.<listcomp>   )years)labelwidgetinitialc                 C   sN   | j r#tjj| j d d rtdtjj| j d d r%tddS dS )uK   Vérifie qu'il n'existe pas de ramassage d'un mois identique ou postérieurmoisFin)r.   u+   Il existe déjà un ramassage pour ce mois.)moisFin__gtu4   Il existe déjà un ramassage postérieur à ce moisN)cleaned_datar	   r   filterexistsr   selfr    r    r!   clean   s   zRamassageForm.cleanc                 C   s   t j| jd  dS )u>   Sauvegarde du ramassage (avec création du décompte associé)r.   N)r	   r   createOrUpdater0   r3   r    r    r!   save&   s   zRamassageForm.saveN)__name__
__module____qualname__r   	DateFieldr   ranger   nowr.   r5   r7   r    r    r    r!   r%      s    (r%   c                       s   e Zd Z fddZ  ZS )MoisFormc                    s6  t  j|i | g d}d|j|j  |j |j d }dg| }dg| }t|D ]Q}	t|j|j|	 d d  |j|	 d d d d}
t|j|j|	 d  |j|	 d d dtdd }|
d||
j |
jf||	< |d||j |jf||	< q+tj	||d d d| j
d	< tj	||d d d| j
d
< d S )N) Janvieru   FévrierMarsAvrilMaiJuinJuilletu   Août	SeptembreOctobreNovembreu	   Décembrer   r   Fr   z{} {}r   )choicesr-   r   r   )super__init__r   r   r<   r   r   formatr   ChoiceFieldfields)r4   r   r   argskwargs
LISTE_MOISnbMoisListeMoisMinListeMoisMaxr'   	moisDebutr.   	__class__r    r!   rK   +   s    

24 zMoisForm.__init__)r8   r9   r:   rK   __classcell__r    r    rV   r!   r>   *   s    r>   c                   @   s@   e Zd ZejdejddddZejde	jddddZ
dS )MatiereClasseSelectForm   MatièrenomTNr+   querysetrequiredempty_labelr   )r8   r9   r:   r   ModelChoiceFieldr   r   order_bymatierer   classer    r    r    r!   rY   9   s    rY   c                   @   sZ   e Zd ZejdejddddZejde	jddddZ
ejdejdd	d
dZd
S )ColleurSelectFormrZ   r[   FToutesr\   r   r
   user__last_nameuser__first_nameN)r+   r]   r_   )r8   r9   r:   r   r`   r   r   ra   rb   r   rc   r
   colleurr    r    r    r!   rd   =   s    rd   c                   @   s   e Zd ZejdejddddZejde	jddddZ
z"ejdZejeded dd	Zejedee d
  dd	ZW n ey_   ejej dddZejej dddZY nw dd ZdS )MatiereClasseSemaineSelectFormrZ   r[   TNr\   r   r   r   )r]   r_   r-   r^   r   )r]   r_   r^   c                 C   s<   | j d | j d j vrtd| j d | j d ddd S )Nrb   rc   u6   la classe %(classe)s n'a pas pour matière %(matiere)s)rc   rb   )params)r0   matieresallr   r3   r    r    r!   r5   M   s   z$MatiereClasseSemaineSelectForm.clean)r8   r9   r:   r   r`   r   r   ra   rb   r   rc   r   querysemincountsemaxr   noner5   r    r    r    r!   ri   B   s    "ri   c                   @   s   e Zd Zejej dejddZ	e
j Zzejeded dZejedeeed  dZW d
S  eyI   ejedd	Zejedd	ZY d
S w )SelectClasseSemaineFormclassesT)r]   r+   r,   r^   u   semaine de départr   )r]   r+   r-   zsemaine de finr   )r]   r+   N)r8   r9   r:   r   ModelMultipleChoiceFieldr   r   rl   CheckboxSelectMultiplers   r   rm   r`   rn   lenrp   r   r    r    r    r!   rr   Q   s    
"rr   N)djangor   django.forms.widgetsr   django.db.modelsr   r   accueil.modelsr   r   r   r	   r
   r   r   r   django.core.exceptionsr   r"   r$   Formr%   r>   rY   rd   ri   rr   r    r    r    r!   <module>   s   