B
    ca\                 @   s   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mZ d dlmZmZmZ d dlmZmZmZmZ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dS )    )models)gettext_lazy)base_choices)Employee)Transaction)	APP_LABEL)TimeIntervalLeaveHoliday)value_formatshort_date_formatshort_time_formatWEEKDAYvalue_format_mobilec               @   s*  e Zd ZejddddZejdddddZejdddddZejdddddZ	ejdddd	dZ
ejdddd
dZejdddddZejdddddZejdddddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d ZG d)d* d*Zd+S ),PayloadOvertime$   T)
max_lengthuniqueprimary_keyr   zNormal Work Time)defaultnullblank	help_textzNormal OvertimezWeekend OvertimezHoliday OvertimezOvertime Level 1zOvertime Level 2zOvertime Level 3zTotal Overtimec             C   s   t ||| jj| jj| jjS )N)r   payloadbasedurationwork_daywhole_day_duration)selfvalkey r    8G:\easytimepro\master/mysite/att\models\model_payload.py
deal_param   s    zPayloadOvertime.deal_paramc             C   s   t ||| jj| jj|S )N)r   r   r   r   )r   r   r   
company_idr    r    r!   deal_param_mobile_app    s    z%PayloadOvertime.deal_param_mobile_appc             C   s   | j s
dS | | j pddS )N r   overtime)	normal_wtr"   )r   r    r    r!   get_normal_wt_display#   s    z%PayloadOvertime.get_normal_wt_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r&   )	normal_otr"   )r   r    r    r!   get_normal_ot_display(   s    z%PayloadOvertime.get_normal_ot_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r&   )
weekend_otr"   )r   r    r    r!   get_weekend_ot_display-   s    z&PayloadOvertime.get_weekend_ot_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r&   )total_otr"   )r   r    r    r!   get_total_ot_display2   s    z$PayloadOvertime.get_total_ot_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r&   )
holiday_otr"   )r   r    r    r!   get_holiday_ot_display7   s    z&PayloadOvertime.get_holiday_ot_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r&   )ot_lv1r"   )r   r    r    r!   get_ot_lv1_display<   s    z"PayloadOvertime.get_ot_lv1_displayc             C   s   | j s
dS | | j pdd|S )Nr%   r   r&   )r1   r$   )r   r#   r    r    r!   get_ot_lv1_display_mobile_appA   s    z-PayloadOvertime.get_ot_lv1_display_mobile_appc             C   s   | j s
dS | | j pddS )Nr%   r   r&   )ot_lv2r"   )r   r    r    r!   get_ot_lv2_displayF   s    z"PayloadOvertime.get_ot_lv2_displayc             C   s   | j s
dS | | j pdd|S )Nr%   r   r&   )r4   r$   )r   r#   r    r    r!   get_ot_lv2_display_mobile_appK   s    z-PayloadOvertime.get_ot_lv2_display_mobile_appc             C   s   | j s
dS | | j pddS )Nr%   r   r&   )ot_lv3r"   )r   r    r    r!   get_ot_lv3_displayP   s    z"PayloadOvertime.get_ot_lv3_displayc             C   s   | j s
dS | | j pdd|S )Nr%   r   r&   )r7   r$   )r   r#   r    r    r!   get_ot_lv3_display_mobile_appU   s    z-PayloadOvertime.get_ot_lv3_display_mobile_appc             C   s   | j s
dS | | j pddS )Nr%   r   r&   )r-   r"   )r   r    r    r!   r.   Z   s    c               @   s   e Zd ZeZdS )zPayloadOvertime.MetaN)__name__
__module____qualname__r   	app_labelr    r    r    r!   Meta_   s   r>   N)r:   r;   r<   r   	CharFielduuidIntegerFieldr'   r)   r+   r/   r1   r4   r7   r-   r"   r$   r(   r*   r,   r.   r0   r2   r3   r5   r6   r8   r9   r>   r    r    r    r!   r      s0   r   c               @   s  e Zd ZejddddZejddddZejddddZej	ddddd	Z
ej	dddd
d	Zej	ddddZej	ddddd	Zej	ddddd	Zej	ddddd	Zej	ddddd	Zej	ddddd	Zej	ddddd	Zej	ddddd	Zej	ddddd	Zej	ddddd	ZdddddddddddddZdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Z d0d1 Z!d2d3 Z"G d4d5 d5Z#d6S )7PayloadBreakr   T)r   r   r   zValid break-out)r   r   r   zValid break-inr   zThe duration of break time)r   r   r   r   zbreak-in - break-out)r   r   r   zDuration - Taken DurationzTaken Duration - DurationzFor non auto deduct settingz%H:%Mz%I:%Mz%H:%M %pz%I:%M %pz%H:%M:%Sz%I:%M:%Sz%H:%M:%S %pz%I:%M:%S %pz%H%Mz%I%Mz%H%M%Sz%I%M%S)123456789101112c             C   s   t ||| jj| jj| jjS )N)r   r   r   r   r   )r   r   r   r    r    r!   r"      s    zPayloadBreak.deal_paramc             C   s   | j s
dS t| j S )Nr%   )	break_outr   )r   r    r    r!   get_break_out_display   s    z"PayloadBreak.get_break_out_displayc             C   s   | j s
dS t| j S )Nr%   )break_inr   )r   r    r    r!   get_break_in_display   s    z!PayloadBreak.get_break_in_displayc             C   s   | j s
dS | | j pddS )Nr%   r   late_in)later"   )r   r    r    r!   get_late_display   s    zPayloadBreak.get_late_displayc             C   s   | j s
dS | | j pddS )Nr%   r   	early_out)early_leaver"   )r   r    r    r!   get_early_leave_display   s    z$PayloadBreak.get_early_leave_displayc             C   s   | j s
dS | | j pddS )Nr%   r   absent)rY   r"   )r   r    r    r!   get_absent_display   s    zPayloadBreak.get_absent_displayc             C   s   | j s
dS | | j pddS )Nr%   r   
break_time)r   r"   )r   r    r    r!   get_duration_display   s    z!PayloadBreak.get_duration_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r[   )takenr"   )r   r    r    r!   get_taken_display   s    zPayloadBreak.get_taken_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r[   )actual_durationr"   )r   r    r    r!   get_actual_duration_display   s    z(PayloadBreak.get_actual_duration_displayc             C   s>   ddl m} | jsdS || jp dd| jj| jj| jjjjjS )Nr   )r   r%   r[   )	mysite.att.utilsr   r   r   r   emp
departmentcompanyid)r   r   r    r    r!   get_duration_display_mobile   s
    z(PayloadBreak.get_duration_display_mobilec             C   sT   | j s
dS ddlm} | jjjjj}||}|dd}| j	t
| }| j |S )Nr%   r   )
C_ATT_RULE
short_time   )rO   mysite.att.global_cacherg   r   rb   rc   rd   re   getSHORT_TIME_FORMATstrstrftime)r   rg   r#   report_settingrh   _formatr    r    r!   get_break_out_display_mobile   s    
z)PayloadBreak.get_break_out_display_mobilec             C   sT   | j s
dS ddlm} | jjjjj}||}|dd}| j	t
| }| j |S )Nr%   r   )rg   rh   ri   )rQ   rj   rg   r   rb   rc   rd   re   rk   rl   rm   rn   )r   rg   r#   ro   rh   rp   r    r    r!   get_break_in_display_mobile   s    
z(PayloadBreak.get_break_in_display_mobilec               @   s   e Zd ZeZdS )zPayloadBreak.MetaN)r:   r;   r<   r   r=   r    r    r    r!   r>      s   r>   N)$r:   r;   r<   r   r?   r@   DateTimeFieldrO   rQ   rA   r   r]   r_   Zearly_inrS   rT   rW   rY   Z	work_timer&   r+   r/   rl   r"   rP   rR   rU   rX   rZ   r\   r^   r`   rf   rq   rr   r>   r    r    r    r!   rB   c   sR   rB   c               @   s  e Zd ZejddddZejeejdZ	ej
eddddZejdddedZejeddejd	Zejed
dddZejeddddZejddddZejddddZejddZejeddddZejeddddZejddddZejddddZejddddZejddddZejddddZ ejddddZ!ejdddddZ"ejddddZ#ejddddZ$ejddddZ%ejddddZ&ejddddZ'ej(e)dddej*dZ+ej(e,dddej*dZ-ejdddddZ.ejddZ/ejddddZ0dddddddd d!d"d#d$d%d&d'd(d)d*d+d,Z1d-d.d/d0d1d2d3d4d5d6d7d8d9Z2d:d; Z3d<d= Z4d>d? Z5d@dA Z6dBdC Z7dDdE Z8dFdG Z9dHdI Z:dJdK Z;dLdM Z<dNdO Z=dPdQ Z>dRdS Z?dTdU Z@dVdW ZAdXdY ZBdZd[ ZCd\d] ZDd^d_ ZEd`da ZFdbdc ZGddde ZHdfdg ZIdhdi ZJdjdk ZKdldm ZLdndo ZMdpdq ZNdrds ZOdtdu ZPdvdw ZQdxdy ZRdzd{ ZSd|d} ZTd~d ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd ZdG dd dZedS )PayloadBaser   T)r   r   r   )	on_deleteZreport_column_attendanceDate)Zverbose_namer   r   r   )r   r   r   choices)r   r   ru   Zreport_column_checkInTimeZreport_column_checkOutTime)r   r   r   g      ?)r   Zreport_column_clockInTimeZreport_column_clockOutTimezDuty Worked + OT)r   r   r   r   F)r   r   db_constraintru   2   r%   )r   r   r   r   ri   z%Y-%m-%dz%Y/%m/%dz%Y.%m.%dz%d/%m/%Yz%d-%m-%Yz%m/%d/%Yz%m-%d-%Yz%y-%m-%dz%y/%m/%dz%d/%m/%yz%y.%m.%dz%Y%m%dz%Y%d%mz%m%d%Yz%d%m%Yz%y%m%dz%y%d%mz%m%d%yz%d%m%y)rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   Z13Z14Z15Z16Z17Z18Z19z%H:%Mz%I:%Mz%H:%M %pz%I:%M %pz%H:%M:%Sz%I:%M:%Sz%H:%M:%S %pz%I:%M:%S %pz%H%Mz%I%Mz%H%M%Sz%I%M%S)rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   c             C   s   t ||| j| j| jdS )N)r   )r   r   r   r   )r   r   r   r    r    r!   r"     s    zPayloadBase.deal_paramc             C   s   | j s
dS | | j pddS )Nr%   r   rS   )rT   r"   )r   r    r    r!   rU     s    zPayloadBase.get_late_displayc             C   s   | j s
dS | | j pddS )Nr%   r   rV   )rW   r"   )r   r    r    r!   rX   #  s    z#PayloadBase.get_early_leave_displayc             C   s   | j s
dS | | j pddS )Nr%   r   rY   )rY   r"   )r   r    r    r!   rZ   (  s    zPayloadBase.get_absent_displayc             C   s   | j s
dS | | j pddS )Nr%   r   leave)ry   r"   )r   r    r    r!   get_leave_display-  s    zPayloadBase.get_leave_displayc             C   s   | j s
dS t| j S )Nr%   )check_inr   )r   r    r    r!   get_check_in_display2  s    z PayloadBase.get_check_in_displayc             C   s   | j s
dS t| j S )Nr%   )att_dater   )r   r    r    r!   get_att_date_display7  s    z PayloadBase.get_att_date_displayc             C   s   | j s
dS t| j S )Nr%   )	check_outr   )r   r    r    r!   get_check_out_display<  s    z!PayloadBase.get_check_out_displayc             C   s   | j s
dS t| j S )Nr%   )clock_inr   )r   r    r    r!   get_clock_in_displayA  s    z PayloadBase.get_clock_in_displayc             C   s   | j s
dS t| j S )Nr%   )	clock_outr   )r   r    r    r!   get_clock_out_displayF  s    z!PayloadBase.get_clock_out_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r   )
total_timer"   )r   r    r    r!   get_total_time_displayK  s    z"PayloadBase.get_total_time_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r   )duty_workedr"   )r   r    r    r!   get_duty_worked_displayP  s    z#PayloadBase.get_duty_worked_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r   )r   r"   )r   r    r    r!   get_actual_worked_displayU  s    z%PayloadBase.get_actual_worked_displayc             C   s   | j s
dS | | j pddS )Nr%   r   unscheduled)r   r"   )r   r    r    r!   get_unscheduled_displayZ  s    z#PayloadBase.get_unscheduled_displayc             C   s   | j s
dS | | j pddS )Nr%   r   	remaining)r   r"   )r   r    r    r!   get_remaining_display_  s    z!PayloadBase.get_remaining_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r   )total_workedr"   )r   r    r    r!   get_total_worked_displayd  s    z$PayloadBase.get_total_worked_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r   )r   r"   )r   r    r    r!   r\   i  s    z PayloadBase.get_duration_displayc             C   s   | j s
dS | | j pddS )Nr%   r   r   )duty_durationr"   )r   r    r    r!   get_duty_duration_displayn  s    z%PayloadBase.get_duty_duration_displayc             C   s   | j S )N)r   )r   r    r    r!   get_work_day_displays  s    z PayloadBase.get_work_day_displayc             C   s   | j dd dkrdS dS )z4
        Check the validation of break time
        N   UNKWFT)Zbreak_time_id)r   r    r    r!   check_break_timev  s    zPayloadBase.check_break_timec             C   s   |   r| j S dS )Nr%   )r   r[   rP   )r   r    r    r!   get_break_out~  s    
zPayloadBase.get_break_outc             C   s   |   r| j S dS )Nr%   )r   r[   rR   )r   r    r    r!   get_break_in  s    
zPayloadBase.get_break_inc             C   s   |   r| j S dS )Nr%   )r   r[   r\   )r   r    r    r!   get_break_duration  s    
zPayloadBase.get_break_durationc             C   s   |   r| j S dS )Nr%   )r   r[   r`   )r   r    r    r!   get_actual_break  s    
zPayloadBase.get_actual_breakc             C   s   |   r| j S dS )Nr%   )r   r[   r^   )r   r    r    r!   get_taken_break  s    
zPayloadBase.get_taken_breakc             C   s   |   r| j S dS )Nr%   )r   r[   rU   )r   r    r    r!   get_break_late  s    
zPayloadBase.get_break_latec             C   s   |   r| j S dS )Nr%   )r   r[   rX   )r   r    r    r!   get_break_early_leave  s    
z!PayloadBase.get_break_early_leavec             C   s   |   r| j S dS )Nr%   )r   r[   rZ   )r   r    r    r!   get_break_absent  s    
zPayloadBase.get_break_absentc             C   s   | j dd dkrdS dS )z2
        Check the validation of overtime
        Nr   r   FT)Zovertime_id)r   r    r    r!   check_overtime  s    zPayloadBase.check_overtimec             C   s   |   r| j S dS )Nr%   )r   r&   r(   )r   r    r    r!   get_normal_wt  s    
zPayloadBase.get_normal_wtc             C   s   |   r| j S dS )Nr%   )r   r&   r*   )r   r    r    r!   get_normal_ot  s    
zPayloadBase.get_normal_otc             C   s   |   r| j S dS )Nr%   )r   r&   r,   )r   r    r    r!   get_weekend_ot  s    
zPayloadBase.get_weekend_otc             C   s   |   r| j S dS )Nr%   )r   r&   r0   )r   r    r    r!   get_holiday_ot  s    
zPayloadBase.get_holiday_otc             C   s   |   r| j S dS )Nr%   )r   r&   r.   )r   r    r    r!   get_total_ot  s    
zPayloadBase.get_total_otc             C   s   |   r| j S dS )Nr%   )r   r&   r2   )r   r    r    r!   
get_ot_lv1  s    
zPayloadBase.get_ot_lv1c             C   s   |   r| j S dS )Nr%   )r   r&   r5   )r   r    r    r!   
get_ot_lv2  s    
zPayloadBase.get_ot_lv2c             C   s   |   r| j S dS )Nr%   )r   r&   r8   )r   r    r    r!   
get_ot_lv3  s    
zPayloadBase.get_ot_lv3c             C   s   |   r| j| jjjS dS )Nr%   )r   r&   r3   rb   rd   re   )r   r    r    r!   get_ot_lv1_mobile_app  s    z!PayloadBase.get_ot_lv1_mobile_appc             C   s   |   r| j| jjjS dS )Nr%   )r   r&   r6   rb   rd   re   )r   r    r    r!   get_ot_lv2_mobile_app  s    z!PayloadBase.get_ot_lv2_mobile_appc             C   s   |   r| j| jjjS dS )Nr%   )r   r&   r9   rb   rd   re   )r   r    r    r!   get_ot_lv3_mobile_app  s    z!PayloadBase.get_ot_lv3_mobile_appc             C   s   | j dkrd}|S dS d S )Nr   ZHDr%   )half_day)r   ZhalfDayr    r    r!   get_half_day  s    
zPayloadBase.get_half_dayc             C   s   dS )NZAbsentr    )r   r    r    r!   display_absent  s    zPayloadBase.display_absentc             C   sR   | j s
dS ddlm} | jjjj}||}|dd}| jt	| }| j 
|S )Nr%   r   )rg   
short_dateri   )r}   rj   rg   rb   rc   rd   re   rk   SHORT_DATE_FORMATrm   rn   )r   rg   r#   ro   r   rp   r    r    r!   get_att_date_display_mobile  s    
z'PayloadBase.get_att_date_display_mobilec             C   s   |   r| j S dS )Nr%   )r   r[   rf   )r   r    r    r!   get_break_duration_mobile  s    
z%PayloadBase.get_break_duration_mobilec             C   sR   | j s
dS ddlm} | jjjj}||}|dd}| jt	| }| j 
|S )Nr%   r   )rg   rh   ri   )r   rj   rg   rb   rc   rd   re   rk   rl   rm   rn   )r   rg   r#   ro   rh   rp   r    r    r!   get_clock_in_display_mobile  s    
z'PayloadBase.get_clock_in_display_mobilec             C   s8   ddl m} | jsdS || jp dd| j| j| jjjjS )Nr   )r   r%   r   )	ra   r   r   r   r   rb   rc   rd   re   )r   r   r    r    r!   get_total_worked_display_mobile  s
    z+PayloadBase.get_total_worked_display_mobilec             C   sR   | j s
dS ddlm} | jjjj}||}|dd}| jt	| }| j 
|S )Nr%   r   )rg   rh   ri   )r   rj   rg   rb   rc   rd   re   rk   rl   rm   rn   )r   rg   r#   ro   rh   rp   r    r    r!   get_clock_out_display_mobile  s    
z(PayloadBase.get_clock_out_display_mobilec             C   s8   ddl m} | jsdS || jp dd| j| j| jjjjS )Nr   )r   r%   ry   )	ra   r   ry   r   r   rb   rc   rd   re   )r   r   r    r    r!   get_leave_display_mobile   s
    z$PayloadBase.get_leave_display_mobilec             C   s   |   r| j S dS )Nr%   )r   r[   rq   )r   r    r    r!   get_break_out_mobile(  s    
z PayloadBase.get_break_out_mobilec             C   s   |   r| j S dS )Nr%   )r   r[   rr   )r   r    r    r!   get_break_in_mobile.  s    
zPayloadBase.get_break_in_mobilec               @   s   e Zd ZeZdS )zPayloadBase.MetaN)r:   r;   r<   r   r=   r    r    r    r!   r>   3  s   r>   N)fr:   r;   r<   r   r?   r@   
ForeignKeyr   CASCADErb   	DateField_r}   SmallIntegerFieldr   weekdayr   	timetablers   r{   r   rA   r   r   
FloatFieldr   r   r   r   r   r   Zactual_workedr   r   r   rT   rW   ZshortrY   ry   ZOneToOneFieldrB   Z
DO_NOTHINGr[   r   r&   Z	exceptionZday_offr   r   rl   r"   rU   rX   rZ   rz   r|   r~   r   r   r   r   r   r   r   r   r   r\   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r>   r    r    r    r!   rt      s   rt   c               @   s   e Zd ZejddddZejeejdZ	eje
dddejdZejeddejdZejdddZejd	ejddd
ZG dd dZdS )PayloadPunchr   T)r   r   r   )ru   F)r   r   rw   ru   )r   r   ru   )r   r      )r   rv   r   r   c               @   s   e Zd ZeZdS )zPayloadPunch.MetaN)r:   r;   r<   r   r=   r    r    r    r!   r>   @  s   r>   N)r:   r;   r<   r   r?   r@   r   r   r   rb   rt   skdr   Zorigr   r}   cZPUNCH_STATEZcorrect_stater>   r    r    r    r!   r   7  s   r   c               @   s   e Zd ZejddddZejedddejdZ	eje
ddejdZe Ze ZejddddZejddddZe Zejd	ddd
ZG dd dZdS )PayloadExceptionr   T)r   r   r   F)r   r   rw   ru   )r   r   ru   r   )r   r   r   rx   )r   r   r   c               @   s   e Zd ZeZdS )zPayloadException.MetaN)r:   r;   r<   r   r=   r    r    r    r!   r>   P  s   r>   N)r:   r;   r<   r   r?   r@   r   rt   r   r   r	   itemrs   Z
start_timeZend_timerA   r   r   Zdaysr   	data_typedescriptionr>   r    r    r    r!   r   D  s   r   c               @   s   e Zd ZejeejdZejedddejdZ	e
 ZejddedZejddZejdddZejdddZejdddZejdddZejdddZejdddZejdded	fd
edffdZdd Zdd ZG dd dZdS )PayloadMulPunchSet)ru   FT)rw   r   r   ru   )r   r   rv   ri   )r   )r   r   Z)mulTransaction_field_dataType_normalPunch   Z'mulTransaction_field_dataType_breakTime)r   rv   c             C   s   | j s
dS t| j S )Nr%   )r   r   )r   r    r    r!   r   f  s    z'PayloadMulPunchSet.get_clock_in_displayc             C   s   | j s
dS t| j S )Nr%   )r   r   )r   r    r    r!   r   k  s    z(PayloadMulPunchSet.get_clock_out_displayc               @   s   e Zd ZeZdS )zPayloadMulPunchSet.MetaN)r:   r;   r<   r   r=   r    r    r    r!   r>   p  s   r>   N)r:   r;   r<   r   r   r   r   rb   r   r   r   r}   r   r   r   Z
data_indexrs   r   rA   Zin_idr   Zout_idr   Zworked_timer   r   r   r   r>   r    r    r    r!   r   T  s"   
r   N)Z	django.dbr   Zdjango.utils.translationr   r   mysiter   r   Zmysite.personnel.modelsr   Zmysite.iclock.modelsr   Zmysite.att.db_constr   Zmysite.att.modelsr   r	   r
   ra   r   r   r   r   r   ZModelr   rB   rt   r   r   r   r    r    r    r!   <module>   s   Sq  e