
    jJhuB                     x    d dl mZmZmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZmZmZ d dlmZmZmZ  G d d      Zy)	    )dbapp
app_logger)
ExperienceCampaignProviderNumberContentVersion)PreCalculatedCampaignService)datetime	timedeltadate)get_current_isttimereplace_charsget_current_utc_timec                       e Zd ZddZej
                  j                  ej                  j                  fdZ
d Zd Zd Zd Zd Zd Zd	 Zd
 Zy)CampaignCreationServicec                 
   g }|sMt         j                  j                  t         j                        D ]  }|j	                  |j                          |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d	                |j	                  t        t        j                  d
                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |j	                  t        t        j                  d                |S )NCALLBACK_2_CONTENT_IDCALLBACK_3_CONTENT_IDUNSUBSCRIBE_CALLBACK_CONTENT_IDASSAM_CALLBACK_2_CONTENT_IDASSAM_CALLBACK_3_CONTENT_IDBHOJHPURI_CALLBACK_2_CONTENT_IDBHOJHPURI_CALLBACK_3_CONTENT_IDBIHAR_CALLBACK_2_CONTENT_IDBIHAR_CALLBACK_3_CONTENT_IDMP_CALLBACK_2_CONTENT_IDMP_CALLBACK_3_CONTENT_IDBHOJPUR_CALLBACK_2_CONTENT_IDBHOJPUR_CALLBACK_3_CONTENT_IDNAWADA_CALLBACK_2_CONTENT_IDNAWADA_CALLBACK_3_CONTENT_ID)UNSUBSCRIBE_CALLBACK_CONTENT_ID_FOR_ASSAMJHARKHAND_CALLBACK_2_CONTENT_IDJHARKHAND_CALLBACK_3_CONTENT_IDUI_ONBOARDING_CALL_CONTENT_ID)r   querydistinct
content_idappendintr   config)self&exclude_provider_number_table_contentsspecial_content_idsprovider_numbers       M/var/www/dostadmin/dostadmin/services/scheduling/campaign_creation_service.pyget_special_content_idsz/CampaignCreationService.get_special_content_ids   sy    5#1#7#7#@#@))$ $**?+E+EF$
 	""3szz2I'J#KL""3szz2I'J#KL""3szz2S'T#UV""3szz2O'P#QR""3szz2O'P#QR""3szz2S'T#UV""3szz2S'T#UV""3szz2O'P#QR""3szz2O'P#QR""3szz2L'M#NO""3szz2L'M#NO""3szz2Q'R#ST""3szz2Q'R#ST""3szz2P'Q#RS""3szz2P'Q#RS""

FGH	
 	""3szz2S'T#UV""3szz2S'T#UV""3szz2Q'R#ST""    c                    |t         j                  j                  k(  r|ry|t        j                  j
                  k(  }t               }|j                         }t        t        j                  d         }	|t         j                  j                  k(  rt        t        j                  d         }	ns|t         j                  j                  k(  rt        t        j                  d         }	n9|t         j                  j                  k(  rt        t        j                  d         }	t        j                   |d      j                         }t        j"                  t%        j&                         |      t        j"                  t%        j&                         |      z
  }
|t         j                  j(                  k(  r|
j+                         dz  }|s|dz  }n|
j+                         }d	|cxk  xr |	k  S c S )
NFCAMPAIGN_RETRY_TIME_WINDOW#MISSED_CALL_RETRY_WINDOW_IN_SECONDS"NUDGE_RETRY_TIME_WINDOW_IN_SECONDS"BLAST_RETRY_TIME_WINDOW_IN_SECONDSz%H:%Mi     r   )r   Status	SCHEDULEDr   TypeSELFPACEDPCr   timer+   r   r,   ScheduledByCRON_MISSED_CALL
CRON_NUDGE	UI_MANUALr   strptimecombiner   todayCRON_REGULARtotal_seconds)r-   scheduled_timeprevious_call_statusis_previous_call_dialed_todayexperience_typescheduled_byis_self_pacedistnownow_hmretry_windowdifftime_differences               r1   	can_retryz!CampaignCreationService.can_retry0   sy    !HOO$=$==-':??+F+FF$&3::&BCD8//@@@szz*OPQLX11<<<szz*NOPLX11;;;szz*NOPL!**>7CHHJ

f58H8HJJL.9
 
 8//<<<"002T9O 1$"002O?1\1111r3   c                    d}|j                   rYdj                  g d|j                   d|j                   d|j                   dt        j                  |j                  d       d|j                   d|j                   d|j                   d|j                   d|j                   d|j                   d|j                   d|j                    dt        j                  t               d       dt        j                  t               d       d|j                   r|j                   nd d	|j"                  r|j"                  nd d
      }nHdj                  g d|j                   d|j                   d|j                   dt        j                  |j                  d       d|j                   d|j                   d|j                   d|j                   d|j                   d|j                   d|j                   dt        j                  t               d       dt        j                  t               d       d|j                   r|j                   nd d	|j"                  r|j"                  nd d
      }	 |j%                  |       |j'                         d   }||j                  |j                  t        j                  |j                  d      |j                  |j                  |j                  d}t)               j+                  |       |S # t,        $ r7}|j%                  d       t/        j0                  d| d|        Y d }~|S d }~ww xY w)N a  INSERT INTO campaign(name, content_id, experience_id, deploy_datetime, status, scheduled_by, timecategory_id, content_version_id, program_id, user_id, provider_number, programseq_id, created_on, updated_on, parent_campaign_deploy_time, parent_campaign_id) VALUES('', '%Y-%m-%d %H:%M:%S%Y-%m-%d %H:%M:%S.%f', null, ) RETURNING idzINSERT INTO campaign(name, content_id, experience_id, deploy_datetime, status, scheduled_by, timecategory_id, content_version_id, program_id, user_id, provider_number, created_on, updated_on, parent_campaign_deploy_time, parent_campaign_id) VALUES('r   campaign_idcampaign_nameexperience_iddeploy_datetimer)   content_version_idrL   ROLLBACKzNCampaign Creator Job: Unable to write add new campaign query to the database: . Error message: )programseq_idjoinnamer)   ra   r   strftimerb   statusrL   timecategory_idrc   
program_iduser_idr0   r   parent_campaign_deploy_timeparent_campaign_idexecutefetchoner
   (update_pre_calculated_user_campaign_data	Exceptionr   errorr-   cursornew_campaignnew_campaign_id
insert_sqlcampaign_datart   s          r1   add_new_campaignz(CampaignCreationService.add_new_campaign\   s=   %%   
 !%%&
' !++,- !../0 %%l&B&BDWXYZ !''() !--./ !0012 !3345 !++,- !(()* !0012  !../! 0!" %%&:&<>TUV#"W#$ %%&:&<>TUV%$ WZ%& @L?g?g<;;mst'& uw'( 7C6U6U<22[ab)*+ 6   
 !%%&
' !++,- !../0 %%l&B&BDWXYZ !''() !--./ !0012 !3345 !++,- !(()* !0012  %%&:&<>TUV! W!" %%&:&<>TUV#" WZ#$ @L?g?g<;;mst%$ uw%& 7C6U6U<22[ab'() 0	NN:&$oo/2O  /!-!2!2!-!;!;#+#4#4 002E$ +55&2&E&E , 9 9
M )*SS   	NN:&`ak`ll}  D  ~E  F  	s   2BM 	N,NNc                    d}d|j                    d|j                   d|j                   d|j                   d|j                   d|j
                   d|j                   d|j                   d|j                   dt        j                  t               d       dt        j                  t               d       d|j                  r|j                  nd d|j                  r|j                  nd d}	 |j                  |       |j                         d	   }||j                   |j                  t        j                  |j                  d
      |j                  |j                  |j
                  d}t!               j#                  |       |S # t$        $ r7}|j                  d       t'        j(                  d| d|        Y d }~|S d }~ww xY w)NrU   zINSERT INTO campaign(name, content_id, experience_id, deploy_datetime, status, scheduled_by, user_id, content_version_id, provider_number, created_on, updated_on, parent_campaign_id, parent_campaign_deploy_time) VALUES('rW   rY   rZ   r[   r\   r]   r   rX   r^   rd   zTCampaign Creator Job: Unable to write add new blast campaign query to the database: re   )rh   r)   ra   rb   rj   rL   rm   rc   r0   r   ri   r   ro   rn   rp   rq   r
   rr   rs   r   rt   ru   s          r1   add_new_blast_campaignz.CampaignCreationService.add_new_blast_campaign   s   
 !!" #''( )**+ ,,,- .##$ %))* +$$% &//0 1,,- .!!"6"8:PQR S!!"6"8:PQRRU2>2Q2Q|..W]^^`;G;c;c|77iop% 	,	NN:&$oo/2O.!-!2!2!-!;!;#+#4#4 002E$ +55&2&E&E , 9 9
M )*SS   	NN:&fgqfr  sD  EJ  DK  L  	s   0BF	 		G	,GG	c                 x   d}dj                  g d|j                   d|j                   d|j                   dt	        j
                  t               d       d|j                   d|j                   d|j                   d|j                   d|j                   d|j                   d|j                   dt	        j
                  t               d       dt	        j
                  t               d       d|j                  r|j                  nd d|j                   r|j                   nd d	      }	 |j#                  |       |j%                         d
   }||j                  |j                  t	        j
                  |j&                  d      |j                  |j                  |j                  d}t)               j+                  |       	 d| d| d| dt               j                  d       dt               j                  d       d}	|j#                  |	       |S # t,        $ r8}|j#                  d       t/        j0                  d| d|        |cY d }~S d }~ww xY w# t,        $ r7}|j#                  d       t/        j0                  d| d|        Y d }~|S d }~ww xY w)NrU   rV   zINSERT INTO campaign(name, content_id, experience_id, deploy_datetime, status, scheduled_by, user_id, user_number, timecategory_id, content_version_id, provider_number, created_on, updated_on, parent_campaign_deploy_time, parent_campaign_id) VALUES('rW   rY   rZ   r[   r\   r]   r   rX   r^   rd   zQCampaign Creator Job: Unable to write add nudge reattempt query to the database: re   z
                INSERT INTO campaign_nudge_mapping(nudge_id, campaign_id, group_version_id,
                created_on, updated_on)
                VALUES(z,
                'z',
                'z,')
                RETURNING id
            zSCampaign Creator Job: Unable to write nudge_campaign_mapping query to the database:)rg   rh   r)   ra   r   ri   r   rj   rL   rm   user_numberrk   rc   r0   r   rn   ro   rp   rq   rb   r
   rr   rs   r   rt   )
r-   rv   rw   nudge_idgroup_version_idrx   nudge_insert_sqlrz   rt   #nudge_campaign_mapping_insert_querys
             r1   add_nudge_reattempt_campaignz4CampaignCreationService.add_nudge_reattempt_campaign   s        !!"	#	
 ''(
) **+, !!"5"79OPQR ##$% ))*+ $$%& (()* ,,-. //01 ,,-. !!"6"8:PQRS  !!"6"8:PQR!  SV!" <H;c;c|77iop#" qs#$ 3?2Q2Q|..W]^%&' 	.	#NN+,$oo/2O.!-!2!2!-!;!;#+#4#4 002E$ +55&2&E&E , 9 9
M )*SS	7 !zO#4B7G6H I&(112HIJ K&(112HIJ K3/ NN>? 3  	#NN:&cdtcu  vG  HM  GN  O #"	#&  	NN:&efvew  xI  JO  IP  Q  	s8   
BH5 "AI9 5	I6>-I1+I61I69	J9,J44J9c                 .   t               j                         }|j                  t        dd      v s|j	                         dk  r|}n"d|j	                         z
  }|t        |      z   }t        j                  |j                  d      dz   |z   dz   d	      S )
zFor weeks 1-16, calls can be scheduled any day (weekdays + weekend).
        For weeks 17 onwards, calls should go out till Thursday.
        r9            )daysz%Y-%m-%d z:00rX   )	r   r   weekrangeweekdayr   r   rC   ri   )r-   	prev_datedeploy_time	next_pseqrE   deploy_datedays_for_next_mondays          r1   get_deploydate_for_selfpacedz4CampaignCreationService.get_deploydate_for_selfpaced%  s     $%**,>>U1b\)emmo.AK#$y'8'8':#: #i5I&JJK    ,s2[@5H
 	
r3   c                     |j                  d      }t        |      dk(  r|dz   }|S t        |d         dz   }t        |      |d<   dj	                  |      }|S )N_   _1rU   r9   )splitlenr+   strrg   )r-   old_namename_sequencenew_namenext_sequences        r1   get_campaign_namez)CampaignCreationService.get_campaign_name6  se     s+}"$H 	  b 12Q6M #M 2M"xx.Hr3   c                 h    |j                  d      dk7  rd| S |j                  d      dk7  rd| S y )NW0D0_rU   W0D1_W1DW0D2_)find)r-   previous_campaign_namerm   s      r1   !get_campaign_name_for_intro_callsz9CampaignCreationService.get_campaign_name_for_intro_callsA  sE    !&&w/257)$$!&&u-37)$$r3   c                 H    |j                   }|j                  }d| d| d| S )NWDr   )r   day)r-   program_sequencerm   week_number
day_numbers        r1   3get_campaign_name_from_program_sequence_and_user_idzKCampaignCreationService.get_campaign_name_from_program_sequence_and_user_idH  s3     '++%))
;-qAgY77r3   c                 &   |D ]m  }|d   j                   }t        j                  j                  ||      }t	        |      }t        |||j                  |d   t
        j                  j                  |d   j                  t
        j                  j                  |d   j                  |d   j                  |d   j                  
      }t        j                  j!                  |       t        j                  j#                          |d   j                  t
        j                  j                  ||j                  |d   t
        j                  j                  |d}	t%               j'                  |	       p t        j                  j)                          y )Nr   r9   )
rh   r)   rc   rb   rj   ra   rL   rm   r0   r   )ra   rL   r)   rc   rb   campaign_statusr`   )language_idr	   r'   .get_content_version_by_content_and_language_idr   r   idr:   r;   r?   rB   rm   r0   phoner   sessionaddflushr
   rr   commit)
r-   cp_namer)   exp_listexp_recr   content_versionr`   campaign_recrz   s
             r1   add_blast_campaignz*CampaignCreationService.add_blast_campaignP  sE   G!!*00K$$SS 
 *'2M#"%#2#5#5 '
00%ajmm%11;;
** '
 : :#AJ,,L JJNN<(JJ ") ( 4 4 > >(&5&8&8#*1:#+??#<#<!.M )*SSA  F 	

r3   N)F)__name__
__module____qualname__r2   r   r<   r=   r   r?   rF   rS   r{   r}   r   r   r   r   r   r    r3   r1   r   r      sY    #L #33))66*2XM^0dFP
"	8$r3   r   N)	dostadminr   r   r   dostadmin.db_modelr   r   r   r	   =dostadmin.services.scheduling.pre_calculated_campaign_servicer
   r   r   r   utils.helpers.helpersr   r   r   r   r   r3   r1   <module>r      s4    ) ) S S / . f fr3   