B
    ADbQ/                 @   s   d dl Z d dlZd dlZd dlZd dlZd dl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 ddlmZ dd	lmZ d d
lmZ ejdd e  dd Zdd Zdd Zdd Zdd Zdd Ze dd Z edddZ!dS )    N)login_required)cache)	smart_str)settings)getJSResponse	truncTime   )AttendanceCalculate)ResultHandler)time_itZDJANGO_SETTINGS_MODULEzmysite.settingsc             C   s   ddl m}m}m}m}m}m}m} ||  |	|  ||  |	|  |	|  ||  ||  ||  |	|  |	|  ||  |	|  d S )Nr   )
C_ATT_RULEC_ATT_SHIFTC_DEPT_ATT_RULEC_TIME_INTERVAL	C_HOLIDAYC_BREAK_TIMECACHE_TIME_TABLE_BREAK_TIME)
Zmysite.att.global_cacher   r   r   r   r   r   r   ZrefreshZaction_init)
company_idr   r   r   r   r   r   r    r   .G:\easytimepro\master/mysite/att\calc\views.pyrefresh_cache   s    $










r   c             C   s   dt | jt | jf }t|d }d| p.d}tj d}	t	 }
|rnt
|}
|
d|}|
d|	}	||
d< ||
d< || |
d< ||
d	< d
||f |
d< |	|
d< ||
d< tj|t
|
dd d S )Nzatt_calc_tag_%s_%sz{0} z%H:%M:%S
calculatorprocess_timeZtotal_processZpendingZ	processedz%s - %sZprocess_rangeprocessed_timei@8  )timeout)stridcurrent_companyr   getformatdatetimeZnowstrftimedictjsonloadssetdumps)userZ	total_lenZcur_len
start_timeend_timer   tag_keyZatt_calc_datar   r   Zprocess_datar   r   r   set_calculate_process_status-   s"    
r,   c             C   s   ddl m}m}m}m}	m}
m}m}m}m	}m
}m}m}m} ||||}|| ||}||||}||||}||||}||||}||}||||}||}||}||}|||||||||||fS )Nr   )dict_leave_objdict_training_objdict_overtime_objdict_schedule_objdict_temp_schedule_objdict_shift_detaildict_initial_record_objdict_break_time_detaildict_leave_typedict_training_typeemployee_temp_scheduledepartment_scheduleemployee_schedule)utilsr-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   )	param_empparam_emp_idd1d2emp_idsr   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   	all_leaveall_trainingall_overtimeall_department_scheduleall_scheduleall_temp_scheduleall_shift_detailall_initial_recordall_break_timeall_leave_typeall_training_typer   r   r   get_related_att_dataA   s    <rK   c       "      C   st  | }t ||d }ttd |t|g }ttd ||g }ttd |	|g }t|||frp||g }||g }||g }||g }g }xn|D ]f}d}x6|D ].}t|d |d t|d |d k rd}P qW |st	|}|
d|i || qW || t||||||||||
||}| }t|} | rpt|||||||}!|!  |!  d S )NF
start_dateend_dateTemp)intr   listfilterr   anymaxmincopyZdeepcopyupdateappendextendr	   	calculatelenr
   result_handlerZsave_result_to_db)"rN   r   r=   r>   emp_deptr@   rA   rB   rD   rE   rF   rG   rH   rI   rJ   rC   employeeZ
departmentZdept_schedulesZemp_schedulesZtemp_schedulesZleavesZotsZ	trainingsZtransactionsZ	schedulesZdsZoverlapZesZ_dsZ	processorZrecords_result_lenZrhr   r   r   personnel_calculateu   s>    

$



r_   c             C   sd   | j dd}| j dd}| j dd}g }g }|rH|dkrBdpDd	}n|d
}dd |D }|S )Nr]   z-1ZDeptIDsr   
dept_child01TF,c             S   s   g | ]}|d krd| qS )r   z%sr   ).0usr   r   r   
<listcomp>   s    z#get_emps_by_req.<locals>.<listcomp>)POSTr   split)requestZuseridsZdeptidsr`   Zuid_listZdeptschZu_lr   r   r   get_emps_by_req   s    
rk   c             C   s   dd l }ybt| }| jdd}| jdd}d }}|rH|j |d}|rb|d7 }|j |d}|||fS    dd l}|  g d d fS d S )Nr   rL   r   rM   z%Y-%m-%dz	 23:59:59z%Y-%m-%d %H:%M:%S)r!   rk   rg   r   strptime	traceback	print_exc)ri   r!   ZidsstZetr=   r>   rm   r   r   r   parse_req_arg   s     
rp   c       	   	   C   s   dt | jjt | jjf }t| \}}}t }t|dkrTttt	
ddiS t }y2t||||  t }ttt	
d|| dS    dd l}|  t| ttt	
ddiS d S )Nzatt_calc_tag_%s_%sr   retZemp_null)rq   Zuse_timeZ	sys_error)r   r(   r   r   rp   timerZ   r   r   r$   r'   att_calculaterm   rn   r   delete)	ri   r+   r?   r=   r>   uabrm   r   r   r   main   s    
rx   c       "      C   s  ddl m}m}m}m}m}	 ddlm}
m}m	} t

 }d}t| }d}d}d}d}|rt|jj}|t|jj|f }d	t|jjt|jjf }|j}|d
}|d
}|rt| t||d||d d}xttt| d | d D ]}| || |d |  }|
|d}|
|d}t| t||||||}|rvt

 }t|||||d||   t|drvP tjrt|}|jj|||fd}|jj|d  |jj|d  |  |	jj|||fd  |jj|||fd  ||}tdt|  xlt|D ]`\}} |d7 }t| ||||f|  |rt

 }!t|||||d|!|   t|drP qW qW tdt|  |rt

 }!t|||||d|!|   |rt| dS )a!  
    (request or company_id) != None
    if request: it means calculate in browser manually
    if company_id: it means calculate by celery task.
    :param emp_ids: emp id list.
    :param d1: start time
    :param d2: end time
    :param request:
    :param company_id:
    :return:
    r   )PayloadBasePayloadPunchPayloadBreakPayloadOvertimePayloadMulPunchSetr   )param_emp_whereget_emp_departmentget_emp_locationFd   Zadminzatt_calc_tag_%s_%szatt_calc_tag_revoke_%s_%sz%Y-%m-%dTZemployee_idzpe.idz%dN)Z
emp_id__inZatt_date__range)Zpayloadbase__inZlateData) Zmysite.att.modelsry   rz   r{   r|   r}   r:   r~   r   r   rr   rZ   r   r(   r   r   r"   r   rt   r,   rangerO   r   rK   r   r   Z
USE_MUL_DBrP   ZobjectsrQ   	enumerater_   )"Zempl_idsr=   r>   ri   r   ry   rz   r{   r|   r}   r~   r   r   Zstart_stampZweb_calculateZemp_lenZcurrent_calculated_countZ
each_countZcalculation_userr+   Ztag_key_revoker)   r*   ir?   r;   r<   argsZstamp1Zpbr\   Zcalculated_indexrN   Z
calc_stampr   r   r   rs      st    


&

rs   )NN)"r$   osrr   rU   r!   ZdjangoZdjango.contrib.auth.decoratorsr   Zdjango.core.cacher   Zdjango.utils.encodingr   Zdjango.confr   Zmysite.utilsr   r   rY   r	   r[   r
   Zmysite.admin.helpersr   environ
setdefaultZsetupr   r,   rK   r_   rk   rp   rx   rs   r   r   r   r   <module>   s0   4$