U
    mh"                     @   sx   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
dS )    )models)get_user_model)	BaseModelc                   @   st  e Zd ZdZdddgZejddZejdddZejd	e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dZej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dZejdddZejdddZejddZejdddddZejddddZejdejddddZejdejddddZ G dd dZ!dd Z"e#dd Z$d d! Z%d"d# Z&d$S )%
AdvertiserzAdvertiser/Client model.)directzDirect Client)agencyzAgency Client)networkzNetwork Client   
max_lengthTr   blank   r   r   choicesdefault)r   d   2   r         
max_digitsdecimal_placesnullr   ze.g., Net 30, Net 60)r   r   	help_textaccounts.UserZmanaged_advertisers)	on_deleter   r   related_namezcampaigns.Agencyadvertisersc                   @   s   e Zd ZdZdgZdS )zAdvertiser.Metar   nameN__name__
__module____qualname__db_tableordering r'   r'   3/var/www/html/Adtlas/src/apps/advertisers/models.pyMeta9   s   r)   c                 C   s   | j S )N)r    selfr'   r'   r(   __str__=   s    zAdvertiser.__str__c                 C   sz   g }| j r|| j  | jr(|| j | jr:|| j | jrL|| j | jr^|| j | jrp|| j d|S )zReturn formatted full address.z, )address_line1appendaddress_line2citystatepostal_codecountryjoin)r+   address_partsr'   r'   r(   full_address@   s    zAdvertiser.full_addressc                 C   s   | j jtddd pdS )z2Get total number of campaigns for this advertiser.	campaignstotalr9   r   )brands	aggregater   Countr*   r'   r'   r(   get_total_campaignsR   s    zAdvertiser.get_total_campaignsc                 C   s<   ddl m} | }| jjd||djtddd p:dS )zGet number of active campaigns.r   )timezoneactive)Zcampaigns__statusZcampaigns__start_date__lteZcampaigns__end_date__gter7   r8   r9   )django.utilsr>   nowr:   filterr;   r   r<   )r+   r>   rA   r'   r'   r(   get_active_campaignsX   s    zAdvertiser.get_active_campaignsN)'r"   r#   r$   __doc__ZADVERTISER_TYPESr   	CharFieldr    Zcompany_nameZadvertiser_typecontact_person
EmailFieldemailphoneURLFieldwebsiter-   r/   r0   r1   r2   r3   Ztax_idZindustryBooleanField	is_activeDecimalFieldZcredit_limitZpayment_terms
ForeignKeySET_NULLZaccount_managerZparent_agencyr)   r,   propertyr6   r=   rC   r'   r'   r'   r(   r      sV   
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j
d
dZej
d
dZej
d
ddZe Zej
dddZej
d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 )AdvertiserContactz$Additional contacts for advertisers.)primaryzPrimary Contact)billingzBilling Contact)Z	technicalzTechnical Contact)Z	marketingzMarketing ContactZcontactsr   r   r   )r   r   r   r
   Tr   Fr   c                   @   s   e Zd ZdZdddgZdS )zAdvertiserContact.MetaZadvertiser_contacts
advertisercontact_type	last_nameNr!   r'   r'   r'   r(   r)   |   s   r)   c                 C   s   | j  d| j d| jj dS )N  ())
first_namerX   rV   r    r*   r'   r'   r(   r,      s    zAdvertiserContact.__str__c                 C   s   | j  d| j S )NrY   )r\   rX   r*   r'   r'   r(   	full_name   s    zAdvertiserContact.full_nameN)r"   r#   r$   rD   ZCONTACT_TYPESr   rO   r   CASCADErV   rE   rW   r\   rX   titlerG   rH   rI   ZmobilerL   Z
is_primaryZreceive_reportsZreceive_notificationsr)   r,   rQ   r]   r'   r'   r'   r(   rR   e   s*   rR   c                   @   s   e Zd ZdZdddgZejdejddZeje	ejddZ
ejd	ed
dZejddZejddZejddZejddZejddZejddZejdejdddZG dd dZdd Zdd ZdS )UserAdvertiserzIMany-to-many relationship between users and advertisers with permissions.)viewz	View Only)editZEdit)managezFull Managementr   Zadvertiser_accessrU   Zuser_accessr   ra   r   Tr   FZgranted_advertiser_access)r   r   r   c                   @   s    e Zd ZdZddgZddgZdS )zUserAdvertiser.MetaZuser_advertisersuserrV   N)r"   r#   r$   r%   unique_togetherr&   r'   r'   r'   r(   r)      s   r)   c                 C   s    | j j d| jj d| j dS )Nz - rZ   r[   )rd   usernamerV   r    permission_levelr*   r'   r'   r(   r,      s    zUserAdvertiser.__str__c                 C   s*   | j | j| j| j| j| jd}||dS )z&Check if user has specific permission.)Zview_campaignsZcreate_campaignsZedit_campaignsZapprove_campaignsZview_reportsZmanage_creativesF)can_view_campaignscan_create_campaignscan_edit_campaignscan_approve_campaignscan_view_reportscan_manage_creativesget)r+   
permissionZpermission_mapr'   r'   r(   has_permission   s    zUserAdvertiser.has_permissionN)r"   r#   r$   rD   ZPERMISSION_LEVELSr   rO   r^   rd   r   rV   rE   rg   rL   rh   ri   rj   rk   rl   rm   rP   Z
granted_byr)   r,   rp   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	d
Zej
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dZej
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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ddddZG dd dZdd ZdS )AdvertiserBillingz$Billing information for advertisers.)Zcredit_cardzCredit Card)Zbank_transferzBank Transfer)checkZCheck)invoiceZInvoicerT   rU   r   rs   r      Tr      r	   r   r   Fr   
   r   r   c                   @   s   e Zd ZdZdS )zAdvertiserBilling.MetaZadvertiser_billingN)r"   r#   r$   r%   r'   r'   r'   r(   r)      s   r)   c                 C   s   d| j j S )NzBilling for )rV   r    r*   r'   r'   r(   r,      s    zAdvertiserBilling.__str__N)r"   r#   r$   rD   ZBILLING_METHODSr   OneToOneFieldr   r^   rV   rE   Zbilling_methodZcard_last_fourZ	card_typeZcard_expiryZ	bank_nameZaccount_numberZrouting_numberZ
swift_codeZbilling_address_line1Zbilling_address_line2Zbilling_cityZbilling_stateZbilling_postal_codeZbilling_countryrL   Zauto_payrN   Zbilling_thresholdr)   r,   r'   r'   r'   r(   rq      s2   rq   c                   @   sv   e Zd ZdZejeejddZejdejdZ	ej
dddZe Zejd	d
Zejd	d
ZG dd dZdd ZdS )AdvertiserNotez%Notes and comments about advertisers.notesrU   r   )r   r	   Tr   Fr   c                   @   s   e Zd ZdZdgZdS )zAdvertiserNote.MetaZadvertiser_notesz-created_atNr!   r'   r'   r'   r(   r)      s   r)   c                 C   s   d| j j d| jj S )Nz	Note for z by )rV   r    rd   rf   r*   r'   r'   r(   r,      s    zAdvertiserNote.__str__N)r"   r#   r$   rD   r   rO   r   r^   rV   rd   rE   r_   	TextFieldcontentrL   Zis_important
is_privater)   r,   r'   r'   r'   r(   rx      s   rx   N)	django.dbr   django.contrib.authr   apps.common.modelsr   r   rR   r`   rq   rx   r'   r'   r'   r(   <module>   s   _#0+