B
    ½Ob”.  ã               @   sZ  d dl mZ dd„ Zdd„ Zd2dd„Zd3d	d
„Zdd„ Zdd„ Zdd„ Z	d4dd„Z
dd„ Zd edƒ¡d edƒ¡d edƒ¡d edƒ¡d edƒ¡d edƒ¡d edƒ¡d edƒ¡d edƒ¡d edƒ¡d ed ƒ¡d ed!ƒ¡d ed"ƒ¡d ed#ƒ¡d ed$ƒ¡d ed%ƒ¡d&œZd'd(„ Zd5d)d*„Zd6d+d,„Zi ad-d.„ Zdad7d0d1„ZdS )8é    )Úgettextc             C   s†   dd l }ddlm} dt| ƒ }| |d ¡}|rB| |¡}t|ƒS i }t| ƒ}t| ƒ}| 	|¡ | 	|¡ | 
|| |¡d¡ |S d S )Nr   )ÚcacheZ	att_rule_i€:	 )ÚjsonÚdjango.core.cacher   ÚstrÚgetÚloadsÚdictÚget_att_paramÚget_report_paramÚupdateÚsetÚdumps)Ú
company_idr   r   Ú	cache_keyZatt_rule_cacheÚatt_ruleÚ	att_paramÚreport_param© r   ú-G:\easytimepro\master/mysite/att\att_param.pyÚget_att_rule   s    


r   c             C   sJ   ddl m} ddlm} |jj| d}i }x|D ]}||ƒ||j< q0W |S )z 
    Get all time intervals
    r   )Úmodel_to_dict)ÚTimeInterval)r   )Zdjango.forms.modelsr   Z$mysite.att.models.model_timeintervalr   ÚobjectsÚfilterÚpk)r   r   r   Ú_allÚretÚer   r   r   Úget_time_interval   s    
r   Nc             C   s°   ddl }ddlm} ddlm} | r\y|  dd¡} W q` tk
rX   t| ƒ dd¡} Y q`X nd} |jjd|  d	}|d }| 	|j
¡}x$| ¡ D ]\}}||kr|||< qW |S )
zS
    Get global rule settings as dictionary
      param_name company_id filter
    r   N)ÚAttRule)ÚDEFAULT_ATT_RULE_PARAMSú-Ú Z 6b969e80f3ff11e9afc7acde48001122Úglobal_att_rule_)Ú
param_name)r   Úmysite.att.models.model_attruler    r!   ÚreplaceÚAttributeErrorr   r   r   r   Úparam_valueÚitems)r   r   r    r!   r   r   ÚkÚvr   r   r   r
   '   s     r
   c             C   s‚   ddl m} dd l}|jj|d ¡ }| |j¡}g }xB|D ]:}| |d |d f¡ | r<t	|d ƒt	| ƒkr<|d S q<W t
|ƒS )Nr   )ÚAttReportSetting)ZcompanyÚvalueÚname)Úmysite.att.modelsr-   r   r   r   Úfirstr   Úfunc_keyÚappendr   Útuple)Úkeyr   r-   r   ZsettingZoptionsÚkeysZoptionr   r   r   Úget_func_key@   s    
r7   c             C   sˆ   ddl }ddlm} |jj| d}|s*i S |d }|j|j|j|jdœ}| 	|j
¡}| 	|j¡}| dd„ |D ƒdd„ |D ƒd	œ¡ |S )
z$
    Get report parameter items
    r   N)r-   )r   )Ú
resign_empÚ
short_dateÚ
short_timeÚwork_day_related_displayc             S   s   i | ]}||d  “qS )r5   r   )Ú.0Úatt_itemr   r   r   ú
<dictcomp>f   s    z$get_report_param.<locals>.<dictcomp>c             S   s   i | ]}||d  “qS )r5   r   )r<   r2   r   r   r   r>   g   s    )r*   Ú	func_keys)r   r0   r-   r   r   r8   r9   r:   r;   r   r2   r=   r   )r   r   r-   ÚobjÚvalr?   Z	att_itemsr   r   r   r   S   s     
r   c             C   s^   dd l }ddlm} |jjdd}|rZ|d }| | ¡}| |j¡|krZ||_|jdd d S )Nr   )ÚReportParamZreport_setting)r%   T)Úforce_update)	r   Ú#mysite.att.models.model_reportparamrB   r   r   r   r   r)   Úsave)r   r   rB   r@   ÚselfrA   r   r   r   Úsave_report_param_to_dbl   s    
rG   c             C   sÀ  dd l }ddlm} ddlm}m} d |¡}i }| ¡ }|  ¡ }	xd|	D ]Z}
|
|ksj|
dksj|
 d¡rJ|
dkrF| 	| d ¡}g |d< x¦|D ]ž}xŠ| 
¡ D ]~\}}|dkr¸|||< qž|dkræt|| ƒ||< |t|| ƒ |d	< qž|d	krðqž|d
krt|| ƒ||< qžt|| ƒ||< qžW |d  |¡ qW |d  dd„ ¡ qJ| |
 dkr^d||
< qJy.|
 d¡rz| |
 ||
< nt| |
 ƒ||
< W qJ   | |
 ||
< Y qJX qJW | |¡ t|ƒ d S )Nr   )r   )ÚDEFAULT_REPORT_PARAMSÚPARAMSzatt_rule_{}Ú
LeaveClassZdlevelÚreport_symbolÚLeaveIdÚ	LeaveNameÚminimum_unitc             S   s   | d |d  S )NrL   r   )Zx1Zx2r   r   r   Ú<lambda>”   ó    z&handle_report_params.<locals>.<lambda>Úoné   Zfunckey)r   r   r   rD   rH   rI   Úformatr6   Ú
startswithr   r*   ÚintÚfloatr3   ÚsortÚdeleterG   )Ú	post_datar   r   r   rH   rI   r   r   r6   Ú	post_keysÚtZlcÚitemr+   r,   r   r   r   Úhandle_report_paramsx   sH    






r]   c       	      C   s”   dd l }ddlm} ddlm} |d kr6| ¡ }|j}t|ƒ dd¡}|j	j
d| d}|r|d }| | ¡}| |j¡|kr||_|jdd	 d S )
Nr   )r    )Úthreadlocalsr"   r#   r$   )r%   T)rC   )r   r&   r    Zmysite.baser^   Zget_current_userZcurrent_companyr   r'   r   r   r   r   r)   rE   )	r   r   r   r    r^   Zcurrent_userr@   rF   rA   r   r   r   Úsave_att_param_to_db¤   s    
r_   c             C   sp  dd l }ddlm} ddlm}m} ddlm} ddlm	} d 
|¡}t|ƒ}	| ¡ }
g }g }|  ¡ }x„|  ¡ D ]x\}}||
krÄ||krœ| |¡ ||	|< qèyt|ƒ|	|< W qè   ||	|< Y qèX qp| d¡rp|dkrp| | dd	¡¡ qpW |	d
 r0t|	d
 ƒt|ƒkr0|j ¡  ¡ }|dkr0dtdƒ S t|ƒtt|ƒƒkrRdtdƒ S ||	d
< | |¡ t|	ƒ d S )Nr   )r   )ÚWEEKÚ	CALC_KEYS)r!   )ÚAttShiftzatt_rule_{}ZweekdayrQ   r#   Úweekendz%sz-weekend_setting_already_used, can_not_modify.zAcan_not_using_same_value_for_function_key_in_calculation_setting.)r   r   r   Zmysite.att.db_constr`   ra   r&   r!   Z mysite.att.models.model_attshiftrb   rS   r
   r6   r*   r3   rU   rT   r'   r   r   ÚallÚcountÚ_ÚlenrX   r_   )rY   r   r   r   r`   ra   r!   rb   r   r   r6   rc   ZfunckeysrZ   r+   r,   Zshift_countr   r   r   Úhandle_att_paramsµ   s@    





rh   z{0}Zcalculation_item_actualPresentZ calculation_item_durationOrShortZ+calculation_item_totalTimeOrTotalWorkedTimeZ+calculation_item_breakTimeOrActualBreakTimeZ"calculation_item_timetableDurationZcalculation_item_lateZcalculation_item_earlyLeaveZcalculation_item_leaveZcalculation_item_absentZcalculation_item_overtimeZcalculation_item_no_ClockInZcalculation_item_no_ClockOutZcalculation_item_presentZcalculation_item_dayOffZcalculation_item_weekendZcalculation_item_holiday)iè  ié  iê  ië  iì  ií  iî  iï  ið  iñ  iò  ió  iô  iõ  iö  i÷  c             C   s   t |  S )u*   
    ç»Ÿè®¡é¡¹ç›®IDå’Œåç§°çš„æ˜ å°„
    )rI   )ZleaveIDr   r   r   ÚtransLeaNameî   s    ri   c             C   sˆ   i }t | jƒ|d< |dkr*t| jƒ|d< n
| j|d< t| jƒ|d< t | jƒ|d< | jdkrdd|d< nt | jƒ|d< | j|d< d|d	< |S )
u{   
    èŽ·å–æŸä¸ªå‡ç±»æˆ–è€…ç»Ÿè®¡é¡¹ç›®çš„å‚æ•°ä¿¡æ¯
    type =0 è¡¨ç¤ºä¸ºå‡ç±»å¯¹è±¡ å¦åˆ™ä¸ºç»Ÿè®¡é¡¹ç›®å¯¹è±¡
    rL   rR   rM   rN   Ú	round_offéÿÿÿÿÚunitrK   ZIsLeave)	rU   Úidri   Zcategory_namerV   rN   rj   rl   rK   )ZdataobjÚtypeÚResultr   r   r   ÚFetchLeaveClassõ   s    



rp   c       	      C   s¤   ddl m} | |¡ g }| dkrjddl m} | |¡ | |¡d }x"|D ]}t|ƒdkrL| |¡ qLW |j}|r x*|D ]"}t|ƒ}t|ƒdkrz| |¡ qzW |S )uY   
    èŽ·å–å½“å‰æ‰€æœ‰å‡ç±»å‚æ•°æ•°æ® é»˜è®¤åŒ…å«èŽ·å–ç»Ÿè®¡é¡¹ç›®å‚æ•°æ•°æ®
    r   )ÚC_LEAVE_CLASS)Ú
C_ATT_RULErJ   )	Zmysite.att.global_cacherq   Zaction_initrr   r   rg   r3   r.   rp   )	rn   r   rq   ro   rr   Zqry1ÚrZqryr[   r   r   r   ÚGetLeaveClasses  s"    



rt   c             C   s*   d}x | D ]}|t |d < |d7 }q
W t S )Nr   rL   rR   )ÚAttAbnomiteRptIndex)ZAttAbnomiteRptItemsÚjÚfr   r   r   ÚGetRptIndex(  s
    
rx   Fc             C   sŒ   | st rt S ddlm} |jj|d}i }xX|D ]P}|j|j|j|j|j	|j
|j|jpXd|j|j|jphd|j|jptddœ||j< q0W |a |S )Nr   )Ú	BreakTime)r   )Z
break_codeZ
break_nameZ
start_timeZend_timeZ
break_timeÚ	calc_typeZis_consider_earlyÚ
early_overÚ
early_typeZis_consider_lateÚ	late_overÚ	late_typeZminimum_time)ÚBreakTime_listr0   ry   r   r   rm   ÚaliasZperiod_startZ
period_endZrequired_durationrz   Zbreak_in_earlyr{   r|   Zbreak_in_later}   r~   Zminimum_durationr   )Úreloadr   ry   r   r   r   r   r   r   ÚGetBreakTime4  s*    
r‚   )N)NN)N)r   )r   N)FN)Zdjango.utils.translationr   rf   r   r   r
   r7   r   rG   r]   r_   rh   rS   rI   ri   rp   rt   ru   rx   r   r‚   r   r   r   r   Ú<module>   s@   

,
&

	