B
    Iba                 @   s   d dl Z d dl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 d dlmZ dZd	ZG d
d deZG dd deZdd ZdS )    N)	ModelFormValidationErrorModelMultipleChoiceField)gettext_lazy)forms)models_const)	BreakTime)TimeInterval))r
   )r   )r   )r   r   ))r   r   )   r   )   r   )   r   c                   sT  e Zd ZejeddZejeddZ	eje
ddZejeddZejeddZejeddZejeddZejeddZejeddZejeddZejed	d
dZejedejdZejedejdZ fddZdd Zdd Zdd Zdd Zdd Zdd Z dd Z! fdd Z"d( fd"d#	Z#d$d% Z$G d&d' d'Z%  Z&S ))NormalTimeIntervalFormr   )choicesinitialtimeInterval_field_checkOut)labelZtimeInterval_field_checkInStartZtimeInterval_field_checkInEndZ timeInterval_field_checkOutStartZtimeInterval_field_checkOutEndZtimeInterval_field_breakTimeF)r   requiredZ#timeInterval_field_firstHalfOutTime)r   r   Z#timeInterval_field_secondHalfInTimec                s  t t| j|| | jrtddd }| jj jddd}d	dd |D | j
d	 _tj|| jj}|tj| jjd
 }|tj| jjd
 }|tj| jjd
 }|tj| jjd
 }	|tj| jjd
 }
|d| j
d _| |  j| j
d _| |  j| j
d _|d| j
d _| |  j| j
d _|d| j
d _|	 |  j| j
d _|	d| j
d _|
 |  j| j
d _|
d| j
d _d S )Ni  r   idT)Zflat,c             S   s   g | ]}t |qS  )str).0bkr   r   <G:\easytimepro\master/mysite/att\forms\timeinterval_forms.py
<listcomp>0   s    z3NormalTimeIntervalForm.__init__.<locals>.<listcomp>
off_period)minutesz%H:%M:%Sout_timeout_time_cross_daysbegin_in_cross_daysbegin_inend_in_cross_daysend_inbegin_out_cross_days	begin_outend_out_cross_daysend_out)superr   __init__instancedatetimedate
break_timeallZvalues_listjoinfieldsr   combinein_time	timedeltadurationin_ahead_marginin_above_marginout_ahead_marginout_above_marginstrftimedays)selfargskwargscurbkscheck_in	check_outr#   r%   r'   r)   )	__class__r   r   r+   +   s*    zNormalTimeIntervalForm.__init__c             C   s\   | j dd }| j dd}|d kr(d S tjtddd |}|tjt|d7 }|S )Nr    r!   r   i  r   )r<   )cleaned_datapopr-   r3   r.   r5   int)r=   rC   
cross_daysr   r   r   clean_out_timeB   s    z%NormalTimeIntervalForm.clean_out_timec             C   s   | j dd }| j dd }| j dd }|d ks:|d kr>dS tjtddd |}tjtddd |}|tjt|d7 }||  d }|S )	Nr4   r#   r"   r   i  r   )r<   <   )	rE   getrF   r-   r3   r.   r5   rG   total_seconds)r=   rB   
setup_timerH   r#   marginr   r   r   clean_in_ahead_marginK   s    z,NormalTimeIntervalForm.clean_in_ahead_marginc             C   s   | j dd }| j dd }| j dd }|d ks:|d kr>dS tjtddd |}tjtddd |}|tjt|d7 }||  d }|S )	Nr4   r%   r$   r   i  r   )r<   rJ   )	rE   rK   rF   r-   r3   r.   r5   rG   rL   )r=   rB   rM   rH   r%   rN   r   r   r   clean_in_above_marginW   s    z,NormalTimeIntervalForm.clean_in_above_marginc             C   s   | j dd }| j dd }| j dd}|d ks:|d kr>dS tjtddd |}|tjt|d7 }||  d }|S )	Nr    r'   r&   r   i  r   )r<   rJ   )	rE   rK   rF   r-   r3   r.   r5   rG   rL   )r=   rC   rM   rH   r'   rN   r   r   r   clean_out_ahead_marginc   s    z-NormalTimeIntervalForm.clean_out_ahead_marginc             C   s   | j dd }| j dd }| j dd}|d ks:|d kr>dS tjtddd |}|tjt|d7 }||  d }|S )	Nr    r)   r(   r   i  r   )r<   rJ   )	rE   rK   rF   r-   r3   r.   r5   rG   rL   )r=   rC   rM   rH   r)   rN   r   r   r   clean_out_above_marginn   s    z-NormalTimeIntervalForm.clean_out_above_marginc             C   sb   | j dd }| j dd }|d kr(dS |rZtjtddd |}||  d }nd}|S )Nr4   r    r   i  r   rJ   )rE   rK   rF   r-   r3   r.   rL   )r=   rB   rC   r6   r   r   r   clean_work_time_durationy   s    z/NormalTimeIntervalForm.clean_work_time_durationc             C   s   | j dd}|S )Nwork_time_durationr   )rE   rK   )r=   r6   r   r   r   clean_duration   s    z%NormalTimeIntervalForm.clean_durationc                sV  t  ddd }t j || jd }|t j| jd d }| }| |  j}|dkr| | jd   k r| jd   k r|k rq nnttd	n|dkr| | jd k rZt j || jd }t j 	d
d}| | jd k rt j || jd }n0| | jd kr>| jd | krLt j || jd }n| jd | k r>| | jd kr| jd | krt j || jd }n:| jd | k r>t  ddd }t j || jd }nd| | kr| jd | jd k rt j || jd }n&t  ddd }t j || jd }||k rJnttd	q| | jd krt  ddd }t j || jd }t j 	dd}| | jd k r
| jd | krt j || jd }n(| jd | k rpt j || jd }nf| | jd krp| jd | krHt j || jd }n(| jd | k rpt j || jd }||k r|nttd	nttd	n t
t|  }	t|	d }
t|	d }t|	d }t|	d }t|	d }|
dk rttd|dk rttd|dk r$ttd|dk r:ttd|dk rPttdt|	d }t|	d }|r||
ks|dk rttdt|	d }t|	d }|r||ks|dk rttdyt|	d }W n   d}Y nX yt|	d }W n   d}Y nX t|	d  }|dk s:|dk s:|dk rJttd!d"d#t|	 |	S )$Ni  r   r4   r6   )r   r   first_half_out_timesecond_half_in_timeinvalid_timez2019-01-01 00:00:00z%Y-%m-%d %H:%M:%Sr   z2019-01-02 00:00:00r7   r8   r9   r:   rT   Z&timeInterval_error_invalidCheckInStartZ$timeInterval_error_invalidCheckInEndZ'timeInterval_error_invalidCheckOutStartZ%timeInterval_error_invalidCheckOutEndZ"timeInterval_error_invalidCheckOutearly_inmin_early_inZ!timeInterval_error_invalidEarlyInlate_outmin_late_outZ!timeInterval_error_invalidLateOut
allow_lateallow_leave_earlyavailable_intervalZ'breakTime_validationError_invalidNumberz-1)code)r-   r.   r3   rE   r5   timer<   r   _strptimer*   r   cleanrG   data_pre_check)r=   r@   rB   rC   check_out_timerH   first_half_timesecond_half_out_timecur2rE   Zin_aheadZin_aboveZ	out_aheadZ	out_abover6   rY   rZ   r[   r\   r]   r^   r_   )rD   r   r   rd      s    2












zNormalTimeIntervalForm.cleanTc                s   t t| j|d}|S )N)commit)r*   r   save)r=   rj   obj)rD   r   r   rk      s    zNormalTimeIntervalForm.savec             C   sJ   | j dd }|r8dd t|dD }tjj|d}t| jd| d S )Nr   c             S   s   g | ]}|d krt |qS ) )rG   )r   ir   r   r   r      s    z4NormalTimeIntervalForm._save_m2m.<locals>.<listcomp>r   )id__inr/   )	rE   rK   r   splitr   objectsfiltersetattrr,   )r=   r/   r   r   r   	_save_m2m   s
    z NormalTimeIntervalForm._save_m2mc               @   s   e Zd ZeZdZdS )zNormalTimeIntervalForm.Meta)&aliasr4   r!   r    r"   r#   r$   r%   r&   r'   r(   r)   r7   r8   r9   r:   
day_changerT   r6   work_dayrY   rZ   r[   r\   overtime_lvovertime_lv1overtime_lv2overtime_lv3in_requiredout_requiredr]   r^   available_interval_typer_   func_keyr   rV   rW   N)__name__
__module____qualname__r	   modelr2   r   r   r   r   Meta  s   r   )T)'r   r   r   r   ChoiceFieldABOVE_CROSS_DAYSr!   	TimeFieldrb   r    AHEAD_CROSS_DAYSr"   r#   r$   r%   r&   r'   r(   r)   Z	CharFieldr   mcZFIRST_HALF_OUT_TIMErV   ZSECOND_HALF_IN_TIMErW   r+   rI   rO   rP   rQ   rR   rS   rU   rd   rk   rt   r   __classcell__r   r   )rD   r   r      s6   



	mr   c                   sl   e Zd ZejeddZejeddZ	 fddZ
dd Zd	d
 Zdd Z fddZG dd dZ  ZS )FlexibleTimeIntervalFormr   )r   r   )r   r   c                s   t t| j|| | jr|tddd }tj|| jj}|tj| jj	d }|
d| jd _| |  j| jd _d S )Ni  r   )r   z%H:%M:%Sr    r!   )r*   r   r+   r,   r-   r.   r3   r4   r5   r6   r;   r2   r   r<   )r=   r>   r?   r@   rB   rC   )rD   r   r   r+     s    z!FlexibleTimeIntervalForm.__init__c             C   s   | j dd }| j dd }| j dd }|d ks:|d kr>dS tjtddd |}tjtddd |}|tjt|d7 }||  d }|S )	Nr4   r    r!   r   i  r   )r<   rJ   )	rE   rK   rF   r-   r3   r.   r5   rG   rL   )r=   r4   r    rH   rB   rC   rN   r   r   r   rU     s    z'FlexibleTimeIntervalForm.clean_durationc             C   s   | j ddS )Nr6   r   )rE   rK   )r=   r   r   r   rP   )  s    z.FlexibleTimeIntervalForm.clean_in_above_marginc             C   s   | j ddS )Nr6   r   )rE   rK   )r=   r   r   r   rQ   ,  s    z/FlexibleTimeIntervalForm.clean_out_ahead_marginc                s  t  ddd }t j || jd }|t j| jd d }| }| |  j}|dkr| | jd   k r| jd   k r|k rq nnttd	n|dkr| | jd k rZt j || jd }t j 	d
d}| | jd k rt j || jd }n0| | jd kr>| jd | krLt j || jd }n| jd | k r>| | jd kr| jd | krt j || jd }n:| jd | k r>t  ddd }t j || jd }nd| | kr| jd | jd k rt j || jd }n&t  ddd }t j || jd }||k rJnttd	q| | jd krt  ddd }t j || jd }t j 	dd}| | jd k r
| jd | krt j || jd }n(| jd | k rpt j || jd }nf| | jd krp| jd | krHt j || jd }n(| jd | k rpt j || jd }||k r|nttd	nttd	n t
t|  }	t|	d }
t|	d }||
ks|dk rtdtd j|
dt|	 |	S )Ni  r   r4   r6   )r   r   rV   rW   rX   z2019-01-01 00:00:00z%Y-%m-%d %H:%M:%Sr   z2019-01-02 00:00:00rT   z%sz.timeInterval_error_flexibleWorkTime_{duration})r6   )r-   r.   r3   rE   r5   ra   r<   r   rb   rc   r*   r   rd   rG   formatre   )r=   r@   rB   rC   rf   rH   rg   rh   ri   rE   r6   Z	work_time)rD   r   r   rd   /  sx    2


(

zFlexibleTimeIntervalForm.cleanc               @   s   e Zd ZeZdZdS )zFlexibleTimeIntervalForm.Meta)ru   r4   r    r!   r6   rw   Z	work_typer8   r9   rv   rT   r|   r}   r[   r\   rx   ry   rz   r{   r~   r_   r   Zmultiple_punchrV   rW   N)r   r   r   r	   r   r2   r   r   r   r   r   |  s   r   )r   r   r   r   r   rb   r    r   r   r!   r+   rU   rP   rQ   rd   r   r   r   r   )rD   r   r     s   	Mr   c             C   s6  d}t | dd}t | dd}t | dd}t|||dk rPttdt|||fr||  krr|ksn ttd| d	d }|r2| d
|}tj||}|tj	| dd }||kr|tj	dd }dd t
|dD }tjj|d}g }	x|D ]}
t|j|j|j|
jj|
jj}t|j|j|j|
jj|
jjtj	|
jd }||k rt|j|j|j|
jj|
jj}t|j|j|j|
jj|
jjtj	|
jd }||k r|tj	dd7 }||k s||krttddd|
jid|
j||f}|	| qW t|	}|	r2|dkr2xt|D ]}|	| }|d }xt||D ]}|	| }|d |d   kr|d ksn |d |d   kr|d ksn |d |d   kr|d ksn |d |d   kr|d kr`n n ttdd|d |d ddq`W q@W d S )Nz%H:%M:%Sry   r   rz   r{   r   Z'timeInterval_error_invalidOvertimeValueZ,timeInterval_error_invalidCheckOvertimeLevelr   r4   rT   )r   r   )r<   c             S   s   g | ]}|d krt |qS )rm   )rG   )r   rn   r   r   r   r     s    z"data_pre_check.<locals>.<listcomp>r   )ro   z6The break time %(n)s not in valid time interval periodz-1n)r`   Zparamsr   z0the_breaktime_%(n1)s_and_%(n2)s_has_intersection)Zn1Zn2)floatrK   minr   rb   anyr;   r-   rc   r5   r   rp   r   rq   rr   ZyearZmonthZdayZperiod_startZhourZminuteZ
end_marginru   appendlenrange)dataZTIME_FORMATZot1Zot2Zot3Z
breaktimesZsch_stZsch_etrA   Zbk_listr   Zbk_sZbk_eitemZitsrn   Zpitemtmr   r   r   re     sf    



LNre   )r-   Zdjango.formsr   r   r   Zdjango.utils.translationr   rb   Zmysite.adminr   Z
mysite.attr   r   Z!mysite.att.models.model_breaktimer   Z$mysite.att.models.model_timeintervalr	   r   r   r   r   re   r   r   r   r   <module>   s    wx