+
    3i,                       ^ RI Ht ^ RIHt ^ RIH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Ht ^ R
IHtHt R R ltR R ltR R ltR R ltR R lt]! RR.4      ]! ].4      R 4       4       t]! . RO4      ]! ].4      R R l4       4       t]! R.4      ]! ].4      R 4       4       t]! R.4      ]! ].4      R 4       4       t]! R.4      ]! ].4      R 4       4       t ]! R.4      ]! ].4      R 4       4       t!R# )     )annotations)	timedelta)Any)Q)timezone)api_viewpermission_classes)IsAuthenticated)Response)BusinessUser)_admin_role_legacy_profile_for_userc                   V ^8  d   QhRR/# )   returnz-tuple[dict[str, Any] | None, Response | None] )formats   "JE:/live-kit-agent/livekit_voicebot/backend/config\master_business_views.py__annotate__r      s     a a&S a    c                   \        V RR4      pVe)   \        VRR4      '       g   \        VRR4      '       d   R# \        V4      pV'       d%   \        VP                  R4      4      '       d   VR3# V\	        RRRR	/R
R7      3# )a  
Master endpoints must be accessible to users authenticated via `master_login`.

In local/dev and some deployments, a master admin user may not have a legacy
(business-scoped) profile row; requiring one incorrectly blocks the master UI
with 403 "No business profile for user."
userNis_staffFis_superuserrolesuccessmessagezAdmin access required.i  status)NN)getattrr   r   getr   )requestulegacys   &  r   _require_master_adminr&      s     	&A}'!Z7771nV[;\;\%a(F+fjj011t| 8Yy:RS\_```r   c               $    V ^8  d   QhRRRRRR/# )r   valr   defaultintr   r   )r   s   "r   r   r   $   s!      C # # r   c                @     \        V 4      #   \         d    Tu # i ; i)N)r*   	Exception)r(   r)   s   &&r   
_int_paramr-   $   s$    3x s   
 c                    V ^8  d   QhRRRR/# )r   br   r   dict[str, Any]r   )r   s   "r   r   r   +   s     ! ! !^ !r   c                   / R V P                   bRV P                  '       d   V P                  P                  4       MRbRV P                  '       d   V P                  P                  4       MR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RbRV P                  bRV P                  bRV P                  bRV P                  bRV P                   bRV P"                  RV P$                  '       d   V P$                  P                  4       MRRV P&                  RV P(                  RV P*                  RV P,                  RV P.                  RV P0                  RV P2                  RV P4                  RV P6                  RR/C# )business_id
created_atN
updated_atbusiness_name	avail_min
remain_mincontact_namegst_nocontact_numbercontact_emailusernamepassword pan_nobusiness_addressr    plansretry_attemptbusiness_time
last_loginremember_token	mcube_bidmcube_agent_id
auth_tokenstt_providertts_provider	stt_modeltts_model_idch_languagedomain)r2   r3   	isoformatr4   r5   r6   r7   r8   r9   r:   r;   r<   r?   r@   r    rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r/   s   &r   _business_to_master_dictrQ   +   s   q}}!,,,all,,.D 	!,,,all,,.D 		
 	Q[[ 	all 	 	!(( 	!** 	 	AJJ 	B 	!(( 	A.. 	!((  	!" 	#$ 	!,,,all,,.D!**Q[[!**allQ[[q}}$= r   c               (    V ^8  d   QhRRRRRRRR/# )	r   r/   r   payloadr0   allow_password_updateboolr   Noner   )r   s   "r   r   r   O   s0     C! C!x C!. C!\` C!ei C!r   c                  0 R
mpT;'       g    / P                  4        EF1  w  rEWC9  d   K  VR9   d   Vf   RM
\        V4      V n        K-  VR8X  d   V'       g   K>  Vf   KD  \        V4      P                  4       pV'       g   Kg  ^ RIpVP                  VP                  R4      VP                  ^
R7      4      pVP                  R4      P                  RR	^4      V n
        K  VR8X  d#   VR9   d	   RV n        M\        V^ 4      V n        K  VR8X  d   VR9   d   K  \        V4      V n        EK  \        W4      '       g   EK%  \        WV4       EK4  	  R# )r5   r6   r=   rA   Nr>   zutf-8)roundsz$2b$z$2y$>   rA   r9   r?   r    r=   r<   r6   rF   rK   rH   r7   rM   r8   rI   rL   rJ   r5   rC   r;   rB   r:   rG   camp_auth_tokenr@   >   rY   )r>   N)itemsstrrH   stripbcrypthashpwencodegensaltdecodereplacer=   r6   r-   rA   hasattrsetattr)	r/   rS   rT   allowedkeyr(   plain_bcrypthasheds	   &&$      r   _apply_business_payloadrj   O   s   G8 ]]))+%%!$2#c(AL*({HNN$E$^^ELL$97??RT?;UVFw/77JAJ+j "(a0'>j #hAG1??AC K ,r   c                    V ^8  d   QhRRRR/# )r   r/   r   r   rV   r   )r   s   "r   r   r      s      8  r   c           
     n    \         P                  P                  V P                  ;'       g$    V P                  ;'       g    RV P
                   2V P                  ;'       g    V P                  V P                  ;'       g    RV P                  ;'       g    RRRV R7       R#   \         d     R# i ; i)z8Insert an admin user row for the newly created business.admin_r>   adminactive)r<   nameemailr=   r   r    businessN)
r   objectscreater<   r;   r2   r8   r5   r=   r,   rP   s   &r   _create_business_admin_userru      s    ZZNN1??NNq}}o6N221??//''RZZ%%2 	 	
  s.   +B% B% !B% $B% B% B% %B43B4GETPOSTc                   \        V 4      w  rV'       d   V# V P                  R 8X  Edn   V P                  pVP                  R4      ;'       g    RP	                  4       pVP                  R4      ;'       g    RP	                  4       pVP                  R4      ;'       g    RP	                  4       pVP                  R4      ;'       g    RP	                  4       P                  4       p\        ^\        ^\        VP                  R4      ;'       g    ^
^
4      4      4      p\        ^\        VP                  R	4      ;'       g    ^^4      4      p	\        P                  P                  4       p
V'       d`   V
P                  \        VR
7      \        VR7      ,          \        VR7      ,          \        VR7      ,          \        VR7      ,          4      p
V'       d   V
P                  VR7      p
0 RmpWk9  d   RpVR8X  d   RMRpV
P                  V V 24      p
V
P                  4       pV	^,
          V,          pW,           p\!        WV 4      pV Uu. uF  p\#        V4      NK  	  pp\%        RRRVRR	V	RVRVRW,           ^,
          V,          //4      # \'        V P(                  \*        4      '       d   V P(                  M/ p\-        VP                  R4      ;'       g    R4      P	                  4       pV'       g   \%        RRRR/RR7      # \        VR7      p\/        VVRR7       VP1                  4        \3        V4       \%        RRR\#        V4      /^R7      # u upi )rv   searchr>   r    sort_byr3   
sort_orderdescper_pagepage)business_name__icontains)contact_name__icontains)contact_email__icontains)contact_number__icontains)username__icontainsr   r5   -r   Tdata
paginationtotaltotal_pagesFr   zbusiness_name is required.i  )r5   rT   >   r    r3   r4   r2   r5   )r&   methodquery_paramsr"   r\   lowermaxminr-   r   rs   allfilterr   order_bycountlistrQ   r   
isinstancer   dictr[   rj   saveru   )r#   _errqry   r    rz   r{   r}   r~   qssortableorder_prefixr   startendrowsr/   r   rS   rp   s   &                    r   master_businesses_collectionr      s    #7+FA

~~  %%/''R..0%%/''R..055#33|::<eeL)33V::<BBD
q#c:aeeJ.?.E.E2r#JKL1jv!3!3!Q78!!#62F34V45 f56 /	0B &)BY""G(F2s[[L>'34
X%BSM"59:T(+T:4DU!E$4q$8X#E		
 	
 )t<<gll"Gw{{?+11r288:DE96RS\_``t$AAwdCFFH"Yf.Fq.IJSVWW1 ;s   Mc                   V ^8  d   QhRR/# )r   r2   r*   r   )r   s   "r   r   r      s     l l lr   c                L   \        V 4      w  r#V'       d   V# \        P                  P                  \	        V4      R 7      P                  4       pV'       g   \        RRRR/RR7      # V P                  R8X  d   \        RRR	\        V4      /4      # V P                  R
8X  d    VP                  4        \        RRRR/4      # \        V P                  \        4      '       d   V P                  M/ p\        WERR7       VP                  4        \        RRR	\        V4      RR/4      # )pkr   Fr   zBusiness not found.i  r   rv   Tr   DELETEzBusiness deleted.r   zBusiness updated.)r&   r   rs   r   r*   firstr   r   rQ   deleter   r   r   rj   r   )r#   r2   r   r   r/   rS   s   &&    r   master_business_detailr      s     #7+FA

3{#34::<AE96KLUXYY~~D&2J12MNOO~~!	
D)5HIJJ(t<<gll"GAdCFFHYf.Fq.I9Vijkkr   c                ^   \        V 4      w  rV'       d   V# \        P                  ! 4       pV\        ^R7      ,
          p\        P
                  P                  4       p\        P
                  P                  RR7      P                  4       p\        P
                  P                  RR7      P                  4       p\        P
                  P                  RR7      P                  4       p\        P
                  P                  VR7      P                  4       p	\        RRR	R
VRVRVRVRV	//4      # )   )daysro   r   pendinginactive)created_at__gter   Tr   total_businessesactive_businessespending_businessesinactive_businessesrecent_businesses)	r&   r   nowr   r   rs   r   r   r   )
r#   r   r   r   recent_sincer   ro   r   r   recents
   &         r   master_businesses_statisticsr      s    #7+FA


,,.C**L""$E$$H$5;;=F%%Y%7==?G&&j&9??AH$$\$BHHJFt"E#V$g%x#V		
 r   c                   \        V 4      w  rV'       d   V# V P                  P                  R 4      ;'       g    RP                  4       pV P                  P                  R4      p\        P
                  P                  4       pVR9  d    VP                  \        V4      R7      p\        V4      ;'       d!    VP                  VR7      P                  4       p\        RRRV'       * /4      #   \         d     LTi ; i)	r<   r>   
exclude_idr   )r<   r   T	availableNr>   r&   r   r"   r\   r   rs   r   excluder*   r,   rU   r   existsr   )r#   r   r   r<   r   r   r   s   &      r   master_business_check_usernamer     s     #7+FA

$$((4::AACH%%)),7J						B#	s:/B (^EE		8	 < C C EFYkJ@AA  		   C. .C<;C<c                   \        V 4      w  rV'       d   V# V P                  P                  R 4      ;'       g    RP                  4       pV P                  P                  R4      p\        P
                  P                  4       pVR9  d    VP                  \        V4      R7      p\        V4      ;'       d!    VP                  VR7      P                  4       p\        RRRV'       * /4      #   \         d     LTi ; i)	rq   r>   r   r   )r;   r   Tr   r   r   )r#   r   r   rq   r   r   r   s   &      r   master_business_check_emailr   /  s     #7+FA

!!%%g.44";;=E%%)),7J						B#	s:/B %[DDRYYUY;BBDFYkJ@AA  		r   c                N    \        V 4      w  rV'       d   V# \        R RRR/4      # )r   Tr   )r&   r   )r#   r   r   s   &  r   master_business_check_domainr   B  s.     #7+FA

 Yk4899r   N)rv   PUTPATCHr   )"
__future__r   datetimer   typingr   django.db.modelsr   django.utilsr   rest_framework.decoratorsr   r	   rest_framework.permissionsr
   rest_framework.responser   apps.users.modelsr   r   config.reporting_utilsr   r   r&   r-   rQ   rj   ru   r   r   r   r   r   r   r   r   r   <module>r      sL   "    ! B 6 , , Ha(!HC!L  
5&/_%&<X ' <X~ 

+,_%&l ' -l, 
5'_%& ' 8 
5'_%&B ' B" 
5'_%&B ' B" 
5'_%&: ' :r   