o
    Ӎdh-                     @   s|  d 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mZmZmZ eeG d
d dejZG dd dejZeeG dd dejZG dd dejZeeG dd dejZeeG dd dejZejdddd Zejdddd Zejdddd Zejd dd!d" Z eege_!ee ge_!d#ej"_#d$ej"_$d%ej"_%d&S )'a  Advertisers Admin Configuration

This module configures the Django admin interface for the advertisers app.
Provides comprehensive admin views for managing agencies, brands, and relationships.

Admin Classes:
    - AgencyAdmin: Admin interface for agencies
    - BrandAdmin: Admin interface for brands
    - BrandCategoryAdmin: Admin interface for brand categories
    - UserAdvertiserAdmin: Admin interface for user-advertiser relationships
    )admin)format_html)reverse)	mark_safe)CountSum)timezone   )AgencyBrandBrandCategoryUserAdvertiserc                   @   sb   e Zd ZdZg dZddgZddgZdgZddd	ifd
ddiffZdd Z	de	_
dd Zde_
dS )BrandCategoryAdminzpAdmin interface for BrandCategory model.
    
    Provides hierarchical category management with tree view.
    )nameparentbrands_countsubcategories_count
created_atr   r   r   descriptionBasic Informationfields)r   r   Z	Hierarchy)r   c                 C   6   |j jdd }|dkrtd}td||j|S dS )z*Display number of brands in this category.activestatusr   "admin:advertisers_brand_changelistz1<a href="{}?category__id__exact={}">{} brands</a>0 brandsNbrandsfiltercountr   r   idselfobjr    url r&   JC:\Users\vibe-look\OneDrive\Desktop\Adtlas_V\src\apps\advertisers\admin.pyr   .      zBrandCategoryAdmin.brands_countBrandsc                 C   s   |j  }| dS )z Display number of subcategories.z subcategoriesN)subcategoriesr    r#   r$   r    r&   r&   r'   r   :   s   

z&BrandCategoryAdmin.subcategories_countZSubcategoriesN)__name__
__module____qualname____doc__list_displaylist_filtersearch_fieldsordering	fieldsetsr   short_descriptionr   r&   r&   r&   r'   r      s"    	

r   c                       8   e Zd ZdZeZdZg dZddgZ fddZ	  Z
S )BrandInlinez,Inline admin for brands within agency admin.r   )r   categoryr   annual_budgetr   
updated_atc                       t  |dS )%Optimize queryset for inline display.r8   Nsuperget_querysetselect_relatedr#   request	__class__r&   r'   r?   I      zBrandInline.get_queryset)r,   r-   r.   r/   r   modelextrar   readonly_fieldsr?   __classcell__r&   r&   rC   r'   r7   A       r7   c                       s   e Zd ZdZg dZg dZg dZdgZdddifd	dd
ifdddifdddifdddiffZddgZ	e
gZ fddZdd Zde_dd Zde_ fddZ  ZS )AgencyAdminz{Admin interface for Agency model.
    
    Provides comprehensive agency management with statistics and relationships.
    )	r   contact_personemailcitycountryr   campaigns_countr   r   )r   rO   rN   r   r:   )r   r   rM   rL   rN   rO   r   r   r   r   r   r   Contact Information)rM   phonerL   Location)addressrN   rO   Online PresencewebsitelogoZ
Managementownerr   r:   c                    s   t  |ddS )$Optimize queryset with related data.r[   r   Nr>   r?   r@   prefetch_relatedrA   rC   r&   r'   r?   v   s   zAgencyAdmin.get_querysetc                 C   r   )z)Display number of brands for this agency.r   r   r   r   z/<a href="{}?agency__id__exact={}">{} brands</a>r   Nr   r"   r&   r&   r'   r   z   r(   zAgencyAdmin.brands_countr)   c                 C   s   |j }| dS )z,Display number of campaigns for this agency.
 campaignsN)total_campaignsr+   r&   r&   r'   rP      s   
zAgencyAdmin.campaigns_count	Campaignsc                    s(   |s	|j s	|j|_ t |||| dS )z#Set owner when creating new agency.N)r[   userr>   
save_model)r#   rB   r$   formchangerC   r&   r'   rc      s   
zAgencyAdmin.save_model)r,   r-   r.   r/   r0   r1   r2   r3   r4   rH   r7   inlinesr?   r   r5   rP   rc   rI   r&   r&   rC   r'   rK   N   s<    
rK   c                       r6   )UserAdvertiserInlinezBInline admin for user-advertiser relationships within brand admin.r   )rb   role	is_activer   r:   c                    r;   )r<   rb   Nr=   rA   rC   r&   r'   r?      rE   z!UserAdvertiserInline.get_queryset)r,   r-   r.   r/   r   rF   rG   r   rH   r?   rI   r&   r&   rC   r'   rg      rJ   rg   c                       s   e Zd ZdZg dZg dZg dZdgZdddifd	dd
ifdddifdddifdddiffZddgZ	e
gZ fddZdd Zde_ fddZ  ZS )
BrandAdminzyAdmin interface for Brand model.
    
    Provides comprehensive brand management with statistics and relationships.
    )r   agencyr8   industryr9   rP   r   r   )r   rk   r8   rl   r   r:   )r   r   rl   target_audienceZagency__nameZcategory__namer   r   r   rQ   ZClassification)rk   r8   rl   rR   )contact_emailcontact_phonerV   rW   zBusiness Information)rm   r9   r   r:   c                    s   t  |dddS )r\   rk   r8   	campaignsNr]   rA   rC   r&   r'   r?      s
   zBrandAdmin.get_querysetc                 C   sB   |j }|dkrztd}td||j|W S    | d Y S dS )z+Display number of campaigns for this brand.r   z#admin:campaigns_campaign_changelistz6<a href="{}?advertiser__id__exact={}">{} campaigns</a>r_   z0 campaignsN)r`   r   r   r!   r"   r&   r&   r'   rP      s   zBrandAdmin.campaigns_countra   c                    <   |j dkr|jjstjj|jd|d< t j||fi |S )zCustomize foreign key fields.rk   rZ   querysetN)r   rb   is_superuserr
   objectsr   r>   formfield_for_foreignkeyr#   db_fieldrB   kwargsrC   r&   r'   ru         

z#BrandAdmin.formfield_for_foreignkey)r,   r-   r.   r/   r0   r1   r2   r3   r4   rH   rg   rf   r?   rP   r5   ru   rI   r&   r&   rC   r'   rj      s8    rj   c                       s~   e Zd ZdZg dZg dZg dZdgZdddifd	dd
iffZddgZ	 fddZ
dd Zde_de_ fddZ  ZS )UserAdvertiserAdminzAdmin interface for UserAdvertiser relationship model.
    
    Manages user-brand relationships with roles and permissions.
    )rb   brandagency_namerh   ri   r   )rh   ri   brand__agencyr   r:   )user__usernameuser__emailuser__first_nameuser__last_namebrand__namebrand__agency__namez-created_atRelationshipr   )rb   r{   zAccess Control)rh   permissionsri   r   r:   c                    s   t  |dddS )r\   rb   r{   r}   Nr=   rA   rC   r&   r'   r?     s   z UserAdvertiserAdmin.get_querysetc                 C   s
   |j jjS )z"Display agency name for the brand.N)r{   rk   r   )r#   r$   r&   r&   r'   r|     s   
zUserAdvertiserAdmin.agency_namer
   r   c                    rq   )z7Customize foreign key fields based on user permissions.r{   )Zagency__ownerrr   N)r   rb   rs   r   rt   r   r>   ru   rv   rC   r&   r'   ru     ry   z,UserAdvertiserAdmin.formfield_for_foreignkey)r,   r-   r.   r/   r0   r1   r2   r3   r4   rH   r?   r|   r5   admin_order_fieldru   rI   r&   r&   rC   r'   rz      s&    	rz   zActivate selected agencies)r   c                 C   "   |j dd}| || d dS )zBulk activate agencies.r   r   z& agencies were successfully activated.Nupdatemessage_user
modeladminrB   rr   updatedr&   r&   r'   activate_agencies#  
   r   zDeactivate selected agenciesc                 C   r   )zBulk deactivate agencies.inactiver   z( agencies were successfully deactivated.Nr   r   r&   r&   r'   deactivate_agencies-  r   r   zActivate selected brandsc                 C   r   )zBulk activate brands.r   r   z$ brands were successfully activated.Nr   r   r&   r&   r'   activate_brands7  r   r   zDeactivate selected brandsc                 C   r   )zBulk deactivate brands.r   r   z& brands were successfully deactivated.Nr   r   r&   r&   r'   deactivate_brandsA  r   r   z!Adtlas Advertisers AdministrationzAdtlas Advertisers Adminz,Welcome to Adtlas Advertisers AdministrationN)&r/   Zdjango.contribr   django.utils.htmlr   django.urlsr   django.utils.safestringr   django.db.modelsr   r   django.utilsr   modelsr
   r   r   r   register
ModelAdminr   TabularInliner7   rK   rg   rj   rz   actionr   r   r   r   actionssitesite_header
site_titleindex_titler&   r&   r&   r'   <module>   s>    )DI
8

	

	

	



