
    9i                        d dl Z d dlmZmZ 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 d dlmZ d d	lmZmZ d d
lmZmZmZ  e j.                  e      Z edddd      d        Z edddd      dd       Zd Zd Zy)    N)shared_taskgroup)SoftTimeLimitExceeded)log_step)transaction)Trim)Company)Call)CRON_JOB_STATUSBotType)RecordingServiceget_twilio_clientget_speech_to_textT   <   z1apps.calls.tasks.process_all_booking_intents_task)bindmax_retriesdefault_retry_delaynamec                    	 t        t        j                  j                  d      j	                  t        d            j                  d      j                  dd      j                               }|sy	t        j                  j                  t        j                  j                  d
      j                  t        d         j                  dd      j                         }|j                  d      D cg c]!  }t         j#                  |j$                        # }}t'        |      j)                          y	c c}w # t*        $ r/}t,        j/                  d|        | j1                  |      d	}~ww xY w)zF
    Process booking intent for all companies having BDC numbers.
    T)bdc_number__isnull
bdc_number)	clean_bdcz^\+?\d+$)clean_bdc__regexr   )flatNF)bot_typecompany__isnull	COMPLETED)booking_intent_statusidr   2   )
chunk_sizezFailed to enqueue calls: exc)listr	   objectsexcludeannotater   filtervalues_listdistinctr
   r   SERVICE_BOTvaluer   onlyiteratorprocess_booking_intentsr    r   apply_async	Exceptionlogger	exceptionretry)selfbdc_numberscalls_to_processcall
call_tasksr$   s         V/var/www/html/dp2/backend_v2.1/server/apps/calls/tasks/process_booking_intent_tasks.py process_all_booking_intents_taskr=      sV   $"OOD1D$675[t4
  LL ,,22 %    W&5k&B   T$/0XZ 	  ;K:S:S ;T ;;$"$$TWW- ; 	  	j%%'	  "4SE:;jjSj!!"s1   A3D? 6BD? 8&D:D? :D? ?	E7*E22E7i,  )r   r   r   soft_time_limitc                 Z   d}	 t        j                         5  t        j                  j	                         j                  |      j                         }ddd       |st        j                  d| d       y| j                  j                  }|j                  }|#t        j                  d|j                          yt        d   |_        |j                  dg       t!        t#                     j%                  |      }|sht'        d	|       |d
k\  r;t        d   |_        |j                  dg       t        j)                  d| d       y| j+                  dt-        d            t/        ||      \  }}}	}
}|r|j1                         sht'        d|       |d
k\  r;t        d   |_        |j                  dg       t        j)                  d| d       y| j+                  dt-        d            ||_        ||_        |	|_        t9        |
      |_        t        d   |_        |j                          y# 1 sw Y   xY w# t<        $ rA t        j)                  d| d       |r#t        d   |_        |j                  dg       Y yY yt,        $ r}| j                  j                  }|rD|d
k\  r?t        d   |_        |j                  dg       t        j)                  d| d       Y d}~yt        j?                  d| d|        | j+                  |      d}~ww xY w)z3
    Process booking intent for a single call.
    Nr    zCall z not found.zNo Twilio call ID for call 
PROCESSINGr   )update_fieldsNO_RECORDING_FOUND   FAILEDu'   : No recording after 3 tries → FAILEDr   zRecording missing.)	countdownr$   )use_speakerTRANSCRIPT_EMPTYu+   : Transcript empty after 3 tries → FAILEDzTranscript empty.r   z"Soft time limit exceeded for call z. Marking as failed.u%   : Failed after 3 tries → FINAL FAIL!Unexpected error processing call : r#   ) r   atomicr
   r&   select_for_updater)   firstr4   inforequestretriestwilio_call_sidr    r   r   saver   r   get_call_recording_public_urlr   warningr6   r3   r   stripbooking_intenttwilio_recording_textbooking_datetimeget_transcript_complete_texttranscript_completer   r5   )r7   call_idrG   r:   retry_counttwilio_call_idrecording_url
transcriptrV   rX   rZ   _r$   s                r<   r0   r0   C   s    DI"!<<113::g:FLLND "KK%y45ll**--!KK5dggY?@%4\%B"		!8 9	:(

'
'
7 	 )>:a-<X-F*		)@(A	Bwi/VWX**ry9M/N*OO n+F	
 !1!1!3'8a-<X-F*		)@(A	Bwi/Z[\**ry9L/M*NN,%/" 0#?@S#T %4[%A"		o "!r ! ?;G9DXYZ)8)BD&II%<$=I>   
"ll**K1$)8)BD&II%<$=I>NNU7)+PQR<WIRuMNjjSj!!
"sX   I =H>#I 9AI  BI BI AI >II AL*L*AL%8-L%%L*c                 
   d}| r~| D ]y  }|j                   dk(  rd}n%|j                   dk(  rd}n|j                   dk(  rd}n:|| |j                   dz  }t        d	|j                          t        d
|j                         { |S )N AzAgent: BzUser: Cz	Advisor: 
zu.speaker--:z	u.text--:)speakertextprint)rZ   final_label_textur   s       r<   rY   rY      s    $AyyC c!c!"4& 33.!)),+qvv& %     c                    t         j                  j                  |       j                         }	 t	        t         j                  j                  |       j                         j
                  d      \  }}}}}t        |      }||_        |j                          t        d|j                         t        d|       t        d|       t        d|j                         t        d|       t        d|       t        d	|       t        d
       t        d|        y # t        $ r%}t        j                  d|  d|        Y d }~y d }~ww xY w)Nr@   Tzretell transcript :zassembly transcript --:zfinal_label_text:z transcript_complete from call--:zbooking_intent final--:zbooking_datetime final--:zresults final--:z---------------------------z*Process Complete Successfully for call id:rI   rJ   )r
   r&   r)   rM   r   rQ   rY   rZ   rR   ri   r_   r3   r4   r5   )	r[   r:   r_   rV   rX   rZ   resultsrj   r$   s	            r<   test_process_booking_intentro      s)   <<'*002DO LL7+UW__
	
 88KL#3 		#T__5'4!#340$2J2JK'8)+;< '*+,:GD O<WIRuMNNOs   C)D 	E#EE)F)loggingceleryr   r   celery.exceptionsr   utils.loggerr   	django.dbr   django.db.models.functionsr   apps.companies.modelsr	   apps.calls.modelsr
   apps.calls.constantsr   r   apps.calls.servicesr   r   r   	getLogger__name__r4   r=   r0   rY   ro    rl   r<   <module>r}      s     % 3 ! ! + ) " 9  
		8	$ 		<	("("T 		N"N"`$ Orl   