B
    c                 @   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Zd dlmZmZ d dlmZ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 d dlmZ d dl m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 G dd de7Z8G dd de7Z9e9 Z:G dd de8Z;G dd de;Z<e:j=G d d! d!e<Z>e:j=G d"d# d#e<Z?e:j=G d$d% d%e;Z@e:j=G d&d' d'e;ZAe:j=G d(d) d)e<ZBe:j=G d*d+ d+e<ZCe:j=G d,d- d-e;ZDe:j=G d.d/ d/e<ZEe:j=G d0d1 d1e<ZFe:j=G d2d3 d3e<ZGe:j=G d4d5 d5e<ZHG d6d# d#e<Z?e:j=G d7d8 d8e8ZIdS )9    )absolute_importN)caches)ImproperlyConfigured)models)get_template)	smart_str	force_str)escapeformat_html)	mark_safe)	Truncator)gettext_lazy)get_software_type_without_load)EASYWDMSINTELLIGENTTIME)ContentType)const   )get_model_from_relationreverse_field_pathget_limit_choices_to_from_pathprepare_lookup_valueis_related_fieldis_related_field2is_self_ref_fieldget_self_ref_field)LeaveCategory)TrainingCategory)WorkflowRole)
Membership)AttShift)Groupc               @   sf   e Zd ZdZdZedd Zdd ZdddZd	d
 Z	dd Z
edd Zdd Zdd Zdd ZdS )
BaseFilterNzxadmin/filters/list.htmlc             C   s   d S )N )clsfieldrequestparamsmodel
admin_view
field_pathr#   r#   4G:\easytimepro\master/mysite/admin\xadmin\filters.pytest$   s    zBaseFilter.testc             C   s<   i | _ || _|| _|| _|| _| jd kr8td| jj d S )Nz+The filter '%s' does not specify a 'title'.)	used_paramsr&   r'   r(   r)   titler   	__class____name__)selfr&   r'   r(   r)   r#   r#   r+   __init__(   s    
zBaseFilter.__init__c             C   s   | j j||S )N)r)   change_listZget_query_string)r1   Z
new_paramsremover#   r#   r+   query_string4   s    zBaseFilter.query_stringc             C   s6   t tdd | j }tjr&t |}| jjj|dS )Nc             S   s
   t j|  S )N)r   FILTER_PREFIX)kr#   r#   r+   <lambda>8       z(BaseFilter.form_params.<locals>.<lambda>)r4   )	listmapr-   keyssixPY3r)   r3   Zget_form_params)r1   arrr#   r#   r+   form_params7   s    zBaseFilter.form_paramsc             C   s   t dS )zO
        Returns True if some choices would be output for this filter.
        N)NotImplementedError)r1   r#   r#   r+   
has_output=   s    zBaseFilter.has_outputc             C   s   t | jdkS )Nr   )lenr-   )r1   r#   r#   r+   is_usedC   s    zBaseFilter.is_usedc             C   s   t dS )z0
        Returns the filtered queryset.
        N)rA   )r1   querysetr#   r#   r+   apply_filterG   s    zBaseFilter.apply_filterc             C   s$   ddl m} | j| |  | dS )Nr   )translation)r.   specr@   Zis_bidi_language)Zdjango.utilsrG   r.   r@   Zget_language_bidi)r1   rG   r#   r#   r+   get_contextM   s
    zBaseFilter.get_contextc             C   s   t | j}t|j|  dS )N)context)r   templater   ZrenderrI   )r1   Ztplr#   r#   r+   __str__V   s    
zBaseFilter.__str__)NN)r0   
__module____qualname__r.   rK   classmethodr,   r2   r5   r@   rB   propertyrD   rF   rI   rL   r#   r#   r#   r+   r"       s   
	r"   c               @   s&   e Zd Zg ZdZdddZdd ZdS )	FieldFilterManagerr   Fc             C   s4   |r$| j | j| |  jd7  _n| j | |S )Nr   )_field_list_filtersinsert_take_priority_indexappend)r1   list_filter_classZtake_priorityr#   r#   r+   register_   s    
zFieldFilterManager.registerc          	   C   s<   x6| j D ],}|||||||s"q|||||||dS W d S )N)r*   )rR   r,   )r1   r%   r&   r'   r(   r)   r*   rV   r#   r#   r+   createk   s
    zFieldFilterManager.createN)F)r0   rM   rN   rR   rT   rW   rX   r#   r#   r#   r+   rQ   [   s   
rQ   c                   s<   e Zd Zg Z fddZ fddZdd Zdd Z  ZS )	FieldFilterc                s   | _ | _t|d| _i  _tt |||| xp jD ]f\}}}	|| }
t	j
|
  jd| < |
|krt|
||
}| j|
< | jd| < q>d jd| < q>W tt fdd j }tjrt| d S )Nverbose_namez%s_namez%s_val c                s   t  d| d  | d S )NZlookup_r   r   )setattr)Zkv)r1   r#   r+   r8      r9   z&FieldFilter.__init__.<locals>.<lambda>)r%   r*   getattrr.   context_paramssuperrY   r2   lookup_formatsr   r6   r   popr-   r:   r;   itemsr=   r>   )r1   r%   r&   r'   r(   r)   r*   namefilter_formatdisplaypvaluer?   )r/   )r1   r+   r2   y   s$    

zFieldFilter.__init__c                sl   t t  }| j  fdd jD |d< ttdd  j	 }t
jrXt|} i ||d< |S )Nc                s&   g | ]\}}}|t j| j  fqS r#   )r   r6   r*   ).0rc   rd   re   )r1   r#   r+   
<listcomp>   s   z+FieldFilter.get_context.<locals>.<listcomp>lookupc             S   s
   t j|  S )N)r   r6   )r7   r#   r#   r+   r8      r9   z)FieldFilter.get_context.<locals>.<lambda>Z
remove_url)r_   rY   rI   updater^   r`   r:   r;   r-   r<   r=   r>   r5   )r1   rJ   obj)r/   )r1   r+   rI      s    
zFieldFilter.get_contextc             C   s   dS )NTr#   )r1   r#   r#   r+   rB      s    zFieldFilter.has_outputc             C   s   |j f | jS )N)filterr-   )r1   rE   r#   r#   r+   rF      s    zFieldFilter.apply_filter)	r0   rM   rN   r`   r2   rI   rB   rF   __classcell__r#   r#   )r/   r+   rY   v   s
   rY   c                   s    e Zd ZdZ fddZ  ZS )ListFieldFilterzxadmin/filters/list.htmlc                s"   t t|  }t|  |d< |S )Nchoices)r_   ro   rI   r:   rp   )r1   rJ   )r/   r#   r+   rI      s    zListFieldFilter.get_context)r0   rM   rN   rK   rI   rn   r#   r#   )r/   r+   ro      s   ro   c               @   s(   e Zd ZddgZedd Zdd ZdS )BooleanFieldListFilter)exactz	%s__exactZbooleanFieldFilter_option_exact)isnullz
%s__isnullZ booleanFieldFilter_option_isnullc             C   s   t |tjtjfS )N)
isinstancer   ZBooleanFieldNullBooleanField)r$   r%   r&   r'   r(   r)   r*   r#   r#   r+   r,      s    zBooleanFieldListFilter.testc             c   s  dt dfdt dfdt dff}dt dfdt dfdt dff}dt dfdt d	ff}t| jd
krx>|D ]6\}}| j|ko| j | | j|i| jg|dV  qpW t| jt	j
r| jdk| | jdi| jgt ddV  nt| jdkst| jdkrxB|D ]:\}}| j|ko&| j | | j|i| jg|dV  qW t| jt	j
r| jdk| | jdi| jgt ddV  n~xB|D ]:\}}| j|ko| j | | j|i| jg|dV  qW t| jt	j
r| jdk| | jdi| jgt ddV  d S )Nr[   ZbooleanFieldFilter_option_all1ZbooleanFieldFilter_option_yes0ZbooleanFieldFilter_option_noZboolean_option_disableZboolean_option_enableZ&workflowNode_scopeOption_ownDepartmentzpersonnel.Resign.disableatt)selectedr5   re   trueZUnknownz)workflow.WorkflowNode.approver_by_overallz'workflow.WorkflowNode.notify_by_overall)_strr%   lookup_exact_vallookup_isnull_valr5   lookup_exact_namelookup_isnull_namert   r   ru   )r1   valZResign_Dis_AttZNode_Approve_Notifer_Filterrj   r.   r#   r#   r+   rp      sd    





zBooleanFieldListFilter.choicesN)r0   rM   rN   r`   rO   r,   rp   r#   r#   r#   r+   rq      s   rq   c               @   s,   e Zd ZdZddgZedd Zdd ZdS )	ChoicesFieldListFilterT)rr   z	%s__exactchoiceFieldFilter_option_exact)rs   z
%s__isnullchoiceFieldFilter_option_isnullc             C   s
   t |jS )N)boolrp   )r$   r%   r&   r'   r(   r)   r*   r#   r#   r+   r,     s    zChoicesFieldListFilter.testc             c   s   | j dk| i | jgtddV  xP| jjD ]D\}}dt| jkrN|dkrNq.t|| j k| | j|i|dV  q.W | j	rt
| j| | jdi| jgtjdV  d S )Nr[   fieldFilter_option_all)rx   r5   re   z#mysite.att.models.model_leave.LeaveZWithdrawry   )r|   r5   r~   rz   r%   flatchoicesr{   r(   r   include_noner   r}   r   r   EMPTY_CHANGELIST_VALUE)r1   rj   r.   r#   r#   r+   rp     s    zChoicesFieldListFilter.choicesN)r0   rM   rN   r   r`   rO   r,   rp   r#   r#   r#   r+   r   
  s
   r   c            	   @   sh   e Zd ZdZddedfddedfdd	ed
fddedfddedfddedfgZedd ZdS )TextFieldListFilterzxadmin/filters/char.htmlsearchz%s__icontainsZtextFieldFilter_option_containrr   z	%s__exactZtextFieldFilter_option_exact
startswithz%s__startswithZ!textFieldFilter_option_startswithendswithz%s__endswithZtextFieldFilter_option_endswithZone_ofz%s__inZtextFieldFilter_option_oneOfZregexz	%s__regexZtextFieldFilter_option_regexc             C   s   t |tjtjfS )N)rt   r   Z	CharFieldZ	TextField)r$   r%   r&   r'   r(   r)   r*   r#   r#   r+   r,   9  s    zTextFieldListFilter.testN)r0   rM   rN   rK   rz   r`   rO   r,   r#   r#   r#   r+   r   -  s   r   c               @   s4   e Zd ZdZddddddgZedd	 Zd
d ZdS )NumberFieldListFilterzxadmin/filters/number.html)Zequalz	%s__exactr[   )ltz%s__ltr[   )gtz%s__gtr[   )nez%s__ner[   )Zltez%s__lter[   )Zgtez%s__gter[   c             C   s   t |tjtjtjfS )N)rt   r   ZDecimalFieldZ
FloatFieldZIntegerField)r$   r%   r&   r'   r(   r)   r*   r#   r#   r+   r,   L  s    zNumberFieldListFilter.testc             C   s@   | j  }d| j }||kr4|jf | j||i}|jf |S )Nz%s__ne)r-   copyr*   excludera   rm   )r1   rE   r'   Zne_keyr#   r#   r+   rF   P  s    

z"NumberFieldListFilter.apply_filterN)r0   rM   rN   rK   r`   rO   r,   rF   r#   r#   r#   r+   r   @  s   r   c                   sP   e Zd ZdZddddddgZedd	 Z fd
dZ fddZdd Z	  Z
S )DateFieldListFilterzxadmin/filters/date.html)sincez%s__gter[   )untilz%s__lter[   )Zyearz%s__yearr[   )Zmonthz	%s__monthr[   )Zdayz%s__dayr[   )rs   z
%s__isnullr[   c             C   s   t |tjS )N)rt   r   Z	DateField)r$   r%   r&   r'   r(   r)   r*   r#   r#   r+   r,   e  s    zDateFieldListFilter.testc                s  d|  _ t fdd| D  _tt |||||| tdi ftd jdiftd j	t
j jt
jiftd j	t
j jt
jiftd	 j	t
jd
  jt
jiftd j	t
j jt
jiftd j	t
j jt
jiftd j	t
j jt
jiff _d S )Nz%s__c                s*   g | ]"\}}|  jrtj| |fqS r#   )r   field_genericr   r6   )rh   r7   v)r1   r#   r+   ri   k  s    z0DateFieldListFilter.__init__.<locals>.<listcomp>ZdateFieldFilter_option_anyDateZdateFieldFilter_option_hasDatefalseZdateFieldFilter_option_todayZ dateFieldFilter_option_yesterdayZ dateFieldFilter_option_past7Daysz,-7ZdateFieldFilter_option_thisWeekZ dateFieldFilter_option_thisMonthZdateFieldFilter_option_thisYear)r   dictrb   date_paramsr_   r   r2   rz   r   lookup_since_namer   ZFILTER_TODAYlookup_until_nameZFILTER_TOMORROWZFILTER_YESTERDAYZFILTER_THIS_WEEKZFILTER_THIS_MONTHZFILTER_THIS_YEARlinks)r1   r%   r&   r'   r(   r)   r*   )r/   )r1   r+   r2   i  s2    



zDateFieldListFilter.__init__c                s4   t t|  }t| jp*t| jp*t| j|d< |S )NZchoice_selected)r_   r   rI   r   Zlookup_year_valZlookup_month_valZlookup_day_val)r1   rJ   )r/   r#   r+   rI     s    zDateFieldListFilter.get_contextc             c   s>   x8| j D ].\}}| j|k| |tj| j g|dV  qW d S )N)rx   r5   re   )r   r   r5   r   r6   r   )r1   r.   
param_dictr#   r#   r+   rp     s
    zDateFieldListFilter.choices)r0   rM   rN   rK   r`   rO   r,   r2   rI   rp   rn   r#   r#   )r/   r+   r   Y  s   ;r   c                   sJ   e Zd ZdZdddgZedd Z fddZ fd	d
Zdd Z	  Z
S )TimeFieldListFilterzxadmin/filters/time.html)r   z%s__gter[   )r   z%s__ltr[   )rs   z
%s__isnullr[   c             C   s   t |tjS )N)rt   r   Z	TimeField)r$   r%   r&   r'   r(   r)   r*   r#   r#   r+   r,     s    zTimeFieldListFilter.testc          
      s   d|  _ t fdd| D  _tt |||||| tdi ftd jdiftd jdiftd	 j	t
j jt
jiftd
 j	t
j jt
jiftd j	t
j jt
jiff _d S )Nz%s__c                s*   g | ]"\}}|  jrtj| |fqS r#   )r   r   r   r6   )rh   r7   r   )r1   r#   r+   ri     s    z0TimeFieldListFilter.__init__.<locals>.<listcomp>ZtimeFieldFilter_option_anyTimeZtimeFieldFilter_option_hasTimer   Z timeFieldFilter_option_hasNoTimery   ZtimeFieldFilter_option_hour0008ZtimeFieldFilter_option_hour0012ZtimeFieldFilter_option_hour0018)r   r   rb   r   r_   r   r2   rz   r   r   r   ZFILTER_TIME_0r   ZFILTER_TIME_8ZFILTER_TIME_12ZFILTER_TIME_18r   )r1   r%   r&   r'   r(   r)   r*   )r/   )r1   r+   r2     s$    




zTimeFieldListFilter.__init__c                s   t t|  }|S )N)r_   r   rI   )r1   rJ   )r/   r#   r+   rI     s    zTimeFieldListFilter.get_contextc             c   s>   x8| j D ].\}}| j|k| |tj| j g|dV  qW d S )N)rx   r5   re   )r   r   r5   r   r6   r   )r1   r.   r   r#   r#   r+   rp     s
    zTimeFieldListFilter.choices)r0   rM   rN   rK   r`   rO   r,   r2   rI   rp   rn   r#   r#   )r/   r+   r     s   r   c                   s@   e Zd ZdZedd Z fddZdd Z fdd	Z  Z	S )
RelatedFieldSearchFilterzxadmin/filters/fk_search.htmlc             C   s2   t |sdS |jjt|}|o0t|dd dkS )NFrelfield_style)zfk-ajaxz	fk-select)r   
admin_site	_registrygetr   r]   )r$   r%   r&   r'   r(   r)   r*   related_modeladminr#   r#   r+   r,     s
    
zRelatedFieldSearchFilter.testc                s(  t |}t|dr |j j}n
|jjj}dd| fdd| fg| _tt	| 
|||||| | jjj|}	|	j| _t|dr|j| _n
|jj| _| j| _|d|jj|jjf | _| jr| ||| jnd| _d	| _|jjr$x2t|jjD ]"}
|  jd
|
|jj|
 f 7  _qW t| j| _d S )Nremote_fieldinz%%s__%s__inrr   z%%s__%s__exactrZ   z%s_%s_changelistr[   ?z	&_p_%s=%s)r   hasattrr   get_related_fieldrc   _metapkr`   r_   r   r2   r)   r   r   r   r   rZ   lookup_titler.   Zget_admin_urlZ	app_labelZ
model_name
search_urlr|   label_for_valuelabelrp   limit_choices_tor:   r
   )r1   r%   r&   r'   r(   model_adminr*   other_modelrel_namer   i)r/   r#   r+   r2     s*    






"z!RelatedFieldSearchFilter.__init__c          	   C   sL   y,|j jf ||i}dtt|jddd S  t|jfk
rF   dS X d S )Nz%s   z...)truncater[   )_default_managerr   r	   r   Zwords
ValueErrorZDoesNotExist)r1   r   r   rg   rl   r#   r#   r+   r     s
    z(RelatedFieldSearchFilter.label_for_valuec                s:   t t|  }| j|d< | j|d< | j|d< | j|d< |S )Nr   r   rp   r   )r_   r   rI   r   r   rp   r   )r1   rJ   )r/   r#   r+   rI     s    



z$RelatedFieldSearchFilter.get_context)
r0   rM   rN   rK   rO   r,   r2   r   rI   rn   r#   r#   )r/   r+   r     s
   r   c                   sP   e Zd ZdZedd Z fddZdd Zdd	 Z fd
dZ	dd Z
  ZS )RelatedFieldTreeFilterzxadmin/filters/tree.htmlc             C   s   t |S )N)r   )r$   r%   r&   r'   r(   r)   r*   r#   r#   r+   r,   *  s    zRelatedFieldTreeFilter.testc                s   t || _t|| _d| _t|dr2|j j}n| jj	j
j}dd| dfdd| dfd	g| _|jd
d| _tt| |||||| t|dr|j| _n| jj	j| _| j| _d S )NZcheckboxr   r   z%%s__%s__inrelatedFieldFilter_option_inrr   z%%s__%s__exactrelatedFieldFilter_option_exact)rs   z
%s__isnull relatedFieldFilter_option_isnullF)include_blankrZ   )r   another_modelr   self_ref_field
input_typer   r   r   rc   r   r   r`   get_choiceslookup_choicesr_   r   r2   rZ   r   r.   )r1   r%   r&   r'   r(   r   r*   r   )r/   r#   r+   r2   .  s     





zRelatedFieldTreeFilter.__init__c             C   sD   t | jr| jjjs(t| jdr.| jjr.d}nd}t| j| dkS )Nr   r   r   )r   r%   nullr   rC   r   )r1   extrar#   r#   r+   rB   F  s    
z!RelatedFieldTreeFilter.has_outputc             C   s   | j | jgS )N)lookup_kwarglookup_kwarg_isnull)r1   r#   r#   r+   expected_parametersO  s    z*RelatedFieldTreeFilter.expected_parametersc                sp   dd l }tt|  }t|  }t|  |d< ||d< | j|d< | j	|d< t| j
| j| jd|d< |S )Nr   	tree_data
time_stampr*   r   )r   rr   rs   rj   )timer_   ro   rI   intjsondumpsget_tree_datar*   r   lookup_in_namer~   r   )r1   r   rJ   r   )r/   r#   r+   rI   R  s    

z"RelatedFieldTreeFilter.get_contextc             C   s   ddl m} | jj }| jjjdkr<| }|j|j	d}g }x@|D ]8}|j
t|d}t|| jd }|rt||d< || qFW |S )Nr   )threadlocals)Z
DepartmentZPositionZAreaZLocation)
company_id)idrc   ZpId)Zmysite.baser   r   objectsallr   Zobject_nameZget_current_userrm   current_companyr   r   r]   r   rU   )r1   r   Zobjsuserr   rl   Z	tree_nodeZ	parent_idr#   r#   r+   r   a  s    
z$RelatedFieldTreeFilter.get_tree_data)r0   rM   rN   rK   rO   r,   r2   rB   r   rI   r   rn   r#   r#   )r/   r+   r   &  s   	r   c                   s@   e Zd Zedd Z fddZdd Zdd Zd	d
 Z  Z	S )RelatedFieldListFilterc             C   s   t |S )N)r   )r$   r%   r&   r'   r(   r)   r*   r#   r#   r+   r,   x  s    zRelatedFieldListFilter.testc                s|  t |}t|dr |j j}n
|jjj}dd| dfdd| dfdg| _|jd	d
| _	t
|dkrtjj|jjd}	dd |	D }	t|	| _	nt
|dkr|jjstjj|jddd}
t|
| _	nt
|dkst
|dkrtjj|jjddd}t|| _	nt
|dkrDtjj|jjddd}t|| _	nTt
|dkrztjj|jjddd}t|| _	n|jdkrtjj|jjddd}t|| _	nt d tkrt
|dkst
|dkrd d!d"d#d$d%d&d'g}d(d)g}tjj|d*dd+j|d,}t|| _	nzt d tkrt
|d-krg }tj dd.}x:|D ]2}t
|jjd/d0t
|d1 krX|| qXW t|| _	tt | !|||||| t"| j#d2$| j%jd   d k	r:t& r   yt' }W n2 t(k
r"   d3d4l)m*} |d5$ d6 Y nX  fd7d| j	D | _	t|d8rP|j+| _,n
|jj+| _,t
| j%d-krpd9| _,| j,| _-d S ):Nr   r   z%%s__%s__inr   rr   z%%s__%s__exactr   )rs   z
%s__isnullr   F)r   zworkflow.WorkflowNode.approver)r   c             S   s"   g | ]}|j d |j|jfqS )z{0} {1})r   formatZ	role_codeZ	role_name)rh   rf   r#   r#   r+   ri     s    z3RelatedFieldListFilter.__init__.<locals>.<listcomp>zpersonnel.Employee.company)r   r   Zcompany__namezpayroll.LeaveFormula.categoryzatt.Leave.categoryr   Zcategory_namezatt.AttSchedule.shiftaliaszatt.Training.categoryr   Zuser__idZuser__nicknameZsoftware_typezbase.AdminLog.content_typezbase.Bookmark.content_typebaseZauthZaccountsZiclockZ	personnelZdjceleryZsessionsZstaffZemployeecertificationZsystem_setting_permission)Zapp_label__inr(   )Z	model__inzaccounts.MyUser.groupsrc   -r[   r   zdisplay_for_{}r   )cprintz([WARNING] white_list {} is not iterable.Zredc                s    g | ]\}}| kr||fqS r#   r#   )rh   Z_id_name)
white_listr#   r+   ri     s    rZ   z
Group Name).r   r   r   r   rc   r   r   r`   r   r   r{   r   r   rm   r   r   r:   Zis_superuserr   values_listr   r    r   r   r   r   r   r   r!   replacerU   r_   r   r2   r]   r)   r   r%   callableiter	TypeErrorZmysite._utilsr   rZ   r   r.   )r1   r%   r&   r'   r(   r   r*   r   r   Zworkflow_alloverZcompanyZleaves_categoryZemployee_shiftZtraining_categoryZ	user_listZapp_label_listZexcluded_itemsZcontent_typeZprepare_lookupgroupsgroupZ_iterr   )r/   )r   r+   r2   |  s    


"





zRelatedFieldListFilter.__init__c             C   sD   t | jr| jjjs(t| jdr.| jjr.d}nd}t| j| dkS )Nr   r   r   )r   r%   r   r   rC   r   )r1   r   r#   r#   r+   rB     s    
z!RelatedFieldListFilter.has_outputc             C   s   | j | jgS )N)r   r   )r1   r#   r#   r+   r     s    z*RelatedFieldListFilter.expected_parametersc             c   s   t | jdkrd| _| jdko$| j | i | j| jgtddV  x<| jD ]2\}}| jt	|k| | j|i| jg|dV  qLW t
| jr| jjjst| jdr| jjs| jjrt | jdkrt| j| | jdi| jgtjdV  d S )	Nzaccounts.MyUser.groupsZ_p_groupprofile__id__inr[   ZAll)rx   r5   re   r   )z workflow.WorkflowEngine.employeezworkflow.WorkflowNode.approverzbase.AdminLog.content_typezaccounts.MyUser.groupsry   )r{   r%   r   lookup_in_valr}   r5   r   rz   r   r   r   r   r   Zmany_to_manyr   r   r   )r1   Zpk_valr   r#   r#   r+   rp     s*    zRelatedFieldListFilter.choices)
r0   rM   rN   rO   r,   r2   rB   r   rp   rn   r#   r#   )r/   r+   r   u  s
   L	r   c                   s8   e Zd ZddgZedd Z fddZdd Z  ZS )	AllValuesFieldListFilter)rr   z	%s__exactZfieldFilter_option_exact)rs   z
%s__isnullZfieldFilter_option_isnullc             C   s   dS )NTr#   )r$   r%   r&   r'   r(   r)   r*   r#   r#   r+   r,     s    zAllValuesFieldListFilter.testc                sh   t ||\}}|j }	t||}
|	|
}	|	 |jj|jdd| _	t
t| |||||| d S )NT)flat)r   r   r   r   rm   distinctorder_byrc   r   r   r_   r   r2   )r1   r%   r&   r'   r(   r)   r*   Zparent_modelZreverse_pathrE   r   )r/   r#   r+   r2     s    



z!AllValuesFieldListFilter.__init__c             c   s   | j dko| jdk| i | j| jgtddV  d}xJ| jD ]@}|d krPd}q>t|}| j |k| | j|i| jg|dV  q>W |rt| j	dkrt
| j| | jdi| jgtjdV  d S )Nr[   r   )rx   r5   re   FTzbase.AdminLog.ip_addressry   )r|   r}   r5   r~   r   rz   r   r   r{   r%   r   r   r   )r1   r   r   r#   r#   r+   rp     s$    z AllValuesFieldListFilter.choices)	r0   rM   rN   r`   rO   r,   r2   rp   rn   r#   r#   )r/   r+   r     s
   r   c                   sh   e Zd ZdZdZddedfgZdddd	d
Zedd Z	dd Z
dd Zd fdd	Zdd Z  ZS )MultiSelectFieldListFilterz Delegates the filter to the default filter and ors the results of each

    Lists the distinct values of each field as a checkbox
    Uses the default spec for each

    zxadmin/filters/checklist.htmlr   z%s__inZ multiSelectFieldFilter_option_inFzquickfilter_%si  default)enabledkeytimeoutcachec             C   s   dS )NFr#   )r$   r%   r&   r'   r(   r)   r*   r#   r#   r+   r,   6  s    zMultiSelectFieldListFilter.testc             C   s2   | j d sd S t| j d }|| j d | j S )Nr   r   r   )cache_configr   r   r*   )r1   cr#   r#   r+   get_cached_choices:  s    
z-MultiSelectFieldListFilter.get_cached_choicesc             C   s4   | j d sd S t| j d }|| j d | j |S )Nr   r   r   )r   r   setr*   )r1   rp   r   r#   r#   r+   set_cached_choices@  s    
z-MultiSelectFieldListFilter.set_cached_choicesNc                s$  t t| |||||| |
d k	r:t|
tkr:| j|
 | jd r`|| _|  }|r`|| _	d S | j
jjjf d| dij|dd }|d k	r| j
 j|d|}|d k	rt|tkr| |kr|d | }dd |j|ddD | _	|	d k	rt| j	|	d| _	| jd r | | j	 d S )	Nr   z
%s__isnullT)r   )Zid__inc             S   s$   g | ]}t | d krt |qS )r[   )r{   strip)rh   itr#   r#   r+   ri   b  s    z7MultiSelectFieldListFilter.__init__.<locals>.<listcomp>)r   )r_   r   r2   typer   r   rk   r*   r   r   r)   r3   rE   r   r   r   rm   r   r   countsortedr   )r1   r%   r&   r'   r(   r   r*   Zfield_order_byZfield_limitZsort_keyr   rp   rE   )r/   r#   r+   r2   F  s*    
 
z#MultiSelectFieldListFilter.__init__c             #   s   t | jttfkr| jp t| j| _t| jdk| i | jgtddV  xd| jD ]Z t	 | jk| | jd
 g| j i| | jd
 fdd| jD i dV  qTW d S )Nr   r   )rx   r5   re   ,c                s   g | ]}| kr|qS r#   r#   )rh   r   )r   r#   r+   ri   v  s    z6MultiSelectFieldListFilter.choices.<locals>.<listcomp>)rx   r5   Zremove_query_stringre   )r   r   tupler:   rC   r5   r   rz   r   r   join)r1   r#   )r   r+   rp   i  s    
 z"MultiSelectFieldListFilter.choices)NNNN)r0   rM   rN   __doc__rK   rz   r`   r   rO   r,   r   r   r2   rp   rn   r#   r#   )r/   r+   r   *  s    "r   c               @   s,   e Zd ZdZddgZedd Zdd ZdS )	r   T)rr   z	%s__exactr   )rs   z
%s__isnullr   c             C   s
   t |jS )N)r   rp   )r$   r%   r&   r'   r(   r)   r*   r#   r#   r+   r,     s    zChoicesFieldListFilter.testc             c   s   | j dk| i | jgtddV  x8| jjD ],\}}t|| j k| | j|i|dV  q.W | jrt| j	| | j
di| jgtjdV  d S )Nr[   r   )rx   r5   re   ry   )r|   r5   r~   rz   r%   r   r   r   r   r}   r   r   r   )r1   rj   r.   r#   r#   r+   rp     s    zChoicesFieldListFilter.choicesN)r0   rM   rN   r   r`   rO   r,   rp   r#   r#   r#   r+   r   {  s
   c                   sd   e Zd ZdZdZedd Z fddZdd Zd	d
 Z	dd Z
dd Z fddZdd Z  ZS )SimpleListFilterNFc             C   s   d S )Nr#   )r$   r%   r&   r'   r(   r)   r*   r#   r#   r+   r,     s    zSimpleListFilter.testc                s   t t| |||| | jd kr0td| jj | jd krJtd| jj | js`t	|j
 | _| j| jkr| j| j}|| j| j< | ||}|d krd}t|| _d S )Nz+The filter '%s' does not specify a 'title'.z9The list filter '%s' does not specify a 'parameter_name'.r#   )r_   r   r2   r.   r   r/   r0   parameter_namer'   r   ZGETrb   ra   r-   lookupsr:   r   )r1   r&   r'   r(   r)   rg   r   )r/   r#   r+   r2     s&    


zSimpleListFilter.__init__c             C   s   t | jdkS )Nr   )rC   r   )r1   r#   r#   r+   rB     s    zSimpleListFilter.has_outputc             C   s   | j | jdS )z
        Returns the value (in string format) provided in the request's
        query string for this filter, if any. If the value wasn't provided then
        returns None.
        N)r-   r   r  )r1   r#   r#   r+   rg     s    zSimpleListFilter.valuec             C   s   t ddS )zV
        Must be overridden to return a list of tuples (value, verbose value)
        zjThe SimpleListFilter.lookups() method must be overridden to return a list of tuples (value, verbose value)N)rA   )r1   r&   r   r#   r#   r+   r    s    zSimpleListFilter.lookupsc             C   s   t dd S )NzNThe SimpleListFilter.queryset() method must be overridden to return a queryset)rA   )r1   r&   rE   r#   r#   r+   rE     s    zSimpleListFilter.querysetc                s"   t t|  }t|  |d< |S )Nrp   )r_   r   rI   r:   rp   )r1   rJ   )r/   r#   r+   rI     s    zSimpleListFilter.get_contextc             c   s   |   dk| i | jgtddV  x:| jD ]0\}}t||   k| | j|ig |dV  q.W | jrt| j| | j	di| jgt
jdV  d S )Nr[   r   )rx   r5   re   ry   )rg   r5   r  rz   r   r   r   r   r}   r   r   r   )r1   rj   r.   r#   r#   r+   rp     s    
zSimpleListFilter.choices)r0   rM   rN   r  r   rO   r,   r2   rB   rg   r  rE   rI   rp   rn   r#   r#   )r/   r+   r     s   r   )JZ
__future__r   r   Zdjango.core.cacher   Zdjango.core.exceptionsr   Z	django.dbr   Zdjango.template.loaderr   r=   Zdjango.utils.encodingr   r   Zdjango.utils.htmlr	   r
   Zdjango.utils.safestringr   Zdjango.utils.textr   Zdjango.utils.translationr   rz   Zmysite.admin.utilsr   Zmysite.admin.constr   r   Z"django.contrib.contenttypes.modelsr   Zmysite.admin.xadminr   utilr   r   r   r   r   r   r   r   Z%mysite.att.models.model_leavecategoryr   Z(mysite.att.models.model_trainingcategoryr   Z$mysite.workflow.models.workflow_roler   Zmysite.base.modelsr   Z mysite.att.models.model_attshiftr    Zdjango.contrib.auth.modelsr!   objectr"   rQ   ZmanagerrY   ro   rW   rq   r   r   r   r   r   r   r   r   r   r   r   r#   r#   r#   r+   <module>   sh   (;,
]"Z97N~5P 