U
    YŸHgA+  ã                   @   s®   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mZmZ d dlmZmZmZ d dlmZ d dlmZ G d	d
„ d
eƒZG dd„ dƒZG dd„ deejƒZdS )é    )Úabsolute_import)Údate)Úget_current_isttime)Ú	BaseQuery)ÚdescÚfuncÚCheckConstraintÚand_Úor_)ÚdbÚappÚ
app_logger)Ú
Experience)ÚTimestampMixinc                   @   sf   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zejd fdd„ZdS )ÚCampaignQueryc                 C   s   |   ¡ S ©N)Úall©Úself© r   ú1/var/www/dostadmin/dostadmin/db_model/campaign.pyÚget_campaigns_log   s    zCampaignQuery.get_campaigns_logc                 C   s   |   t tj¡|k¡ ¡ S r   )Úfilterr   ÚDATEÚCampaignÚdeploy_datetimer   )r   Zip_dater   r   r   Úget_campaigns_for_date   s    z$CampaignQuery.get_campaigns_for_datec                 C   s   |   tj|k¡ ¡ S r   )r   r   ÚidÚfirst)r   Úcampaign_idr   r   r   Úget_campaign_by_id   s    z CampaignQuery.get_campaign_by_idc                 C   s   |   tj|k¡ ¡ S r   )r   r   Ústatusr   ©r   r!   r   r   r   Úget_campaigns_with_status   s    z'CampaignQuery.get_campaigns_with_statusc                 C   s.   |   ttj|ktj d ¡ƒ¡ ttjƒ¡ 	¡ S r   )
r   r	   r   Úexperience_idÚprogramseq_idÚis_notÚorder_byr   r   r   ©r   r$   r   r   r   Ú*get_last_campaign_with_pseq_for_experience   s    
þÿúÿz8CampaignQuery.get_last_campaign_with_pseq_for_experiencec                 C   s    |   tj|k¡ ttjƒ¡ ¡ S r   )r   r   r$   r'   r   r   r   r(   r   r   r   Úget_last_campaign_by_experience%   s    ÿÿz-CampaignQuery.get_last_campaign_by_experiencec                 C   s    |   tj|k¡ ttjƒ¡ ¡ S r   )r   r   Úuser_idr'   r   r   r   )r   r+   r   r   r   Úget_last_campaign_by_user_id,   s    ÿz*CampaignQuery.get_last_campaign_by_user_idc                 C   s6   |   tt tj¡t ¡ ktjtj	j
ktj|kƒ¡ ¡ S r   )r   r	   r   r   r   r   r   ÚtodayÚscheduled_byÚScheduledByÚ	LIVE_CALLÚagent_numberr   )r   r1   r   r   r   Úget_live_calls_today_agent1   s    ýÿz(CampaignQuery.get_live_calls_today_agentc              	   C   sP   t ƒ }|  tt tj¡t ¡ ktj	tj
jktj|ktdd„ |D ƒŽ ƒ¡ ¡ }|S )Nc                 s   s   | ]}t j|kV  qd S r   )r   r.   )Ú.0r.   r   r   r   Ú	<genexpr>B   s   ÿz;CampaignQuery.get_today_campaign_to_call.<locals>.<genexpr>)r   r   r	   r   r   r   r   r   r-   r!   ÚStatusÚ	SCHEDULEDr
   r   )r   Zscheduled_by_filterZist_nowÚ	campaignsr   r   r   Úget_today_campaign_to_call:   s    þÿüÿz(CampaignQuery.get_today_campaign_to_callÚCONFIRMATION_CALL_CONTENT_IDc                 C   s(   |   ttj|ktj|kƒ¡ tj¡ ¡ S r   )r   r	   r   r$   Ú
content_idr'   r   r   )r   r$   r:   r   r   r   Ú$get_confirmation_call_for_experienceL   s    þÿúÿz2CampaignQuery.get_confirmation_call_for_experienceN)Ú__name__Ú
__module__Ú__qualname__r   r   r    r#   r)   r*   r,   r2   r8   r   Úconfigr;   r   r   r   r   r      s   	ýr   c                   @   s"   e Zd ZG dd„ dƒZdd„ ZdS )ÚCustomizedCampaignc                   @   s   e Zd ZdZdZdZdS )zCustomizedCampaign.ActionÚnothingZadd_campaignZupdate_deploy_datetime_to_nowN)r<   r=   r>   ZNOTHINGZADD_CAMPAIGNZUPDATE_deploy_datetime_TO_NOWr   r   r   r   ÚAction^   s   rB   c                 C   sÚ   |  dd¡| _|  d¡| _|  d¡| _|  d¡| _|  d¡| _|  dd¡| _|  dd¡| _|  d	¡| _|  d
¡| _	|  d¡| _
|  d¡| _|  d¡| _|  d¡| _|  d¡| _|  d¡| _|  dd ¡| _|  dd ¡| _d S )NÚnameÚ r:   Úcontent_version_idr$   r   r!   r.   r+   Úuser_numberr   Ú
program_idÚtimecategory_idÚattempted_timestampÚprovider_numberr%   Úparent_campaign_idÚparent_campaign_deploy_time)ÚgetrC   r:   rE   r$   r   r!   r.   r+   rF   r   rG   rH   rI   rJ   r%   rK   rL   )r   Údatar   r   r   Ú__init__c   s"    zCustomizedCampaign.__init__N)r<   r=   r>   rB   rO   r   r   r   r   r@   ]   s   r@   c                   @   s~  e Zd ZdZeZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd	„ d	ƒZ	G d
d„ dƒZ
ejejddZeje d¡ddZe eje d¡¡Ze eje d¡¡Ze ej¡Ze eje d¡¡Ze e d¡¡Ze e d¡¡Ze eje d¡¡Ze ej¡Ze ej¡Ze ej¡Ze ej¡Ze ej¡Ze ej¡Ze e d¡¡Z e e d¡¡Z!e e d¡¡Z"e e d¡¡Z#e e d¡¡Z$e e d¡¡Z%e ej¡Z&e ej¡Z'e ej¡Z(e ej)¡Z*e e d¡¡Z+e e d¡¡Z,e e d¡¡Z-ej.dddZ/ej.dddZ0e1e2e"ƒ 3¡ dkddi fZ4dd „ Z5d!d"„ Z6d#d$„ Z7e8d%d&„ ƒZ9d'd(„ Z:e8d)d*„ ƒZ;e8d+d,„ ƒZ<d-S ).r   Úcampaignc                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZedfedfedfedfedfe	dfe
dfedfedfedfedfedffZdS )zCampaign.StatusÚ	scheduledZ	attemptedúin-progressZfailed_noscheduleZfailed_noconnectZfailed_noresponseÚ	completedÚdeletedÚunscheduledÚqueuedZfailed_systemZ
failed_dndZfailed_outofwindowZfailed_toomanyrequestsÚ	ScheduledZ	AttemptedzFailed No SchedulezFailed No ConnectzFailed No ResponseZ	CompletedZDeletedZUnscheduledZQueuedzFailed Systemz
Failed DNDzFailed Out Of WindowN)r<   r=   r>   r6   Z	ATTEMPTEDÚIN_PROGRESSZFAILED_NOSCHEDULEÚFAILED_NOCONNECTÚFAILED_NORESPONSEÚ	COMPLETEDÚDELETEDZUNSCHEDULEDZQUEUEDZFAILED_SYSTEMZ
FAILED_DNDZFAILED_OUTOFWINDOWZFAILED_TOOMANYREQUESTSÚCHOICEr   r   r   r   r5   {   s6   ôr5   c                   @   sP   e Zd ZdZdZdZdZdZdZdZ	edfed	fed
fedfedfe	dffZ
dS )zCampaign.ScheduledByÚcron_regularÚcron_missed_callZ	ui_manualZ
cron_nudgeÚ	live_callÚfeedback_callÚchampion_callzCron RegularzCron Missed Callz	UI Manualz	Live CallzFeedback CallzChampion CallN)r<   r=   r>   ÚCRON_REGULARÚCRON_MISSED_CALLZ	UI_MANUALZ
CRON_NUDGEr0   ÚFEEDBACK_CALLÚCHAMPION_CALLr]   r   r   r   r   r/   š   s   úr/   c                   @   s.   e Zd ZdZdZdZdZdZeeegZeZ	dS )zCampaign.ExotelCallbackStatusz	no-answerÚbusyrS   ÚfailedrR   N)
r<   r=   r>   Ú	NO_ANSWERÚBUSYr[   ÚFAILEDrX   ZCONNECT_FAILZCONNECT_SUCCESSr   r   r   r   ÚExotelCallbackStatus¬   s   
rl   c                   @   s   e Zd ZdZdZdZdS )zCampaign.FailNoScheduleStatusZsystem_errorZ	dnd_errorZwindow_errorN)r<   r=   r>   ZSYSTEM_ERRORZ	DND_ERRORZWINDOW_ERRORr   r   r   r   ÚFailNoScheduleStatus¶   s   rm   c                   @   s^   e Zd ZdZdZdZdZdZedfedfedfed	fed
ffZedfedfedfedffZ	dS )zCampaign.LiveCallPurposeÚREFERRALÚSURVEYZPROD_RESÚSIGNUPÚ
COUNSELINGZ
CounselingZSurveyzProduct ResearchzSignup UserzReferral Useru   à¤¯à¥‚à¤œà¤¼à¤° à¤°à¥‡à¤«à¤°à¤²u5   à¤ªà¥à¤°à¥‰à¤¡à¤•à¥à¤Ÿ à¤•à¥€ à¤œà¤¾à¤¨à¤•à¤¾à¤°à¥€u   à¤¸à¤°à¥à¤µà¥‡u"   à¤¯à¥‚à¤œà¤¼à¤° à¤¸à¤¾à¤‡à¤¨à¤…à¤ªN)
r<   r=   r>   rn   ro   ZPRODUCT_RESEARCHrp   rq   ÚCHOICE_ENGLISHÚCHOICE_HINDIr   r   r   r   ÚLiveCallPurpose»   s    û	ürt   T)Úprimary_keyéd   F)Únullablez
content.idzcontent_version.idzexperience.idé   zusers.idé2   é   éÈ   ÚContentVersionÚjoined)Úlazyr   Zcheck_provider_number_isdigit)rC   c                 C   s4   dt | jƒ d t | jƒ d t | jƒ d | j S )Nz
 Campaign: id_ z, name: z, time: z
, Status: )Ústrr   rC   r   r!   r   r   r   r   Ú__repr__ù   s     ÿþýüûúùÿzCampaign.__repr__c                 C   s(   t  |¡}|r$|| _|| _tj ¡  |S r   )r   Ú&get_campaign_status_from_exotel_statusr!   Úcallsidr   ÚsessionÚcommit)r   r!   r‚   Úcall_statusr   r   r   Úupdate_campaign_after_callback  s    

z'Campaign.update_campaign_after_callbackc                 C   s   | j }tjj|_tj ¡  d S r   )Ú
experiencer   r5   ÚPAUSEDr!   r   rƒ   r„   )r   r‡   r   r   r   Ú"mark_campaign_experience_as_paused  s    
z+Campaign.mark_campaign_experience_as_pausedc                 C   sP   d}|t jjkrt jj}n2|t jjt jjfkr8t jj}n|t jjkrLt jj}|S )NrD   )	r   rl   r[   r5   ri   rj   rZ   rk   rY   )ÚclsÚexotel_statusr…   r   r   r   r     s    
þ
z/Campaign.get_campaign_status_from_exotel_statusc                 C   s.   | j dkr|| _ tj ¡  nt d| j¡ | S )N)rS   rT   rh   z)Cannot edit completed/deleted campaign %d)r!   r   rƒ   r„   r   Úerrorr   r"   r   r   r   Úchange_campaign_status!  s
    
zCampaign.change_campaign_statusc                 C   s"   t j |¡}|r| t jj¡ d S r   )r   Úqueryr    r   r5   r\   )rŠ   Úcp_idrP   r   r   r   Údelete_campaign)  s    zCampaign.delete_campaignc              
   C   sz   zF| j j|d ¡ }dd„ |D ƒ}|D ]}tj |¡ q&tj ¡  |W S  tk
rt } zt|ƒ W Y ¢S d }~X Y nX d S )N)r$   c                 S   s   g | ]
}|j ‘qS r   )r   )r3   rP   r   r   r   Ú
<listcomp>3  s     z?Campaign.delete_campaigns_for_experience_id.<locals>.<listcomp>)	rŽ   Ú	filter_byr   r   rƒ   Údeleter„   Ú	Exceptionr   )rŠ   Zexp_idZcampaign_logsÚcampaign_idsrP   Úer   r   r   Ú"delete_campaigns_for_experience_id/  s    
z+Campaign.delete_campaigns_for_experience_idN)=r<   r=   r>   Ú__tablename__r   Úquery_classr5   r/   rl   rm   rt   r   ÚColumnÚIntegerr   ÚStringrC   Ú
ForeignKeyr:   rE   ÚDateTimer   r$   r!   r.   r+   rG   rK   rL   r%   rH   rI   r‚   Zprovider_namerJ   r1   rF   r…   Zcall_start_timeZcall_end_timeÚlisten_secsÚFloatÚpriceZprovider_circleÚuser_circleZrecording_urlÚrelationshipÚcontent_versionr‡   r   r   ÚisdigitÚ__table_args__r€   r†   r‰   Úclassmethodr   r   r   r—   r   r   r   r   r   w   sj   
 ÿü

r   N)Ú
__future__r   Údatetimer   Úutils.helpers.helpersr   Úflask_sqlalchemyr   Ú
sqlalchemyr   r   r   r	   r
   Ú	dostadminr   r   r   Zdostadmin.db_model.experiencer   Údostadmin.mixinsr   r   r@   ÚModelr   r   r   r   r   Ú<module>   s   Q