o
    Bh=                     @   sV   d dl mZ d dlmZ d dlmZ d dlmZmZ ddlm	Z	 G dd dej
Zd	S )
    )forms)ValidationError)timezone)datetime	timedelta   )OvertimeRequestc                       s   e Zd Z fddZejddZejejddddd	d
Z	ejejdddddd
Z
ejejdddddddZG dd dZ fddZd fdd	Z  ZS )OvertimeRequestFormc                    s   | dd | _t j|i | | jr| j| j_t  }|jdd}|j	dkr5|j|j
d ddd}n
|j|j	d dd}tjdd| | d	d
| jd _d S )Nemployeer   day   yearmonthr   r   r   dateform-control)typeclassminmaxattrs)popr
   super__init__instancer   nowr   replacer   r   r   	DateInput	isoformatfieldswidget)selfargskwargstodaycurrent_month_firstprev_month_first	__class__ %/var/www/html/wtlms/overtime/forms.pyr      s    

zOvertimeRequestForm.__init__z0Select a date from the current or previous month)	help_texttimer   )r   r   r   z/Enter the time you started work (after 5:00 PM))r#   r.   zEEnter the time you finished work (can be next day for overnight work)   )r   rows)Provide a reason for the overtime requestF)r#   r.   requiredc                   @   s(   e Zd ZeZg dZddddddZdS )zOvertimeRequestForm.Meta)r   
start_timeend_timereasonsupporting_documentzSelect the date of overtimezEnter the time you started workz Enter the time you finished workr2   z1Upload any supporting documentation (PDF, images)N)__name__
__module____qualname__r   modelr"   
help_textsr,   r,   r,   r-   Meta4   s    
r=   c                    s  t   }|d}|d}|d}| jstdt|||gs$|S t  }||kr4tddi|j	dd}|j
|j
krG|j|jkrGn0||k rq|j
dkr\|j	|jd ddd	}n
|j	|j
d dd
}||k rptddintddi||krtddiddlm} ||| jj}	|	r|S | dk r|jdk rtdditjj| j|g ddj| jr| jjnd d}
|
 rtd|S )Nr   r4   r5   zEmployee is requiredz(Cannot request overtime for future datesr   r   r   r   r   zFOvertime can only be requested for the current month or previous monthz)End time cannot be the same as start timer   )Holiday      z5Start time must be after regular work hours (5:00 PM))PENDINGHR_APPROVEDREG_APPROVED)r
   r   
status__in)pkz9You already have an active overtime request for this date)r   cleangetr
   r   allr   r   r   r   r   r   overtime.modelsr>   
is_holidaycompanyweekdayhourr   objectsfilterexcluder   rE   exists)r$   cleaned_datar   r4   r5   current_dater(   r)   r>   rJ   overlappingr*   r,   r-   rF   ?   sR   





zOvertimeRequestForm.cleanTc                    s,   t  jdd}| jr| j|_|r|  |S )NF)commit)r   saver
   )r$   rU   r   r*   r,   r-   rV      s   zOvertimeRequestForm.save)T)r8   r9   r:   r   r   	DateFieldr   	TimeField	TimeInputr4   r5   	CharFieldTextarear6   r=   rF   rV   __classcell__r,   r,   r*   r-   r	      s*    Mr	   N)djangor   django.core.exceptionsr   django.utilsr   r   r   modelsr   	ModelFormr	   r,   r,   r,   r-   <module>   s    