
    gr                       d dl mZ d dlmZ d dlmZ d dl d dlZd dlmZm	Z	 d dl
mZ d dlmZ d dlZd dl d d	lmZ d dl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mZ d dlm Z  d dl!m"Z" d dl#Z#d dlZd dl$Z$d dl%Z%d dl&m'Z' d dl( d dl)m*Z* d dl+m,Z, d dl+m-Z- d dl.Z.ddl/ d dl0m1Z1 d dl2Z2d dl3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: ddl;m<Z< ejz                  Z>ej~                  Z@ej                  ZBej                  ZDej                  ZFej                  ZH e8e>e@      ZId ZJd ZK G d de      ZL G d d e      ZM G d! d"e      ZN G d# d$e      ZO G d% d&e      ZP G d' d(e      ZQ G d) d*e      ZR G d+ d,e      ZS G d- d.e      ZT G d/ d0e      ZU G d1 d2e      ZV G d3 d4e      ZW G d5 d6e      ZX G d7 d8e      ZY G d9 d:e      ZZ G d; d<e      Z[ G d= d>e      Z\ G d? d@e      Z] G dA dBe      Z^ G dC dDe      Z_ G dE dFe      Z` G dG dHe      Za G dI dJe      Zb G dK dLe      Zc G dM dNe      Zd G dO dPe      Ze G dQ dRe      Zf G dS dTe      Zg G dU dVe      Zh G dW dXe      Zi G dY dZe      Zj G d[ d\e      Zk G d] d^e      Zl G d_ d`e      Zm G da dbe      Zn G dc dde      Zo G de dfe      Zp G dg dhe      Zq G di dje      Zr G dk dle      Zs G dm dne      Zt G do dpe      Zu G dq dre      Zvy)s    )APIView)Responsestatus)*N)datetimedate)settings)django_pbkdf2_sha256)get_authorization_header)RefreshToken)TokenBackend)EmailMultiAlternatives)
exceptions)renderredirectHttpResponse)mail)render_to_string)messages)	timesince)Max)Q   )FCMNotification)	SyncGrant	ChatGrant
VideoGrant)Client)AccessToken)formsc                     t         j                  j                         j                         } | rV| j                  sy| j                  }|dd  }t        |      dz   }t        |      }|j                  d      }dt        |      z   S y)NBOOK0001   r   BOOK)UserBookingsobjectsalllast
booking_idintstrzfilllastObjtheIds     5/var/www/html/Manimaran/manimaran/user_panel/views.pygernateBookingIdr2   3   sy    



"
"
$
)
)
+			
%ab	%E
1%E
%A%	E
		    c                     t         j                  j                         j                         } | rV| j                  sy| j                  }|dd  }t        |      dz   }t        |      }|j                  d      }dt        |      z   S y)NTRANS000001   r   TRANS)UserTranscationr'   r(   r)   transcation_idr+   r,   r-   r.   s     r1   generateTranscationsIdr:   C   sy    

!
!
%
%
'
,
,
.			
%ab	%E
1%E
%A%	U		r3   c                       e Zd Zd Zy)getPrivacyPolicyc                 J   	 | j                   j                  j                  d      }|dk(  r/t        j                  j                  d      j                         }n.t        j                  j                  d      j                         }|si }n$|j                  |j                  |j                  d}t        t        j                  d|d      S # t        $ rJ}t        |       t        t        j                  t!        |      dt        j                  	      cY d }~S d }~ww xY w)
Npage_type_paramPrivacy	page_typeTermsidtitlecontentSuccessstatus_codestatus_messagedatarI   rJ   r   )requestquery_paramsgetContentPagesr'   filterfirstrD   rE   rF   r   r   HTTP_200_OK	ExceptionprintHTTP_500_INTERNAL_SERVER_ERRORr,   )selfrM   r>   data_objall_dataes         r1   rO   zgetPrivacyPolicy.getS   s    Oll//334EF?"##**Y*?EEGH##**W*=CCEH
H ++^^H
 &"4"4iW_`
aa	 O8
&"G"GY\]^Y_`hn  iN  iN  O  OOs   CC 	D"?DD"D"N__name__
__module____qualname__rO    r3   r1   r<   r<   R   s    Or3   r<   c                       e Zd Zd Zy)getTermsConditionsc                    	 t         j                  j                  d      j                         }|si }n$|j                  |j
                  |j                  d}t        t        j                  d|d      S # t        $ rJ}t        |       t        t        j                  t        |      dt        j                        cY d }~S d }~ww xY w)NrB   r@   rC   rG   rH   rL   r   )rP   r'   rQ   rR   rD   rE   rF   r   r   rS   rT   rU   rV   r,   )rW   rM   	terms_objrY   rZ   s        r1   rO   zgetTermsConditions.geth   s    O##**W*=CCE9
H ,,__  H
 &"4"4iW_`
aa	 O8
&"G"GY\]^Y_`hn  iN  iN  O  OOs   A3A6 6	C	??C>C	C	Nr[   r_   r3   r1   ra   ra   g       Or3   ra   c                       e Zd Zd Zy)
faqListingc                    	 t         j                  j                  d      j                  d      }g }|D ]7  }|j                  |j
                  |j                  d}|j                  |       9 t        t        j                  d|d      S # t        $ rJ}t        |       t        t        j                  t        |      dt        j                        cY d }~S d }~ww xY w)	NTend_date__isnull-idrC   rG   rH   rL   r   )Faqr'   rQ   order_byrD   rE   rF   appendr   r   rS   rT   rU   rV   r,   )rW   rM   faq_objall_DatafaqrY   rZ   s          r1   rO   zfaqListing.gety   s    O[[$7@@G78s
&&YY{{H
 OOH  &"4"4iW_`
aa	 O8
&"G"GY\]^Y_`hn  iN  iN  O  OOs   B	B 	C?CCCNr[   r_   r3   r1   rf   rf   x   rd   r3   rf   c                       e Zd Zd Zy)userRegisterc           	      $   	 |j                   j                  d      }|s,t        t        j                  ddt        j                        S |j                   j                  d      }|s,t        t        j                  ddt        j                        S |j                   j                  d      j                         }|s,t        t        j                  ddt        j                        S t        j                  j                  |	      j                         }|r,t        t        j                  d
dt        j                        S |j                   j                  d      }|s,t        t        j                  ddt        j                        S |j                   j                  d      }|s,t        t        j                  ddt        j                        S ||k7  r,t        t        j                  ddt        j                        S |}t        j                  |      }	t        j                  j                  |d      j                         }
t        j                  j                  |	|||d      }dj                  t        d      D cg c]6  }t        j                   t"        j$                  t"        j&                  z         8 c}      }dt)        |j*                        z   dz   |z   }t)        t,        j.                        |z   }||_        |j3                          d}t5        dd|i      }|}d}|}t7        j8                  ||||g|       d}ddlm}  |j>                         }t5        d ||||d!      }|}d}d"}t7        j8                  ||||g|       t        t        j@                  d#d      S c c}w # tB        $ rJ}tE        |       t        t        jF                  t)        |      dt        jF                        cY d }~S d }~ww xY w)$N
first_namezfirst_name is requiredrL   r   	last_namezlast_name is requiredemailEmail is requiredrv   z)This email is already registered with us.passwordPassword is requiredconfirm_passwordzConfirm Password is requiredz+Password and Confirm Password are not same.F)rv   is_email_verifiedT)ry   rv   rt   ru   is_user    /api-user/email-verification//Email Verificationzworker_email_verification.htmllinksupport@olfix.co.ukhtml_messagezNew User Registeredr   )r	   znew_user_registered.html)rt   ru   rv   r	   zsuperadmin@yopmail.comzGYou have been successfully registered with us.Please verify your email.)$rK   rO   r   r   HTTP_400_BAD_REQUESTlowerUserr'   rQ   rR   handlerhashcreatejoinrangerandomchoicestringascii_lettersdigitsr,   rv   r
   BASE_URLemail_verify_linksaver   r   	send_mailr   r	   todayrS   rT   rU   rV   )rW   rM   rt   ru   rv   check_emailry   r{   string_passwordfinal_passwordcheck_customerObjcustomerObjnran_numbaselinkcompletelinksubjectr   plain_message
from_emailtor	   r   rZ   s                           r1   postzuserRegister.post   s   3O  .:
6#>#>Phiqw  rM  rM  N  N||,9
6#>#>Pghpv  qL  qL  M  M<<G$**,5
6#>#>Pcdlr  mH  mH  I  I$$5$1779;6#>#>P{|  EK  E`  E`  a  allz*8
6#>#>Pfgou  pK  pK  L  Lll&&'9:
6#>#>Pnow}  xS  xS  T  T""6#>#>P}~  GM  Gb  Gb  c  c&?LL1>||**5U*SYY[||""n5T^ir  ~B"  C;WWSXY[S\]S\afmmF$8$86==$HIS\]^7.[5F5F1GG#MPWW8h''(83<#+; !7"#CflE[\<=%:2>>'=*rdV"74::<5"#=jenw|  EJ  @K  L<=%: 2>>'=*rdV
&"4"4  GP  Q  R  R+ ^, 
 O8
&"G"GY\]^Y_`hn  iN  iN  O  OOsa   AN< AN< AN< +AN< AN< AN< 0N< 
BN< ;N7C/N< 7N< <	P?P
P
PNr\   r]   r^   r   r_   r3   r1   rr   rr      s    4Or3   rr   c                       e Zd Zd Zy)userEmailVerificationc                 `   	 t        | j                  j                        }t        |       |j	                  d      d   }t
        j                  j                  ||      j                         }d|_	        t               |_        t        j                  j                  |d       |j                          t        j                  j                  d|j                   z   dz   |j"                  z   d	z   d
       t%        |d      S # t&        $ r!}t        |       t%        |d      cY d }~S d }~ww xY w)Nr   )rv   r   Tr   useramountzA new user  z! has been registered successfullynew_usermessagetypezemail_verified_success.html)r,   rM   pathrU   splitr   r'   rQ   rR   r|   generate_strip_iduser_stripe_id
UserWalletr   r   AdminNotificationsrt   ru   r   rT   )rW   rM   r   
user_emailuser_objrZ   s         r1   rO   zuserEmailVerification.get   s	   8
dll
 4;

3#:ll!!*$!OUUW8 $8.08(!4==?$$}X=P=P/PQT/TU]UgUg/g  iL  0L  R\$  ]
6
77	 88
6
778s   D D 	D-D("D-(D-Nr[   r_   r3   r1   r   r      s    8r3   r   c                       e Zd Zd Zy)	userLoginc           	      	   	 |j                   j                  d      }|s,t        t        j                  ddt        j                        S |j                   j                  d      }|s,t        t        j                  ddt        j                        S t
        j                  j                  |d      j                         }t
        j                  j                  |d      j                         }|d	k(  r,t        t        j                  d
dt        j                        S |j                  d	k(  r,t        t        j                  ddt        j                        S |j                  ,t        t        j                  ddt        j                        S t
        j                  j                  |dd      j                         }|rdj                  t        d      D cg c]6  }t        j                  t        j                   t        j"                  z         8 c}      }dt%        |j&                        z   dz   |z   }	t%        t(        j*                        |	z   }
|	|_        |j/                          d}t1        dd|
i      }|}d}|}t3        j4                  ||||g|       t        t        j                  ddt        j                        S t
        j                  j                  |dd      j                         }|s,t        t        j                  ddt        j                        S |j                   j                  d      }|s,t        t        j                  ddt        j                        S ||_        |j/                          |j8                  }t;        j<                  |j                   j                  d      |      }|rt?        j@                  |      }|jB                  |j&                  |jD                  |jF                  |j6                  t%        |      t%        |jH                        d}t        t        jJ                  d|d      S t        t        j                  d dt        j                        S c c}w # tL        $ rJ}tO        |       t        t        jP                  t%        |      dt        jP                        cY d }~S d }~ww xY w)!Nrv   rw   rL   r   ry   rz   r   )rv   r}   r   z:This email does not exist in our database, please registerz1Account not yet activated. Please contact supportzThis account is deleted.F)rv   r|   r}   r~   r   r   r   r   zuser_email_verification.htmlr   r   r   z(Please check your email for verificationTNo account founddevice_tokenzDevice token is required)user_idrv   rt   ru   r   refreshaccesszLogin SuccessfullyrH   zInvalid password))rK   rO   r   r   r   r   r'   rQ   countrR   end_dater   r   r   r   r   r   r   r,   rv   r
   r   r   r   r   r   r   r   ry   r   verifyr   for_userrD   rt   ru   access_tokenrS   rT   rU   rV   )rW   rM   rv   ry   r   user_statuscheck_verificationr   r   r   r   r   r   r   r   r   userObjr   new_passcheckrefresh_tokenallDatarZ   s                          r1   r   zuserLogin.post   s   :O<<G$5
6#>#>Pcdlr  mH  mH  I  Illz*8
6#>#>Pfgou  pK  pK  L  L<<UQ7==?4,,%%EA%>DDF;
ai6#>#>  QM  N  V\  Vq  Vq  r  rA6#>#>  QD  E  MS  Mh  Mh  i  i&6#>#>Pjksy  tO  tO  P  P,,5U]^,_eegggTYZ\T]^T]qv}}V%9%9FMM%IJT]^_G/#6H6N6N2OORUUX__Hx(()H4L+3("G#$BV\DZ[L M&J	BNN7M:t,W6#>#>Pz{  DJ  D_  D_  `  `ll!!q!QWWY7
6#>#>Pbckq  lG  lG  H  H,,"">2<
6#>#>Pjksy  tO  tO  P  P&7
<<>8>>',,**:6x@5 ))'2Mzz]]$$""((M"=--.	G 6#5#5G[cjkll6#>#>Pbckq  lG  lG  H  HG _H 
 O8
&"G"GY\]^Y_`hn  iN  iN  O  OOsm   AR AR BR #:R 7R AR !;RB4R AR /AR 8CR +R R 	S?SSSNr   r_   r3   r1   r   r      s    ;Or3   r   c                       e Zd Zd Zy)userForgetPasswordc           	         |j                   j                  d      }|s,t        t        j                  ddt        j                        S t
        j                  j                  |      j                         }|s,t        t        j                  ddt        j                        S t
        j                  j                  |      j                         }|rdj                  t        d      D cg c]6  }t        j                  t        j                  t        j                  z         8 c}      }d	t!        |j"                        z   d
z   |z   }t!        t$        j&                        |z   }||_        |j+                          d}	t-        dd|i      }
|
}d}|}t/        j0                  |	|||g|
       t        t        j2                  dd      S t        t        j                  ddt        j                        S c c}w )Nrv   rw   rL   r   rx   zPThis email does not exist in our database, please enter the valid email address.r~   r   z/api-user/forgoten/r   zForgot Passwordzuser_forget_password_email.htmlr   r   r   z8Reset password link has been sent to this email address.zEmail not exists)rK   rO   r   r   r   r   r'   rQ   rR   r   r   r   r   r   r   r   r,   rv   r
   r   forgot_password_linkr   r   r   r   rS   )rW   rM   rv   r   r   r   r   r   r   r   r   r   r   r   s                 r1   r   zuserForgetPassword.post  s   <<G$5
6#>#>Pcdlr  mH  mH  I  I<<e,2244
6#>#>  Qc  d  lr  lG  lG  H  Hll!!!.4467ggTYZ\T]^T]qv}}V%9%9FMM%IJT]^_G%GMM(::S@7JHx(()H4L#+G LLNG#$EP\G]^L M&J	BNN7M:t,W6#5#5  HB  C  D  D6#>#>Pbckq  lG  lG  H  H _s   .;G:Nr   r_   r3   r1   r   r     s    Hr3   r   c                       e Zd Zd Zd Zy)forgetPasswordVerificationc                    t        | j                  j                        }t        |       |j	                  d      d   }t
        j                  j                  |      j                         }|j                  dk(  rt        |d      S t
        j                  j                  ||      j                         }|rt        d       d}nt        d	       d
}t        |dd|i      S )Nr   r   rx   
LinkExpiryzlink-expire.html)rv   r   TrueTFalseFforgot.htmlvalid)r,   rM   r   rU   r   r   r'   rQ   rR   r   r   )rW   rM   r   r   link_expiryr   r   s          r1   rO   zforgetPasswordVerification.get5  s    	T\\	$+zz#r"*##J#7==?+%%5
+
,,\\  D QWWY(=5>5	wuo	66r3   c                 \   t        j                  |j                        }|j                         r|j                  j                  d      }|j                  j                  d      }t        | j                  j                        }|j                  d      d   }t        |       t        j                  j                  |      j                         }|rJ|j                  |       d|_        |j#                          t%        j&                  |d       t)        |d      S y t)        |d	d
|i      S )Nnew_passwordconfirm_new_passwordr   rx   r   zChanged successfullyzpassword_success.htmlr   form)r!   forgetverificationPOSTis_validcleaned_datarO   r,   rM   r   r   rU   r   r'   rQ   rR   set_passwordr   r   r   successr   )rW   rM   r   r   r   r   r   r   s           r1   r   zforgetPasswordVerification.postF  s    		!	!',,	/$	]]_##''7<++//0FG
dll
 4

3#:ll!!*!5;;=8,'$0H!MMOW45'122  -&$
88r3   Nr\   r]   r^   rO   r   r_   r3   r1   r   r   4  s    7"9r3   r   c                       e Zd Zd Zd Zy)userUpdateProfilec                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  |j                   |j"                  |j$                  |j&                  |j(                  |j*                  |j,                  |j.                  |j0                  |j2                  d}t        t        j4                  d|d      S # t6        $ rJ}t9        |       t        t        j:                  t=        |      d
t        j:                        cY d }~S d }~ww xY w)Nnullr~   ;Authorization Header or Token is missing on Request HeadersHS256
algorithmsr   r   rD   r}   User does not exists.rL   r   r   zUser is inactive.)r   avatarrv   rt   ru   phone_numberadresslatitude	longitudedobgenderrG   rH   )r   stripr   AuthenticationFailedjwtdecoder
   
SECRET_KEYr   r'   rQ   rR   r   r   r   rD   r   rv   rt   ru   r   addressr   r   r   r   rS   rT   rU   rV   r,   )rW   rM   tokendecodedr   r   rY   rZ   s           r1   rO   zuserUpdateProfile.getY  s    O#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*=
>>kk__NN$$""((  ""
,,__8$ &"4"4iW_`
aa	 O8
&"G"GY\]^Y_`hn  iN  iN  O  OOs%   CF B<F 	G?G
GGc                 
   	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S t        j                  j                  |      j#                  |j$                        }	|	r,t        t        j                  dd
t        j                        S |j                  j!                  d      }
|
s,t        t        j                  dd
t        j                        S |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S |j                  j!                  d      }|s,t        t        j                  d d
t        j                        S t        j                  j                  |!      j#                  |j$                        }|r,t        t        j                  d"d
t        j                        S |j                  j!                  d#      }|j                  j!                  d$      }||_        ||_        ||_        ||_        |
|_        ||_        ||_        ||_        ||_        d%|z   |_        |j;                          |j$                  |j8                  |j,                  |j&                  |j(                  |j*                  |j.                  |j0                  |j2                  |j4                  |j6                  d&}t        t        j<                  d'|d(      S # t>        $ rJ}tA        |       t        t        jB                  tE        |      d
t        jB                        cY d }~S d }~ww xY w))Nr   r~   r   r   r   r   r   r   r   rL   r   r   Signature has expiredrt   zFirst name is requiredru   zLast name is requiredr   zPhone number is required)r   rD   z3This phone is already associated with some account.r   zaddress is requiredr   zlatitude is requiredr   zlongitude is requiredr   zavatar is requiredrv   rw   rx   z3This email is already associated with some account.r   r   r   )r   r   rv   rt   ru   r   r   r   r   r   r   zProfile updated successfullyrH   )#r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   excluderD   rt   ru   r   rv   r   r   r   r   r   r   r   rS   rT   rU   rV   r,   )rW   rM   r   r  r   r   rt   ru   r   phone_checkr   r   r   r   rv   email_checkr   r   rY   rZ   s                       r1   r   zuserUpdateProfile.post|  s   MO#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB  .:
6#>#>Phiqw  rM  rM  N  N||,9
6#>#>Pghpv  qL  qL  M  M,,"">2<
6#>#>Pjksy  tO  tO  P  P$$L$AIIX[[IY;6#>#>  QF  G  OU  Oj  Oj  k  k\\i(7
6#>#>Pefnt  oJ  oJ  K  Kllz*8
6#>#>Pfgou  pK  pK  L  L||,9
6#>#>Pghpv  qL  qL  M  MLLX&6
6#>#>Pdems  nI  nI  J  J<<G$5
6#>#>Pcdlr  mH  mH  I  I$$U$3;;x{{;K;6#>#>  QF  G  OU  Oj  Oj  k  k			%	 3LLX&6#8!8'88>88!88<8?Z8?==?kk__NN$$""((  ""
,,__8 &"4"4Fdltu
vv	 O8
&"G"GY\]^Y_`hn  iN  iN  O  OOsk   CT) A,T) 2AT) ;AT) A'T) ,AT) 5AT) >AT) AT) AT) A'T) D'T) )	U<2?U71U<7U<Nr   r_   r3   r1   r   r   X  s    !OFNOr3   r   c                       e Zd Zd Zy)phoneOtpVerificationc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S |j"                  |k(  rCd|_        |j'                          t        t        j(                  dd
t        j(                        S t        t        j                  dd
t        j                        S # t*        $ rJ}t-        |       t        t        j.                  t1        |      d
t        j.                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  otpzOTP is requiredTzOTP verified successfully.zOTP is not correct)r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r  is_otp_verifiedr   rS   rT   rU   rV   r,   )rW   rM   r   r  r   r   r  rZ   s           r1   r   zphoneOtpVerification.post  s   O#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB
,,

5
!3
6#>#>Pabjp  kF  kF  G  Gllc#HMMO6#5#5Gcdlrl~l~6#>#>Pdems  nI  nI  J  J	 O8
&"G"GY\]^Y_`hn  iN  iN  O  OOs2   CF0 A,F0 2AF0 +F0 0	H9?G>8H>HNr   r_   r3   r1   r	  r	        Or3   r	  c                       e Zd Zd Zy)userChangePasswordc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S |j#                  |      dk(  r,t        t        j                  dd
t        j                        S ||j#                  |      k(  r,t        t        j                  dd
t        j                        S |}	|j%                  |	       |j'                          t        t        j(                  dd
      S # t*        $ rJ}
t-        |
       t        t        j.                  t1        |
      d
t        j.                        cY d }
~
S d }
~
ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  old_passwordzold password is required.r   znew password is required.new_confirm_passwordz!new confirm password is required.Fz%Does not match with the old password.z(Cannot set old password as new password.zPassword Changed Successfully.)r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   check_passwordr   r   rS   rT   rU   rV   r,   )rW   rM   r   r  r   r   r  r   r  ry   rZ   s              r1   r   zuserChangePassword.post  s    O#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB,,"">2<
6#>#>Pkltz  uP  uP  Q  Q,,"">2<
6#>#>Pkltz  uP  uP  Q  Q!,,**+AB
6#>#>Pst  }C  }X  }X  Y  Yl+u46#>#>Pwx  AG  A\  A\  ]  ]h55lCC6#>#>Pz{  DJ  D_  D_  `  `"8"==?
&"4"4Ffg
hh	 O8
&"G"GY\]^Y_`hn  iN  iN  O  OOsE   CJ A,J 2AJ ;AJ ?J ?J >J 	K?KKKNr   r_   r3   r1   r  r    s    !Or3   r  c                       e Zd Zd Zy)userDeleteAccountc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      t        j                  j!                         |_        |j%                          t&        j                  j                  |j(                        }|D ]5  }t        j                  j!                         |_        |j%                          7 t*        j                  j                  |j(                        }|D ]5  }	t        j                  j!                         |	_        |	j%                          7 t,        j                  j                  |j(                        }
|
D ]5  }t        j                  j!                         |_        |j%                          7 t.        j                  j                  |j(                        }|D ]5  }t        j                  j!                         |_        |j%                          7 t0        j                  j                  |j(                        }|D ]5  }t        j                  j!                         |_        |j%                          7 t        t        j2                  dd
      S # t4        $ rJ}t7        |       t        t        j8                  t;        |      d
t        j8                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  r   zAccount deleted successfully)r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   r   nowr   r   ConversationrD   ServiceProviderRatingReviewsr8   r&   	UserCardsrS   rT   rU   rV   r,   )rW   rM   r   r  r   r   chat_objchat
rating_objrate	trans_objtransbook_objbook	cards_objcardrZ   s                    r1   r   zuserDeleteAccount.post  s   %O#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB((,,.8==?"")))=8t%%))+DMIIK  -44;;(++;N:t%%))+DMIIK  &&--8;;-?9u&&**,EN	JJL  "")))=8t%%))+DMIIK    ''x{{';9t%%))+DMIIK  &"4"4Fde
ff	 O8
&"G"GY\]^Y_`hn  iN  iN  O  OOs%   CL, I&L, ,	M?5?M:4M?:M?Nr   r_   r3   r1   r  r    s    &Or3   r  c                       e Zd Zd Zy)getCustomerNotificationsc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      t        j                  j                  |j                   d      j#                  d      }g }|D ]N  }|j                   |j$                  |j&                  t)        |j*                        dz   d}	|j-                  |	       P t        t        j.                  d|d      S # t0        $ r?}
t        t        j2                  t5        |
      d
t        j2                        cY d }
~
S d }
~
ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  T)customerri   rj    ago)rD   r   notification_type
start_daterG   rH   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   CustomerNotificationsrD   rl   r   r   r   r,  rm   rS   rT   rV   r,   )rW   rM   r   r  r   r   
notify_objr   notifyalldatarZ   s              r1   rO   zgetCustomerNotifications.get8  s   O#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB%--44hkk]a4bkklqr:7v
))!;;F--.v5	G NN7  6#5#5yX_`
aa	 O
&"G"GY\]^Y_`hn  iN  iN  O  OOs%   CF CF 	G4GGGNr[   r_   r3   r1   r'  r'  7  r  r3   r'  c                       e Zd Zd Zy)deleteCustomerNotificationsc                    t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S t"        j                  j                  |      j%                  t'        j(                                t        t        j*                  dd
      S )Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  notification_idzNotification Id is requiredr  )r   z!Notification Deleted Successfully)r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r-  updater   r  rS   )rW   rM   r   r  r   r   r4  s          r1   r   z deleteCustomerNotifications.postS  sS   
"7
+%
]evo")<		(	()f	ggJJuh11gYG'I'll!!wq!9??A(	
&"="=Ofgou  pK  pK  L  L__

)
)*A
BB\\%%&78/	
&"="=Olmu{  vQ  vQ  R  R&&/&:AA8<<>AZ	!3!3Ehi	jjr3   Nr   r_   r3   r1   r2  r2  R  s    kr3   r2  c                       e Zd Zd Zy)HelpSupportUserc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S t"        j                  j%                  |||j&                         t        t        j(                  dd
      S # t*        $ r?}t        t        j,                  t/        |      d
t        j,                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  rE   ztitle is requireddescriptionzdescription is required)rE   r9  r   z Help & Support Send Successfully)r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   HelpSupportr   rD   rS   rT   rV   r,   )	rW   rM   r   r  r   r   rE   r9  rZ   s	            r1   r   zHelpSupportUser.poste  s   O#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB<<G$5
6#>#>Pcdlr  mH  mH  I  I!!-0;
6#>#>Pijrx  sN  sN  O  OEk(++V
&"4"4Fhi
jj	 O
&"G"GY\]^Y_`hn  iN  iN  O  OOs3   CG A,G 2AG ;AG 	H4H HHNr   r_   r3   r1   r7  r7  d  s    Or3   r7  c                       e Zd Zd Zy)getCategoryListc                 ^   	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      t        j                  j                  d      }g }|D ]7  }|j                   |j"                  |j$                  d}	|j'                  |	       9 t        t        j(                  d|d      S # t*        $ r?}
t        t        j,                  t/        |
      d
t        j,                        cY d }
~
S d }
~
ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  Trh   rD   imagenamerG   rH   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   CategoryrD   r?  r@  rm   rS   rT   rV   r,   )rW   rM   r   r  r   r   category_objro   catrY   rZ   s              r1   rO   zgetCategoryList.get  s   O#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB""))4)@<8s
&&YYHHH
 OOH  6#5#5yX`a
bb	 O
&"G"GY\]^Y_`hn  iN  iN  O  OOs%   CE$ BE$ $	F,-4F'!F,'F,Nr[   r_   r3   r1   r<  r<    s    Or3   r<  c                       e Zd Zd Zy)getSubCategoryListc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S t"        j                  j                  |d      }|s,t        t        j                  dd
t        j                        S g }|D ]W  }	|	j$                  |	j&                  |	j(                  j*                  |	j*                  |	j,                  d}
|j/                  |
       Y d	j(                  j*                  dd}t        t        j0                  d|d      S # t2        $ r?}t        t        j4                  t7        |      d
t        j4                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  main_idzMain id is requiredT)category_idri   zNo subcategory found)rD   rG  main_category_namesub_category_namer?  google_news@699adbd41323e344848401bfb91509dade9c5831b9a3e63414b8096331a2436f)engineqapi_keyrG   rH   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rN   rO   SubCategoryrD   rH  categoryr@  r?  rm   rS   rT   rV   r,   )rW   rM   r   r  r   r   rG  sub_objsub_Datasubsub_dataparamsrZ   s                r1   rO   zgetSubCategoryList.get  s/   (O#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB!!%%i07
6#>#>Pefnt  oJ  oJ  K  K  ''gRV'W7
6#>#>Pfgou  pK  pK  L  L8s
&&,,++YYH OOH  P6 6#5#5yX`a
bb	 O
&"G"GY\]^Y_`hn  iN  iN  O  OOs3   CH A,H 2AH BH 	I4IIINr[   r_   r3   r1   rE  rE    s    )Or3   rE  c                       e Zd Zd Zy)getServiceProvidersc                 R   	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S t"        j                  j                  |d      }g }t$        j                  j'                         j                         }	|D ]  }
|
j(                  |
j*                  j,                  dz   |
j*                  j.                  z   |
j*                  j0                  |
j*                  j2                  |
j4                  |
j*                  j6                  |
j8                  |	j:                  |	j<                  d	}|j?                  |        t        t        j@                  d|d      S # tB        $ r?}t        t        jD                  tG        |      d
t        jD                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  sub_service_idzSub service id is required)sub_services_idworker__is_worker_approvedr   )		worker_idworker_nameworker_imageworker_experiencepriceratings
time_takenplatform_feeadmin_commissionrG   rH   )$r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rN   rO   WorkerServicesOtherSettingsr(   r]  workerrt   ru   r   
experiencera  rb  rc  rd  re  rm   rS   rT   rV   r,   )rW   rM   r   r  r   r   rZ  
worker_objro   other_settingsrh  rY   rZ   s                r1   rO   zgetServiceProviders.get  sJ   !O#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB((,,-=>>
6#>#>Plmu{  vQ  vQ  R  R&&--kl-m:8!))--/557>v!!==++C/0G0GGMM((11\\}}$$###00'88H OOH  6#5#5yX`a
bb	 O
&"G"GY\]^Y_`hn  iN  iN  O  OOs,   CI A,I 2D+I 	J&'4J!J&!J&Nr[   r_   r3   r1   rX  rX    s    "Or3   rX  c                       e Zd Zd Zy)getServiceProvidersDetailsc           
      6   	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S t        j                  j                  |d      j                         }|j"                  |j$                  dz   |j&                  z   |j(                  |j*                  |j,                  |j.                  d}t0        j                  j                  |j"                        }	g }
|	D ],  }|j"                  |j2                  d}|
j5                  |       . t6        j                  j                  |      }g }|D ]  }|j"                  |j8                  |j:                  |j<                  j$                  dz   |j<                  j&                  z   |j<                  j(                  |j>                  j@                  |jB                  d}|j5                  |        tD        j                  jG                         j                         }|j"                  |jH                  |jJ                  d}t        t        jL                  d||
||jN                  |d      S # tP        $ r?}t        t        jR                  tU        |      d
t        jR                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  service_provider_idzService provider id is requiredrD   	is_workerr   )r]  r^  r_  r`  worker_emailworker_addressr]  )rD   r?  service_provider)rD   ratingreviewcustomer_namecustomer_avatarr*   
created_at)rD   rd  re  rG   )rI   rJ   worker_data	past_workreview_datatotal_ratingsother_setting_data)+r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rN   rO   rD   rt   ru   r   ri  rv   r   WorkerWorkImagesr?  rm   r  rw  rx  r   bookingr*   r,  rg  r(   rd  re  rS   rb  rT   rV   r,   )rW   rM   r   r  r   r   ro  rj  r|  previous_worksall_Workworkall_work
review_objreview_Datarx  
all_reviewrk  r  rZ   s                       r1   rO   zgetServiceProvidersDetails.get  sJ   4O#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB --112GH
6#>#>Pqr  {A  {V  {V  W  W$$*=1$MSSU:''+J,@,@@$$"--##''; %,,33jmm3L>8t
''ZZH OOH  -44;;Ob;d:;v
))mmmm[[++C/0E0EE{{))..++##J z"  "))--/557>


"//&77
 6#5#5y_jw  OZ  ku  k}  k}  Se  f  g  g	 O
&"G"GY\]^Y_`hn  iN  iN  O  OOs,   CM A,M 2HM 	N4NNNNr[   r_   r3   r1   rm  rm    s    5Or3   rm  c                       e Zd Zd Zy)getServiceProviderTimeslotsc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S t"        j                  j                  |      j                         }|r2t%        j&                  |j(                  j+                  dd            }|}	ni }	t        t        j,                  d|	d      S # t.        $ r?}
t        t        j0                  t3        |
      d
t        j0                        cY d }
~
S d }
~
ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  r]  zWorker id is requiredrt  \rG   rH   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rN   rO   WorkerTimeSlotsjsonloadsslotsreplacerS   rT   rV   r,   )rW   rM   r   r  r   r   r]  check_slots	data_jsonrY   rZ   s              r1   rO   zgetServiceProviderTimeslots.get(  s   O#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB##''49
6#>#>Pghpv  qL  qL  M  M!))00Y0GMMO;

K--55dB?@IHH
6#5#5yX`a
bb	 O
&"G"GY\]^Y_`hn  iN  iN  O  OOs,   CF3 A,F3 2B F3 3	G;<4G60G;6G;Nr[   r_   r3   r1   r  r  '  s    Or3   r  c                       e Zd Zd Zy)addUserCardc           	         	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|st        ddit        j                        S |j"                  st%               |_        |j'                          |j"                  r|j"                  }t        j(                  t*        _        t*        j.                  j1                  ||      }|rt2        j                  j5                  ||d   |d   |d   |d   |d         }|j6                  |j8                  |j:                  |j<                  |j>                  |j@                  |jB                  |jD                  d}	t        t        jF                  d	d      S # tH        $ r0}
t        dtK        |
      it        jL                        cY d }
~
S d }
~
ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  card_idr   card_id is required)sourcerD   	exp_monthexp_yearr)  last4)r   r  r  r  the_user_stripelast_digitsrD   r   r  r  r  r  r  
is_defaultrG   rH   )'r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r   r   r   STRIPE_SECRET_KEYstriperO  Customercreate_sourcer  r   rD   r   r  r  r  r  r  r  rS   rT   r,   rV   )rW   rM   r   r  r   r   r  
createCardcardObjr0  rZ   s              r1   r   zaddUserCard.postG  sX   #V#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB\\i(7
Y 56v?Z?Z[[

!
!/1HMMO%%G//FN..wg.FJ  ''Xj>NYcdoYp  {E  FP  {Q  bl  mw  bx  EO  PW  EX'  YW::##!!//''%%	W 6#5#5yX_`
aa	 V
Is1v&v/T/T
UUVs,   CI AI #D*I 	J%J<JJNr   r_   r3   r1   r  r  F  s    $Vr3   r  c                       e Zd Zd Zy)getUserCardc           
         	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      t        j                  j                  |      }g }|D ]n  }|j                   |j"                  |j$                  |j&                  |j(                  |j*                  |j,                  |j.                  d}	|j1                  |	       p t        t        j2                  d|d      S # t4        $ r0}
t        dt7        |
      it        j8                        cY d }
~
S d }
~
ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  r  r  rG   rH   r   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   r  rD   r   r  r  r  r  r  r  rm   rS   rT   r,   rV   )rW   rM   r   r  r   r   card_objro   r%  rY   rZ   s              r1   rO   zgetUserCard.geto  s   V#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB&&h&788t
''||||++##//	H OOH  6#5#5yX`a
bb	 V
Is1v&v/T/T
UUVs%   CF CF 	G$%G	GGNr[   r_   r3   r1   r  r  n  s    Vr3   r  c                       e Zd Zd Zy)deleteUserCardc                 ,   	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|st        ddit        j                        S t"        j                  j                  |      j                         }|st        ddit        j                        S t        j$                  t&        _        t&        j*                  j-                  |j.                  |j0                         |j3                          t        ddi      S # t4        $ r0}t        dt7        |      it        j8                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  r  r   r  r  zNo card foundrG   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r  r  r  rO  r  delete_sourcer  r  deleterT   r,   rV   )	rW   rM   r   r  r   r   r  r  rZ   s	            r1   r   zdeleteUserCard.post  s   V#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB\\i(7
Y 56v?Z?Z[[&&'&288:8
Y09T9TUU..6>	??   ??
Iy)
**	 V
Is1v&v/T/T
UUVs3   CG AG #AG 0A)G 	H#%HHHNr   r_   r3   r1   r  r    s    Vr3   r  c                       e Zd Zd Zy)bookServicec                 l   	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      t               }|j                   j#                  d      }|s,t        t        j                  d	d
t        j                        S t$        j                  j#                  |      }|s,t        t        j                  dd
t        j                        S |j                   j#                  d      }	|	s,t        t        j                  dd
t        j                        S t        j                  j                  |	d      j                         }
|
s,t        t        j                  dd
t        j                        S |j                   j#                  d      }|s,t        t        j                  dd
t        j                        S |j                   j#                  d      }|s,t        t        j                  dd
t        j                        S |j                   j#                  d      }|st        ddit        j                        S |j                   j#                  d      }|st        ddit        j                        S |j                   j#                  d      }|st        ddit        j                        S |j                   j#                  d      }|st        dd it        j                        S t&        j                  j)                  |||
|||||||!
      }t        t        j*                  d"|j,                  d#      S # t.        $ r0}t        dt1        |      it        j2                        cY d }~S d }~ww xY w)$Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  rZ  r  zNo sub service foundr]  Worker id does not exists.rp  zNo worker foundbooking_datebooking_timebooking time does not exists.ra  r   zPrice is requiredplatform_feeszplatform_fees is requiredadmin_commission_feesz!admin_commission_fees is requiredtotal_amountztotal_amount is required)
r*   r   rh  r  r  sub_servicesra  r  r  r  rG   )rI   r   r*   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   r2   rK   rO   rP  r&   r   rS   rD   rT   r,   rV   )rW   rM   r   r  r   r   r*   rZ  sub_service_objr]  rj  r  r  ra  r  r  r  r"  rZ   s                      r1   r   zbookService.post  s   5V#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB ":LL$$%56>
6#>#>Pghpv  qL  qL  M  M!))---@?
6#>#>Pfgou  pK  pK  L  L||,9
6#>#>Plmu{  vQ  vQ  R  R,,%%9q%AGGI:
6#>#>Pabjp  kF  kF  G  G,,"">2<
6#>#>Plmu{  vQ  vQ  R  R,,"">2<
6#>#>Popx~  yT  yT  U  U<<G$5
Y236;V;VWW<<##O4=
Y:;6C^C^__"<<++,CD
YBC6KfKfgg,,"">2<
Y9:&B]B]^^""))ZXU_my  HT#%mbw  FR * S8
&"4"4yV^VaVab
cc	 V
Is1v&v/T/T
UUVsg   CO: A6O: <AO: 
AO: AO: 0AO: 9AO: 9O: <9O: 69O: 09O: *AO: :	P3%P.(P3.P3Nr   r_   r3   r1   r  r    s    6Vr3   r  c                       e Zd Zd Zy)
payBookingc           
      j   	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|st        ddit        j                        S t"        j                  j                  |      j                         }|st        ddit        j                        S |j                  j!                  d      }|st        ddit        j                        S t$        j                  j                  ||      j                         }	|	st        ddit        j                        S t'        |	j(                  |	j*                  |j,                        }
|
d   dk(  rt.        j                  j1                  t3               ||t5        |j,                        |
d   d   |
d   d   |
d   d   d   d      }d|_        |j9                          t:        j                  j                  |j<                         j                         }t>        j                  jA                         j                         }tC        |jD                        tC        |jF                        z   tC        |jH                        z   }|xjJ                  tC        |      z  c_%        |j9                          d!}t5        t        jL                        }|jN                  jP                  }d"}|}d#|i}d$d%|d&}tS        |'      jU                  |||||(      }t        dd)i      S t        d|
d   it        j                        S # tV        $ r0}t        dt5        |      it        jX                        cY d }~S d }~ww xY w)*Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  r*   r   booking_id is requiredr  No booking foundr  r  rD   r   No card found is requiredr   TrK   balance_transactionreceipt_urlpayment_method_detailsr   pay)r9   r   r  r   txn_idrecipet_urlpayment_modetranscation_typert  zYou got a new booking requestBooking Requestr?  booking_requestBOOKING REQUESTr   rE   r   rO  registration_idmessage_titlemessage_bodydata_messageextra_notification_kwargsrG   )-r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r&   r  paymentWithExistingCardr  r  r  r8   r   r:   r,   is_paidr   ServiceProviderWalletr]  rg  r(   r+   ra  rd  re  r   FIREBASE_SERVER_KEYrh  r   r   notify_single_devicerT   rV   )rW   rM   r   r  r   r   r*   booking_objr  r  thePaymentObjCustTransaction
wallet_objother_amountr  r   
server_keyr  r  r  r  r  resultrZ   s                           r1   r   zpayBooking.post  s3   6V#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB  .:
Y 89&B]B]^^%%,,
,;AAC;
Y 23F<W<WXX\\i(7
Y 56v?Z?Z[[&&'w&?EEG8
Y ;<VE`E`aa*8+C+CHDTDTU`UmUmn=H%%--44DZD\bjs~  GJ  KV  Kc  Kc  Gd  ly  z@  lA  BW  lX  er  sy  ez  {H  eI  Yf  gm  Yn  oG  YH  IO  YP  bg4  hOK&..55+BWBW5X^^`J"**..0668L{(()3|/H/H+II#lNkNkJllL\**OO-GX112J!((55O%MLW! 0%L Z0EEVe  vC  R^  my  TmE  nFY	*++ Y}Y78@[@[\\	 V
Is1v&v/T/T
UUVsF   CO9 AO9 #AO9 09O9 *AO9 8G O9 O9 9	P2%P-'P2-P2Nr   r_   r3   r1   r  r        7Vr3   r  c                       e Zd Zd Zy)payBookingWalletc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|st        ddit        j                        S t"        j                  j                  |      j                         }|st        ddit        j                        S t$        j                  j                  |      j                         }|st        ddit        j                        S t&        j                  j)                         j                         }	t+        |j,                        t+        |	j.                        z   t+        |	j0                        z   }
|
t+        |j2                        kD  rIt5        d|j,                         t5        d|j2                         t        ddit        j                        S t6        j                  j9                  t;               ||t=        |
      dd      }d|_        |jA                          t+        |j2                        t+        |
      z
  }||_        |jA                          tB        j                  j                  |jD                  jF                        j                         }t+        |j2                        t+        |
      z   }||_        |jA                          t        ddi      S # tH        $ r0}t        dt=        |      it        jJ                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  r*   r   r  r  r  r  zNo wallet found for this user.appointmentwalletz,You do not have sufficent balance in wallet.r  r9   r   r  r   r  r  Trh  rG   )&r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r&   r   rg  r(   r+   ra  rd  re  r   rU   r8   r   r:   r,   r  r   r  rh  rD   rT   rV   )rW   rM   r   r  r   r   r*   r  r  r  r  r  
new_walletservice_wallet_objnew_wallet_providerrZ   s                   r1   r   zpayBookingWallet.post!  sF   9V#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB  .:
Y 89&B]B]^^%%,,
,;AAC;
Y 23F<W<WXX ""))):@@B:
Y @A&JeJeff "))--/557<k''(#l.G.G*HH\MjMjIkk<S**++	-))*	(:$$%Y NOX^XsXstt$,,33E[E]ckt  HK  LX  HY  iq  CH3  I?;J%%&\):::!:?? .55<<kFXFXF[F[<\bbd/667#l:KK2 Iy)
**	 V
Is1v&v/T/T
UUVsA   CN AN #AN 0AN =CN DN 	O %OOONr   r_   r3   r1   r  r     s    :Vr3   r  c                       e Zd Zd Zy)getMyBookingListc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S |dk(  rIt"        j                  j                  t%        d      t%        d      z  |d      j'                  d      }nh|dk(  r2t"        j                  j                  |dd      j'                  d      }n1t"        j                  j                  |dd      j'                  d      }g }|D ]  }	t(        j                  j                  |	j*                  |	j,                  |	j.                        }
|
rd}nd}i d|	j.                  d|	j0                  d|	j*                  d|	j,                  d |	j2                  j4                  d!z   |	j2                  j6                  z   d"|	j2                  j8                  d#|	j:                  j<                  d$|	j:                  j>                  j@                  d%|	jB                  d&|	j:                  j@                  d'|	jD                  d(|	jF                  d(|	jF                  d)|	jH                  d*|	jJ                  d+|	jL                  d,|	jN                  |	jP                  |	jR                  |	jT                  |d-}|jW                  |        t        t        jX                  d.|d/      S # tZ        $ r0}t        d0t]        |      it        j^                        cY d }~S d }~ww xY w)1Nr   r~   r   r   r   r   r   r   r   rL   r   r   r  booking_typezbooking_type is requiredupcomingPending)booking_statusAcceptedT)r   r  rj   complete	Completed)r   r  r  Declined)r   rv  r*   FrD   r*   r]  r^  r   r_  
service_idservice_namerZ  sub_service_namer  r  r  booking_completedra  r  )r  r  r  is_ratedrG   rH   r   )0r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   GETrO   r&   r   rl   r  r   r]  rD   r*   rh  rt   ru   r   r  rH  rQ  r@  r[  r  r  r  r  ra  r  r  r  r  rm   rS   rT   r,   rV   )rW   rM   r   r  r   r   r  r  booking_Datar  check_ratingr  rY   rZ   s                 r1   rO   zgetMyBookingList.get`  s    7V#G,5mu%++-2*=

)
)*g
hhZZx22wiH7Y7||""":@@B8
6#>#>Pghpv  qL  qL  M  Moo

)
)*A
BB++//.1<
6#>#>Pjksy  tO  tO  P  Pj &&--a	.J1]gKh.hpx  DH-  I  R  R  SX  YK
"&&--X^i-jsstyzK&&--X^h-irrsxyK<w/77>>wjqj{j{  JQ  JT  JT>  ULXX	7::7%% w ""	
 7>>,,s2W^^5M5MM GNN)) '&&22 G((1166 g-- ,,11 G(( G(( G(( g,, 22  W]]!" W**#$ %::((+H. !; < 6#5#5yXde
ff	 V
Is1v&v/T/T
UUVs,   CO A,O 2JO 	O;%O60O;6O;Nr[   r_   r3   r1   r  r  _  s    8Vr3   r  c                       e Zd Zd Zy)homepagec           	      $   	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      t        j                  j                  dd      j                  d      d d }g }|D ]R  }|j                   |j"                  dz   |j$                  z   |j&                  |j(                  d}	|j+                  |	       T t,        j                  j                  d      }
g }|
D ]7  }|j                   |j.                  |j0                  d}|j+                  |       9 t2        j                  j                  d      }g }|D ]U  }|j4                  j                   |j4                  j0                  |j4                  j.                  d}|j+                  |       W t6        j                  j9                         }g }|D ]B  }|j                   |j:                  |j.                  |j<                  d}|j+                  |       D t        t        j>                  d||||d      S # t@        $ r0}t        dtC        |      it        jD                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   User does not exist.rL   r   r   r  T)rq  ri   z-ratingsr6   r   )rD   r@  r   rb  rh   r>  )rZ  r  sub_service_image)rD   banner_titler?  r{  rG   )rI   rJ   service_datafeature_datapopular_Providersbanner_Datar   )#r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rl   rD   rt   ru   r   rb  rm   rA  r?  r@  FetaureServicesub_categoryBannerManagementr(   r  r,  rS   rT   r,   rV   )rW   rM   r   r  r   r   popular_providersr	  poppopluar_provcategory_obj_dataservice_DatarC  service_data_allfeatured_service_objfeature_Datafeaturer  
banner_objr
  bannerbanner_datarZ   s                          r1   rO   zhomepage.get  s   :V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8
F$?$?Sij**, ,oo

)
)*A
BB,,!t,T]]^hijlklms66^^C-zz	L \*    ''...E<s66iiXX
 ()   )00777N<&w++.. --22!..44L
 % ' !((,,.:;v
))((ll$$	K {#  6#5#5$lWh  xCD E E 
 V
Is1v&v/T/T
UUVs%   CK HK 	L%L
L
LNr[   r_   r3   r1   r  r    s    ;Vr3   r  c                       e Zd Zd Zy)CancelBookingc                 \   	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|st        ddit        j"                        S |j                  j!                  d      }|st        ddit        j"                        S t$        j                  j                  ||      j                         }|st        ddit        j"                        S t        j                  j!                  |j&                  j(                        }	d|_        ||_        d|_        |j1                          t2        j                  j                  |      j                         }
t4        j                  j7                         j                         }t9        |j:                        t9        |j<                        z   t9        |j>                        z   }tA        d|j:                         tA        d|
jB                         tD        j                  jG                  tI               ||tK        |      dd      }t9        |
jB                        t9        |      z   }||
_!        |
j1                          tL        j                  j                  |j&                  j(                        j                         }t9        |jB                        t9        |      z
  }||_!        |j1                          tN        j                  jG                  d|jP                  z   dz   d |	!       t        dd"i      S # tR        $ r0}t        dtK        |      it        jT                        cY d }~S d }~ww xY w)#Nr   r~   r   r   r   r   r   r   r  rL   r   r   r  r*   r   r  cancellation_reasonzCancellation reason is requiredr  Booking not foundr  r  r   r  r  r  refundr  r  The booking id z  has been cancelled by the user.appointment_bookingr   r   rh  rG   )+r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   HTTP_404_NOT_FOUNDr&   rh  rD   r  r  cancelled_byr   r   rg  r(   r+   ra  rd  re  rU   r   r8   r   r:   r,   r  WorkerNotificationsr*   rT   rV   )rW   rM   r   r  r   r   r*   r  appointment_objrj  r  r  r  r  r  r  r  rZ   s                     r1   r   zCancelBooking.post  s   DT#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8
F$?$?Sij**, ,oo

)
)*A
BB  .:
Y 89&B[B[\\ ))*?@
Y AB6KdKdee!))00Jh0OUUW?
Y 34V=V=VWW  '='='@'@ A:$.?!)<?&"(?""))):@@B:!))--/557<o++,c,2K2K.LLSQ]QnQnMoo<,,-*##$$,,33E[E]ck  uD  LO  P\  L]  mu  GO3  P?J%%&\):::!:?? .55<<oF\F\F_F_<`ffh/667#l:KK2 %%.?@Z@Z.Z[}.}  DY  bl%  m  Iy)
**	 T
Ic!f%V-R-R
SSTs9   CO2 AO2 #9O2 AO2 +IO2 2	P+;%P& P+&P+Nr   r_   r3   r1   r  r    s	    ETr3   r  c                       e Zd Zd Zy)RescheduleBookingc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|j                  d	k(  rt        j                  d
      |s,t        t        j                  ddt        j                        S |j                  j!                  d      }|s,t        t        j                  ddt        j                        S |j                  j!                  d      }|s,t        t        j                  ddt        j                        S |j                  j!                  d      }|s,t        t        j                  ddt        j                        S t"        j                  j                  |      j                         }	t"        j                  j                  |      j%                  ||      }
t'        |	j(                        dz   }t'        t        j*                        }|	j,                  j.                  }d}|}d|i}dd|d}t1        |      j3                  |||||      }t        t        j4                  dd      S # t6        $ r0}t        dt'        |      it        j8                        cY d }~S d }~ww xY w) Nr   r~   r   r   r   r   r   r   r   r  r  rL   r   r*   zbooking id is required.r  r  r  r  )r*   )r  r  z has been rescheduled.r  r?  r  r  r  r  r  rG   r   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r&   r5  r,   r*   r  rh  r   r   r  rS   rT   rV   )rW   rM   r   r  r   r   r*   r  r  r  r"  r   r  r  r  r  r  r  r  rZ   s                       r1   r   zRescheduleBooking.post$  s   -V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8oo

)
)*A
BB
F$?$?Sij**, ,   .:
F$?$?Slm**, , ,,"">2<
6#>#>Plmu{  vQ  vQ  R  R,,"">2<
6#>#>Popx~  yT  yT  U  U&&---DJJL;""))Z)@GGUao{G|8''(*BB7H001: ''44?$=<
G  /$
< J/DDUd  uB  Q]  lx  SlD  m6 6#5#5yQ
RR	 V
Is1v&v/T/T
UUVs:   C&J4 )AJ4 2AJ4 ;AJ4 C/J4 4	K-=%K("K-(K-Nr   r_   r3   r1   r(  r(  #  s    .Vr3   r(  c                       e Zd Zd Zd Zy)RefundRequestc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|j                  d	k(  rt        j                  d
      |s,t        t        j                  ddt        j                        S |j                  j!                  d      }|s,t        t        j                  ddt        j                        S t"        j                  j                  ||d      j                         }|st        ddit        j$                        S i d|j&                  d|j(                  d|j*                  d|j,                  d|j.                  j0                  dz   |j.                  j2                  z   d|j.                  j4                  d|j6                  d|j8                  j:                  d|j<                  d|j>                  d|j>                  d|j@                  d|jB                  d|jD                  d |jF                  d!|jH                  d"|jJ                  d#|jL                  i}t        t        jN                  d$|d%      S # tP        $ r0}	t        dtS        |	      it        jT                        cY d }	~	S d }	~	ww xY w)&Nr   r~   r   r   r   r   r   r   r   r  r  rL   r   r*   Booking Id is requiredr  rD   r   r  r   r  rD   r]  r^  r   r_  rZ  r  r  r  r  r  ra  r  r  r  r  rG   rH   )+r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   r  rO   r&   r#  rD   r*   r   r]  rh  rt   ru   r   r[  r  r@  r  r  r  r  ra  r  r  r  r  rS   rT   r,   rV   )
rW   rM   r   r  r   r   r*   r  rY   rZ   s
             r1   rO   zRefundRequest.getW  s   +V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8oo

)
)*A
BB
F$?$?Sij**, ,-:
F$?$?Skl**, , %%,,
([e,flln;
Y 23F<U<UVV	;>>;)) {"" &&	
 ;%%00369K9K9U9UU K&&-- k11 0055 K,, K,, K,, k00 66 [ [..  [>>!" K,,#$ {""%8( 6#5#5yX`a
bb	 V
Is1v&v/T/T
UUVs3   C&K )AK 2AK EK 	K<%K71K<7K<c                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|j                  d	k(  rt        j                  d
      |s,t        t        j                  ddt        j                        S |j                  j!                  d      }|s,t        t        j                  ddt        j                        S t"        j                  j                  ||d      j                         }|st        ddit        j$                        S t&        j                  j)                  |t+        |j,                        t+        |j.                        z   t+        |j0                        z   t3        j4                                t6        j                  j)                  d|j8                  z   dz   d       t        t        j:                  dd      S # t<        $ r0}t        dt?        |      it        j@                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r   r  r  rL   r   r*   r-  r  r.  r   r  )r  refund_amountdate_processedz$A new refund request for booking id z generated.refund_bookingr   rG   )!r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r&   r#  AdminRefundRequestr   r+   ra  r  r  r	   r   r   r*   rS   rT   r,   rV   )	rW   rM   r   r  r   r   r*   r  rZ   s	            r1   r   zRefundRequest.post  sO   V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8oo

)
)*A
BB
F$?$?Sij**, ,  .:
F$?$?Skl**, , %%,,
([e,flln;
Y 23F<U<UVV$${SQ\QbQbMcdghs  iJ  iJ  eK  NK  LO  P[  Pi  Pi  Lj  Nj  }A  }G  }G  }I$  J$$-ST_TjTj-jkx-x  O$  P
6#5#5yQ
RR	 V
Is1v&v/T/T
UUVs3   C&I )AI 2AI B?I 	I:
%I5/I:5I:Nr   r_   r3   r1   r+  r+  V  s    ,V\Vr3   r+  c                       e Zd Zd Zy)myWalletc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|j                  d	k(  rt        j                  d
      |s,t        t        j                  ddt        j                        S t        j                  j                  |      j                         }|s,t        t        j                  ddt        j                        S d|j                   i}|j"                  j%                  d      }|st        ddit        j&                        S |dk(  r5t(        j                  j                  |dd      j+                  d      d d }	nm|dk(  r5t(        j                  j                  |dd      j+                  d      d d }	n3t(        j                  j                  |d      j+                  d      d d }	g }
|	D ]b  }|j,                  |j.                  |j0                  j2                  |j                   |j4                  |j6                  d}|
j9                  |       d t        t        j:                  d||
d      S # t<        $ r0}t        dt?        |      it        j@                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r   r  r  rL   r   r  zNo wallet foundr   trascation_typer   trascation_type is requiredr  r  r   r  r  rj   r6   r  r   r  rD   r9   r*   r   r  r{  rG   )rI   rJ   wallet_data
trans_data)!r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   r   r   r  rO   r#  r8   rl   rD   r9   r  r*   r  r{  rm   rS   rT   r,   rV   )rW   rM   r   r  r   r   r  r<  r7  r   
Trans_Datar!  r=  rZ   s                 r1   rO   zmyWallet.get  s   +V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8oo

)
)*A
BB
F$?$?Sij**, ,"")));AAC:
F$?$?Sdems  nI  nI  J  J j; [[__%67?
Y =>vG`G`aa!''..xXiq.r{{  }B  C  DF  EF  GI5 ''..xXin.oxxy~  AC  BC  DI''..xX.V__`efgihijI:u
((**--**ll..""J j!  6#5#5y_j  yC  D  E  E	 V
Is1v&v/T/T
UUVs3   C&J; )AJ; AJ; D-J; ;	K4%K/)K4/K4Nr[   r_   r3   r1   r5  r5    s    ,Vr3   r5  c                       e Zd Zd Zy)addMoneyWalletc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|j                  d	k(  rt        j                  d
      |s,t        t        j                  ddt        j                        S |j                  }|j!                  d      }|st        ddit        j                        S |j                  j!                  d      }|st        ddit        j                        S t"        j                  j                  ||      j                         }	|	st        ddit        j                        S t%        |	j&                  |	j(                  t+        |            }
|
d   dk(  rt,        j                  j                  |j.                        j                         }|r/|xj0                  t+        |      z  c_        |j3                          n!t,        j                  j5                  ||       t        ddi      S # t6        j8                  j:                  $ r0}t        dt=        |      it        j                        cY d }~S d }~wt>        $ r0}t        dt=        |      it        j@                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r   r  r  rL   r   r   r   zamount is requiredr  r  r  r  r   T)r   r   z"Money added to wallet successfully)!r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r  r  r  r  r+   r   rD   r   r   r   r  error	CardErrorr,   rT   rV   )rW   rM   r   r  r   r   rK   r   r  r  r  user_walletrZ   s                r1   r   zaddMoneyWallet.post  sr   (V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8oo

)
)*A
BB
F$?$?Sij**, ,
,,4HHX6
Y34F<W<WXX\\i(7
Y 56v?Z?Z[[&&'x&@FFH8
Y ;<VE`E`aa*8+C+CHDTDTUXY_U`a=H%$$++hkk+BHHJK3v;&   ICD
EE			 L
Is1v&v/J/J
KK	 V
Is1v&v/T/T
UUVsJ   C&I6 );I6 %9I6 AI6 -CI6 6K:%J>8K:>K:
%K5/K:5K:Nr   r_   r3   r1   r@  r@    s    )Vr3   r@  c                       e Zd Zd Zy)viewAllWalletTransactionsc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|j                  d	k(  rt        j                  d
      |s,t        t        j                  ddt        j                        S |j                  j!                  d      }|st        ddit        j"                        S |dk(  r2t$        j                  j                  |dd      j'                  d      }ng|dk(  r2t$        j                  j                  |dd      j'                  d      }n0t$        j                  j                  |d      j'                  d      }g }|D ]b  }	|	j(                  |	j*                  |	j,                  j.                  |	j0                  |	j2                  |	j4                  d}
|j7                  |
       d t        t        j8                  d|d      S # t:        $ r0}t        dt=        |      it        j>                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r   r  r  rL   r   r7  r   r8  r  r  r9  rj   r  r:  r;  rG   )rI   rJ   r=  ) r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   r  rO   r#  r8   rl   trans_idr9   r  r*   r   r  r{  rm   rS   rT   r,   rV   )rW   rM   r   r  r   r   r7  r   r>  r!  r=  rZ   s               r1   rO   zviewAllWalletTransactions.get   s-   $V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8oo

)
)*A
BB
F$?$?Sij**, ,[[__%67?
Y =>vG`G`aa!''..xXiq.r{{  }B  CI5 ''..xXin.oxxy~I''..xX.V__`efI:u
..**--**ll..""J j!  6#5#5y^hi
jj	 V
Is1v&v/T/T
UUVs+   C&I )9I #D#I 	J %I;5J ;J Nr[   r_   r3   r1   rF  rF    s    %Vr3   rF  c                       e Zd Zd Zy)addRatingReviewServiceProviderc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|st        t        j                  dd
      S t        j                  j                  |d      j                         }|st        t        j                  dd
      S |j                  j!                  d      }|st        t        j                  dd
      S |j                  j!                  d      }	|	st        t        j                  dd
      S |j                  j!                  d      }
|
st        t        j                  dd
      S t"        j                  j!                  |
      }t$        j                  j'                  ||	|||       t$        j                  j                  |      j)                         }t$        j                  j                  |      D cg c]  }t+        |j,                         }}t/        |      }t+        |      t+        |      z  }|_        |j3                          t        t        j4                  dd
      S c c}w # t6        $ r0}t        dt9        |      it        j:                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r  rL   r   r   r  serviceprovider_idzservice provider id requiredrp  No service provider foundrw  zrating id requiredrx  review id requiredr*   r  r  )rw  rx  rv  r   r  ru  rG   r   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r&   r  r   r   floatrw  sumrb  r   rS   rT   r,   rV   )rW   rM   r   r  r   r   rL  provider_objrw  rx  r*   r  total_count
all_ratingfinal_ratingaveragerZ   s                    r1   r   z#addRatingReviewServiceProvider.post)  s   )V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8
F$?$?Sij**, ,oo

)
)*A
BB(()=>
F$?$?Sqrss<<&&-?A&NTTV<
F$?$?SnoppLLX&6
F$?$?SghiiLLX&6
F$?$?Sghii  .:
F$?$?Sklmm%%))z):;''..f^jrz  FQ.  S-55<<l<[aac;@\@d@d@k@k  ~J@k  AK  L  AK|**+  AK:  Lj/<u[117!<
6#5#5yQ
RR L 
 V
Is1v&v/T/T
UUVsX   CL& AL& "AL& /8L& (8L& !8L& BL& .L!
AL& !L& &	M/%MMMNr   r_   r3   r1   rJ  rJ  (  s    *Vr3   rJ  c                       e Zd Zd Zy)!deleteRatingReviewServiceProviderc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|st        t        j                  dd
      S t"        j                  j!                  ||j$                        j                         }|st        t        j                  dd
      S |j'                          t        t        j(                  dd
      S # t*        $ r0}t        dt-        |      it        j.                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r  rL   r   r   r  	review_idrN  )rD   r   zreview not foundrG   r   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r  rD   r  rS   rT   r,   rV   )	rW   rM   r   r  r   r   rY  r  rZ   s	            r1   r   z&deleteRatingReviewServiceProvider.postW  s   V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8
F$?$?Sij**, ,oo

)
)*A
BB||,9
F$?$?Sghii-5599YQYQ\Q\9]cce:
F$?$?Sefgg
6#5#5yQ
RR	 V
Is1v&v/T/T
UUVs2   CF% AF% "AF% 9+F% %	G.%GGGNr   r_   r3   r1   rW  rW  V  s    Vr3   rW  c                       e Zd Zd Zy)createConverstationUserc                 
   	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|st        t        j                  dd
      S t        j                  j                  |dd      j                         }|st        t        j                  dd
      S |j                  j!                  d      }|st        t        j                  dd
      S t"        j                  j!                  |      }	|	st        t        j                  dd
      S t$        j                  j                  ||      j                         }
|
r|
j&                  }nt)        |j*                        t)        |j*                        z   t)        |j,                        z   t)        |j,                        z   }t/        |      }t1        j2                  |       dj5                  |      }t6        j8                  j:                  j8                  j=                  |      }t$        j                  j=                  |||	      }|j>                  |_        tA        jB                         |_"        |jG                          t)        |j,                        t)        |j*                        dz   t)        |jH                        z   t)        |jJ                        d}tM        jN                  |      }t6        j8                  j:                  j9                  |j>                        jP                  j=                  t)        |j,                        |      }t)        |j,                        t)        |j*                        dz   t)        |jH                        z   t)        |jJ                        d}tM        jN                  |      }t6        j8                  j:                  j9                  |j>                        jP                  j=                  t)        |j,                        |      }|j>                  |_)        |j>                  |_*        |jG                          |j&                  }t        t        jV                  d|d      S # tX        $ r0}t        dt)        |      it        jZ                        cY d }~S d }~ww xY w) Nr   r~   r   r   r   r   r   r   r  rL   r   r   r  ro  z service provider id is required.T)rD   rq  ri   rM  r*   zBooking id is requiredr  r  )rv  r   )friendly_name)rv  r   r  r   )rD   r@  r?  )identity
attributesr   )rI   rJ   twilio_channel_sidr   ).r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r&   r  r`  r,   rt   rD   listr   shuffler   clientconversationsv1r   sidr   r  last_messager   ru   r   r  dumpsparticipantsuser_twilio_idservice_provider_twilio_idrS   rT   rV   )rW   rM   r   r  r   r   ro  service_provider_objr*   r"  existing_conversationr`  concatinate_namessuffle_stringconversation_nameconversationconversation_objuser_attributesuser_json_attributesuser_participantservice_provider_attributes service_provider_json_attributesservice_provider_participantrZ   s                           r1   r   zcreateConverstationUser.posts  s   SV#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8
F$?$?Sij**, ,oo

)
)*A
BB ))*?@
F$?$?Suvww,,--1DQRfj-kqqs
F$?$?Snopp  .:
F$?$?Sklmm""&&*&58
F$?$?Sfghh (//66H\ck6lrrt.AA/::;c(BUBU>VVY\]e]h]hYiilo  qE  qH  qH  mI  I*+M
NN=!.''	r}v-v.  $++22DX^fqy2{*6*:*:'$,LLN!x{{+3x7J7J3KC3OPST\TfTfPg3g!O  ::o6++bmL$$%lfc(++&2FfG	  (++?+B+B'C3OcOnOnKopsKstw  yM  yW  yW  uX  LX%,,-" (,zz2M'N$#)#7#7bmL$$%lfc.112>^f_	 ! '7&:&:#2N2R2R/)<< 6#5#5yfxy
zz	 V
Is1v&v/T/T
UUVs?   CT5 AT5 "AT5 08T5 )=T5 'MT5 5	U.>%U)#U.)U.Nr   r_   r3   r1   r[  r[  r  s	    TVr3   r[  c                       e Zd Zd Zy)createTokenc                    	 |j                   j                  d      }|st        t        j                  dd      S t
        j                  j                  |      }|st        t        j                  dd      S |j                  }t        t        t        t        |      }t        r!t        t              }|j                  |       t        j                   j"                  j%                  t              j&                  j)                         j+                  dd	d
      }||j-                         d}t        t        j.                  d|d      S # t0        $ r0}	t        dt3        |	      it        j4                        cY d }	~	S d }	~	ww xY w)Nr   zuser id is requiredrL   r  r   )r^  )service_sidTdefaultz5You have a new message in ${CONVERSATION}: ${MESSAGE})new_message_enablednew_message_soundnew_message_template)r^  r   zToken Created SuccessfullyrH   r   r   )rK   rO   r   r   r   r   r'   rD   r    account_sidapi_sid
api_secretchat_service_sidr   	add_grantrc  rd  re  servicesconfigurationnotificationsr5  to_jwtrS   rT   r,   rV   )
rW   rM   r   r   r^  r   
chat_grantnotificationr0  rZ   s
             r1   r   zcreateToken.post  s;   !V\\i(7
F$?$?Shijjll'*8
F$?$?Sefggkk8{7:xH5'78J	OOJ&&BHMMO
FP    <<>7 6#5#5Gckrs
tt	 V
Is1v&v/T/T
UUVs)   8E =E 9CE 	F%F<FFNr   r_   r3   r1   rz  rz    s    "Vr3   rz  c                       e Zd Zd Zy)userConverstationListingc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      t        j                  j                  |      }g }|D ]  }t         j"                  j$                  j#                  |j&                        j(                  j+                  dd      }	d}
d}d}|	D ]r  }|j,                  r1|j,                  }
t/        |j0                        dz   }|j0                  }@|j2                  sMd}
t/        |j0                        dz   }|j0                  }t |j4                  |j&                  |j6                  j8                  dz   |j6                  j:                  z   |j6                  j<                  |j6                  j4                  |j>                  j8                  dz   |j>                  j:                  z   |j>                  j<                  |j>                  j4                  |j@                  j4                  |j@                  jB                  |j@                  jD                  |
||d}|jG                  |        t        t        jH                  d|d      S # tJ        $ r0}t        dtM        |      it        jN                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r  rL   r   r   r  r  desc)orderlimitr*  filer   )rD   r`  ry  customer_imagecustomer_idservice_provider_nameservice_provider_imagero  r*   r  r  rg  timemessage_dater   rH   r   )(r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   r  rc  rd  re  r`  r   ra  bodyr   date_createdmediarD   r   rt   ru   r   rv  r  r  r  rm   rS   rT   r,   rV   )rW   rM   r   r  r   r   rd  conversation_listrq  r   rg  r  r  recordconversation_datarZ   s                   r1   rO   zuserConverstationListing.get  s   6V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8
F$?$?Sij**, ,oo

)
)*A
BB''..h.@=$|##	r}\445xt&t"	 
 LDL[[lv**+F2d((l
,,lv**+F2d((l  ??'::"''22S8<;L;L;V;VV#((//$$''*;;FFL|OlOlOvOvv+<<CC(99<<''**#++::%--??    ./I %J 6#5#5yXij
kk	 V
Is1v&v/T/T
UUVs,   CL C.L 4E%L 	M#%MMMNr[   r_   r3   r1   r  r    r  r3   r  c                       e Zd Zd Zd Zy)enableCustomerNotificationsc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  }t        t        j                   d|d      S # t"        $ r0}t        dt%        |      it        j&                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r  rL   r   r   r  r   rI   rJ   notification_settingr   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   notification_enablerS   rT   r,   rV   rW   rM   r   r  r   r   r  rZ   s           r1   rO   zenableCustomerNotifications.get-  s   V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8
F$?$?Sij**, ,oo

)
)*A
BB"66
6#5#5yh|}
~~	 V
Is1v&v/T/T
UUVs%   CD AD 	E%E EEc                 &   	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|st        t        j                  dd
      fS ||_        |j%                          t        t        j&                  d|d      S # t(        $ r0}t        dt+        |      it        j,                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r  rL   r   r   r  r  z notification setting is requiredr   r  r   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r  r   rS   rT   r,   rV   r  s           r1   r   z enableCustomerNotifications.post@  sR   V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8
F$?$?Sij**, ,oo

)
)*A
BB!,,**+AB
F$?$?Suvwxx"68==?
6#5#5yh|}
~~	 V
Is1v&v/T/T
UUVs+   CE AE #3E 	F %FFFNr   r_   r3   r1   r  r  ,  s    V&Vr3   r  c                       e Zd Zd Zy)approvalPendingWorkListc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      t        j                  j                  d|      }g }|D ]  }t         j                  j                  |j"                  |j$                        }	|	rd}
nd}
|j&                  |j(                  |j"                  |j$                  |j*                  j,                  dz   |j*                  j.                  z   |j*                  j0                  |j2                  |j4                  j6                  |j8                  |j:                  |j<                  |j>                  |
d}|jA                  |        t        t        jB                  d|d      S # tD        $ r0}t        dtG        |      it        jH                        cY d }~S d }~ww xY w)Nr   r~   r   r   r   r   r   r   r  rL   r   r   r  Approval_Pending)r  r   )r   rv  TFr   )rD   r*   r   r]  r^  r_  rZ  r  r  r  r  ra  r  rG   rH   r   )%r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   r&   r  r   r]  rD   r*   rh  rt   ru   r   r[  r  r@  r  r  r  ra  rm   rS   rT   r,   rV   )rW   rM   r   r  r   r   approval_objro   approver   r  rY   rZ   s                r1   rO   zapprovalPendingWorkList.getZ  s   'V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8
F$?$?Sij**, ,oo

)
)*A
BB''..@RZb.c<8w/77>>wjqj{j{>|LXX::%%"">>,,s2W^^5M5MMNN))--,,11((((,,]]H OOH+ , 6#5#5yX`a
bb	 V
Is1v&v/T/T
UUVs%   CH? E9H? ?	I8%I3-I83I8Nr[   r_   r3   r1   r  r  Y  s    (Vr3   r  c                       e Zd Zd Zy)approvalPendingWorkDetailsc                    	 t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S t"        j                  j                  ||d      }	|	s,t        t        j                  dd
t        j                        S g }
|	D ]  }i d|j$                  d|j&                  d|j(                  d|j*                  d|j,                  j.                  dz   |j,                  j0                  z   d|j,                  j2                  d|j4                  d|j6                  j8                  d|j:                  d|j<                  d|j<                  d|j>                  d|j@                  d|jB                  d|jD                  d |jF                  }|
jI                  |       ! t        t        jJ                  d!|
d"      S # tL        $ r0}t        d#tO        |      it        jP                        cY d }~S d }~ww xY w)$Nr   r~   r   r   r   r   r   r   r  rL   r   r   r  r*   zbooking_id is required.r  r.  booking not foundrD   r]  r^  r   r_  rZ  r  r  r  r  r  ra  r  complete_imagerG   rH   r   ))r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   r  rO   r&   rD   r*   r   r]  rh  rt   ru   r   r[  r  r@  r  r  r  r  ra  r  r  rm   rS   rT   r,   rV   )rW   rM   argskwargsr   r  r   r   r*   r  ro   r  rY   rZ   s                 r1   rO   zapprovalPendingWorkDetails.get  s   .V#G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8
F$?$?Sij**, ,oo

)
)*A
BB-:
F$?$?Slm&&( ( %%,,*H^p,q;
F$?$?Sfg&&( (8w
GJJG&&  '##	
 GNN--3gnn6N6NN W^^** w.. --22 W)) W)) W)) w-- '33 gmm   w--!H$ OOH' * 6#5#5yX`a
bb	 V
Is1v&v/T/T
UUVs3   CK A,K 2AK EK 	K>%K93K>9K>Nr[   r_   r3   r1   r  r    s    /Vr3   r  c                       e Zd Zd Zy)approvedDisapproveWorkc                 d   t        |      }||dk(  s|j                         dk(  rt        j                  d      t	        j
                  |t        j                  dg      }|d   }t        j                  j                  |d      j                         }|s,t        t        j                  d	d
t        j                        S |j                  dk(  rt        j                  d      |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S |j                  j!                  d      }|s,t        t        j                  dd
t        j                        S t"        j                  j                  ||d      j                         }|s,t        t        j                  dd
t        j                        S |dk(  rt        j                  j!                  |j$                  j&                        }	d|_        |j+                          d}
t-        t        j.                        }|j$                  j0                  }d}|
}d|
i}dd|
d}t3        |      j5                  |||||      }t6        j                  j9                  d |j:                  z   d!z   d"|	#       nt        j                  j!                  |j$                  j&                        }	d$|_        |j+                          d%}
t-        t        j.                        }|j$                  j0                  }d&}|
}d|
i}d'd(|
d}t3        |      j5                  |||||      }t6        j                  j9                  d |j:                  z   d)z   d"|	#       t        t        j<                  d*d
      S )+Nr   r~   r   r   r   r   r   r   r  rL   r   r   r  final_statuszfinal_status is requiredr*   r  r  r.  r  approvedr  r  z@Your booking completion is approved successfully by the customerzBooking Completion Approvedr?  booking_completed_approvedzBOOKING COMPLETED APPROVEDr  r  r  r   z, has been approved successfully by the user.r!  r"  r  z6Your booking completion is disapproved by the customerzBooking Completion Disapprovedbooking_completed_disapprovedzBOOKING COMPLETED DISAPPROVEDz" has been disapproved by the user.rG   )r   r   r   r   r   r   r
   r   r   r'   rQ   rR   r   r   r   rK   rO   r&   rh  rD   r  r   r,   r  r   r   r  r%  r   r*   rS   )rW   rM   r   r  r   r   r  r*   r  rj  r   r  r  r  r  r  r  r  s                     r1   r   zapprovedDisapproveWork.post  s   #G,5mu%++-2*=

)
)*g
hhZZx22yI7Y7ll!!Wa!8>>@8
F$?$?Sij**, ,oo

)
)*A
BB,,"">2<
F$?$?Smn**, ,   .:
F$?$?Skl&&( (  ''..Jh`r.syy{;
F$?$?Sfg&&( ( j !!{'9'9'<'<!=J!,KPGX112J!((55O1MLW! ;0L Z0EEVe  vC  R^  my  TmE  nF&&/@AWAW/W  YG  0G  Mb  ku&  v !!{'9'9'<'<!=J!*KFGX112J!((55O4MLW! >3L Z0EEVe  vC  R^  my  TmE  nF&&/@AWAW/WX|/|  CX  ak&  l
6#5#5yQ
RRr3   Nr   r_   r3   r1   r  r    s	    BSr3   r  )wrest_framework.viewsr   rest_framework.responser   rest_frameworkr   user_panel.modelsr   r   r	   django.confr
   passlib.hashr   r   r  admin_panel.modelsrest_framework.authenticationr   r   rest_framework_simplejwt.tokensr   !rest_framework_simplejwt.backendsr   django.core.mailr   r   django.shortcutsr   r   r   django.corer   django.template.loaderr   mathpytzr   django.contribr   admin_panel.functionsdjango.utils.timesincer   django.db.modelsr   r   ast	functionspyfcmr   csvtwilio.jwt.access_token.grantsr   r   r   twilio.restr   twilio.jwt.access_tokenr    r~   r!   TWILIO_ACCOUNT_SIDr  TWILIO_AUTH_TOKEN
auth_tokenTWILIO_CHAT_SIDr  TWILIO_SYNC_SIDsync_service_sidTWILIO_API_SIDr  TWILIO_API_SECRETr  rc  r2   r:   r<   ra   rf   rr   r   r   r   r   r   r	  r  r  r'  r2  r7  r<  rE  rX  rm  r  r  r  r  r  r  r  r  r  r  r(  r+  r5  r@  rF  rJ  rW  r[  rz  r  r  r  r  r  r_   r3   r1   <module>r     sP   ( , !   "   8    B 
 8 : 3 % : :  3 ! ! # # ,    
  ! 
 
  /  ((''
++ ++ 

!
!&&
	Z	( Ow O*O O"O O(5O7 5Ot8G 8(<O <O~H H6"9 "9HrO rOjO7 O8"O "OH'O 'OTOw O6k' k$Og O6Og O8*O *OZ#O' #OJ6O 6OtO' O>%V' %VPV' V@VW V<7V' 7Vr8V 8Vv;Vw ;V~9Vw 9Vx<Vw <V~FTG FTR/V /VfIVG IVX-Vw -V`*VW *VZ&V &VR+VW +V\V V8UVg UVr#V' #VL8Vw 8Vv)V' )VZ)Vg )VX0V 0VhCSW CSr3   