U
    @h                     @   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 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 G dd deZG dd deZ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eG dd dej Z#edej$_%edej$_&edej$_'G dd deZ(G dd  d eZ)eeG d!d" d"ej Z*eeG d#d$ d$ej Z+ej$,esej$ee! ej$,esej$ee" ej$,esej$ee# d%S )&a;  
Django Admin Configuration for Agency and Brand Management

This module provides comprehensive admin interface configurations for:
- Agency: Marketing/advertising agencies
- Brand: Brands managed by agencies  
- Advertisers: Users associated with brands

Author: Generated for Django Admin Interface
Created: 2025
    )admin)format_html)gettext_lazy)reverse)	mark_safe)CountQ)messages)SimpleListFilter   )AgencyBrand
AdvertiserBrandCategoryBrandStatus
AgencyTypeAgencyTeamMemberc                   @   s,   e Zd ZdZedZdZdd Zdd ZdS )	BrandCountFilterz
    Custom filter to filter agencies by number of brands they manage.
    Provides quick filtering options for agencies with different brand volumes.
    zBrand Countbrand_countc                 C   s,   dt dfdt dfdt dfdt dffS )	z,Define filter options for brand count ranges0z	No Brands1-5z
1-5 Brands6-10z6-10 Brands11+z
11+ Brands_selfrequestZmodel_admin r   apps/agencies/admin.pylookups%   s
    



zBrandCountFilter.lookupsc                 C   st   |j tdd}|  dkr(|jddS |  dkr@|jddS |  dkrX|jd	dS |  d
krp|jddS |S )z.Apply filtering logic based on selected optionbrands)r   r   r   r   )r      )Zbrand_count__ranger   )   
   r      )Zbrand_count__gte)annotater   valuefilterr   r   querysetr   r   r   r*   .   s    zBrandCountFilter.querysetN	__name__
__module____qualname____doc__r   titleZparameter_namer    r*   r   r   r   r   r      s
   	r   c                   @   s,   e Zd ZdZedZdZdd Zdd ZdS )	ActiveBrandsFilterz
    Filter to show agencies based on their active brand status.
    Helps identify agencies with active vs inactive brand portfolios.
    zActive Brands Statusactive_brandsc                 C   s"   dt dfdt dfdt dffS )z-Define filter options for active brand status
has_activezHas Active Brands	no_activezNo Active Brands
all_activezAll Brands Activer   r   r   r   r   r    F   s    


zActiveBrandsFilter.lookupsc                 C   s~   |   dkr|jtjd S |   dkr<|jtjd S |   dkrz|jtdtdttjdddjdt	
d	d
S |S )z'Apply filtering logic for active brandsr3   )Zbrands__statusr4   r5   r!   r(   )total_brandsr2   r   r2   )Ztotal_brands__gtr7   )r'   r(   r   ACTIVEZdistinctZexcluder&   r   r   modelsFr)   r   r   r   r*   N   s    zActiveBrandsFilter.querysetNr+   r   r   r   r   r1   >   s
   r1   c                   @   sN   e Zd ZdZeZdZdZdZdZ	dZ
dZedZed	Zd
d Zede_dS )BrandInlinez
    Inline admin for Brand model within Agency admin.
    Allows management of brands directly from the agency detail page.
    r   r   r$   )namecategorystatusis_featuredlogo_previewr@   Zcollapser   ZBrandsc                 C   s   |j rtd|j jS tdS )z
        Display a small preview of the brand logo in the inline form.
        Returns HTML for image display or placeholder text.
        zV<img src="{}" width="50" height="50" style="object-fit: cover; border-radius: 4px;" />zNo logologor   urlr   r   objr   r   r   r@   x   s    zBrandInline.logo_previewLogo PreviewN)r,   r-   r.   r/   r   modelextramin_numZmax_numfieldsreadonly_fieldsclassesr   verbose_nameverbose_name_pluralr@   short_descriptionr   r   r   r   r;   e   s   r;   c                   @   s0   e Zd ZdZeZdZdZdZe	dZ
e	dZdS )AdvertisersInlinez
    Inline admin for Advertisers model within Brand admin.
    Shows users associated with each brand for quick management.
    r   r   )id_userr>   r   AdvertisersN)r,   r-   r.   r/   r   rI   rJ   rK   rL   r   rO   rP   r   r   r   r   rR      s   rR   c                   @   s   e Zd ZdZdZdZeeddfZdZ	dZ
dZdZed	d
eddfedddeddffZegZdd Zede_de_dd Zede_dd Zede_dd Zede_dd  Zed!e_d"d# Zed$e_d%d& Zed'e_d(d)gZd*S )+AgencyAdminz
    Comprehensive admin interface for Agency model.
    Provides full CRUD operations with enhanced filtering and display options.
    )r<   
owner_linkr   active_brand_countdescription_short
created_atstatus_indicatorr<   
is_deletedowner)r<   descriptionowner__usernameZowner__email   )r]   Basic Information)r<   r]   r^   z.Core agency information and ownership details.rL   r^   Metadata)r\   rY   rB   z/Administrative metadata and status information.rL   rN   r^   c                 C   s0   |j r(td|j jgd}td||j jS tdS )z
        Create a clickable link to the owner's user profile.
        Provides easy navigation to related user information.
        admin:accounts_user_changeargs<a href="{}">{}</a>zNo Owner)r]   r   pkr   usernamer   r   rG   rE   r   r   r   rV      s    zAgencyAdmin.owner_linkZOwnerr_   c                 C   s.   |j  }|dkr*td}td||j|S dS )z
        Display the total number of brands managed by this agency.
        Includes a link to filter brands by this agency.
        r   zadmin:agencies_brand_changelistz/<a href="{}?agency__id__exact={}">{} brands</a>z0 brands)r!   countr   r   ri   r   rG   rl   rE   r   r   r   r      s    
  zAgencyAdmin.brand_countzTotal Brandsc                 C   s   |j jtjd }| dS )z
        Display the number of active brands managed by this agency.
        Provides quick insight into agency activity level.
        r>   z active)r!   r(   r   r8   rl   )r   rG   rl   r   r   r   rW      s    zAgencyAdmin.active_brand_countzActive Brandsc                 C   s4   |j r,t|j dkr&|j dd d S |j S tdS )z
        Display truncated description for better list view readability.
        Shows first 50 characters with ellipsis if longer.
        2   N...No description)r^   lenr   rF   r   r   r   rX     s    &zAgencyAdmin.description_shortDescriptionc                 C   s&   |j rtdtdS tdtdS dS )z
        Visual indicator for agency status based on deletion flag.
        Uses color-coded badges for quick status recognition.
        u:   <span style="color: red; font-weight: bold;">●</span> {}ZDeletedu<   <span style="color: green; font-weight: bold;">●</span> {}ZActiveN)r\   r   r   rF   r   r   r   rZ     s    zAgencyAdmin.status_indicatorStatusc                 C   s"   |j dd}| || d dS )z|
        Bulk action to mark selected agencies as deleted.
        Soft delete functionality for data preservation.
        r   r\   z! agencies were marked as deleted.Nupdatemessage_userr   r   r*   updatedr   r   r   mark_as_deleted"  s
    zAgencyAdmin.mark_as_deletedz!Mark selected agencies as deletedc                 C   s"   |j dd}| || d dS )zk
        Bulk action to restore deleted agencies.
        Allows recovery of soft-deleted records.
        r   ru   z agencies were restored.Nrv   ry   r   r   r   restore_agencies/  s
    zAgencyAdmin.restore_agencieszRestore selected agenciesr{   r|   N)r,   r-   r.   r/   list_displaylist_display_linksr   r1   list_filtersearch_fieldsorderinglist_per_pagelist_select_relatedr   	fieldsetsr;   inlinesrV   rQ   admin_order_fieldr   rW   rX   rZ   r{   r|   actionsr   r   r   r   rU      sN   



	



rU   c                   @   s"  e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zed
deddfeddeddffZdZdZegZdd Zede_dd Zede_dd Zede_de_dd Zede_d e_d!d" Zed#e_d$d% Zed&e_d'd( Zed)e_d*d+ Zed,e_d-d. Zed/e_d0d1d2gZd3S )4
BrandAdminz
    Comprehensive admin interface for Brand model.
    Provides advanced brand management with visual elements and filtering.
    )logo_thumbnailr<   agency_linkr=   status_badger?   advertiser_countcreated_info)r<   r   r?   )r>   r=   r?   agencyrY   )r<   r^   agency__namer[      )r   zBrand Identity)r<   rD   r@   r^   zCCore brand identity elements including name, logo, and description.rb   ZClassification)r   r=   r>   r?   z,Brand categorization and status information.rA   r   c                 C   s   |j rtd|j jS tdS )zv
        Display small logo thumbnail in list view.
        Provides visual brand identification at a glance.
        zn<img src="{}" width="40" height="40" style="object-fit: cover; border-radius: 4px; border: 1px solid #ddd;" />z<div style="width: 40px; height: 40px; background: #f0f0f0; border-radius: 4px; display: flex; align-items: center; justify-content: center; font-size: 12px; color: #666;">No Logo</div>)rD   r   rE   rF   r   r   r   r     s    zBrandAdmin.logo_thumbnailZLogoc                 C   s   |j rtd|j jS tdS )zs
        Display larger logo preview in detail view.
        Shows full-size logo for detailed inspection.
        z~<img src="{}" style="max-width: 200px; max-height: 200px; object-fit: contain; border: 1px solid #ddd; border-radius: 4px;" />zNo logo uploadedrC   rF   r   r   r   r@     s    zBrandAdmin.logo_previewrH   c                 C   s0   |j r(td|j jgd}td||j jS tdS )zp
        Create clickable link to the parent agency.
        Enables easy navigation to agency details.
        admin:agencies_agency_changerf   rh   	No Agency)r   r   ri   r   r<   r   rk   r   r   r   r     s    zBrandAdmin.agency_linkr   r   c              
   C   s@   t jdt jdt jdt jdt jdi}||jd}td||	 S )z
        Display color-coded status badge for visual status identification.
        Uses different colors for different status types.
        #28a745#6c757d#ffc107#dc3545z#17a2b8z<span style="background-color: {}; color: white; padding: 3px 8px; border-radius: 12px; font-size: 11px; font-weight: bold;">{}</span>)
r   r8   ZINACTIVEZPENDINGZ	SUSPENDEDZARCHIVEDgetr>   r   get_status_displayr   rG   Zstatus_colorscolorr   r   r   r     s"         zBrandAdmin.status_badgert   r>   c                 C   s.   |j  }|dkr*td}td||j|S dS )zy
        Display count of advertisers associated with this brand.
        Provides insight into brand team size.
        r   z%admin:agencies_advertisers_changelistz3<a href="{}?brand__id__exact={}">{} advertisers</a>z0 advertisers)Zadvertisers_setrl   r   r   ri   rm   r   r   r   r     s    
  zBrandAdmin.advertiser_countrT   c                 C   s$   t |dr|jr|jdS tdS )zj
        Display creation date information.
        Shows when the brand was added to the system.
        rY   %Y-%m-%dZUnknown)hasattrrY   strftimer   rF   r   r   r   r     s    zBrandAdmin.created_infoCreatedc                 C   s$   |j tjd}| || d dS )zu
        Bulk action to activate selected brands.
        Sets status to active for multiple brands at once.
        rn   z brands were activated.N)rw   r   r8   rx   ry   r   r   r   activate_brands  s
    zBrandAdmin.activate_brandszActivate selected brandsc                 C   s"   |j dd}| || d dS )z{
        Bulk action to mark selected brands as featured.
        Highlights important brands across the platform.
        Tr   z  brands were marked as featured.Nrv   ry   r   r   r   feature_brands  s
    zBrandAdmin.feature_brandsz Mark selected brands as featuredc                 C   s"   |j dd}| || d dS )zw
        Bulk action to remove featured status from selected brands.
        Removes highlighting from brands.
        Fr   z" brands were unmarked as featured.Nrv   ry   r   r   r   unfeature_brands  s
    zBrandAdmin.unfeature_brandsz+Remove featured status from selected brandsr   r   r   N)r,   r-   r.   r/   r}   r~   Zlist_editabler   r   r   r   r   r   r   rM   Zfilter_horizontalrR   r   r   rQ   r@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   @  sT   	





	



r   c                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
ed	d
eddffZdd Zede_de_dd Zede_de_dd Zede_de_dd Zede_dd Zede_dd  Zed!e_d"d#gZd$S )%AdvertisersAdminzg
    Admin interface for Advertisers model.
    Manages the relationship between users and brands.
    )	user_info
brand_linkstatus_displayrelationship_info)r   )r>   brand__agencyZbrand__categoryZbrand__status)id_user__usernameZid_user__emailZid_user__first_nameZid_user__last_namebrand__name)r   r   )rS   brandr   r`   ZRelationship)rS   r   r>   z/Define the relationship between user and brand.rb   c                 C   sX   |j rPtd|j jgd}|j  r.|j   n|j j}td|||j jpL|j jS tdS )z
        Display comprehensive user information with link.
        Shows name, username, and email for easy identification.
        re   rf   =<a href="{}">{}</a><br><small style="color: #666;">{}</small>zNo User)rS   r   ri   get_full_namerj   r   emailr   )r   rG   rE   Zdisplay_namer   r   r   r   R  s      zAdvertisersAdmin.user_infoZUserr   c                 C   sL   |j rDtd|j jgd}|j jr*|j jjntd}td||j j|S tdS )z}
        Display brand information with link to brand admin.
        Shows brand name and parent agency for context.
        zadmin:agencies_brand_changerf   r   r   zNo Brand)r   r   ri   r   r<   r   r   )r   rG   rE   Zagency_namer   r   r   r   c  s      zAdvertisersAdmin.brand_linkr   r   c                 C   s@   |j r8ddddd}||j  d}td||j  S tdS )zs
        Display formatted status information.
        Provides visual styling for different status types.
        r   r   r   r   )activeinactivependingZ	suspendedz5<span style="color: {}; font-weight: bold;">{}</span>z	No Status)r>   r   lowerr   r0   r   r   r   r   r   r   t  s     zAdvertisersAdmin.status_displayrt   r>   c                 C   s   g }|j r(|j jr(|d|j    |j rL|j jrL|d|j    |jrxt|jdrx|jjrjdnd}|| |rt	d
|S tdS )z
        Display additional context about the user-brand relationship.
        Shows helpful metadata for relationship management.
        z
Category: zBrand: 	is_activezActive UserzInactive Userz<br>zNo additional info)r   r=   appendZget_category_displayr>   r   rS   r   r   r   joinr   )r   rG   Z
info_partsZuser_statusr   r   r   r     s    
z"AdvertisersAdmin.relationship_infozAdditional Infoc                 C   s"   |j dd}| || d dS )zL
        Bulk action to activate selected advertiser relationships.
        r   rn   z) advertiser relationships were activated.Nrv   ry   r   r   r   activate_relationships  s
    z'AdvertisersAdmin.activate_relationshipszActivate selected relationshipsc                 C   s"   |j dd}| || d dS )zN
        Bulk action to deactivate selected advertiser relationships.
        r   rn   z+ advertiser relationships were deactivated.Nrv   ry   r   r   r   deactivate_relationships  s
    z)AdvertisersAdmin.deactivate_relationshipsz!Deactivate selected relationshipsr   r   N)r,   r-   r.   r/   r}   r~   r   r   r   r   r   r   r   r   rQ   r   r   r   r   r   r   r   r   r   r   r   r     s:   		







r   z Agency & Brand Management SystemzAgency Adminz$Welcome to Agency & Brand Managementc                   @   s,   e Zd ZdZedZdZdd Zdd ZdS )	PremiumTypeFilterzJ
    Filter to distinguish between premium and standard agency types.
    zPremium StatusZpremium_statusc                 C   s   dt dfdt dffS )z(Define filter options for premium statuspremiumzPremium TypesstandardzStandard Typesr   r   r   r   r   r      s    

zPremiumTypeFilter.lookupsc                 C   s4   |   dkr|jddS |   dkr0|jddS |S )z-Apply filtering logic based on premium statusr   T
is_premiumr   F)r'   r(   r)   r   r   r   r*     s
    zPremiumTypeFilter.querysetNr+   r   r   r   r   r     s
   r   c                   @   s,   e Zd ZdZedZdZdd Zdd ZdS )	AgencyTypeUsageFilterzH
    Filter agency types by the number of agencies using each type.
    zUsage CountZagency_usagec                 C   s,   dt dfdt dfdt dfdt dffS )	z&Define filter options for agency usageunusedzUnused Types1-10z1-10 Agencies11-50z11-50 Agencies50+z50+ Agenciesr   r   r   r   r   r      s
    



zAgencyTypeUsageFilter.lookupsc                 C   s~   |j tdtdddd}|  dkr2|jddS |  dkrJ|jd	d
S |  dkrb|jdd
S |  dkrz|jddS |S )z+Apply filtering logic based on agency countagenciesFZagencies__is_deletedr6   agency_countr   r   r   )r   r$   )Zagency_count__ranger   )r%   ro   r   ro   )Zagency_count__gte)r&   r   r   r'   r(   r)   r   r   r   r*     s    zAgencyTypeUsageFilter.querysetNr+   r   r   r   r   r     s
   	r   c                       s  e Zd ZdZdddddddd	gZdgZd
ZeedddgZ	ddgZ
ddgZeddeddfeddeddfeddeddfedddeddffZdddd gZd!d" Zed#e_de_d$d% Zed&e_d'd( Zed)e_de_d*d+ Zed,e_d-d. Zed/e_d0d1 Zed2e_de_d3d4 Zed5e_d6d7 Zed8e_d9d: Zed;e_ fd<d=Zd>d? Zed@e_dAdB ZedCe_dDdE ZedFe_dGdH ZedIe_dJdKdLdMgZdNZ dNZ!  Z"S )OAgencyTypeAdmina  
    Comprehensive admin configuration for AgencyType model.
    
    This admin class provides:
    - Enhanced list display with visual elements
    - Custom filters for better navigation
    - Bulk actions for efficient management
    - Search and ordering capabilities
    name_with_colordescription_truncated
sort_orderis_premium_displayagency_count_displayusage_percentagecreated_at_formattedrZ   r`   r   rY   
updated_atr<   r^   ra   )r<   r^   z(Core information about this agency type.rb   zDisplay Settings)
color_coder   z+Visual appearance and ordering preferences.zFeatures & Status)r   r\   z"Feature flags and status settings.rc   )rY   r   rB   zSystem-generated timestamps.rd   color_previewdetailed_agency_statsc                 C   s"   |j rtd|j |jS td|jS )z@
        Display agency type name with color indicator.
        z<div style="display: flex; align-items: center;"><div style="width: 20px; height: 20px; background-color: {}; border-radius: 3px; margin-right: 10px; border: 1px solid #ccc;"></div><strong>{}</strong></div>z<strong>{}</strong>)r   r   r<   rF   r   r   r   r   d  s    zAgencyTypeAdmin.name_with_colorzAgency Typec                 C   sH   |j r:t|j dkr4|j dd d }td|j |S |j S tdtdS )z=
        Display truncated description with tooltip.
        P   Nrp   z<span title="{}">{}</span> <em style="color: #999;">{}</em>rq   )r^   rr   r   r   )r   rG   Z	truncatedr   r   r   r   v  s    z%AgencyTypeAdmin.description_truncatedrs   c                 C   s"   |j rtdtdS tdtdS )z?
        Display premium status with visual indicator.
        u>   <span style="color: #ff6b35; font-weight: bold;">⭐ {}</span>ZPremiumz'<span style="color: #6c757d;">{}</span>ZStandard)r   r   r   rF   r   r   r   r     s    z"AgencyTypeAdmin.is_premium_displayZTypec                 C   s   t |dd}|dkr&|jjdd }|dkrz0td}td||j||dkrTtd	ntd
W S    td||dkr|td	ntd
 Y S X tdtd	S )zF
        Display count of agencies using this type with link.
        r   NFru   r   z admin:agencies_agency_changelistz[<a href="{}?agency_type__id__exact={}" style="font-weight: bold; color: #007cba;">{} {}</a>r   r   r   z-<span style="font-weight: bold;">{} {}</span>z&<span style="color: #999;">0 {}</span>)getattrr   r(   rl   r   r   idr   rm   r   r   r   r     s&     
z$AgencyTypeAdmin.agency_count_displayZUsagec                 C   s   zt jjdd }|dkr&tdW S t|dd}|dkrL|jjdd }|| d }|dkrfd	}n|d
krtd}nd}td||W S  tk
r   td Y S X dS )z>
        Display usage percentage among all agencies.
        Fru   r   #<span style="color: #999;">-</span>r   Nd      r   r$   r   r   z:<span style="color: {}; font-weight: bold;">{:.1f}%</span>z&<span style="color: #dc3545;">-</span>)r   Zobjectsr(   rl   r   r   r   	Exception)r   rG   Ztotal_agenciesrl   Z
percentager   r   r   r   r     s(    
z AgencyTypeAdmin.usage_percentagezMarket Sharec                 C   s   |j r|j dS dS )z2
        Display formatted creation date.
        r   -)rY   r   rF   r   r   r   r     s    z$AgencyTypeAdmin.created_at_formattedr   c                 C   s   g }|j r|d t|dd}|dkr:|jjdd }|dkrN|d n|dkr`|d	 |jrp|d
 |rtd|S dS )z3
        Display overall status indicator.
        u%   <span title="Premium Type">⭐</span>r   NFru   r   u?   <span title="Unused Type" style="color: #dc3545;">⚠️</span>r$   u>   <span title="Popular Type" style="color: #28a745;">📈</span>u<   <span title="Deleted" style="color: #dc3545;">🗑️</span> r   )	r   r   r   r   r(   rl   r\   r   r   )r   rG   Z
indicatorsrl   r   r   r   rZ     s    


z AgencyTypeAdmin.status_indicatorrt   c                 C   s$   |j rtd|j |j S tdtdS )zA
        Display color preview in form (readonly field).
        z<div style="width: 60px; height: 30px; background-color: {}; border: 1px solid #ccc; border-radius: 3px; display: inline-block; margin-right: 10px; vertical-align: middle;"></div><span style="vertical-align: middle; color: #666;">{}</span><em>{}</em>zNo color set)r   r   r   rF   r   r   r   r     s    zAgencyTypeAdmin.color_previewzColor Previewc                 C   sh   |j rZ|j }|jjddd }|jjddd }|jjdd }td||||S tdtdS )zM
        Display detailed agency count information (readonly field).
        TF)r   r\   ru   z<div style="font-size: 12px;"><strong>Total:</strong> {} agencies<br><strong>Active:</strong> {} agencies<br><strong>Inactive:</strong> {} agencies<br><strong>Deleted:</strong> {} agencies</div>r   zSave to see agency statistics)ri   r   rl   r(   r   r   )r   rG   Ztotalr   r   Zdeletedr   r   r   r     s    
   	z%AgencyTypeAdmin.detailed_agency_statszAgency Statisticsc                    s*   t  |}|jtdtdddd}|S )z6
        Optimize queryset with related data.
        r   Fr   r6   r   )superget_querysetr&   r   r   r)   	__class__r   r   r   &  s
    zAgencyTypeAdmin.get_querysetc                 C   s&   |j dd}| j|| ddd dS )zG
        Bulk action to mark selected agency types as premium.
        Tr   z% agency types were marked as premium.successlevelNrv   ry   r   r   r   make_premium3  s    zAgencyTypeAdmin.make_premiumzMark selected types as premiumc                 C   s&   |j dd}| j|| ddd dS )zH
        Bulk action to mark selected agency types as standard.
        Fr   z& agency types were marked as standard.r   r   Nrv   ry   r   r   r   make_standard@  s    zAgencyTypeAdmin.make_standardzMark selected types as standardc                 C   sZ   t |d}t|dD ] \}}|d |_|jdgd q| j|dt| ddd	 d
S )zO
        Bulk action to reset sort order based on name alphabetically.
        r<   r   r$   r   )Zupdate_fieldszSort order reset for z agency types.r   r   N)listZorder_by	enumerater   Zsaverx   rr   )r   r   r*   Zsorted_typesiZagency_typer   r   r   reset_sort_orderM  s    
z AgencyTypeAdmin.reset_sort_orderzReset sort order alphabeticallyc              
   C   s   z>t  }|r,| j|dt| ddd n| j|ddd W n< tk
rz } z| j|dt| dd W 5 d	}~X Y nX d	S )
zO
        Action to create default agency types using the model method.
        zCreated z default agency types.r   r   z:No new agency types were created (they may already exist).infozError creating default types: errorN)r   create_default_typesrx   rr   r   str)r   r   r*   Zcreated_typeser   r   r   r   ^  s&    
z$AgencyTypeAdmin.create_default_typeszCreate default agency typesr   r   r   r   T)#r,   r-   r.   r/   r}   r~   r   r   r   r   r   r   r   r   rM   r   rQ   r   r   r   r   r   r   rZ   r   r   r   r   r   r   r   r   Zsave_on_topZpreserve_filters__classcell__r   r   r   r   r     s   	"	












	r   c                   @   s   e Zd ZdZddddddgZddddd	gZd
dddgZdddgZdd Ze	de_
dd Ze	de_
de_dd Ze	de_
de_dS )AgencyTeamMemberAdminz9
    Admin configuration for AgencyTeamMember model.
    user_displayr   Z
departmentZis_primary_contactZ	is_publicyears_experience_displayr   rY   Zuser__first_nameZuser__last_nameZuser__emailr   z-is_primary_contactc                 C   s2   |j r$td|j  p|j j|j jS tdtdS )z"Display user full name with email.z(<strong>{}</strong><br><small>{}</small>r   zNo user assigned)userr   r   rj   r   r   rF   r   r   r   r     s    z"AgencyTeamMemberAdmin.user_displayzTeam Memberc                 C   sN   |j r@z$td|j jgd}td||j jW S    |j j Y S X tdtdS )zDisplay agency name with link.r   rf   rh   r   z	No agency)r   r   r   r   r<   r   rk   r   r   r   r     s    z!AgencyTeamMemberAdmin.agency_linkr   c                 C   s   |j rtd|j S tdS )z,Display years of experience with formatting.z{} yearsr   )years_experiencer   rF   r   r   r   r     s    z.AgencyTeamMemberAdmin.years_experience_displayZ
Experiencer   N)r,   r-   r.   r/   r}   r   r   r   r   r   rQ   r   r   r   r   r   r   r   r     s8   
	





r   N)-r/   Zdjango.contribr   Zdjango.utils.htmlr   Zdjango.utils.translationr   r   Zdjango.urlsr   Zdjango.utils.safestringr   Zdjango.db.modelsr   r   r	   Zdjango.contrib.adminr
   r9   r   r   r   r   r   r   r   r   r1   ZTabularInliner;   rR   registerZ
ModelAdminrU   r   r   ZsiteZsite_headerZ
site_titleZindex_titler   r   r   r   Zis_registeredr   r   r   r   <module>   sP   $!'" $ Y 0    G