B
    ADb                 @   s,  d dl Z d dlmZ d dlmZmZ dd Zdd Zd dd	ZG d
d de	Z
G dd de
Ze ZG dd de
Ze ZG dd de
Ze ZG dd de
Ze ZG dd de
Ze ZG dd de
Ze ZG dd de
ZdZG dd de
Ze ZG dd de
Ze ZG dd de
Ze ZdS )!    N)cache)p_querycurr_db_engine_namec          
   C   sX   ddl m} |jj| ddddddd	d
d}i }|rTx|D ]}t|||d < q<W |S )zj
        get all attshift, used for global cache
        @return:
            {id: [Units, Cyle,...]}
    r   )AttShift)
company_ididZ
cycle_unitZshift_cycleZwork_weekendZweekend_typeZwork_day_offZday_off_typeZ
auto_shift)mysite.att.modelsr   objectsfiltervalues_listtuple)r   r   objsZretobj r   0G:\easytimepro\master/mysite/att\global_cache.pyget_all_attshift
   s    
r   c       	      C   s   dd l }ddlm} t|  t|  t| }d|i}|jj| d	dd}|rx>|D ]6\}}|rZ|slqZ|
 }||}|| |||< qZW |S )Nr   )DeptAttRuledefault)Zdepartment__company_idZdepartment_idrule)jsonr   r   
C_ATT_RULErefreshaction_initgetr	   r
   r   copyloadsupdate)	r   r   r   Zglobal_ruleresultr   Zdeptr   Zdepartment_ruler   r   r   get_department_rule   s     




r   c             C   s\  dd l }dd l}ddlm}m}m}m}m}	m}
 ddl	m
} ddlm} |d|d }|
 |_|jj|ddj||ddd	|d|	 d
||d|	 d|d|	 d|d|	 d|d|	 ddddddddddd	d}i }xp|j||ddD ]X\}}i ||< xF|D ]>}x6t|d D ]&}|d tj|d }||| |< q$W qW qW |S )Nr   )FCaseWhenValueIntegerField	DateField)Cast)Holiday
start_dateZduration_day)r   location_id)Zlocation_id__gteZthen)r   output_fieldZ	work_type)r)   Zovertime_lv1Zovertime_lv2Zovertime_lv3)r(   end_datepolicylv1lv2lv3r   aliasr+   r,   r-   r.   )key)Zdays)	itertoolsoperatorZdjango.db.modelsr   r    r!   r"   r#   r$   Zdjango.db.models.functionsr%   r   r&   r)   r	   r
   order_byZannotatevaluesgroupby
itemgetterrangedatetimeZ	timedelta)r'   r*   r   r1   r2   r   r    r!   r"   r#   r$   r%   r&   Z_endZquerysetpayloadr0   itemsitemxZcur_dater   r   r   get_holiday1   s6     

r=   c               @   sD   e Zd Zdd ZdddZdddZddd	ZeeZdd
dZ	dS )	CacheDatac             C   s   || _ d | _d S )N)r0   value)selfr0   r   r   r   __init__S   s    zCacheData.__init__Nc             C   s   |  | d S )N)r   )r@   r   r   r   r   r   W   s    zCacheData.action_initc             C   s.   |  |}| jd t| }t||d |S )zrefresh cache_i:	 )predatar0   strr   set)r@   r   m_datar0   r   r   r   r   Z   s    
zCacheData.refreshc             C   s@   | j d t| }t|}|r*|| _|S | || _| jS dS )zget datarB   N)r0   rD   r   r   r?   r   )r@   r   r0   rF   r   r   r   r   a   s    
zCacheData.getc             C   s   dS )zprepare data r   )r@   r   r   r   r   rC   n   s    zCacheData.predata)N)N)N)N)
__name__
__module____qualname__rA   r   r   r   propertydatarC   r   r   r   r   r>   Q   s   


r>   c                   s&   e Zd Z fddZdddZ  ZS )AttRulec                s   t t| d d S )Nr   )superrM   rA   )r@   )	__class__r   r   rA   u   s    zAttRule.__init__Nc             C   s   ddl m} ||S )Nr   )get_att_rule)mysite.att.att_paramrP   )r@   r   rP   r   r   r   rC   x   s    zAttRule.predata)N)rH   rI   rJ   rA   rC   __classcell__r   r   )rO   r   rM   s   s   rM   c                   s&   e Zd Z fddZdddZ  ZS )TimeIntervalc                s   t t| d d S )NC_TIME_INTERVAL)rN   rS   rA   )r@   )rO   r   r   rA      s    zTimeInterval.__init__Nc             C   s   ddl m} ||S )Nr   )get_time_interval)rQ   rU   )r@   r   rU   r   r   r   rC      s    zTimeInterval.predata)N)rH   rI   rJ   rA   rC   rR   r   r   )rO   r   rS      s   rS   c                   s&   e Zd Z fddZdddZ  ZS )r   c                s   t t| d d S )NC_ATT_SHIFT)rN   r   rA   )r@   )rO   r   r   rA      s    zAttShift.__init__Nc             C   s   t |S )N)r   )r@   r   r   r   r   rC      s    zAttShift.predata)N)rH   rI   rJ   rA   rC   rR   r   r   )rO   r   r      s   r   c                   s&   e Zd Z fddZdddZ  ZS )r   c                s   t t| d d S )NC_DEPT_ATT_RULE)rN   r   rA   )r@   )rO   r   r   rA      s    zDeptAttRule.__init__Nc             C   s   t |S )N)r   )r@   r   r   r   r   rC      s    zDeptAttRule.predata)N)rH   rI   rJ   rA   rC   rR   r   r   )rO   r   r      s   r   c                   s&   e Zd Z fddZdddZ  ZS )r&   c                s   t t| d d S )N	C_HOLIDAY)rN   r&   rA   )r@   )rO   r   r   rA      s    zHoliday.__init__Nc             C   s
   t |dS )N)r   )r=   )r@   r   r   r   r   rC      s    zHoliday.predata)N)rH   rI   rJ   rA   rC   rR   r   r   )rO   r   r&      s   r&   c                   s&   e Zd Z fddZdddZ  ZS )LeaveClassCc                s   t t| d d S )NC_LEAVE_CLASS)rN   rY   rA   )r@   )rO   r   r   rA      s    zLeaveClassC.__init__Nc             C   s(   ddl m} |jj|dd}t|S )Nr   )LeaveCategory)r   r   )Z%mysite.att.models.model_leavecategoryr[   r	   r
   r3   list)r@   r   r[   ZqryLeaveClassr   r   r   rC      s    zLeaveClassC.predata)N)rH   rI   rJ   rA   rC   rR   r   r   )rO   r   rY      s   rY   c                   s&   e Zd Z fddZdddZ  ZS )	BreakTimec                s   t t| d d S )NC_BREAK_TIME)rN   r]   rA   )r@   )rO   r   r   rA      s    zBreakTime.__init__Nc             C   s   ddl m} |dd dS )Nr   )GetBreakTimeT)reloadr   )rQ   r_   )r@   r   r_   r   r   r   rC      s    zBreakTime.predata)N)rH   rI   rJ   rA   rC   rR   r   r   )rO   r   r]      s   r]   c                   s&   e Zd Z fddZdddZ  ZS )WorkCodeCachec                s   t t| d d S )NCACHE_WORKCODE)rN   ra   rA   )r@   )rO   r   r   rA      s    zWorkCodeCache.__init__Nc             C   s<   ddl m} |jj|ddd}g }|r8dd |D }|S )Nr   )TerminalWorkCode)r   r   r/   c             S   s   g | ]}|d  |d dqS )r   r/   )codenamer   ).0r   r   r   r   
<listcomp>   s    z)WorkCodeCache.predata.<locals>.<listcomp>)Z#mysite.iclock.models.model_workcoderc   r	   r
   r4   )r@   r   rc   r   choicesr   r   r   rC      s    zWorkCodeCache.predata)N)rH   rI   rJ   rA   rC   rR   r   r   )rO   r   ra      s   ra   c                   s&   e Zd Z fddZdddZ  ZS )TrainingTypeCachec                s   t t| d d S )NCACHE_TRAINING_TYPE)rN   ri   rA   )r@   )rO   r   r   rA      s    zTrainingTypeCache.__init__Nc             C   s4   ddl m} |jj|ddd}dd |D }|S )Nr   )TrainingCategory)r   r   category_namec             S   s   g | ]}|d  |d dqS )r   rl   )rd   re   r   )rf   r   r   r   r   rg      s    z-TrainingTypeCache.predata.<locals>.<listcomp>)Z(mysite.att.models.model_trainingcategoryrk   r	   r
   r4   )r@   r   rk   r   rh   r   r   r   rC      s    zTrainingTypeCache.predata)N)rH   rI   rJ   rA   rC   rR   r   r   )rO   r   ri      s   ri   c                   s&   e Zd Z fddZdddZ  ZS )TBBreakTimeCachec                s   t t| d d S )NCACHE_TIME_TABLE_BREAK_TIME)rN   rm   rA   )r@   )rO   r   r   rA      s    zTBBreakTimeCache.__init__Nc             C   sR   ddl m} |jj|d}i }x.|D ]&}t|j jddd}|||j< q$W |S )Nr   )rS   )r   ZdurationT)Zflat)	r   rS   r	   r
   sumZ
break_timeallr   r   )r@   r   rS   r   r9   r   Zbreak_durationr   r   r   rC      s    
zTBBreakTimeCache.predata)N)rH   rI   rJ   rA   rC   rR   r   r   )rO   r   rm      s   rm   )NNN)r8   Zdjango.core.cacher   Zmysite.sql_utilsr   r   r   r   r=   objectr>   rM   r   rS   rT   r   rV   r   rW   r&   rX   rY   rZ   r]   r^   ra   rb   ri   rj   rm   rn   r   r   r   r   <module>   s4   
 "

			
