o
    bh                     @   s   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eddZG dd	 d	ej	Z
G d
d de
Zdd Zede_eje dS )    )admin)	AdminSite)gettext_lazyc                       s8   e Zd ZdZedZedZedZ fddZ  Z	S )CoreAdminSitez
    Custom admin site for core app.
    
    Provides customized admin interface with
    branding and additional functionality.
    zCore Administrationz
Core AdminzCore Administration Dashboardc                    s0   t  |}g d  fdd}|j|d |S )z
        Get the application list for admin index.
        
        Args:
            request: HTTP request object
            
        Returns:
            list: List of applications for admin index
        )accountsauthenticationcorecommonc                    s4   |  dd}z |W S  ty   t  Y S w )z
            Get priority for app ordering.
            
            Args:
                app: Application dictionary
                
            Returns:
                int: Priority number for ordering
            	app_label N)getindex
ValueErrorlen)appr
   Z	app_order CC:\Users\vibe-look\OneDrive\Desktop\Adtlas_V\src\apps\core\admin.pyget_app_priority4   s   
z4CoreAdminSite.get_app_list.<locals>.get_app_priority)keyN)superget_app_listsort)selfrequestapp_listr   	__class__r   r   r   %   s
   
zCoreAdminSite.get_app_list)
__name__
__module____qualname____doc___site_header
site_titleindex_titler   __classcell__r   r   r   r   r      s    r   Z
core_adminnamec                       s~   e Zd ZdZdZdZdZdZdZdZ	e
dd	dife
d
dddffZ fddZdddZd fdd	Z fddZ  ZS )BaseModelAdminz
    Base admin class with common configurations.
    
    Provides standard admin interface features
    that can be inherited by other admin classes.
       F
created_at)r+   
updated_at)id)r-   r+   r,   zBasic InformationfieldsZ
Timestamps)collapse)r.   classesc                    s   t  |}|S )z
        Get optimized queryset for admin list view.
        
        Args:
            request: HTTP request object
            
        Returns:
            QuerySet: Optimized queryset
        N)r   get_queryset)r   r   querysetr   r   r   r1      s   
zBaseModelAdmin.get_querysetNc                 C   s   t | j}|jjs
	 |S )z
        Get readonly fields based on user permissions.
        
        Args:
            request: HTTP request object
            obj: Model instance being edited
            
        Returns:
            tuple: Readonly fields
        N)listreadonly_fieldsuseris_superuser)r   r   objr4   r   r   r   get_readonly_fields   s   
z"BaseModelAdmin.get_readonly_fieldsc                    s   t  ||S )z
        Check if user has delete permission.
        
        Args:
            request: HTTP request object
            obj: Model instance being deleted
            
        Returns:
            bool: True if user can delete, False otherwise
        N)r   has_delete_permissionr   r   r7   r   r   r   r9      s   z$BaseModelAdmin.has_delete_permissionc                    s>   t |dr|s|j|_t |dr|j|_t |||| dS )z
        Save model with additional processing.
        
        Args:
            request: HTTP request object
            obj: Model instance being saved
            form: Admin form instance
            change: True if editing existing object
        
created_by
updated_byN)hasattrr5   r;   r<   r   
save_model)r   r   r7   formchanger   r   r   r>      s
   
zBaseModelAdmin.save_modelN)r   r   r    r!   list_per_pageshow_full_result_countdate_hierarchylist_filtersearch_fieldsr4   r"   	fieldsetsr1   r8   r9   r>   r&   r   r   r   r   r)   O   s(    
r)   c                   @   s,   e Zd ZdZdd Zd	ddZd	ddZdS )
ReadOnlyModelAdminz}
    Read-only admin class for models that shouldn't be edited.
    
    Useful for log models or system-generated data.
    c                 C      dS )z
        Disable add permission.
        
        Args:
            request: HTTP request object
            
        Returns:
            bool: Always False
        FNr   )r   r   r   r   r   has_add_permission   s   
z%ReadOnlyModelAdmin.has_add_permissionNc                 C   rI   )z
        Disable change permission.
        
        Args:
            request: HTTP request object
            obj: Model instance
            
        Returns:
            bool: Always False
        FNr   r:   r   r   r   has_change_permission      z(ReadOnlyModelAdmin.has_change_permissionc                 C   rI   )z
        Disable delete permission.
        
        Args:
            request: HTTP request object
            obj: Model instance
            
        Returns:
            bool: Always False
        FNr   r:   r   r   r   r9      rL   z(ReadOnlyModelAdmin.has_delete_permissionrA   )r   r   r    r!   rJ   rK   r9   r   r   r   r   rH      s
    
rH   c                 C   s   ddl }ddlm} |dd}d| jjj d|d< ||}d	d
 | jjjD }|| |D ] }g }	|D ]}
t	||
}|du rCd}|	
t| q6||	 q0|S )z
    Admin action to export selected objects.
    
    Args:
        modeladmin: Admin class instance
        request: HTTP request object
        queryset: Selected objects queryset
        
    Returns:
        HttpResponse: CSV export response
    r   N)HttpResponseztext/csv)content_typezattachment; filename="z.csv"zContent-Dispositionc                 S   s   g | ]}|j qS r   r'   ).0fieldr   r   r   
<listcomp>  s    z+export_selected_objects.<locals>.<listcomp>r   )csvdjango.httprM   model_metaverbose_name_pluralwriterr.   writerowgetattrappendstr)
modeladminr   r2   rR   rM   responserW   field_namesr7   row
field_namevaluer   r   r   export_selected_objects   s    



rb   zExport selected objects to CSVN)Zdjango.contribr   django.contrib.adminr   django.utils.translationr   r"   r   Zcore_admin_site
ModelAdminr)   rH   rb   short_descriptionsite
add_actionr   r   r   r   <module>   s    
2x/
'