U
    mh                     @   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G dd deZ	G d	d
 d
eZ
G dd deZG dd deZG dd deZG dd deZdS )    )models)get_user_model)timezone)	BaseModelc                   @   sf   e Zd ZdZejddZejddZej	ddddZ
ejddZejddZG d	d
 d
Zdd ZdS )Brandz%Brand model for organizing campaigns.   
max_lengthTblankzbrands/)	upload_tor   nulldefaultc                   @   s   e Zd ZdZdgZdS )z
Brand.MetaZbrandsnameN__name__
__module____qualname__db_tableordering r   r   1/var/www/html/Adtlas/src/apps/campaigns/models.pyMeta   s   r   c                 C   s   | j S Nr   selfr   r   r   __str__   s    zBrand.__str__N)r   r   r   __doc__r   	CharFieldr   	TextFielddescription
ImageFieldZlogoURLFieldwebsiteBooleanField	is_activer   r   r   r   r   r   r      s   r   c                   @   sr   e Zd ZdZejddZejdddZejddZ	ejdddZ
ejddZejddZG d	d
 d
Zdd ZdS )AgencyzAdvertising agency model.r   r   Tr	   r   r
      r   c                   @   s   e Zd ZdZdgZdZdS )zAgency.MetaZagenciesr   ZAgenciesNr   r   r   r   r   verbose_name_pluralr   r   r   r   r       s   r   c                 C   s   | j S r   r   r   r   r   r   r   %   s    zAgency.__str__N)r   r   r   r   r   r    r   Zcontact_person
EmailFieldemailphoner!   addressr&   r'   r   r   r   r   r   r   r(      s   r(   c                   @   s*  e Zd ZdZdddgZddddd	d
dgZejddZej	ddZ
ejeejddZejeejddddZejdeddZejdeddZe Ze ZejdddddZejdddZejdejdddZejdejddddZejdddZG dd  d Zd!d" Ze d#d$ Z!e d%d& Z"d'd( Z#d)S )*CampaignzMain campaign model.)standardZStandard)ZpremiumZPremium)Z	sponsoredZ	Sponsored)draftZDraft)pendingzPending Approval)approvedZApproved)activeActive)pausedZPaused)	completedZ	Completed)	cancelledZ	Cancelledr   r   Tr
   	campaigns	on_deleterelated_name)r=   r   r   r>   r*   r2   )r	   choicesr   r3         )
max_digitsdecimal_placesr   r   r   r   accounts.UserZcreated_campaigns)r=   r   r>   Zapproved_campaignsc                   @   s   e Zd ZdZdgZdS )zCampaign.Metar;   -created_atNr   r   r   r   r   r   M   s   r   c                 C   s   | j  d| jj  dS N ())r   brandr   r   r   r   r   Q   s    zCampaign.__str__c                 C   s.   t  }| jdko,| j|  ko(| jkS   S )Nr6   )r   nowstatus
start_dateend_date)r   rK   r   r   r   r'   T   s    
zCampaign.is_activec                 C   s   t dd | j D S )Nc                 s   s   | ]}|j V  qd S r   )impressions).0adspotr   r   r   	<genexpr>\   s     z-Campaign.total_impressions.<locals>.<genexpr>)sumadspotsallr   r   r   r   total_impressionsZ   s    zCampaign.total_impressionsc                 C   s"   d| _ || _t | _|   dS )zApprove the campaign.r5   N)rL   approved_byr   rK   approved_atsave)r   userr   r   r   approve^   s    
zCampaign.approveN)$r   r   r   r   ZCAMPAIGN_TYPESSTATUS_CHOICESr   r    r   r!   r"   
ForeignKeyr   CASCADErJ   r(   SET_NULLZagencyZcampaign_typerL   DateTimeFieldrM   rN   DecimalFieldZbudgetPositiveIntegerFieldZtarget_impressions
created_byrW   rX   r   r   propertyr'   rV   r[   r   r   r   r   r1   )   sB   


r1   c                   @   s   e Zd ZdZddddgZejddZejded	Zej	d
dZ
ejddddZejddddZejdddZejdddZejdddZejddZejdejdddZejdddZG dd dZdd ZdS )CreativezCreative assets for campaigns.)ZvideoZVideo)ZaudioZAudio)imageImage)textTextr   r   r*   r	   r?   z
creatives/)r   TzDuration in seconds)r   r   	help_textzFile size in bytesrD   Fr   rE   )r=   r   r   c                   @   s   e Zd ZdZdgZdS )zCreative.MetaZ	creativesrF   Nr   r   r   r   r   r      s   r   c                 C   s   | j  d| j dS rG   )r   creative_typer   r   r   r   r      s    zCreative.__str__N)r   r   r   r   ZCREATIVE_TYPESr   r    r   rl   	FileFieldfilerb   duration	file_sizewidthheightZbitrater&   Zis_approvedr]   r_   rW   r`   rX   r   r   r   r   r   r   re   f   s&   re   c                   @   s   e Zd ZdZejeejddZeje	ejddZ
ejddZejdddZe Ze Zejd	d
dZejed
dZejddZejddZejd
dZG dd dZdd Zedd ZdS )AdSpotz#Ad spot placement within campaigns.rT   r<   r   r      zPosition in the ad break)r   rk   channels.ChannelTr
   )r   r   r   r   c                   @   s   e Zd ZdZddgZdS )zAdSpot.MetarT   campaignpositionNr   r   r   r   r   r      s   r   c                 C   s   | j  d| jj  S )N - )r   rv   r   r   r   r   r      s    zAdSpot.__str__c                 C   s   | j dkr| j| j  d S dS )zClick-through rate.r   d   )rO   clicksr   r   r   r   ctr   s    
z
AdSpot.ctrN)r   r   r   r   r   r]   r1   r^   rv   re   Zcreativer    r   rb   rw   r`   
start_timeend_timeManyToManyFieldZtarget_channels	JSONFielddictZtarget_demographicsrO   rz   r&   r'   r   r   rd   r{   r   r   r   r   rs      s    rs   c                   @   s   e Zd ZdZejeejddZejdejddZ	e
 ZejddZejdd	Zejd
dddZejdddZejddZejdddZG dd dZdd ZdS )AdBreakHistoryzHistory of ad break executions.historyr<   ru   Zcampaign_adbreak_historyzActual duration in seconds)rk   r   r      rA   rB   rC   r   2   Tr)   r
   rD   c                   @   s   e Zd ZdZdgZdZdS )zAdBreakHistory.MetaZadbreak_historyz-executed_atzAd Break HistoryNr+   r   r   r   r   r      s   r   c                 C   s   | j j d| jj d| j S )Nz on z at )rQ   r   channelexecuted_atr   r   r   r   r      s    zAdBreakHistory.__str__N)r   r   r   r   r   r]   rs   r^   rQ   r   r`   r   rb   ro   rO   ra   Zcompletion_rater    Zplayer_versionr!   
user_agentGenericIPAddressField
ip_addressr   r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZddddgZejeejddZ	ej
ded	Ze Ze Zejd
dZej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jddd
dZejdejddZG dd dZdd ZdS )CampaignReportzCampaign performance reports.)dailyZDaily)weeklyZWeekly)monthlyZMonthly)customZCustomZreportsr<   r*   rj   r   r   r@   rA   r   r      rE   T)r=   r   c                   @   s"   e Zd ZdZdgZddddgZdS )zCampaignReport.MetaZcampaign_reportsrF   rv   report_typerM   rN   N)r   r   r   r   r   unique_togetherr   r   r   r   r      s   r   c                 C   s&   | j j d| j d| j d| j dS )Nrx   rH   z to rI   )rv   r   r   rM   rN   r   r   r   r   r      s    zCampaignReport.__str__N)r   r   r   r   ZREPORT_TYPESr   r]   r1   r^   rv   r    r   	DateFieldrM   rN   rb   rV   Ztotal_clicksra   Ztotal_spendr{   ZcpmZcpcr_   Zgenerated_byr   r   r   r   r   r   r      s&   r   N)	django.dbr   django.contrib.authr   django.utilsr   apps.common.modelsr   r   r(   r1   re   rs   r   r   r   r   r   r   <module>   s   ="%