
    jJhI                         d dl mZ d dlZd dlmZ d dlmZmZ d dl	m
Z
mZ d dl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
j(                        Zy)    )absolute_importN)Query)and_desc)dbdb_model)get_current_isttimereplace_chars)TimestampMixin)	timedeltac                       e Zd Zd Zd Zd Z	 ddZddZddZddZ	dd	Z
dd
Zd Zd Zd Zd Zd Z	 ddZd Zd Zd Zy)ExperienceQueryc                 b    | j                  t        j                  |k(        j                         S N)filter
Experienceidfirst)selfexp_ids     3/var/www/dostadmin/dostadmin/db_model/experience.py	get_by_idzExperienceQuery.get_by_id   s#    {{:==F2399;;    c                 b    | j                  t        j                  |k(        j                         S r   )r   r   phoneall)r   
user_phones     r   get_all_experience_for_phonez,ExperienceQuery.get_all_experience_for_phone   s%    {{:++z9:>>@@r   c                     | j                  t        j                  j                  |dd              j	                         S )Ni)r   r   r   containscount)r   r   s     r   "get_total_experience_by_user_phonez2ExperienceQuery.get_total_experience_by_user_phone   s1    {{:++44U34[ABHHJJr   Nc           	         t        |t              s|g}|s4t        j                  j                  t        j                  j
                  g}|dk(  r| j                  t        t        j                  t        |      k(  t        j                  j                  |      t        j                  j                  |                  j                  t        t        j                              j!                         }|S | j                  t        t        j                  t        |      k(  t        j                  j                  |      t        j                  j                  |                  j!                         }|S )Nr   )
isinstancelistr   Type	PHONECASTSELFPACEDPCr   r   r   r
   statusin_typeorder_byr   
start_dater   )r   r   r)   experience_typeorder
experiences         r   !find_experience_with_phone_statusz1ExperienceQuery.find_experience_with_phone_status   s    &$'XF)88*//:U:UVOF?"((M%,@@"))--f5"++O< $z4456 (  $$e(<<%%))&1OO''8 eg  r   c                 T   |s4t         j                  j                  t         j                  j                  g}| j	                  t        t         j                  t         j                  j                  k(  t         j                  j                  |                  j                  ||d      S )NF)pageper_page	error_out)r   r&   r'   r(   r   r   r)   StatusACTIVEr+   r*   paginate)r   r.   r3   r4   s       r   get_active_experiencesz&ExperienceQuery.get_active_experiences4   s{    )88*//:U:UVO{{!!Z%6%6%=%==##O4

 (x5(
A	Br   c           	      p   |s4t         j                  j                  t         j                  j                  g}| j	                  t        t         j                  |k(  t         j                  t         j                  j                  k(  t         j                  j                  |                  j                         S r   )r   r&   r'   r(   r   r   user_idr)   r6   r7   r+   r*   r   )r   r;   r.   s      r   "get_active_experiences_for_user_idz2ExperienceQuery.get_active_experiences_for_user_id>   s    )88*//:U:UVO{{""g-!!Z%6%6%=%==##O4
 #%	r   c           	      &   |s4t         j                  j                  t         j                  j                  g}t         j                  j
                  t         j                  j                  g}| j                  t        t         j                  t        |      k(  t         j                  j                  |      t         j                  j                  |                  j                  t        t         j                               j#                         }|r|S t         j                  j$                  g}| j                  t        t         j                  t        |      k(  t         j                  j                  |      t         j                  j                  |                  j                  t        t         j                               j#                         }|r7t&        j(                  j*                  j-                  |j.                        }|r|S | j                  t        t         j                  t        |      k(  t         j                  j                  |                  j                  t        t         j                               j#                         }|S r   )r   r&   r'   r(   r6   r7   PENDINGr   r   r   r
   r+   r*   r)   r,   r   r-   r   CHURNEDr   ChurnedUsersquery(get_active_churned_user_by_experience_idr   )r   r   r.   experience_statusesr0   churned_users         r   find_experience_with_phonez*ExperienceQuery.find_experience_with_phoneJ   s   )88*//:U:UVO)00779J9J9R9RSKK$$e(<<OO''8%%))*=> Xd:0012UW 	 )00889KK$$e(<<OO''8%%))*=> Xd:0012UW 	 %%++TTMM 
 !! KK$$e(<<OO''8 Xd:0012UW 	 r   c                 |   |st         j                  j                  t         j                  j                  g}| j	                  t        t         j                  t        |      k(  t         j                  j                  |                  j                  t        t         j                              j                         S y r   )r   r&   r'   r(   r   r   r   r
   r+   r*   r,   r   r   r   r   r   r.   s      r   %find_latest_experience_id_for_a_phonez5ExperienceQuery.find_latest_experience_id_for_a_phone   s    )88*//:U:UVO "((M%,@@"++O< $z}}-.	 r   c                     | j                  t        t        j                  t	        |      k(  t        j
                  |k(              j                  t        j                        j                         S r   )	r   r   r   r   r
   r+   r,   r-   r   rG   s      r   !find_oldest_experience_with_phonez1ExperienceQuery.find_oldest_experience_with_phone   sS    KK$$e(<<OO6 Xj++,UW		
r   c                     | j                  t        t        j                  |k(  t        j                  t        j                  j
                  k(              j                         S r   )r   r   r   wa_idr&   WHATSAPPr   r   rL   s     r   find_all_experiences_for_wa_idz.ExperienceQuery.find_all_experiences_for_wa_id   sB    {{!!U*JOOz?W?W,WX

#%	r   c                    | j                  t        t        j                  t        j                  j
                  k(  t        j                  t        j                  j                  k(  t        j                  |k(              j                         S r   )r   r   r   r)   r6   r7   r+   r&   rM   rL   r   rN   s     r   !get_active_wa_experience_by_wa_idz1ExperienceQuery.get_active_wa_experience_by_wa_id   sb    {{!!Z%6%6%=%==:??#;#;;  E)
 %'	r   c                     t        |t              s|g}| j                  t        t        j
                  t        |      k(  t        j                  j                  |                  j                         }|S r   )
r$   r%   r   r   r   r   r
   r)   r*   r   )r   r   r)   experiencess       r   )find_all_experiences_for_phone_and_statusz9ExperienceQuery.find_all_experiences_for_phone_and_status   sd    &$'XFkk  M%$88!!%%f-

 #% 	 r   c                    t         j                  j                  t         j                  j                  g}| j	                  t        t         j                  |k(  t         j                  j                  |                  j                  t        t         j                              j                         }|r|S t         j                  j                  g}| j	                  t        t         j                  |k(  t         j                  j                  |                  j                  t        t         j                              j                         }|r7t        j                  j                   j#                  |j$                        }|r|S | j	                  t         j                  |k(        j                  t        t         j                              j                         }|S r   )r   r6   r7   r>   r   r   r;   r)   r*   r,   r   r-   r   r?   r   r@   rA   rB   r   )r   r;   rC   r0   rD   s        r   get_by_user_idzExperienceQuery.get_by_user_id   sv   )00779J9J9R9RSKK&&'1%%))*=> Xd:0012UW 	 )00889KK&&'1%%))*=> Xd:0012UW 	 %%++TTMM 
 !! KK""g- Xd:0012UW 	 r   c                    | j                  t        j                  j                  t        j
                        |k(  t        j                  j                  t        j                  d      j                  |            j                         }|S )N
   )
r   r   funcdater   
created_onrightprovider_numberr*   r   )r   r]   rZ   rS   s       r   3find_experience_by_provider_number_and_created_datezCExperienceQuery.find_experience_by_provider_number_and_created_date   sd     kkGGLL../47GGMM*44b9==oN
 #% 	 r   c           
         ddl m} | j                  |      }|r|S | j                  t        j
                  |k(        j                  t        j                        j                         }|r|S | j                  |      }|rct        j                  |t               j                         |t        j                  j                  |t        j                  j                         }|S |j#                  ||      }t        j                  |j$                  ||t        j                  j                   |t               j                         t        j                  j                  d      }|S )Nr   )User)experience_datar-   r]   r)   rL   r.   )partner_name)r;   rL   r   r+   r]   r-   r)   )dostadmin.db_modelr`   rQ   r   r   rL   r,   r-   r   rE   create_new_experiencer	   rZ   r6   SIGNUPr&   rM   add_new_userr   )	r   rL   namer   r]   rb   r`   r0   users	            r   get_or_create_wa_experiencez+ExperienceQuery.get_or_create_wa_experience   s3    	,;;EB
 KK
((E12Xj++,UW 	  44U;
#99 *.0557 /!((// * 8 8 : J   L A5577"00#21388:$++22


 r   c                 r   t               j                         }| j                  t        j                  |k(  t        j
                  j                  d       t        j                  j                  t        j                  j                  t        j                  j                  g            j                         }|S r   )r	   rZ   r   r   r-   experiment_group_nameis_r)   r*   r6   r7   r>   r   )r   todayrS   s      r   -get_active_experience_without_group_for_todayz=ExperienceQuery.get_active_experience_without_group_for_today"  s    #%**,kk!!U*,,006!!"")):+<+<+D+DE
 #% 	 r   c                 "   t         j                  j                  t         j                  |k(  t         j                  j                  t         j                  j                  t         j                  j                  g            j                         }|S r   )
r   rA   r   timecategory_idr)   r*   r6   r7   r>   r!   )r   rp   
user_counts      r   #get_timeslot_wise_active_user_countz3ExperienceQuery.get_timeslot_wise_active_user_count-  sn    %%,,&&/9!!"")):+<+<+D+DE

 %' 	 r   c                 b    | j                  t        j                  |k(        j                         S r   )r   r   experiment_idr   )r   rt   s     r    get_experience_for_experiment_idz0ExperienceQuery.get_experience_for_experiment_id6  s%    {{:33}DEIIKKr   )Nasc)N      r   )pc)fnu r{   N)__name__
__module____qualname__r   r   r"   r1   r9   r<   rE   rH   rJ   rO   rQ   rT   rV   r^   ri   rn   rr   ru    r   r   r   r      so    <AK :?>B	5n"


-^ MQ-^	Lr   r   c                       e Zd Zd Zy)CustomizedExperiencec                 t   |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d	      | _	        |j                  d
      | _
        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        y )Nr   r;   
program_idlanguage_idr-   timeprev_content_idprev_content_version_idprev_deploy_datetimerp   previous_campaign_namer   r]   r)   prev_programseq_idr.   campaign_statusrt   rk   experience_created_on)getr   r;   r   r   r-   r   r   r   r   rp   r   r   r]   r)   r   r.   prev_campaign_statusrt   rk   r   )r   datas     r   __init__zCustomizedExperience.__init__;  sZ   hhx(xx	*((<088M2((<0HHV$	#xx(9:'+xx0I'J$$(HH-C$D!#xx(9:&*hh/G&H#XXg&
#xx(9:hhx("&((+?"@#xx(9:$(HH->$?!!XXo6%)XX.E%F"%)XX.E%F"r   N)r|   r}   r~   r   r   r   r   r   r   :  s    Gr   r   c                      e Zd ZeZ G d d      Z G d d      Z G d d      ZdZ e	j                  e	j                  d	      Z e	j                  e	j                   e	j                  d
      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                   e	j                  d            Z e	j                  e	j(                        Z e	j                  e	j(                        Z e	j                   e	j                  d      d      Z e	j                   e	j                  d            Z e	j                   e	j                  d      d      Z e	j                  e	j                   e	j                  d      d      Z e	j                   e	j                  d            Z e	j                   e	j                  d            Z e	j:                  ddd      Z e	j:                  dd      Z e	j:                  dd      Z d Z!e"d        Z#e"d        Z$e"d        Z%e"d        Z&e"d         Z'e"	 	 	 	 	 	 d(d"       Z(e"d#        Z)e"d$        Z*e"d%        Z+e"d&        Z,e"d'        Z-y!))r   c                       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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edfedfedffZy)Experience.Statusactive	completed
terminatedqueuedpausedsignupsignup_unconfirmedsignup_confirmedresignup_confirmeddnd_waitdnd_notclearedmodifiedsignup_rejectedunsub
invalid_wapendingchurnedunsubscribeN)r|   r}   r~   r7   	COMPLETED
TERMINATEDQUEUEDPAUSEDre   SIGNUP_UNCONFIRMEDSIGNUP_CONFIRMEDRESIGNUP_CONFIRMEDDND_WAITDND_NOTCLEAREDMODIFIEDSIGNUP_REJECTEDUNSUBSCRIBE
INVALID_WAr>   r?   CHOICEr   r   r   r6   r   U  s    	!
1-1)+!
 X$&X12!56XXz"z"-./0-(&i 
r   r6   c                       e Zd ZdZdZy)Experience.Cohortr      N)r|   r}   r~   WEEKDAYWEEKENDr   r   r   Cohortr   z  s    r   r   c                   "    e Zd ZdZdZdZedffZy)Experience.Typery   waselfpacedpcuA   स्व निर्देशित फ़ोनकास्टN)r|   r}   r~   r'   rM   r(   r   r   r   r   r&   r   ~  s    	# cdfr   r&   r0   T)primary_keyzusers.idF)nullable   zlanguage.idztimecategory.idz
program.id)indexzexperiment.idd   MissedCallLogz,Experience.id == MissedCallLog.experience_id)backrefprimaryjoinTimecategoryrS   )back_populatesr`   c                     dt        | j                        z   dz   t        | j                        z   dz   | j                  z   S )Nz
 Experience: id_z user_idz, phone:)strr   r;   r   )r   s    r   __repr__zExperience.__repr__  sM     $''l $,,  	
 jj	
r   c                     t         j                  j                  |      }t         j                  j                  |_        t        j                  j                          y r   )	r   rA   r   r6   r   r)   r   sessioncommit)clsr   exps      r   mark_experience_as_completedz'Experience.mark_experience_as_completed  s;    ((0&&00



r   c                 Z    |t        j                  |j                          dz   d      z   S )Nrw   )daysweeks)datetimer   weekday)r   rm   s     r   get_next_start_datezExperience.get_next_start_date  s(    x))/?!/C1MMMr   c                 B   |dk(  r||j                   t        j                  j                  k(  rUt        j                  j                  |_         t        j                  t        j                  j                               |_	        t        j                  j                          y )Nrw   )r)   r   r6   re   r   r   r   rZ   rm   r-   r   r   r   )r   r0   callin_values      r   handle_callin_feedbackz!Experience.handle_callin_feedback  so     1  J$5$5$<$<<$.$5$5$F$F
!(2(F(FMM''))
% 	

r   c                 N    ||_         t        j                  j                          y r   )r)   r   r   r   )r   r0   r)   s      r   update_experience_statusz#Experience.update_experience_status  s    "



r   c                 N    ||_         t        j                  j                          y r   )r   r   r   r   )r   r0   r   s      r   update_experience_programz$Experience.update_experience_program  s     *



r   Nc                 n   ddl m}m}	 t        |t              rt	        |j
                  |j                  |j                  |j                  ||r|n.t               j                         t        j                  d      z   |r|nt        j                  j                  |r|n|j                  |r|n|j                   |r|nt        j"                  j$                  
      }
nt	        |j'                  d      |j'                  d      |j'                  d|j(                  j+                               |j'                  d	|	j(                  j-                               |j'                  d
t               j                               ||j'                  dt        j                  j.                        |j'                  d      |j'                  d      |j'                  d      
      }
t0        j2                  j5                  |
       t0        j2                  j7                          t0        j2                  j9                          |
S )Nr   )Languager   rw   )r   )
r;   r   r   rp   r   r-   r)   r]   rL   r+   r;   r   r   rp   r-   r)   r]   r+   rL   )
r;   r   r   rp   r-   r   r)   r]   r+   rL   )rc   r   r   r$   r   r;   r   r   rp   r	   rZ   r   r   r6   r   r]   rL   r&   r(   r   rA   find_language_id_with_namefind_timecategory_id_with_namere   r   r   addflushr   )r   ra   new_program_idr-   r)   r]   rL   r.   r   r   r0   s              r   rd   z Experience.create_new_experience  s    	>oz2#'//%+++77 / ? ?) &(*//1H4F4FA4NN!'vZ->->-O-O" !0$44$e/*?*?" %__00!J& $'++I6%))'2+//!8>>#L#L#N !0 3 3% &&EEG! +.. "5"7"<"<"> *&**8Z5F5F5M5MN / 3 34E F$((0%))'2#J& 	

z"





r   c                 N    ||_         t        j                  j                          y r   )rp   r   r   r   )r   r0   rp   s      r   update_experience_timez!Experience.update_experience_time  s    %4
"


r   c                      d|_         d|_        y )Nr   )rt   rk   )r   r0   s     r   ,update_experience_data_for_ended_experimentsz7Experience.update_experience_data_for_ended_experiments  s    #*
 +2
(r   c                 N    ||_         t        j                  j                          y r   )r-   r   r   r   r   r0   rZ   s      r   update_experience_start_datez'Experience.update_experience_start_date  s     $



r   c                 N    ||_         t        j                  j                          y r   )end_dater   r   r   r   s      r   update_experience_end_datez%Experience.update_experience_end_date  s    "



r   c                     	 t         j                  j                  |       t         j                  j                          y # t        $ r}t        |      cY d }~S d }~ww xY wr   )r   r   deleter   	Exceptionr   )r   r0   es      r   delete_experiencezExperience.delete_experience  sB    	JJj)JJ 	q6M	s   =A   	A	
AAA)NNr{   NNN).r|   r}   r~   r   query_classr6   r   r&   __tablename__r   ColumnIntegerr   
ForeignKeyr;   Stringr   r   rp   r   Dater-   r   r)   r]   r+   rt   rk   rL   relationshipmissed_callstime_categoryrh   r   classmethodr   r   r   r   r   rd   r   r   r   r   r   r   r   r   r   r   R  s   !K#
 #
J g g !M	2::4	0Bbii

MBMM*$=NGBIIibiime4E"))BJJm(DEKbii

MBMM:K,LMO2::}r}}\'BCJ277#Jryy!HRYYyryy}D1Fbii			".O299YRYYr]$/DBIIbjj-"--*HSWXM%BIIibiin5BIIibiim$E"2??BL
 $BOO$M 2??$D

  
 N N 	 	      6 6p   3 3      r   r   )
__future__r   r   flask_sqlalchemy.queryr   	BaseQuery
sqlalchemyr   r   	dostadminr   r   utils.helpers.helpersr	   r
   dostadmin.mixinsr   r   r   r   Modelr   r   r   r   <module>r     sN    &  5 ! " D + lLi lL^	G G0N Nr   