B
    㬠b
-                 @   s   d dl m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 d dlmZ d d	lmZ d d
lmZ G dd deZdS )    )print_functionN)resolve)settings)get_user_model)reverse)cache)	smart_str)load_from_json)get_param_valuec               @   s`   e Zd Zdd Zdd Zdd Zedd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd ZdS )MenuListc             C   sR  || _ || _d | _tj| _i | _|| _dtjkr<tj	d | j
drvddlm}m} ||| _| | j|| j|< | j
dr| drddlm}m} ||| _| | j|| j|< | j
drddlm}m} ||| _| | j|| j|< | j
dr>| dr>ddlm}m} || j | _| | j|| j|< | j
d	r|ddlm}m} || j | _| | j|| j|< | j
d
r| d
rddlm}m} || j | _| | j|| j|< | j
drddlm}m} || j | _| | j|| j|< | j
drN| drNddlm}m} || j | _| | j|| j|< d S )NZacczaccounts.enter_personnel_moduler   )APP_NAMEget_menuz accounts.enter_attendance_moduleattzaccounts.enter_terminal_modulezaccounts.enter_access_modulezaccounts.enter_system_modulestaffstaffPayrollzaccounts.enter_payroll_moduleZpayroll)url_funcmod_namedefault_accessr   STANDARD_MODULESstandard_modulessystem_menususerSALE_MODULEappendhas_permZmysite.personnelr   r   Zpersonnel_menufilter_eligible_menuenable_saleZ
mysite.attZatt_menuZmysite.iclockZterminal_menuZ
mysite.accZaccess_menuZmysite.baseZsystem_menuZmysite.staffZ
staff_menuZmysite.staff.staffPayrollZstaffPayroll_menuZmysite.payroll)selfr   r   r   r   r    r   )G:\easytimepro\master/mysite/core\menu.py__init__   sP    



zMenuList.__init__c             C   s  | j }x|dg D ]}|dg }|s*qt|}xtt|ddD ]\}}|dd }	t|	dkr|	d}
t|
dkr|}|
d }nt|
d	krD|
\}}nqD|||s|||  qD|d
d}t	|j
}dj||d}||sD|||  qDW qW |S )Nmenu_groupsmenus   )start
model_name r   .   urlz{app}.view_{url_name})appurl_name)r   getlen	enumeratereversedlowersplitZhas_model_op_permspopr   r+   formatr   )r   
menu_group	app_labelr   groupZm_items_leniitemr%   infoZ
_app_labelZ_model_namer)   r+   Zview_perm_namer   r   r   r   C   s0    




zMenuList.filter_eligible_menuc             C   s   |dkrdS | d}xx|D ]p}|dkr6| jdkr6dS |dkrL| jdkrLdS || jkrn|tjkrn|tjkrndS d|kr|dd  tjkrdS qW dS )	Nr&   T;)system)Zpersonzsystem-   F)r1   r   r   ZENABLED_MODr   )r   r   Zl_modmr   r   r   
enable_mod_   s    

zMenuList.enable_modc             C   s   | t jkrdS dS d S )NTF)r   r   )r   r   r   r   r   n   s    
zMenuList.enable_salec             C   s   || _ d | _d}d}| j}g }||d }|s2dS |dd }|sFdS xN|D ]F}|d }	| |	\}
}d}|rrd}|
rL|t|||d |
f  qLW d|}|| | jfS )	Na  
            <div class="layui-side-scroll" id="layui-side-scroll-bar">
                <ul class="layui-nav layui-nav-tree layui-inline" lay-filter="admin-nav" style="margin-right: 10px;">
                    %s
                </ul>
            </div>
        z
            <li class="layui-nav-item %s">
                <a href="javascript:void(0);">%s</a>
                <dl class="layui-nav-child">
                    %s
                </d1>
            </li>
        )r&   r&   r!   r"   r&   zlayui-nav-itemedverbose_name)r   r   r   r,   get_group_menur   r   join)r   r   sub_menu_templateZsub_menu_lir   r"   module_menur!   r4   group_menusZ
group_menuselectedclshtmlr   r   r   get_sub_menuu   s,    
 
zMenuList.get_sub_menuc       
   
   C   s   d}t tdddt_g }d}xn|D ]f}d}|dd }d}|r^| jsT|| _d}d	}d
|}|t||d| j	|d f ||d f  q$W d
|}	|	|fS )NzZ
            <dd class="%s"><a id='%s' href="javascript:void(0);" %s >%s</a></dd>
        Zipos_cardtyper(   ZiposFr&   r)   z
layui-thisTzonclick=menuClick("{0}",this);z%s_%sr%   r@   )intr
   r   Z	CARD_TYPEr,   r   r3   r   r   r   rB   )
r   rE   rC   r"   rF   r>   Zon_clickZ_urlrG   rH   r   r   r   rA      s$    

*
zMenuList.get_group_menuc             C   s<   t | jt s$dg}tjr4ddg}ndd tjD }t|S )Nr   r   c             S   s"   g | ]}|d   ds|d  qS )idr   )
startswith).0tr   r   r   
<listcomp>   s    z1MenuList.get_available_module.<locals>.<listcomp>)
isinstancer   r   r   ZSUPPORT_PAYROLLr   set)r   available_modulesr   r   r   get_available_module   s    
zMenuList.get_available_modulec          	   C   s   d}|   }g }x| jD ]}|d }||kr.qd}|| jkr@d}ytdd|id}W n tk
rl   d}Y nX |||d|d	 d
 }d}	| |}
|
rd}	|	r|| qW d|}|S )Nz
           <li class="layui-nav-item %(cls)s">
              <div class="menu_module">
                <a href="javascript:void(0);" rel='%(module_url)s'  >%(verbose_name)s</a>
              </div>
           </li>
        rK   r&   thiszbiotime:app_listr5   )Zparamsz{0}caption)rG   
module_urlr@   FT)	rS   r   r   r   	Exceptionr3   rI   r   rB   )r   rD   rR   r"   r>   module_namerG   rV   Zmenu_lir   Zmodule_sub_menurH   r   r   r   get_modules   s4    



zMenuList.get_modulesc          
   C   s   g }|d krg }| j | }|dg }x|D ]}|dg }|ddd|ddg d}x~|D ]v}	|	ddsrq`|	d	d}
t|	dd|
|	ddt|
d
dd
d}|
|kr|jdd |d | q`W |ddrd|d< || q,W |S )Nr!   r"   r@   r&   icon)labelr)   rZ   r"   ZvisibleTr)   zutf-8hex)r[   r)   rZ   r\   true)ZpinZisReport)r   r,   strcodecsencodedecodeupdater   )r   rX   pin_tabsZ	sub_menusr!   groupsr6   r"   r4   _mr)   Z_detailr   r   r   get_sub_menus   s4    





zMenuList.get_sub_menusc             C   s   yt | jjt}W n ttfk
r.   i }Y nX g }|  }xv| jD ]l}|d }||krZqD|| jkrfqD|d d|| 	||
|d d}|dkrtd| jj| || qDW |S )NrK   rU   r&   )r[   r)   r*   rd   r   zreport_permission_{})r	   r   rc   dict
ValueErrorAttributeErrorrS   r   r   rf   r,   r   rQ   r3   Zpkr   )r   rc   r"   rR   r>   rX   r*   r   r   r   	get_menus  s(    

zMenuList.get_menusN)__name__
__module____qualname__r    r   r?   staticmethodr   rI   rA   rS   rY   rf   rj   r   r   r   r   r      s   1*
$"r   )Z
__future__r   r_   Zdjango.urlsr   Zdjango.confr   Zdjango.contrib.authr   r   Zdjango.core.cacher   Zdjango.utils.encodingr   Zmysite.admin.utilsr	   Zmysite.base.modelsr
   objectr   r   r   r   r   <module>   s   