U
    YHgI                     @   s   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
 d
eZG dd dZG dd dee	jZdS )    )absolute_importN)	BaseQuery)and_desc)dbdb_model)get_current_isttimereplace_chars)TimestampMixin)	timedeltac                   @   s   e Zd Zdd Zdd Zdd Zd*d	d
Zd+ddZd,ddZd-ddZ	d.ddZ
d/ddZdd Zdd Zdd Zdd Zdd Zd0d"d#Zd$d% Zd&d' Zd(d) ZdS )1ExperienceQueryc                 C   s   |  tj|k S N)filter
Experienceidfirst)selfexp_id r   3/var/www/dostadmin/dostadmin/db_model/experience.py	get_by_id   s    zExperienceQuery.get_by_idc                 C   s   |  tj|k S r   )r   r   phoneall)r   
user_phoner   r   r   get_all_experience_for_phone   s    z,ExperienceQuery.get_all_experience_for_phonec                 C   s   |  tj|dd   S )Ni)r   r   r   containscount)r   r   r   r   r   "get_total_experience_by_user_phone   s    z2ExperienceQuery.get_total_experience_by_user_phoneNascc                 C   s   t |ts|g}|s$tjjtjjg}|dkrj| ttjt	|ktj
|tj|ttj }n0| ttjt	|ktj
|tj| }|S )Nr   )
isinstancelistr   Type	PHONECASTSELFPACEDPCr   r   r   r	   statusin_typeorder_byr   
start_dater   )r   r   r$   experience_typeorder
experiencer   r   r   !find_experience_with_phone_status   s.    




z1ExperienceQuery.find_experience_with_phone_statusc                 C   s:   |st jjt jjg}| tt jt jjkt j	
| S r   )r   r!   r"   r#   r   r   r$   StatusACTIVEr&   r%   r   )r   r)   r   r   r   get_active_experiences4   s    
z&ExperienceQuery.get_active_experiencesc                 C   sB   |st jjt jjg}| tt j|kt jt jj	kt j
| S r   )r   r!   r"   r#   r   r   user_idr$   r-   r.   r&   r%   r   )r   r0   r)   r   r   r   "get_active_experiences_for_user_id>   s    
z2ExperienceQuery.get_active_experiences_for_user_idc                 C   s   |st jjt jjg}t jjt jjg}| tt j	t
|kt j|t j|tt j }|rh|S t jjg}| tt j	t
|kt j|t j|tt j }|rtjj|j}|r|S | tt j	t
|kt j|tt j }|S r   )r   r!   r"   r#   r-   r.   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_statusesr+   churned_userr   r   r   find_experience_with_phoneJ   sV    





z*ExperienceQuery.find_experience_with_phonec                 C   sJ   |sFt jjt jjg}| tt jt|kt j	|
tt j S d S r   )r   r!   r"   r#   r   r   r   r	   r&   r%   r'   r   r   r   r   r   r)   r   r   r   %find_latest_experience_id_for_a_phone   s    
z5ExperienceQuery.find_latest_experience_id_for_a_phonepcc                 C   s,   |  ttjt|ktj|ktj S r   )	r   r   r   r   r	   r&   r'   r(   r   r:   r   r   r   !find_oldest_experience_with_phone   s    z1ExperienceQuery.find_oldest_experience_with_phonec                 C   s$   |  ttj|ktjtjjk S r   )r   r   r   wa_idr!   WHATSAPPr   r   r>   r   r   r   find_all_experiences_for_wa_id   s    z.ExperienceQuery.find_all_experiences_for_wa_idc                 C   s0   |  ttjtjjktjtjjktj	|k
 S r   )r   r   r   r$   r-   r.   r&   r!   r?   r>   r   r@   r   r   r   !get_active_wa_experience_by_wa_id   s    z1ExperienceQuery.get_active_wa_experience_by_wa_idc                 C   s:   t |ts|g}| ttjt|ktj|	 }|S r   )
r   r    r   r   r   r   r	   r$   r%   r   )r   r   r$   experiencesr   r   r   )find_all_experiences_for_phone_and_status   s    

z9ExperienceQuery.find_all_experiences_for_phone_and_statusc                 C   s   t jjt jjg}| tt j|kt j|	t
t j }|rF|S t jjg}| tt j|kt j|	t
t j }|rtjj|j}|r|S | t j|k	t
t j }|S r   )r   r-   r.   r2   r   r   r0   r$   r%   r'   r   r(   r   r3   r   r4   r5   r6   r   )r   r0   r7   r+   r8   r   r   r   get_by_user_id   sH    


zExperienceQuery.get_by_user_idc                 C   s4   |  tjtj|ktjtjd|	 }|S )N
   )
r   r   funcdater   
created_onrightprovider_numberr%   r   )r   rK   rH   rC   r   r   r   3find_experience_by_provider_number_and_created_date   s
    zCExperienceQuery.find_experience_by_provider_number_and_created_datefnu c           	   
   C   s   ddl m} | |}|r|S | tj|ktj }|rB|S | 	|}|rxtj
|t  |tjj|tjjd}|S |j||d}t
|j||tjj|t  tjjd}|S )Nr   )User)experience_datar(   rK   r$   r>   r)   )partner_name)r0   r>   r   r&   rK   r(   r$   )dostadmin.db_modelrO   rB   r   r   r>   r'   r(   r   r9   create_new_experiencer   rH   r-   SIGNUPr!   r?   Zadd_new_userr   )	r   r>   namer   rK   rQ   rO   r+   userr   r   r   get_or_create_wa_experience   sB    

z+ExperienceQuery.get_or_create_wa_experiencec                 C   sB   t   }| tj|ktjd tjtj	j
tj	jg }|S r   )r   rH   r   r   r(   experiment_group_nameis_r$   r%   r-   r.   r2   r   )r   todayrC   r   r   r   -get_active_experience_without_group_for_today"  s    

z=ExperienceQuery.get_active_experience_without_group_for_todayc                 C   s0   t jt j|kt jt jjt jjg	 }|S r   )
r   r5   r   timecategory_idr$   r%   r-   r.   r2   r   )r   r\   Z
user_countr   r   r   #get_timeslot_wise_active_user_count-  s    z3ExperienceQuery.get_timeslot_wise_active_user_countc                 C   s   |  tj|k S r   )r   r   experiment_idr   )r   r^   r   r   r    get_experience_for_experiment_id6  s    z0ExperienceQuery.get_experience_for_experiment_id)Nr   )N)N)N)N)r<   )rM   rN   rN   N)__name__
__module____qualname__r   r   r   r,   r/   r1   r9   r;   r=   rA   rB   rD   rE   rL   rW   r[   r]   r_   r   r   r   r   r      s0      




7

	/       
/	r   c                   @   s   e Zd Zdd ZdS )CustomizedExperiencec                 C   s   | d| _| d| _| d| _| d| _| d| _| d| _| d| _| d| _| d	| _	| d
| _
| d| _| d| _| d| _| d| _| d| _| d| _| d| _| d| _| d| _| d| _d S )Nr   r0   
program_idlanguage_idr(   timeprev_content_idprev_content_version_idprev_deploy_datetimer\   previous_campaign_namer   rK   r$   prev_programseq_idr)   Zcampaign_statusr^   rX   experience_created_on)getr   r0   rd   re   r(   rf   rg   rh   ri   r\   rj   r   rK   r$   rk   r)   Zprev_campaign_statusr^   rX   rl   )r   datar   r   r   __init__;  s(    zCustomizedExperience.__init__N)r`   ra   rb   ro   r   r   r   r   rc   :  s   rc   c                   @   s  e Zd ZeZG dd dZG dd dZG dd dZdZe	j
e	jdd	Ze	j
e	je	d
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e	dZe	
e	jZe	
e	jZe	j
e	dddZe	
e	dZe	j
e	dddZe	j
e	je	dddZe	
e	dZe	
e	dZe	jddddZe	jddddZe	jdd ddZ dd Z!e"dd Z#e"dd  Z$e"d!d" Z%e"d#d$ Z&e"d%d& Z'e"d5d)d*Z(e"d+d, Z)e"d-d. Z*e"d/d0 Z+e"d1d2 Z,e"d3d4 Z-d'S )6r   c                   @   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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dS )zExperience.Statusactive	completedZ
terminatedqueuedpausedZsignupZsignup_unconfirmedZsignup_confirmedZresignup_confirmedZdnd_waitZdnd_notclearedmodifiedZsignup_rejectedZunsubZ
invalid_wapendingZchurnedunsubscribeN)r`   ra   rb   r.   	COMPLETEDZ
TERMINATEDQUEUEDPAUSEDrT   SIGNUP_UNCONFIRMEDSIGNUP_CONFIRMEDZRESIGNUP_CONFIRMEDZDND_WAITZDND_NOTCLEAREDMODIFIEDSIGNUP_REJECTEDZUNSUBSCRIBEZ
INVALID_WAr2   r3   CHOICEr   r   r   r   r-   U  sB   r-   c                   @   s   e Zd ZdZdZdS )zExperience.Cohortr      N)r`   ra   rb   ZWEEKDAYWEEKENDr   r   r   r   Cohortz  s   r   c                   @   s.   e Zd ZdZdZdZedfedfedffZdS )zExperience.Typer<   waZselfpacedpcZ	PhonecastZWhatsAppzSelf Paced PhonecastN)r`   ra   rb   r"   r?   r#   r~   r   r   r   r   r!   ~  s   r!   r+   T)primary_keyzusers.idF)nullable   zlanguage.idztimecategory.idz
program.id)indexzexperiment.idd   MissedCallLogz,Experience.id == MissedCallLog.experience_id)backrefprimaryjoinTimecategoryz-Experience.timecategory_id == Timecategory.idrO   zExperience.user_id == User.idc                 C   s&   dt | j d t | j d | j S )Nz
 Experience: id_z user_idz, phone:)strr   r0   r   )r   r   r   r   __repr__  s    zExperience.__repr__c                 C   s$   t j|}t jj|_tj  d S r   )	r   r5   r   r-   rw   r$   r   sessioncommit)clsr   expr   r   r   mark_experience_as_completed  s    
z'Experience.mark_experience_as_completedc                 C   s   |t j|  d dd S )N   )daysweeks)datetimer   weekday)r   rZ   r   r   r   get_next_start_date  s    zExperience.get_next_start_datec                 C   s@   |dkr2|j tjjkr2tjj|_ ttj |_	t
j  d S )Nr   )r$   r   r-   rT   r{   r   r   rH   rZ   r(   r   r   r   )r   r+   Zcallin_valuer   r   r   handle_callin_feedback  s    
z!Experience.handle_callin_feedbackc                 C   s   ||_ tj  d S r   )r$   r   r   r   )r   r+   r$   r   r   r   update_experience_status  s    z#Experience.update_experience_statusc                 C   s   ||_ tj  d S r   )rd   r   r   r   )r   r+   rd   r   r   r   update_experience_program  s    z$Experience.update_experience_programNrN   c                 C   s  ddl m}m}	 t|trt|j|j|j|j||r6|nt	 
 tjdd |rR|ntjj|r`|n|j|rl|n|j|rx|ntjjd
}
npt|d|d|d|j |d	|	j |d
t	 
 ||dtjj|d|d|dd
}
tj|
 tj  tj  |
S )Nr   )Languager   r   )r   )
r0   r   re   r\   rd   r(   r$   rK   r>   r&   r0   r   re   r\   r(   r$   rK   r&   r>   )
r0   r   re   r\   r(   rd   r$   rK   r&   r>   )rR   r   r   r   r   r0   r   re   r\   r   rH   r   r   r-   r{   rK   r>   r!   r#   rm   r5   Zfind_language_id_with_nameZfind_timecategory_id_with_namerT   r   r   addflushr   )r   rP   Znew_program_idr(   r$   rK   r>   r)   r   r   r+   r   r   r   rS     sZ    
  

z Experience.create_new_experiencec                 C   s   ||_ tj  d S r   )r\   r   r   r   )r   r+   r\   r   r   r   update_experience_time  s    z!Experience.update_experience_timec                 C   s   d|_ d|_d S )Nr   )r^   rX   )r   r+   r   r   r   ,update_experience_data_for_ended_experiments  s    z7Experience.update_experience_data_for_ended_experimentsc                 C   s   ||_ tj  d S r   )r(   r   r   r   r   r+   rH   r   r   r   update_experience_start_date  s    z'Experience.update_experience_start_datec                 C   s   ||_ tj  d S r   )end_dater   r   r   r   r   r   r   update_experience_end_date  s    z%Experience.update_experience_end_datec              
   C   sP   zt j| t j  W dS  tk
rJ } zt| W Y S d }~X Y nX d S )NT)r   r   deleter   	Exceptionr   )r   r+   er   r   r   delete_experience   s    
zExperience.delete_experience)NNrN   NNN).r`   ra   rb   r   query_classr-   r   r!   __tablename__r   ColumnIntegerr   
ForeignKeyr0   Stringr   re   r\   rd   Dater(   r   r$   rK   r&   r^   rX   r>   relationshipZmissed_callstime_categoryrV   r   classmethodr   r   r   r   r   rS   r   r   r   r   r   r   r   r   r   r   R  s~   %





      8



r   )
__future__r   r   flask_sqlalchemyr   
sqlalchemyr   r   	dostadminr   r   utils.helpers.helpersr   r	   dostadmin.mixinsr
   r   r   rc   Modelr   r   r   r   r   <module>   s     1