
    jJh}+                         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
e      Z G d d      Z G d deej2                        Zy)    )absolute_import)date)get_current_isttime)Query)descfuncCheckConstraintand_or_)dbapp
app_logger)
Experience)TimestampMixinc                   h    e Zd Zd ZddZd Zd Zd Zd Zd Z	d Z
d	 Zej                  d
   fdZy)CampaignQueryc                 "    | j                         S N)allselfs    1/var/www/dostadmin/dostadmin/db_model/campaign.pyget_campaigns_logzCampaignQuery.get_campaigns_log   s    xxz    c                     | j                  t        j                  t        j                        |k(        j                  ||d      S )NF)pageper_page	error_out)filterr   DATECampaigndeploy_datetimepaginate)r   ip_datecurrent_pager   s       r   get_campaigns_for_datez$CampaignQuery.get_campaigns_for_date   s?    {{499X%=%=>'IJSSE T 
 	
r   c                 b    | j                  t        j                  |k(        j                         S r   )r   r!   idfirst)r   campaign_ids     r   get_campaign_by_idz CampaignQuery.get_campaign_by_id   s#    {{8;;+56<<>>r   c                 b    | j                  t        j                  |k(        j                         S r   )r   r!   statusr   r   r-   s     r   get_campaigns_with_statusz'CampaignQuery.get_campaigns_with_status   s#    {{8??f4599;;r   c                     | j                  t        t        j                  |k(  t        j                  j                  d                   j                  t        t        j                              j                         S r   )
r   r
   r!   experience_idprogramseq_idis_notorder_byr   r"   r)   r   r1   s     r   *get_last_campaign_with_pseq_for_experiencez8CampaignQuery.get_last_campaign_with_pseq_for_experience   s[    KK**m;**11$7 Xd83345UW		
r   c                     | j                  t        j                  |k(        j                  t	        t        j
                              j                         S r   )r   r!   r1   r4   r   r"   r)   r5   s     r   get_last_campaign_by_experiencez-CampaignQuery.get_last_campaign_by_experience'   s:    KK..-?@Xd83345UW	
r   c                     | j                  t        j                  |k(        j                  t	        t        j
                              j                         S r   )r   r!   user_idr4   r   r(   r)   )r   r:   s     r   get_last_campaign_by_user_idz*CampaignQuery.get_last_campaign_by_user_id.   s;    KK((G34==d8;;>OPVVX	
r   c                 6   | j                  t        t        j                  t        j
                        t        j                         k(  t        j                  t        j                  j                  k(  t        j                  |k(              j                         S r   )r   r
   r   r    r!   r"   r   todayscheduled_byScheduledBy	LIVE_CALLagent_numberr   )r   rA   s     r   get_live_calls_today_agentz(CampaignQuery.get_live_calls_today_agent3   si    {{		(223tzz|C%%)=)=)G)GG%%5
 #%	r   c                 j   t               }| j                  t        t        j                  t
        j                        t        j                         k(  t
        j                  t
        j                  j                  k(  t
        j                  |k  t        d |D                     j                         }|S )Nc              3   B   K   | ]  }t         j                  |k(    y wr   )r!   r>   ).0r>   s     r   	<genexpr>z;CampaignQuery.get_today_campaign_to_call.<locals>.<genexpr>D   s#      ,?L !--=,?s   )r   r   r
   r   r    r!   r"   r   r=   r-   Status	SCHEDULEDr   r   )r   scheduled_by_filterist_now	campaignss       r   get_today_campaign_to_callz(CampaignQuery.get_today_campaign_to_call<   s    %'KK		(223tzz|C8??#<#<<((G3,?	

 #% 	 r   CONFIRMATION_CALL_CONTENT_IDc                     | j                  t        t        j                  |k(  t        j                  |k(              j                  t        j                        j                         S r   )r   r
   r!   r1   
content_idr4   r"   r)   )r   r1   rO   s      r   $get_confirmation_call_for_experiencez2CampaignQuery.get_confirmation_call_for_experienceN   sR     KK**m;'':5 Xh../UW		
r   N)   )__name__
__module____qualname__r   r&   r+   r/   r6   r8   r;   rB   rL   r   configrP    r   r   r   r      sC    

?<




* ::<=
r   r   c                   &    e Zd Z G d d      Zd Zy)CustomizedCampaignc                       e Zd ZdZdZdZy)CustomizedCampaign.Actionnothingadd_campaignupdate_deploy_datetime_to_nowN)rR   rS   rT   NOTHINGADD_CAMPAIGNUPDATE_deploy_datetime_TO_NOWrV   r   r   ActionrZ   `   s    %(G%r   ra   c                    |j                  dd      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  dd      | _        |j                  dd      | _        |j                  d	      | _        |j                  d
      | _	        |j                  d      | _
        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  dd       | _        |j                  dd       | _        y )Nname rO   content_version_idr1   r"   r-   r>   r:   user_numberr(   
program_idtimecategory_idattempted_timestampprovider_numberr2   parent_campaign_idparent_campaign_deploy_time)getrc   rO   re   r1   r"   r-   r>   r:   rf   r(   rg   rh   ri   rj   r2   rk   rl   )r   datas     r   __init__zCustomizedCampaign.__init__e   s.   HHVR(	((<0"&((+?"@!XXo6#xx(9:hhx, HH^R8xx	*88M2((4.((<0#xx(9:#'88,A#B #xx(9:!XXo6"&((+?"F+/884QSW+X(r   N)rR   rS   rT   ra   ro   rV   r   r   rX   rX   _   s    H H
Yr   rX   c                      e Zd ZdZeZ G d d      Z G d d      Z G d d      Z G d d	      Z	 G d
 d      Z
 ej                  ej                  d      Z ej                   ej                  d      d      Z ej                  ej                   ej"                  d            Z ej                  ej                   ej"                  d            Z ej                  ej(                        Z ej                  ej                   ej"                  d            Z ej                   ej                  d            Z ej                   ej                  d            Z ej                  ej                   ej"                  d            Z ej                  ej                        Z ej                  ej                        Z ej                  ej(                        Z ej                  ej                        Z ej                  ej                        Z ej                  ej(                        Z ej                   ej                  d            Z  ej                   ej                  d            Z! ej                   ej                  d            Z" ej                   ej                  d            Z# ej                   ej                  d            Z$ ej                   ej                  d            Z% ej                  ej(                        Z& ej                  ej(                        Z' ej                  ej                        Z( ej                  ejR                        Z* ej                   ej                  d            Z+ ej                   ej                  d            Z, ej                   ej                  d            Z- ej\                  ddd      Z/ ej\                  dd      Z0 e1 e2e"      jg                         du d      i fZ4d  Z5d! Z6d" Z7e8d#        Z9d$ Z:e8d%        Z;e8d&        Z<y')(r!   campaignc                       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y)Campaign.Status	scheduled	attemptedin-progressfailed_noschedulefailed_noconnectfailed_noresponse	completeddeletedunscheduledqueuedfailed_system
failed_dndfailed_outofwindowfailed_toomanyrequests	Scheduled	AttemptedzFailed No SchedulezFailed No ConnectzFailed No Response	CompletedDeletedUnscheduledQueuedzFailed Systemz
Failed DNDzFailed Out Of WindowN)rR   rS   rT   rH   	ATTEMPTEDIN_PROGRESSFAILED_NOSCHEDULEFAILED_NOCONNECTFAILED_NORESPONSE	COMPLETEDDELETEDUNSCHEDULEDQUEUEDFAILED_SYSTEM
FAILED_DNDFAILED_OUTOFWINDOWFAILED_TOOMANYREQUESTSCHOICErV   r   r   rG   rs   }   s    		#/-/	#'!
1!9 $$ 4523 45$i -(XO,&!78
r   rG   c                   P    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
y)Campaign.ScheduledBycron_regularcron_missed_call	ui_manual
cron_nudge	live_callfeedback_callchampion_callzCron RegularzCron Missed Callz	UI Manualz	Live CallzFeedback CallzChampion CallN)rR   rS   rT   CRON_REGULARCRON_MISSED_CALL	UI_MANUAL
CRON_NUDGEr@   FEEDBACK_CALLCHAMPION_CALLr   rV   r   r   r?   r      s`    %-	!
	'' >*12$$O,O,
r   r?   c                   .    e Zd ZdZdZdZdZdZeeegZeZ	y)Campaign.ExotelCallbackStatusz	no-answerbusyrz   failedrv   N)
rR   rS   rT   	NO_ANSWERBUSYr   FAILEDr   CONNECT_FAILCONNECT_SUCCESSrV   r   r   ExotelCallbackStatusr      s,    		#!40#r   r   c                       e Zd ZdZdZdZy)Campaign.FailNoScheduleStatussystem_error	dnd_errorwindow_errorN)rR   rS   rT   SYSTEM_ERROR	DND_ERRORWINDOW_ERRORrV   r   r   FailNoScheduleStatusr      s    %	%r   r   c                   ^    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	y)Campaign.LiveCallPurposeREFERRALSURVEYPROD_RESSIGNUP
COUNSELING
CounselingSurveyzProduct ResearchzSignup UserzReferral Useru   यूज़र रेफरलu5   प्रॉडक्ट की जानकारीu   सर्वेu"   यूज़र साइनअपN)
rR   rS   rT   r   r   PRODUCT_RESEARCHr   r   CHOICE_ENGLISHCHOICE_HINDIrV   r   r   LiveCallPurposer      s{    %!
 &X12]#'
 89VW&'9:	
r   r   T)primary_keyd   F)nullablez
content.idzcontent_version.idzexperience.idrQ   zusers.id2         ContentVersionjoined)back_populateslazyr   )r   check_provider_number_isdigit)rc   c                     dt        | j                        z   dz   t        | j                        z   dz   t        | j                        z   dz   | j                  z   S )Nz
 Campaign: id_ z, name: z, time: z
, Status: )strr(   rc   r"   r-   r   s    r   __repr__zCampaign.__repr__   sk    $''l $))n 	
 $&&'(  kk		
r   c                     t         j                  |      }|r,|| _        || _        t        j
                  j                          |S r   )r!   &get_campaign_status_from_exotel_statusr-   callsidr   sessioncommit)r   r-   r   call_statuss       r   update_campaign_after_callbackz'Campaign.update_campaign_after_callback	  s9    EEfM%DK"DLJJr   c                     | j                   }t        j                  j                  |_        t
        j                  j                          y r   )
experiencer   rG   PAUSEDr-   r   r   r   )r   r   s     r   "mark_campaign_experience_as_pausedz+Campaign.mark_campaign_experience_as_paused  s/    __
&--44



r   c                    d}|t         j                  j                  k(  rt         j                  j                  }|S |t         j                  j                  t         j                  j
                  fv rt         j                  j                  }|S |t         j                  j                  k(  rt         j                  j                  }|S )Nrd   )	r!   r   r   rG   r   r   r   r   r   )clsexotel_statusr   s      r   r   z/Campaign.get_campaign_status_from_exotel_status  s    H99CCC"//33K  ))33))..
 
 #//;;K  h;;BBB"//::Kr   c                     | j                   dvr'|| _         t        j                  j                          | S t	        j
                  d| j                         | S )N)rz   r{   r   z)Cannot edit completed/deleted campaign %d)r-   r   r   r   r   errorr(   r.   s     r   change_campaign_statuszCampaign.change_campaign_status%  sI    ;;@@ DKJJ  H$''Rr   c                     t         j                  j                  |      }|r*|j                  t         j                  j
                         y y r   )r!   queryr+   r   rG   r   )r   cp_idrq   s      r   delete_campaignzCampaign.delete_campaign-  s6    >>44U;++HOO,C,CD r   c                 $   	 | j                   j                  |      j                         }|D ]!  }t        j                  j                  |       # t        j                  j                          y # t        $ r}t        |      cY d }~S d }~ww xY w)N)r1   )	r   	filter_byr   r   r   deleter   	Exceptionr   )r   exp_idcampaign_logsrq   es        r   "delete_campaigns_for_experience_idz+Campaign.delete_campaigns_for_experience_id3  sl    	II//f/EIIKM)

!!(+ *JJ 	q6M	s   A.A1 1	B:
B
B
BN)=rR   rS   rT   __tablename__r   query_classrG   r?   r   r   r   r   ColumnIntegerr(   Stringrc   
ForeignKeyrO   re   DateTimer"   r1   r-   r>   r:   rg   rk   rl   r2   rh   ri   r   provider_namerj   rA   rf   r   call_start_timecall_end_timelisten_secsFloatpriceprovider_circleuser_circlerecording_urlrelationshipcontent_versionr   r	   r   isdigit__table_args__r   r   r   classmethodr   r   r   r   rV   r   r   r!   r!   y   s   MK
 
>
 
$$ $& &

 
, 
2::4	0B299YRYYs^e4D2::}r}}\'BCJ"2::}r}}=Q/RSbii,OBIIbjj-"--*HIMRYYyryy}%F299YRYYr]+Lbii

MBMM*$=>G2::&J"2::."+"))BKK"8BIIbjj)Mbii

+O#"))BKK0bii			"&GBIIibiim,Mbii			".O299YRYYr]+L"))IBIIbM*K"))IBIIbM*Kbii,OBIIbkk*M"))BJJ'KBIIbhhEbii			".O"))IBIIbM*KBIIibiin-M%boo(O !H=J 	 ((*d29X	
 		N


   E E
  r   r!   N)
__future__r   datetimer   utils.helpers.helpersr   flask_sqlalchemy.queryr   	BaseQuery
sqlalchemyr   r   r	   r
   r   	dostadminr   r   r   dostadmin.db_model.experiencer   dostadmin.mixinsr   r   rX   Modelr!   rV   r   r   <module>r     sR    &  5 5 = = ) ) 4 +P
I P
fY Y4B~rxx Br   