
    P1i                        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 d	d
lmZ  G d dej$                        Z G d dej$                        Z G d de      Zej,                  j/                  ee       y)    )admin)	UserAdmin)Group)format_html)reverse)Count)timezone)	timedelta   )Userc                   $    e Zd ZdZdZdZd Zd Zy)JoinDateFilterz3Custom filter for join date with common time rangesz	join date	join_datec                      y)N)todayTodayweekzPast 7 daysmonthz
Past month)quarterzPast 3 months)yearz	Past year selfrequestmodel_admins      ,/home/cursorai/projects/iching/main/admin.pylookupszJoinDateFilter.lookups   s    
    c                 $   t        j                         }| j                         dk(  r |j                  |j	                               S | j                         dk(  r|j                  |t        d      z
        S | j                         dk(  r|j                  |t        d      z
        S | j                         d	k(  r|j                  |t        d
      z
        S | j                         dk(  r|j                  |t        d      z
        S |S )Nr   )date_joined__dater      days)date_joined__gter      r   Z   r   im  r	   nowvaluefilterdater
   r   r   querysetr+   s       r   r0   zJoinDateFilter.queryset   s    lln::<7"??SXXZ?@@ZZ\V#??C):K4K?LLZZ\W$??C):L4L?MMZZ\Y&??C):L4L?MMZZ\V#??C):M4M?NNr!   N__name__
__module____qualname____doc__titleparameter_namer    r0   r   r!   r   r   r      s    =E N
r!   r   c                   $    e Zd ZdZdZdZd Zd Zy)LastLoginFilterz4Custom filter for last login with common time rangesz
last loginlast_login_rangec                      y)N)r   r   r   )neverzNever logged inr   r   s      r   r    zLastLoginFilter.lookups0   s    
r!   c                    t        j                         }| j                         dk(  r |j                  |j	                               S | j                         dk(  r|j                  |t        d      z
        S | j                         dk(  r|j                  |t        d      z
        S | j                         d	k(  r|j                  d
      S |S )Nr   )last_login__dater   r$   r%   )last_login__gter   r(   r<   T)last_login__isnullr*   r/   s       r   r0   zLastLoginFilter.queryset8   s    lln::<7"??CHHJ???ZZ\V#??39J3J?KKZZ\W$??39K3K?LLZZ\W$??d?;;r!   Nr1   r   r!   r   r9   r9   +   s    >E'N
r!   r9   c                        e Zd ZeZg dZdddeedddfZdZ	dd	d
ifdd	difdd	diffZ
ddddffZd
ZdZdZ fdZd Zde_        de_         xZS )MainUserAdmin)phoneemail
first_name	last_namerefbazi_persons_linkdate_joined
last_loginlast_active_dateis_staff	is_activerL   rM   groupsrI   rJ   rK   Detailsfields)rC   rD   rE   rF   Network)rG   Permissions)rM   rL   is_superuserrN   user_permissionsN)wide)	rC   rD   rE   rF   	password1	password2rL   rM   rN   )classesrP   )rD   )rN   rT   c                 l    ddl m} t        |   |      }|j	                  t        dd            }|S )z@Override get_queryset to add person count annotation for sortingr   PersonpersonT)distinct)person_count)bazi.modelsr[   superget_querysetannotater   )r   r   r[   r0   	__class__s       r   ra   zMainUserAdmin.get_querysetZ   s;    &7'0$$x$7 % 
 r!   c                 D   	 ddl m} |j                  j                  |      j	                         }|dk(  rt        d      S t        d      }| d|j                   }t        d|||dk7  rd	      S d
      S # t        $ r}t        dt        |            cY d}~S d}~ww xY w)z;Create a link to the BaZi person list filtered by this userr   rZ   )
created_byz,<span style="color: #666;">No persons</span>zadmin:bazi_person_changelistz?created_by__exact=z<a href="{}" style="text-decoration: none; padding: 4px 8px; background-color: #007cba; color: white; border-radius: 3px; font-size: 11px;">{} person{}</a>r   s z*<span style="color: red;">Error: {}</span>N)
r_   r[   objectsr-   countr   r   pk	Exceptionstr)r   objr[   r^   urlfiltered_urles          r   rH   zMainUserAdmin.bazi_persons_linkc   s    	U*!>>00C0@FFHLq "#QRR 89C!U"5cffX>L"#q( 
 /1   	UKSQRVTT	Us)   ?A7 .A7 1A7 7	B BBBzBaZi Personsr^   )r2   r3   r4   r   modellist_displayr   r9   list_filterdate_hierarchy	fieldsetsadd_fieldsetssearch_fieldsorderingfilter_horizontalra   rH   short_descriptionadmin_order_field__classcell__)rc   s   @r   rB   rB   F   s    E gL{HnoWdfr  uG  HK"N	XLMN	Xx()	#jklI 
  AB 	
M BMH7U0 +9'*8''r!   rB   N)django.contribr   django.contrib.auth.adminr   django.contrib.auth.modelsr   django.utils.htmlr   django.urlsr   django.db.modelsr   django.utilsr	   datetimer
   modelsr   SimpleListFilterr   r9   rB   siteregisterr   r!   r   <module>r      sg      / , )  " !  U++ >e,, 669I 69r 

  D- (r!   