o
    eh"                     @   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m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dS )z
Campaigns Admin Configuration

Django admin interface configuration for campaign models.
Provides comprehensive admin interface for managing campaigns.
    )admin)format_html)gettext_lazy)reverse)timezone   )CampaignCampaignChannelScheduleCampaignPerformancec                   @   s(   e Zd ZdZeZdZg dZddgZdS )CampaignChannelScheduleInlinez6
    Inline admin for campaign channel schedules.
    r   )channel
start_timeend_timedays_of_weekspots_per_daychannel_budgetimpressions_deliveredamount_spentr   r   N)	__name__
__module____qualname____doc__r	   modelextrafieldsreadonly_fields r   r   HC:\Users\vibe-look\OneDrive\Desktop\Adtlas_V\src\apps\campaigns\admin.pyr      s    r   c                   @   s6   e Zd ZdZeZdZg dZdgZdgZ	d	ddZ
dS )
CampaignPerformanceInlinez8
    Inline admin for campaign performance records.
    r   )dateimpressionsspots_airedspendcpmreach	frequencyr#   z-dateNc                 C      dS )NFr   )selfrequestobjr   r   r   has_add_permission)   s   z,CampaignPerformanceInline.has_add_permission)N)r   r   r   r   r
   r   r   r   r   orderingr*   r   r   r   r   r      s    r   c                   @   sh  e Zd ZdZg dZg dZg dZg dZeddg difed	dg d
ifeddg difeddddgifedddgdgdfeddgdgdfeddgdgdfedg ddgdfgZ	e
egZdgZdZg dZ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/d0 Zed1e_d2S )3CampaignAdminz-
    Admin interface for Campaign model.
    )name
advertisercampaign_typestatus_badgepriority
start_dateend_datetotal_budgetbudget_utilization_displaytotal_impressionsis_active_display)statusr/   r1   r2   r3   r.   
created_at)r-   descriptionZadvertiser__nameZadvertiser__company_name)idr6   total_spendr5   days_remaining_displayr9   
updated_atzBasic Informationr   )r-   r:   r/   r.   Schedule)r2   r3   r=   zBudget & Pricing)r4   daily_budgetcost_per_spotr<   r5   zStatus & Priorityr8   r1   Z	Targetinggeographic_zonestarget_demographicscollapser   classesPerformancer6   NotesnoteszSystem Information)r;   r9   r>   r2   )activate_campaignspause_campaignsmark_completedc                 C   s2   dddddddd}| |jd}td	|| S )z Display status as colored badge.ZgrayorangebluegreenyellowZpurplered)draftpendingapprovedactivepaused	completed	cancelledzr<span style="background-color: {}; color: white; padding: 2px 8px; border-radius: 3px; font-size: 11px;">{}</span>N)getr8   r   get_status_display)r'   r)   colorscolorr   r   r   r0      s   	zCampaignAdmin.status_badgeStatusc                 C   s.   |j }|dk r	dn|dk rdnd}td||S )z)Display budget utilization as percentage.P   rO   d   rM   rQ   z'<span style="color: {};">{:.1f}%</span>N)budget_utilizationr   )r'   r)   Zutilizationr\   r   r   r   r5      s   z(CampaignAdmin.budget_utilization_displayzBudget Usedc                 C   s   |j rtdS tdS )zDisplay active status as icon.u-   <span style="color: green;">✓ Active</span>u.   <span style="color: gray;">○ Inactive</span>N)	is_activer   )r'   r)   r   r   r   r7      s   zCampaignAdmin.is_active_displayzCurrently Activec                 C   s2   |j }|dkr
d}n	|dkrd}nd}td||S )z#Display days remaining in campaign.   rO      rM   rQ   z'<span style="color: {};">{} days</span>N)days_remainingr   )r'   r)   daysr\   r   r   r   r=      s   z$CampaignAdmin.days_remaining_displayzDays Remainingc                 C   sB   d}|D ]}|  rd|_|  |d7 }q| || d dS )z"Bulk action to activate campaigns.r   rU   r   z' campaigns were successfully activated.N)can_be_activatedr8   savemessage_user)r'   r(   querysetcountcampaignr   r   r   rJ      s   z CampaignAdmin.activate_campaignszActivate selected campaignsc                 C   s*   |j ddjdd}| || d dS )zBulk action to pause campaigns.rU   r8   rV   z$ campaigns were successfully paused.N)filterupdaterh   r'   r(   ri   rj   r   r   r   rK      s
   zCampaignAdmin.pause_campaignszPause selected campaignsc                 C   s.   |j ddgdjdd}| || d dS )z+Bulk action to mark campaigns as completed.rW   rX   )Z
status__inrl   z$ campaigns were marked as completed.N)excludern   rh   ro   r   r   r   rL      s   zCampaignAdmin.mark_completedz$Mark selected campaigns as completedN)r   r   r   r   list_displaylist_filtersearch_fieldsr   _	fieldsetsr   r   inlinesfilter_horizontaldate_hierarchyactionsr0   short_descriptionr5   r7   r=   rJ   rK   rL   r   r   r   r   r,   -   st    0





	r,   c                   @   s   e Zd ZdZg dZg dZg dZddgZeddd	d
gifeddg difeddddgifedddgdgdfgZ	dS )CampaignChannelScheduleAdminz>
    Admin interface for Campaign Channel Schedule model.
    )rk   r   r   r   r   r   r   r   )campaign__statusr   r   r   r   )campaign__namechannel__nameZchannel__call_signr   r   zCampaign & Channelr   rk   r   r?   )r   r   r   zFrequency & Budgetr   r   rG   rD   rE   N)
r   r   r   r   rq   rr   rs   r   rt   ru   r   r   r   r   r{      s(    r{   c                   @   sx   e Zd ZdZg dZg dZddgZdgZdZe	dd	d
dgife	dd	g dife	dddgdgdfgZ
dd ZdS )CampaignPerformanceAdminz9
    Admin interface for Campaign Performance model.
    )rk   r   r    r!   r"   r#   r$   r%   )r   r|   Zcampaign__advertiserr}   Zcampaign__advertiser__namer#   r   zCampaign & Dater   rk   zPerformance Metrics)r    r!   r"   r#   zAudience Metricsr$   r%   rD   rE   c                 C   r&   )z/Disable manual addition of performance records.FNr   )r'   r(   r   r   r   r*      s   z+CampaignPerformanceAdmin.has_add_permissionN)r   r   r   r   rq   rr   rs   r   rx   rt   ru   r*   r   r   r   r   r      s(    r   N)r   Zdjango.contribr   django.utils.htmlr   django.utils.translationr   rt   django.urlsr   django.utilsr   modelsr   r	   r
   TabularInliner   r   register
ModelAdminr,   r{   r   r   r   r   r   <module>   s     )%