+
    Ϩi,                    .   R t ^ RIHt ^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t
Ht ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ]P(                  ! R
4      tR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R lt]
! . R(O4      ]! ].4      R R l4       4       tR R  lt]
! RR!.4      ]! ].4      R" 4       4       t ]
! RR#.4      ]! ].4      R$ R% l4       4       t!]
! R.4      ]! ].4      R& 4       4       t"]
! R.4      ]! ].4      R' 4       4       t#R# ))z
REST endpoints for legacy `businesses.business_time` and `businesses.retry_attempt`,
used by campaign callbacks UI (business hours + retry intervals).
)annotationsN)Any)get_object_or_404)api_viewpermission_classes)IsAuthenticated)Response)Business)_fetch_legacy_userz^retry_attempt_(\d+)$c                   V ^8  d   QhRR/# )   returnstr )formats   "CE:\live-kit-agent\livekit_voicebot\backend\config\business_views.py__annotate__r      s     U UC U    c                    V P                   p\        VR R4      ;'       g    \        VRR4      ;'       g    RP                  4       # )emailNusername )usergetattrstrip)requestus   & r   _identifierr      s<    AAw%KKJ)EKKRRTTr   c                   V ^8  d   QhRR/# )r   r   z
int | Noner   )r   s   "r   r   r      s     	 	J 	r   c                    \        V 4      pV'       d   \        V4      MR pV'       g   R # VP                  R4      p Ve   \        V4      # R #   \         d     R # i ; i)Nbusiness_id)r   r
   getint	Exception)r   identlegacybids   &   r   _caller_business_idr'      sY     E*/&TF
**]
#C?s3x44 s   A A AAc                    V ^8  d   QhRRRR/# )r   r    r"   r   ztuple[bool, Response | None]r   )r   s   "r   r   r   (   s      # :V r   c                |    \        V 4      pVf   R\        RRRR/RR7      3# W!8w  d   R\        RRRR/RR7      3# R# )	NFsuccessmessage$Business not found for current user.  statusz You cannot access this business.)TN)r'   r   )r   r    
caller_bids   && r   _ensure_business_accessr1   (   sj    $W-Jhy*PQ
 
 	
  hy*LM
 
 	
 r   c                    V ^8  d   QhRRRR/# )r   kr   r   r"   r   )r   s   "r   r   r   7   s     ' 's 's 'r   c                t    \         P                  V 4      pV'       d   \        VP                  ^4      4      # ^ # )   )RETRY_KEY_REmatchr"   group)r3   ms   & r   _retry_sort_keyr:   7   s+    1A3qwwqz?&Q&r   c                    V ^8  d   QhRRRR/# )r   rawr   r   ztuple[dict[str, int], bool]r   )r   s   "r   r   r   <   s     " "S "%@ "r   c                   RpV e   V R8X  d   / V3# \        V \        4      '       d   R\        V 4      /V3# \        V \        4      '       d   V P                  4       M\        V 4      P                  4       pV'       g   / V3#  \        P
                  ! V4      p\        T\        4      '       g   / T3# RT9   d   \        TR,          4      MRp/ pTP                  4        F9  w  rVTR8X  d   K  \        P                  T4      '       g   K+   \        T4      YE&   K;  	  YA3#   \        P                   d/    TP                  4       '       d   R\        T4      /T3u # / T3u # i ; i  \        \        3 d     K  i ; i)zJParse `businesses.retry_attempt` into ({retry_attempt_n: hours}, enabled).Tr   retry_attempt_1enabled)
isinstancer"   r   r   jsonloadsJSONDecodeErrorisdigitdictboolitemsr6   r7   	TypeError
ValueError)r<   r?   sobjhoursr3   vs   &      r   _parse_retry_columnrN   <   sT   G
{cRi7{#s!3s8,g55!#s++		S1AA7{jjm c4  7{&/3&6d3y>"DGE			>a  q6  >%  99;;%s1v.777{  z* s0   D  E& *E#E#E#"E#&E;:E;c               $    V ^8  d   QhRRRRRR/# )r   rL   dict[str, int]r?   rF   r   r   r   )r   s   "r   r   r   a   s!       $ 3 r   c                    R V/p\        V P                  4       \        R7       F  pW,          W#&   K  	  \        P                  ! V4      # )r?   key)sortedkeysr:   rA   dumps)rL   r?   rK   r3   s   &&  r   _persist_retry_columnrW   a   s:    $g.CEJJLo6 7::c?r   c                    V ^8  d   QhRRRR/# )r   rL   rP   r   r   )r   s   "r   r   r   h   s     Q Q Q> Qr   c                    \        V P                  4       R  R7      p\        V4       UUUu/ uF  w  pw  r4RV^,            2VbK  	  uppp# u upppi )c                &    \        V ^ ,          4      # )    )r:   )kvs   &r   <lambda>&_renumber_retry_keys.<locals>.<lambda>i   s    ?2a53Ir   rR   retry_attempt_)rT   rG   	enumerate)rL   orderedi_vals   &    r   _renumber_retry_keysre   h   sJ    U[[](IJG=Fw=OP=Oka!nQUG$c)=OPPPs   Ac                    V ^8  d   QhRRRR/# )r   br	   r   zdict[str, Any]r   )r   s   "r   r   r   m   s     ! !( !~ !r   c                8   V P                   ;'       g    R pTpV'       d    \        P                  ! V4      p\	        V P
                  4      w  r4RV/VCp/ RV P                  bRV P                  bRV P                  bRV P                  bRV P                  bRV P                  bRV P                  bR	V P                  bR
V P                  bRV P                  bRV P                   bRV P"                  bRV P$                  bRVbRVbRV P&                  bRV P(                  bRV P*                  '       d   V P*                  P-                  4       MRRV P.                  '       d   V P.                  P-                  4       /C# R/C#   \        P                   d     EL`i ; i)r   r?   r    business_name	avail_min
remain_mincontact_namegst_nocontact_numbercontact_emailr   pan_nobusiness_addressr/   plansbusiness_timeretry_attempt	mcube_bidmcube_agent_id
created_atN
updated_at)rs   rA   rB   rC   rN   rt   r    ri   rj   rk   rl   rm   rn   ro   r   rp   rq   r/   rr   ru   rv   rw   	isoformatrx   )rg   bt_rawbt_outra_hours
ra_enabledra_outs   &     r   _business_to_response_dictr   m   s   __""FF	ZZ'F /q?H'@x@Fq}} 	Q[[ 	all	
 	 	!(( 	!** 	 	AJJ 	!(( 	A.. 	!(( 	 	 	  	Q[[!" 	!**#$ 	!,,,all,,.D!,,,all,,.' & EI'  ## 		s   F   FFGETPUTc                   V ^8  d   QhRR/# )r   r    r"   r   )r   s   "r   r   r      s     H H Hr   c                H   \        W4      w  r#V'       g   V# \        \        VR 7      pV P                  R8X  d   \	        RRR\        V4      /4      # V P                  p\        V\        4      '       g   \	        RRRR/RR	7      # 0 RmpV EFj  pWv9  d   K  WW,          pVR8X  dY   Vf
   RVn	        K(  \        V\        \        34      '       d   \        P                  ! V4      Vn	        Ka  \        V4      Vn	        Ks  VR8X  d   Vf
   RVn        K  \        V\        4      '       dO   \        \        P                  ! V4      4      w  rRV9   d   \!        VR,          4      MT
p\#        W4      Vn        K  \        T;'       g    R4      Vn        EK  VR
8X  d<   Ve5   \        V4      P%                  4       R8w  d   \        V4      Vn        EKD  EKG  EKJ  \)        WG4      '       g   EK^  \+        WGV4       EKm  	  VP-                  4        \	        RRR\        V4      RR/4      # )pkr   r*   TdataFr+   zInvalid JSON body.  r.   passwordrs   rt   r   z{}r?   zBusiness updated successfully.>   rr   rm   rp   r/   r   r   rj   ru   
auth_tokenrk   rl   ri   rs   ro   rt   rn   rv   rq   )r1   r   r	   methodr   r   r   r@   rE   rs   listrA   rV   r   rt   rN   rF   rW   r   r   hasattrsetattrsave)r   r    okerrrg   r   allowedrS   rd   rL   _enenabled_guesss   &&          r   business_detail_updater      s    &g;GB
({3A~~D&2LQ2OPQQ<<DdD!!E96JKTWXXG* i/!{"$C$.."&**S/"%c(O#{"&C&&0CA
8AS8HS^ 4c"7"M"%ckkT"2J3s8>>#3r#9 X
 $: Q__AC 9 < FFHt.q17	
 r   c                   V ^8  d   QhRR/# )r   r   z'tuple[Business | None, Response | None]r   )r   s   "r   r   r      s      )P r   c                    \        V 4      pVf   R \        RRRR/RR7      3# \        P                  P	                  VR7      P                  4       pV'       g   R \        RRRR/R	R7      3# VR 3# )
Nr*   Fr+   r,   r-   r.   r   zBusiness record not found.  )r'   r   r	   objectsfilterfirst)r   r&   rg   s   &  r   _load_business_for_retryr      s    
g
&C
{Xy*PQ
 
 	
 	3'--/AXy*FG
 
 	
 d7Nr   POSTc                   \        V 4      w  rV'       d   V# V P                  R 8X  da   \        VP                  4      w  r4\	        VP                  4       \        R7       Uu. uF  pRVRW5,          /NK  	  pp\        RRRVRV/4      #  \        V P                  P                  R4      4      pT^ 8  g   T^8  d   \        RRR	R/RR7      # \        TP                  4      w  r^ p	T FF  p\        P                  T4      p
T
'       g   K"  \        T	\        T
P!                  ^4      4      4      p	KH  	  RT	^,            2pYxT&   \#        T4      p\%        Y4      Tn        TP'                  RR.R7       \        TP                  4      w  rT'       d    \        TP                  4       \        R7      MTp\        RRR	RRRTRTP                  Y4      //4      # u upi   \        \        3 d    \        RRR	R
/RR7      u # i ; i)r   rR   idrL   r*   Tr   r?   Fr+   hours must be an integer.r   r.    hours must be between 0 and 168.r_   rt   rx   update_fieldszRetry attempt created.)r   r   rN   rt   rT   rU   r:   r   r"   r   r!   rH   rI   r6   r7   maxr8   re   rW   r   )r   rg   r   rL   r?   r3   r   	hours_intcurmax_nr9   new_keyhours_afterrc   last_ks   &              r   retry_attempts_collectionr      s    &g.FA

~~,Q__=6<UZZ\6_`6_q'58,6_`D&$	7KLL`((12	 1}	Cy*LM
 	

 'q7LCEq!1s1771:/E  uqyk*GL
s
#C+C9AOFF/<8F9(9NK=HS!!#9gFt/T67KOOF,NO	
 9 a
 z" `E96QR[^__`s   !G
$G "G?>G?DELETEc                   V ^8  d   QhRR/# )r   
attempt_idr   r   )r   s   "r   r   r     s     ( (c (r   c                   \         P                  V4      '       g   \        R RRR/RR7      # \        V 4      w  r#V'       d   V# \	        VP
                  4      w  rEW9  d   \        R RRR/RR7      # V P                  R8X  dA   WA \        V4      p\        WE4      Vn        VP                  R	R
.R7       \        R RRR/4      #  \        V P                  P                  R4      4      pT^ 8  g   T^8  d   \        R RRR/RR7      # YdT&   \        T4      p\        YE4      Tn        TP                  R	R
.R7       \        R RRRRRTRT//4      #   \        \        3 d    \        R RRR/RR7      u # i ; i)r*   Fr+   zInvalid retry attempt id.r   r.   zRetry attempt not found.r   r   rt   rx   r   TzRetry attempt deleted.rL   r   r   zRetry attempt updated.r   r   )r6   r7   r   r   rN   rt   r   re   rW   r   r"   r   r!   rH   rI   )r   r   rg   r   rL   r?   	new_hourss   &&     r   retry_attempt_detailr     s    j))E96QR[^__%g.FA

(9NEE96PQZ]^^~~!$U+/?	o|<=D)5MNOO`((12	 1}	Cy*LM
 	

 "* 'E+E;AOFF/<8F9t/T:w	:	
  z" `E96QR[^__`s   $E "E43E4c                $   \        V 4      w  rV'       d   V# \        V P                  ;'       g    / P                  R 4      4      p\	        VP
                  4      w  rE\        WC4      Vn        VP                  RR.R7       \        RRR VRR/4      # )r?   rt   rx   r   r*   Tr+   zRetry settings updated.)	r   rF   r   r!   rN   rt   rW   r   r   )r   rg   r   r?   rL   rc   s   &     r   retry_attempts_toggler   I  s     &g.FA

GLL&&B++I67G"1??3HE+E;AOFF/<8F9	D)Wi9RS r   c                |    \        V 4      w  rV'       d   V# \        VP                  4      w  r4\        R RRV/4      # )r*   Tr?   )r   rN   rt   r   )r   rg   r   rc   r?   s   &    r   retry_attempts_statusr   Y  s<     &g.FA

$Q__5JAYi9::r   )r   r   PATCH)$__doc__
__future__r   rA   retypingr   django.shortcutsr   rest_framework.decoratorsr   r   rest_framework.permissionsr   rest_framework.responser   apps.users.modelsr	   config.auth_viewsr
   compiler6   r   r'   r1   r:   rN   rW   re   r   r   r   r   r   r   r   r   r   r   <module>r      sJ  
 #  	  . B 6 , & 0zz23U
	'
"JQ
!H 

!"_%&H ' #HV  
5&/_%&) ' )X 
5(
_%&( ' (V 
5'_%& '  
5'_%&; ' ;r   